有一些方法可以从以后的提交中更改消息:
git commit --amend # for the most recent commit
git rebase --interactive master~2 # but requires *parent*
如何更改第一个提交(没有父级)的提交消息?
有一些方法可以从以后的提交中更改消息:
git commit --amend # for the most recent commit
git rebase --interactive master~2 # but requires *parent*
如何更改第一个提交(没有父级)的提交消息?
假设您有一个干净的工作树,您可以执行以下操作。
# checkout the root commit
git checkout <sha1-of-root>
# amend the commit
git commit --amend
# rebase all the other commits in master onto the amended root
git rebase --onto HEAD HEAD master
要扩展ecdpalma 的答案,您现在可以使用该--root
选项来告诉rebase
您要重写根/首次提交:
git rebase --interactive --root
然后根提交将显示在变基 TODO 列表中,您可以选择编辑或改写它:
reword <root commit sha> <original message>
pick <other commit sha> <message>
...
这是--root
来自Git rebase 文档的解释(强调我的):
重新设置所有可从 到达的提交
<branch>
,而不是用<upstream>
. 这允许您在分支上重新设置根提交。
只是为了提供更高评分答案的替代方案:
如果您正在创建一个 repo,并且预先知道您将在未来的“第一次”实际提交之上重新定位,那么您可以通过在开始时进行明确的空提交来完全避免这个问题:
git commit --allow-empty -m "Initial commit"
然后才开始做“真正的”提交。然后,您可以轻松地以标准方式在该提交之上重新设置基准,例如git rebase -i HEAD^
你可以使用git filter-branch
:
cd test
git init
touch initial
git add -A
git commit -m "Initial commit"
touch a
git add -A
git commit -m "a"
touch b
git add -A
git commit -m "b"
git log
-->
8e6b49e... b
945e92a... a
72fc158... Initial commit
git filter-branch --msg-filter \
"sed \"s|^Initial commit|New initial commit|g\"" -- --all
git log
-->
c5988ea... b
e0331fd... a
51995f1... New initial commit