`--squash` と `--no-ff --no-commit` の違いは何ですか? 質問する

`--squash` と `--no-ff --no-commit` の違いは何ですか? 質問する

マイクロコミットを非表示にするにはどれを使用すればよいでしょうか?

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

ベストアンサー1

違い

これらのオプションは別々の目的のために存在します。リポジトリの最終的な結果は異なります。

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

ここに画像の説明を入力してください


--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。上の画像からわかるように、squash を行わないとマイクロコミットを実際に隠すことはできません。また、トピック ブランチを一般に公開することは通常ありません。トピック ブランチはトピックを成熟させるためのものです。

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

参照Git ブランチ - ブランチとは何か本当に理解したいのであれば。

おすすめ記事