首先来说明一下git diff和git diff HEAD -- file的区别,我们利用文件2来做一个实验,先修改一下文件2的数据,然后使用git add 2将这种修改添加到缓冲区,然后继续修改文件2,利用这俩个命令进行比较修改的内容,命令操作如下。

Git仓库管理 Git仓库管理

我们对文件2做了修改,然后添加到了缓冲区,使用git diff没有任何的输出,意味着文件没有变化,而使用git diff HEAD -- 2却输出增加了一行数据,为什么会产生俩种不同的结果呢?原因是俩个命令比较的内容不一样,使用git diff比较的是工作区和缓冲区的内容,工作区的内容刚刚提交到了缓冲区,当然比较这俩个地方的修改是没有变化的,而使用git diff HEAD -- file是比较工作区和主分支(你当前所在的分支)的内容,因为内容还没有提交到主分支中,所以工作区就多了一行数据。现在我们继续修改文件2的内容,再次进行比较。

Git仓库管理

增加了一行数据以后,我们并没有提交到缓冲区中,所以这个时候使用git diff命令看到的就是多了一行新的数据,而使用git diff HEAD -- 2就是多了俩行的数据,有一点大家要知道,就是git跟踪并管理的是修改,并非文件。最后我们把缓冲区的修改和工作区的修改分别提交,然后分别使用这俩个命令来比较不同。

Git仓库管理 Git仓库管理

接下来说一下如何撤销修改,当我们提交了一段代码,然后继续写得时候,发现刚刚写得这些代码思路是错误的,然后你就想把这些代码删除了再重新写,这个时候你可以使用手动的方式,删除你刚刚修改的代码,但是万一你遗漏了哪里呢(当代码很多的时候)?所以我们用git来帮助我们完成这个工作吧。这里的撤销修改又分为俩种情况,一个是你只是修改了内容,还没有把修改add到缓冲区,一个是已经放到了缓冲区但是没有放到分支中。下面用文件3作为演示。

Git仓库管理

如图所示,我们修改了文件3的内容,并没有添加到缓冲区,然后使用命令git checkout -- 3将文件恢复了,这个文件恢复成了和分支中相同的状态,然后看看文件3的内容和状态,发现文件3没有添加新的数据,也没有修改可以提交。接下来我们将文件添加到缓冲区,然后再恢复。

Git仓库管理 Git仓库管理

当修改放到了缓冲区的时候再使用git checkout -- file就没有作用了,这个时候我们需要使用git reset HEAD -- file这个命令来将缓冲区的修改撤销,然后再使用git checkout -- file这个命令将修改最终撤销,这样就达到了我们得目的,但是如果修改已经commit了怎么办,当然是使用版本回退了,使用git reset --hard HEAD^回退到上一个版本。

接下来实现一下如何撤销删除,我们有可能将已经提交到版本库中得文件删除了,这种做法有可能就是我们得目的,但是版本库还是有关于这个文件的记录的。还有可能是我们误删所引起的,这个时候我们就需要恢复。现在来说第一种情况,我们需要将文件删除以后,在版本库中得东西同样删除,1、我们使用git rm命令,2、再使用git commit将本次的删除提交一下。文件不论是放到缓冲区中还是分支中,我们都可以使用如上的倆步操作将文件删除。

Git仓库管理

如果是误删怎么办呢?只需要一步,就是使用git checkout --file命令。

Git仓库管理