Min*_*our 2 git git-rebase git-fetch git-remote
我是git的新手,我一直在关注这个教程.
在我到达远程存储库之前,我想我理解了大部分内容.关于我理解的远程存储库的唯一概念是git fetch和git remote.根据该教程,git fetch通过git remote的add选项从指定的url获取远程存储库.它将存储库下载到"远程"分支.如果我理解正确,它不是远程存储库中的分支,而是我从远程存储库下载的分支.它还不是我本地存储库的一部分,它仍然可以合并/重新绑定到它(我的本地存储库).也许我错了,我在这里遗漏了一些东西,请随时纠正我.
现在,我觉得我根本不理解的是git如何设法将"远程"存储库重新绑定到我的本地存储库中.
我理解当我对一个分支进行rebase时,它会将该分支中的提交基于它最初分支的不同提交.我仍然需要将分支合并到我的主分支中.我做的时候会发生什么?
git checkout master
git fetch origin
git rebase origin/master
Run Code Online (Sandbox Code Playgroud)
难道这不会将我的本地主分支变成远程主分支吗?我一直在想这张照片.
而不是功能我将拥有我的本地主分支而不是主,我将拥有远程origin/master分支.除了Master没有真正分支出原点/主人.
这不会删除我当地的分公司主人吗?这不会将我的所有工作都转移到"远程"存储库吗?另外,在将其推送到真正的远程存储库之前,我不需要合并回来?
这里的关键是,底垫中,最喜欢的1 Git中其他分支相关的项目,真正起作用关闭提交图表,而不是分支名称.分支名称用于一个或两个目的:
所以,如果你运行:
git checkout master
git fetch origin
git rebase origin/master
Run Code Online (Sandbox Code Playgroud)
第一步让你"分支主":它只是写入master到HEAD2(当然更新你的工作树).
第二步抓住origin你尚未拥有的任何提交.这些进入您的存储库,扩充提交图,并更新origin/master以指向最新的提交.例如,你可能在以下之前有过这个fetch:
* - * <-- HEAD=master
/
..- o - o <-- origin/master
Run Code Online (Sandbox Code Playgroud)
一旦fetch完成,你的git-borg增加origin了它自己的生物和技术独特性,你现在拥有:
* - * <-- HEAD=master
/
..- o - o - o <-- origin/master
Run Code Online (Sandbox Code Playgroud)
此时,你可以git rebase将你的两个提交(填充*s)放到新的提示上origin/master.这实际上是通过复制你的提交来实现的:你得到两个新的,与旧的一样,但有不同的父ID:它们链接新的尖端origin/master而不是旧的(预fetch)尖端.制作副本后,git rebase调整分支master以指向新的提示最多提交.
(并且,为了与Borg主题保持一致,您的原始提交仍然在您的存储库中.一旦reflog条目到期,它们最终会在30天内被丢弃.默认情况下.)
1这里的例外是仅进行分支名称的事情.例如,您可以将一个分支作为另一个分支的间接引用.通常情况下,这只是做了HEAD.或者,您可以重命名一个分支,它与它指向的位置没有任何关系.
2更确切地说,它写入ref: refs/heads/master到.git/HEAD.这就是"在分支上"所需要的:分支的全名在该文件中,加上"ref:(space)"前缀.
| 归档时间: |
|
| 查看次数: |
179 次 |
| 最近记录: |