Разрешение конфликтов слияния - PullRequest
56 голосов
/ 09 февраля 2012

Когда в Git возникает конфликт слияния, в конфликтующие файлы вставляется нежелательная почта, подобная следующей. Три вопроса:

  1. Как вы читаете эти аннотации?
  2. Какие стратегии следует использовать при устранении этих конфликтов слияния?
  3. Существует ли инструмент для графического интерфейса для Mac, который умеет читать эти файлы и отображать две версии рядом для облегчения решения проблемы?

enter image description here

Примечание. В случае необходимости я использую GitHub Mac GUI-клиент.

Ответы [ 5 ]

35 голосов
/ 09 февраля 2012

Все между <<<<<< и ====== происходит из ревизии HEAD, которая является подтвержденным состоянием перед началом операции слияния (git merge будет выдавать сообщение, если дерево загрязнено, поэтому оно должно быть эквивалентно вашей работе каталог).

Части между ====== и >>>>>> взяты из объединяемой версии. Текст после >>>>>> является комментарием коммита, который внес конфликтующее изменение.

Наличие маркера конфликта означает, что базовая версия этой части файла отличается от обеих «новых» версий. Базовая версия (последний общий предок) не показана.

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

21 голосов
/ 26 декабря 2012

Теперь есть лучшее решение, чем пытаться читать тарабарские маркеры, которые Git вставляет в ваши файлы. Kaleidoscope 2 , вторая версия Black Pixel их инструмента сравнения, теперь также является инструментом слияния. Это не бесплатно, но прекрасно работает.

После установки Kaleidoscope 2 его действительно легко интегрировать с Git. Откройте Калейдоскоп и в строке меню выберите Калейдоскоп > Интеграция…

Kaleidoscope's Integration menu option.

Тогда вы увидите это окно. Просто выберите Git в левой панели навигации, затем установите инструмент командной строки ksdiff и сделайте инструмент сравнения и слияния Kaleidoscope Git по умолчанию.

Kaleidoscope's Git Integration dialog.

Наконец, как только у вас возникнет конфликт слияния в Git, просто перейдите в командную строку и выполните git mergetool. Теперь конфликт легко читается. Наслаждайтесь.

Kaleidoscope sane view for merge conflicts.

16 голосов
/ 09 февраля 2012
<<<< HEAD #Where the conflict starts

#Previous Revision

========== # The point where things look iffy

#Things that changed

>>>>> New Commit # Point where the conflict ends

Maccode X поставляется с FileMerge, доступ к которому можно получить из командной строки с помощью opendiff.

git mergetool -t opendiff

4 голосов
/ 09 февраля 2012

Вы можете настроить (графический) инструмент слияния и использовать этот инструмент для разрешения конфликтов.

Также обратите внимание на команду git mergetool - если у вас установлен один из предопределенных инструментов или настроен какой-либо другой инструмент, он откроет инструмент для разрешения http://schacon.github.com/git/git-mergetool.html

Если вас интересуют инструменты с графическим интерфейсом, вам не нужно беспокоиться о том, что на самом деле означают нотации, поскольку инструмент с графическим интерфейсом поможет вам легко принимать решения. Просто поймите, что части, отмеченные ===== и >>>>>, являются разделами конфликта.

0 голосов
/ 22 мая 2018

Когда у вас есть две ветви с изменениями в одном и том же файле, и вы пытаетесь объединить их, возникает конфликт объединения.Чтобы просмотреть список конфликтующих файлов, запустите на своем терминале git status.

Конфликтующие строки файлов будут отмечены визуальными индикаторами: <<<<< - Конфликт начинается после этой строки.===== - Делит изменения из HEAD и merging_branch.>>>>> - Конец конфликтующих строк.

<<<<<<< HEAD
conflicted text from HEAD
=======
conflicted text from merging_branch
>>>>>>> merging_branch

Когда вы исправляете конфликтующие файлы и готовы к слиянию, все, что вам нужно сделать, это запустить git add и git commit для генерации коммита слияния.После принятия git push изменений в ветке.

Справочная статья: Git merge .

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