这里写目录标题
- git是什么
- 集中式版本控制系统和分布式版本控制系统
- git的优势
- git能做什么(常用)
- 基础教程
- 流程图
- 介绍
- 小节
- 常用Git命令
- 速查表
- 详解
- 1、HEAD
- 2、add
- 3、commit
- 4、branch
- 5、merge
- 6、rebase
- merge和rebase区别
- 7、reset
- 8、revert
- revert与reset的区别
git是什么
git是目前世界上最先进的分布式版本控制系统
集中式版本控制系统和分布式版本控制系统
集中式版本控制系统
:库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必:须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
分布式版本控制系统
根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
git的优势
• 适合分布式开发,强调个体。
• 公共服务器压力和数据量都不会太大。
• 速度快、灵活。
• 任意两个开发者之间可以很容易的解决冲突。
• 离线工作。
git能做什么(常用)
• 克隆版本库(目前我们最常用的功能)
工作中,当接手维护一个项目时,需要从远程代码库将项目源码克隆到本地。或者,在Github上发现了一个非常好的开源项目,想要搞下来研究研究,第一步也是克隆版本库。简单的说就是我们很方便的把一个项目的源码从网上下载到了本地。
• 项目版本控制
• 项目分支管理
基础教程
流程图
介绍
• Workspace
:工作区 :程序员进行开发改动的地方
• Index / Stage
:暂存区 :
当你完成某个需求或功能后需要提交到远程仓库,那么第一步就是通过git add先提交到暂存区,被git管理。
• Repository
:仓库区(或本地仓库)
保存了对象被提交 过的各个版本,比起工作区和暂存区的内容,它要更旧一些。
git commit
后同步index的目录树到本地仓库,方便从下一步通过git push
同步本地仓库与远程仓库的同步。
• Remote
:远程仓库
远程仓库的内容可能被分布在多个地点的处于协作关系的本地仓库修改,因此它可能与本地仓库同步,也可能不同步,但是它的内容是最旧的。
小节
- 任何对象都是在工作区中诞生和被修改;
- 任何修改都是从进入index区才开始被版本控制;
- 只有把修改提交到本地仓库,该修改才能在仓库中留下痕迹;
- 与协作者分享本地的修改,可以把它们push到远程仓库来共享。
常用Git命令
速查表
详解
1、HEAD
HEAD,它始终指向当前所处分支的最新的提交点
。你所处的分支变化了,或者产生了新的提交点,HEAD就会跟着改变。
2、add
指令 | 作用 |
---|---|
git add . | 添加当前目录的所有文件到暂存区 |
git add [dir] | 添加指定目录到暂存区,包括子目录 |
git add [file1] | 添加指定文件到暂存区 |
3、commit
指令 | 作用 |
---|---|
git commit -m [message] | 提交暂存区到本地仓库,message代表说明信息 |
git commit [file1] -m [message] | 提交暂存区的指定文件到本地仓库 |
git commit --amend -m [message] | 使用一次新的commit,替代上一次提交 |
4、branch
指令 | 作用 |
---|---|
git branch | 列出所有本地分支 |
git branch -r | 列出所有远程分支 |
git branch -a | 列出所有本地分支和远程分支 |
git branch [branch-name] | 新建一个分支,但依然停留在当前分支 |
git checkout -b [branch-name] | 新建一个分支,并切换到该分支 |
git branch --track [branch][remote-branch] | 新建一个分支,与指定的远程分支建立追踪关系 |
git checkout [branch-name] | 切换到指定分支,并更新工作区 |
git branch -d [branch-name] | 删除分支 |
git push origin --delete [branch-name] | 删除远程分支 |
5、merge
指令 | 作用 |
---|---|
git fetch [remote] | merge之前先拉一下远程仓库最新代码 |
git merge [branch] | 合并指定分支到当前分支 |
一般在merge之后,会出现conflict,需要针对冲突情况
,手动解除冲突。主要是因为两个用户修改了同一文件的同一块区域
。
6、rebase
rebase又称为衍合,是合并的另外一种选择。(一般不用)
merge和rebase区别
两个分支,test和master
在master执行git merge test
在master执行git rebase test
merge操作会生成一个新的节点,之前的提交分开显示。而rebase操作不会生成新的节点,是将两个分支融合成一个线性的提交。 如果你想要一个干净的,没有merge commit的线性历史树,那么你应该选择git rebase 如果你想保留完整的历史记录,并且想要避免重写commit history的风险,你应该选择使用git merge
7、reset
reset命令把当前分支指向另一个位置,并且相应的变动工作区和暂存区。
指令 | 作用 |
---|---|
git reset —soft [commit] | 只改变提交点,暂存区和工作目录的内容都不改变 |
git reset —mixed [commit] | 改变提交点,同时改变暂存区的内容 |
git reset —hard [commit] | 暂存区、工作区的内容都会被修改到与提交点完全一致的状态 |
git reset --hard HEAD | 让工作区回到上次提交时的状态 |
8、revert
git revert用一个新提交来消除一个历史提交所做的任何修改。