Git分支管理的原理 & 工作区、暂存区的分支共享

1. 提交对象

首先,Git是版本控制系统,所以Git的存储基本数据单元是不同的版本对象,对应的就是不同的commit。换句话说,我们每commit一次,就是一个版本,也就是一个Git存储单元。


2. 分支管理

2.1 只有 main 分支时

当只有main分支时,在修改过文件且进行git add 和 git commit 操作后,目前的文件就会形成一个版本上传到本地的版本库 (Local Repository),如下图所示,commit 1 是第一个版本,commit 2 是第二个版本,commit 3 是第三个版本同时也是当前最新版本。我们每在 main 分支提交一次,main 分支的指针都会向右移动一步,commit 版本链也会越来越长。图中的 HEAD 是一个特殊的指针,指向当前所在的分支。

2.2 创建分支 dev 时

当我们创建新的分支时,其实是创建一个新的引用,这个引用指向某个提交对象。比如,我们现在在 commit 3 后想创建一个新的分支 dev 开发点别的功能。新创建的 dev 分支会指向 commit 3,可以理解为新创建的分支 dev 基于当前分支 main,和当前分支指向相同的提交对象 commit 3,共享相同的历史,即无论是在 main 还是 dev,使用 git log 查看提交日志都会显示一样的内容。


3. 工作区、暂存区的共享

有个很有趣的现象是,比如在 commit 3 这里,我们一次性创建了 3 个分支。我们在 dev 3 分支修改了 readme.txt 文件,如果马上切换到 dev 1、dev 2 或 main 都会看到一样的修改,或者说在 dev 3 修改后 git add 但不 git commit,同样可以在 dev 1、dev 2 或 main 看到一样的修改。也就是说在没有 commit之前,main 、dev 1、 dev 2、 dev 3 共享同一个工作区和暂存区。

如果在 dev 3 分支修改 readme.txt 后马上 git add 和 git commit,那么修改内容就无法在 main、dev 1 和 dev 2 中看到了,其中的原因相信聪明的你应该能很好地解释啦,欢迎在评论区留下你的解释。


4. Question

这里考考大家,欢迎大家踊跃参与投票或在评论区留下你的答案:

如下图所示,在 dev 1 和 dev 3 分支使用 git log 命令获取到的日志内容一致吗?什么原因呢?

  • 23
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值