#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
сейчас.
Это подход, который я использую, когда вижу различия в определенных файлах, а также при объединении определенных файлов