【发布时间】:2016-08-11 09:37:07
【问题描述】:
注意:与this one 类似的问题,但有一些重要的变化。
给定提交 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,但我不知道如何:- 将更改应用到特定的提交:
rewrite-commit-date函数中使用的test在env-filter中使用,但我不会在这里做env-filter,因为我不想更改任何相关的内容提交环境,但提交消息。 - 如何强制提交消息?
--msg-filter需要原始提交消息。我不关心原始提交消息。有--force-msg-filter或类似的吗?
- 将更改应用到特定的提交:
我正在寻找的内容类似于this,但有一些注意事项:
- 不要将更改应用于一系列提交,而是应用于特定提交
- 我不关心原始提交消息,因为我想完全覆盖它
【问题讨论】:
标签: git git-commit git-rewrite-history git-amend