git——set-upstream是做什么的?

我试图通过阅读git手册来理解它,但我不太懂。


当前回答

我猜你的问题是

git推送——set-upstream <repository> <branchname>做什么?

如您所见,我假设这里的git命令是git push。我希望你是这个意思。为了简化回答,我进一步指定您所在的本地分支<branchname>与您要推入的上游存储库<repository>上的远程分支具有相同的名称。最后,我假设一个常见的git配置。

话虽如此,我的回答是:

除了没有set-upstream选项的git push操作,这个选项使git push设置至少两个配置变量:

分支。<branchname>.远程= <repository> 分支。<branchname>.merge = /ref/heads/<branchname>

这就是这个命令所做的一切。它在配置变量中为本地分支存储上游信息(即远程存储库和分支)。

上游信息存储在本地分支名称下。如果你的本地分支被称为main,相应的配置变量是branch.main.remote和branch.main.merge。根据上游信息的存储方式,本地分支最多只能拥有一组上游信息。

你可以使用git config——get-regexp ^branch\..这将输出任何以“branch”开头的变量。

当这些配置变量被git fetch, git pull或git push使用时,如果你没有在命令行上显式地指定它们,就会发生魔术。也就是说,当这些配置变量设置好后,你可以发布git push, git就会知道(使用这些变量)要使用的远程存储库和上游分支。

建议进一步阅读:

为什么我必须“git push -set-upstream origin”?

但是要注意git的怪癖:

如果<repository>被指定为URL或文件路径,请参见下面的例子:

git push --set-upstream git@gitlab.example.com:namespace/myproject.git master

Git push不会在.git/refs/remotes/<repository>中创建对远程分支头的引用

仅当上游存储库已被指定名称时使用

git remote add <repository> <URL>

而git push——set-upstream已经使用了这个名字,远程跟踪分支的全部功能在所有git命令中都可用。

建议进一步阅读:

Git:很难让现有的Git存储库跟踪新的裸远程存储库

供参考:所有命令都是用Windows上的git V2.32测试的。

其他回答

当你使用——set-upstream标志推送到一个远程分支时,git会将你要推送的分支设置为你要推送的分支的远程跟踪分支。

添加远程跟踪分支意味着git知道你将来在git fetch、git pull或git push时想要做什么。它假设您希望保持本地分支和它正在跟踪的远程分支同步,并执行适当的操作来实现这一目标。

你也可以用git分支——set-upstream-to或git checkout——track实现同样的效果。有关跟踪分支的更多信息,请参阅git帮助页面。

为了避免混淆, 最近版本的git弃用了这个有点模糊的——set-upstream选项 支持更详细的-set-upstream-to选项 使用相同的语法和行为。 [参考文献]


git branch --set-upstream-to <remote-branch>

为当前本地分支设置默认远程分支。

任何未来的git拉命令(与当前本地分支签出), 将尝试将提交从<远程分支>引入到当前本地分支。


避免显式输入——set-upstream /——set-upstream-to的一种方法是使用其简写标志-u,如下所示:

git push -u origin local-branch

这将自动为未来的任何推/拉尝试设置上游关联。 要了解更多细节,请查看关于上游分支和跟踪的详细说明。

Git branch——set-upstream <<origin/branch>>正式不再支持,由Git branch——set-upstream-to <<origin/branch>>取代

我猜你的问题是

git推送——set-upstream <repository> <branchname>做什么?

如您所见,我假设这里的git命令是git push。我希望你是这个意思。为了简化回答,我进一步指定您所在的本地分支<branchname>与您要推入的上游存储库<repository>上的远程分支具有相同的名称。最后,我假设一个常见的git配置。

话虽如此,我的回答是:

除了没有set-upstream选项的git push操作,这个选项使git push设置至少两个配置变量:

分支。<branchname>.远程= <repository> 分支。<branchname>.merge = /ref/heads/<branchname>

这就是这个命令所做的一切。它在配置变量中为本地分支存储上游信息(即远程存储库和分支)。

上游信息存储在本地分支名称下。如果你的本地分支被称为main,相应的配置变量是branch.main.remote和branch.main.merge。根据上游信息的存储方式,本地分支最多只能拥有一组上游信息。

你可以使用git config——get-regexp ^branch\..这将输出任何以“branch”开头的变量。

当这些配置变量被git fetch, git pull或git push使用时,如果你没有在命令行上显式地指定它们,就会发生魔术。也就是说,当这些配置变量设置好后,你可以发布git push, git就会知道(使用这些变量)要使用的远程存储库和上游分支。

建议进一步阅读:

为什么我必须“git push -set-upstream origin”?

但是要注意git的怪癖:

如果<repository>被指定为URL或文件路径,请参见下面的例子:

git push --set-upstream git@gitlab.example.com:namespace/myproject.git master

Git push不会在.git/refs/remotes/<repository>中创建对远程分支头的引用

仅当上游存储库已被指定名称时使用

git remote add <repository> <URL>

而git push——set-upstream已经使用了这个名字,远程跟踪分支的全部功能在所有git命令中都可用。

建议进一步阅读:

Git:很难让现有的Git存储库跟踪新的裸远程存储库

供参考:所有命令都是用Windows上的git V2.32测试的。

——set-upstream用于将本地的分支映射到远程的分支,这样你就可以执行git push或git pull,它会知道从哪个分支推/拉

为了添加远程回购,我使用这些命令

首先,使用git remote -v检查远程存储库 如果你看不到upstream,那么使用git remote add upstream <URL> 使用git remote -v再次检查远程存储库

通过使用上面相同的命令,可以有多个远程到本地存储库。

只需更改上游名称git远程添加name <URL>