在Git中编辑根提交?

有一些方法可以更改以后提交的消息:

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 

从Git 1.7.12版本开始,你现在可以使用

 git rebase -i --root 

要扩展ecdpalma的答案 ,现在可以使用--root选项来告诉你想要重写根/第一次提交的rebase

 git rebase --interactive --root 

然后根提交将出现在rebase TODO列表中,您可以select编辑或重新指定它:

 reword <root commit sha> <original message> pick <other commit sha> <message> ... 

这是根据Git rebase docs (重点是我的)的解释:

重申所有从<branch>可达的提交,而不是用<upstream>限制它们。 这允许您重新分支分支上的根提交

另一种避免这个问题的方法是,如果你知道在未来的“第一次”提交之前将要重新定义,那么在开始时要做一个空的提交:

 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