搜索

首页  >  问答  >  正文

Git中上游分支的概念是什么?

《Pro git》一书中在介绍分支时,提到了上游分支的概念。

从一个远程跟踪分支检出一个本地分支会自动创建一个叫做“跟踪分支”(有时候也叫做“上游分支”)

从这里,我们可以看到这里所说的上游分支是指从远程某个分支检出的一个本地分支。

但是,在本书后面提到“上游快捷方式”时,这个上游分支又不是指本地分支:

当设置好跟踪分支后,可以通过 @{upstream} 或 @{u} 快捷方式来引用它。所以在master分支时并且它正在跟踪 origin/master 时,如果愿意的话可以使用 git merge @{u} 来取代 git merge origin/master

我们在使用git时,推送到远程仓库时,经常也会遇到上游分支这个概念,比如当你第一次推送远程时,你并未加任何参数:

git push

那么git就会立刻提示你设置上游分支:

fatal: 当前分支 master 没有对应的上游分支。

为推送当前分支并建立与远程上游的跟踪,使用

git push --set-upstream origin master

这里的上游分支好像也是指远程的分支。

于是问题就来了,到底什么叫做叫做“上游分支”呢?《Pro git》一书中并未给准确的概念;而网上也有说上游分支只是个相对概念。

漂亮男人漂亮男人2706 天前2451

全部回复(3)我来回复

  • 仅有的幸福

    仅有的幸福2017-06-26 10:51:32

    简单来说 upstream 就是于你本地分支对应的远端分支,push pull 或 fetch 时如果不指定远端分支,就会使用 upstream 分支。

    回复
    0
  • typecho

    typecho2017-06-26 10:51:32

    您好,首先我没有看过任何的Git的书籍,但是我敢说我对Git操作非常精通,都是从长期实践中摸爬滚打过来的。我也许能明白你的困惑!
    首先大脑不能停留在以前SVN上,就是中央仓库的概念!首先,Git中没有中央仓库,那么问题来了,你本地的代码分之要提交到远程的哪个分之呢?
    git branch --set-upstream branch 这个branch就是远端的branch,将一个已存在的分支设定成跟踪远端的分支。在你设定了远端的跟踪分支后,你才能正常简约地敲命令: git pull; git psuh;
    比如当你第一次推送远程时,你并未加任何参数:
    git push
    那么git就会立刻提示你设置上游分支:
    那么你就需要 git push origin master; 默认当前远端分支为主分支

    回复
    0
  • 代言

    代言2017-06-26 10:51:32

    根据平时使用的情况来看 上游分支就是指的远程库的一个分支,这个库可以github中的某一账号,也可以是某台服务器上的一个目录(包括本地),set-upstream 就是为了将当前分支和其他库中的分支对接,这样才能共同修改一套代码,而不是只是自己在这自high

    回复
    0
  • 取消回复