Как завершить слияние после разрешения конфликтов слияния?
Я прочитал раздел Основное разделение и объединение в разделе 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
, есть две возможности:
-
Одна ветвь (скажем, ветвь) может быть достигнута другой ветвью (скажем, ветвь 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
.