1、如何创建版本库
2、版本追溯和跳转
3、git的工作区和暂存区
版本库可以理解为一个目录,里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
1、版本的比较
1、工作区:即在系统中用户手动单独创建出来的存放git项目信息的一个主要文件夹
eg:我在root下创建一个learngit的一个文件夹,并把它git init,这就叫工作区
2、版本库:在我上面创建的learngit工作区文件夹中会自动出现一个.git的隐藏文件夹,这个.git的文件夹就是版本库
3、暂存区:Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区;还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD
4、修改管理:
现在我们来梳理一下这三者的关系同时理解一下修改管理
现在我创建一个test.txt文件并git add到暂存区,修改不git add到暂存区,直接git commit提交到分支master,最后会发现是初始的文件被提交到了分支master
[root@bogon learngit]# vi test.txt
[root@bogon learngit]# git add test.txt
[root@bogon learngit]# cat test.txt
yytyytyytyytyytyytyyt
wywywywywywywywywywy
aaaaaaaaaaaaaaaaaaa
[root@bogon learngit]# vi test.txt
[root@bogon learngit]# cat test.txt
yytyytyytyytyytyytyyt
wywywywywywywywywywy
aaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
[root@bogon learngit]# git commit -m "append GPL"
[master 27ee1c5] append GPL
1 file changed, 3 insertions(+), 2 deletions(-)
[root@bogon learngit]# git diff HEAD test.txt
diff --git a/test.txt b/test.txt
index 9213491..d43e308 100644
--- a/test.txt
+++ b/test.txt
@@ -1,3 +1,4 @@
yytyytyytyytyytyytyyt
wywywywywywywywywywy
aaaaaaaaaaaaaaaaaaa
+bbbbbbbbbbbbbbbbbb
5、 在这过程中,会用到git diff、git HEAD、git ----cached:
(1)git diff:当工作区有改动,临时区为空,diff的对比是“工作区与最后一次commit提交到分支的共同文件”;当工作区有改动,临时区不为空,diff对比的是“工作区与暂存区的共同文件”
我把readme.txt文件提交到了分支master,此时工作区为空,暂存区为最后一次提交文件
[root@192 learngit]# git add readme.txt
[root@192 learngit]# git commit -m "append GPL"
位于分支 master
无文件要提交,干净的工作区
[root@192 learngit]# cat readme.txt
welcome to my house jack!!!
you are a good man !!!
you are just only my friend!!!
so we are not meant to be lovers!!!
have a good day!!!
现在我修改文件readme.txt,那么修改的文件应该和暂存区最后一次提交的文件进行比较
[root@192 learngit]# vi readme.txt
[root@192 learngit]# cat readme.txt
welcome to my house jack!!!
you are a good man !!!
you are just only my friend!!!
so we are not meant to be lovers!!!
[root@192 learngit]# git diff readme.txt
diff --git a/readme.txt b/readme.txt
index c0f6217..4ea1d7c 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,5 +1,4 @@
welcome to my house jack!!!
you are a good man !!!
you are just only my friend!!!
so we are not meant to be lovers!!!
-have a good day!!!
此时我把修改后的readme.txt给git add到暂存区并且不git commit到分支master,此时暂存库有了我第一次修改的文件,我再次修改文件,这时文件将会与库分支的文件进行比较
[root@192 learngit]# git add readme.txt
[root@192 learngit]# vi readme.txt
[root@192 learngit]# cat readme.txt
welcome to my house jack!!!
you are a good man !!!
you are just only my friend!!!
so we are not meant to be lovers!!!
we are good pepole!!!
[root@192 learngit]# git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 4ea1d7c..f18cc1e 100644
--- a/readme.txt
+++ b/readme.txt
@@ -2,3 +2,4 @@ welcome to my house jack!!!
you are a good man !!!
you are just only my friend!!!
so we are not meant to be lovers!!!
+we are good pepole!!!
(2)git diff --cached 或 git diff --staged:显示暂存区(已add但未commit文件)和最后一次commit分支(HEAD)之间的所有不相同文件的增删改(git diff --cached和git diff –staged相同作用)
将(1)第二次修改添加we are good pepole!!!的文件git add到暂存区,而分支master是之前提交的版本,此时对比的就是暂存区和分支的最原始的版本
[root@bogon learngit]# git add readme.txt
[root@bogon learngit]# git diff --cached readme.txt
diff --git a/readme.txt b/readme.txt
index c0f6217..f18cc1e 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,5 +1,5 @@
welcome to my house jack!!!
you are a good man !!!
you are just only my friend!!!
so we are not meant to be lovers!!!
-have a good day!!!
+we are good pepole!!!
(3)git diff HEAD:显示工作目录(已track但未add文件)和暂存区(已add但未commit文件)与最后一次commit之间的的所有不相同文件的增删改
我把第二次修改的git add到暂存区的文件git commit到分支中去,同时再次修改文件,此时对比的就是工作区未做任何提交和被git commit到分支中的文件
[root@bogon learngit]# git commit -m "append GPL" readme.txt
[master fd73636] append GPL
1 file changed, 2 insertions(+), 2 deletions(-)
[root@bogon learngit]# vi readme.txt
[root@bogon learngit]# git diff HEAD readme.txt
diff --git a/readme.txt b/readme.txt
index f18cc1e..e29eb4b 100644
--- a/readme.txt
+++ b/readme.txt
@@ -3,3 +3,4 @@ you are a good man !!!
you are just only my friend!!!
so we are not meant to be lovers!!!
we are good pepole!!!
+you are my baby!!!