コミットをまとめるための、Squashなマージ †たとえば 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 -a [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がマージされました。 関連リンク †この記事は 現在のアクセス:2790 |