总共分成四个部份,可挑选出想看文本:
一、Git此基础
二、Git共同组成部份
三、Git远距操作方式
一、Git此基础
1.1 历史记录镜像
Git 留存统计数据是对文档系统的几组镜像。 每天你递交预览时,它主要就对彼时的全数文档制做两个镜像。假如文档没修正,Git 只留存两个镜像对准以后储存的文档。
1.2 四个组织工作地区
Git 有四个地区:组织工作产品目录(Working Directory),存贮产品目录(Stage or Index),库房(Git directory)。 基本上的 Git 组织工作业务流程如下表所示:
在组织工作产品目录中修正文档。存贮文档,将文档的镜像放进存贮地区。递交预览,找出存贮地区的文档,将镜像永久储存到 Git 库房产品目录。组织工作产品目录就是你已经开始深耕的工程项目文档夹,当你向存贮产品目录递交时,会以镜像的方式被放置当中。递交后若修正了组织工作产品目录中的文档,再度递交会聚合捷伊镜像全面覆盖到存贮产品目录。
库房,是 Git 中最重要的部份,由图中绿色生态块共同组成,统计数据结构看上去像两个双向二叉树,但前面会提及只不过是树。每两个结点都是印上基元值的镜像组,也是工程项目的两个版。库房两个或数个操作方式符,代表者共同组成部份,对准某两个结点。多于两个 HEAD 操作方式符对准已经开始组织工作的共同组成部份。当你从存贮产品目录向库房递交时,Git 用存贮地区的文档创建两个捷伊递交,并把这时的结点标为父结点。接着把现阶段共同组成部份对准捷伊递交结点。下一图中,现阶段共同组成部份是master。 在运转指示以后,master对准ed489,递交后,master对准捷伊结点f0cec并以ed489做为父结点。下二图中,在master共同组成部份的曾祖父结点maint共同组成部份展开一场递交,聚合了1800b。
1.3 基本上用法
上面的四条指示在组织工作产品目录、存贮产品目录(也叫做索引)和库房之间复制文档。
git add files 把现阶段文档放进存贮地区。git commit 给存贮地区聚合镜像并递交。git reset — files 用来撤销最后一场git add files,你也可以用git reset撤销所有存贮地区文档。git checkout — files 把文档从存贮地区复制到组织工作产品目录,用来丢弃本地修正。你可以用 git reset -p, git checkout -p, or git add -p进入交互模式。
也可以跳过存贮地区直接从库房取出文档或者直接递交代码。
git commit -a 相当于运转 git add 把所有现阶段产品目录下的文档加入存贮地区再运转。git commit files 展开一场包含最后一场递交加上组织工作产品目录中文档镜像的递交。并且文档被添加到存贮地区。git checkout HEAD — files 回滚到复制最后一场递交。diff
checkout
checkout指示用于从历史递交(或者存贮地区)中拷贝文档到组织工作产品目录,也可用于切换共同组成部份。
当给定某个文档名(或者打开-p选项,或者文档名和-p选项同时打开)时,git会从指定的递交中拷贝文档到存贮地区和组织工作产品目录。比如,git checkout HEAD~ foo.c会将递交结点HEAD~(即现阶段递交结点的父结点)中的foo.c复制到组织工作产品目录并且加到暂存地区中。(假如指示中没指定递交结点,则会从存贮地区中拷贝文本。)注意现阶段共同组成部份不会发生变化。
当不指定文档名,而是给出两个(本地)共同组成部份时,那么HEAD标识会移动到那个共同组成部份(也是说,我们“切换”到那个共同组成部份了),接着存贮地区和组织工作产品目录中的文本会和HEAD对应的递交结点一致。新递交结点(下图中的a47c3)中的所有文档都会被复制(到存贮地区和组织工作产品目录中);只存在于老的递交结点(ed489)中的文档会被删除;不属于上述两者的文档会被忽略,不受影响。
该做法尽量避免。假如既没指定文档名,也没指定共同组成部份名,而是两个标签、远距共同组成部份、SHA-1值或者是像master~3类似的东西,就得到两个匿名共同组成部份,称作detached HEAD(被分离的HEAD标识)。这样可以很方便地在历史版之间互相切换。比如说你想要编译1.6.6.1版的git,你可以运转git checkout v1.6.6.1(这是两个标签,而非共同组成部份名),编译,安装,接着切换回另两个共同组成部份,比如说git checkout master。
二、Git共同组成部份
2.1 创建共同组成部份
创建共同组成部份只不过是创建了两个捷伊操作方式符。使用的指令是git branch:
这会在现阶段所在的递交对象上创建两个testing操作方式符, 但是这时HEAD操作方式符仍然对准原共同组成部份,所以准备在testing共同组成部份上组织工作前,需要切换共同组成部份。
2.2 切换共同组成部份
需要使用的指令是git checkout:
这样HEAD就对准testing共同组成部份了,这时递交代码将会和master分离,产生分叉。
当然,需要将HEAD切换回master才能在master共同组成部份上递交。
以上两条指示可以合并成一句,用两个带有-b参数的git checkout指示:
2.4 合并共同组成部份
是时候将共同组成部份的代码整合起来,需要用git merge指示合并共同组成部份。首先确定需要并入到哪一条共同组成部份,通常情况下会需要并入到master,所以先将HEAD切换到master:
Git 将此次合并的结果做了两个捷伊镜像并且让master对准它。这里有一个特殊情况是当master所指的镜像是共同组成部份的父结点,那么merge操作方式将会直接移动master操作方式符到共同组成部份操作方式符的位置。
假如没任何冲突,那么合并到这里就结束了。但大部份情况,代码往往不能简单的自动合并,比如两个共同组成部份均修正了同两个变量。任何因包含合并冲突而有待解决的文档,都会以未合并状态标识出来。Git 会在有冲突的文档中加入标准的冲突解决标记,这样你可以打开这些包含冲突的文档接着手动解决冲突。出现冲突的文档会包含一些特殊区段,看上去像下面这个样子:
这时只需要妥善处理冲突,确保已经把 <<<<<<< , ======= , 和 >>>>>>> 这些行完全删除。在解决了所有文档里的冲突之后,对每个文档使用 git add 指示来将其标记为冲突已解决。一旦存贮这些原本有冲突的文档,Git 就会将它们标记为冲突已解决。
这是 Git 共同组成部份的基本上操作方式,组织工作中使用往往需要一定的管理策略,可以参考阮一峰的Git共同组成部份管理策略。
三、Git远距操作方式
远距操作方式仅仅多出两个组织工作地区,即远距库房(Remote)。详见下图:
git remote
两个本地库房可以和数个远距库房交流。为了便于管理,Git要求每个远距主机都必须指定两个主机名。git remote就用于管理主机名。 不带选项的时候,git remote指示列出所有远距主机。
使用-v选项,可以参看远距主机的网址。
上面指示表示,现阶段多于一台远距主机,叫做origin,以及它的网址。
克隆版库的时候,所使用的远距主机自动被Git命名为origin。假如想用其他的主机名,需要用git clone指示的-o选项指定。
面指示表示,克隆的时候,指定远距主机叫做jQuery。
git remote show指示加上主机名,可以查看该主机的详细信息。
git remote add指示用于添加远距主机。
git remote rm指示用于删除远距主机。
git remote rename指示用于远距主机的改名。
取回代码
Git的远距操作方式基本上上是两类:取回代码和上传代码。
git clone
假如新建了两个空白的本地库房,通常要克隆远距库房到本地,这时就要用到git clone指示。
比如,克隆jQuery的版库。
该指示会在本地主机聚合两个产品目录,与远距主机的版库同名。假如要指定不同的产品目录名,可以将产品目录名做为git clone指示的第二个参数。
git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文档协议等,下面是一些例子。
SSH协议还有另一种写法。
通常来说,Git协议下载速度最快,SSH协议用于需要用户认证的场合。各种协议优劣的详细讨论请参考官方文档。
git fetch
当远距库房有预览需要取回本地时,就要用到git fetch指示。
上面指示将某个远距主机的预览,全数取回本地。默认情况下,git fetch取回所有共同组成部份(branch)的预览。假如只想取回特定共同组成部份的预览,可以指定共同组成部份名。
比如,取回origin主机的master共同组成部份。
所取回的预览,在本地主机上要用”远距主机名/共同组成部份名”的方式读取。比如origin主机的master,就要用origin/master读取。
git branch指示的-r选项,可以用来查看远距共同组成部份,-a选项查看所有共同组成部份。
上面指示表示,本地主机的现阶段共同组成部份是master,远距共同组成部份是origin/master。
取回远距主机的预览以后,可以在它的此基础上,使用git checkout指示创建两个捷伊共同组成部份。
上面指示表示,在origin/master的此基础上,创建两个新共同组成部份。
此外,也可以使用git merge指示或者git rebase指示,在本地共同组成部份上合并远距共同组成部份。
上面指示表示在现阶段共同组成部份上,合并origin/master。
git pull
git pull指示的作用是,取回远距主机某个共同组成部份的预览,再与本地的指定共同组成部份合并。
实质上,这等同于先做git fetch,再做git merge。
在某些场合,Git会自动在本地共同组成部份与远距共同组成部份之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地共同组成部份默认与远距主机的同名共同组成部份,建立追踪关系,也是说,本地的master共同组成部份自动”追踪”origin/master共同组成部份。
Git也允许手动建立追踪关系。
上面指示指定master共同组成部份追踪origin/next共同组成部份。
假如现阶段共同组成部份与远距共同组成部份存在追踪关系,git pull就可以省略远距共同组成部份名。
上面指示表示,本地的现阶段共同组成部份自动与对应的origin主机”追踪共同组成部份”(remote-tracking branch)展开合并。
假如现阶段共同组成部份多于两个追踪共同组成部份,连远距主机名都可以省略,现阶段共同组成部份自动与唯一两个追踪共同组成部份展开合并。
假如合并需要采用rebase模式,可以使用–rebase选项。
上传代码
上传以后,为了防止远距库房代码库发生冲突,一般都需要先git pull,以确保上传代码没过旧。
git push
git push指示用于将本地共同组成部份的预览,推送到远距主机。它的格式与git pull指示相仿。
假如现阶段共同组成部份与远距共同组成部份之间存在追踪关系,则本地共同组成部份和远距共同组成部份都可以省略。
上面指示表示,将现阶段共同组成部份推送到origin主机的对应共同组成部份。
假如现阶段共同组成部份多于两个追踪共同组成部份,那么主机名都可以省略。
假如现阶段共同组成部份与数个主机存在追踪关系,则可以使用-u选项指定两个默认主机,这样前面就可以不加任何参数使用git push。
迄今,Git新手系列结束了。该系列仅仅介绍日常组织工作学习中需要的 Git 操作方式,假如有更高的需求或其他疑问,请参见 Pro Git。
本文参考博客:LiaoHanfus。