本地有修改时,如何合并远程更新?(保留/不保留本地修改两种方案)
在日常开发中,经常会遇到这样的场景:本地代码做了修改,但还没提交,此时远程仓库已有其他人推送的更新。直接执行 git pull 可能会报错(因本地修改与远程更新冲突),该如何处理?
一、想要保留本地修改(推荐)
通过「暂存本地修改→拉取远程更新→恢复本地修改」三步操作,既能同步远程最新代码,又能保留本地未提交的改动。
具体步骤:
暂存本地修改
用git stash将本地所有未提交的修改(包括工作区和暂存区)暂存到「Git 栈」中,此时工作区会恢复到上次提交的干净状态:git stash✅ 效果:本地修改被临时存储,工作区与远程仓库当前状态一致,为后续拉取远程代码扫清障碍。
拉取远程更新
此时可以安全地拉取远程仓库的最新代码(以origin远程的master分支为例):git pull origin master✅ 效果:远程最新代码被合并到本地当前分支,本地代码与远程同步。
恢复本地修改并处理冲突
用git stash pop将之前暂存的本地修改恢复到工作区:git stash pop⚠️ 注意:如果本地修改与远程更新存在冲突(同一文件同一位置有不同修改),Git 会提示
Auto-merging <文件名>并标记冲突位置,此时需要手动处理:打开冲突文件,找到类似以下标记的内容:
<<<<<<< Updated upstream # 远程更新的内容 ... ======= # 分隔线 ... >>>>>>> Stashed changes # 本地暂存的修改- 编辑文件,保留需要的内容(删除冲突标记
<<<<<<<、=======、>>>>>>>); - 处理完冲突后,执行
git add <冲突文件>标记为已解决,再正常提交即可。
补充:stash 相关实用命令
查看暂存列表(若多次 stash,可区分不同暂存):
git stash list # 输出格式:stash@{0}: WIP on <分支名>: <提交信息>恢复指定暂存(如恢复第 1 条暂存,索引从 0 开始):
git stash apply stash@{0} # apply 保留暂存记录,pop 会删除暂存记录删除暂存记录(若无需恢复):
git stash drop stash@{0} # 删除指定暂存 git stash clear # 清空所有暂存
二、不想要保留本地修改(谨慎使用)
若本地修改无价值,可直接丢弃本地所有未提交的改动,用远程代码覆盖本地。
具体步骤:
强制恢复本地到最近一次提交状态
用git reset --hard丢弃本地所有未提交的修改(包括工作区和暂存区),注意:此操作不可恢复,需确保本地修改确实无用:git reset --hard拉取远程更新覆盖本地
拉取远程最新代码,此时因本地已无修改,可直接覆盖:git pull origin master
三、总结与最佳实践
- 保留本地修改:优先用
git stash → git pull → git stash pop,安全且能处理冲突,适合大多数开发场景。 - 不保留本地修改:仅在确认本地修改无价值时使用
git reset --hard → git pull,务必谨慎(避免误删重要代码)。 - 协作建议:日常开发中,建议频繁提交本地修改(小步提交),减少
stash使用;拉取远程代码前,先确认本地修改是否已保存,避免冲突。
评论 (0)