小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
前言
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 状态。慎重!!!