Skip to content

07 解决 Git 合并冲突、回退与 Rebase

1. 解决合并冲突

合并冲突通常发生在以下场景: - 使用 git merge 合并两个分支时,两个分支对同一文件的同一部分进行了不同修改。 - 使用 git rebase 将当前分支的提交应用到目标分支时,遇到冲突。

1.1 合并冲突的解决步骤

  1. 触发冲突: 当执行 git merge <branch_name>git rebase <base_branch> 时,如果 Git 检测到冲突,会暂停操作并提示冲突文件。例如:

    git merge feature-branch
    
    输出可能如下:
    Auto-merging file.txt
    CONFLICT (content): Merge conflict in file.txt
    Automatic merge failed; fix conflicts and then commit the result.
    

  2. 查看冲突文件: 使用以下命令查看哪些文件有冲突:

    git status
    
    输出示例:
    both modified:   file.txt
    

  3. 手动解决冲突

  4. 打开冲突文件,Git 会用标记(如 <<<<<<<=======>>>>>>>)标识冲突部分:
    <<<<<<< HEAD
    当前分支的代码
    =======
    合并分支的代码
    >>>>>>> feature-branch
    
  5. 编辑文件,选择保留哪部分代码,或合并两者,然后删除标记。
  6. 示例:假设 file.txt 的冲突如下:

    <<<<<<< HEAD
    Hello from main branch
    =======
    Hello from feature branch
    >>>>>>> feature-branch
    
    修改为:
    Hello from both branches
    

  7. 标记冲突已解决: 解决冲突后,将文件添加到暂存区:

    git add file.txt
    

  8. 完成合并

  9. 对于 git merge,提交合并结果:
    git commit
    
    Git 会自动生成合并提交信息,或可手动编辑。
  10. 对于 git rebase,继续变基:

    git rebase --continue
    

  11. 推送更改(如果需要):

    git push origin <branch_name>
    

1.2 放弃合并或变基

如果冲突复杂或不想继续: - 放弃合并:

git merge --abort
- 放弃变基:
git rebase --abort
这些命令会将分支恢复到操作开始前的状态。

1.3 使用工具解决冲突

复杂冲突可使用可视化工具(如 IntelliJ IDEA、VS Code 或 GitKraken),它们提供图形界面来选择保留的代码片段。例如,在 IntelliJ IDEA 中: - 打开 Git -> Resolve Conflicts,界面会显示冲突文件的左右对比。 - 选择“Accept Left”或“Accept Right”,或手动编辑后点击“Apply”。

注意: - 在解决冲突前,建议备份分支:

git branch backup-<branch_name>
- 确保理解冲突内容,避免错误删除代码