在之前的一篇文章《Git教学篇2-git日常操作之git clone与git tag》中,我们有讲解过git clone和git tag相关的内容。
今天这篇文章我们继续学习git status和git diff相关的知识。
git
在一个本地仓库中,所有文件都不外乎两种状态:已追踪和未追踪。
已追踪文件
已追踪文件表示的是在仓库之前的版本快照中包含了文件的记录,在用户工作一段时间后,这些文件同样能够被追踪到,要么是修改文件,要么是删除文件,又或者是没做任何更改。
未追踪文件
除了已追踪文件外,其他文件都是未追踪文件,它们并不在上一次版本快照中,也不在本地暂存区内,这种类型的文件一般都是新增的文件。
有一点需要记住的是:刚clone完的项目,所有文件都是已追踪状态,并且都未修改。
在本地仓库中,文件状态的变更如下图所示。
文件状态变更
git status命令是用来检索出本地所有文件的更新,包括新增文件,修改文件,删除文件等。
它会自动将不同变更类型的文件,组织在一起显示。
为了让git status尽可能多的显示文件类型变更,我们做如下操作。
新增一个test1.md文件
编辑test文件
删除html目录下的test1.html
本地文件变更
当我们运行git status命令后,发现各文件状态如下图所示。由于我设置了status别名为st,所以运行的是git st。
git status
从上到下分别有三种不同类型,分别是:
添加至暂存区,待提交,表示的是删除的文件或者add的文件。
未添加至暂存区的文件,一般表示刚修改还未add的文件。
未追踪的文件,一般表示的是新增的文件。
当我们知道了各个文件的状态后,便开始追踪各个文件的状态,使用git add命令可以将未追踪或者已追踪但未添加至暂存区的文件都添加在暂存区。
当我们将test1.md文件添加至暂存区后,再次运行git status,会发现文件状态已经发生变化。
git status
如果此时,我们再次对test1.md进行修改,然后再运行git status,会发现test1.md同时出现在了两个位置。这个是不是有问题呢?
git status
这是没有问题的,我们需要明白一点。在暂存区内,git只暂存了git add时的版本,如果此时进行commit提交,提交的也只是git add的版本,新的编辑并未添加至暂存区。因此我们在任何时候,如果对文件进行了修改,都需要通过git add命令添加至暂存区。
在一个仓库中,有很多的文件其实是不用提交至远程仓库中的,像前端项目中npm安装的node_modules文件夹,还有Java项目的Maven Dependencies和.class文件。
这个时候.gitignore文件就派上用场了,在文件中列出需要忽略的文件模式。
.gitignore文件格式如下:
# 表示注释会被忽略。
空行直接被忽略。
可以用正则匹配。
除去匹配的文件,在表达式前面加上取反符号(!)。
下面我们看一个标准的.gitignore文件
.gitignore文件
当我们需要查看文件具体修改的地方时,可以运行git diff命令。
查看尚未暂存文件的修改
在默认情况下,我们运行git diff命令查看的是尚未暂存的文件所有修改的地方。
git diff
需要记住的一点是:git diff显示的是修改后未暂存起来的文件内容,如果将所有修改的文件已经添加至暂存区再运行git diff命令,这时会发现什么内容都没有。
查看暂存区修改
如果需要查看的是暂存区的修改,需要添加--staged选项。
从下面的图可以看出,我们删除的文件html/test1.html内容显示了出来
git diff --staged
在通过git add命令将修改的文件添加至暂存区后,就该使用git commit提交修改了。
一般都会通过-m参数补充本次提交的内容描述,这个是很重要的,尤其是多人协同开发时,可以让别的开发人员大致了解你提交的目的。
git commit
关于-m后的信息描述是一件需要重点说明的事,我会在下一篇文章中讲述。
今天这篇文章主要讲述的是git status和git commit等与文件状态相关的内容,大家可以在本地多执行,孰能生巧。
下一篇文章将重点讲述git commit message相关的内容,敬请期待~
领取专属 10元无门槛券
私享最新 技术干货