rebase中“上游分支”的含义

问题描述

在我看来,“上游分支”一词模棱两可,似乎具有两个上下文。

  1. 上游分支是由本地分支跟踪的分支(请参见Git Branching - Remote Branches),并且

  2. 上游分支是在重新定级的情况下(请参阅Git Branching - Rebasing)。

(2)中的“上游”显示CLI help中:

$ 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 分支就是过去离开当前分支的分支。

重新定级可能不适用于下游分支,或在当前分支之前已提交的分支。例如,如果您要在完成一些工作后分支,那么请检出上一个分支,并尝试重新建立第二个分支,这是行不通的。

因此,上游实际上仅指的是当前分支历史的一部分的分支,更具体地说,是您打算作为基础的分支。本地和远程无关。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...