11. git diff
- git diff // 对比的是当前工作区和索引区
- git diff --cached // 对比的是索引区和代码仓库
在VSCode编辑器中,默认采用的git diff,即工作区和索引区。
12. 配置远程仓库
git remote add origin https://github.com/git2022/git-demo.git
问:执行上面的命令会发生啥? 答:会在.git/config下添加如下内容。
接下来执行下面的命令,将本地仓库推到远程:
git push -u origin master
问:上面这条命令执行完,.git里发生了啥? 答:
13. git远程仓库后台
在git远程仓库的后台同样也记录着你git操作的信息
14. git对象的压缩
即:压缩成的blob。
ls -lh // 命令可以在列出文件的同时查看文件的大小 du -h 文件夹 // 可以列出当前文件夹文件的内容大小情况 通过上面的4次commit,我们发现在.git/objects里将随着add、commit越来越大,这样是不可取的。
接下来我们在看看我们本地原文件的大小: 我们发现本地文件也不过区区10M,那么你.git/objects你给我搞那么大,而且大的不可控显然是不合理的。
那么有没有办法将.git/objects里的快照变小呢?
其实git提供了一个gc机制。 从上面可以看到,git gc 将 .git/objects里的内容压缩到.git/objects/pack
14. 关于SHA1的小插曲
google在2017年发现可以由不同的文件通过SHA1生成一样的hash,因此SHA1变的不安全了。
目前git采用的仍是SHA1,但是生成的hash会根据文件名、文件内容、文件大小等来生成,因此碰撞的概率极小。社区也在规划升级为SHA256。
15. git pack 的压缩
其中 .idx是对pack 的索引 因此,即使被压缩后,我们也能够找到之前commit的内容。
下面是对pack内容的查看:
我们从远程仓库clone一个项目的时候,其实clone下来也是被压缩的,这样是为了缩短传输的时长。 其中的172.50M是压缩后的, 从克隆下来的内容来看,我们也可以明确是压缩后的。
18. git垃圾对象的清理
19. 分支的合并
-
Fast-forward:基于c2创建了一个c3,其中c2一直没有变(其他人没有从c2再拉分支),这种模式称为Fast-forward。 -
3 way merge 基于C2拉了一个C3分支,同时其他人也基于C2分支拉了一个C4分支,
而C4那个人干活快,干完很快就合了master,即变成如下结构: 当我们C3完成后想git merge master,会发生什么呢?
会让你输入一个解释,一般情况用它给的解释就好了。 接下来便会生成如下结构: 可以看到C5有两个parent
通过SourceTree来看这个结构更清晰:
如果C4和C3产生冲突呢??这是工作中很常见的,请看下集分解。
21. 带冲突的3 way merge
场景:
|