红茶的个人站点

  • 首页
  • 专栏
  • 开发工具
  • 其它
  • 隐私政策
Awalon
Talk is cheap,show me the code.
  1. 首页
  2. 开发工具
  3. 正文

Git 学习笔记 5:撤销操作

2026年2月3日 6点热度 0人点赞 0条评论

重新提交

有时候,你刚在本地分支提交了一个记录,但因为一些疏忽(比如忘记追踪某个新文件或者修改某个配置文件),不得不在稍后马上提交一个新记录,且只包含少数忽略的内容。

可以更优雅地处理这种问题,比如:

❯ git commit -m 'add user module'
[main 71c4fa9] add user module
 3 files changed, 61 insertions(+)
 create mode 100644 ch1/demo/src/main/java/cn/icexmoon/learngit/demo/controller/UserController.java
 create mode 100644 ch1/demo/src/main/java/cn/icexmoon/learngit/demo/entity/User.java
 create mode 100644 ch1/demo/src/main/java/cn/icexmoon/learngit/demo/service/UserService.java

这里从暂存区提交了三个文件到分支,假设发现少提交了一个文件:

❯ git commit --amend
[main 51fc7ad] add user module
 Date: Fri Jan 30 14:43:08 2026 +0800
 4 files changed, 81 insertions(+)
 create mode 100644 ch1/demo/src/main/java/cn/icexmoon/learngit/demo/controller/UserController.java
 create mode 100644 ch1/demo/src/main/java/cn/icexmoon/learngit/demo/entity/User.java
 create mode 100644 ch1/demo/src/main/java/cn/icexmoon/learngit/demo/service/UserService.java
 create mode 100644 ch1/demo/src/main/java/cn/icexmoon/learngit/demo/service/impl/UserServiceImpl.java

添加新文件到暂存区可以使用add命令,也可以通过其它工具。

借助--amend参数,Git 会用一个新的提交记录替换最近的一次提交记录,看上去好像我们撤销了最近一次提交,并重新进行了提交一样。需要注意的是,只能对已经提交到本地分支,但没有推送到远程分支的提交记录这样做。如果最近的一次提交记录已经推送到远程分支,是不能这样操作的。

撤销暂存

通常我喜欢在项目根目录使用git add .快捷地添加所有需要提交的文件到暂存区,然后提交。但偶尔会遇到有些文件不需要提交,但被错误地放入暂存区(这通常是因为还未在.gitignore文件中添加这些文件导致的)。

此时查看文件状态:

❯ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)
​
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   ch1/demo/src/main/java/cn/icexmoon/learngit/demo/entity/ClassRoom.java
        new file:   ch1/demo/src/main/java/cn/icexmoon/learngit/demo/entity/Teacher.java

我们可以按照提示,使用git restore --staged命令将文件从暂存区撤销:

git restore --staged ch1/demo/src/main/java/cn/icexmoon/learngit/demo/entity/Teacher.java

再次查看状态就能发现该文件变成了未添加到暂存区时的状态。

还原文件

另一个常见需求是,你需要保证当前工作区与分支一致,比如你打算切换(checkout)到另一个分支。如果此时有新增或修改的文件,你就需要进行暂存并提交,以避免丢失文件。

但如果你不想保留这些修改,可以直接用分支中的记录进行还原操作。

方便的是,如果执行还原操作在查看文件状态时 Git 会进行提示:

❯ git status
On branch main
Your branch is ahead of 'origin/main' by 2 commits.
  (use "git push" to publish your local commits)
​
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   ch1/demo/src/main/java/cn/icexmoon/learngit/demo/entity/User.java

与之前撤销暂存有所不同,这里不需要使用--staged参数,因为显然这里还未将修改后的文件进行暂存。相应的,这里的restore命令会直接将工作区的文件进行还原。

需要注意的是,因为这里还原前的文件没有添加到暂存区,也没有进行提交,所以这个操作会丢失之前的修改内容,无法找回,所以操作前务必确认你确实需要执行该操作。

The End.

参考资料

  • 2.4 Git 基础 - 撤销操作

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: git
最后更新:2026年2月3日

魔芋红茶

加一点PHP,加一点Go,加一点Python......

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2021 icexmoon.cn. ALL RIGHTS RESERVED.
本网站由提供CDN加速/云存储服务

Theme Kratos Made By Seaton Jiang

宁ICP备2021001508号

宁公网安备64040202000141号