2013-08-13 4 views
0

Я пытаюсь объединить две ветви, скажем br2 в br1 (на br1git merge br2). 1.txt - файл, который присутствует на обеих ветвях. В br2 этот файл перемещается в другой каталог 1.txt сейчас в sub/1.txt. После слияния у меня есть два файла 1.txt в br1: 1.txt и sub/1.txt, что странно.git merge не удаляет файлы

Если я применил фиксацию, которая переместила файл 1.txt с файлом cherry-pick, он правильно перемещен в подкаталог.

Почему он не перемещается (но скопирован) в подкаталог во время слияния?

$ git --version 
git version 1.8.1.1 
+0

У вас есть msysgit с тегом по вашему вопросу. Правильно ли говорить, что вы используете Windows? Вы исследовали возможность того, что это может быть проблема с регистрацией нечувствительности к именам файлов в системах Windows? –

+0

@Cupcake, имена файлов в одном и том же случае –

ответ

1

Я нашел ответ. Возникла проблема с базой слияния. В основном diff от head to merge-base не содержал удаления файлов, поэтому именно поэтому git удалил файлы с помощью вишневого кирка и не слиял.

1

Возможно, вы явно не удалили файл на br2?

Обычный способ перемещения файла с помощью git mv. Это было бы:

git checkout br2 
git mv 1.txt sub # Moving 1.txt to sub/ using git mv command 
git commit 

git checkout br1 
git merge br2 # You should see now the file 1.txt only on sub/ 

Если вы сделали что-то подобное, одна возможность заключается в том, что по некоторым причинам 1.txt был «введен» в верхней папке некоторыми коммит, который находится на br1, а не на Br2, поэтому делает слияние между этими филиалами будет держать их обоих.

Может быть, я могу понять лучше, если вы разместите git log <hash-of-commit-where-you-moved-the-file> --stat --pretty=oneline --abbrev-commit и/или git log 1.txt на ветке, где не должно быть.

+0

'git add .' [избыточно] (http://stackoverflow.com/questions/1094269/whats-the-purpose-of-git-mv). – antak

+0

Вы правы @antak, git mv уже содержит операцию добавления git. Ответ отредактирован! – llekn

Смежные вопросы