Git 冲突问题:合并冲突与解决方法
Git 冲突通常发生在两个分支修改了同一文件的同一行代码,或者一个分支修改了文件而另一个分支删除了该文件时,Git 无法自动判断应该保留哪一部分修改。
以下流程图展示了冲突产生的典型场景:
graph LR
A["原始提交: v1.0"]
B["功能分支: 修改标题"]
C["主分支: 修改标题"]
A --> B
A --> C
D["尝试合并功能分支"] --> E{"检测到同一行修改?"}
E -- 是 --> F["产生冲突: 需人工介入"]
F --> G["手动解决并提交"]
E -- 否 --> H["自动合并成功"]
识别冲突标记
当 Git 提示发生冲突时,打开报错的文件,你会看到特殊的标记符号。这些标记将冲突的内容分为三个部分:当前分支的修改、分隔符、合并分支的修改。
| 标记符号 | 含义说明 |
|---|---|
<<<<<<< HEAD |
当前分支(你所在的分支)的修改内容开始标记 |
======= |
分隔符,区分上方当前分支与下方合并分支的代码 |
>>>>>>> branch_name |
合并分支(你要合并进来的分支)的修改内容结束标记 |
查看下方代码块示例,理解冲突在文件中的实际样子:
<<<<<<< HEAD
var color = "red";
=======
var color = "blue";
>>>>>>> feature/login
方法一:使用命令行手动解决
这种方式适用于所有环境,是最基础的解决手段。
- 切换 到发生冲突的项目目录下,打开 终端或命令行工具。
- 输入
git status查看 状态,Git 会列出所有产生冲突的文件(通常标记为both modified)。 - 使用 编辑器(如 VS Code、Vim、记事本)打开 冲突文件。
- 搜索 文件中的
<<<<<<<符号,定位 冲突区域。 - 分析 代码差异,决定是保留“当前分支”的代码,保留“合并分支”的代码,还是将两者融合编写新的逻辑。
- 删除 所有的冲突标记(即
<<<<<<<、=======、>>>>>>>这三行),确保文件中只保留你最终想要的代码。 - 保存 文件并关闭 编辑器。
- 输入
git add <filename>暂存 该文件,这相当于告诉 Git “我已经解决好这个文件的冲突了”。(如果是解决完所有冲突,可以直接使用git add .)。 - 输入
git commit完成 合并提交。注意,此时不要修改提交信息,直接保存并退出默认的 merge 信息即可,或者根据需要修改 为更明确的说明。
方法二:使用 VS Code 图形化解决
如果你使用 VS Code,它提供了直观的冲突解决界面,无需手动处理标记符号。
- 打开 VS Code,在左侧资源管理器中找到 标记为黄色感叹号
!的冲突文件。 - 点击 该文件打开编辑器,代码上方会出现一个操作栏,提示 “Accept Current Change”(接受当前更改)、“Accept Incoming Change”(接受传入更改)或 “Accept Both”(两者都接受)。
- 点击
Accept Current Change如果你只想保留你当前的代码。 - 点击
Accept Incoming Change如果你只想保留合并进来的代码。 - 点击
Accept Both如果你想同时保留两段代码(之后可能还需要手动调整逻辑)。 - 检查 代码确保逻辑无误。
- 按下
Ctrl + S保存 文件。VS Code 通常会自动识别文件已解决并将其标记为已暂存。 - 点击 左侧源代码管理图标,输入 提交信息并点击 对勾按钮完成提交。
紧急情况:放弃合并
如果你在解决冲突时觉得乱了套,想回到合并前的状态,可以执行放弃操作。
- 确保 你没有执行
git add或git commit。 - 输入
git merge --abort。 - Git 将重置 到你执行合并命令之前的状态,所有冲突标记都会消失,工作目录恢复干净。

暂无评论,快来抢沙发吧!