2012-03-07 11 views
48

タイトルによると、git merge --squashgit merge --no-commitの違いについてはっきりしていません。Git merge --squashと--no-commitの相違点

git mergeのヘルプページを理解していれば、両方のコマンドを使用して、編集してから最後のコミット(または複数のコミット)を行うことができます。

誰かが2つのオプションの違いを明確にすることはできますか?いつ他のものの代わりに1つを使うのですか?

答えて

65
git merge --no-commit 

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

git merge --squash 

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

+0

これで、マージコミットはどのように履歴に表示されますか?私はコミットメッセージを編集できるので、どのようにそれがマージコミットであることが分かりますか? – quaylar

+2

@quaylarマージコミットは、複数の親を持っている点を除いて、本当に特別なコミットではありません。あなたは 'git log --parents'(例えば、' git log --merges'はそのようなコミットだけを表示します)を使って、親のコミットを見ることができます。 –

+5

@PhilippWendlerだから本質的には:私はいつも歴史を見て、このコミットがマージの結果であることを知っていた(このマージに寄付されたブランチの情報も保持されていますか? --squashを使用すると、このコミットがマージの結果であったことを知る方法がありません。私はそれを正しく理解していますか? – quaylar

関連する問題