これだけ知っとけ!「git rebase -i ブランチ名」と「git merge –squash ブランチ名」の使い分け

表題の通り。GitってSourceTreeとか実際に使いながら理解すれば簡単なんだけど、ネットで検索するだけど全然理解できないんですよね…。

「git rebase -i ブランチ名」は間違ってコミットした時に使いやすい

逆に言うと、複数あるコミットを一気に一つにまとめたい!という要望には適応しにくい。なんかこの辺が混在した情報が多い気がするんですよね。例えばリベースって

pick 12ca2a5 トップ直した
pick 8nfa9fa 詳細直した
pick vdia9ag お問い合わせ直した
pick re98a7u プライバシーポリシー直した
pick fgyr8ae プライバシーポリシー直した
pick 7ghagfa 新着情報直した

# Rebase bdd3996..bd66e17 onto bdd3996
#
# 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
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

みたいになってるとして、全部ひとまとめにしようと思うと、一番上のpick以外を全てsquashに変更してコミットする必要があり面倒だから。git rebase -iは、この例だと「プライバシーポリシー直した」のコミットを二回行ってるのを一つにするような修正作業。そもそも後述するgit merge –squashを使えばそんなに利用頻度は高くないんじゃないかと思ってます。多分ですけど。

「git merge –squash ブランチ名」はdevelopブランチのコミットを一つにまとめてmasterブランチにコミットするのに使いやすい

逆に言うと、間違ってコミットしちゃったから一旦戻すか!という要望には適応しにくい。 というかこれシンプルなので一番使いやすい気がしますね。

  1. $ git clone
  2. $ git branch develop
  3. ローカルの develop 上で開発(後でまとめるんでコミットも雑にやってOK)
  4. ひと通り開発を終え、リリースするタイミングになりました。
  5. $ git checkout master
  6. $ git merge –squash develop
  7. 全部マージされるので、うまいことコメント付けてcommitしてpush