Проблема в том, что hellofile
не отслеживается в feature2
, но существует в master
. -m
предназначен для обеих веток, имеющих некоторые изменения в отслеживаемом файле. Теперь это изменение может или не может быть организовано, но отслеживается в нашем рабочем дереве. Наоборот, я надеюсь, что имеет смысл, что если бы обе ветви добавили и зафиксировали какую-то версию файла, у нас был бы стандартный конфликт.
Если файл не по крайней мере отслеживается в обеих ветвях, то трехстороннее объединение, похоже, разрешит конфликт как git checkout --ours
... подробнее об этом в разделе для обсуждения.
То есть, делая это в вашем примере,
$ echo "world" > hellofile
$ git checkout -m master
Вы фактически (не на самом деле) говорите игнорировать изменения в неотслеживаемом файле текущих рабочих каталогов. Однако если вы отслеживали hellofile
в обеих ветках и внесли изменения,
$ `echo "world" > hellofile"
$ `git add hellofile`
вы бы получили конфликт, который выглядел бы примерно так:
<<<<<<< master
hello
=======
world
>>>>>>> local
Я собираюсь предположить, что это то, для чего вы шли; он был правильно помечен как конфликт слияния. Тем не менее, ваши изменения были перенесены в обе ветви без каких-либо обязательств.
Обсуждение
В документации не говорится, что это предназначено, но ваша проблема явно в поведении. Я думаю, что это, вероятно, упущение / ошибка с их стороны. То, что они, кажется, значат, это
"Однако, с помощью этой опции, трехстороннее слияние между текущей веткой, вашими проиндексированными файлами и новой ветвью завершено, и вы будете в новой ветке."
После прочтения этого поста: Можно ли использовать git diff для неотслеживаемых файлов? , я собираюсь предположить, что на самом деле происходит в схеме слияния то, что файл рабочего каталога на самом деле не имеет Действительный блоб в индексе считается чем-то, что нужно слить, и поэтому для всех намерений и целей «игнорируется».
Редактировать: Вот вопрос, который только что задан, с похожей загадкой: Почему git checkout <<file>> не работает, когда тот же файл находится в индексе?