Git 保存的不是文件差异或者变化量,而只是一系列文件快照
$ git add README test.rb LICENSE2
$ git commit -m 'initial commit of my project'
当使用 git commit 新建一个提交对象前,Git 会先计算每一个子目录(本例中就是项目根目录)的校验和,然后在 Git 仓库中将这些目录保存为树(tree)对象。之后 Git 创建的提交对象,除了包含相关提交信息以外,还包含着指向这个树对象(项目根目录)的指针,如此它就可以在将来需要的时候,重现此次快照的内容了。
现在,Git 仓库中有五个对象:三个表示文件快照内容的 blob 对象;一个记录着目录树内容及其中各个文件对应 blob 对象索引的 tree 对象;以及一个包含指向 tree 对象(根目录)的索引和其他提交信息元数据的 commit 对象。概念上来说,仓库中的各个对象保存的数据和相互关系看起来如图 所示:
作些修改后再次提交,那么这次的提交对象会包含一个指向上次提交对象的指针
在若干次提交后,你其实已经有了一个指向最后一次提交对象的 master 分支,它在每次提交的时候都会自动向前移动。
创建分支命令
git branch testing 这会在当前 commit 对象上新建一个分支指针
要切换到其他分支,可以执行 git checkout 命令。我们现在转换到新建的 testing 分支
git checkout testing
这样 HEAD 就指向了 testing 分支
我们修改其中一个文件
提交
我们再切回主分支,也修改对应的文件,提交,则testing分支,master分支文件版本则会如图所示
这是我们可以通过
git merge testing对分支进行合并
如果有冲突,则需要我们手动解决冲突,然后就可以提交
合并之后,就可以删除分支
git branch -d testing
git branch查看当前所有的分支
git branch -v查看当前所有的分支版本
git branch --merged 查看当前合并的分支
git branch --no-merged 查看当前没有合并的分支
没有合并的分支删除会失败,如果需要强行删除,则需要 git branch -D testing