В настоящее время я просматриваю множество функций отслеживания контента git. Очень приятно знать, что git позволяет мне вычислить код, который был перенесен из одного файла в другой, но мне интересно, как эта функция может использоваться при разрешении конфликтов при слияниях.
Вот сценарий:
У меня есть два файла hello.cc
и bye.cc
. Я начинаю ветку topic
и перемещаю код от hello.cc
до bye.cc
. Если я теперь сделаю git blame -C bye.cc
, я вижу, что этот код изначально появился из hello.cc
, который приятно знать. Однако теперь я переключаюсь на исходную ветвь без перемещенного содержимого и меняю код в разделе hello.cc
, который был перемещен в другой фиксации. Если я теперь делаю git merge topic
, я получаю конфликт для hello.cc
. Однако, если я не использую стиль diff3 (который я обычно делаю, хотя), я могу видеть, что этот метод был удален из hello.cc
в другой ветке, но не был изменен впоследствии. Было бы неплохо было бы также получить конфликт на bye.cc
, потому что было бы необходимо проверить, будут ли эти изменения из другой ветки повторно применяться к коду. Это возможно?
Я знаю, что могу вручную выяснить, что код был перемещен, выполнив git blame --reverse -C topic...
. Однако для этого мне потребовалось некоторое время, чтобы выяснить эту возможность, и большинство других, вероятно, не узнают об этом. Во-вторых, я ленив и, вероятно, просто забуду, что код мог быть перемещен. Также я не уверен, что это работает, когда код был перемещен в несколько файлов.
Каким будет ваш способ максимально безопасно сохранить эту ситуацию?
Edit
Я только узнал, что git blame --reverse -C hello.cc $(git merge-base HEAD topic)..topic
также работает, чтобы узнать, куда перемещается контент. И если я правильно понимаю git, это, вероятно, быстрее, потому что он не будет выполнять полный поиск содержимого в полном репозитории.
Edit
Я загрузил репозиторий, который я использую для воспроизведения github, чтобы вы могли попробовать слияние для себя. Конец, в котором я переместил функцию, находится в ветке темы. Конец, когда одна и та же функция изменяется в главном в HEAD ветки merge_here
. В мастере есть еще одна фиксация, в которой я играл с другими методами слияния, которые вы должны игнорировать для этого вопроса.