远程分支

远程跟踪分支

链接

远程仓库中的分支,都会在本地建立一个对应的远程跟踪分支。

  1. 远程跟踪分支以 remote/branch 形式命名。

  2. 远程跟踪分支是不可变的,只有当发生任何网络通信操作时,它才会自动移动

  3. 只要不与远程服务器连接,你的 远程跟踪分支 就不会移动。例如当使用 git fetch origin 时,才会更新 origin 的所有远程跟踪分支的指向。

  4. 每一次运行 commit 时,只是更新了本地分支的指向,并不会影响远程跟踪分支。

  5. 远程跟踪分支跟普通的分支一样,只不过它的指向是自动修改的。其位于 .git/refs/remotes/<remote>/ 目录下。而普通的本地分支位于 .git/refs/heads 目录下。


跟踪分支

跟踪分支是与远程分支有直接关系的本地分支。如果在一个跟踪分支上输入 git pull,Git 能自动地识别去哪个服务器上抓取、合并到哪个分支。

创建

  1. 使用git checkout --track <remote>/<branch> 创建一个与远程分支同名的本地跟踪分支。该命令会自动切换到新建的分支上。

    $ git checkout --track origin/tra
    Branch tra set up to track remote branch tra from origin.
    Switched to a new branch 'tra'
    
    $ git branch
      dev
      master
      re
    * tra
    

    此时再使用 git push 命令时,它会将 tra 分支上的修改推到远程的 tra 分支上。不需要写成 git push origin tra:tra

  2. 使用git checkout -b <branch> <remote>/<branch> 创建一个指定名字的跟踪分支。由于远程跟踪分支也指向了一个提交结点,所以可以在在该结点上建立分支。

    $ git checkout -b tra2 origin/tra
    Branch tra2 set up to track remote branch tra from origin.
    Switched to a new branch 'tra2'
    

    上述操作会新建立一个 tra2 分支用于跟踪 origin/tra 分支。

    当分支名不相同时,如果直接使用 git push 会报如下错误:

    $ git push
    fatal: The upstream branch of your current branch does not match
    the name of your current branch.  To push to the upstream branch
    on the remote, use
    
        git push origin HEAD:tra
    
    To push to the branch of the same name on the remote, use
    
        git push origin tra2
    

    这是因为本地分支名与远程分支名不相同,无法直接提交。可以将 push.default 设置为 upstream 解决该问题。参考

    $ git config --global push.default upstream
    

删除

删除远程分支

使用 git push <remote> --delete <branch> 删除远程分支

撤销本地跟踪分支

使用git branch --unset-upstream 可以撤销跟踪分支。`

$ git branch -vv
* dev    465413b [origin/tra: ahead 20, behind 5] update from local

$ git branch --unset-upstream
$ git branch -vv
* dev    465413b update from local

开始时 dev 跟踪的是 origin/tra 分支,通过 --unset-upstream 后, dev 没有跟踪任何分支。


修改

修改主要有两种操作:设置已有的本地分支跟踪一个刚刚拉取下来的远程分支,或者想要修改正在跟踪的上游分支(upstream)。

修改主要通过 git branch -u <remotebranch>git branch --set-upstream-to <remotebranch>

$ git branch -vv
* dev    465413b update from local
  master c5c9b73 [origin/master: ahead 2] c2

$ git branch -u origin/re
Branch dev set up to track remote branch re from origin.

$ git branch -vv
* dev    465413b [origin/re: ahead 20, behind 1] update from local
  master c5c9b73 [origin/master: ahead 2] c2

可以看出,dev 分支起初并没有关联远程分支;通过 git branch -u 命令后,其上游(upstream) 分支变成了 origin/re。

下面操作接上面命令:

$ git branch --set-upstream-to origin/tra
Branch dev set up to track remote branch tra from origin.

$ git branch -vv
* dev    465413b [origin/tra: ahead 20, behind 5] update from local
  master c5c9b73 [origin/master: ahead 2] c2

查看

使用 git branch -vv 查看设置的所有跟踪分支

$ git branch -vv
  dev    a6816c6 merge master
  master c5c9b73 [origin/master: ahead 2] c2
* tra2   3f95421 [origin/tra: ahead 2, behind 1] -vv

可以看出,dev 没有跟踪的远程分支;master 跟踪的是远程的 master 分支;tra2 跟踪的是远程的 tra 分支。

tra2 分支中, ahead 值为 2,表示本地尚有 2 个提交没有推送到远程仓库中。behind 值为 1,表示远程仓库中尚有 1 次提交未进行合并。

注意:该操作并不会执行网络请求,它的所有数据都是来源于上一次从远程仓库中抓取的数据

如:

$ git branch -vv
  dev    a6816c6 merge master
  master c5c9b73 [origin/master: ahead 2] c2
* tra2   7872297 [origin/tra: ahead 2, behind 1] update a2

$ git fetch origin

$ git branch -vv
  dev    a6816c6 merge master
  master c5c9b73 [origin/master: ahead 2] c2
* tra2   7872297 [origin/tra: ahead 2, behind 2] update a2

在拉取之前 behind 值为 1,拉取之后值为 2。这是因为在拉取之前,远程仓库中已有两次提交,但 fetch 并不进行网络操作,所以其显示的 behind 只是 1(本地的)。拉取之后,将远程仓库的两次提交都拉取到本地,所以 behind 值变成了 2。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容