首先声明,本书的知识总结来源于《完全学会Git,GitHub,Git Server的24堂课》一书,如有任何疑问请参考原书内容查证,我这里更多的只是记录,也会尽量结合自己的学习和使用经验加一些自己的体会。Git安装请移步至Git中文官网或者百度一下
本篇主要介绍一下如何把一个文件加入文档库,以及在这个过程中文件的状态变化是怎样的;还有就是如何对当前文件夹提交文件时,需要忽略文件的处理以及最后的关于不同提交节点查看
- (1)文件的三种状态
- (2)需要忽略文件的处理
- (3)撤销或者删除Git中的特定文件索引
- (4)commit节点的查看
2.1 文件的三种状态
通常,在文件夹中每一个文件在不同的情况下都对应着一种状态(更为准确来说就是tracked和untracked状态),这个状态也会影响Git操作时作用到它们身上的具体体现,文件的三种状态分别是:
- tracked:该文件被添加到索引或者仓库
- untracked:该文件未被忽略或者添加到索引和仓库
- ignored:该文件被包含在忽略文件列表中
状态的查看主要是通过git status指令,这个在前面也介绍过;下面我们就来看一个演示,先创建一个文件a.txt;查看它的状态,把它加入git 索引再查看一下状态。
下面我再创建一个b.txt;然后修改a.txt中内容,再次查看状态
可见,被tracked的文件的修改,我们都是可以看到相关信息的。到这里,其实关于状态我们还有一个忽略状态没有说,不急,下面我们接着看第二部分内容。
2.2 忽略文件的处理
我们在做项目时,通常提交都是通过git add . 来提交当前文件夹中所有的文件,所以对于有些IDE编译产生的文件我们是不需要提交的,比如AS项目中build文件夹中对应的文件;下面我们就来看看如何处理这种情况
- 通过touch .gitignore指令创建.gitignore文件
- 添加需要忽略的文件或者文件夹即可
- 主要的语法如下
(1)#表示注释
(2)!表示排除
(3)“*”表示通配符,“/”文件夹路径
比如:
#忽略所有的.txt文件 *.txt #排除d.txt !d.txt
下面就来看看实际操作的演示,我先创建b.txt,c.txt以及文件夹d;然后创建.gitignore文件并把所有.txt文件和文件夹d忽略,但是排除b.txt;然后再添加索引和提交:
在上面我还犯了一个小错误,通常.gitignore文件本身也是要被忽略的。好了,到这里,关于这一块的内容就结束了;接着看下面的内容。
2.3 如何撤销已添加到Git索引中的文件
就好比是我刚刚通过git add a.txt添加该文件到文件索引,现在我想撤销应该怎么办了?这里就要分下面两种情况:
- 当前文档库没有执行过commit
git rm --cache 文件名
- 当前文档库执行过commit
git reset HEAD 文件名
下面我们就来实际的操作一下,看看是不是可以实现从索引中删除刚刚添加的文件:
关于git rm --cache 文件名指令,我这里为了简便,直接在原有仓库再创建一个子仓库来演示:
2.4 查看commit节点
关于这一块,常用指令有
- (1)git log:查看commit节点信息
- (2)git log --graph:文本模式排列出commit节点演进图
- (3)git log --graph --oneline:渐变方式显示
下面我们就来看看具体的输出信息是什么:
说实话,看完之后我还是比较钟意gitk指令的效果。在仓库中有一个HEAH节点,只要你提交过一次文件该节点就会存在,且它始终是最新提交的节点(或者说指向最新提交的节点),我们可以通过git show HEAD查看最新节点信息,还可以配合“~”和“^”查看其他节点:
- 节点标签或者标识符~数字:表示当前节点和查看节点的层级关系
- 节点标签或者标识符^数字:表示当前节点和查看节点的子父级关系
说明:一个节点可以有多个父节点,但是只有可能有一层上级,所以HEAD^2表示的是HEAD节点的第二个父节点,而HEAD~2表示的是HEAD节点对应的上两层提交的节点
下面演示一下你就知道含义了:
这里有位父层级只有一个节点,所以两者输出的结果是一样的。
$ git show HEAD^1
commit e61a4d92902372cd1339e06cdc3169c54c95ea69
Author: why <[email protected]>
Date: Sat Aug 3 10:11:38 2019 +0800
test .gitignore
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ef85458
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,6 @@
+#е.txtļ
+*.txt
+#ļd
+d
+#ųb.txt
+!b.txt
\ No newline at end of file
diff --git a/a.txt b/a.txt
new file mode 100644
index 0000000..d05aac7
--- /dev/null
+++ b/a.txt
@@ -0,0 +1 @@
+new content1
\ No newline at end of file
diff --git a/b.txt b/b.txt
new file mode 100644
index 0000000..e69de29
huaya@why MINGW64 /d/Studysoftware/git/gitCode/git_chapter_1/git_class_3 (master)
$ git show HEAD~1
commit e61a4d92902372cd1339e06cdc3169c54c95ea69
Author: why <[email protected]>
Date: Sat Aug 3 10:11:38 2019 +0800
test .gitignore
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ef85458
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,6 @@
+#е.txtļ
+*.txt
+#ļd
+d
+#ųb.txt
+!b.txt
\ No newline at end of file
diff --git a/a.txt b/a.txt
new file mode 100644
index 0000000..d05aac7
--- /dev/null
+++ b/a.txt
@@ -0,0 +1 @@
+new content1
\ No newline at end of file
diff --git a/b.txt b/b.txt
new file mode 100644
index 0000000..e69de29
除此而外,我们还可以把HEAD换成@符号,比如:
git show @
那我们自己也可以为节点添加和删除别名:
git tag 自定义标签别名 节点标识符或标签
git tag -d 自定义标签别名
上面的指令不仅可以用于显示节点信息,还可以用于显示文件信息:
git show (节点标识或者标签) fileName
之前使用git reset指令实现撤销添加到索引中文件,其实它还有一个更强大的功能,就是对文档库消磁,或者说是版本回退的功能。
git reset 选项 节点标识或者标签
其中选项有三种,分别是:
- --soft:只有文档库变化
- --mixed:索引也会回退
- --hard:文件夹中文件也会回退
下面还是来实际操作演示一下:
后续每周固定更新4篇左右,共24课,预计5-6周更新完成。欢迎扫码关注: