在开发软件的时候,可能很多人会同时为同一个软件开发性能或者修复bug,然而如果都在主分支来进行开发,引起抵触的概率将会大大增加,而且也不利于保护,如果你同时批改多个bug该怎么办?所幸,git的分支性能很好的帮忙咱们解决了这个问题,它能够帮忙咱们同时进行多个性能的开发和版本治理.请在浏览这篇文章之前,务必先浏览深入浅出git——数据模型,这样能力更好的帮忙你了解git中的分支.想晓得为什么git中新建一个分支那么快,代价那么小吗?接下来咱们就来揭开分支神秘的面纱。
这次我会只显示commit objects来简化它,并且为了让它更容易了解我会给他们取个别名来代替本来的测验和.所以对于提交记录,咱们会失去一个像上面这样的图.
相熟图论的应该留神到了下面的是一个有向无环图(DAG),这意味着从一个节点开始沿着边的方向不会通过雷同的节点.在咱们的例图中能够清晰的发现存在三个不同的分支,咱们别离用红色(蕴含A,B,C,D,E),蓝色(A,B,F,G),以及绿色(A,B,H,I,J)来标记它们
这就是定义分支的一种形式-蕴含所有的提交列表.然而这不是git应用的形式,git应用更简略更便宜的形式,git只跟踪分支上的最初一次提交,而不是持有某个分支的所有列表并更新它们,只须要晓得分支的最初一次提交,而后依据图的有向边就能够获取整个提交列表.例如要定义咱们的蓝色分支,只须要晓得蓝色分支的最初一次提交是G,如果咱们须要蓝色分支蕴含的所有提交的列表,就从G沿着图有向边遍历即可.
这就是git治理分支的形式,通过放弃执行提交记录的指针即可,接下来咱们会进行一个演示.首先通过git init初始化一个空仓库,而后查看.git目录下存在的文件
.git|-- HEAD|-- config|-- description|-- hooks| |-- applypatch-msg.sample| |-- commit-msg.sample| |-- fsmonitor-watchman.sample| |-- post-update.sample| |-- pre-applypatch.sample| |-- pre-commit.sample| |-- pre-push.sample| |-- pre-rebase.sample| |-- pre-receive.sample| |-- prepare-commit-msg.sample| |-- update.sample|-- info| -- exclude|-- objects| |-- info| |-- pack|-- refs |-- heads |-- tags这次咱们关注refs这个子目录,这个中央是git保留分支指针的地儿.当咱们没有提交任何货色的时候,refs目录下只存在两个空目录,当初咱们提交几个文件
echo "Hello Java" > helloJava.txtgit add .git commit -m "Hello Java Commit"echo "Hello Php" > helloPhp.txtgit add .git commit -m "Hello Php Commit"echo "Hello Python" > helloPython.txtgit add .git commit -m "Hello Python Commit"当咱们执行git branch的时候咱们能够看到上面这样的输入
...