これだけ知っとけ!「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ブランチにコミットするのに使いやすい
逆に言うと、間違ってコミットしちゃったから一旦戻すか!という要望には適応しにくい。 というかこれシンプルなので一番使いやすい気がしますね。
- $ git clone
- $ git branch develop
- ローカルの develop 上で開発(後でまとめるんでコミットも雑にやってOK)
- ひと通り開発を終え、リリースするタイミングになりました。
- $ git checkout master
- $ git merge –squash develop
- 全部マージされるので、うまいことコメント付けてcommitしてpush