在使用git时我们通常会因为一些特殊的原因或者错误的操作造成需要撤销过去的当前或者过去工作区的某个提交,本篇文章将介绍git提供的四种方法:checkout, revert, reset, clean 解决此问题。
1. checkout
checkout提供了一种安全的机制,用于将当前工作区切换成过去保存的工作区。它包含三个功能:
1.checkout branch:
切换当前分支到指定分支上,这是我们最常用的,用于分支间的切换。另外-b参数可用于创建以当前分支作为基础创建一个新的分支。1
git checkout -b branch
2.checkout commit
将当前的工作区状态切换成过去某次commit时的工作区状态。该功能主要用于查看过去某次提交的内容。它背后的逻辑是将HEAD指针指向了过去的COMMIT,并不会对当前commit造成任何影响,如下图所示:
举个例子,假设我们的项目状态如下:1
2
3
4
5
6
7> git log --oneline
b7119f2 Continue doing crazy things
872fa7e Try something crazy
a1e8fb5 Make some important changes to hello.py
435b61d Create hello.py
9773e52 Initial import
我们想看看435b61d提交时的工作区数据内容可以使用:1
git checkout 435b61d
恢复到435b61d提交时的状态后,我们可以查看当时文件,以及做一些测试等工作。当完成我们的检查后,我们用下面命令,恢复当前工作区为最新的状态(这里我们假设处于master分支)。1
git checkout master
- 3.checkout commit file
当我们只想查看过去某次提交的一个文件,可以使用上面的命令。此时git将会把当前file更新为过去某次提交的内容,并将其放入staged区中。如果我们想恢复该文件,可以使用下面命令,这时将更新file为最新HEAD的文件。1
git checkout HEAD file