Почему это слияние приводит к конфликту - PullRequest
6 голосов
/ 02 мая 2011

Когда я запускаю эту команду:

 git log HEAD..other_branch -- some_file.txt

Нет никакого вывода, что, как я предполагаю, означает, что не было никаких изменений в some_file.txt в other_branch. Тем не менее, когда я запускаю git merge other_branch, я получаю массу конфликтов в some_file.txt.

Когда я бегу:

git log HEAD...other_branch -- some_file.txt 

Я получил два коммита. Один, где файл был изменен, и другой, где ветвь, в которой он был изменен, была объединена в HEAD.

Я предположил, что поскольку файл был изменен только в одной ветви, конфликтов не было. Почему возникают конфликты? Есть ли способ узнать, что будет конфликтовать (и почему), прежде чем я запусту git merge?

Ответы [ 2 ]

4 голосов
/ 02 мая 2011

Добавить к вкладу Манойлдса:

Очень мило. Но тогда следующее должно выполнить то же самое?

git diff master:some_file.txt someBranch:some_file.txt

таким образом, вам не нужно оформлять заказ перед разбором против кэшированного


Оригинальный ответ:

Команда

git log HEAD..other_branch -- some_file.txt

идентичен

git log ^HEAD other_branch -- some_file.txt

, что означает, дайте мне журнал всех коммитов, доступных из other_branch, но НЕ доступных из HEAD для some_file.txt. Если эта команда не выводит данные, это означает, что some_file.txt вообще не изменился в other_branch.

С другой стороны:

git log HEAD...other_branch -- some_file.txt 

- это симметричное различие между HEAD и other_branch, то есть коммитами, которые находятся в HEAD и в other_branch, но не в обоих, и являются коммитами, которые будут объединены при объединении двух ветвей. Возможно, что-то случилось с some_file.txt в HEAD, что вызвало конфликт с версией в other_branch

1 голос
/ 02 мая 2011

Чтобы добавить к ответу @Magnus Skog и вашему вопросу:

Я предположил, что, поскольку файл был изменен только в одной ветке, конфликтов не будет.Почему возникают конфликты?Есть ли способ увидеть, что будет конфликтовать (и почему), прежде чем я запусту git merge?

В таких случаях я бы в основном сделал:

git checkout other_branch some_file.txt

Затем выполните

git diff --cached some_file.txt

, чтобы увидеть различия, и вы можете легко увидеть, если вы получаете конфликты слияния.Если вы также хотели просто «объединить» файл, вы можете git commit сейчас.

Это тот подход, который я использую при рассмотрении различий в определенных файлах и объединении определенных файлов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...