git命令详解( 二 )
这是git详解的第二篇,最近这个加班有点虚,所以文章也写的比较懒了,一到加班不得已,保温杯里泡枸杞啊,不扯了,今天我们来看看git的第二篇
这篇内容主要是git的一些远程命令
关于远程我们要先理解一个概念,远程仓库
远程仓库
远程仓库并不复杂, 在如今的云计算盛行的世界很容易把远程仓库想象成一个富有魔力的东西, 但实际上它们只是你的仓库在另个一台计算机上的拷贝。你可以通过因特网与这台计算机通信 —— 也就是增加或是获取提交记录
话虽如此, 远程仓库却有一系列强大的特性
-
首先也是最重要的的点, 远程仓库是一个强大的备份。本地仓库也有恢复文件到指定版本的能力, 但所有的信息都是保存在本地的。有了远程仓库以后,即使丢失了本地所有数据, 你仍可以通过远程仓库拿回你丢失的数据。
-
还有就是, 远程让代码社交化了! 既然你的项目被托管到别的地方了, 你的朋友可以更容易地为你的项目做贡献(或者拉取最新的变更)
现在用网站来对远程仓库进行可视化操作变得越发流行了(像 Github 或 Phabricator), 但远程仓库永远是这些工具的顶梁柱, 因此理解其概念非常的重要!
git clone
远程操作的第一个命令,即配置使用远程仓库环境的命令,git clone
命令作用是在本地创建一个远程仓库的拷贝
执行git clone 后
OK,现在我们有了一个自己项目的远程仓库
既然现在有了远程仓库,现在我们来进行下一步,这个时候我们又要谈一个概念了
远程分支
既然你已经看过 git clone
命令了,咱们深入地看一下发生了什么。
你可能注意到的第一个事就是在我们的本地仓库多了一个名为 o/master
的分支, 这种类型的分支就叫远程分支。由于远程分支的特性导致其拥有一些特殊属性。
远程分支反映了远程仓库(在你上次和它通信时)的状态。这会有助于你理解本地的工作与公共工作的差别 —— 这是你与别人分享工作成果前至关重要的一步.
远程分支有一个特别的属性,在你检出时自动进入分离 HEAD 状态。Git 这么做是出于不能直接在这些分支上进行操作的原因, 你必须在别的地方完成你的工作, (更新了远程分支之后)再用远程分享你的工作成果。
关于第一步骤操作你可能还有一个疑问
为什么有 o/
?
你可能想问这些远程分支的前面的 o/
是什么意思呢?好吧, 远程分支有一个命名规范 —— 它们的格式是:
<remote name>/<branch name>
因此,如果你看到一个名为 o/master
的分支,那么这个分支就叫 master
,远程仓库的名称就是 o
。
大多数的开发人员会将它们主要的远程仓库命名为 origin
,并不是 o
。这是因为当你用 git clone
某个仓库时,Git 已经帮你把远程仓库的名称设置为 origin
了
不过 origin
对于我们的 UI 来说太长了,因此不得不使用简写 o
🙂 但是要记住, 当你使用真正的 Git 时, 你的远程仓库默认为 origin
!
如果检出远程分支会怎么样呢?
执行命令 git ckeckout o/master
git commit
正如你所见,Git 变成了分离 HEAD 状态,当添加新的提交时 o/master
也不会更新。这是因为 o/master
只有在远程仓库中相应的分支更新了以后才会更新。
Git Fetch
Git 远程仓库相当的操作实际可以归纳为两点:向远程仓库传输数据以及从远程仓库获取数据。既然我们能与远程仓库同步,那么就可以分享任何能被 Git 管理的更新(因此可以分享代码、文件、想法、情书等等)。
现在我们来看看如何从远程仓库获取数据 —— 命令如其名,它就是 git fetch
。
你会看到当我们从远程仓库获取数据时, 远程分支也会更新以反映最新的远程仓库。
在解释 git fetch
前,我们先看看实例。这里我们有一个远程仓库, 它有两个我们本地仓库中没有的提交。
执行 git fetch
就是这样了! C2
,C3
被下载到了本地仓库,同时远程分支 o/master
也被更新,反映到了这一变化
注意:
git fetch
并不会改变你本地仓库的状态。它不会更新你的 master
分支,也不会修改你磁盘上的文件。
理解这一点很重要,因为许多开发人员误以为执行了 git fetch
以后,他们本地仓库就与远程仓库同步了。它可能已经将进行这一操作所需的所有数据都下载了下来,但是并没有修改你本地的文件
所以, 你可以将 git fetch
的理解为单纯的下载操作