-1

Master ブランチと Work ブランチがあります。私は Work ブランチで作業しており、チームは Master ブランチを更新します。

作業ブランチ: 1000 <--- 1001 <--- 1002

マスターブランチ: 1000

Work ブランチを Master ブランチにマージし、作業を進めます。

マスターブランチ: 1000 <--- 1001 <--- 1002 <--- 1003 <--- 1004

Work ブランチは、Master ブランチを Work ブランチにマージしたいと考えています。1003 と 1004 のコミットでファイル a.cpp に何らかの変更があるとします。

Work ブランチの a.cpp は、Master ブランチのコミット 1004 の最新バージョンの a.cpp で自動的に更新されると思います。

しかし、gitはそうではありません! a.cpp の競合を解決するよう求めます。

両方追加: a.cpp

しかし、Work ブランチの a.cpp と Master ブランチの a.cpp を比較しました。Work ブランチの a.cpp は、Master ブランチ (コミット 1002) の a.cpp の祖先の 1 つです。

その理由と簡単に解決できる方法を教えてください。

[更新 1] 申し訳ありませんが、状況を単純化しすぎていると思います。実際、Work ブランチがマスター ブランチにマージされる前に、いくつかのコミットがマスター ブランチにありました。

作業ブランチ: 1000 <--- 1001 <--- 1002

マスターブランチは次のようになります: 1000 <-- 2001 <-- 2002

Work ブランチが Master ブランチにマージされた後、

マスター ブランチ: 1000 <--- マージ (1002、2002) <--- 2003 <--- 2004

ここで、Master ブランチを Work ブランチにマージして戻します。このマージには競合がないと仮定します。記録の順序は次のようになっているため: a.cpp のマスター コード、a.cpp のワーク コード、a.cpp のマスター コード、ワークはマスターから a.cpp を取得します。

[更新 2] 競合の警告が表示されることを理解しました。Git は、ファイルの記録順序に従いません。コミットの年代順にのみ従います。

4

1 に答える 1

1

私が理解したことから、あなたは本質的にやっています:

git checkout master
git commit -m 1000
git checkout -b work 
git commit -m 1001
git commit -m 1002
git checkout master
git merge work     #  fast-forward, no conflicts possible
git commit -m 1003 a.cpp
git commit -m 1004 a.cpp
git checkout work
git merge master   # again fast-forward, still no conflicts possible

この後、両方のブランチがまったく同じコミットを指し、まったく同じファイルが含まれます。

状況が異なる場合は、状況を示す小さな公開リポジトリを github にセットアップしてください。

于 2014-12-11T01:13:51.040 に答える