更改特定提交的提交消息
注:与此类似的问题,但有一些重要的变化。
给定提交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/"
}
我试图实现类似的函数rewrite-commit-message
来更改提交消息。 我想要的是:
rewrite-commit-message
接受两个参数: commit_id
和new_commit_message
commit_id
足以知道要更改哪个提交 git commit --amend
,因为这涉及到旧的提交(不一定是最近的提交) git push -f
filter-branch
,但我不确定如何: env-filter
使用了rewrite-commit-date
函数中使用的test
,但我不打算在这里执行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
}
演示
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
* bca608c (HEAD -> master) lastly
* 4577ab5 another
* b3d018c init
change-commit-msg 4577ab5 "something else"
* c7d03bb (HEAD -> master) lastly
* 3ec2c3e something else
* b3d018c init
链接地址: http://www.djcxy.com/p/19513.html