Skip to content

一、为什么多人协同必然会遇到冲突? ​

在现代敏捷研发与测试工程中,团队成员通常在各自的特性分支(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>:远端被拉取过来的最新代码。

仲裁解决三步走: ​

  1. 沟通与裁决:联系对应代码作者,根据业务需求决定保留哪一方,或合并双方的改动;
  2. 清理标记:删除所有 <<<<<<<、=======、>>>>>>> 冲突标记符,留下干净的最终代码;
  3. 暂存并提交:
    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 pop

2. 彻底放弃本地脏提交,强制对齐远端最新基线 ​

在本地分支被改乱、尝试合并产生海量无意义冲突,且确认本地改动可以完全舍弃时,最干净的重置手段:

bash
# 1. 抓取远端仓库的最新引用全集(不修改工作区)
git fetch --all

# 2. 将当前本地分支指针强制重置到远端最新 commit(本地所有未提交及孤立 commit 全部清空)
git reset --hard origin/master

# 3. 清理所有未跟踪的新建垃圾文件
git clean -fd

3. 取消正在进行的合并操作:git merge --abort ​

如果在执行合并或拉取时遇到了非常复杂的意外冲突,想立即恢复到合并发生之前的初始状态:

bash
git merge --abort

该命令会安全中止本次冲突解决流程,将工作区完整还原至合并前的一致状态。

测试开发工程师 · 专注自动化与系统架构 | 邮箱: hansblog@atumsoul.win