git是一个版本控制工具,就要先弄清楚什么是版本git
那一个commit又包含哪些内容,好比有一个文件里边的内容是:算法
京口瓜洲一水间 钟山只隔数重山 春风又到江南岸 明月什么时候照我还
后来改为了服务器
京口瓜洲一水间 钟山只隔数重山 春风又过江南岸 明月什么时候照我还
那此次改动就是一次commit工具
能够理解为一个commit里边存的就是一个差别,好比上例就能够表示为:fetch
-春风又到江南岸 +春风又过江南岸
这样咱们就能够清楚的知道某个版本作了什么样的修改,同时还能知道这个时候文件的所有内容是什么样的设计
为了能准肯定位到某个版本,git给每一个commit一个独一无二的ID,好比a823b1这样的16进制数(能够只用前几位,只要惟一就行)版本控制
commit-ID的生成算法:使用当前版本的全部文件内容
和父commit-ID
算一个hash值code
若是恰好有另一我的也对源文件作了修改:对象
-春风又到江南岸 +春风又绿江南岸
那这时候就会有俩条版本线(分支)教程
┌──────过(a8) 到(c3) └──────绿(b2)
括号里是commit-ID
git实现版本线的方法很巧妙:
HEAD=a8 | ┌──────过(a8) 到(c3) └──────绿(b2) | HEAD=b2
好比:
a8
a8
的commit,查到他的父commit-ID为c3
这样就能够造成一条分支线
分支原理很重要几乎全部神乎其技的git操做都是经过它实现的
这个时候俩条版本线是孤立的,若是只是这样简单的各干各的,那我们的教程也就《全剧终》了
惋惜原做者采纳了绿
的建议,但也要对过
作记录,这时候就该版本管理工具提供的更增强大的功能协做
出马,咱们一块儿为同一个项目添砖添瓦,而后统一意见(分支合并)
合并后的整个版本变动过程就变成:
到 过 绿
git合并分支有俩种办法:merge,rebase。在git使用中不用merge是能够的,但rebase是必须技能,因此本教程只讲解rebase,merge请参见其余教程。
整个合并的步骤:
b2
所在的分支上操做(由于他是最终的修改)b2
的变动加到a8
后边b2
的 父commit-ID 设置为 a8
b2
算一个新的commit-ID 1e
1e
以下所示:
HEAD=a8 | 到(c3)──────过(a8)──────绿(1e) | HEAD=1e
在git中咱们通常会使用master分支做为主分支(成熟的分支),日常咱们会在master分支上支出来一个新的不成熟分支进行开发,以便在遇到bug或者新需求时再基于master拉一个纯净的分支,这些分支都是存储于本地库中,除了本地库还有远程库、远程镜像库
就是咱们的git服务器,他其实和咱们的本地库是如出一辙的存在,它和每一个人的工做目录没有任何区别,只是咱们把这台机器做为中心节点汇总咱们的改动。默认名字是origin。
git是一个离线版本控制系统,它设计了不少功能以支持离线工做。远程镜像库顾名思义就是远程库的一个本地镜像,咱们不能够修改它,只能让他更新。这样全部读取远程库就变成本地操做。
git fetch
更新远程镜像库
git brannch
显示全部分支,以remote打头的都是远程镜像库里的分支(像上边说的咱们没法直接查看远程库中分支)
git不能更新库。操做的对象只是分支和commit,咱们只是用本地分支合并远程分支,也就是让本地分支包含远程分支的全部commit,也就达到了更新本地分支的效果(是否是和合并本地分支是同样的道理)
具体操做:git rebase origin/master
将咱们的master分支更新到和远程master同样后就能够推送commit到远程库
git push orgin master
将本地master分支推送到远程库(以及远程镜像库)master分支
其余的远程分支其实和master分支是同样的,只是咱们使用master做为最成熟的代码分支。若是怕电脑硬盘坏致使未推送到远程master的代码丢失,咱们就能够push到远程其余分支保存咱们的分支。或者是几我的公共开发同一个功能也须要一个远程分支来汇总你们的工做进展
本文都是一些概念用于你们对git有一个整体的理解,具体操做还需查看pro git、git help或其余教程。