一、为什么多人协同必然会遇到冲突?
在现代敏捷研发与测试工程中,团队成员通常在各自的特性分支(Feature Branch)上并行开发。
当两个人同时修改了同一个文件的相同行,或者一人删除了文件而另一人修改了该文件时,在执行 git pull 或分支合并时就会触发经典的合并冲突阻断:
text
Auto-merging src/config/env.yaml
CONFLICT (content): Merge conflict in src/config/env.yaml
Automatic merge failed; fix conflicts and then commit the result.Git 会暂停合并流程,并在受影响的文件内部注入冲突标记,等待工程师人工仲裁。
二、认识 Git 冲突标记与人工仲裁
打开报冲突的文件,Git 会用三行特殊标记将双方的代码隔离标注:
text
<<<<<<< HEAD
# 本地当前分支的修改内容
RO_LOG_LEVEL: "DEBUG"
API_TIMEOUT: 15
=======
# 远程分支(或待合入分支)的代码
RO_LOG_LEVEL: "INFO"
API_TIMEOUT: 30
>>>>>>> origin/develop<<<<<<< HEAD至=======:当前分支本地的工作代码;=======至>>>>>>> <branch_name>:远端被拉取过来的最新代码。
仲裁解决三步走:
- 沟通与裁决:联系对应代码作者,根据业务需求决定保留哪一方,或合并双方的改动;
- 清理标记:删除所有
<<<<<<<、=======、>>>>>>>冲突标记符,留下干净的最终代码; - 暂存并提交:bash
git add src/config/env.yaml git commit -m "fix(merge): 解决与 origin/develop 的环境配置合并冲突" git push origin <your_feature_branch>
三、常用协同操作与锦囊妙招
1. 手头改动未完成,需紧急切分支或拉代码:git stash
如果在当前分支正在调试代码(尚未形成完整 commit),此时强行 git pull 会提示工作区被污染:
bash
# 1. 将工作区与暂存区的临时改动压入暂存堆栈
git stash save "正在排查登录接口,临时存盘"
# 2. 此时工作区恢复绝对干净,可顺畅 pull 或切换分支
git pull origin develop
# 3. 切回后,恢复暂存堆栈中的修改继续干活
git stash pop2. 彻底放弃本地脏提交,强制对齐远端最新基线
在本地分支被改乱、尝试合并产生海量无意义冲突,且确认本地改动可以完全舍弃时,最干净的重置手段:
bash
# 1. 抓取远端仓库的最新引用全集(不修改工作区)
git fetch --all
# 2. 将当前本地分支指针强制重置到远端最新 commit(本地所有未提交及孤立 commit 全部清空)
git reset --hard origin/master
# 3. 清理所有未跟踪的新建垃圾文件
git clean -fd3. 取消正在进行的合并操作:git merge --abort
如果在执行合并或拉取时遇到了非常复杂的意外冲突,想立即恢复到合并发生之前的初始状态:
bash
git merge --abort该命令会安全中止本次冲突解决流程,将工作区完整还原至合并前的一致状态。