Комментарии указывают на некоторые нюансы работы с переименованиями в git, но на самом деле они не учитывают причину того, что вы видите.
Когда git выполняет слияние, оно не смотрит на коммиты веток индивидуально.Вместо этого он рассматривает три вещи: базу слияния (последний общий пример, примерно);«наш» коммит (вершина ветви, в которую вы сливаетесь);и "их" фиксация (конец ветви, в которую вы сливаетесь).
Он сравнивает "базу" с "нашей", чтобы определить "наши изменения", и видит, что вы создали b.txt
.Он сравнивает «базу» с «их», чтобы определить «их изменения», и здесь все не так, как вы надеялись.Поскольку он не смотрит на промежуточные состояния, он не знает, что вы создали b.txt
, а затем переместили его в myfolder/b.txt
;он только знает, что в ходе ветки было создано myfolder/b.txt
.
Таким образом, объединение изменений - это «создать b.txt
и создать myfolder/b.txt
», и в этом нет конфликта,так что он просто делает и то, и другое.
Интересно то, что merge
и rebase
обычно дают один и тот же результат и считаются отличающимися только в истории, которую они производят,это очень редкий случай, когда rebase, поскольку просматривает изменения каждого коммита отдельно, может дать более интуитивный результат.