gitを使っていて、間違ってコミットしたファイルを修正したコミットを、後からくっつける(正しく作ってコミットしたときと同じにする)方法。
概要としては、git rebase -iを使い、特定のコミットに戻した後、interactiveにコミットを操作する。
以下、手順。
1) 状態確認
git logで、状態を確認する。
$ git log --oneline
68af727 Write CCC →でも他のコミットをしてしまった
719560b Write BBB (Retry) →間違いに気づいてまたコミットした
92746af Write BBB →ここでコミットしちゃったんだけど
585c5d6 Write AAA
84041cf Created initial files.
「Write BBB」で誤って、「Write BBB (Retry)」で修正をして、コミットしたのを、「Write BBB」に統合する。(Retry)の時点でうっかりamendを忘れた感じ。
2) rebase -iで「Write AAA」の時点に戻す
git rebase -iをすると、指定したコミットから後の処理をeditorで指定してリプレイできる。
$ git rebase -i 585c5d6
エディタが開くので、(Retry)の「pick」の部分を「f」に変更する。
pick 585c5d6 Write AAA
pick 92746af Write BBB
pickf 719560b Write BBB (Retry) ←修正
pick 68af727 Write CCC
# Rebase 84041cf..68af727 onto 84041cf
#
# 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 ←fはfixup
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
「f」でなく、「s」にすると、コミットログを修正できる。
保存してエディタを終了すると、修正される。
[detached HEAD a7fb63f] Write BBB
1 files changed, 1 insertions(+), 1 deletions(-)
Successfully rebased and updated detached HEAD.
3) 確認
くっついている。
$ git log --oneline
d519a6c Write CCC
a7fb63f Write BBB
585c5d6 Write AAA
84041cf Created initial files.
git本当に難しい...