git merge: применить изменения к коду, который перемещен в другой файл

Я сейчас пытаюсь сделать довольно хитрый маневр git merge. Одна проблема, с которой я сталкиваюсь, заключается в том, что я внес некоторые изменения в некоторый код в своей ветке, но мой коллега переместил этот код в новый файл в своей ветке. Поэтому, когда я сделал git merge my_branch his_branch , git не заметил, что код в новом файле был таким же, как старый, и поэтому никаких моих изменений не было.

Что» Это самый простой способ применить мои изменения снова к коду в новых файлах. У меня не будет слишком много проблем, чтобы выяснить, какие коммиты нужно применить повторно (я могу просто использовать git log --stat ). Но, насколько я могу судить, нет способа заставить git повторно применить изменения в новых файлах. Самая простая вещь, которую я вижу сейчас, - это вручную применить изменения, что не выглядит хорошей идеей.

Я знаю, что git распознает большие двоичные объекты, а не файлы, поэтому, безусловно, должен быть способ сказать ему: «применить это точное изменение кода из этого коммита, кроме того, где оно было, но где оно сейчас находится в этом новом файле».

114
задан asmeurer 16 August 2010 в 07:19
поделиться

1 ответ

Вы всегда можете использовать git diff (или git format-patch ) для создания патч, затем вручную отредактируйте имена файлов в патче и примените его с помощью git apply (или git am ).

Если не считать этого, единственный способ, которым это будет работать автоматически, - это если обнаружение переименования git сможет определить, что старый и новый файлы - это одно и то же - что, похоже, не в вашем случае, а просто кусок их. Это правда, что git использует blob-объекты, а не файлы, но blob - это просто содержимое всего файла без прикрепленных имени файла и метаданных. Таким образом, если у вас есть фрагмент кода, перемещенный между двумя файлами, на самом деле это не один и тот же blob-объект - остальное содержимое blob-объекта отличается, просто общий фрагмент.

28
ответ дан 24 November 2019 в 02:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: