1) git commit 提交三个文件对象以后的git仓库对象
Git 仓库中有五个对象:三个表示文件快照内容的 blob 对象;一个记录着目录树内容及其中各个文件对应 blob 对象索引的 tree 对象;以及一个包含指向 tree 对象(根目录)的索引和其他提交信息元数据的 commit 对象。概念上来说,仓库中的各个对象保存的数据和相互关系看起来如图 3-1 所示:
图 3-3. 分支其实就是从某个提交对象往回看的历史,其实本质上仅仅是个指向 commit 对象的可变指针
3) git branch
Git 又是如何创建一个新的分支的呢?答案很简单,创建一个新的分支指针
运行 git branch
命令,仅仅是建立了一个新的分支,但不会自动切换到这个分支中去
由于 Git 中的分支实际上仅是一个包含所指对象校验和(40 个字符长度 SHA-1 字串)的文件,所以创建和销毁一个分支就变得非常廉价。说白了,新建一个分支就是向一个文件写入 41 个字节(外加一个换行符)
4) HEAD
Git 是如何知道你当前在哪个分支上工作的呢?其实答案也很简单,它保存着一个名为 HEAD 的特别指针。
将 HEAD 想象为当前分支的别名
5) git checkout
切换分支 git checkout testing, 这样 HEAD 就指向了 testing 分支
6) git checkout -b iss53
相当于
git branch iss53
git checkout iss53
7) git merge
原本在master分支上,新建一个分支hotfix,在分支上作修改,并且commit,切回master分支,
执行git merge hotfix,会把hotfix上的修改合并到master分支上
8) git branch -d hotfix
删除hotfix分支
9) git merge 解决冲突
执行命令以后,Git 作了合并,但没有提交,它会停下来等你解决冲突,
任何包含未解决冲突的文件都会以未合并(unmerged)的状态列出
Git 会在有冲突的文件里加入标准的冲突解决标记,可以通过它们来手工定位并解决这些冲突。
在解决了所有文件里的所有冲突后,运行 git add
将把它们标记为已解决状态
10) 本地git仓库
在很多情况下,分支全部都是本地分支,这一点很重要。当你在使用分支及合并的时候,
一切都是在你自己的 Git 仓库中进行的 — 完全不涉及与服务器的交互。