【发布时间】:2013-08-04 14:42:12
【问题描述】:
git --set-upstream 做什么?
我试图通过阅读git manual 来理解它,但我不太明白。
【问题讨论】:
-
该问题没有说明完整的 git 命令。只能推断是和
git push --set-upstream这个命令有关。
标签: git push git-push git-remote upstream-branch
git --set-upstream 做什么?
我试图通过阅读git manual 来理解它,但我不太明白。
【问题讨论】:
git push --set-upstream这个命令有关。
标签: git push git-push git-remote upstream-branch
--set-upstream 不仅仅是git branch -u 或git push -u。
您还有git fetch --set-upstream 和git pull --set-upstream。
如果远程成功获取,添加上游(跟踪)引用,由无参数
git pull和其他命令使用
它将设置:
branch.<name>.remotebranch.<name>.merge这将使git push 知道要推送到哪里,以及到要推送到哪个远程分支。
但是:“git fetch --set-upstream”(man) 没有检查当前分支是否存在,导致在 segfault 上运行时 segfault strong>detached HEAD,已在 Git 2.35(2022 年第一季度)中更正。
参见Ævar Arnfjörð Bjarmason (avar) 的commit 17baeaf(2021 年 12 月 7 日)。
(由 Junio C Hamano -- gitster -- 合并到 commit dcaf17c,2021 年 12 月 22 日)
pull, fetch: 修复 --set-upstream 选项中的段错误报告人:Clemens Fruhwirth
报告人:Jan Pokorný
签字人:Ævar Arnfjörð Bjarmason
修复24bc1a1 中添加的
--set-upstream选项中的段错误(拉取,2019-08-19,Git v2.24.0-rc0 -- merge 列在batch #2 中)(拉取,获取:@987654336 @(man)--set-upstream选项,2019-08-19) 在 v2.24.0 中添加。由于8efb889 ("
branch: segfault fix and validation", 2013-02-23,Git v1.8.3-rc0 -- merge 在batch #2 中列出),这反过来又修复了我现在在“git branch --set-upstream-to”(@987654344 @),见6183d82(“branch:介绍--set-upstream-to”,2012-08-20,Git v1.8.0-rc0 -- merge列在batch #5中)。我在这里添加的警告消息是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
我认为在这里简单地使用
die()会更有意义,但是在24bc1a1 中添加的其他--set-upstream检查中,我们会发出警告()来代替。
为了保持一致性,让我们在这里做同样的事情。之前提交了一种修复此in this thread 的替代方法,因为该补丁破坏了this thread 原始报告的线程。
在创作这个版本之前我没有注意到它。
我认为这里的警告信息越详细越好,我们也应该对此行为进行测试。从最近合并的7d0daf3 ("Merge branch 'en/pull-conflicting-options'" , 2021-08-30, Git v2.34.0-rc0 -- merge 列于batch #2)。
【讨论】:
为了添加远程仓库,我使用这些命令
git remote -v 检查您的远程存储库
git remote add upstream <URL>
git remote -v 再次检查您的远程存储库
【讨论】:
为避免混淆,
git的最新版本弃用了这个有点模棱两可的--set-upstream选项
支持更详细的--set-upstream-to选项
具有相同的语法和行为。
[Reference]
git branch --set-upstream-to <remote-branch>
为当前本地分支设置默认远程分支。
任何未来的git pull 命令(当前本地分支已签出),
将尝试将来自 <remote-branch> 的提交引入当前本地分支。
避免显式键入--set-upstream / --set-upstream-to 的一种方法是使用其速记标志-u,如下所示:
git push -u origin local-branch
这会自动为将来的任何推/拉尝试设置上游关联。
欲了解更多详情,请查看此detailed explanation about upstream branches and tracking。
【讨论】:
git push -u origin local-branchorigin代表什么?在任何情况下我会在-u 之后输入除origin 以外的任何内容?
origin 指的是用于克隆的远程 git 存储库。可以有multiple remote git repositories。在这种情况下,origin 可以替换为希望引用的所需遥控器的正确名称。
git remote -v来找到你的遥控器,默认的通常是origin
我假设您的问题是:
git push --set-upstream <repository> <branchname>是做什么的?
如您所见,我假设有问题的 git 命令是 git push。我希望这就是你的意思。为了简化答案,我进一步指定您所在的本地分支
话虽如此,这是我的答案:
除了没有--set-upstream 选项的git push 所做的操作之外,this option 使git push set 至少两个configuration variables:
这就是这个命令所做的一切。它将本地分支的上游信息(即远程存储库和分支)存储在配置变量中。
上游信息存储在本地分支名称下。如果您的本地分支称为main,则相应的配置变量为branch.main.remote 和branch.main.merge。根据上游信息的存储方式,本地分支最多只能有一组上游信息。
您可以使用git config --get-regexp ^branch\. 查询是否设置了这些配置变量。这将输出所有以“branch”开头的变量。
如果您没有在命令行。也就是说,当这些配置变量设置好后,你只需发出git push,git 就会(使用这些变量)知道要使用的远程存储库和上游分支。
建议进一步阅读:
但要注意 git 怪癖:
如果
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 测试的所有命令。
【讨论】:
git branch --set-upstream <<origin/branch>> 正式不再支持,由git branch --set-upstream-to <<origin/branch>> 取代
【讨论】:
当您推送到远程并使用--set-upstream 标志时,git 会将您推送到的分支设置为您正在推送的分支的远程跟踪分支。
添加一个远程跟踪分支意味着 git 知道当你将来 git fetch、git pull 或 git push 时你想做什么。它假定您希望保持本地分支和它正在跟踪的远程分支同步,并采取适当的措施来实现这一点。
您可以使用git branch --set-upstream-to 或git checkout --track 实现相同的目标。有关更多信息,请参阅tracking branches 上的 git 帮助页面。
【讨论】: