memo.xight.org

日々のメモ

git の branch をまるごと squash する

Summary

Pull Requestの際など、 branch をまとめて squash したいときの方法。

$ git branch -M feat tmp_squash  # ブランチ feat を tmp_squash にリネーム
$ git checkout dev
$ git checkout -b feat           # devブランチをベースにfeatを作り直す
$ git merge --squash tmp_squash  # squashで1つの変更として取り込む
$ git commit -a
$ git branch -D tmp_squash       # 一時作成したブランチ tmp_squash を削除
$ git push my_repo feat -f       # remoteと食い違うので -f オプションを付けて push


ブランチのマージのベストプラクティス

ローカル(自分用) -> ローカル (リモート用) merge --squash
リモート -> ローカル (リモート用) pull --rebase
ローカル(リモート用) -> ローカル (自分用) rebase
ローカル(リモート用) -> ローカル (リモート用) merge --no-ff

Reference

Git - ブランチをまるっとsquashする - Qiita
http://qiita.com/kumagi/items/216f0d317a0ad1b1cbe3

Git のマージについて、自分的まとめ - tanaka51のブログ
http://tanaka51.hateblo.jp/entry/20120530/1338386845