如何在"遥控器"当地分公司工作?

时间:2014-08-30 01:45:24

标签: git git-rebase git-remote git-fetch

我是git的新手,我一直关注这个tutorial

我想我了解其中的大部分内容,直到我到达远程存储库。关于我理解的远程存储库的唯一概念是git fetch和git remote。根据该教程,git fetch通过git remote的add选项从指定的url获取远程存储库。它将存储库下载到"远程"科。如果我理解正确,它不是远程存储库中的分支,而是我从远程存储库下载的分支。它还不是我本地存储库的一部分,它仍然可以合并/重新组合到它(我的本地存储库)。也许我错了,我在这里遗漏了一些东西,请随时纠正我。

现在,我觉得我根本不了解的是git如何设法改变"遥控器"存储库到我的本地存储库。

我理解当我对一个分支进行rebase时,它会将该分支中的提交基于它最初分支的不同提交。我仍然需要将分支合并到我的主分支中。我做的时候会发生什么?

git checkout master 
git fetch origin
git rebase origin/master

这不会将我的本地主分支变成远程主分支吗?我一直在想这个picture

而不是功能我将拥有我的本地主分支而不是Master,我将拥有远程origin / master分支。除了Master没有真正分支出原点/主人。

这不会删除我当地的分店主人吗?我的所有工作都不会进入"遥控器"库?另外,在将其推送到真正的远程存储库之前,我不需要合并回来吗?

1 个答案:

答案 0 :(得分:6)

这里的关键是,与git中的大多数 1 其他与分支相关的项目一样,rebase确实可以使用提交图,而不是分支名称。分支名称用于一个或两个目的:

  • 在提交图中找到提交,
  • 仅在适用的情况下:移动分支以使其指向正确的提交

所以如果你跑:

git checkout master
git fetch origin
git rebase origin/master

第一步让你"在分支大师":它只是将master写入HEAD 2 (当然更新你的工作树)

第二步抓住你尚未提交的origin提交内容。这些进入您的存储库,增加提交图形,并更新origin/master以指向那里的最新提交。例如,您可能在fetch

之前使用了此功能
            * - *   <-- HEAD=master
          /
..- o - o           <-- origin/master

fetch完成后,您的git-borg已经为其自身添加了origin的生物和技术独特性,您现在拥有:

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

此时,您可以git rebase两次提交(填写*)到新origin/master的提示。这实际上是通过制作提交的副本来实现的:你得到两个新的,与旧的相同,但有不同的父ID:它们链接{{1}的新提示而不是关闭旧的(前origin/master)小费。制作副本后,fetch会调整您的分支git rebase以指向新的提示最多提交。

(并且,与Borg主题保持一致,您的原始提交仍在您的存储库中。一旦reflog条目到期,它们最终会在30天内被丢弃。默认情况下。)


1 这里的例外是仅进行分支名称的事情。例如,您可以将一个分支作为另一个分支的间接引用。通常这仅适用于master。或者,您可以重命名一个分支,它与指向的位置没有任何关系。

2 更确切地说,它将HEAD写入ref: refs/heads/master。这就是&#34;在分支上所需要的&#34;:分支的全名在该文件中,加上&#34; ref :(空格)&#34;前缀。