d.sunnyone.org
sunnyone.org

ページ

2012-06-20

Gitで失敗コミット+修正コミットをひとつのコミットにする(git rebase -i)

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本当に難しい...






0 件のコメント:

コメントを投稿