GIT创建版本库及版本的迭代

学习目标:

GIT学习


学习内容:

1、如何创建版本库
2、版本追溯和跳转
3、git的工作区和暂存区


1、版本库

版本库可以理解为一个目录,里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

  • 选择一个合适的地方,创建一个空目录:mkdir learngit
  • 在目录下把这个目录变成Git可以管理的仓库:git init

GIT创建版本库及版本的迭代_第1张图片


2、版本追溯和跳转

1、版本的比较

  • 创建一个txt文件,第一次提交之后,第二次修改之后再次提交,git会比较两者的区别形成两个版本
    GIT创建版本库及版本的迭代_第2张图片
  • 版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log命令查看:git log
    在这里插入图片描述
  • 也可以添加一些参数对log进行过滤,如pretty

在这里插入图片描述

  • 版本跳转(中间跨过几个版本)
    GIT创建版本库及版本的迭代_第3张图片
    GIT创建版本库及版本的迭代_第4张图片
    现在总结一下:
  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard +版本号
  • 用git log可以查看提交历史,以便确定要回退到哪个版本
  • 用git reflog查看命令历史,以便确定要回到未来的哪个版本

3、git的工作区和版本库、暂存区

1、工作区:即在系统中用户手动单独创建出来的存放git项目信息的一个主要文件夹
eg:我在root下创建一个learngit的一个文件夹,并把它git init,这就叫工作区GIT创建版本库及版本的迭代_第5张图片


2、版本库:在我上面创建的learngit工作区文件夹中会自动出现一个.git的隐藏文件夹,这个.git的文件夹就是版本库在这里插入图片描述


3、暂存区:Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区;还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEADGIT创建版本库及版本的迭代_第6张图片


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
+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!!!

  • 总结:
    (1)git分别在工作区和暂存区、分支master的对比
    工作区—git diff—>暂存区—git diff --cached—>分支master
    工作区—git diff HEAD—>分支master
    (2)文件在工作区不提交时得不到git的反应,当git add到暂存区时,文件只有工作区和暂存区知道,分支master不会做出反应,只有最后被提交到分支master并且不再修改,从工作区到分支的文件才会统一
    (3)暂存区存储的是修改的信息,即当你在文件中添加了一个a并且git add到暂存区,那么暂存区装的就只是你这个新版本文件中增添的a,即Git跟踪并管理的是修改,而非文件

你可能感兴趣的:(git创建版本库,git版本更新,git初步操作,git,linux,python)