74

マイクロコミットを非表示にするために使用する必要があるのはどれですか?

唯一の違いはgit merge --squashgit merge --no-ff --no-commit他の親の否定ですか?

4

1 に答える 1

75

違い

これらのオプションは、別の目的のために存在します。あなたのリポジトリは異なったものになります。

トピック ブランチでの開発が完了した後のリポジトリが次のようになっているとします。

ここに画像の説明を入力


--squash

master をチェックアウトしてから をチェックアウトするとgit merge --squash topic; git commit -m topic、次のようになります。

ここに画像の説明を入力


--no-ff --no-commit

代わりに、これを行うgit merge --no-ff --no-commit; git commit -m topicと、次のようになります。

ここに画像の説明を入力

マイクロコミットを隠す

本当にマイクロコミットを非表示にしたい (つまり、リポジトリから削除--squashしたい) 場合は、 . 上の画像でわかるように、スカッシュしないとマイクロコミットを実際に隠しているわけではないからです。さらに、通常、トピックブランチを世界にプッシュすることはありません。トピック ブランチは、トピックが成熟するためのものです。

履歴にすべてのマイクロコミットを含めたいが、それらを別の開発ライン (上の画像の緑のライン) に残す場合は、 を使用します--no-ff --no-commit。ただし、a) これはブランチではなく、b) コミットのもう 1 つの親であるため、Git では実際には何も意味しないことを覚えておいてください。

本当に理解したい場合は、Git Branching - What a Branch Isを参照してください。

于 2012-08-16T09:25:56.467 に答える