You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git合并origin master分支后丢失本地最新代码,如何同时保留双方改动?

问题原因排查
  • 优先检查分支名拼写问题:合并操作的第4步执行的命令为git checkout fearure-1,和实际开发的功能分支名feature-1存在拼写偏差。如果本地不存在fearure-1分支,部分Git版本会默认基于当前的master分支创建全新的同名空分支,此时执行git merge master不会产生任何有效内容变化,你原本在feature-1分支的改动自然不会出现在当前分支上,这是概率最高的诱因。
  • 若确认分支切换操作无误,丢失改动是因为Git默认的递归合并策略对代码改动的优先级判断出现偏差,自动合并时误将master分支的内容判定为更新版本,覆盖了你的本地改动。
本次丢失改动的恢复方法
  • 先切换回正确的功能分支:执行git checkout feature-1
  • 查看分支提交日志找到你最后一次提交的哈希值:执行git log --oneline,记录你自己提交的最新commit哈希值
  • 执行回退操作到合并前的状态:git reset --hard <你自己的最新commit哈希值>,注意该操作会丢弃合并后产生的所有未保存改动,执行前确认没有需要留存的内容。
后续同时保留两边改动的操作方案

方案一:带检查的合并操作

执行合并时关闭自动提交,手动校验合并结果后再完成提交,从根源避免自动覆盖问题,操作步骤如下:

  1. 同步远程最新的master分支内容
git fetch origin
git checkout master
git pull origin master
  1. 切换回功能分支,执行带参数的合并命令
git checkout feature-1
git merge --no-commit --no-ff master
  1. 此时Git会将合并结果放在工作区但不自动提交,你可以逐文件检查改动,确认自己的代码和master的改动都正确保留、没有异常覆盖后,再执行git commit提交合并结果。如果检查过程中发现有改动被误覆盖,可以手动修改对应文件后再提交。

方案二:使用变基操作同步改动

如果你希望功能分支的提交记录更干净,可以用变基代替合并,操作如下:

git fetch origin
git checkout feature-1
git rebase origin/master

变基过程中如果出现冲突,Git会逐个提交暂停等待你解决冲突,解决完成后执行git add <冲突文件>,再执行git rebase --continue直到所有变基操作完成。变基完成后你的提交会排在master所有新提交的后面,不会产生额外的合并提交记录,改动也不会被自动覆盖。

内容的提问来源于stack exchange,提问作者DS9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 07:15:03