web-dev-qa-db-ja.com

Git merge --squashと--no-commitの違い

タイトルにあるように、git merge --squashgit merge --no-commitの違いについてはあまり明確ではありません。

git mergeのヘルプページを理解している限り、両方のコマンドは更新された作業ツリーに残り、そこで編集してから最終コミット(または複数のコミット)を行うことができます。

誰かがこれら2つのオプションの違いを明確にできますか?いつ他の代わりに一方を使用しますか?

55
quaylar
git merge --no-commit

これは通常のマージと似ていますが、マージコミットは作成しません。このコミットはマージコミットになります。履歴を見ると、コミットは通常のマージとして表示されます。

git merge --squash

これにより、マージコミットを作成せずに、変更が作業ツリーにマージされます。マージされた変更をコミットすると、ブランチでの新しい「通常の」コミットのようになります。履歴にマージコミットはありません。マージされたすべての変更についてチェリーピックをしたようなものです。

75
ralphtheninja