Разрешить конфликт слияния «оба добавленных» в git? - PullRequest
123 голосов
/ 22 марта 2012

Я перебираю в git, и один конфликт, который я получаю, это «оба добавлены», то есть, одно и то же имя файла было добавлено независимо в моей ветке и в ветке, на которую я перебираю git status говорит мне:

# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#       both added:         src/MyFile.cs

У меня вопрос, как мне решить эту проблему? Должен ли я использовать инструмент слияния или есть ли способ сделать это только из командной строки? Если я git rm src/MyFile.cs, как git узнает, какую версию файла я хочу удалить, а какую сохранить?

Ответы [ 3 ]

125 голосов
/ 22 марта 2012

Если вы используете git rm, git удалит все версии этого пути из индекса, поэтому ваше действие разрешения оставит вас без какой-либо версии.

Вы можете использовать git checkout --ours src/MyFile.cs для выбора версии из ветвина который вы перебираете или git checkout --theirs src/MyFile.cs, чтобы выбрать версию из ветви, которую вы перебираете.

Если вы хотите смешать, вам нужно использовать инструмент слияния или отредактировать его вручную.

63 голосов
/ 22 марта 2012

Иногда меня смущает использование параметров --theirs и --ours для определения источника файла.Большую часть времени моя будет находиться в ветви, которую я перебазирую, на которую ссылаются --theirs!

. Вы также можете использовать git checkout <tree-ish> -- src/MyFile.cs

, где <tree-ish> можно заменить либопо имени ветви или идентификатору коммита, в котором содержится файл, который вы хотите сохранить.

git checkout 6a363d8 -- src/MyFile.cs

git checkout my_branch -- src/MyFile.cs

git checkout HEAD -- src/MyFile.cs

34 голосов
/ 09 июня 2015

При выполнении ...

git checkout --ours someFile

Может показаться, что он ничего не делал при выполнении git status.

Просто не забудьте сделать это потом.

git add someFile
git status
...