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
这将自动设置上游关联,以便于未来的推送/拉取尝试。
如需更多详细信息,请查看有关上游分支和跟踪的详细说明。
git push -u origin local-branch
中,origin
代表仓库的名称。除非您有多个远程仓库,否则通常都是使用 origin
。在某些情况下,您可能会使用不同的名称替换 origin
,例如如果您有另一个远程仓库,您可以使用该仓库的名称。但通常情况下,origin
是默认选项并且是最常用的。 - John Henckelorigin
指的是用于克隆的远程 git 存储库。可以存在多个远程 git 存储库。在这种情况下,可以将 origin
替换为所需远程存储库的正确名称以进行引用。 - TheCodeArtistgit remote -v
命令查找您的远程仓库,通常默认的是 origin
。 - xploreraj当你向远程仓库推送并使用 --set-upstream
标记时,git 会将你要推送的分支设置为你正在推送的分支的远程跟踪分支。
添加远程跟踪分支意味着 git 知道了你未来在执行 git fetch
、git pull
或者 git push
时想要做什么。它会自动假设你想把本地分支与跟踪的远程分支同步,并采取适当的措施来实现这一点。
你也可以通过 git branch --set-upstream-to
或者 git checkout --track
来实现相同的功能。更多信息请参考 git 帮助页面上关于跟踪分支的部分。
git branch --set-upstream <<origin/branch>>
已经不再官方支持,现在已被 git branch --set-upstream-to <<origin/branch>>
替代。
--set-upstream
的作用是将本地分支映射到远程分支,这样你只需要使用 git push
或 git pull
命令,Git 就会知道从哪个分支进行推送或拉取。
以下是添加远程库的命令:
git remote -v
命令检查远程库。git remote add upstream <URL>
命令添加。git remote -v
命令检查远程库。通过以上相同的命令,可以将多个远程库关联到一个本地仓库。
只需将 upstream 改为其他名称即可: git remote add NAME <URL>
。
如您所见,我假设这个问题中的git命令是
git push --set-upstream <repository> <branchname>
命令是做什么用的?
git push
。我希望这就是您的意思。为了简化回答,我进一步指定您所在的本地分支<branchname>与您要推送到的上游仓库<repository>上的远程分支具有相同的名称。最后,我假设使用了常见的git配置。--set-upstream
的git push
所执行的操作外,该选项至少会使git push
设置两个配置变量:
这就是该命令所做的全部内容。它将本地分支的上游信息(即远程仓库和分支)存储在配置变量中。
上游信息存储在本地分支名称下。如果您的本地分支名为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 git@gitlab.example.com:namespace/myproject.git master
git push
不会在.git/refs/remotes/<repository>
中创建对远程分支头的引用。
只有当上游仓库使用以下命令设置了名称时才会创建:
"git remote add <repository> <URL>
--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)没有检查是否有当前分支,在一个detached HEAD上运行时会导致段错误(segfault),在Git 2.35(2022年第一季度)中已得到纠正。
请查看 提交记录 17baeaf(2021年12月7日),作者为Ævar Arnfjörð Bjarmason (avar
)。
(于2021年12月22日由Junio C Hamano -- gitster
--合并至提交记录 dcaf17c)
拉取,获取
:修复--set-upstream选项中的段错误报告人:Clemens Fruhwirth
报告人:Jan Pokorný
签名作者:Ævar Arnfjörð Bjarmason
--set-upstream
选项中的段错误(拉取,2019年8月19日,Git v2.24.0-rc0 -- merge 列在 batch #2 中)(拉取,获取:add
(man)--set-upstream
选项 ,2019年8月19日)添加在v2.24.0中。
由于 8efb889(“分支
:segfault 修复和验证”,2013年2月23日,Git v1.8.3-rc0 -- merge 列在 batch #2 中)修复了我正在修复的 "git branch --set-upstream-to
"(man) 中相同类型的段错误,因此在那里添加的代码与我们为 "git branch
"(man) 自身进行的检查不同。参见 6183d82("branch
:introduce --set-upstream-to
",2012年8月20日,Git v1.8.0-rc0 -- merge 列在 batch #5 中)。
我在此添加的警告消息是 "git branch
" 中添加的错误和 install_branch_config()
本身发出的错误输出的综合,即:
它从名称中修剪了“refs/heads/
”,并说“在远程上的分支X
”,而不是“在远程上的refs/heads/X 分支
”。
新警告:
could not set upstream of HEAD to 'X' from 'X'
when it does not point to any branch
die()
更有意义,但在24bc1a1中添加了其他--set-upstream
检查时,我们改为发出一个warning()。--no-rebase
选项才能 "git pull
"(man) (最近合并的7d0daf3需要-“Merge branch'en/pull-conflicting-options'”,2021年8月30日,Git v2.34.0-rc0 -- merge listed in batch #2)。
git push --set-upstream
命令的。 - Daniel K.