git --set-upstream做什么?
--set-upstream
我试图通过阅读git手册来理解它,但我不太明白。
当你使用--set-upstream标记推送到一个远程对象时,git将你要推送的分支设置为你要推送的分支的远程跟踪分支。
添加远程跟踪分支意味着当你将来git fetch、git pull或git push时,git知道你想做什么。它假设您希望保持本地分支和它正在跟踪的远程分支同步,并执行适当的操作来实现这一目标。
git fetch
git pull
git push
你可以用git branch --set-upstream-to或git checkout --track来实现同样的事情。有关更多信息,请参阅跟踪分支上的git帮助页。
git branch --set-upstream-to
git checkout --track
为避免混淆, 最近版本的git弃用了这个有点模糊的--set-upstream选项 而支持更详细的--set-upstream-to选项 使用相同的语法和行为。 [参考] .
为避免混淆, 最近版本的git弃用了这个有点模糊的--set-upstream选项 而支持更详细的--set-upstream-to选项 使用相同的语法和行为。 [参考]
git
--set-upstream-to
git branch --set-upstream-to <remote-branch>
为当前本地分支设置默认远程分支。
任何未来的git pull命令(当前本地分支签出), . > 将尝试从<remote-branch>引入提交到当前本地分支
<remote-branch>
避免必须显式键入--set-upstream / --set-upstream-to的一种方法是使用其简写标志-u,如下所示:
-u
git push -u origin local-branch
自动设置未来任何推/拉尝试的上游关联。 有关更多详细信息,签出上游分支及跟踪详细说明 ..
git branch --set-upstream <<origin/branch>>不再被官方支持,被git branch --set-upstream-to <<origin/branch>>取代
git branch --set-upstream <<origin/branch>>
git branch --set-upstream-to <<origin/branch>>
我假设你的问题是:
git push --set-upstream <repository> <branchname>做什么?
git push --set-upstream <repository> <branchname>
如你所见,我假设git命令是git push。我希望你是这个意思。为了简化答案,我进一步指定本地分支<与上游存储库上的远程分支具有相同的名称<你正在努力实现的目标。最后,我假设一个常见的git配置。
话虽如此,这是我的回答:
除了没有--set-upstream选项的git push所做的操作外,这个选项使git push 集至少有两个配置变量:
这就是这个命令所做的一切。它在配置变量中为本地分支存储上游信息(即远程存储库和分支)。
上游信息存储在本地分支名称下。如果您的本地分支被称为main,则各自的配置变量为branch.main.remote和branch.main.merge。根据上游信息的存储方式,本地分支最多只能拥有一组上游信息。
main
branch.main.remote
branch.main.merge
您可以使用git config --get-regexp ^branch\.查询是否设置了这些配置变量。这将输出任何以"branch."开头的变量;
git config --get-regexp ^branch\.
当这些配置变量被诸如git fetch、git pull或git push使用时,如果你没有在命令行上显式地指定它们,它们就会为本地分支找出上游存储库和远程分支。也就是说,当这些配置变量设置好后,你可以发出git push, git就会知道(使用这些变量)要使用的远程存储库和上游分支。
建议进一步阅读:
但是要注意git的怪癖:
如果& lt; repository>是一个URL或文件路径,参见例如这个例子:
git push --set-upstream git@gitlab.example.com:namespace/myproject.git master
git push不会在.git/refs/remotes/<repository>中创建对远程分支头的引用
.git/refs/remotes/<repository>
仅当上游存储库已被指定名称时使用
git remote add <repository> <URL>
并且git push --set-upstream已经与此名称一起使用,所有git命令中都可以使用远程跟踪分支的全部功能。
git push --set-upstream
供参考:所有命令都是用Windows上的git V2.32测试的。
--set-upstream用于将本地的分支映射到远程的分支,这样你就可以执行git push或git pull,它会知道从哪个分支推/拉
为了添加远程回购,我使用这些命令
git remote -v
git remote add upstream <URL>
通过使用上面相同的命令,可以有多个远程到本地存储库。
只需更改上游名称git remote add NAME <URL>
git remote add NAME <URL>
--set-upstream不仅仅是关于git branch -u或git push -u。
git branch -u
git push -u
你还有git fetch --set-upstream和git pull --set-upstream。
git fetch --set-upstream
git pull --set-upstream
如果成功获取远程,添加upstream(跟踪)引用,由无参数git pull和其他命令使用
它将设置:
branch.<name>.remote
branch.<name>.merge
这将允许git push知道要推在哪里,以及来要推到哪个远程分支。
但是:"git fetch --set-upstream"(man)没有检查是否有当前分支,导致在detached HEAD上运行时出现段错误,这已在Git 2.35 (Q1 2022)中更正。
参见提交17 baeaf (07 Dec 2021) by Ævar Arnfjörð Bjarmason (avar)。 (由Junio C Hamano—gitster—在提交dcaf17c中合并,22 Dec 2021)
avar
gitster
pull, fetch:修复——set-upstream选项中的段错误 < p > 报道:Clemens Fruhwirth 报告作者:Jan Pokorný 署名:Ævar Arnfjörð Bjarmason
pull, fetch
修复v2.24.0中添加的--set-upstream选项(pull, 2019-08-19, Git v2.24.0-rc0——合并列在批# 2中)(pull, fetch: add(man) --set-upstream选项,2019-08-19)中的段错误。 这里添加的代码没有做与8 efb889以来我们对“__abc5”(man)本身所做的相同的检查(“branch:段错误修复和验证”,2013-02-23,Git v1.8.3-rc0—合并列在批# 2中),这又修复了我现在正在“__abc10”branch1中修复的相同类型的段错误,参见branch2(“branch:引入__abc4”,2012-08-20,Git v1.8.0-rc0—branch3列在branch4中)。 我在这里添加的警告消息是为“;git branch"8 efb889中的错误输出install_branch_config()本身发出,即 它修剪&;refs/heads/" . .
修复v2.24.0中添加的--set-upstream选项(pull, 2019-08-19, Git v2.24.0-rc0——合并列在批# 2中)(pull, fetch: add(man) --set-upstream选项,2019-08-19)中的段错误。
add
这里添加的代码没有做与8 efb889以来我们对“__abc5”(man)本身所做的相同的检查(“branch:段错误修复和验证”,2013-02-23,Git v1.8.3-rc0—合并列在批# 2中),这又修复了我现在正在“__abc10”branch1中修复的相同类型的段错误,参见branch2(“branch:引入__abc4”,2012-08-20,Git v1.8.0-rc0—branch3列在branch4中)。
branch
我在这里添加的警告消息是为“;git branch"8 efb889中的错误输出install_branch_config()本身发出,即 它修剪&;refs/heads/"
git branch
install_branch_config()
refs/heads/
新警告:
could not set upstream of HEAD to 'X' from 'X' when it does not point to any branch
我认为在这里简单地die()会更有意义,但在24 bc1a1中添加的其他--set-upstream检查中,我们发出了一个警告()。 为了保持一致性,让我们在这里做同样的事情 有一个早期提交的替代方法来修复这个在这篇文章中,由于补丁破坏线程与原始报告在这个线程。 在创作这个版本之前,我没有注意到它。 我认为这里更详细的警告信息更好,我们还应该对这种行为进行测试 在最近合并的7 d0daf3(“合并分支”en/pull-conflict -options”", 2021-08-30, Git v2.34.0-rc0—合并列在批# 2中)中,需要“git pull"(man)”的--no-rebase选项。
die()
在最近合并的7 d0daf3(“合并分支”en/pull-conflict -options”", 2021-08-30, Git v2.34.0-rc0—合并列在批# 2中)中,需要“git pull"(man)”的--no-rebase选项。
--no-rebase