我想知道是否有必要使用master,因为origin不就已经意味着远程repo上的master分支了吗?非常感谢你的帮助,你太棒了。
umuewwlo1#
你提问的前提是错误的:origin * 并不 * 表示特定的分支。更具体地说,在git push origin或git fetch origin(或任何类似的命令)中,单词origin出现在命令需要称为 remote 的地方,而不是命令需要分支名称的地方。一个 remote 是......嗯,它有多种用途,但 main 是一个URL的简称。假设URL是:
origin
git push origin
git fetch origin
https://github.com/someverylongusername/anotherverylongrepositoryname.git
哪个更容易输入,上面的,还是origin?Git让你使用origin来 * 平均 * https://...,而不必输入https://...。现在,如果运行:
https://...
git push
并省略 * origin * 和 * 分支名称,Git做了两个假设:11.我Git应该查找与 * 当前分支名称 * 关联的远程。1.我Git应该使用 * 当前分支名称 * 作为分支名称。请注意,这两个分支都使用(因此需要)* 当前分支名称 *。当前分支名称是您现在 checkout 的分支名称,因为您运行了:
git switch foobranch
或:
git checkout barbranch
如果最近一次切换或 checkout 是master,那么 current分支name就是master,您可能已经准备好了。您可以运行git push或git push origin:包括origin的命令告诉Git所涉及的远程操作是origin,因此它可以跳过步骤1,但仍然执行这里的步骤2。现在,有几种情况下,你 * 不能 * 省略远程和/或分支名称。而且,因为远程名称 * 总是在前面 *,如果你 * 必须 * 提供分支名称,你 * 也必须 * 提供远程名称。例如,如果你当前在你的feature/new上,但你想 * 推送 * 你的feature/old,你有两个选择:
master
feature/new
feature/old
git push origin feature/old
这一切让人非常困惑的是,当您有一个 * 遥控器 * 时,您有 * 远程跟踪名称 *。2也就是说,如果您有一个名为origin的遥控器,您可能 * 还 * 有名称origin/master或origin/main,加上origin/feature/new等等。这些名称都以origin/开头,这可以帮助你记住,这些是你自己的Git仓库的 * 副本 *,是你的Git软件在GitHub Git仓库中看到的名字,当你的Git调用GitHub软件并说要查看GitHub仓库时。(Does这一切都有意义吗?你可能要通读几遍。克隆人如此相似,就像在一个聚会上,每个人都叫布鲁斯。布鲁斯让布鲁斯告诉布鲁斯,布鲁斯在找布鲁斯。这很清楚,很明显,对吗?那是五个不同的人。)现在,有一个地方你可以使用origin,Git在这里寻找一个 * 分支或类似的名称 *,在 * 这个 * 例子中,origin意味着origin/HEAD,而origin/HEAD是Git所称的 * 符号引用 *。1这两个假设只是Git 2.0以来的默认设置,但Git 1.x已经有十多年的历史了,只有少数系统还在使用它。但你可以 * 配置 * Git以旧的方式运行。这里还值得一提的是,当push.default设置为Git 2.0以来的simple时,没有参数的git push这只在当前分支有一个 upstream 集合的情况下才有效。2Git文档正式称呼这些 * 远程跟踪分支名称 *。我喜欢省略 branch 这个词,因为它们显然 * 不是 * 实际的 * 分支 * 名称。它们只是 * 从 * 分支名称复制而来,就像在其他一些仓库中看到的那样。旧的Git文档对如何称呼它们也很奇怪,所以人们倾向于在这里使用很多混合的术语。
origin/master
origin/main
origin/feature/new
origin/
origin/HEAD
push.default
simple
1条答案
按热度按时间umuewwlo1#
你提问的前提是错误的:
origin
* 并不 * 表示特定的分支。更具体地说,在git push origin
或git fetch origin
(或任何类似的命令)中,单词origin
出现在命令需要称为 remote 的地方,而不是命令需要分支名称的地方。一个 remote 是......嗯,它有多种用途,但 main 是一个URL的简称。假设URL是:
哪个更容易输入,上面的,还是
origin
?Git让你使用origin
来 * 平均 *https://...
,而不必输入https://...
。现在,如果运行:
并省略 *
origin
* 和 * 分支名称,Git做了两个假设:11.我Git应该查找与 * 当前分支名称 * 关联的远程。
1.我Git应该使用 * 当前分支名称 * 作为分支名称。
请注意,这两个分支都使用(因此需要)* 当前分支名称 *。当前分支名称是您现在 checkout 的分支名称,因为您运行了:
或:
如果最近一次切换或 checkout 是
master
,那么 current分支name就是master
,您可能已经准备好了。您可以运行git push
或git push origin
:包括origin
的命令告诉Git所涉及的远程操作是origin
,因此它可以跳过步骤1,但仍然执行这里的步骤2。现在,有几种情况下,你 * 不能 * 省略远程和/或分支名称。而且,因为远程名称 * 总是在前面 *,如果你 * 必须 * 提供分支名称,你 * 也必须 * 提供远程名称。例如,如果你当前在你的
feature/new
上,但你想 * 推送 * 你的feature/old
,你有两个选择:feature/old
并运行不带参数的git push
,或者git push origin feature/old
-不能在这里省略origin
* 或 *feature/old
,即使实际上只需要指定feature/old
。这一切让人非常困惑的是,当您有一个 * 遥控器 * 时,您有 * 远程跟踪名称 *。2也就是说,如果您有一个名为
origin
的遥控器,您可能 * 还 * 有名称origin/master
或origin/main
,加上origin/feature/new
等等。这些名称都以origin/
开头,这可以帮助你记住,这些是你自己的Git仓库的 * 副本 *,是你的Git软件在GitHub Git仓库中看到的名字,当你的Git调用GitHub软件并说要查看GitHub仓库时。(Does这一切都有意义吗?你可能要通读几遍。克隆人如此相似,就像在一个聚会上,每个人都叫布鲁斯。布鲁斯让布鲁斯告诉布鲁斯,布鲁斯在找布鲁斯。这很清楚,很明显,对吗?那是五个不同的人。)
现在,有一个地方你可以使用
origin
,Git在这里寻找一个 * 分支或类似的名称 *,在 * 这个 * 例子中,origin
意味着origin/HEAD
,而origin/HEAD
是Git所称的 * 符号引用 *。1这两个假设只是Git 2.0以来的默认设置,但Git 1.x已经有十多年的历史了,只有少数系统还在使用它。但你可以 * 配置 * Git以旧的方式运行。这里还值得一提的是,当
push.default
设置为Git 2.0以来的simple
时,没有参数的git push
这只在当前分支有一个 upstream 集合的情况下才有效。2Git文档正式称呼这些 * 远程跟踪分支名称 *。我喜欢省略 branch 这个词,因为它们显然 * 不是 * 实际的 * 分支 * 名称。它们只是 * 从 * 分支名称复制而来,就像在其他一些仓库中看到的那样。旧的Git文档对如何称呼它们也很奇怪,所以人们倾向于在这里使用很多混合的术语。