注意:与此类似的问题,但有一些重要的变化。
给定提交 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
这个,但我不知道如何:- 将更改应用到特定的提交:函数中使用
test
的是 in ,但我不打算在这里做,因为我不想更改与提交环境相关的任何内容,而是更改提交消息。rewrite-commit-date
env-filter
env-filter
- 如何强制提交消息?需要原始
--msg-filter
提交消息。我不关心原始提交消息。有没有--force-msg-filter
类似的?
- 将更改应用到特定的提交:函数中使用
我正在寻找的内容与此类似,但有一些警告:
- 不要将更改应用于一系列提交,而是应用于特定提交
- 我不关心原始提交消息,因为我想完全覆盖它