第二课我们需要了解Git的一些基本工作过程啦。在
第一课中创建的learngit目录,我们可以称作为工作区,进入工作区里,除了我们自己添加的文件外,有一个.git的隐藏文件,这个称作为版本库。在版本库中有个重要的暂存区stage,一个分支master和一个指向master的指针HEAD。
平常我们进行操作的时候,一般调用
add就会把工作区中的文件添加到
stage中,但是
master中的内容并没有改变,
master就是我们之前的版本记录。当我们
commit之后,就会把
stage中的内容添加到master中去,这样我们的版本库就更新了。调用命令
$ git status来查看的状态是干净的。
git跟踪并管理的是修改而不是文件。这个和其他的版本控制有所不同,难道这就是说其他的是直接跟踪和管理文件(直接文件的替换??)
当我们对文件进行修改的时候,若然没有add就直接commit,是不会更新版本库。我们之前已经说了,commit只是把stage的内容添加到master中去,而add就是把工作区中的修改添加到stage中,所以一定要两者结合才能完成版本的更新。
另外,要查看当前工作区的文件和最新的版本的差别可以通过以下指令查看:
$ git diff HEAD -- "选择的文件名" (注意:--两边都是空格)
修改文件
假如我们修改的时候出现了问题,想撤销回原来的状态
第一种情况,你修改了工作区中的文件,但是没有add。
修改testGit文件,添加一行
后悔了,不想修改了,使用命令
git checkout -- file来恢复。
命令中的“--”很重要,没有“--”,就变成了“创建一个新分支”的命
令。
恢复到原来的样子了。
第二种情况,添加的修改已经add到stage去了,但是还没有提交到master。
先添加一句
然后add到stage中去,这时候可以去查查status
这个时候可以使用命令
$ git reset HEAD "filename",可以把暂存区的修改撤销掉,重新放回工作区。
这样子就可以把暂存区stage的修改退回到工作区,然后查看status可看到stage是
no change。
这个时候又回到第一种情况了,直接用
$ git checkout -- testGit
就可以恢复工作区的文件修改了。
但是万一已经commit了修改怎么办呢?没关系,之前第一课中提到了可以回退版本,使用命令
$ git reset --hard HEAD~1
直接回退到之前的版本。不过如果已经推送到远程库的话就。。。。。。。。。。。。。。。。。
删除文件
当我们在工作去删除文件的时候,版本库中其实还是有该文件的记录的。这个时候我们有两种选择
第一种,删除错误需要恢复
现在工作区中建立一个文件testRM,查看当前的文件有
当然在测试rm之前我们要先
add+commit改变版本库。添加之后我们接着删除testRM。
$rm testRM之后查看status
版本已经检测到有文件被删除了。这个时候我们可以使用
$ git checkout -- "filename"就可以恢复了。
git checkout其实是用版本库里的版本替换工作区的版本,无论是修改或者删除,都可以还原。
第二种情况就是确实想删除,那么我们就要告诉版本库。
同样先删除文件,
$ rm testRM
接下来我们要告诉版本库我们确实要删除这个文件,让版本库自己进行修改。我们要做的就是用命令
$ git rm “filename” + git commit -m "comment"来通知版本库。
这样就完成了我们的修改,查看status,很干净嘛。
参考:
Git教程 By 廖雪峰