1、如何创建版本库 2、版本追溯和跳转 3、git的工作区和暂存区
版本库可以理解为一个目录,里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
选择一个合适的地方,创建一个空目录:mkdir learngit在目录下把这个目录变成Git可以管理的仓库:git init1、版本的比较
创建一个txt文件,第一次提交之后,第二次修改之后再次提交,git会比较两者的区别形成两个版本 版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log命令查看:git log 也可以添加一些参数对log进行过滤,如pretty 版本跳转(中间跨过几个版本) 现在总结一下:HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard +版本号用git log可以查看提交历史,以便确定要回退到哪个版本用git reflog查看命令历史,以便确定要回到未来的哪个版本1、工作区:即在系统中用户手动单独创建出来的存放git项目信息的一个主要文件夹 eg:我在root下创建一个learngit的一个文件夹,并把它git init,这就叫工作区
2、版本库:在我上面创建的learngit工作区文件夹中会自动出现一个.git的隐藏文件夹,这个.git的文件夹就是版本库
3、暂存区:Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区;还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD
4、修改管理: 现在我们来梳理一下这三者的关系同时理解一下修改管理
git add:当我们在工作区创建的文件时,只有在gti add到版本库的暂存区之后才会被gti感知到,否则无法被感知并进行后续的gti commit、git diff的等一系列操作git commit:当文件git add到暂存区后,需要git commit到分支仓库master,只有被git add到了暂存区的文件才会被提交到分支master 现在我创建一个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 +bbbbbbbbbbbbbbbbbb5、 在这过程中,会用到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!!!