Вирішення конфлікту злиття "обидва додані" в git?


138

Я випускаю в 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 знає, яку версію файлу я хочу видалити та яку я хочу зберегти?

Відповіді:


139

Якщо ви використовуєте git rmgit, вилучите всі версії цього шляху з індексу, тому ваша рішуча дія залишить вас без будь-якої версії.

Ви можете скористатися git checkout --ours src/MyFile.csдля вибору версії з тієї гілки, на яку ви перезапускаєте, або git checkout --theirs src/MyFile.csвибору версії з тієї гілки, яку ви повторно використовуєте.

Якщо ви хочете суміш, вам потрібно скористатися інструментом злиття або відредагувати її вручну.


1
Дякую. І я щойно зрозумів, що причина інструменту злиття не працює в тому, що git створює файли .LOCAL та .REMOTE для злиття, але не файл .BASE. Я думаю, що він повинен просто створити порожній .BASE файл. Якщо вручну створити порожній файл .BASE, інструмент злиття справно працює.
Єз

1
@Jez: Перегляньте цю тему: thread.gmane.org/gmane.comp.version-control.git/188776/…
CB Bailey

1
Так ви кажете, що це буде виправлено в останній версії git?
Єз

1
@Jez: Це у версіях git> = 1.7.9.1 git.kernel.org/?p=git/…
CB Bailey

21
Від відповідей @Tom: Коли ви робите ... git checkout --ours someFile Може здатися, що нічого не робив, коли робив статус git. Просто не забудьте зробити це згодом. git add someFile git status
пек

72

Іноді я вважаю це заплутаним, використовуючи --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


42

Коли ви робите ...

git checkout --ours someFile

Може здатися, що він нічого не робив, коли займався статусом git.

Просто не забудьте зробити це згодом.

git add someFile
git status
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.