git简易使用指南-2
更新日期:
命令详解
git remote
git remote
用于管理远程仓库
git clone
git clone <url> [path]
克隆一个远程仓库到本地,这条命令其实是由多条命令组成的。与下面等效
git pull
合并远程仓库代码到本地分支 ,实际上它有两条命令复合而成,
git fetch
然后git merge FETCH_HEAD
。git fetch是将代码down到FETCH_HEAD中。FETCH_HEAD一般来说, 存在两种情况:
- 如果没有显式的指定远程分支, 则远程分支的master将作为默认的FETCH_HEAD.
- 如果指定了远程分支, 就将这个远程分支作为FETCH_HEAD.
子树合并
在项目中难免会引用到其他项目作为主项目的一个模块,但不能同时存在两个仓库,然后都提交。有一个解决文档是,将子项目作为子树提交,新建立一个分支作为子项目,然后跟踪更新。然后切换回主分支,主分支合并读取分支的树,这时在子目录下会有子项目的文件,子项目和主分支的更新和合并都通过子树作为桥梁。
子树归并的思想是你拥有两个工程,其中一个项目映射到另外一个项目的子目录中,反过来也一样。当你指定一个子树归并,Git可以聪明地探知其中一个是另外一个的子树从而实现正确的归并——这相当神奇。
比如想要嵌入一个rack项目。首先你将 Rack 项目加入到项目中。你将 Rack 项目当作你项目中的一个远程引用,然后将它检出到它自身的分支:
要将 Rack 项目当作子目录拉取到你的master项目中。你可以在 Git 中用git read-tree来实现。
当你提交master的时候,会同时提交子目录下拥有Rack的文件。你可以比较容易地归并其中一个分支的变更到另外一个。因此,如果 Rack项目更新了,你可以通过切换到那个分支并执行拉取来获得上游的变更。然后又可以切换会主分支,合并那个分支的修改。
为了得到rack子目录和你rack_branch分支的区别——以决定你是否需要归并它们——你不能使用一般的diff命令。而是对你想比较的分支运行git diff-tree:
think in git
git 对象
Git 是一套内容寻址文件系统。Git 从核心上来看不过是简单地存储键值对(key-value)。它允许插入任意类型的内容,并会返回一个键值,通过该键值可以在任何时候再取出该内容。