TortoiseGit冲突解决实战上机练习讲义一、练习目标1. 掌握TortoiseGit中冲突产生的场景多分支并行修改同一文件同一位置2. 熟练使用TortoiseGit图形化工具完成冲突检测、冲突查看、冲突编辑、冲突提交的全流程3. 能够区分“可自动合并”与“需手动解决”的冲突类型规避合并过程中的代码丢失、错乱问题4. 理解冲突解决的核心逻辑能应对实际开发中的常见冲突场景。二、前置准备2.1 环境准备安装TortoiseGit版本2.13及以上附带Git环境确保右键能看到TortoiseGit菜单Git Bash、Git Commit等准备一个本地Git仓库可新建也可克隆远程仓库实操建议新建避免影响现有项目文本编辑器记事本、VS Code均可用于编辑冲突代码。2.2 仓库初始化实操步骤新建一个文件夹命名为「TortoiseGit_Conflict_Practice」作为本地仓库目录右键该文件夹选择「Git Init Here」初始化本地仓库文件夹内会生成隐藏的.git目录在仓库目录下新建一个文本文件「student.txt」作为冲突练习的目标文件右键「student.txt」选择「TortoiseGit → Add」将文件添加到暂存区右键仓库空白处选择「TortoiseGit → Commit → master」填写提交信息如“初始化student.txt”点击「Commit」完成首次提交此时master分支有一个初始版本。三、冲突场景搭建核心步骤必做本次练习模拟「多分支并行开发修改同一文件同一位置」的真实场景分为3个角色或3个操作步骤分别在master分支、dev1分支、dev2分支修改文件制造冲突。步骤1创建并切换到dev1分支右键仓库空白处选择「TortoiseGit → Switch/Checkout...」在弹出的窗口中「Branch」选择「Create new branch」分支名填写「dev1」勾选「Working tree will be updated」点击「OK」完成分支创建并切换到dev1打开「student.txt」编辑内容如下重点修改第2行学号2024001姓名张三专业计算机科学与技术班级计科2班保存文件右键仓库空白处选择「TortoiseGit → Commit → dev1」提交信息填写「dev1分支修改student.txt添加张三信息」点击「Commit」完成dev1分支的提交。步骤2切换回master分支创建并切换到dev2分支右键仓库空白处选择「TortoiseGit → Switch/Checkout...」「Branch」选择「master」点击「OK」切换回master分支再次右键选择「Switch/Checkout...」创建新分支「dev2」操作同dev1切换到dev2分支打开「student.txt」此时master分支的初始内容未包含dev1的修改编辑内容如下同样修改第2行与dev1分支冲突学号2024001姓名李四专业软件工程班级软工1班保存文件右键仓库空白处选择「TortoiseGit → Commit → dev2」提交信息填写「dev2分支修改student.txt添加李四信息」点击「Commit」完成dev2分支的提交。步骤3制造冲突合并dev1到dev2触发冲突确保当前处于「dev2」分支可通过右键「TortoiseGit → Branch」查看当前分支前有“*”标记右键仓库空白处选择「TortoiseGit → Merge...」在弹出的窗口中「Merge from」选择「dev1」分支其他默认点击「OK」此时会弹出「冲突提示窗口」提示「Conflicts found」发现冲突点击「OK」进入冲突解决环节核心实操。四、冲突解决实操步骤重点上机核心冲突产生后TortoiseGit会标记冲突文件文件图标会变成「红色感叹号」本次冲突文件为「student.txt」冲突位置为第2行姓名字段需手动编辑解决。步骤1查看冲突文件右键冲突文件「student.txt」选择「TortoiseGit → Edit Conflicts」会自动打开文本编辑器如VS Code显示冲突内容冲突内容格式说明TortoiseGit自动标记冲突区域学号2024001 HEAD当前分支dev2的内容 姓名李四 专业软件工程 班级软工1班 冲突分隔线上方是当前分支内容下方是待合并分支dev1的内容 姓名张三 专业计算机科学与技术 班级计科2班 dev1待合并分支dev1的内容解读当前分支dev2的第2-4行与待合并分支dev1的第2-4行存在冲突无法自动合并需手动修改。步骤2编辑冲突手动选择并解决核心操作细节手动选择冲突的核心是明确区分冲突标记对应的分支内容根据需求选择保留某一分支内容、整合两者内容或舍弃无用内容全程需精准操作避免代码丢失或错乱具体操作细节如下第一步明确冲突标记含义关键前提 打开冲突文件后TortoiseGit自动生成的3类冲突标记需精准区分避免误删有用内容 - HEAD标记当前所在分支本次为dev2分支的内容即“本地分支”内容是当前正在操作的分支版本 -冲突分隔线上方是当前分支dev2内容下方是待合并分支dev1内容用于区分两个分支的冲突部分 - dev1标记待合并分支本次为dev1分支的内容即“待合并版本”内容是需要合并到当前分支的版本。 这三类标记是Git识别冲突的关键手动选择冲突后必须彻底删除否则提交会失败。第二步手动选择冲突内容3种常见场景贴合实操 结合本次练习的冲突内容手动选择冲突主要有3种方式可根据实际开发需求选择操作细节如下 1. 只保留当前分支dev2内容删除及其下方所有内容含 dev1标记同时删除 HEAD标记最终保留内容为学号2024001姓名李四专业软件工程班级软工1班 2. 只保留待合并分支dev1内容删除 HEAD及其下方所有内容含分隔线同时删除 dev1标记最终保留内容为学号2024001姓名张三专业计算机科学与技术班级计科2班 3. 整合两个分支内容本次练习要求保留两个分支的有效内容删除冲突标记对冲突部分进行整合修改后内容如下需确保无任何冲突标记学号2024001姓名张三、李四合并冲突内容专业计算机科学与技术、软件工程班级计科2班、软工1班。 补充说明手动选择时需逐行核对冲突内容若存在多处冲突如多位置冲突练习需逐个标记区域单独选择不可遗漏任一冲突点避免部分冲突未解决导致提交失败。第三步保存并确认选择结果 手动选择并编辑完成后务必保存文件快捷键CtrlS关闭文本编辑器此时可再次打开冲突文件核对内容确认无冲突标记、选择的内容完整、无多余空格或错乱代码确保手动选择的冲突结果符合需求避免因保存不及时或编辑失误导致操作无效。根据实际需求编辑冲突内容删除冲突标记保留需要的代码或整合两者内容本次练习统一要求保留两个分支的姓名信息整合专业和班级修改后内容如下删除、、标记学号2024001姓名张三、李四合并冲突内容专业计算机科学与技术、软件工程班级计科2班、软工1班保存文件关闭文本编辑器。步骤3标记冲突已解决提交合并结果右键冲突文件「student.txt」选择「TortoiseGit → Resolved」标记该文件冲突已解决文件图标会从「红色感叹号」变为「绿色对勾」右键仓库空白处选择「TortoiseGit → Commit → dev2」此时提交信息会自动填充「Merge branch dev1 into dev2」可补充说明如“解决dev1与dev2分支student.txt冲突”点击「Commit」完成冲突合并的提交验证结果打开「student.txt」确认内容为修改后的整合内容同时右键「TortoiseGit → Log」可查看合并记录包含dev1和dev2的提交记录。五、拓展练习可选强化实战练习1自动合并场景无冲突切换到master分支创建新分支「dev3」在dev3分支中编辑「student.txt」新增第5行如“联系方式13800138000”提交修改切换回dev2分支执行「Merge dev3」观察TortoiseGit是否能自动合并无冲突提示提交合并结果后查看文件是否新增了第5行。练习2多位置冲突解决切换到master分支创建「dev4」「dev5」两个分支在dev4分支中修改「student.txt」的第1行学号改为2024002和第3行专业改为物联网工程提交在dev5分支中修改「student.txt」的第1行学号改为2024003和第4行班级改为物联1班提交将dev4合并到dev5解决两处冲突学号、专业/班级提交合并结果验证修改是否正确。六、注意事项必看冲突解决前务必备份冲突文件或查看日志避免误操作导致代码丢失编辑冲突时必须删除TortoiseGit自动生成的冲突标记、、否则提交会失败合并完成后务必验证文件内容确认冲突已解决、代码无错乱再提交若合并过程中误操作可右键仓库空白处选择「TortoiseGit → Abort Merge」取消合并恢复到合并前的状态实际开发中冲突解决后建议与相关开发人员确认修改内容避免不符合业务需求。七、练习总结1. 冲突产生的核心原因多分支或多人修改了「同一文件的同一位置」Git无法判断保留哪一份内容需手动干预2. 冲突解决的核心流程触发冲突 → 查看冲突 → 编辑冲突 → 标记已解决 → 提交合并结果3. TortoiseGit的核心操作Merge合并分支、Edit Conflicts编辑冲突、Resolved标记冲突解决、Abort Merge取消合并。八、常见问题排查问题1合并时提示「No conflicts found」但文件内容未更新→ 检查当前分支是否正确待合并分支是否有未提交的修改需先提交分支修改再合并问题2编辑冲突后标记「Resolved」失败→ 检查是否删除了所有冲突标记文件是否保存成功问题3提交合并结果时提示「nothing to commit」→ 确认冲突已标记为Resolved且文件有实际修改未重复提交。