Отключить Git Rename Detection - PullRequest
9 голосов
/ 16 мая 2011
  1. У меня есть файл, foo.txt
  2. Создать и оформить ветку 'branch_A'
  3. git mv foo.txt bar.txt, затем git add -A, затем git commit -m "renamed foo.txt"
  4. Мастер проверки, git checkout master
  5. удалить foo.txt и зафиксировать.
  6. Теперь объединить branch_A, git merge branch_A

И с этим я получаю слияниеконфликт (переименовать / удалить).

CONFLICT (rename/delete): Rename foo.txt->bar.txt in branch_A and deleted in HEAD

Это имеет смысл и является тем, чего я ожидал.Тем не менее, я хотел бы знать, есть ли способ для git merge, чтобы не обнаруживать переименования, а вместо этого рассматривать их как добавленные / удаленные.В этом случае я ожидаю, что git обнаружит, что foo.txt был удален, и просто добавит bar.txt.Никаких конфликтов.

Я пытался использовать -X переименовать порог, но у меня это не сработало.Я пробовал пороги 0 и 120 (число выше 100).Чего мне не хватает?

Спасибо!

PS Я также получаю error: refusing to lose untracked file at... ошибки.Что это значит?

Ответы [ 2 ]

8 голосов
/ 16 мая 2011

Можете ли вы попробовать с:

git merge -s resolve branch_A

Кроме того, вы пробовали смотреть подобные вопросы здесь:

Переименовать / удалить путаницу

git расходящееся переименование

6 голосов
/ 27 февраля 2016

С git 2.8 (март 2016 г.) у вас будет другой вариант (в качестве опции стратегии рекурсивного слияния)

git merge -Srecursive -Xno-renames

См. коммит 44c74ec , коммит 2307211 , коммит 63651e1 (24 февраля 2016 г.), коммит 2307211 , коммит 63651e1 (24 февраля 2016 г.), коммит 87892f6 , коммит 83837ec (21 фев 2016 г.) и коммит 1b47ad1 , коммит d2b11ec (17 февраля 2016 г.) Фелипе Гонсалвеш Ассис (asiz) .
(Объединено Junio ​​C Hamano - gitster - in commit 4ce064d , 26 Feb 2016)

merge-recursive: возможность отключить переименования

Рекурсивная стратегия включает обнаружение переименования по умолчанию.
Добавить опцию стратегии, чтобы отключить обнаружение переименования даже для точных переименований .

человек git-merge будет включать в себя:

no-renames

Отключить обнаружение переименования.
См. git diff --no-rename.

(Обратите внимание, как видно из commit 1b47ad1 , стратегия слияния find-renames, следующая за интерфейсом git diff, делает опцию rename-threshold избыточной, начиная с git 2.8)


У вас есть дополнительная настройка с Git 2.18 (Q2 2018): если для конфигурации merge.renames установлено значение false, стратегии рекурсивного слияния можно запретить тратить циклы, пытаясь найти переименованные пути и объединить их соответствующим образом.

См. коммит 6f10a09 , коммит 85b4603 , коммит a7152e9 (02 мая 2018) Бен Пирт (benpeart) .
(Объединено Junio ​​C Hamano - gitster - в коммит 6e2ba77 , 30 мая 2018 г.)

merge: добавить merge.renames настройки

Добавить возможность управления обнаружением переименования для слияния с помощью параметра конфигурации.
Этот параметр действует одинаково и по умолчанию имеет значение diff.renames, но применяется только к слиянию .

...