官方地址git
Git 仓库中的提交记录保存的是你的目录下全部文件的快照。条件容许的状况下,它会将当前版本与仓库的上一个版本进行对比,并把全部差别打包到一块儿做为一个提交记录。
Git 还保存了提交的历史记录,因此大多数提交记录上都有父节点。翻译
Git 的分支很是轻量。他们只是简单地指向某个提交记录。 歌之颂之:早建分支!多用分支!建立再多的分支也不会形成存储和内存上的开销,而且按照逻辑分解工做到不一样的分支要比维护那些臃肿的分支简单多了。
再将分支和提交记录结合起来后,咱们就能够看到二者如何协做。如今只要记住使用分支其实就至关于再说:我想基于这个提交以及它全部的父提交进行新的工做。内存
分开操做:开发
建立一个新分支并切换到新建的分支:get
如今探讨如何将两个分支合并在一块儿。如今遇到一个新的场景:新建了一个分支,在其上开发某个新功能,开发完成再合并会主线。it
在Git中合并两个分支时会产生一个特殊的提交记录,他有两个父节点。翻译成天然语言:我要把两个父节点自己及他们全部的祖先都包含进来。
合并后的分支包含了对代码库的全部修改。ast
分支合并的第二种方法。Rebase 实际上就是取出一系列的提交记录,“复制”它们,而后在另一个地方逐个的放下去。
Rebase的优点是能够创造更线性的提交历史。若是只容许使用Rebase,代码库的提交历史将会变得异常清晰。
总结:这两条命令使用下来,感受主语有点不同, git merge 命令的主语是master, 做用是把记录合并到master。git rebase 的主语是bugFix,意思是把bugFix上的提交记录合并到master的将来节点,master 还要再 git rebase 这样就至关于HEAD回到了master的最新记录。基础
HEAD 是一个对当前检出记录的符号引用,也就是指向你正在其基础上进行工做的提交记录。
HEAD 老是指向当前分支上最近一次提交记录。大多数修改树的 Git 命令都是从改变 HEAD 的指向开始的。
HEAD 一般状况下是指向分支名的。在你提交时,改变了分支的状态,这一变化经过HEAD变得可见。打包
使用相对引用的话,你就能够从一个易于记忆的地方开始计算。引用
若是你想在提交树中向上移动不少步的话,除了屡次使用操做符,可使用~操做符一次解决。~操做符后面能够跟一个数字(可选,不跟数字时与相同,向上移动一次),指定向上移动多少次。
强制修改分支位置
撤销变动由底层部分和上层部分组成。
git reset 经过把分支记录回退几个提交记录来实现撤销改动。 做用范围:本地分支
虽然在你的本地分支中使用 git reset 很方便,可是这种“改变历史”的方法对你们一块儿使用的远程分支是无效的。 因此,为了撤销更改并分享给别人,咱们须要使用 git revert .