2

次のシナリオでの Git のマージについてお聞きしたいと思います。

branchA  -*-*-*-*-*
                   \
            branchB *-*-*-*

この場合、git マージを実行して次の結果を取得することは可能ですか?

branchA  -*-*-*-*-*---------*
                   \       /
            branchB *-*-*-*

私が取得したいのは、branchB からのすべての変更を組み込んだ、branchA で単一のマージ コミットを行うことです。git merge コマンドに --squash オプションがあることは知っていますが、それが標準のマージと 100% 同等になるかどうかはわかりませんでした。

したがって、早送りだけではなく、ブランチ トポロジを防止できます。

助けてくれてありがとう!

4

2 に答える 2

3

git merge branchb --no-ff(から) を試してくださいbranchagit-merge(1)から

--no-ff

マージが早送りとして解決される場合でも、マージ コミットを作成します。

git が現在の HEAD (フォームをマージする場所であるため、ブランチ A) がブランチ B のコミットの祖先に過ぎず、ブランチ A で並行して行われた変更がないことを認識した場合でも、早送りを防ぎます。 .

于 2013-03-29T13:12:37.733 に答える
1

いいえ、ブランチからのすべての変更を組み込む実際のマージ コミットを生成することはできません。git merge --squash変更を含む単一のコミットを生成しますが、マージコミットにはなりません。

Git コミットは、以前のコミットからの変更ではなく、特定の時点でのリポジトリの完全な状態を記録します。したがって、コミットが作成されたときではなく、後で履歴を調べるときに違いが生成されます。

ただし、git commit --no-ff branchBマージを作成するために使用すると、新しいコミットを作成せずに早送りマージを実行できる場合でも、コミットが確実に作成されます。次に、それを使用git log -m --first-parentすると、branchB で行われたコミットが無視され、それらの変更がすべてそのマージ コミットによって導入されたように見えます。この-mオプションにより、マージ コミットの完全な差分が表示されます (差分が別の方法で実行されている場合)。表示されます)。

于 2013-03-29T13:20:49.777 に答える