git--set-upstream
是做什么的?
我试图通过阅读git 手册来理解它,但我不太明白。
为避免混淆,
最近的版本git
弃用了这个有点模棱两可的--set-upstream
选项,转而 使用具有相同语法和行为
的更详细的--set-upstream-to
选项。 [参考]
git branch --set-upstream-to <remote-branch>
为当前本地分支设置默认远程分支。
任何未来git pull
的命令(当前本地分支已签出)
都将尝试将提交从<remote-branch>
当前本地分支引入。
避免显式键入--set-upstream
/的一种方法--set-upstream-to
是使用其速记标志-u
,如下所示:
git push -u origin local-branch
这会自动为任何未来的推/拉尝试设置上游关联。
有关更多详细信息,请查看有关上游分支和跟踪的详细说明。
当您推送到远程并使用--set-upstream
标志 git 将您推送到的分支设置为您正在推送的分支的远程跟踪分支。
git fetch
添加远程跟踪分支意味着 git 知道您何时或将来要做什么git pull
。git push
它假设您希望保持本地分支和它正在跟踪的远程分支同步,并采取适当的措施来实现这一点。
git branch --set-upstream-to
您可以使用or实现相同的目的git checkout --track
。有关更多信息,请参阅有关跟踪分支的 git 帮助页面。
git branch --set-upstream <<origin/branch>>
正式不再支持,取而代之的是git branch --set-upstream-to <<origin/branch>>
--set-upstream
用于将本地分支映射到远程分支,这样您就可以执行 git push 或 git pull 并且它会知道从哪个分支推送/拉取
为了添加远程仓库,我使用这些命令
git remote -v
git remote add upstream <URL>
git remote -v
一个人可以有多个远程到他们的本地存储库,并且可以使用上面相同的命令添加它。
只需更改上游名称git remote add NAME <URL>
我假设你的问题是:
做什么
git push --set-upstream <repository> <branchname>
?
如您所见,我假设有问题的 git 命令是git push
. 我希望这就是你的意思。为了简化答案,我进一步指定您所在的本地分支 <branchname> 与您推送到的上游存储库 <repository> 上的远程分支具有相同的名称。最后,我假设一个通用的 git 配置。
话虽如此,这就是我的回答:
除了git push
没有该选项的 a--set-upstream
所做的操作之外,此选项还git push
设置了至少两个配置变量:
这就是这个命令所做的一切。它将本地分支的上游信息(即远程存储库和分支)存储在配置变量中。
上游信息存储在本地分支名称下。如果您的本地分支被调用main
,则相应的配置变量是branch.main.remote
和branch.main.merge
。根据上游信息的存储方式,本地分支最多只能有一组上游信息。
您可以使用 查询这些配置变量中的任何一个是否已设置git config --get-regexp ^branch\.
。这将输出以“分支”开头的所有变量。
当这些配置变量被使用,例如,git fetch
或者git pull
如果git push
你没有在命令行上明确指定它们来确定本地分支的上游存储库和远程分支时,就会发生魔法。也就是说,当设置了这些配置变量时,您只需发出git push
,git 就会(使用这些变量)知道要使用的远程存储库和上游分支。
建议进一步阅读:
但要注意 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 命令中都可用。
建议进一步阅读:
仅供参考:在 Windows 上使用 git V2.32 测试的所有命令。
--set-upstream
不只是关于git branch -u
或git push -u
。
你也有git fetch --set-upstream
和git pull --set-upstream
。
如果远程成功获取,则添加上游(跟踪)引用,由无参数
git pull
和其他命令使用
它将设置:
branch.<name>.remote
branch.<name>.merge
这将允许git push
知道推送到哪里,以及推送到哪个远程分支。
但是: " git fetch --set-upstream
" ( man )没有检查是否存在当前分支,导致在分离的 HEAD上运行时出现段错误,这已通过 Git 2.35 (Q1 2022) 更正。
请参阅Ævar Arnfjörð Bjarmason ( ) 的提交 17baeaf(2021 年 12 月 7 日)。(由Junio C Hamano 合并 -- --在dcaf17c 提交中,2021 年 12 月 22 日)avar
gitster
pull, fetch
: 修复 --set-upstream 选项中的段错误报告人:Clemens Fruhwirth
报告人:Jan Pokorný
签字人:Ævar Arnfjörð Bjarmason
修复了在24bc1a1
--set-upstream
中添加的选项中的段错误(pull,2019-08-19,Git v2.24.0-rc0 -批次 #2中列出的合并)(pull,fetch: ( man ) option,2019-08-19)添加在 v2.24.0 中。add
--set-upstream
自8efb889 (" : segfault fix and validation", 2013-02-23, Git v1.8.3-rc0 --合并在第 2 批中列出以来,添加的代码并没有做我们对 "
git branch
" ( man )本身所做的相同检查),这反过来又修复了我现在在“ ” (man)中修复的相同类型的段错误,请参阅6183d82(“ :介绍”,2012-08-20,Git v1.8.0-rc0 -批处理中列出的合并# 5)。branch
git branch --set-upstream-to
branch
--set-upstream-to
我在此处添加的警告消息是8efb889
git branch
中为“ ”添加的错误的合并,并且错误输出本身会发出,即它从名称 中修剪“ ”并显示“ ”,而不是“ ”。install_branch_config()
refs/heads/
branch X on remote
branch refs/heads/X on remote
新警告:
could not set upstream of HEAD to 'X' from 'X'
when it does not point to any branch
我认为简单地在这里更有意义,但在24bc1a1中添加
die()
的其他检查中,我们发出了一个 warning() 代替。 为了保持一致性,让我们在这里做同样的事情。--set-upstream
由于该补丁破坏了该线程中原始报告的线程,因此在此线程中有一个较早提交的替代方法来解决此问题。 在创作这个版本之前我没有注意到它。 我认为这里的警告信息越详细越好,我们也应该对此行为进行测试。
从最近合并的 7d0daf3 开始,需要“ ”
--no-rebase
( man )选项git pull
(“ Merge branch 'en/pull-conflicting-options'”,2021-08-30,Git v2.34.0-rc0 --批处理中列出的合并# 2 )。