1

Nvieのgitブランチモデルに従って、同じ「release」ブランチを両方にマージした後、「develop」と「master」がそれぞれ1つずつ先行し、1つ遅れてしまうのはなぜですか?同じ「リリース」ブランチがそれぞれにマージされている場合、マスターと開発は同意すべきではありませんか?

x   84a628d      (origin/develop, develop) Merge branch 'release-v3.0.1' into develop
|\  
| | x   2e4d60b  (HEAD, v3.0.1, origin/master, master) Merge branch 'release-v3.0.1'
| | |\  
| | |/  
| |/|   
| x | 716ce96    (release-v3.0.1) Version 3.0.1
|/ /  
x | fe3b54d      Some more more code
x | 3683892      Some more code
x | 8c0b835      'develop' branch code
|/  
x   d051b54      (v3.0) Baseline merge. Merge remote-tracking branch 'origin/master'

$ git log origin / master ^ origin / development

commit 2e4d60b7d6760b4f6b2328ab06150b020b0d279f
Merge: d051b54 716ce96
Author: Todd 
Date:   Tue Mar 26 11:27:59 2013 -0400

Merge branch 'release-v3.0.1'

$ git log origin / development ^ origin / master

commit 84a628d96653ed196faa6387c8b208badf23aa75
Merge: fe3b54d 716ce96
Author: Todd 
Date:   Tue Mar 26 11:31:53 2013 -0400

Merge branch 'release-v3.0.1' into develop

私は何が欠けていますか?

4

1 に答える 1

2
git log origin/master ^origin/develop

origin/masterこのコマンドは、から到達可能であるがからではなく到達可能なすべてのコミットを表示しますorigin/develop

git log origin/develop ^origin/master

origin/developこのコマンドは、から到達可能であるがからではなく到達可能なすべてのコミットを表示しますorigin/master

上記の両方のコマンドからの出力は、表示したグラフと一致しているようです。

2つのブランチの内容の違いを確認する場合は、git diff代わりにコマンドを使用する必要があります。

git diff origin/master..origin/develop

異なるファイルのリストのみが必要な場合は、次の--name-statusオプションを使用できます。

git diff --name-status origin/master..origin/develop

gitでは、コミットのSHA1は、親コミットのSHA1、コミットメッセージ、タイムスタンプ、およびその他の多くの情報に基づいて計算されます。同じrelease-v3.0.1ブランチをとの両方masterにマージしましたがdevelop、2つの異なる時点で2つの独立したマージとして実行しました。これは明らかに、両方に対して同じコミットSHA1を生成しません。

代わりにすべきことは、次のいずれかです。

オプション1:

git checkout master:
git merge release-v3.0.1

git checkout develop:
git merge master

git checkout master
# This would be a fast-forward merge
git merge develop

オプション2:

git checkout develop:
git merge release-v3.0.1

git checkout master:
git merge develop

git checkout develop
# This would be a fast-forward merge)
git merge master

このようにすると、両方masterdevelopブランチが同じコミットを指すことになります。

masterにマージするかdevelop、その逆を行い、もう一方のブランチで早送りマージを実行することで、現在でも同じ状態になる可能性があります。

git checkout master
git merge develop

git checkout develop
# This would be a fast-forward merge
git merge master
于 2013-03-26T16:30:09.943 に答える