Разрешение конфликтов слиянием
когда есть конфликт слияния в Git, мусор, как показано ниже, вставляется в конфликтующие файлы. Три вопроса:--1-->
- как Вы читаете эти заметки?
- какие стратегии использовать при устранении этих конфликтов слияния?
- есть ли инструмент GUI для Mac, который знает, как читать эти файлы и отображать две версии бок о бок, чтобы облегчить устранение проблемы?
Примечание: В если это актуально, я использую клиент GUI Mac GitHub.
5 ответов
все что между <<<<<<
и ======
происходит от HEAD
ревизия, которая является фиксированным состоянием перед началом операции слияния (git merge
будет жаловаться, если дерево грязное, поэтому оно должно быть эквивалентно вашему рабочему каталогу).
части между ======
и >>>>>>
исходят из версии, которая объединяется. Текст после >>>>>>
- Это комментарий фиксации, который ввел конфликтующее изменение.
что есть маркер конфликта означает что базовая версия этого файла отличается от "новой" версии. Базовая версия (последний общий предок) не показано.
если вы хотите более удобное слияние и иметь доступный графический интерфейс, я предлагаю вам взглянуть на kdiff3.
теперь есть лучшее решение, чем пытаться прочитать маркеры тарабарщины, которые Git вставляет в ваши файлы. Калейдоскоп 2, второй выпуск Black Pixel своего инструмента diff, теперь также является инструментом слияния. Это не бесплатно, но это прекрасно работает.
после установки Kaleidoscope 2 его очень просто интегрировать с Git. Откройте Калейдоскоп и в строке меню выберите Калейдоскоп > интеграция...
затем вы увидите это окно. Просто выберите Git из левой навигации, а затем установите ksdiff
инструмент командной строки, а затем сделать Калейдоскоп git по умолчанию diff и инструмент слияния.
наконец, как только у вас есть конфликт слияния в Git, просто перейдите в командную строку и выполните git mergetool
. Теперь конфликт легко читается. Наслаждаться.
<<<< 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.