git リポジトリで、ブランチAをBにマージすることは、 BをAにマージすることと同じですか?
2 に答える
いいえ、A を B にマージすると、最終的にブランチ A には A の変更のみが含まれ、B には A+B の両方の変更が含まれます。
B を A にマージすると、A には A+B の両方の変更が含まれ、B には B の変更のみが含まれます。
始める:
/A1-A2-A3
X
\B1-B2-B3
マージ コミットによる A から B:
/A1-A2-A3
X
\B1-B2-B3-A*(1,2,3)
早送りでAからBへ:
/A1-A2-A3
X
\A1-A2-A3-B1'-B2'-B3'
B から A へのマージ コミット:
/A1-A2-A3-B*(B1,B2,B3)
X
\B1-B2-B3
早送りで B から A:
/B1-B2-B3-A1'-A2'-A3'
X
\B1-B2-B3
first parent
マージが新しいマージ コミットを生成するときに呼び出される概念があります。
コマンドでマージコミットの親を確認し、実際のコミットハッシュgit show merge-commit-hash
に置き換えます。
そして、次のようなものが得られます。 merge-commit-hash
commit [commit]
Merge: [parent1] [parent2]
次のコミット履歴があるとします。C1 は C2 と C3 の親です。そして、分岐 A は C2 を指し、分岐 B は C3 を指します。
C1<--C2
\<--C3
ブランチ A (C2) をブランチ B (C3) にマージすると、最初の親コミットは C3 になります。
ブランチ B (C3) をブランチ A (C2) にマージすると、最初の親コミットは C2 になります。
私のデモプロジェクトで確認できます。そしてTortoiseGitでロググラフを確認できます。
Walk Behavior → First Parentは、最初の親のコミットをフォローアップするだけです。これは、全体の歴史を理解するのに役立ちます。