375

I know, origin is a term for the remote repository and master is the branch there.

I am purposely omitting the "context" here and I am hoping that the answer should not depend upon the context. So in git command lines, what is the difference between origin/master and origin master. Is there a non-ambiguous way to understand when to use origin/master and when I should use origin master?

4

7 回答 7

480

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

这里实际上有三件事:origin main是两件不同的事情,并且origin/main是一件事。一共三件事。

两个分支:

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

一个遥控器:

  • origin是一个遥控器

起源/主要远程?

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

origin/main分支不是main指向分支的引用或指针origin。它是本地副本。

示例:分两步拉

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

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

git fetch origin main

然后你合并origin/mainmain.

git merge origin/main

然后您可以将您的新更改推mainorigin

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分支,您需要切换到不同的分支来处理不同的更改。

于 2013-08-08T22:46:35.277 回答
24

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

origin mastermaster是遥控器上的分支origin

所以我们有这些:

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

示例(在本地分支中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
于 2013-08-08T22:22:17.603 回答
11

origin/master是远程master分支

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

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

于 2013-08-08T22:27:19.443 回答
4

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

班加罗尔 => 班加罗尔.example.com:project.git

波士顿 => boston.example.com:project.git

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

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

于 2013-08-09T02:35:53.190 回答
4

鉴于您可以origin/master在拔下网络电缆时切换到(尽管处于分离状态),它必须masterorigin.

于 2017-10-17T10:54:19.230 回答
2

在讨论差异之前,我们需要了解Git中origin的含义。

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

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

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

现在在上下文中我们可以很容易地理解以下事物的含义。

  1. origin master:我是一个主分支,位于称为(origin)的远程存储库上。

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

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

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

git合并原点/主

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

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

git push 起源大师

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

于 2021-06-08T03:58:19.027 回答
-1

我建议将开发和掌握与该命令合并

git checkout master

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

有关更多信息,请查看https://git-scm.com/docs/git-merge

于 2020-07-25T22:10:40.113 回答