既然我已经添加了git Remote Add,为什么还需要在本地分支机构上设置上游? [英] Why I need to set upstream on a local branch when I have added git remote add already?

查看:15
本文介绍了既然我已经添加了git Remote Add,为什么还需要在本地分支机构上设置上游?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个关于git的问题.假设我用此代码克隆了我的项目

git clone ssh://git@<my-project.git>

然后执行类似这样的行来添加远程上行链路

git remote add upstream ssh://git@<my-project.git>

当我尝试运行此行时,我已验证是否已设置上游

$ git remote -v
origin  ssh://git@<my-project.git> (fetch)
origin  ssh://git@<my-project.git> (push)
upstream        ssh://git@<my-project.git> (fetch)
upstream        ssh://git@<my-project.git> (push)

所以我从主目录创建了一个新分支

git checkout -b sample-branch master
Switched to a new branch 'sample-branch'

但是,当我尝试推送我的本地分支机构时,出现错误。

git push

fatal: The current branch sample-branch has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin sample-branch
可能我在想,既然我已经添加了上游,我的本地分支机构就不需要 把我的上游设置好还是我想错了?我必须先执行上面的行,然后才能执行

git push 

后续命令。

推荐答案

有关TL;DR版本,请参阅VonC's answer

git remote add添加远程。虽然按照惯例,origin是第一个名称,而upstream通常是第二个名称,但是您可以使用您喜欢的任何名称。但通常情况下,如果您添加第二个遥控器,它将具有不同的URL,而不是相同的URL。如果您与多个不同的Git存储库通信,每个Git存储库位于不同的URL,则只需要多个遥控器。

令人困惑的是,名为upstream的遥控器(假设您有一个)不是上游遥控器,它只是一个遥控器。

术语上游应用于分支机构名称时,指的是内部由两部分组成的设置(如VonC said)。每个分支名称(如masterfeature)可以有一个上游名称,也可以没有上游名称。通常,master的上游是origin/masterfeature的上游是origin/feature。如果您确实有多个远程,并将第二个远程调用为upstream,则可以将branchX的上游设置为upstream/branchX

so:分支的上游是其他名称,通常是以远程名称开头的名称。Git使用此设置来记住"那是我提取/拉出的位置"和"那是我推送到的位置"。但是,此名称必须实际存在,这才是事情真正令人困惑的地方。

所以我从主目录创建了一个新分支

git checkout -b sample-branch master
Switched to a new branch 'sample-branch'
从技术上讲,这会在您自己的Git存储库中创建一个新的分支名称,名为sample-branch此新分支名称选择的提交哈希ID与现有名称master(也是分支名称)选择的提交哈希ID相同。

当您使用这种git checkout命令时,如果origin/sample-branch,则Git会将新分支的上游设置为另一个分支的名称。但是您可能没有origin/sample-branch。仅当位于origin的Git(位于远程中名为origin的URL)具有名为sample-branch的分支时,此名称才会存在,并且您的Git已经看到并复制了它。由于您没有在此处使用origin/sample-branch-如果您使用了,它无论如何都会失败-您的Git没有为新分支设置上游

您最终需要为此做点什么。没有必要马上做这件事!你想什么时候做就什么时候做。但最终,你确实需要这么做。涉及两个步骤:

  1. 您必须获取位于origin上的另一个Git,才能创建名为sample-branch的分支。当您让Git创建sample-branch时,您的Git现在可以将其复制到您的origin/sample-branch,以便您的origin/sample-branch存在。

  2. 一旦您的origin/sample-branch存在,您需要获取您的Git以将origin/sample-branch设置为sample-branch的上游。

可以使用两个单独的Git命令完成这个两步过程,而在古代,您必须这样做。不过,对于现代的Git版本,一个命令就足够了。该命令是git push -u origin sample-branch

此操作的作用是:

  1. 让您的Git使用名称origin中存储的URL调用他们的Git(位于origin的Git)。

    您的Git为他们的Git提供完成整个任务所需的任何新提交和其他对象。然后,如果需要,您的Git将发送提交及其包含的文件。一旦他们具备了所需的一切,您的Git就会向他们发送一个礼貌的请求:如果可以,请创建或更新您的名称sample-branch,以便标识特定的提交。您的Git在此处建议的特定提交与您的名称sample-branch标识的提交相同。

    如果他们接受此请求,将创建他们的sample-branch。由于您的Git现在看到其Git已sample-branch,因此您的Git将创建您的origin/sample-branch来记住这一点。

  2. 现在您的Git已origin/sample-branch,您的git push -u将自动调用git branch --set-upstream-to=origin/sample-branch sample-branch

如果您出于某种原因希望以旧的两步方式完成此操作,请运行:

git push origin sample-branch:sample-branch

(这里用冒号分隔的两个名称告诉您的Git要告诉他们什么)。然后,当该操作成功时,运行:

git branch --set-upstream-to=origin/sample-branch sample-branch

显然,单个git push -u命令更短、更容易。

这篇关于既然我已经添加了git Remote Add,为什么还需要在本地分支机构上设置上游?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆