Git 里面的 origin 理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git 里面的 origin 理解相关的知识,希望对你有一定的参考价值。

参考技术A origin 指的就是远程仓库,非本地仓库,在命令行命令中出现的 origin ,指操作是对远程仓库操作(如:git push/pull  origin master),如果字面上理解不上,看看回顾远程仓库的创建命令:

截图红色圈的命令 git remote add origin https://github.com/gznice/Test-2.git 创建远程仓库后,会让git记录远程仓库叫origin

当git push -u origin master,git 就知道是对远程仓库origin(https://github.com/gznice/Test-2.git)提交文件

Git,Github - origin/main vs origin/master [重复]

【中文标题】Git,Github - origin/main vs origin/master [重复]【英文标题】:Git, Github - origin/main vs origin/master [duplicate] 【发布时间】:2022-01-10 17:20:45 【问题描述】:

我正在努力理解 git 的基本概念。

我已经设置并克隆了一个远程存储库。我正在关注一个教程。 我的问题是我不明白两者之间的区别:

origin/main 和 origin/master

在教程中,当他在终端上键入 git status 时,它会显示 origin/master。 在我的终端上,它出现:

在主分支上

你的分支是最新的'origin/main'

我想了解为什么我得到的是 origin/main 而不是 origin/master。

【问题讨论】:

【参考方案1】:

当您克隆一些现有的存​​储库时,您会得到他们的所有提交1 并且没有他们的分支名称。但他们仍然有 分支名称。你的 Git 对这些所做的就是将它们变成你自己的远程跟踪名称2

origin/masterorigin/main 这样的远程跟踪名称 是您的Git 记住他们的 Git 的分支 名称之一的方式。 3 因此,如果他们有一个名为main 的分支,您将获得一个远程跟踪名称origin/main。如果他们有一个名为master 的分支,你会得到一个远程跟踪origin/master

一旦git clone 完成将他们的提交复制到您的存储库,并将他们的分支名称重命名为您的远程跟踪名称,您的 Git 然后在 您的 中创建一个 branch 名称> 存储库。你选择你的 Git 应该创建的分支名称,使用 -b 选项到 git clone:

git clone -b develop https://example.com/path/to/repo.git

例如。

如果您提供-b 选项,您的Git 会询问他们的Git他们推荐哪个名称。根据“他们”是谁,他们可能会推荐mastermain

这里有一点有点奇怪,那就是您的 Git 要求您选择的这个名称与 他们的 名称之一匹配。由于你的名字是你的,他们的名字是他们的,两者不需要匹配,4 对此没有真正的要求,但你的 Git 仍然需要它,可能是为了减少困惑。所以如果他们有only main,或only master,这就是你会得到的名字。

(单一)标准名字曾经是master。然后 GitHub 将 他们的 更改为 main,现在出现了混乱。如果您从头开始创建存储库(而不是克隆它),则可以选择所需的任何初始分支名称。5


1从技术上讲,您获得的提交少于他们的所有提交,但通常的情况是您获得所有提交。

2Git 调用这些 远程跟踪分支名称,但它们不是 分支 名称:git switch origin/main 给你一个错误,因为例如,git checkout origin/main 产生 Git 所谓的 分离的 HEAD。同时,branch 这个词在 Git 中被严重过度使用。所以从这句话中去掉branch这个词更有意义。这些名称只是您存储库中记住其他人的分支名称的名称;我们可以称它们为“深红色的名称”,但它们实际上会跟踪一些“远程”Git 的分支名称,因此 remote-tracking 是合理的。

3“您的 Git”是指“您的 Git 软件,在您的存储库中工作”。因此,“他们的 Git”是他们在存储库中运行的软件。

4也就是说,你可以调用你的分支之一dwayne,而他们调用他们的分支之一rapunzel,但你仍然可以在你的dwayne上进行提交匹配他们的rapunzel。只是......这样做令人困惑。当目标是在双方都有相同的提交时,人类似乎更喜欢在双方使用相同的名称。

这个想法可能出错:如果您有两个不同的遥控器,例如 bob 连接到 Bob 的 Git,alice 连接到 Alice 的,bob 和 @987654348 @ 有一个名为 cream 的分支,但一个指向乳制品,另一个指向 the 1960s band,您将无法在 您的 存储库中拥有一个名为 cream 的分支不知何故适用于这两者。所以 Git 并不需要它,除非在最初的git clone 步骤中。

5这需要一个相当最新的 Git 来使用 git init 命令来完成。对于较旧版本的 Git,您可以执行 git init 并以名称 master 开始,然后重命名分支。

【讨论】:

【参考方案2】:

master 是 Git(和 GitHub)主分支的旧名称。这个词被认为是冒犯性的,并引用了奴隶制的含义。大约一年前,Git 和 GitHub 将默认分支的名称改为更中性的 main。

部分项目已切换,部分项目保留旧名称master。从技术角度来看,它只是一个名称 - 您可以使用名为 mainmasterspongebob-squarepants 的默认分支创建一个项目。

【讨论】:

【参考方案3】:

过去被称为大师。现在人们使用 main 代替。基本一样。

【讨论】:

这基本上是 OP 应该需要的所有答案。

以上是关于Git 里面的 origin 理解的主要内容,如果未能解决你的问题,请参考以下文章

Git,Github - origin/main vs origin/master [重复]

HEAD、master、origin的git概念是啥?

git 简单理解

git clone

浅谈GIT之底层对象理解

线性代数的本质-01-向量究竟是什么?