美文网首页
远程分支

远程分支

作者: 一江碎月 | 来源:发表于2018-03-10 22:44 被阅读0次

远程跟踪分支

链接

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

  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。

相关文章

  • 分支处理

    一、创建分支 本地分支 远程分支 二、删除分支 本地分支 远程分支 三、查看分支 本地分支 远程分支 四、切换分支

  • git 分支操作

    新建本地分支并关联远程分支 没有远程分支 或已有远程分支 删除远程分支 删除本地分支 回退到某个版本

  • 2018-05-14

    删除远程分支: git push 远程仓库 --delete 远程分支 git push 远程仓库:远程分支 本地...

  • Git的使用 和 问题总结

    clone远程分支 1、clone远程分支, master分支,如 2、clone远程分支,master之外的分支...

  • git相关操作

    分支 查看本地分支 查看本地和远程分支 更新本地的远程分支列表 删除本地分支 删除远程分支 切换分支 创建本地分支...

  • ProGit读书笔记-2.Git分支

    分支的新建与合并 分支的新建与合并 分支的合并 删除分支 分支的管理 远程分支 远程分支 (远程仓库名)/(分支名...

  • git 分支管理

    查看本地分支 查看远程分支 3.创建本地分支 或者 创建远端分支(远端没有dev分支) 关联远程分支 向远程分支推...

  • Git创建本地分支-push到远程并建立远程分支

    查看本地分支 查看所有分支:本地和远程分支 创建本地分支 将本地分支push到远程,并建立远程分支 查看所有分支

  • git创建分支并推送到远程分支

    新建远程分支 删除远程分支

  • git

    切换到远程分支 查看本地分支 查看远程分支

网友评论

      本文标题:远程分支

      本文链接:https://www.haomeiwen.com/subject/ujkbfftx.html