我是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没有真正分支出原点/主人。
这不会删除我当地的分店主人吗?我的所有工作都不会进入"遥控器"库?另外,在将其推送到真正的远程存储库之前,我不需要合并回来吗?
答案 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;前缀。