git reset --soft HEAD~1 回退到上一个提交 '撤销最近一次 commit,代码改动保留,改动仍在暂存区(staged)'

如果你说的“摘到前一次提交”,常见有几种情况:

1. 回退到上一个提交(保留代码修改)

 

git reset --soft HEAD~1

 

效果:

  • 撤销最近一次 commit
  • 代码改动保留
  • 改动仍在暂存区(staged)

例如:

 

A -> B -> C (HEAD)

 

执行后:

 

A -> B (HEAD)

 

但 C 的代码修改还在。


2. 回退到上一个提交(保留代码,不保留暂存状态)

 

git reset HEAD~1

 

或

 

git reset --mixed HEAD~1

 

效果:

  • 删除最近一次 commit
  • 代码改动保留
  • 改动变成未暂存(unstaged)

3. 回退到上一个提交(代码也不要)

⚠️ 慎用

 

git reset --hard HEAD~1

 

效果:

 

A -> B -> C (HEAD)

 

变成:

 

A -> B (HEAD)

 

并且 C 的代码修改全部丢失。


4. 查看前一次提交

查看最近提交:

 

git log --oneline -n 2

 

例如:

 

8d3fa12 fix rdma issue
6a1c221 add rdma support

 

查看前一个提交内容:

 

git show HEAD~1

 

或者:

 

git checkout HEAD~1

 

进入该提交(Detached HEAD)。

返回当前分支:

 

git checkout main

 

或

 

git checkout feature

 


5. 从前一个提交创建新分支

有时想基于前一个提交调试:

 

git checkout -b debug_branch HEAD~1

 


6. 已经 push 到远程怎么办?

如果最近一次提交已经 push:

 

git reset --soft HEAD~1

 

之后需要强制更新远程:

 

git push --force-with-lease

 

推荐使用:

 

git push --force-with-lease

 

不要直接:

 

git push --force

 


常用场景

刚提交发现 commit message 或内容有问题:

 

git reset --soft HEAD~1
# 修改内容
git commit -m "new message"

 

或者更简单:

 

git commit --amend

 

修改最近一次提交,而不用 reset。

posted on 2026-09-26 12:55  ENGINEER-F  阅读(8)  评论(0)    收藏  举报