NHN Cloud Meetup 編集部
NHN Cloudの技術ナレッジやお得なイベント情報を発信していきます
2015.11.30
27,761
正確には、git squashというコマンドはありません。interactive rebaseをするのに必要なコマンドの1つです。
時折、以下のように1つの作業を何回もコミットすることがあります。
$ git log --pretty=oneline d442427eae836f15e94f5df0445c70081df79a3e Task 3/3 26395437be53e4e6e68f83aa98560ef93838aaa0 Task 2/3 7c6535580a038e9dcfaa72a98e04848812da9aee Task 1/3 2260a88777c247c31170ff6074d95569ac557afb Initial commit $
Task 1/3〜3/3を1つのcommitにまとめてしまいたいですね。
このような時に使用するのが、interactive rebaseです。
$ git rebase -i HEAD~3
(直近の3つのコミットをinteractive rebaseするという意味です)
環境によって異なりますが、通常はviエディタを開いて、次のようなメッセージを表示します。
pick 7c65355 Task 1/3 pick 2639543 Task 2/3 pick d442427 Task 3/3 # Rebase 2260a88..d442427 onto 2260a88 # # 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
上の3行を次のように変更した後、保存(:wq)を押すと、
pick 7c65355 Task 1/3 squash 2639543 Task 2/3 squash d442427 Task 3/3
他のviウィンドウが表示され、コミットメッセージをリライトできます。
pick 7c65355 Task 1/3 Rebasing (3/3) # This is a combination of 3 commits. # The first commit's message is: Task 1/3 # This is the 2nd commit message: Task 2/3 # This is the 3rd commit message: Task 3/3 # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # rebase in progress; onto 2260a88 # You are currently editing a commit while rebasing branch 'master' on '2260a88'. # # Changes to be committed: # modified: README.md # ~
そして再び確認すると、このようになります。
$ git log --pretty=oneline 9833ca676c5a24361c1cc36fb173746328dfac3a Task 1/3 ~ 3/3 2260a88777c247c31170ff6074d95569ac557afb Initial commit
参考: