在Git中,origin/master和origin master之间有什么区别?

我知道,起源是远程存储库的术语,而是那里的分支。

我故意在这里省略了“上下文”,我希望答案不应该取决于上下文。所以在git命令行中,来源/主起源的主人之间的区别是什么。是否有一种明确的方法来理解什么时候使用来源/主,什么时候应该使用起源的主人?

265565 次浏览

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

origin master是远程origin上的分支master

所以我们有这些:

  • origin/master(指向远程分支的表示或指针)
  • master - (实际的分支)
  • & lt; Your_local_branch > (实际的分支)
  • & lt; Your_local_branch2 > (实际的分支)
  • & lt; 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

origin/master是远程的master分支

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

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

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

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

两个分支:

  • main是一个本地分支
  • origin/main是一个远程跟踪分支(它是名为“main”的分支的本地副本;在遥控器上命名为“起源”;)

一个远程:

  • origin是一个遥控器

源端/主端是否远程?

origin/main分支是本地的!任何时候你从origin获取,origin/main都会被更新。然而,origin/main可能会过时,甚至有可能mainorigin上不再存在。你可以使用--prune选项(-p)和git fetch来自动删除远程跟踪分支,如果他们跟踪的分支被删除了。

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

例子:拉进两步

因为origin/main是一个分支,你可以合并它。这里有两步拉:

第一步,从远程origin中获取mainorigin上的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不同的分支,并且你需要切换到不同的分支来处理不同的更改。

origin是远程git url的名称。

.

.
bangalore => bangalore.example.com:project.git


boston => boston.example.com:project.git

对于origin/master(例如bangalore/master)来说,它是指向“master”在班加罗尔站点上提交的指针。 你可以在你的克隆体身上看到。< / p >

可能因为你做了“取回”或“拉取”,远程班加罗尔已经进步了。

鉴于你可以在拔掉网线的同时切换到origin/master(尽管处于分离状态),它必须是originmaster分支的本地表示。

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

git checkout master


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

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

在讨论区别之前,我们需要了解Git中起源的含义。

起源只是远程存储库的原始名称。原点只是一个位置而已。在下面的例子中,存储库URL是起源或代码所在位置的真实源。

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

现在,这个来源或真相的来源可以有分支,包括master或development或你命名的。

现在把原点放在上下文中,我们可以很容易地理解下面这些东西的意思。

  1. 起源的主人:我是驻留在远程存储库(origin)上的主分支。

如果我输入Git拉源主会发生什么?

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

现在我想我的变化合并到我的本地主分支我怎么能做到这一点?

Git合并origin/master

这将更新我的本地主分支与我的变化。使用origin/master的原因只是命名约定,你可以将本地主分支命名为origin/master或abcd。因此,你可以将本地分支命名为master而不是origin/master, git的命令将是Git合并主机

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

Git push origin master

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