➜~myprojectgit :( master)git log
commit a99cce8240495de29254b5df8745e41815db5a75
Author: My Name <my@mail.com>
Date: Thu Aug 16 00:59:05 2012 +0200
.gitignore edits
commit 5bccda674c7ca51e849741290530a0d48efd69e8
Author: My Name <my@mail.com>
Date: Mon Aug 13 01:36:39 2012 +0200
Create .gitignore file
commit 6707a66191c84ec6fbf148f8f1c3e8ac83453ae3
Author: My Name <my@mail.com>
Date: Mon Aug 13 01:13:05 2012 +0200
Initial commit (with a misleading message)
reword
我的首次提交的提交消息(6707a66)➜~myprojectgit :( master)git rebase -i 6707
(...进入vim)
pick 5bccda6 Create .gitignore file
pick a99cce8 .gitignore edits
# Rebase 6707a66..a99cce8 onto 6707a66
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
在这种情况下,我希望纠正(git用语为reword
)有问题的提交消息:
初始提交(带有误导性消息)
...适当的事情。
不出所料,我上面的尝试没有成功,因为第一次提交显然没有任何父提交。 (当你rebase
时,你需要将之前之前的提交引用到你想要reword
的那个,对吗?)
因此,我的问题的要点是,您可以通过任何其他方式实现这一目标吗?
答案 0 :(得分:166)
执行git rebase -i --root
(指向root
而不是指向特定提交)
这样,根提交也包含在内,您可以像任何其他提交一样reword
。
Git --root
(2012)中引入了v1.7.12
选项。在此之前,唯一的选择是使用filter-branch
或amend
,这通常更难做到。
注意:另请参阅this similar question and answer。
答案 1 :(得分:12)
您始终可以使用git filter-branch --msg-filter
:
git filter-branch --msg-filter \
'test $GIT_COMMIT = '$(git rev-list --reverse master |head -n1)' &&
echo "Nice message" || cat' master
答案 2 :(得分:12)
pcreux's gist有一个很好的方法可以改写第一次提交:
# You can't use rebase -i here since it takes the parent commit as argument.
# You can do the following though:
git checkout FIRST_COMMIT_SHA && git commit --amend && git rebase HEAD master