1、Git保存的不是文件的差异或者变化量,而只是一系列文件快照(File Snapshot);
2、暂存操作会对每一个文件计算校验和(SHA-1哈希字符串),然后把当前版本的文件快照保存到Git仓库中(Git使用blob类型的对象来存储这些快照),并将校验和加入到暂存区;
3、Git中分支,其实本质上是个指向Commit对象的可变指针。Git会使用master最为默认的分支名称。在若干次提交后,你其实已经有了一个指向最后一次提交对象的master分支,它在每次提交时都会自动向前移动;
4、Git是如何知道当前在哪个分支上工作的呢?答案很简单:它保存着一个名叫HEAD的特别指针(HEAD指针是一个指向你正在工作中的本地分支的指针);
5、运行git branch命令仅仅是创建了一个新的分支,但不会自动切换到这个分支中去;
6、git checkout master命令做了2件事:
6.1、把HEAD指针指向master分支;
6.2、把工作目录中的文件替换成master分支所指向的快照内容。
7、Git中的分支实际上仅是一个包含所指对象校验和(40个字符长度SHA-1字符串)的文件,所以创建和销毁一个分支就变得十分廉价;
8、对于HotFix采取如下的流程来处理:
8.1、返回原先已经发布到生产服务器上的分支;
8.2、为这次紧急修补建立一个新分支,并在其中修复问题;
8.3、通过测试后,回到生产服务器所在的分支,将修补分支合并进来,然后再推送到生产服务器上;
8.4、切换到之前实现新需求的分支,继续工作。
9、对于2个分支没有直接的祖先对象,按如下方式进行合并:
9.1、Git没有简单地将指针向右移动;
9.2、将三方(比如:C4、C5、C2)合并后的结果重新做一个新的快照,并自动创建一个指向它的提交对象(比如为:C6),这样提交对象(C6)比较特殊,它有两个祖先(C4和C5);
10、查看各个分支最后一个提交对象的信息,运行:git branch -v
11、查看已于当前分支合并的分支,运行:git branch --merged
12、查看未与当前分支合并的分支,运行:git branch --no-merged
13、特性(Topic)分支:一个短期的用来实现单一特性或与其相关工作的分支,在Git中,一天之内建立、使用、合并再删除多个分支是常见的事;