Как завершить слияние после разрешения конфликтов слияния?
я прочитала основные ветвления и слияния раздел книги сообщества Git.
поэтому я следую за ним и создаю одну ветку:experimental.
Я:
- переключиться на экспериментальную ветку (git checkout experimental)
- сделать кучу изменений
- commit it (git commit-a)
- переключиться на главную ветку (git checkout master)
- делать некоторые изменения и фиксировать там
- переключиться обратно в экспериментальный (git checkout experimental)
- мастер слияния изменить на экспериментальный (git merge master)
есть некоторые конфликты, но после того, как я их разрешу, я сделал "git add myfile"
и теперь я застрял, я не могу вернуться в мастер
когда я делаю
$ 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.
что я могу сделать, чтобы вернуться в свою главную ветвь?
9 ответов:
когда во время слияния возникает конфликт, вы должны завершить фиксацию слияния вручную. Похоже, вы сделали первые два шага, чтобы отредактировать конфликтующие файлы, а затем запустить
git add, чтобы отметить их как решен. Наконец, вам нужно фактически совершить слияние сgit commit. В этот момент Вы сможете переключить ветки.
как завершить слияние после разрешения конфликтов слияния?
С Git 2.12 (Q1 2017) у вас будет более естественная команда:
git merge --continueпосмотреть commit c7d227d (15 дек 2016) by Джефф Кинг (
peff).
Смотрите commit 042e290,commit c261a87,совершить 367ff69 (14 дек 2016) by Крис Пэкхэм (cpackham).
(слитый Junio C Hamano--gitster-- на commit 05f6e1b, 27 дек 2016)посмотреть 2.12 примечания к выпуску.
mergeдобавить '' как синоним 'git commit'учить
git merge' the--continueопция, которая позволяет 'продолжить' a слияние путем его завершения.
Традиционный способ завершения слияния после разрешения конфликты-это использовать 'git commit'.
Теперь с командами типа'git rebase' и 'git cherry-pick' в '--continue' опция добавление такой опции в'git merge' представляет последовательный пользовательский интерфейс.
в случае, если вы застряли во время слияния/перебазирования, вы всегда можете
git reset --hardчтобы восстановить работу до состояния последней фиксации. Это потеряет ваши изменения из рабочего дерева, поэтому, если у вас были локальные изменения до слияния, они исчезнут после этого, поэтому рекомендуется не начинать слияние, когда у вас есть локальные изменения. :)
просто
git commitего.дополнительно
git abortit:
я столкнулся с конфликтом слияния. Как я могу прервать слияние?чтобы облегчить жизнь с on merges, установите 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
всякий раз, когда вы объединяете две ветви с помощью команды
git merge brancha branchbесть две возможности:
одна ветвь (скажем brancha) может быть достигнута другой ветвью (скажем branchb), следуя ее фиксациям history.In в этом случае git просто перемотает голову вперед, чтобы указать на недавнюю ветку (в данном случае branchb).
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 из-за конфликта.Я надеюсь, что это объясняет ваш запрос . Также посетите ссылку выше, чтобы понять вещи в деталях . В случае любого запроса, пожалуйста, прокомментируйте ниже, я буду рад помочь.
следующие шаги после разрешения конфликтов вручную являются:-
- git добавить .
- состояние ЖКТ (это покажет вам, какие команды необходимы для продолжения автоматической процедуры слияния)
- [команда git предлагает, например
git merge --continue,git cherry-pick --continue,git rebase --continue]
первое, что я хочу прояснить, это то, что имена ветвей-это просто псевдоним для конкретной фиксации. фиксация - это то, что git работает, когда вы тянете, нажимаете слияние и так далее. Каждая фиксация имеет уникальный идентификатор.
когда вы делаете слияние $ git, на самом деле происходит то, что git пытается перемотать вашу текущую ветвь на фиксацию, на которую ссылается ветвь (другими словами, оба имени ветвей указывают на одну и ту же фиксацию.) Этот сценарий является самым простым для git, так как нет новый коммит. Подумайте о том, как мастер прыгает на лилипут, на котором ваша ветка охлаждается. Можно установить флаг --no-ff, и в этом случае git создаст новую фиксацию независимо от того, были ли какие-либо конфликты кода.
в ситуации, когда существуют конфликты кода между двумя ветвями, которые вы пытаетесь объединить (обычно две ветви, история фиксации которых имеет общую фиксацию в прошлом), быстрая перемотка вперед не будет работать. git все еще может автоматически объединять файлы, поэтому пока одна и та же строка не была изменена обеими ветвями в конфликтующем файле. в этом случае git объединит конфликтующие файлы для вас и автоматически зафиксирует их. Вы можете просмотреть, как git сделал, сделав $ git diff --cached. Или вы можете передать флаг --no-commit команде merge, которая оставит измененные файлы в вашем индексе, которые вам нужно будет добавить и зафиксировать. Но вы можете $ git diff эти файлы, чтобы просмотреть, что изменится слияние.
третий сценарий, когда есть конфликты git не может автоматически разрешить. В этом случае вам нужно будет вручную объединить их. На мой взгляд, это проще всего сделать с помощью слияния, например, araxis merge или p4merge (бесплатно). В любом случае, вы должны сделать каждый файл по одному. Если слияние когда-либо кажется застрявшим, используйте $ git merge --continue, чтобы подтолкнуть его вперед. Git должен сказать вам, если это не может продолжаться, и если да, то почему бы и нет. Если вы чувствуете, что в какой-то момент Вы испортили слияние, вы можете сделать $ git merge --abort, и любое слияние будет отменено, и вы можете начать свыше. Когда вы закончите, каждый объединенный файл будет измененным файлом, который необходимо добавить и зафиксировать. Вы можете проверить, где находятся файлы со статусом $ git. Если вы еще не зафиксировали объединенные файлы. Вам нужно сделать это, чтобы завершить слияние. Вы должны завершить слияние или прервать слияние, прежде чем вы сможете переключать ветви.
конфликт слияния возникает, когда две ветви, которые вы пытаетесь объединить, изменили одну и ту же часть одного и того же файла. Вы можете создать список конфликтов с
git status.при обнаружении конфликтной строки Git будет редактировать содержимое затронутых файлов с помощью визуальных индикаторов, которые отмечают обе стороны конфликтующего содержимого.
<<<<<<< HEAD conflicted text from HEAD ======= conflicted text from merging_branch >>>>>>> merging_branchкогда вы исправите ваши конфликтующие файлы и вы готовы к слиянию, все, что вам нужно сделать, это запустить
git addиgit committo произвести фиксацию. Как только фиксация была сделана,git pushизменения в отрасли.библиографическая ссылка на статью: git merge.
после добавления всех файлов следующим шагом будет"git commit".
"git status" предложит, что делать: файлы, которые еще нужно добавить, перечислены внизу, и как только они все будут сделаны, он предложит фиксацию вверху, где он объясняет статус слияния текущей ветви.
Comments