我在Github上有一个有2个分支的存储库:master和develop.
当我克隆存储库并运行$ git branch它时只显示master分支.
如果我跑,$ git branch -a我可以看到所有的远程分支.
现在,如果我做了$ git checkout develop,我收到消息:
分支机构开发设置跟踪远程分支从原点发展.
切换到新的分支'发展'
究竟发生了什么?develop当我跑步时$ git clone remote-url,或者当我跑步时,是否从远程分支获取了提交:$ git checkout develop或者两者都没有?
$ git pull origin develop退房后我要做一个develop,或者它已经完成了吗?
请帮助我了解clone遥控器上有多个分支时的工作原理.
Yan*_*ang 12
git clone获取所有远程分支,但只master为您创建一个本地分支.所以当你跑步时git branch -a,你会看到这样的事情:
$ git branch -a
* master
remotes/origin/HEAD
remotes/origin/develop
remotes/origin/master
Run Code Online (Sandbox Code Playgroud)
这意味着您有一个本地分支master和几个远程分支.当你运行时git checkout develop,git创建另一个本地分支develop来跟踪远程分支origin/develop.git尝试同步跟踪的分支,所以你不必做另一个pull之后check out.
如果本地和远程分支机构的术语听起来很混乱,您可以浏览此文档.它有一些很好的数字可以帮助您理解它们,以及当您进一步提交时本地和远程分支如何移动.
您可能会发现此答案很有用:如何在Git中克隆所有远程分支?,第一个答案.
git clone首先创建一个新的空存储库.(像git init)
然后,它将给定的存储库设置为名为"origin"的远程存储库.(git remote add)
然后完成主要工作git fetch,这是与其他存储库通信的唯一命令.它将远程存储库的所有提交传输到当前存储库,并在本地存储库分支内创建,从与远程存储库上的分支对应的"remote/origin /"开始.
如果您有一个默认的非裸存储库,它也会调用git checkoutcheckout,通常是master分支.
如果你打电话git branch -r它会显示"远程"分支,即你的存储库中的那些分支,它们将被更新git fetch.(你永远不会直接在这些方面工作.)
每当你想在你使用的分支上工作时git checkout,它将创建该分支的副本,而没有"remote/origin /"前缀.这些是您工作的"本地"分支机构.(git branch将显示那些.)
您所做的几乎所有事情都只涉及您的本地存储库.唯一的例外是git push,这是更新远程存储库git fetch的唯一命令,也是查询其他存储库的唯一命令.
git pull只是相结合git fetch和git merge.第一个提取更改并更新remote/origin/*,第二个将这些更改合并到本地分支中.
简而言之git clone repository-url,按顺序执行以下操作:
创建一个新的空存储库。
git init
Run Code Online (Sandbox Code Playgroud)创建一个名为“ origin”的远程并将其设置为给定的url。
git remote add origin repository-url
Run Code Online (Sandbox Code Playgroud)从称为“源”的远程获取所有提交和远程分支。
git fetch --all
Run Code Online (Sandbox Code Playgroud)创建本地分支“ master”以跟踪远程分支“ origin / master”。
git checkout --track origin/master
Run Code Online (Sandbox Code Playgroud)有趣的一点是,fork(在GitHub或Bitbucket中)只是服务器端克隆。
| 归档时间: |
|
| 查看次数: |
14607 次 |
| 最近记录: |