Skip to main content

使用命令行解决合并冲突

通过识别冲突的更改、编辑文件和提交解决方法,使用命令行解决合并冲突。

合并冲突发生在对文件同一行进行竞争性更改时,或者当一个人编辑文件,而另一个人删除同一文件时,会发生合并冲突。 请参阅“合并冲突”。

提示

可以使用冲突编辑器 GitHub 解决属于拉取请求的分支之间的争用行更改合并冲突。 请参阅“解决GitHub上的合并冲突”。

竞争行更改合并冲突

当竞争更改影响相同的行时,请选择要保留的更改,然后提交解决方案。

  1. 打开终端或 Git Bash。

  2. 进入有合并冲突的本地 Git 仓库。

    cd REPOSITORY-NAME
    
  3. 列出受合并冲突影响的文件。 在此示例中,styleguide.md 文件存在合并冲突。

    $ git status
    > # On branch branch-b
    > # You have unmerged paths.
    > #   (fix conflicts and run "git commit")
    > #
    > # Unmerged paths:
    > #   (use "git add <file>..." to mark resolution)
    > #
    > # both modified:      styleguide.md
    > #
    > no changes added to commit (use "git add" and/or "git commit -a")
    
  4. 打开首选文本编辑器,例如 Visual Studio Code,并导航到包含合并冲突的文件。

  5. 在文件中搜索冲突标记 <<<<<<<。 HEAD 或基分支的更改显示在后 <<<<<<< HEAD=======其他分支的更改和 >>>>>>> BRANCH-NAME

    If you have questions, please
    <<<<<<< HEAD
    open an issue
    =======
    ask your question in IRC.
    >>>>>>> branch-a
    
  6. 决定您是否想只保持分支的更改、只保持其他分支的更改,还是进行全新的更改(可能包含两个分支的更改)。 删除冲突标记 <<<<<<<=======>>>>>>>,并在最终合并中进行所需的更改。 例如,可以保留这两个更改:

    If you have questions, please open an issue or ask in our IRC channel if it's more urgent.
    
  7. 暂存更改。

    git add .
    
  8. 提交您的更改及注释。

    git commit -m "Resolve merge conflict by incorporating both suggestions"
    

现在可以合并命令行上的分支,或将更改推送到远程存储库GitHub,并在拉取请求中合并更改

解决了文件合并冲突

当一个分支删除文件,另一个分支编辑同一个文件时,选择是保留或删除文件,然后提交解析。

  1. 打开终端或 Git Bash。

  2. 进入有合并冲突的本地 Git 仓库。

    cd REPOSITORY-NAME
    
  3. 列出受合并冲突影响的文件。 在此示例中,文件 README.md 存在合并冲突。

    $ git status
    > # On branch main
    > # Your branch and 'origin/main' have diverged,
    > # and have 1 and 2 different commits each, respectively.
    > #  (use "git pull" to merge the remote branch into yours)
    > # You have unmerged paths.
    > #  (fix conflicts and run "git commit")
    > #
    > # Unmerged paths:
    > #  (use "git add/rm <file>..." as appropriate to mark resolution)
    > #
    > #  deleted by us:   README.md
    > #
    > # no changes added to commit (use "git add" and/or "git commit -a")
    
  4. 打开首选文本编辑器,例如 Visual Studio Code,并导航到包含合并冲突的文件。

  5. 决定是否保留已删除的文件。 若要将其添加回存储库,请执行以下操作:

    git add README.md
    

    要从存储库中删除此文件:

    $ git rm README.md
    > README.md: needs merge
    > rm 'README.md'
    
  6. 提交您的更改及注释。

    $ git commit -m "Resolve merge conflict by keeping README.md file"
    > [branch-d 6f89e49] Merge branch 'branch-c' into branch-d
    

解决合并冲突后,现在可以将更改推送到远程存储库 GitHub ,或将拉取请求合并到其基分支中。

延伸阅读