从远程主创建分支

kid*_*idA 8 git branch master

我在理解 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 才能获得我想要的图形。如果它没有多大意义,我真的很抱歉,但英语不是我的母语。

Dar*_*con 5

几乎只pullfetch获取新的提交和更新远程遥控裁判。其他操作仅适用于您的本地副本。创建分支时,它是从指定的 ref 创建的,但仅在本地存储库中查找该 ref。您可以在.git/refs/remotes/origin.

我认为这种设计背后的目标是允许完全断开连接的操作。如果checkout -b要尝试将新分支建立在远程存储库中的远程引用的基础上,则必须联系远程存储库。通过将 ref 存储在本地,即使完全断开连接,仍然可以创建分支。


Mud*_*zvi 4

你的解释很有道理,但我只能说 Git 就是这样!

要更新服务器上的“远程”分支,您需要至少与服务器对话一次。(Git pull 就是这样做的)。

除非您执行了 git-pull,否则您的本地存储库不知道您的朋友创建的分支。当你执行 git-pull 时,它也会更新你的本地 master(origin/master)。

希望这是有道理的!