Kan*_*bot 0 git github git-clone git-branch
我想了解以下情况:
我和其他人正在使用Github的一个项目.我相信它除了主人之外还有几个分支(特别是"开发")
所以我将项目克隆到我的计算机上,git clone <url>
然后我得到了这个项目.我被告知我应该使用开发分支而不是主分支
所以我打字git branch
看看那里有什么分支我得到了
$ git branch
* master
Run Code Online (Sandbox Code Playgroud)
什么?开发分支在哪里?
不过我确实git checkout develop
看到了!我现在在开发分支!我再做git branch
一次,我可以看到
$ git checkout develop
Branch develop set up to track remote branch develop from origin.
Switched to a new branch 'develop'
$ git branch
* develop
master
Run Code Online (Sandbox Code Playgroud)
这里发生了什么黑魔法?它说开发是为了跟踪原产地的发展!那之前发展是隐藏的吗?无法访问?
在做完之后,git log --oneline --decorate
我可以看到原点/开发分支,但刚刚发生了什么?
git clone
事实上,就在git clone
完成之前,你没有分支.
Git使用分支名称来记住特定的提交.每个名称都会记住一个,只有一个提交.每个提交都由其哈希ID唯一标识:像一个大丑陋的数字b7bd9486b055c3f967a870311e704e3bb0654e4f
.
这是提交自己记住以前的提交(通过他们的丑陋的哈希ID).Git将此调用称为每次提交的父提交.这意味着master
仅需要记住任何给定分支的最后一次提交.Git将此最终提交称为分支的提示.
这也意味着我们可以使用一个不同的,不是非常分支的名称来记住其他一些Git的分支!
制作克隆涉及内部运行git fetch
.它git fetch
复制了其他Git的提交,并git fetch
复制了它们的名字.他们的名字实际上是分支名称:这些记住他们的分支提示,比如master
和develop
.但他们不是你的分支提示 - 还没有! 你的 Git 将这些重命名为origin/master
和origin/develop
.你的Git的远程跟踪名称,带有origin
前缀,记住他们的名字和他们的提示.
运行git fetch
更新远程跟踪名称,以便您知道他们的新分支提示是什么.当然,它也首先获得他们拥有的任何提交,而不是.
[
develop
突然出现:]这里发生了什么黑魔法?
当你运行时,Git首先搜索你的分支名称列表.如果它存在,Git会尝试检查出具体的承诺是尖的分支,并让你的当前分支.到目前为止这么好 - 但如果这个名字还不存在呢?git checkout name
name
name
在这种情况下,不是仅仅失败,而是git checkout
搜索远程跟踪名称,例如origin/master
和origin/develop
.如果只有一个类似于你要求的名称,你的Git现在会创建你自己的分支名称,将其设置为在你的分支提示提交时记住,你的Git记住的相同哈希ID作为他们的提示,使用远程跟踪名称.
所以现在你有一个develop
,现在Git可以检查出来!
事实上,这是最后一步git clone
:这就是你如何获得自己master
的第一步.在复制提交origin
并将其名称更改为之后origin/*
,您的Git就会运行git checkout master
.你还master
没有存在,所以你的Git是从你origin/master
的Git创建的那个创建的master
.(哇!这似乎是漫长的过程,而且它确实很有意义!)
归档时间: |
|
查看次数: |
186 次 |
最近记录: |