Git同文件协作冲突:拉取他人代码不丢失本地修改的处理方案
Git协作冲突解决指南
一、不丢失本地修改的前提下拉取远程改动
三种常用方案,按需选择:
1. 暂存本地修改后拉取
适合临时保存未完成的修改,后续恢复:
- 暂存本地所有修改:
git stash - 拉取远程最新改动:
git pull origin <分支名> - 恢复暂存的本地修改,若有冲突Git会自动提示:
git stash pop - 打开冲突文件,手动处理
<<<<<<<、=======、>>>>>>>标记的内容,之后提交:git add <冲突文件> git commit -m "解决本地与远程的内容冲突"
2. 变基拉取(保持提交历史线性)
偏好整洁提交历史的场景推荐使用:
- 执行变基拉取,Git会将本地提交自动放在远程提交之后:
git pull --rebase origin <分支名> - 若出现冲突,先手动解决冲突文件,然后继续变基:
git add <冲突文件> git rebase --continue - 中途想放弃变基可执行:
git rebase --abort
3. 手动合并远程分支
适合需要明确控制合并过程的场景:
- 拉取远程分支到本地临时分支:
git fetch origin <分支名>:temp-branch - 切换回工作分支,合并临时分支:
git checkout <你的分支名> git merge temp-branch - 解决冲突后提交,最后删除临时分支:
git add <冲突文件> git commit -m "合并远程改动并解决冲突" git branch -d temp-branch
二、文件重命名后的冲突处理
Git会基于文件内容相似度自动识别重命名,但如果远程对原文件有修改、本地又完成了重命名,按以下步骤处理:
先拉取远程最新改动
用上述任意一种方式拉取远程代码,Git会提示原文件存在远程修改、本地有重命名操作的冲突。解决重命名+内容冲突
- 若Git已识别到重命名:远程对原文件的修改会被映射到新文件名上,直接打开新文件解决内容冲突即可。
- 若Git未识别到重命名(如文件内容改动过大):会出现原文件(远程修改版)和新文件(本地重命名版)同时存在的情况,此时:
- 将远程原文件的修改手动合并到本地新文件中;
- 删除冗余的原文件:
git rm <原文件名> - 添加新文件并提交:
git add <新文件名> git commit -m "解决重命名文件与远程的冲突"
规范重命名操作(避免后续冲突)
后续重命名文件时,尽量用Git命令执行,让Git明确记录重命名操作:git mv <原文件名> <新文件名> git add . git commit -m "重命名XXX文件为XXX"
内容的提问来源于stack exchange,提问作者newhere
相关产品推荐
相关产品推荐

