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/