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

我已阅读Git社区书籍的基本分支和合并部分。

所以我遵循它创build一个分支: experimental

然后我:

  1. 切换到实验分支(git checkout实验)
  2. 做一堆改变
  3. 提交(git commit -a)
  4. 切换到主分支(git checkout master)
  5. 做一些改变,并在那里犯下
  6. 切换回实验(git checkout实验)
  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. 

我做了:

 $ git rebase --abort 

没有发生重build?

我做了:

 $ 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. 

我可以做什么,我可以回到我的主分支?

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

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

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

 git merge --continue 

见Jeff King( peff )的 提交c7d227d (2016年12月15日) 。
见Chris Packham( cpackham )的 提交042e290 , 提交c261a87 , 提交367ff69 (2016年12月14日) 。
(由Junio C gitster合并- gitster – in commit 05f6e1b ,2016年12月27日)

merge :添加“ --continue ”选项作为“ git commit ”的同义词

教' git merge ' – 继续选项,允许通过完成“继续”合并。
解决冲突后完成合并的传统方式是使用“ git commit ”。
现在,像' git rebase '和' git cherry-pick '这样的命令有一个' --continue '选项,在' git merge '中添加这样一个选项可以提供一个一致的UI。

如果您在合并/重新绑定期间遇到问题,您可以随时进行

 git reset --hard 

把你的工作恢复到最后一次提交的状态。 这将会失去对工作树的更改,因此如果在合并之前进行了本地修改,则它们将在此之后消失 – 这就是为什么当您进行本地修改时不启动合并的原因。 🙂

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

  1. 一个分支(可以说是brancha)可以通过其他分支(比如说branchb)通过跟踪它的提交历史到达。在这种情况下,git简单地快进头指向最近的分支(在本例中为branchb)。

    但是,如果两个分支在某个较旧的点上有分歧,那么git会创build一个新的快照并添加一个指向它的新提交。 所以万一,如果你正在合并的分支之间没有冲突,git顺利地创build一个新的提交。

在合并两个不冲突的分支之后,运行git log来查看提交。

现在回到合并分支之间存在合并冲突的有趣案例。 我引用这个页面https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging

Git没有自动创build一个新的合并提交。 在解决冲突的过程中,它暂停了这个过程。 如果您想查看合并冲突后的任何时间哪些文件未合并,则可以运行git status


所以如果有合并冲突,你需要解决冲突,然后使用git add filename添加你对暂存区所做的更改,然后使用由git暂停的命令git commit来提交更改,因为冲突。我希望这解释你的查询。 也请访问以上链接了解详情。 如有任何疑问,请在下面留言,我很乐意提供帮助。

只是git commit

可以selectgit abort它:
我遇到了合并冲突。 我怎样才能中止合并?

为了使合并更轻松安装kdiff3并将其configuration为mergetool。 说明: http : //doodkin.com/2016/05/29/git-merge-easy-github-this-branch-has-conflicts-that-must-be-resolved-use-the-command-line/

该页面包含以下video: https : //www.youtube.com/watch?v = Cc4xPp7Iuzo

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

  1. git add。
  2. git状态(这会告诉你哪些命令是继续自动合并过程所必需的)
  3. [命令gitbuild议,例如git merge --continuegit cherry-pick --continuegit rebase --continue ]

我想明确的第一件事是分支名称只是特定提交的别名。 一个提交是git的工作,当你拉,推合并等等。 每个提交都有一个唯一的ID。

当你做$ git合并时,实际发生的事情是git试图快速转发你当前的分支到被引用分支所在的提交(换句话说,两个分支名字指向相同的提交)。这种情况是最简单的git因为没有新的提交。 想到大师跳到lilipad你的分支正在冷却。 可以设置–no-ff标志,在这种情况下git会创build一个新的提交,无论是否有代码冲突。

在你试图合并的两个分支之间存在代码冲突的情况下(通常两个分支的提交历史在过去共享一个共同的提交),快进将不起作用。 git仍然可以自动合并文件,只要同一行在冲突的文件中没有被两个分支所改变。 在这种情况下,git会为您合并冲突的文件并自动提交它们。 您可以通过执行$ git diff –cached来预览git的做法。 或者你可以将–no-commit标志传递给merge命令,这会将修改后的文件保留在你的索引中,你需要添加和提交。 但是你可以$ git diff这些文件来检查合并将会改变什么。

第三种情况是有git不能自动解决的冲突。 在这种情况下,您需要手动合并它们。 在我看来,这是最容易做到与合并,如araxis合并或p4merge(免费)。 无论哪种方式,你必须逐一做每个文件。 如果合并似乎被卡住,使用$ git merge –continue,来推动它。 Git应该告诉你它是否不能继续,如果有的话。 如果你觉得你在某个时候合并了,你可以做$ git merge –abort,任何合并都会被撤消,你可以重新开始。 完成后,您合并的每个文件都将是一个需要添加和提交的修改文件。 您可以使用$ git statusvalidation文件的位置。 如果还没有提交合并的文件。 您需要这样做才能完成合并。 您必须完成合并或中止合并,然后才能切换分支。