现在,我们给LICENSE文件中加上一些内容,例如:“Git uses the GPL2.0.”,加上这句话。之后使用下面的命令来查看工作区的改动。
git diff
可以看到,git diff以Unix通用的diff格式来显示差异。git diff只能查看工作区相比仓库中的变化,如果我们已经把文件提交到暂存区了,怎么办?可以加上参数--staged,就像撤销命令一样,git restore <file>只能撤销工作区的修改,但是加上参数--staged就可以撤销暂存区的修改。下面是比较仓库和暂存区的不同。
首先,先把代码提交到仓库去。
然后,查看一下,我们提交的历史纪录。
接下来,我们回退代码到之前的版本,也就是add new file:LICENSE这个版本。下面,我来介绍一下git中的HEAD指针,这个指针指向当前版本。git回退仓库版本的时候,仅仅是把HEAD的指向作以改变。就可以改变当前的版本了。这也是Git为什么比其他版本控制工具快的多的一个重要因素。那么当前版本的上一个版本用HEAD^来表示,上上一个版本用HEAD^^来表示,30版本之前用HEAD~30来表示。回退命令如下:
git reset --hard HEAD^
可以看到版本被回退到了之前的版本。提交记录也只有3次了。
然后,我们打印LICENSE的内容看看。发现,回退版本也会把工作区的内容改变为相应版本的内容。
在版本回退之后,你后悔了,那么怎么做?此时,使用git reflog来查看所有的提交记录。如下:
现在,你找到了之前的版本,它所对应的索引值是36b3daa,我们可以使用这个索引值来回到这个版本。命令如下:
git reset --hard 36b3daa
参考资料:Pro Git.