我在理解 Git 中以下命令背后的逻辑时遇到问题:
git checkout -b hotfix_example_1 origin/master
Run Code Online (Sandbox Code Playgroud)
如果我输入它,则会创建一个名为hotfix的本地分支,它从名为origin 的远程存储库的master分支分支出来。当我稍后将它推送到我的远程存储库时,图表如下所示:
假设一位同事进行了更改并将它们推送到远程 master分支,稍后我决定从远程 master分支创建另一个名为hotfix_example_2 的分支。当我将新的hotfix_example_2分支推送到远程存储库时,我注意到我创建的新分支不是从远程 master的最新提交(我的同事之前推送的那个)分支出来的,而是从之前的提交分支出来的。如果我做一个
git pull origin master
Run Code Online (Sandbox Code Playgroud)
在我本地的 master 分支上重复该过程,我可以看到 hotfix_example_2 是从我同事的提交分支出来的。我不明白的是,即使我在 checkout -b 命令中使用了 origin/master,为什么我必须执行 git pull 才能获得我想要的图形。如果它没有多大意义,我真的很抱歉,但英语不是我的母语。
几乎只pull
和fetch
获取新的提交和更新远程遥控裁判。其他操作仅适用于您的本地副本。创建分支时,它是从指定的 ref 创建的,但仅在本地存储库中查找该 ref。您可以在.git/refs/remotes/origin
.
我认为这种设计背后的目标是允许完全断开连接的操作。如果checkout -b
要尝试将新分支建立在远程存储库中的远程引用的基础上,则必须联系远程存储库。通过将 ref 存储在本地,即使完全断开连接,仍然可以创建分支。
你的解释很有道理,但我只能说 Git 就是这样!
要更新服务器上的“远程”分支,您需要至少与服务器对话一次。(Git pull 就是这样做的)。
除非您执行了 git-pull,否则您的本地存储库不知道您的朋友创建的分支。当你执行 git-pull 时,它也会更新你的本地 master(origin/master)。
希望这是有道理的!
归档时间: |
|
查看次数: |
15478 次 |
最近记录: |