Git撤销与重做提交操作指南

Git撤销与重做提交操作指南

技术背景

在使用Git进行项目开发时,我们可能会因为各种原因需要撤销之前的提交,或者对提交内容进行修改。比如提交了错误的代码、误删了文件等。掌握如何撤销和重做提交操作,能帮助我们更灵活地管理代码版本,避免错误提交对项目造成影响。

实现步骤

撤销本地提交

  • 保留更改:如果想要撤销最后一次提交,但保留所做的更改,可以使用git reset --soft HEAD^。示例如下:
1
2
3
4
5
git log
# 显示提交日志,找到要撤销的提交
commit 101: bad commit # 最新提交,即HEAD
commit 100: good commit # 倒数第二个提交,是我们想要恢复到的状态
git reset --soft HEAD^
  • 丢弃更改:若不关心所做的更改,希望直接回到上一次提交的状态,可以使用git reset --hard HEAD^
1
git reset --hard HEAD^

撤销已公开提交

如果已经将提交推送到远程仓库,就不能简单地使用reset,而是要使用git revert HEAD创建一个新的提交来撤销当前HEAD的更改。示例如下:

1
2
git revert HEAD
git commit -m 'restoring the file I removed by accident'

重做提交

若撤销提交后,想要重新提交更改,可以按以下步骤操作:

1
2
3
4
# 假设之前执行了git reset HEAD~
[ edit files as necessary ] # 必要时编辑文件
git add . # 添加更改到暂存区
git commit -c ORIG_HEAD # 提交更改,重用旧的提交消息

修改最后一次提交

可以通过替换索引中的文件并使用git commit --amend来修改最后一次提交。示例如下:

1
2
3
git rm --cached *.class
git add *.java
git commit --amend

核心代码

撤销本地提交

1
2
3
4
# 保留更改
git reset --soft HEAD^
# 丢弃更改
git reset --hard HEAD^

撤销已公开提交

1
2
git revert HEAD
git commit -m '描述撤销操作的信息'

重做提交

1
2
git add .
git commit -c ORIG_HEAD

修改最后一次提交

1
2
3
git rm --cached *.class
git add *.java
git commit --amend

最佳实践

  • 本地开发:在本地开发时,如果发现提交有误,优先使用git reset来撤销提交。如果还想保留更改进行后续调整,使用--soft选项;如果确定不需要这些更改,使用--hard选项。
  • 公共仓库:对于已经推送到公共仓库的提交,使用git revert来创建一个新的提交来撤销更改,避免使用--force推送,以免影响其他开发者的工作。
  • 添加忽略文件:将不必要的文件添加到.gitignore中,避免误提交。例如,将*.class添加到.gitignore中,防止提交不必要的类文件。

常见问题

误使用git reset --hard丢失了提交怎么办?

可以使用git reflog查看操作记录,找到丢失提交的SHA-1值,然后使用git checkout -b someNewBranchName shaYouDestroyed恢复该提交。示例如下:

1
2
3
git reflog
# 找到丢失提交的SHA-1值,假设为2c52489
git checkout -b new_branch 2c52489

撤销提交后,如何重新提交更改?

撤销提交后,使用git add将更改添加到暂存区,然后使用git commit重新提交。可以使用git commit -c ORIG_HEAD重用旧的提交消息。

已经推送的提交可以使用git reset撤销吗?

不建议这样做。因为git reset会修改本地的提交历史,而已经推送到远程仓库的提交历史被其他开发者拉取后,使用git reset并强制推送会导致其他开发者的工作出现问题。应该使用git revert来创建一个新的提交来撤销更改。


Git撤销与重做提交操作指南
https://119291.xyz/posts/2025-05-06.git-undo-and-redo-commit-guide/
作者
ww
发布于
2025年5月6日
许可协议