当我们久未打开的文件,已经忘记了这个文件的各种修改,以及修改到那一步了我们可以使用以下代码,查看过往的目录
$git log
当我们修改完修改之后,首先可以通过git diff
来查看修改了什么,并再一次查看自己的修改内容,但修改之后不可以直接git commit
,此时直接提交无法成功提交,可以运用三个不同的方法查看文件是否有提交成功
git log
查看日志,观察是否有新的历史提交git diff
还能查看到文件的差异输出git status
查看文件状态,看到文件的修改状态
我们正确的提交过程是使用git add
或者git commit -a
这两个命令先将文件的修改提交到缓存区,相当于添加到将要提交的任务单中,此时再查看git diff
会发现没有差异输出了,但这不代表着被提交了,查看HEAD当前版本库的头指针,git diff HEAD
可以看到和当前已经真正提交过的文件版本比较还是有差异的,其次再使用git status
可以看到有绿字显示已经modified了,再一次进行git commit
就会正式提交到版本库
tips:如果使用简便的
git status -s
时,没有git add操作前,会看到M处于第二列,这代表工作区文件和提交暂存区中的文件有改动,进行git add操作后,M会在第一列,代表版本库于提交暂存区的文件有改动。
若是在提交到缓存区后,如果不commit,然后再次修改文件,此时就会发现出现了两个不同状态,一个是已经绿字modified的,另一个是红字modified,这说明此时有两个不同版本的文件,一个在工作区,即我们正在修改的区域,另一个是已经提交到缓存区的版本,此时再查看工作区和缓存区的不同可以看到不加任何参数的git diff
就是比较工作区和缓存区的,回应了上文中的查看文件状态的方法,当然还可以使用--cached
或者--staged
的参数来看缓存区和版本库的文件区别。
在文件提交到缓存区后在工作区再一次修改后,可以有两个选择,一个是再次添加暂存区,其次是取消工作区做出的改动,分别设计git reset
和git checkout
最后使用git commit
提交的时候,提交的是在缓存区中的文件。
什么是缓存区(stage/index)?
对我目前来说,缓存区就是介于工作区和版本库中间的一个虚拟空间,相当于考试交卷前再给你一次机会好好检查你做对了吗,并且可以随时拿回卷子进行修改。这个空间首先是一个包含文件索引的目录树,记录文件名和文件状态信息,如时间戳和文件大小,文件的设计内容存储在Git对象库,通过索引找对象库,因此,在进行每一项Git操作的时候,例如为了查看文件修改内容,则Git会比较缓存空间和工作区文件的文件状态信息,判断文件是否被改动,再进一步决定是否需要显示对比信息。
有了缓存区那就相当于文件一共有三个版本分别在工作区,缓存区,版本库,通过git命令可以使得这些区域的文件版本相互覆盖,注意,这属于很危险的操作,容易丢失工作区的更新内容。