Я сейчас пытаюсь сделать довольно хитрый маневр git merge. Одна проблема, с которой я сталкиваюсь, заключается в том, что я внес некоторые изменения в некоторый код в своей ветке, но мой коллега переместил этот код в новый файл в своей ветке. Поэтому, когда я сделал git merge my_branch his_branch
, git не заметил, что код в новом файле был таким же, как старый, и поэтому никаких моих изменений не было.
Что» Это самый простой способ применить мои изменения снова к коду в новых файлах. У меня не будет слишком много проблем, чтобы выяснить, какие коммиты нужно применить повторно (я могу просто использовать git log --stat
). Но, насколько я могу судить, нет способа заставить git повторно применить изменения в новых файлах. Самая простая вещь, которую я вижу сейчас, - это вручную применить изменения, что не выглядит хорошей идеей.
Я знаю, что git распознает большие двоичные объекты, а не файлы, поэтому, безусловно, должен быть способ сказать ему: «применить это точное изменение кода из этого коммита, кроме того, где оно было, но где оно сейчас находится в этом новом файле».
Вы всегда можете использовать git diff
(или git format-patch
) для создания патч, затем вручную отредактируйте имена файлов в патче и примените его с помощью git apply
(или git am
).
Если не считать этого, единственный способ, которым это будет работать автоматически, - это если обнаружение переименования git сможет определить, что старый и новый файлы - это одно и то же - что, похоже, не в вашем случае, а просто кусок их. Это правда, что git использует blob-объекты, а не файлы, но blob - это просто содержимое всего файла без прикрепленных имени файла и метаданных. Таким образом, если у вас есть фрагмент кода, перемещенный между двумя файлами, на самом деле это не один и тот же blob-объект - остальное содержимое blob-объекта отличается, просто общий фрагмент.