引言(三问三答)
- 问:我们为什么要用git?
答:我们可以通过git进行版本控制,比如我们可以通过git回退到我们之前写过的任意版本,而不是通过复制多份备份文件进行版本控制。 - 问:什么是git?
答:git实际上就是一种文件版本控制系统。 - 问:git与github有什么区别?
答:git是一种分布式版本控制系统,github是一个开源网站,它为开源项目提供了git存储。因为大量的开源项目转移至github,所以GitHub网站是git版本控制的典型实例。
集中式与分布式区别
集中式版本控制
集中式很好理解,顾名思义,所有进行版本控制的文件都保存在一台服务器上,由这台中央服务器对文件进行统一版本管理。每个人(客户机)要想获取什么文件,直接从中央服务器进行读写操作。但是这有个缺点就是这种模式是需要网的,每次保存或读取一个版本都需要网络。所以网络环境较差时,体验并不是很好。
分布式版本控制
相对于集中式版本控制,分布式是不要中央服务器进行统一版本管理的。每个人(客户机)都拥有一个版本库,所以减去了上传与下载的操作。至于多人协作同一文件时,我们只需要把各自修改的地方提交给对方就好了,对方就能看到别人修改的地方了。当然,这种文件仅限于文本文件能看到改动,像二进制文件(比如word、图片之类)是看不到改动的,虽然也能存储。
当然实际工作中,为了更好的满足工作需要。往往需要一台中央服务器来存储大家的文件,因为这样的话,如果某个人有时候不方便提交文件给别人,则别人可以直接从中央服务器上进行读取了。
常用的git命令
git init
初始化git仓库git status
查看git状态git add .
将改动后的文件添加至Stage(暂存区)
git commit -m "commit content"
将暂存区内的文件提交至版本库,这是就会新增一个版本,也就是我们通常说的‘存档’。git reset --hard commitID
将当前版本回退到到版本号为commitID
的版本,版本号输前几位即可,版本号也能用HEAD
代替,HEAD
代表当前版本,HEAD^
代表上一版本。版本号可通过git log
和git reflog
查询git log
记录至开始至当前版本的提交记录git reflog
记录HEAD
指针指向的版本号git checkout -- file
撤销工作区的修改git reset HEAD <file>
撤销暂存区里的文件,重新返回工作区git tag v1.0
给当前版本打上标签
工作区、暂存区、版本库
git 版本控制系统为三块区域,分别是工作区、暂存区、版本库,接下来具体讲讲三者的含义。
工作区
也就是我们实际的工作目录,在执行git add .
命令之前,我们所有的修改都在工作区内。
暂存区
暂存区又称stage
,是指我们在执行git add .
之后,git commit -m "commit-content"
之前,我们把工作区内的修改添加进了暂存区,这时工作区是干净的(clean),只有暂存区记录我们修改的内容。
版本库
是指我们在执行git commit -m "commit-content"
后,将暂存区内的修改提交到版本库,这时暂存区内的是干净的(clean),这才算是把我们的修改真正可以进行版本控制。换句话说,提交到版本库中的内容是可以回溯到任何一个状态的。版本控制系统只记录版本库中的各个状态,所以我们要把修改的内容进行版本控制,要进行如下流程才能实现:工作区–>暂存区–>版本库。
远程仓库
git是一种分布式版本控制系统
- 创建SSH Key:
ssh-keygen -t rsa -C "youremail@example.com"
- 本地版本库与远程服务器上版本库进行连接:
git remote add origin git@github.com:Louis14lan/test.git
此处git@github.com:Louis14lan/test.git
替换称自己的项目地址,如下图所在地方。
git push -u origin master
: 将本地当前分支推送给远程(origin)的master分支,并于远程master分支建立联系,以后提交就只需要git push origin master
。
分支管理
git branch dev
创建dev分支git checkout dev
切换至dev分支(切换分支命令)git checkout -b dev
语句1与语句2的结合git merge dev --no-ff -m "commit"
在切换至主分支时,对dev
分支进行合并.--no-ff
一般带上,可以有merge历史。git branch -d dev
删除分支,合并后删除dev
分支(-D
表示强行删除)git branch
查看git仓库有多少分支git log --graph
查看分支合并情况- 注意:一般不要在master分支上进行合并,应该开一个dev分支,每个人都在dev分支上进行合并,然后通过dev统一合并到master分支上。
多人协作模式
git push origin <branch-name>
提交自己的分支至远程- 如果push失败,则说明别人上传的文件与你有冲突,你得重新用
git pull
命令pull最新的版本,然后再解决冲突。 - 根据冲突文件提示修改冲突内容,并重新push
- 进行push操作
git push origin <branch-name>
注意:
如果git pull
提示no tracking information
,则说明本地分支和远程分支的链接关系没有创建,用命令 git branch --set-upstream-to <branch-name> origin/<branch-name>
参考
主要参考廖雪峰git教程,算是此教程的一个小结吧,把常用的一些命令和概念总结了一下,方便自己以后查阅。