web-dev-qa-db-ja.com

Gitでルートコミットを編集しますか?

後のコミットからメッセージを変更する方法があります:

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

最初のコミット(親を持たない)のコミットメッセージをどのように変更できますか?

295
13ren

きれいな作業ツリーがあると仮定すると、次のことができます。

# 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
252
CB Bailey

Gitバージョン 1.7.12 以降、使用できるようになりました

git rebase -i --root
512
ecdpalma

ecdpalma's answer を展開するには、--rootオプションを使用して、ルート/最初のコミットを書き換えたいことをrebaseに伝えることができます。

git rebase --interactive --root

次に、ルートコミットがリベースTODOリストに表示され、編集または書き換えを選択できます。

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

これは--rootの説明です the Git rebase docs (emphasis mine):

<branch>で制限する代わりに、<upstream>から到達可能なすべてのコミットをリベースします。 これにより、ブランチ上のルートコミットをリベースできます

61
user456814

より高い評価の回答の代替案を提供するために:

リポジトリを作成していて、将来「最初の」実際のコミットに基づいてリベースすることを事前に知っている場合、最初に明示的な空のコミットを行うことで、この問題を完全に回避できます。

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

それから「本当の」コミットを始めます。その後、そのコミットの上に標準的な方法で簡単にリベースできます。たとえば、git rebase -i HEAD^

12
jakub.g

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
4
Alexander Groß