#topicpath
----

** Squashなマージ
たとえば dev_#10_spike というブランチで試行錯誤的にコミットを続けてて、キレイに決まった時にそれらを一つのコミットとして dev_#10 へ反映したい時があります。そんなときSquashなマージを使います。 [#j5b04fae]


** コミットをまとめるための、Squashなマージ [#j5b04fae]


#ref(squash01.png)

たとえば dev_#10_spike というブランチで試行錯誤的にコミットを続けてて、キレイに決まった時にそれらを一つのコミットとして dev_#10 へ反映したい時があります。そんなときSquashなマージを使います。


 $ git checkout dev_#10
 Switched to branch 'dev_#10'

 $ git merge --squash dev_#10_spike
 Updating f1013a9..213629c
 Fast-forward
 Squash commit -- not updating HEAD
  file1.txt | 6 ++++++
  1 file changed, 6 insertions(+)

#ref(squash02.png)

Uncommitedな状態となるので最後にコミットします。

 $ git commit
 $ git commit -a
 [dev_#10 f17ada7] Squashed commit of the following:
  1 file changed, 6 insertions(+)

#ref(squash03.png)

spikeはいらないので削除します。
 $ git branch -d dev_#10_spike
 error: The branch 'dev_#10_spike' is not fully merged.
 If you are sure you want to delete it, run 'git branch -D dev_#10_spike'.

 $ git branch -D dev_#10_spike     <- spike自体はコミットされてないので、-Dで強制削除。
 Deleted branch dev_#10_spike (was 213629c).

ちなみにこの例では、dev_#10にまとめてマージされた変更は dev にマージしてもらう想定。だがしかしdevブランチは誰かコミットしているようで、リビジョンが変更されています。

この場合は落ち着いて、dev_#10 に dev の修正をマージし((ココはrebaseが正しいかどうか要検討))、最後にdev_#10をdevへマージします。

 $ git branch
   dev
 * dev_#10
   master

 $ git merge dev
 Merge made by the 'recursive' strategy.
  file2.txt | 1 +
  1 file changed, 1 insertion(+)
  create mode 100644 file2.txt
 
 $ git checkout dev
 Switched to branch 'dev'
 $ git merge dev_#10
 Updating ac64ac5..a9f06e8
 Fast-forward
  file1.txt | 6 ++++++
  1 file changed, 6 insertions(+)

#ref(squash04.png)

devブランチにdev_#10がマージされました。

**関連リンク [#f229281c]
-[[7. merge --squash【チュートリアル3 コミットを書き換えよう!】 | サルでもわかるGit入門>http://www.backlog.jp/git-guide/stepup/stepup7_7.html]]


----
この記事は
#vote(おもしろかった[1],そうでもない[0])

#comment

#topicpath

SIZE(10){現在のアクセス:&counter;}


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS