19

次のファイルがあるとしましょう

  1. マスターで変更
  2. 機能ブランチで変更
  3. 機能ブランチで名前が変更されました

マスターから機能ブランチにマージしようとすると、マージが失敗します

CONFLICT (変更/削除): X は HEAD で削除され、origin/master で変更されました。ツリーに残された X のバージョン元/マスター。

競合があることは理解していますが、変更をマージして競合マーカーをファイルに配置しようとしないのはなぜですか? 以前の回答は、そうすべきであることを暗示しているようです。私が得たのは、ファイルの 2 つの異なるバージョンだけです。違いを手動で把握し、マスター バージョンから自分のバージョンに 1 行ずつ変更を移植する必要があります。

再現する手順:

git init
touch a
git add a
git commit -m 'initial import'

git checkout -b feature1
echo feature1 > a
git add a
git commit -m feature1
git mv a b
git commit -m feature1

git checkout master
echo bugfix > a
git add a
git commit -m bugfix

git checkout feature1 
git merge master 
4

1 に答える 1

32

実際には、git にはファーストクラスの名前変更操作の概念がないため、ファイルの相違点のしきい値を使用して名前変更を「検出」するだけです。あなたのファイルはおそらくあまりにも異なっています。

マージしてみてください: git merge master -s recursive -X rename-threshold=5%

于 2012-06-20T08:10:28.890 に答える