Первое, что я хочу пояснить, это то, что имена ветвей - это просто псевдоним для определенного коммита. git - это то, что git работает, когда вы тянете, нажимаете merge и так далее. Каждый коммит имеет уникальный идентификатор.
Когда вы выполняете $ git merge, то на самом деле происходит то, что git пытается переслать вашу текущую ветку к коммиту, на который включена ветвь, на которую ссылаются (другими словами, оба имени ветки указывают на один и тот же коммит.) Этот сценарий самый простой для git иметь дело, так как нет нового коммита. Подумайте о том, как хозяин прыгает на лилипад, на котором сидит ваша ветвь. Можно установить флаг --no-ff, и в этом случае git создаст новый коммит независимо от того, были ли какие-либо конфликты кода.
В ситуации, когда существуют конфликты кода между двумя ветвями, которые вы пытаетесь объединить (обычно это две ветки, в которых история коммитов имеет общий коммит в прошлом), ускоренная перемотка вперед не будет работать. git все еще может автоматически объединять файлы, если одна и та же строка не была изменена обеими ветками в конфликтующем файле. в этом случае git объединит конфликтующие файлы для вас и автоматически зафиксирует их. Вы можете просмотреть, как это сделал git, выполнив $ git diff --cached. Или вы можете передать флаг --no-commit в команду merge, которая оставит измененные файлы в вашем индексе, которые вам нужно будет добавить и зафиксировать. Но вы можете $ git diff этих файлов, чтобы посмотреть, что изменится слияние.
Третий сценарий - это конфликты, которые git не может разрешить автоматически. В этом случае вам нужно будет объединить их вручную. На мой взгляд, это проще всего сделать с помощью слияния, например, слияния с араксисом или p4merge (бесплатно). В любом случае, вы должны сделать каждый файл по одному. Если слияние кажется застрявшим, используйте $ git merge --continue, чтобы подтолкнуть его вперед. Git должен сказать вам, если это не может продолжаться, и если так, то почему бы и нет. Если вы чувствуете, что в какой-то момент приостановили слияние, вы можете выполнить $ git merge --abort, и любое слияние будет отменено, и вы сможете начать все сначала. Когда вы закончите, каждый объединенный файл будет измененным файлом, который необходимо добавить и зафиксировать. Вы можете проверить, где находятся файлы со статусом $ git. Если вы еще не зафиксировали объединенные файлы. Вы должны сделать это, чтобы завершить слияние.
git commit gf2n.cpp -m "Hand merge gf2n.cpp due to conflicts"
, это приводитfatal: cannot do a partial commit during a merge.
. И, конечно же, «Частичные коммиты» , по-видимому, не документированы и не обсуждаются нигде на страницах руководства пользователя git. Выполнениеgit merge
после исправления приводит к тому,Please, commit your changes before you can merge.
что инструмент «