关于git:如何在解决合并冲突后完成合并?

How do I finish the merge after resolving my merge conflicts?

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

所以我跟着它创建了一个分支:experimental

然后我:

  • 切换到实验分支(Git校验实验)
  • 做一些改变
  • 提交(git commit-a)
  • 切换到主分支(git checkout master)
  • 进行一些更改并在那里提交
  • 切换回实验(Git校验实验)
  • 合并主控形状更改为实验形状(Git合并主控形状)
  • 有一些冲突,但在我解决之后,我确实添加了我的文件。

  • 现在我被困住了,我不能再回到主人身边了

  • 当我这样做的时候

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

    我做到了:

    1
    $ git rebase --abort

    没有正在进行的重新平衡?

    我做到了:

    1
    2
    3
    $  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的合并。此时,您将能够再次切换分支。


    How do I finish the merge after resolving my merge conflicts?

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

    1
    git merge --continue

    见Jeff King(peff的Commit C7D227D(2016年12月15日)。见Chris Packham的Commit 042E290、Commit C261A87、Commit 367FF69(2016年12月14日)(cpackham)。(由Junio C Hamano——EDOCX1【2】——于2016年12月27日提交05F6E1B合并)

    参见2.12发行说明。

    merge: add '--continue' option as a synonym for 'git commit'

    Teach 'git merge' the --continue option which allows 'continuing' a
    merge by completing it.
    The traditional way of completing a merge after resolving conflicts is to use 'git commit'.
    Now with commands like 'git rebase' and 'git cherry-pick' having a '--continue' option adding such an option to 'git merge' presents a consistent UI.


    如果在合并/重新平衡过程中卡住,可以

    1
    git reset --hard

    将您的工作恢复到上一次提交的状态。这将丢失工作树中的更改,因此如果在合并之前进行了本地修改,则在合并之后这些更改将消失,这就是为什么在进行本地修改时建议不要启动合并。:)


    就这样。

    可选git abortIT:我遇到了合并冲突。如何中止合并?

    为了使合并时的生活更容易,请安装kdiff3并将其配置为合并工具。说明: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=cc4pp7iuzo


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

  • 另一个分支(比如brancha)可以通过跟踪它的提交历史来访问一个分支(比如branchb),在这种情况下,git只需快速地向前移动头来指向最近的分支(比如branchb)。

    2.但是如果两个分支在某个较旧的点上发生分歧,那么Git将创建一个新的快照,并添加一个指向它的新提交。所以以防万一您要合并的分支之间没有冲突,Git顺利地创建了一个新的提交。

  • Run git log to see the commit after you have merged two non-conflicting branches.

    现在回到有趣的情况,合并分支之间存在合并冲突。我在https://git-scm.com/book/en/v2/git-branching-basic-branching-and-merging页引用了这个。

    Git hasn’t automatically created a new merge commit. It has paused the process while you resolve the conflict. If you want to see which files are unmerged at any point after a merge conflict, you can run git status

    因此,如果存在合并冲突,您需要解决冲突,然后使用git add filename将您所做的更改添加到临时区域,然后使用命令git commit提交更改,该命令因冲突而被git暂停。希望这能解释您的查询。也请访问上面的链接以获得详细的了解。如有任何疑问,请在下面发表评论,我很乐意为您提供帮助。


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

  • Git添加。
  • Git状态(这将显示继续自动合并过程所需的命令)
  • [命令git建议,例如git merge --continuegit cherry-pick --continuegit rebase --continue]

  • 在添加了所有文件之后,下一步就是"git提交"。

    "git status"将建议您做什么:底部列出了尚未添加的文件,完成后,它将在顶部建议提交,解释当前分支的合并状态。


    当试图合并的两个分支更改了同一文件的同一部分时,就会发生合并冲突。您可以生成与git status冲突的列表。

    当遇到冲突行时,Git将使用标记冲突内容两侧的视觉指示器编辑受影响文件的内容。

    1
    2
    3
    4
    5
    <<<<<<< HEAD
    conflicted text from HEAD
    =======
    conflicted text from merging_branch
    >>>>>>> merging_branch

    当修复冲突文件并准备合并时,您所要做的就是运行git addgit commit来生成合并提交。一旦作出承诺,git push将对分支机构进行更改。

    参考文章:Git合并。


    我要澄清的第一件事是,分支名称只是特定提交的别名。提交就是git的工作原理,当你拉,推合并等等。每个提交都有一个唯一的ID。

    当您进行$git合并时,实际发生的情况是git尝试将当前分支快速转发到引用分支所在的提交(换句话说,两个分支名称都指向同一提交)。对于git来说,这种情况最容易处理,因为没有新的提交。想想大师跳上你树枝上的百合花。可以设置--no ff标志,在这种情况下,Git将创建一个新的提交,不管是否有任何代码冲突。

    在您试图合并的两个分支之间存在代码冲突的情况下(通常是两个提交历史记录在过去共享一个公共提交的分支),快进无法工作。Git可能仍然能够自动合并文件,只要冲突文件中的两个分支没有更改同一行。在这种情况下,Git将为您合并冲突文件并自动提交它们。您可以通过执行$git diff——缓存来预览git是如何做到的。或者您可以将--no commit标志传递给merge命令,它将在索引中保留修改过的文件,您需要添加和提交这些文件。但是您可以对这些文件进行$git diff,以查看合并将更改什么。

    第三种情况是当存在冲突时,Git无法自动解决。在这种情况下,您需要手动合并它们。在我看来,这是最容易做的合并采取,如阿拉西斯合并或p4merge(免费)。不管是哪种方式,您都必须逐个处理每个文件。如果合并似乎被卡住了,使用$git merge——继续,推动它前进。Git应该告诉你它是否不能继续,如果可以,为什么不继续。如果您觉得在某个时刻合并失败了,您可以执行$git合并--中止,任何合并都将撤消,您可以重新开始。完成后,合并的每个文件都将是一个需要添加和提交的修改过的文件。您可以验证文件在$git状态下的位置。如果尚未提交合并文件。您需要这样做才能完成合并。在切换分支之前,必须完成合并或中止合并。


    可能很晚了。这是因为你的Git头没有更新。这一建议将解决这一问题。