git

git三类分支详解

三类分支解混淆

Posted by Ccloud on 2022-08-16
Estimated Reading Time 2 Minutes
Words 678 In Total
Viewed Times

本文区分了三个比较容易混淆的分支

远程分支

远程分支指的是Github或者Gitlab这种基于git做版本管理的远程仓库中的项目的分支。

远程跟踪分支

《progit》中提出的概念,虽然叫远程跟踪,但实际在本地。当使用 git fetch命令时,git比较远程仓库和本地仓库的差异,并且将远程仓库的分支拉取下来,保存为形如origin/master的本地只读分支(这就是远程跟踪分支)。所谓只读,就是只起到标识最后一次通信时远程仓库的分支情况(相当于在本地的拷贝上标识),这些跟踪分支的只读性体现在他们并不能修改和产生新的提交(因为只用作标识远程的情况)。

跟踪分支

跟踪分支和远程跟踪分支一起使用,远程跟踪分支才能被最大化利用。因为远程跟踪分支只是本地只读分支,而fetch只是更新远程跟踪分支,所以要把最新一次通信后远程的更改和本地的分支合并,就必须配合merge命令,例如将远程分支上master最新的更改合并到本地master的流程为:

1
2
3
4
5
6
7
#先fetch,将更新同步到本地远程跟踪分支origin/master
$ git fetch origin
#然后合并
$ git checkout master
$ git merge origin/master

#这是一般的做法,如果要实现自动化,则引入跟踪分支

跟踪分支从远程跟踪分支上创建而出,由于git的数据模型近似于链表,创建新分支相当于创建新指针,所以基于远程跟踪分支创建跟踪分支性价比很高,并不会增加额外的空间,只是在origin/test当前指向的提交上再创建一根指针,且该分支是可写的(因为就是纯粹的可读写本地分支)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#创建方法为
$ git checkout --track origin/test
#可以自动创建test的本地跟踪分支

#或者
$ git checkout -b test
$ git branch -u origin/test

# 使用本地现有分支跟踪远程分支(数据上必须相同)
$ git branch --set-upstream-to=<远程主机名>/<远程分支> <本地分支>

#使用跟踪分支后可以通过以下命令比较跟踪分支和远程跟踪分支的版本关系(进一步反应和远程分支之间的关系(领先/落后的提交数))
$ git branch -vv

#同时可以使用pull命令实现自动化拉取合并,与上述的fetch+merge在大部分情况下一致
$ git pull origin


progit


如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !