git add 和 git commit 撤销命令

2,390 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

前言

git 作为一款分布式版本控制系统,相信在我们日常工作开发中,也是必不可少的,在平时使用 git 的过程中,相信我们肯定会有一些误操作,比如 git add .git commit -m '错误的提交信息' 等等。那么我们如何撤销这些操作命令,今天我们就来学习下 git 的一些撤销命令。

初始化项目

首先让我们初始化一个测试项目 withdraw_demo。


cd Desktop && mkdir withdraw_demo && cd withdraw_demo

git init && echo "初始化" >> init.md && git commit -m '初始化项目'

git 撤销 add


echo "file 1" >> file_1.md

echo "file 2" >> file_2.md

echo "file 3" >> file_3.md

echo "file test" >> file_test.md

然后执行了 git add . 添加了所有文件,此时执行 git status 结果如下:


位于分支 master

要提交的变更:

(使用 "git restore --staged <文件>..." 以取消暂存)

新文件: file_1.md

新文件: file_2.md

新文件: file_3.md

新文件: file_test.md

其实我们是不想要添加 file_test.md 的文件的,那么我该如何把 add 的文件撤销呢?

撤销 git add 文件命令如下:


git reset HEAD file_name

我们测试下:


git reset HEAD file_test.md

git status

位于分支 master

要提交的变更:

(使用 "git restore --staged <文件>..." 以取消暂存)

新文件: file_1.md

新文件: file_2.md

新文件: file_3.md

未跟踪的文件:

(使用 "git add <文件>..." 以包含要提交的内容)

file_test.md

git 撤销 commit

接下来我们再来看下当我们 commit 错误信息时候,该如何撤销。


git commit -m '错误的提交信息'

[master 1fc87f1] 错误的提交信息

3 files changed, 3 insertions(+)

create mode 100644 file_1.md

create mode 100644 file_2.md

create mode 100644 file_3.md

现在我们发现我们的 commit 信息编写错了,那么我们该如何撤销呢?

git commit 撤销命令如下:


git reset --soft HEAD^

我们来操作下:


git reset --soft HEAD^

git status

位于分支 master

要提交的变更:

(使用 "git restore --staged <文件>..." 以取消暂存)

新文件: file_1.md

新文件: file_2.md

新文件: file_3.md

未跟踪的文件:

(使用 "git add <文件>..." 以包含要提交的内容)

file_test.md

git status 结果来看,我们回到了 git commit 之前的状态。

那么上述命令的含义是什么呢?

  • HEAD^ 的意思是上一个版本,也可以写成 HEAD~1。如果你进行了 2 次 commit,想都撤回,可以使用 HEAD~2

  • --soft 的意思是不删除工作空间改动代码,撤销 commit,不撤销 git add .

  • --mixed 的意思是:不删除工作空间改动代码,撤销commit,并且撤销 git add . 操作。这个为默认参数,git reset --mixed HEAD^git reset HEAD^ 效果是一样的。

  • --hard 的意思是删除工作空间改动代码,撤销 commit,撤销 git add .。 注意完成这个操作后,会删除工作空间代码!!!恢复到上一次的 commit 状态。慎重!!!