没 push 的提交用 git reset --soft head~1 撤销最安全,仅回退提交指针,保留暂存区和工作区;已 push 的必须用 git revert 生成反向提交,避免强制推送破坏协作历史。

没 push 的提交,用 git reset --soft HEAD~1 最安全;已 push 的,必须用 git revert,别碰 --force。
刚提交完但还没 git push,怎么撤回又不丢修改
你点完提交按钮,突然发现 message 写错、漏了文件,或者想拆成两个提交——这时候 git reset --soft HEAD~1 是唯一推荐的第一步。它只把分支指针(HEAD)挪回去,暂存区和工作区原封不动。
全面审计 Tasks.md 和 Flatnotes 的一致性与准确性;以 GitHub (gh CLI) 为事实来源检测过时笔记/卡片及缺失链接,并生成报告及可选修复计划。
-
--soft:所有文件仍显示在 VS Code 「源代码管理」面板的 “STAGED CHANGES” 里,可直接改 message 或右键补加文件再提交 -
--mixed(可省略):文件退到 “CHANGES” 列表,变成未暂存状态,需手动右键 → “暂存更改” 才能再提 -
--hard:工作区瞬间回到上上个提交,未暂存的修改永久丢失(除非靠git reflog捞) - VS Code 右上角的 →
Undo Last Commit按钮等效于--soft,但它只在“最新提交是你刚提的 + 未 push”时亮起;切过分支、用过git commit --amend,它就消失——别等它,直接敲命令更可靠
已 git push 到远程,为什么不能 reset --hard 后强推
一旦 git push 成功,那条提交就成了团队共享历史的一部分。你本地 git reset --hard HEAD~1 再 git push --force-with-lease,会覆盖远程分支,导致协作者 git pull 时出现冲突、丢失他们基于你提交做的改动,CI 流水线也可能爆红。
- 正确做法是
git revert HEAD:生成一条新提交,内容精准抵消上一条的所有变更 - VS Code 中右键提交历史 →
Revert Commit,底层就是这条命令,推送时不需要--force - 如果被 revert 的改动和当前代码有重叠,会触发冲突,VS Code 会高亮冲突文件,解决后执行
git add+git revert --continue -
git revert不改原有提交哈希,PR 关联、CI 日志、代码审查记录全都能对得上;而reset后强制推送会让这些链路断掉
git revert 遇到合并提交(merge commit)报错怎么办
执行 git revert abc1234 时若提示 error: commit abc1234 is a merge but no -m option was provided,说明你正试图 revert 一个由 git merge 产生的提交。
- 必须加
-m 1参数:git revert -m 1 abc1234 -
-m 1表示“以第一个父提交为基准做反向操作”,这是绝大多数场景下的正确选择(比如从feature合入main,main是第一个父) - VS Code 的图形化
Revert Commit不支持自动处理 merge commit,遇到这个错误只能切终端手动加参数 - 真正容易被忽略的是:
revert合并提交时,Git 默认不知道你要“撤销谁的视角”,不指定-m就卡住——这不是 bug,是设计使然










