• GIT

    (分布式版本控制系统)

     编辑

Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。[1]  Git的读音为/gt/。

Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。[2]  Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人觉得BitKeeper 的许可证并不适合开放源码社区的工作,因此 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是我们已经发现在很多其他自由软件项目中也使用了 Git。例如 很多 Freedesktop 的项目迁移到了 Git 上。[2] 


  以上为百度百科,其实一句话总结就是,分布式开源版本控制代码管理的东东~下面是自己捯饬的多次合并示意图


 wKioL1f6ZXux8QdTAAZvHrrWLg0597.png-wh_50


 围绕上图,A1为初始版本,也叫根版本~之后的2345你就懂的!

 1、tree 树状,简单理解就是AXX指定的第一个目录结构,好比扮演/etc/fstab /etc/pam.d/su的etc文件目录,讲的未必准确;

 2、blob 简单理解就是真实存储了数据的文件,好比扮演/etc/fstab /etc/pam.d/su的fstab跟su文件

 3、A2.1 为A2切出来的分支,A2.2你懂的~

 4、master 记录指定的commit位置,文件的内容为hash值

 5、HEAD 头,指针,就是指向master


 wKioL1f6aYmBM3lUAARiYbwjcYA351.png-wh_50

 通过上面我们可以清楚看到Git的整个流程步骤示意图

 1、存储对象工作区

 2、暂存区也可以叫index

 3、工作区

 下面我们就来操作,并介绍reset

 

1、Git仓库初始化呢 

[root@redis_master ~]# ll
总用量 44
-rw-------. 1 root root  1183 9月  22 10:02 anaconda-ks.cfg
-rw-r--r--. 1 root root 27312 9月  22 10:02 install.log
-rw-r--r--. 1 root root  7572 9月  22 10:00 install.log.syslog
[root@redis_master ~]# mkdir sunshine                                  #创建一个目录
[root@redis_master ~]# cd sunshine/                                    #进入目录
[root@redis_master sunshine]# git init                                 #初始化Git仓库
Initialized empty Git repository in /root/sunshine/.git/               #看到这个就代表成功了,并且在该目录下创建 .git该文件目录是给Git使用,这里就不详细介绍,里面内容比较懂很复杂


2、新增代码文件并提交

[root@redis_master sunshine]# echo "print 'Sunshine Good'" > code.py   #新增的代码文件名问code.py
[root@redis_master sunshine]# git status                               #查看查看的状态
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	code.py
nothing added to commit but untracked files present (use "git add" to track)
[root@redis_master sunshine]# git add code.py                         #添加code.py
[root@redis_master sunshine]# git commit -m "V0.0.1"                  #提交并说明
[master (root-commit) a210ba7] V0.0.1
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 code.py
[root@redis_master sunshine]#

3、上述操作重复俩次,因为我们这次要讲的是reset命令

[root@redis_master sunshine]# git add code.py 
[root@redis_master sunshine]# git commit -m "V0.0.1"
[master (root-commit) a210ba7] V0.0.1
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 code.py
[root@redis_master sunshine]# echo "print 'Sunshine Good'" > code1.py
[root@redis_master sunshine]# git add code1.py 
[root@redis_master sunshine]# git commit -m "V0.0.2"
[master d322179] V0.0.2
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 code1.py
[root@redis_master sunshine]# echo "print 'Sunshine Good'" > code3.py
[root@redis_master sunshine]# git add code3.py 
[root@redis_master sunshine]# git commit -m "V0.0.3"
[master b6d676f] V0.0.3
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 code3.py

4、使用git log --oneline 查看

[root@redis_master sunshine]# git log --oneline                       #这个是以简要的方式显示,你们可以自己去掉 --oneline
b6d676f V0.0.3
d322179 V0.0.2
a210ba7 V0.0.1

5、使用git resert --soft

[root@redis_master sunshine]# ll                                     #查看工作区文件
总用量 12
-rw-r--r-- 1 root root 22 10月 10 00:10 code1.py
-rw-r--r-- 1 root root 22 10月 10 00:10 code3.py
-rw-r--r-- 1 root root 22 10月 10 00:05 code.py
[root@redis_master sunshine]# git reset --soft HEAD^                 #--soft选项是仅仅还原index为v0.0.2
[root@redis_master sunshine]# ll                                     #工作区文件没有变动
总用量 12
-rw-r--r-- 1 root root 22 10月 10 00:10 code1.py
-rw-r--r-- 1 root root 22 10月 10 00:10 code3.py
-rw-r--r-- 1 root root 22 10月 10 00:05 code.py
[root@redis_master sunshine]# git log --oneline                      #查看log,发现index回退到v0.0.2
d322179 V0.0.2
a210ba7 V0.0.1
[root@redis_master sunshine]# git diff --cached                      #使用index对比HEAD发现有差异,证明仅仅只是index回退到v0.0.2
diff --git a/code3.py b/code3.py
new file mode 100644
index 0000000..8e34672
--- /dev/null
+++ b/code3.py
@@ -0,0 +1 @@
+print 'Sunshine Good'

5、使用 git reset --mixed

[root@redis_master sunshine]# git reset --mixed HEAD                #回退版本,影响HEAD index
[root@redis_master sunshine]# git diff --cached                     #通过index与HEAD对比发现现在是一样的咯
[root@redis_master sunshine]# ll                                    #文件一样存在,不对工作目录影响
总用量 12
-rw-r--r-- 1 root root 22 10月 10 00:20 code1.py
-rw-r--r-- 1 root root 22 10月 10 00:20 code3.py
-rw-r--r-- 1 root root 22 10月 10 00:05 code.py

6、使用 git reset --hard

[root@redis_master sunshine]# git log --oneline                     #查看log
d322179 V0.0.2
a210ba7 V0.0.1
[root@redis_master sunshine]# ll                                    #查看工作区的文件
总用量 12
-rw-r--r-- 1 root root 22 10月 10 00:20 code1.py
-rw-r--r-- 1 root root 22 10月 10 00:20 code3.py
-rw-r--r-- 1 root root 22 10月 10 00:05 code.py
[root@redis_master sunshine]# git reset --hard HEAD^                #使用--hard回退
HEAD is now at a210ba7 V0.0.1
[root@redis_master sunshine]# ll                                    #查看文件,少了一个但是code3.py还在,是因为我们之前回退版本,该文件就没有被版本控制
总用量 8    
-rw-r--r-- 1 root root 22 10月 10 00:20 code3.py
-rw-r--r-- 1 root root 22 10月 10 00:05 code.py
[root@redis_master sunshine]# git reset --hard b6d676f              #找打上面的v0.0.3,回退到该版本,发现一切都回来了
HEAD is now at b6d676f V0.0.3
[root@redis_master sunshine]# ll                                    #查看文件,完整
总用量 12
-rw-r--r-- 1 root root 22 10月 10 00:26 code1.py
-rw-r--r-- 1 root root 22 10月 10 00:26 code3.py
-rw-r--r-- 1 root root 22 10月 10 00:05 code.py
[root@redis_master sunshine]# git status                            #查看状态,一切都是干净的,说--hard影响index、HEAD、工作区也就是我们第二章图
# On branch master
nothing to commit (working directory clean)

看到这里你就会有点 疑惑,但是下面三点一讲你就清楚了

1、--soft影响第二张图的index

2、--mixed影响第二张图的index、存储对象工作区

3、--hard影响第二张图的index、存储区对象工作区、工作区

 ^-^ 讲的不好勿喷~这么晚要睡觉,也就那么一嘴吧唧吧唧一通~