Git 原理
SVN 记录版本之间的差异
上述图片中 : 横向表示各个版本号, 纵向表示各个文件和其差异。在version1中, 存在三个文件各自是fileA, fileB, fileC; 在version2中, fileA, fileC发生变化A1,那我们就进行变化A1进行记录; 在version3中, fileC发生变化A2, 那么我们就将变化A2进行记录, 以此类推!
Git 直接记录快照
上述图片中: 横向表示各个版本号,纵向表示各个快照(所谓快照,即其所表示文件的一个副本或一个复制品)。在version1中,存在三个快照各自是A、B、C;在version2中,A、C发生了变化,那么我们就对A、C做一个快照A1、C1,而B没有不论什么变化,那么就不再做快照而仅仅是做一个上次的快照做一个链接B;以此类推。
Git数据完整性
Git一般只添加数据。 Git 中所有数据在存储前都计算校验和。
流程原理图
将远程仓库代码更新到本地
pull, fetch 和merge区别
本地工作区跟远程仓库冲突 (pull, fetch)
- 放弃本地修改 ( 本地仓库覆盖工作区 ) [ git checkout head . ]
原理如下: - 本地代码放在暂存区, 远程拉取, 再从暂存区取出代码。( 手工解决冲突 )
原理如下:
分支流程
-
假设你正在你的项目上工作,并且已经有一些提交。
-
你已经决定要解决的公司新的问题 #53,并创建一个分支
-
你继续在 #53 问题上工作,并且做了一些提交
-
现在你接到那个电话,有个紧急问题等待你来解决 (你切回到主分支。并创建 hotfix 分支)
-
紧急问题解决了。你打算合并分支
-
你继续切换到问题 #53 并做个提交
-
问题 #53 解决了,你打算合并分支
远程拉取流程
- 远程仓库,并且有一些提交记录 。拉取下来
- 其他人提交了一些修改至远程仓库
- 你在本地分支上继续开发
- 你进行拉取你本地没有的数据
变基合并
- 创建了一个特性分支 server,为服务端添加了一些功能,提交了 C3 和 C4。 然后从 C3 上创建了特性分支 client,为客户端添加了一些功能,提交了 C8 和 C9。 最后,你回到 server 分支,又提交了 C10。
- 假设你希望将 client 中的修改合并到主分支并发布,但暂时并不想合并 server 中的修改
$ git rebase --onto master server client
-
进行合并 client 分支
$ git checkout master $ git merge client
-
进行合并 server 分支
$ git rebase master server
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: