问题描述
在我看来,“上游分支”一词模棱两可,似乎具有两个上下文。
-
上游分支是由本地分支跟踪的分支(请参见Git Branching - Remote Branches),并且
-
上游分支是在重新定级的情况下(请参阅Git Branching - Rebasing)。
$ git rebase -h
usage: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] [<branch>]
or: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
or: git-rebase --continue | --abort | --skip | --edit-todo
第一个对我来说很清楚,但就我的一生而言,我似乎无法将rebase
中“上游”所指的内容笼罩在内。此外,我遇到了“多个上游分支机构”(git branch with multiple upstreams),这进一步混淆了这个难题。
在我看来,“上游分支”的概念在git-scm.com文档中需要一些歧义。这对于理解以下命令将有很大帮助:
$ git rebase --onto master server client
在Git分支-重新定级中进行了描述,以及
$ git rebase master server
解决方法
Rebasing将对工作分支所做的提交应用于该分支的祖先或曾经是该分支的祖先。如果您考虑实际流的流向,那么 upstream 分支就是过去离开当前分支的分支。
重新定级可能不适用于下游分支,或在当前分支之前已提交的分支。例如,如果您要在完成一些工作后分支,那么请检出上一个分支,并尝试重新建立第二个分支,这是行不通的。
因此,上游实际上仅指的是当前分支历史的一部分的分支,更具体地说,是您打算作为基础的分支。本地和远程无关。