web-dev-qa-db-ja.com

最初のgitコミットメッセージを言い換えるにはどうすればよいですか?

3つのコミットを含む作業ツリーがあります。

➜〜myproject git:(master)git log

commit a99cce8240495de29254b5df8745e41815db5a75
Author: My Name <[email protected]>
Date:   Thu Aug 16 00:59:05 2012 +0200

    .gitignore edits

commit 5bccda674c7ca51e849741290530a0d48efd69e8
Author: My Name <[email protected]>
Date:   Mon Aug 13 01:36:39 2012 +0200

    Create .gitignore file

commit 6707a66191c84ec6fbf148f8f1c3e8ac83453ae3
Author: My Name <[email protected]>
Date:   Mon Aug 13 01:13:05 2012 +0200

    Initial commit (with a misleading message)

reword 私の最初のコミットのコミットメッセージ(6707a66)

➜〜myproject git:(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)を修正します。

最初のコミット(誤解を招くメッセージ付き)

…適切なものに。

当然のことながら、最初のコミットには明らかにparentコミットがないため、上記の試みは成功しませんでした。 (そして、rebaseの場合、rewordにしたいものに次に古いコミットpriorを参照する必要があります。 、 正しい?)

したがって、私の質問の要点は、他の方法でこれを達成できますか?

92
Henrik

git rebase -i --rootを実行

(特定のコミットを指すのではなく、rootを指す)

この方法では、ルートコミットも含まれ、他のコミットと同様にrewordできます。

--rootオプションはGit v1.7.12(2012)で導入されました。それ以前は、唯一のオプションはfilter-branchまたはamendを使用することでしたが、これは通常、実行がより困難です。

注: この同様の質問と回答 も参照してください。

176
florisla

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
12
Douglas

いつでも使用できます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
12
fork0