Git分支超前数十个提交,如何同时保留新旧代码行且不丢修改?
最优解决方案
你的分支已经超前几十个提交,直接用git revert会把整个替换变更回滚——等于把新增的Custom-LoggingFunction也删掉,完全不符合需求。下面给你两种靠谱的解决办法:
方法一:手动补行(最省心,适合公开分支)
- 找出所有被替换过
Write-Host的脚本文件,在对应的Custom-LoggingFunction "Something went wrong" -ErrorAction Stop行旁边(上下位置均可),把原来的Write-Host "Something went wrong" -ForegroundColor Red重新加回去。 - 执行
git add <修改后的文件名>,然后提交变更:git commit -m "保留原Write-Host日志行,同时保留Custom-LoggingFunction"。
这种方法不会改动历史提交,适合已经推送到远程、有其他团队成员协作的分支,完全没风险。
方法二:交互式变基(精准修正原始提交,适合私有分支)
如果你想把这个修改整合到最初的替换提交里,不想多一个额外的提交,可以用变基操作:
- 先找到那个替换代码的提交哈希——用
git log --grep="替换Write-Host"(把引号里的内容换成你当时的提交关键词)就能搜到,假设哈希是abc123。 - 运行
git rebase -i abc123~1,这里的abc123~1是指目标提交的上一个父提交。 - 弹出编辑器后,把目标提交那行的
pick改成edit,保存退出。 - 现在Git会停在那个替换代码的提交节点上,打开脚本文件把
Write-Host行加回去,执行git add <文件名>,接着用git commit --amend修改原提交(如果想单独新增一个提交就直接执行git commit)。 - 最后运行
git rebase --continue,Git会自动把后面几十个提交重新应用到修改后的代码上。
⚠️ 注意:变基会修改提交历史,如果这个分支已经推到远程且有其他人基于它开发,别随便用。非要用的话,推送时得加--force-with-lease,而且要提前跟团队同步情况。
内容的提问来源于stack exchange,提问作者silverbackbg
相关产品推荐
相关产品推荐

