В настоящее время я смотрю на многие функции отслеживания контента в 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...
.Однако для одного мне потребовалось много времени, чтобы выяснить эту возможность, и большинство других, вероятно, не будет знать об этом.Во-вторых, я ленив и, вероятно, просто забуду, что код мог быть перемещен.Также я не уверен, что это работает, когда код был перемещен в более чем один файл.
Как бы вы могли сохранить эту ситуацию настолько безопасной, насколько это возможно?
Редактировать:
Я только что узнал, что git blame --reverse -C hello.cc $(git merge-base HEAD topic)..topic
также работает, чтобы узнать, куда переместился контент.И если я правильно понимаю git, это, вероятно, быстрее, потому что он не будет выполнять полный поиск содержимого в полном хранилище.
Редактировать :
Iзагрузил репозиторий, который я использую для игры, в github , чтобы вы могли попробовать объединение для себя.Коммит, куда я переместил функцию, находится в ветке темы.Фиксация, когда та же функция была изменена в master в HEAD ветви merge_here
.В мастере есть еще один коммит, в котором я играл с другими приемами слияния, которые вы должны игнорировать в этом вопросе.