git分支
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。 在很多版本控制系统中,这是一个略微低效的过程——常常需要完全创建一个源代码目录的副本。对于大项目来说,这样的过程会耗费很多时间。Git 处理分支的方式可谓是难以置信的轻量,创建新分支这一操作几乎能在瞬间完成,并且在不同分支之间的切换操作也是一样便捷。 与许多其它版本控制系统不同,Git 鼓励在工作流程中频繁地使用分支与合并,哪怕一天之内进行许多次。
Git 的默认分支名字是 master。Git 的 master 分支并不是一个特殊分支。 它就跟其它分支完全没有区别。 之所以几乎每一个仓库都有 master 分支,是因为 git init 命令默认创建它,并且大多数人都懒得去改动它。一个分支上包含多个提交对象(对树对象的封装),Git 的分支,其实本质上仅仅是指向提交对象的可变指针。 在多次提交操作之后,你其实已经有一个指向最后那个提交对象的 master 分支。 master 分支会在每次提交时自动向前移动。(下图的header指向f30ab)。如下图所示:
1、 创建一个分支
git branch 分支名
这会在当前所在的提交对象上创建一个指针。如下图所示:
2、切换分支
git checkout 分支名
这是指针会指向test分支,如下图所示:
3、在新分支上工作并且提交
HEAD 分支随着提交操作自动向前移动,最后的分支图如下:
4、再次切换到master分支
git checkout master
这条命令做了两件事。 一是使 HEAD 指回 master 分支,二是将工作目录恢复成 master 分支所指向的快照内容。也就是说,你现在做修改的话,项目将始于一个较旧的版本。 本质上来讲,这就是忽略 testing 分支所做的修改,以便于向另一个方向进行开发。如下图所示:
注意:分支切换会改变你工作目录中的文件,在切换分支时,一定要注意你工作目录里的文件会被改变。 如果是切换到一个较旧的分支,你的工作目录会恢复到该分支最后一次提交时的样子。 如果 Git 不能干净利落地完成这个任务,它将禁止切换分支。
5、现在在master分支上工作并且提交
现在,这个项目的提交历史已经产生了分叉,因为刚才你创建了一个新分支,并切换过去进行了一些工作,随后又切换回 master 分支进行了另外一些工作。 上述两次改动针对的是不同分支:你可以在不同分支间不断地来回切换和工作,并在时机成熟时将它们合并起来。如下图:
6、合并master和新分支
git merge 新分支名
此时master分支上就已经有了新分支上修改的代码。
团队协作之远程库
远程跟踪分支
远程跟踪分支是远程分支状态的引用。它们是你无法移动的本地引用。一旦你进行了网络通信, Git 就会为你移动它们以精确反映远程仓库的状态。
跟踪分支
从一个远程跟踪分支检出一个本地分支会自动创建所谓的“跟踪分支”(它跟踪的分支叫做“上游分支”)。 跟踪分支是与远程分支有直接关系的本地分支。
本地分支
本地仓库创建的本地分支。
跟踪分支是本地分支与远程跟踪分支交互的桥梁。当我们克隆的时候,默认会自动生成一个master本地分支(已经跟踪了对应的远程跟踪分支)。
当本地分支没有跟踪远程跟踪分支时
- 自己创建一个分支,并推送到远程仓库时
git push origin master
虽然上面的命令可以把本地分支推送到远程分支,但是我们能不能更简化呢?答案肯定是可以的,git push
就可以了,但是现在会出现一个问题,如下图:
原因就是本地分支没有跟踪跟踪远程分支,我们执行下面的命令:
git branch -u 仓库名(别名)/分支名
但是这样又会出现一个问题,如下图:
为什么呢?因为从始至终都没有往远程仓库推过这个分支,所以不存在origin/master远程跟踪分支。接下来执行这个命令:
git push origin master
此时,远程跟踪分支已经存在,如下图:
然后执行上面的命令就没问题了。
最后当我们更改了master分支,直接执行git push就行。当我们要更新master分支时,直接执行git pull就行。
实现上面的功能,其实有更简单的命令:git push -u origin master,在第一次push的时候加个选择项-u
- 别人创建了分支并且推到了远程仓库,我们自己需要拉取这个分支
首先我们要先执行下面的命令
git fetch 仓库名 分支名
但是会出现这样的情况,如下图:
根据执行命令的结果,我们现在没有本地分支wang
,所以需要手动创建和合并。需要执行下面的命令:
这样我们已经拿到了别人提交的分支,因为现在本地分支没有跟踪远程跟踪分支,所以每次跟新别人分支的时候,都要执行上面的命令,非常之繁琐,有没有解决的办法呢?当然是有的,和上面第一种情况一样,只需要跟踪远程跟踪分支即可。
git fetch可以直接省略,直接执行 git checkout -b 分支名 远程跟踪分支名
以后的更新就可以直接git pull了。
所以在git团队协助开发时,我们要注意本地分支要跟踪远程跟踪分支。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!