【问题标题】:In Git, what is the difference between origin/master vs origin master?在 Git 中,origin/master 与 origin master 有什么区别?
【发布时间】:2013-08-10 19:46:40
【问题描述】:

我知道,origin 是远程存储库的术语,ma​​ster 是那里的分支。

我在这里故意省略了“上下文”,我希望答案不应该取决于上下文。那么在git命令行中,origin/masterorigin master有什么区别。是否有明确的方法来了解何时使用 origin/master 以及何时应该使用 origin master

【问题讨论】:

标签: git


【解决方案1】:

origin/master 是一个实体(因为它不是物理分支)表示远程origin 上的master 分支的状态。

origin master是远程origin上的分支master

所以我们有这些:

  • origin/master(表示或指向远程分支的指针)
  • master -(实际分支
  • 实际分支
  • 实际分支
  • 实际分支

示例(在本地分支master):

git fetch # get current state of remote repository
git merge origin/master # merge state of remote master branch into local branch
git push origin master # push local branch master to remote branch master

【讨论】:

  • 这是不正确的......origin master 不是一个分支......它实际上是两个独立的东西,“origin”(远程)和“master”(本地分支)。
  • 远程master分支的状态,是本地存在的吧?
  • 是的,这是不正确的 origin/master 是远程主分支。本地分支只是主分支。
【解决方案2】:

origin/master 是远程master 分支

通常在执行git fetch origin 以从服务器获取所有更改之后,您将执行git rebase origin/master 来重新设置您的更改并将分支移动到最新的索引。这里,origin/master 指的是远程分支,因为您基本上是在告诉 GIT 将 origin/master 分支重新定位到当前分支。

例如,您可以在推送时使用origin mastergit push origin master 只是告诉 GIT 将本地 master 分支推送到远程存储库。

【讨论】:

  • 这似乎实际上最接近 OP 所寻找的 - origin master 告诉软件对“原始”存储库中的“主”上的任何内容执行某些操作。origin/master 是引用 f3a4d5HEAD 的方式相同。
【解决方案3】:

(注意:最初发布此问题时,“master”是 Git 中分支的默认名称。由于“main”现在是默认名称,因此此答案已更新为使用“ main”,希望这对 Git 新手来说更自然。)

这里实际上有三件事:origin main 是两个独立的东西,origin/main 是一件事。总共三件事。

两个分支:

  • main 是本地分支
  • origin/main 是一个远程跟踪分支(它是远程“origin”上名为“main”的分支的本地副本

一个遥控器:

  • origin 是一个遥控器

origin/main 是远程的吗?

origin/main 分支是本地的!任何时候您从origin 获取,origin/main 都会得到更新。但是,origin/main 可能已过时,main 甚至可能不再存在于 origin 上。如果远程跟踪分支被删除,您可以使用--prune 选项 (-p) 和 git fetch 自动删除远程跟踪分支。

origin/main 分支不是origin 上的main 分支的引用或指针。这是一个本地副本。

示例:分两步拉

由于origin/main是一个分支,你可以合并它。这里有两个步骤:

第一步,从远程origin获取main。将获取origin 上的main 分支,并将本地副本命名为origin/main

git fetch origin main

然后将origin/main 合并为main

git merge origin/main

然后您可以将main 中的新更改推送回origin

git push origin main

更多示例

您可以按名称获取多个分支...

git fetch origin main stable oldstable

你可以合并多个分支...

git merge origin/main hotfix-2275 hotfix-2276 hotfix-2290

你能用其他名字吗?

如果我不想,我的本地分支不必命名为 main。它不必与远程分支同名!假设我想将我的分支命名为 alice,但仍然让它跟踪 origin/main

我可以很容易地做到这一点:

git checkout -b alice --track origin/main

可以看到本地分支命名为alice,而远程分支命名为main,本地副本为origin/main。这完全没问题!这可能有点令人困惑,但也许您已经有一个名为main不同 分支,您需要切换到不同的分支来处理不同的更改。

【讨论】:

  • 第一部分真的很有用。我无法连接更多示例,尤其是合并示例。感谢您的回答。
  • ...因为当我“git checkout origin/master”时,我进入了一个分离的头部状态。如果我确实有远程主分支的本地副本,为什么我不能继续工作并提交并添加到它?或者也许我可以,但为什么它是分离的?
  • 您只能提交到本地分支,因此当您签出远程分支时,您会得到“分离头”。当然,它是远程分支的本地副本,但它仍然是远程分支。根本没有规定“master”与“origin/master”相关,它们可能完全不同。
  • @Jwan622 "origin is a remote"... "origin" 只是一个名称,您可以为遥控器选择任何名称,但 "origin" 是默认名称。远程是其他地方的存储库。它可能是 GitHub,也可能是另一台计算机,甚至可能位于同一台计算机上的其他位置。
  • @Jwan622:“git remote add”是一个创建新远程的命令。 “origin”是遥控器添加的名称。由于“起源”只是一个名称,因此您可以根据需要选择不同的名称。例如,git remote add home my-server:projects/my-project 添加一个名为“home”的遥控器。您不妨参考文档:git-scm.com/docs/git-remote
【解决方案4】:

origin 是远程 git url 的名称。 下面可以有更多的遥控器示例。

班加罗尔 => 班加罗尔.example.com:project.git 波士顿 => boston.example.com:project.git

就 origin/master(例如 bangalore/master)而言,它是指向 bangalore 网站上的“master”提交的指针。 你在你的克隆中看到它。

自从您完成“获取”或“拉取”后,远程班加罗尔可能已经前进了

【讨论】:

    【解决方案5】:

    鉴于您可以在拔下网络电缆的情况下切换到origin/master(尽管处于分离状态),因此它必须是master 分支origin 的本地表示。

    【讨论】:

    • 在上面和下面的答案中,人们说 origin/master 是远程 master 分支。您的回答与他们所说的有些矛盾。请解释一下。
    【解决方案6】:

    我建议将 develop 和 master 与该命令合并

    git checkout master
    
    git merge --commit --no-ff --no-edit develop
    

    欲了解更多信息,请查看https://git-scm.com/docs/git-merge

    【讨论】:

      【解决方案7】:

      在去区别之前我们需要了解一下origin在Git中是什么意思。

      origin 只不过是远程存储库的原始名称。起源只是一个位置。在下面的示例中,存储库 URL 是 origin 或代码所在位置的真实来源。

      git 克隆 https://github.com/mycode/git-awsomecode.git

      现在这个来源或你的存储库的真实来源可以有分支,包括 master 或 development 或者你命名它。

      现在在上下文中我们可以很容易地理解下面的意思。

      1. origin master:我是一个master分支,驻留在远程仓库中,称为(origin)。

      那么如果我输入 git pull origin master 会发生什么?

      这将更新我的本地 master 分支(在我的本地机器上)将更新远程 master 分支(即 origin master)上的所有可用更改。

      现在我希望我的更改与我的本地主分支合并,我该如何实现?

      git 合并原点/master

      这将使用我的更改更新我的本地主分支。拥有 origin/master 的原因只是命名约定,您可以将本地 master 分支命名为 origin/master 或 abcd。因此,您可以将本地分支而不是 origin/master 命名为 master,而 git 的命令将是 git merge master

      如何使用所有本地更改更新我的远程主分支?

      git push origin master

      这个命令是说将我所有的本地更改发送到原点(即存储库 (https://github.com/mycode/git-awsomecode.git))到主分支。

      【讨论】:

      • git pull origin master 不会更新您所在的本地分支,可能不是“本地主分支”?
      猜你喜欢
      • 2012-09-09
      • 2017-10-20
      • 2011-02-22
      • 1970-01-01
      • 2013-09-25
      • 2021-04-13
      • 2015-07-03
      • 1970-01-01
      相关资源
      最近更新 更多