マイクロコミットを隠すためにどれを使うべきですか?
git merge --squash
とgit merge --no-ff --no-commit
の唯一の違いは、他の親の否認ですか?
これらのオプションは、個別の目的のために存在します。リポジトリの最終的な結果は異なります。
トピックブランチでの開発が完了した後、リポジトリは次のようになっていると仮定します。
--squash
マスターをチェックアウトしてからgit merge --squash topic; git commit -m topic
、あなたはこれを得る:
--no-ff --no-commit
代わりに、git merge --no-ff --no-commit; git commit -m topic
、あなたはこれを得る:
マイクロコミットを非表示にしたい場合(つまり、リポジトリからdeleteを意味する)、--squash
。なぜなら、上の画像でわかるように、つぶしていないなら、あなたは本当にマイクロコミットメントを隠していないからです。また、通常、トピックブランチを世界にプッシュしません。トピックブランチは、トピックが成熟するためのものです。
履歴にすべてのマイクロコミットを保持したいが、それらを別の開発ライン(上記の画像の緑のライン)に残したい場合は、--no-ff --no-commit
。ただし、a)これはブランチではなく、b)コミットのもう1つの親であるため、Gitでは実際には何も意味しないことに注意してください。
本当に理解したい場合は、 Git Branching-What a Branch is を参照してください。