Почему это слияние приводит к конфликту

#git

#git

Вопрос:

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

  git log HEAD..other_branch -- some_file.txt
  

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

Когда я запускаю:

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

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

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

Ответ №1:

Чтобы добавить к вкладу manojlds:

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

 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. Спасибо. Я предполагаю, что я запутался (очевидно) в том, почему изменения, которые произошли только в HEAD, приведут к конфликтам при слиянии в other_branch. В other_branch ничего не изменилось, поэтому не должно было быть места, где произошли изменения в обеих ветвях из-за конфликтов продуктов.

2. Что говорит журнал, если вы добавляете -p? Как выглядит конфликт слияния?

Ответ №2:

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

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

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

 git checkout other_branch some_file.txt
  

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

 git diff --cached some_file.txt
  

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

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