Git原理及实践(Fork模式)

2,491 阅读4分钟

1.简介

Git是目前最先进的分布式版本控制系统,在git的管理下,每个人的电脑上都有一个完整的版本库,配合云上一台充当“中央服务器”的电脑(方便交换和修改)。
git是用于记录文件变更的版本控制系统, 支持文件版本跟踪,记录,回退,合并 等操作,并在此基础上实现了版本切换,差异比较,分支管理,分布式协作等功能。

2.版本库结构

keywords: 管理,追踪,二进制文件

git init .;

git add .

git commit -m "msg"

多次add,一次性commit到本地master;

  • 在工作目录中修改文件。

  • 暂存文件,将文件的快照放入暂存区域。

  • 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

Git存储的是 某一时刻所有文件的快照,而且存储的是整个文件的内容,而不是文件的差异

划重点:Git每次都记录的是文件的一个新的版本, 所以不同版本文件在版本间切换非常快,因为是直接切换而不是去比较。

其他版本控制系统记录的是原始文件以及文件的差异:

3.Git下文件状态

git status

(图片来源:Git官网)

4.HEAD(分支管理)

keywords:快照,log,

理解:当前活跃分支的游标(下图主要体现commit版本号的移动)

1.在master分支上时(HEAD指向master,master指向最新的提交) 2.执行git checkout dev(切换到当前指向的分支dev) 3.在dev分支上进行开发,&^)@$%#_())(#*)@>@(.......

(dev跟随着commit移动,HEAD随之移动) 在这里插入图片描述 4.切换到master分支(HEAD随之切换,指向master),执行git merge dev(master指向了dev最新的提交)

6.fork模式下的开发与合并

  • 有些小伙伴可能是使用多分支去管理不同人员的提交(zhangsan-dev-1.0.0),甚至是只用同个分支(比如dev),大家都往上面提,前者难以管理分支,后者对代码稳定性风险影响较大;
  • 而git提供的fork功能很好的解决了我们的问题,既能维护干净的代码分支,同时通过merge request(可设置审核人员)才能将代码合并到主仓库,一举多得。

7.相关知识点总结

1.git diff:

  • git diff #是工作区(workspace)和暂存区(stage)的比较 ;

  • git diff --cached #是暂存区(stage)和分支(master)的比较;

  • git diff HEAD #查看工作区和版本库里面最新版本的区别;

2.命令git checkout --test.txt意思就是,把test.txt文件在工作区的修改全部撤销,这里有两种情况:

  • 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

  • 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态;

3.git reset之后,整个工作区的所有文件都会回到指定版本提交的那个状态;

4.git revert <commit_id>操作实现以退为进;

5.rm:

  • 如果你用的rm删除文件,那就相当于只删除了工作区的文件,如果想要恢复,直接用git checkout -- 就可以

  • 如果你用的是git rm删除文件,那就相当于不仅删除了文件,而且还添加到了暂存区,需要先git reset HEAD ,然后再git checkout --

  • 如果你想彻底把版本库的删除掉,先git rm,再git commit 就ok了

6.只有版本库的修改才可以被跟踪;

7.git status 查看当前git仓库与上一次commit之后的版本库的一切修改,包括工作区的修改和暂存区的修改;

8.由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令;

9.HEAD指向master,master指向最新的提交;

10.只git add ,没有git commit,此时,暂存区比分支新一个版本。

8.命令速查

表摘自网络,侵删

9.相关资料

廖雪峰的git教程:www.liaoxuefeng.com/wiki/896043…

pro Git中文版:gitee.com/progit/