引子
接上篇,主要讲 Git 分支
Git 如果没有分支,我觉得就没什么可说的了
分支是什么?
分支 就是平行线,互不干扰
假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
为什么大家喜欢用GIT ,因为GIT切分支是无消耗的,秒切
如果你试过SVN这个烂东西的话
HEAD 是什么?
说分支前要把HEAD 说一下
HEAD 是当前活跃分支的游标,可以理解为你现在在哪,HEAD就指向哪儿,GIT才知道你在哪里
创建分支
1 | $ git branch dev |
上面的命令,我们在当前分支下新建了一个dev的分支
但是我们当前不指向dev分支
我们的游标 HEAD 还是指向 master
如果这个时候我们需要将游标指向dev分支,我们需要用checkout
1 | $ git checkout dev |
也可以使用下面的命令
1 | $ git checkout -b dev |
这条命令也能创建一个dev的分支,而且在创建分支的时候,顺便将游标也指向了dev分支
这条命令相当于
1 | $ git branch dev |
查看分支信息
1 | $ git branch |
合并分支
修改当前分支上的文件
readme.md
添加一行
1 | Git create branch |
然后提交
1 | $ git add readme.md |
然后我们切回master分支
1 | $ git checkout master |
这个时候如果查看readme.md 会发现 新加的那行信息不见了
因为那是提交在dev分支上的,master分支上没有
合并分支
1 | $ git merge dev |
git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。
注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。
当然,也不是每次合并都能Fast-forward,我们后面会讲其他方式的合并。
删除分支
1 | $ git branch -d dev |
解决冲突
合并分支不会总是没有任何问题的
冲突一般都出在合并分支上
从远程仓库更新代码其实也是将远程仓库的代码和本地仓库的代码进行一次合并
准备新的feature1分支,继续我们的新分支开发:
1 | $ git checkout -b feature1 |
修改readme.md最后一行,改为:
1 | Git Creating branch is quick AND simple. |
在feature1分支上提交:
1 | $ git add readme.md |
切换到master分支:
1 | $ git checkout master |
在master分支上把readme.md文件的最后一行改为:
1 | Git Creating branch is quick & simple. |
提交
1 | $ git add readme.md |
现在 master 和 feature1 都有自己的提交信息
两边都产生的修改
尝试合并分支
1 | git merge feature1 |
这个时候就需要手动解决这些冲突,然后再提交
使用git status 也可以发现问题
1 | $ git status |
查看文件内容
1 | Git |
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改如下后保存:
1 | Git |
然后再提交
1 | $ git add readme.md |
这样就合并了冲突了
更多
1 |
|