解决合并冲突后如何完成合并?

mic*_*ael 260 git git-merge

我已经阅读了Git Community Book 的Basic Branching and Merging部分.

所以我按照它创建了一个分支:experimental.

然后我:

  1. 切换到实验分支(git checkout experimental)
  2. 做出一堆变化
  3. 提交它(git commit -a)
  4. 切换到主分支(git checkout master)
  5. 做一些改变并在那里提交
  6. 切换回实验(git checkout experimental)
  7. 将主变更合并到实验(git merge master)
  8. 有一些冲突,但在我解决它们后,我做了'git add myfile'

  9. 而现在我被困住了,我无法回到主人那里

当我做

 $ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.
Run Code Online (Sandbox Code Playgroud)

我做了:

$ git rebase --abort
Run Code Online (Sandbox Code Playgroud)

没有任何进展?

我做了:

$  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.
Run Code Online (Sandbox Code Playgroud)

我能做些什么才能回到主分公司?

Jim*_*dra 245

合并期间发生冲突时,您必须手动完成合并提交.听起来你已经完成了前两个步骤,编辑冲突的文件然后git add在它们上运行以将它们标记为已解决.最后,您需要实际提交合并git commit.此时,您将能够再次切换分支.

  • 请注意,git commit:/将不起作用. (8认同)
  • 尝试`git commit -am"你的提交消息"`同时执行添加和提交. (4认同)
  • git commit确实有效。最好使用它来为您填充默认的合并提交消息。我避免使用`git commit -am',因为它将覆盖消息 (3认同)

Von*_*onC 131

解决合并冲突后如何完成合并?

使用Git 2.12(2017年第一季度),您将拥有更自然的命令:

git merge --continue
Run Code Online (Sandbox Code Playgroud)

请参阅Jeff King()提交的c7d227d(2016年12月15日). 请参阅Chris Packham()提交042e290,提交c261a87,提交367ff69(2016年12月14日).(由Junio C Hamano合并- -提交05f6e1b,2016年12月27日)peff
cpackham
gitster

请参阅2.12发行说明.

merge:添加" --continue"选项作为的代名词" git commit"

教' git merge' --continue允许'继续'合并完成它的选项.
解决冲突后完成合并的传统方式是使用' git commit'.
现在,像' git rebase'和' git cherry-pick' 这样的命令有一个' --continue'选项,添加这样的选项' git merge'呈现一致的UI.

  • @Mimi 好的,但是您使用的是 Git 2.12 或更高版本吗? (2认同)

Bom*_*mbe 22

如果您在合并/ rebase期间遇到困难,您可以随时

git reset --hard
Run Code Online (Sandbox Code Playgroud)

将您的工作恢复到上次提交的状态.这将从工作树中丢失您的更改,因此如果您在合并之前进行了本地修改,它们将在此之后消失 - 这就是为什么在您进行本地修改时不建议合并的原因.:)

  • 强制警告:`git reset --hard`抛弃未提交的更改 (14认同)
  • 为什么不只是`git merge --abort`,它没有丢失任何东西的风险? (5认同)

Sou*_*rem 11

每当使用命令合并两个分支时git merge brancha branchb,有两种可能性:

  1. 一个分支(比如brancha)可以通过跟随其提交历史来到达另一个分支(比如branb).在这种情况下,git只是快速转发头指向最近的分支(在本例中为branchb).

    但是如果两个分支在某个较旧的点上分歧,那么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暂停的命令来添加您对暂存区域所做的更改,然后使用该命令提交更改.我希望这可以解释您的查询.另外,请访问上面的链接以了解详细信息.如有任何疑问,请在下面评论,我将很乐意为您提供帮助.


Shi*_*kin 11

就是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


Tim*_*dly 6

手动解决冲突后的下一步是: -

  1. git add.
  2. git status(这将显示继续自动合并过程所需的命令)
  3. [命令GIT中所暗示的,例如git merge --continue,git cherry-pick --continue,git rebase --continue]

  • 没有git的合并--continue (15认同)
  • 有反弹 - 继续,不合并 - 继续 (5认同)