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

Git 解决合并冲突后如何完成合并?,git,git-merge,Git,Git Merge,我已经阅读了Git社区书的部分 所以我按照它创建了一个分支:实验性的 然后我: 切换到实验分支(git checkout实验) 做一系列的改变 提交它(gitcommit-a) 切换到主分支(git签出主分支) 进行一些更改并在那里提交 切换回实验(git checkout实验) 合并主机更改为实验(git合并主机) 存在一些冲突,但在解决这些冲突后,我执行了“git add myfile” 现在我被困住了,我不能回到主人身边 当我这样做的时候 $ git checkout master er

我已经阅读了Git社区书的部分

所以我按照它创建了一个分支:
实验性的

然后我:

  • 切换到实验分支(git checkout实验)
  • 做一系列的改变
  • 提交它(gitcommit-a)
  • 切换到主分支(git签出主分支)
  • 进行一些更改并在那里提交
  • 切换回实验(git checkout实验)
  • 合并主机更改为实验(git合并主机)
  • 存在一些冲突,但在解决这些冲突后,我执行了“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.
    

    如何才能返回主分支?

    当合并过程中发生冲突时,您必须手动完成合并提交。听起来您已经完成了前两个步骤,编辑冲突的文件,然后对其运行
    git add
    ,将其标记为已解决。最后,您需要使用
    git commit
    实际提交合并。此时,您将能够再次切换分支


    快速提示:您可以使用
    git commit-am“您的提交消息”
    对跟踪文件同时执行添加和提交操作。(信用:@vaheeds)

    如果您在合并/重设基础时遇到问题,您可以随时

    git reset --hard
    

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

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

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

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

  • 一个分支(比如brancha)可以通过遵循其提交历史记录被另一个分支(比如branchb)访问。在本例中,git只需快进头部以指向最近的分支(在本例中为branchb)

    2.但是如果这两个分支在某个较旧的点上出现分歧,那么git将创建一个新快照并添加一个指向它的新提交。万一 合并的分支之间没有冲突,git可以顺利地创建一个新的提交

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

    现在回到有趣的案例,合并分支之间存在合并冲突。我引用了这一页

    Git没有自动创建新的合并提交。在您解决冲突时,它已暂停该过程。如果要查看在合并冲突后的任何时候哪些文件未合并,可以运行
    git status



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

    只需
    git提交即可

    可选
    git中止
    it:

    为了简化合并操作,请安装kdiff3并将其配置为合并工具。说明:


    该页面包含以下视频:

    我想澄清的第一件事是,分支名称只是特定提交的别名。提交是git在拉、推合并等操作中完成的。每个提交都有一个唯一的id

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

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

    第三种情况是git无法自动解决冲突。在这种情况下,您需要手动合并它们。在我看来,这是最容易做到的合并采取,如araxis合并或p4merge(免费)。无论哪种方式,您都必须逐个处理每个文件。如果合并似乎被卡住了,请使用$git merge--continue来推动它。Git应该告诉您它是否不能继续,如果可以,为什么不能。如果您觉得在某个时候合并失败了,可以执行$git merge--abort,任何合并都将撤消,您可以重新开始。完成后,合并的每个文件都将是需要添加和提交的修改文件。您可以使用$g验证文件的位置
    git merge --continue
    
    <<<<<<< HEAD
    conflicted text from HEAD
    =======
    conflicted text from merging_branch
    >>>>>>> merging_branch
    
    "git checkout "MAIN_BRANCH"
    
    Auto-merging src/file1.py
    CONFLICT (content): Merge conflict in src/file1.py
    Auto-merging src/services/docker/filexyz.py
    Auto-merging src/cache.py
    Auto-merging src/props.py
    CONFLICT (content): Merge conflict in src/props.py
    Auto-merging src/app.py
    CONFLICT (content): Merge conflict in src/app.py
    Auto-merging file3
    CONFLICT (content): Merge conflict in file3
    Automatic merge failed; fix conflicts and then commit the result.
    
     Unmerged paths:
          (use "git add <file>..." to mark resolution)
    
            both modified:   file3
            both modified:   src/app.py
            both modified:   src/props.py
            both modified:   src/utils/file1.py
    
    git add file3
    git add src/app.py
    git add src/props.py
    git add src/utils/file1.py
    
     On branch MAIN_BRANCH
      Your branch is ahead of 'origin/MAIN_BRANCH' by 10 commits.
      (use "git push" to publish your local commits)