GIT
(分布式版本控制系统)
Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。[1] Git的读音为/gt/。
Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。[2] Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人觉得BitKeeper 的许可证并不适合开放源码社区的工作,因此 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是我们已经发现在很多其他自由软件项目中也使用了 Git。例如 很多 Freedesktop 的项目迁移到了 Git 上。[2]
以上为百度百科,其实一句话总结就是,分布式开源版本控制代码管理的东东~下面是自己捯饬的多次合并示意图
围绕上图,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
通过上面我们可以清楚看到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、存储区对象工作区、工作区
^-^ 讲的不好勿喷~这么晚要睡觉,也就那么一嘴吧唧吧唧一通~
转载于:https://blog.51cto.com/sunshineboyszf/1860010