与原始主人相比,git中的origin / master是什么?

时间:2013-10-11 15:14:21

标签: git

我想在这里{@ 3}}添加这个问题作为对@KevinBallard答案的评论,但我的评论很长。

所以我的问题是: 如果我在一个名为topic的分支中,是否可以只编写git rebase master而不是git rebase origin/master?或者真的有两个不同的本地master分支?一个是远程主分支的副本,一个是我自己的主分支?如果是这样的话:当我git pull都是本地主分支(一个叫做origin / master,另一个叫做master)时更新了?我很困惑......


或许它是这样的:origin/master是获取遥控器(复制,即覆盖)的真实远程主分支的本地副本,以及我的本地分支我master(或git merge origin/master)时,只会更改被叫git rebase …。也就是说:当我git pull origin master我的本地副本origin/mastermaster都被更新/合并时。当然假设我目前在主分支(即git checkout master是我的最后一次结账)。

4 个答案:

答案 0 :(得分:16)

  • master是您当地的分支。
  • origin master是名为master的远程存储库上的分支origin
  • origin/master是您origin master的本地副本。

当你git pull(我认为是邪恶的,还有其他人?)时,它会自动执行:

  • git fetch:它将origin master复制到origin/master。 (以及所有其他origin xxxorigin/xxx)。
  • git merge:它将origin/master合并到master

如果你想要改变主人,你必须这样做:

  • git fetch
  • git rebase origin / master

git help pull的摘录:

  

更确切地说, git pull 使用给定参数调用 git merge 运行 git fetch 以合并检索到的分支头进入当前分支

答案 1 :(得分:6)

<remote>/<branch>命名分支由git自动管理。

当你git pull时,git真正做的是

git fetch  
git merge origin/master

git fetch会自动更新origin/master本地分支,以指向origin远程master分支的最后一次提交。

是的,当你致电git pull时,两者都会更新。这是因为fetch更新origin/mastermerge更新master

  

如果我在一个名为topic的分支中,是否可以只编写git rebase master而不是git rebase origin / master?

你可以,但是主人不一定和origin/master一样 - 尽管他们大多数时候都是。所以这取决于你。

  

或者真的有两个不同的本地主分支吗?

是的,他们是两个不同的地方分支机构。他们通常只是指向相同的提交并共享一棵共同的树。

答案 2 :(得分:1)

当您在任何分支上执行git pull时,实际上会执行两项操作:git fetchgit [merge|rebase]

提取只是从远程仓库下载所有对象,默认情况下称为origin。在下载的对象中有refs - 它们是指向某些具体提交的指针。其中一些指针称为 branches 。如果远程仓库master中有origin分支,则它会在您的本地仓库中保存为origin/master - 只是为了不干扰您的同名本地分支。

获取后,git会查看您的配置,默认情况下,会尝试将当前分支合并或重新绑定到origin的分支上,并使用相同的名称。

在配置中,您可以指定在哪个远程分支上重新定位哪个本地分支 - 这样您就可以在没有其他参数的情况下运行git pull

答案 3 :(得分:1)

分支是只是对提交点的引用。标签也引用了提交点,但分支与标签不同,因为在某些情况下,git会自动更新分支引用以指向另一个提交。这些自动更新发生,比如说,当您创建新的提交点(git commit)时,当前HEAD 的分支会更新以引用新创建的提交点。

Git维护两种类型的分支:本地和远程。如上所述,本地分支得到更新。执行以下操作时会更新远程分支:git fetch

此外,您可以拥有 track 远程分支的本地分支,在这种情况下,git pull只是方便以下两个操作:git fetch; git merge origin/<tracked branch>

请注意,跟踪的本地分支和远程分支可以使用不同的名称。

因此,在您的情况下,当您说git merge master时,您正在合并本地主人。当你说git merge origin/master时,你正在合并远程分支(最终,它可以指向与本地主服务器相同的提交)

另请注意,确实合并了分支指向的提交点(您可以说git merge <some commit>),而不是分支本身。