Git新建dev_2未从master迁出包含dev_1变更 如何修复本地及远程
Git分支dev_1变更清理操作指南
前置准备
- 执行
git status确认本地工作区无未提交的变更,存在未提交内容的话先运行git stash暂存 - 执行
git log --oneline dev_2,记录你在dev_2分支上自主开发的所有commit哈希值,避免操作中误删自有变更
方案1:交互式变基剥离dev_1变更(推荐,提交历史更整洁)
适用于大部分场景,自动剥离所有不属于dev_2的dev_1提交:
- 切换到dev_2本地分支:
git checkout dev_2 - 执行变基操作:
- 如果你需要dev_2只基于master:
git rebase -i --onto master dev_1 dev_2 - 如果你需要保留之前合并的develop分支变更:
git rebase -i --onto develop dev_1 dev_2
命令逻辑:将dev_2上所有不在dev_1分支中的提交,直接接到目标分支(master/develop)的末尾,自动过滤所有dev_1的变更
- 如果你需要dev_2只基于master:
- 变基过程中出现冲突的话,解决冲突后运行
git add .,再执行git rebase --continue,直到变基流程全部完成 - 本地验证dev_2功能正常,确认已无dev_1的相关变更
- 强制推送覆盖远程dev_2分支:
git push origin dev_2 --force-with-lease使用
--force-with-lease参数更安全,会先校验远程分支是否有其他人新提交的内容,避免误覆盖他人工作成果
方案2:重置+cherry-pick(适合dev_2自有提交数量少的场景)
操作逻辑更简单,不易出错:
- 切换到dev_2本地分支:
git checkout dev_2 - 基于目标分支重置dev_2:
- 仅基于master的话:
git reset --hard origin/master - 需保留develop变更的话:
git reset --hard origin/develop
- 仅基于master的话:
- 把你之前记录的dev_2自有commit逐个cherry-pick到当前分支:
git cherry-pick <你的commit哈希值> - 本地验证功能正常后,强制推送覆盖远程分支:
git push origin dev_2 --force-with-lease
本地工作区修复
上述操作完成后本地dev_2分支已自动完成修复,如果你之前暂存了未提交的内容,执行git stash pop即可恢复临时变更。
内容的提问来源于stack exchange,提问作者andrei_dev
相关产品推荐
相关产品推荐

