dan*_*ast 11 git git-amend git-commit git-rewrite-history
注:类似的问题,因为这一个,但也有一些重要的变化.
在给定提交ID的情况下,我有以下函数来重写提交的日期:
rewrite-commit-date () {
local commit="$1"
local newdate="$2"
newdate="$(date -R --date "$newdate")"
echo ">>>> Rewriting commit $commit date: $newdate"
git filter-branch --env-filter \
"if test \$GIT_COMMIT = '$commit'
then
export GIT_AUTHOR_DATE
export GIT_COMMITTER_DATE
GIT_AUTHOR_DATE='$newdate'
GIT_COMMITTER_DATE='$newdate'
fi" &&
rm -fr "$(git rev-parse --git-dir)/refs/original/"
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试实现类似的功能rewrite-commit-message
来更改提交消息.我想要的是:
rewrite-commit-message
接受两个参数:和commit_id
,和new_commit_message
commit_id
知道哪个提交更改git commit --amend
,因为这与旧提交有关(不一定与最近的提交有关)git push -f
filter-branch
它,但我不知道如何:
test
在所使用的rewrite-commit-date
功能是用来在env-filter
,但我不会做env-filter
在这里,因为我不希望改变有关提交环境中任何事物,但提交信息.--msg-filter
需要原始的提交信息.我不关心原始提交消息.有没有--force-msg-filter
?我所寻找的是类似这样,但也有一些注意事项:
这个小脚本的工作原理如下:
这将从提交到分支的尖端重写您的历史记录.因为你在问题中说这不是问题,所以这符合条件.
您的提交包含在master
分支中.您可以通过将分支名称作为另一个参数传递来轻松更改此设置,但更好地将其提交到分支中.您可能应该为此构建一些验证,可能使用git rev-parse --abbrev-ref HEAD
或者也许git branch --all --contains <commit>
无需再费周折:
#!/bin/bash
change-commit-msg(){
commit="$1"
newmsg="$2"
branch="master"
git checkout $commit
git commit --amend -m "$newmsg"
git cherry-pick $commit..$branch
git branch -f $branch
git checkout $branch
}
Run Code Online (Sandbox Code Playgroud)
git init
echo init > a && git add . && git commit -m "init"
echo another > a && git commit -am "another"
echo lastly > a && git commit -am "lastly"
git log --graph --oneline --all --decorate
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)* bca608c (HEAD -> master) lastly * 4577ab5 another * b3d018c init
change-commit-msg 4577ab5 "something else"
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)* c7d03bb (HEAD -> master) lastly * 3ec2c3e something else * b3d018c init
归档时间: |
|
查看次数: |
3870 次 |
最近记录: |