idea本地代码撤消合并的方法

0 阅读2分钟

✅ 目标

撤销本地已提交但未推送的合并提交(如 git merge 或 git pull 引入的 commit),同时完整保留你未提交的本地测试代码


🔧 操作步骤


1. 本地先备份(保护你的测试代码,可选)

git stash push --include-untracked -m "backup for local test changes"

✅ 作用:

  • 保存所有 已修改但未 add 的 tracked 文件
  • 保存所有 untracked 文件(比如你新建的 application.properties
  • 避免后续操作意外覆盖你的测试内容

2. git status 查看有几个待提交的 commit

其实 git status 不会显示“有几个待提交的 commit”  —— 它只显示工作区和暂存区状态。

✅ 正确做法是用:

git log --oneline -10

git status

看这行提示:

Your branch is ahead of 'origin/main' by 7 commits.

→ 这里的 7 就是你本地有 7 个未推送的提交

📌 确认你要回退的数量 N(比如 N=4 或 N=7)


3. 回退提交历史(不丢工作区)

git reset --soft HEAD~N

🔁 把 N 替换成你上一步确认的数字,例如:

git reset --soft HEAD~4

✅ --soft 的效果:

  • 删除最近 N 个提交(从历史中移除)
  • 保留工作区和暂存区的所有内容不变(所以你的代码还在)

⚠️ 注意: 必须是 英文波浪号(不是中文 


4. 清空暂存区(丢弃合并带来的变更)

git restore --staged .

或兼容旧版 Git 的写法:

git reset

✅ 作用:

  • 把上一步因 --soft 而留在暂存区的“合并代码”全部取消暂存
  • 工作区文件不受影响(你的测试代码依然在)

5. 恢复你的本地测试代码

git stash pop

✅ 自动恢复你在第 1 步保存的所有本地修改(包括 untracked 文件)

  • 如果有冲突,Git 会提示,但一般不会发生

🎯 最终结果

  • ✅ 那 N 个合并提交已从本地历史中消失
  • ✅ 你的未提交测试代码完整保留
  • ✅ 没有推送任何不需要的内容到远程
  • ✅ 分支状态干净,可重新操作