1. ホーム
  2. git

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

2023-10-14 01:23:49

質問

マイクロコミットを隠すには、どれを使うべきですか?

の違いだけですか? git merge --squashgit merge --no-ff --no-commit 相手の両親の否定?

どのように解決するのですか?

相違点

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

トピックブランチでの開発が終わった後、あなたのリポジトリがこのようになったとします。


--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のブランチ - ブランチとは何か をご覧ください。