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

我故意在这里省略了“上下文”,我希望答案不应该取决于上下文。那么在git命令行中,origin/master和origin master之间有什么区别呢?有没有一种明确的方法来理解什么时候使用原点/主节点,什么时候应该使用原点主节点?


当前回答

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

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

两个分支:

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

一个远程:

起源是遥远的

源端/主端是否远程?

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

原点/主分支不是对原点上的主分支的引用或指针。这是本地副本。

例子:拉进两步

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

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

git fetch origin main

然后将origin/main合并到main中。

git merge origin/main

然后你可以将你在main中的新更改推回原点:

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”在bangalore站点上提交的指针。 你可以在你的克隆体身上看到。

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

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

git checkout master

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

更多信息,请访问https://git-scm.com/docs/git-merge

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

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

两个分支:

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

一个远程:

起源是遥远的

源端/主端是否远程?

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

原点/主分支不是对原点上的主分支的引用或指针。这是本地副本。

例子:拉进两步

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

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

git fetch origin main

然后将origin/main合并到main中。

git merge origin/main

然后你可以将你在main中的新更改推回原点:

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 /master是远程主分支

通常在git获取origin从服务器获取所有更改后,你会做一个git rebase origin/master,重基你的更改,并将分支移动到最新的索引。这里,origin/master指的是远程分支,因为您基本上是在告诉GIT将origin/master分支重新基于当前分支。

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