2014-08-30 51 views
2

我是新来的混帐,我一直在关注这个tutorial“远程”本地分支上的重新分配大师如何工作?

我认为我理解它的大部分内容,直到我到了远程存储库。关于远程仓库的唯一概念是我理解的是git fetch和git remote。根据该教程,git fetch通过git remote的add选项从指定的URL获取远程存储库。它将存储库下载到“远程”分支。如果我理解正确,它不是远程存储库中的分支,而是从远程存储库下载的分支。它不是我的本地存储库的一部分,它仍然在那里合并/重新装入它(我的本地存储库)。也许我错了,我在这里错过了一些东西,请随时纠正我。

现在,我觉得我根本不明白的是,git如何设法将“远程”存储库重新绑定到本地存储库中。

我明白,当我重新绑定一个分支时,它会将该分支中的提交以不同的提交为基础进行分支。我仍然需要将分支合并到我的主分支中。我做什么时会发生什么?

git checkout master 
git fetch origin 
git rebase origin/master 

这不会将我的本地主分支重定位到远程主分支吗?我一直在想这个picture

而不是功能我会有我的本地主分支,而不是主,我会有远程原点/主分支。除了师父并没有真正分出出身/主人。

这不会删除我的本地分支主吗?这不会将我所有的工作都转移到“远程”存储库吗?另外,在推送到真正的远程存储库之前,我不需要合并它们。

+1

你有其他的方法。 'git rebase origin/master'将你的提交放在'origin/master'之上。 – jcm 2014-08-30 02:56:37

+0

你的意思是说,它将origin/master复制到我的本地主分支中,然后添加新的提交? – MinusFour 2014-08-30 03:27:52

+0

就是这样的。您可能已经看到了它们,但是我发现[官方文档](ftp://www.kernel.org/pub/software/scm/git/docs/git-rebase.html)有帮助。 – jcm 2014-08-30 03:53:41

回答

6

这里的关键是,底垫,像git的最其他分支相关的项目,真正起作用关闭提交图形而不是分支名称。分支名称用于一个或两个目的:

  • 定位犯下图内提交,
  • 仅在适用的:,使其指向正确的提交移动分公司

所以,如果你运行:

git checkout master 
git fetch origin 
git rebase origin/master 

的第一步让你“分支主”:它只是将masterHEAD (当然更新你的工作树)。

第二步从origin获取您还没有的任何提交。这些将进入您的存储库,增加提交,并更新origin/master以指向最新的提交。例如,你可能有过这样的fetch前:

  * - * <-- HEAD=master 
     /
..- o - o   <-- origin/master 

一旦fetch完成后,你的混帐博格增加了origin的生物技术的独特性,以自己的,你现在有:

  * - * <-- HEAD=master 
     /
..- o - o - o  <-- origin/master 

在这一点上,你可以git rebase你的两个提交(填写* s)到新的origin/master的小费。这实际上是通过副本提交你的提交:你得到两个新的,与旧的一样,但有不同的父母ID:他们链接了新的提示origin/master,而不是关闭旧的(pre- fetch)小费。制作副本后,git rebase会调整您的分支master以指向新的提示最多的提交。

(而且,在与博格主题保持一致,你原来提交的仍然在你的仓库。他们最终会被默认丢弃,一旦引用日志条目到期,30天)。


这里的例外只是分支名称的事情。例如,您可以使一个分支成为另一个分支的间接引用。但通常只有HEAD。或者,您可以重新命名一个分支,这与它指向的地方没有任何关系。

更确切地说,它将ref: refs/heads/master写入.git/HEAD。这就是“在分支上”所需要的:分支的全名在该文件中加上“ref:(space)”前缀。

+0

+1,部分用于注意分支和提交之间的区别,部分用于漂亮的ASCII提交图,主要用于git同化 – 2014-08-30 02:45:12

+0

谢谢您的解释!你能否详细说明:“在完成副本之后,git rebase会调整你的分支主控以指向新的提示最多的提交。”转型后,本地分支机构没有任何东西?提交不是提交到新提取的origin/master的提示吗? – MinusFour 2014-08-30 03:11:57

+0

@MinusFour:你可能会看看我的一些其他答案,例如,http://stackoverflow.com/a/25222144/1256452,在那里我显示旧的“已放弃”提交仍在回购中,并且只要你可以找到一种方法来命名它们。另外,在我谈论分支如何“自动前进”时寻找答案,例如http://stackoverflow.com/a/21055585/1256452 ...在这种情况下,您不是“在”origin/master“ (你不能),所以它*不*移动。 – torek 2014-08-30 03:27:32

相关问题