Как завершить слияние после разрешения конфликтов слияния?

Я прочитал раздел Основное разделение и объединение в разделе Git Community Book.

Итак, я следую за ним и создаю одну ветку: experimental.

Тогда I:

  • перейти к экспериментальной ветке (git checkout experimental)
  • сделать кучу изменений
  • передать его (git commit -a)
  • переключиться на ведущую ветвь (git мастер проверки)
  • внести некоторые изменения и зафиксировать там
  • вернуться к экспериментальному (git checkout experimental)
  • слить мастер-смену на экспериментальный (git мастер слияния)
  • есть некоторые конфликты, но после того, как я их разрешил, я сделал git добавить мой файл

  • И теперь я застреваю, я не могу вернуться к мастеру

когда я делаю

 $ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.

и я сделал:

$ git rebase --abort

Нет перестановки в процессе?

и я сделал:

$  git add res/layout/socialhub_list_item.xml
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.

Что я могу сделать, чтобы вернуться к своей главной ветке?

Ответ 1

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

Ответ 2

Как мне завершить слияние после разрешения конфликтов слияния?

С Git 2.12 (1 квартал 2017 года) у вас будет более естественная команда:

git merge --continue

Смотрите коммит c7d227d (15 декабря 2016 г.) Джеффа Кинга (peff).
См. Коммит 042e290, коммит c261a87, коммит 367ff69 (14 декабря 2016 г.) Криса cpackham (cpackham).
(Объединено Junio C Hamano - gitster - в коммите 05f6e1b, 27 декабря 2016 г.)

См. 2.12 примечания к выпуску.

merge: добавить --continue " --continue " как синоним " git commit "

Научите git merge использовать --continue которая позволяет "продолжить" слияние, завершив его.
Традиционный способ завершения слияния после разрешения конфликтов заключается в использовании " git commit ".
Теперь с такими командами, как " git rebase " и " git cherry-pick ", имеющими опцию " --continue ", добавление такой опции к " git merge " предоставляет согласованный пользовательский интерфейс.

Ответ 3

Если вы когда-либо застреваете во время слияния/переустановки, вы всегда можете

git reset --hard

чтобы восстановить вашу работу до состояния последней фиксации. Это приведет к потере ваших изменений из рабочего дерева, поэтому, если у вас были локальные изменения до слияния, они исчезнут после этого, поэтому рекомендуется не начинать слияние при локальных модификациях.:)

Ответ 4

Просто git commit это.

По желанию git abort это:
Я столкнулся с конфликтом слияний. Как я могу прервать слияние?

Чтобы облегчить жизнь с помощью слияний, установите kdiff3 и настройте его как mergetool. Инструкции: http://doodkin.com/2016/05/29/git-merge-easy-github-this-branch-has-conflicts-that-must-be-resolved-use-the-command-line/

Эта страница содержит это видео: https://www.youtube.com/watch?v=Cc4xPp7Iuzo

Ответ 5

Всякий раз, когда вы объединяете две ветки с помощью команды git merge brancha branchb, есть две возможности:

  1. Одна ветвь (скажем, ветвь) может быть достигнута другой ветвью (скажем, ветвь b), следуя ее истории коммитов. В этом случае git просто перемотает вперед голову, чтобы указать на недавнюю ветвь (в этом случае ветвь b).

    2. Но если две ветки разошлись в какой-то более старой точке, то git создает новый снимок и добавляет новый коммит, который указывает на него. Таким образом, в случае отсутствия конфликта между ветвями, которые вы объединяете, git плавно создает новый коммит.

Запустите git log чтобы увидеть фиксацию после слияния двух не конфликтующих веток.

Теперь вернемся к интересному случаю, когда между объединяющимися ветвями возникают конфликты слияния. Я цитирую это со страницы https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging

Git не создал автоматически новый коммит слияния. Он приостановил процесс, пока вы разрешаете конфликт. Если вы хотите увидеть, какие файлы не были объединены в любой момент после конфликта слияния, вы можете запустить git status


Таким образом, в случае возникновения конфликтов слияния, вам нужно разрешить конфликт, затем добавить изменения, которые вы внесли в промежуточную область, используя git add filename и затем зафиксировать изменения, используя команду git commit которая была приостановлена git из-за конфликта. Я надеюсь, что это объясняет ваш запрос. Также зайдите по ссылке выше для подробного понимания. В случае любого запроса, пожалуйста, прокомментируйте ниже, я буду рад помочь.

Ответ 6

Следующие действия после разрешения конфликтов вручную: -

  • git добавить.
  • git status (это покажет вам, какие команды необходимы для продолжения процедуры автоматического слияния)
  • [команда git предлагает, например. git merge --continue, git cherry-pick --continue, git rebase --continue]

Ответ 7

После добавления всех файлов следующим шагом будет " git commit ".

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

Ответ 8

Первое, что я хочу прояснить, это то, что имена ветвей - это просто псевдоним определенного коммита. фиксация - это то, что git срабатывает, когда вы тянете, нажимаете слияние и т.д. Каждый фиксатор имеет уникальный идентификатор.

Когда вы выполняете $ git merge, то, что на самом деле происходит, это git пытается ускорить перенаправление текущей ветки на фиксацию, на которую ссылается ветвь (другими словами, оба имени ветки указывают на одно и то же commit). Этот сценарий является самым легким для git, поскольку нет нового коммита. Подумайте о том, что мастер прыгает на лилипаду, на котором ваша ветка пугает. Можно установить флаг -no-ff, и в этом случае git создаст новый коммит независимо от наличия каких-либо конфликтов кода.

В ситуации, когда существуют конфликты кода между двумя ветвями, которые вы пытаетесь объединить (обычно две ветки, чья история фиксации разделяет общую фиксацию в прошлом), перемотка вперед не будет работать. git может все еще иметь возможность автоматически объединять файлы, если одна и та же строка не была изменена обоими ветвями в конфликтующем файле. в этом случае git объединит конфликтующие файлы для вас и автоматически зафиксирует их. Вы можете просмотреть, как git сделал, выполнив $git diff --cached. Или вы можете передать флаг -no-commit команде слияния, которая оставит измененные файлы в вашем индексе, который вам нужно будет добавить и зафиксировать. Но вы можете $git разбить эти файлы, чтобы просмотреть, что слияние изменится.

Третий сценарий - это когда конфликты git не могут автоматически разрешаться. В этом случае вам необходимо вручную их объединить. По-моему, это проще всего сделать с слиянием, например, слиянием araxis или p4merge (бесплатно). В любом случае, вы должны делать каждый файл по одному. Если слияние когда-либо кажется застревающим, используйте $git merge -continue, чтобы подтолкнуть его. git должен сказать вам, не может ли он продолжить, и если да, почему бы и нет. Если вы чувствуете, что в какой-то момент вы обманули слияние, вы можете сделать $git merge -abort, и любое слияние отменяет, и вы можете начать все заново. Когда вы закончите, каждый файл, который вы объединили, будет измененным файлом, который необходимо добавить и зафиксировать. Вы можете проверить, где находятся файлы с статусом $git. Если вы еще не создали объединенные файлы. Вы должны сделать это, чтобы завершить слияние. Вам необходимо завершить слияние или прервать слияние, прежде чем вы сможете переключаться между ветвями.

Ответ 9

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

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

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

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

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

Ответ 10

Может быть поздно Это происходит, потому что ваш git HEAD не обновляется. эта похвала решила бы, что git reset HEAD.