在Git中编辑根提交?

有几种方法可以更改以后提交的消息:

git commit --amend                    # for the most recent commit
git rebase --interactive master~2     # but requires *parent*

如何更改第一次提交(没有父文件)的提交消息?

55006 次浏览

你可以使用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

假设您有一个干净的工作树,您可以执行以下操作。

# 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列表中,你可以选择编辑或改写它:

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

下面是来自Git rebase文档--root的解释(强调我的):

将所有可从<branch>到达的提交重新赋基,而不是使用<upstream>来限制它们。这允许你在一个的分支上重新建立根提交的基础

只是为了提供一个高评分答案的替代方案:

如果你正在创建一个repo,并且事先知道你将在未来的“第一次”实际提交的基础上进行重写,你可以通过在开始时显式的空提交来避免这个问题:

git commit --allow-empty -m "Initial commit"

然后才开始执行“真正的”提交。然后,你可以很容易地在标准提交的基础上重新赋基,例如git rebase -i HEAD^