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 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!