Разрешение конфликтов слиянием

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

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

enter image description here

Примечание: В если это актуально, я использую клиент GUI Mac GitHub.

5 ответов


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

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

что есть маркер конфликта означает что базовая версия этого файла отличается от "новой" версии. Базовая версия (последний общий предок) не показано.

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


теперь есть лучшее решение, чем пытаться прочитать маркеры тарабарщины, которые Git вставляет в ваши файлы. Калейдоскоп 2, второй выпуск Black Pixel своего инструмента diff, теперь также является инструментом слияния. Это не бесплатно, но это прекрасно работает.

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

Kaleidoscope's Integration menu option.

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

Kaleidoscope's Git Integration dialog.

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

Kaleidoscope sane view for merge conflicts.


<<<< HEAD #Where the conflict starts

#Previous Revision

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

#Things that changed

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

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

git mergetool -t opendiff


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

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

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


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