たとえば 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(+)
Uncommitedな状態となるので最後にコミットします。
$ git commit [dev_#10 f17ada7] Squashed commit of the following: 1 file changed, 6 insertions(+)
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 の修正をマージし*1、最後に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(+)
devブランチにdev_#10がマージされました。
この記事は
現在のアクセス:2522