Git 原理

SVN 记录版本之间的差异

file

上述图片中:横向表示各个版本号,纵向表示各个文件和其差异。在 version1 中,存在三个文件各自是 fileA, fileB, fileC; 在 version2 中,fileA, fileC 发生变化 A1, 那我们就进行变化 A1 进行记录;在 version3 中,fileC 发生变化 A2, 那么我们就将变化 A2 进行记录,以此类推!
Git 直接记录快照

file

上述图片中:横向表示各个版本号,纵向表示各个快照 (所谓快照,即其所表示文件的一个副本或一个复制品)。在 version1 中,存在三个快照各自是 A、B、C; 在 version2 中,A、C 发生了变化,那么我们就对 A、C 做一个快照 A1、C1,而 B 没有不论什么变化,那么就不再做快照而仅仅是做一个上次的快照做一个链接 B; 以此类推。

Git 数据完整性
Git 一般只添加数据。 Git 中所有数据在存储前都计算校验和。

流程原理图
file

将远程仓库代码更新到本地
file

pull, fetch 和 merge 区别
file

本地工作区跟远程仓库冲突 (pull, fetch)
file

  1. 放弃本地修改 ( 本地仓库覆盖工作区 ) [git checkout head .]
    原理如下:
    file
  2. 本地代码放在暂存区,远程拉取,再从暂存区取出代码。( 手工解决冲突 )
    原理如下:
    file
    file

分支流程

  1. 假设你正在你的项目上工作,并且已经有一些提交。

    file

  2. 你已经决定要解决的公司新的问题 #53,并创建一个分支

    file

  3. 你继续在 #53 问题上工作,并且做了一些提交

    file

  4. 现在你接到那个电话,有个紧急问题等待你来解决 (你切回到主分支。并创建 hotfix 分支)

    file

  5. 紧急问题解决了。你打算合并分支

    file

  6. 你继续切换到问题 #53 并做个提交

    file

  7. 问题 #53 解决了,你打算合并分支

    file
    file


    远程拉取流程

    1. 远程仓库,并且有一些提交记录 。拉取下来

    file

    1. 其他人提交了一些修改至远程仓库

    file

    1. 你在本地分支上继续开发

    file

    1. 你进行拉取你本地没有的数据

    file


    变基合并

    1. 创建了一个特性分支 server,为服务端添加了一些功能,提交了 C3 和 C4。 然后从 C3 上创建了特性分支 client,为客户端添加了一些功能,提交了 C8 和 C9。 最后,你回到 server 分支,又提交了 C10。

    file

    1. 假设你希望将 client 中的修改合并到主分支并发布,但暂时并不想合并 server 中的修改

    $ git rebase --onto master server client

    file

    1. 进行合并 client 分支

      $ git checkout master
      $ git merge client

      file

    2. 进行合并 server 分支

    $ git rebase master server
    file

git
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。