首先,Git是版本控制系统,所以Git的存储基本数据单元是不同的版本对象,对应的就是不同的commit。换句话说,我们每commit一次,就是一个版本,也就是一个Git存储单元。
当只有main分支时,在修改过文件且进行git add 和 git commit 操作后,目前的文件就会形成一个版本上传到本地的版本库 (Local Repository),如下图所示,commit 1 是第一个版本,commit 2 是第二个版本,commit 3 是第三个版本同时也是当前最新版本。我们每在 main 分支提交一次,main 分支的指针都会向右移动一步,commit 版本链也会越来越长。图中的 HEAD 是一个特殊的指针,指向当前所在的分支。
当我们创建新的分支时,其实是创建一个新的引用,这个引用指向某个提交对象。比如,我们现在在 commit 3 后想创建一个新的分支 dev 开发点别的功能。新创建的 dev 分支会指向 commit 3,可以理解为新创建的分支 dev 基于当前分支 main,和当前分支指向相同的提交对象 commit 3,共享相同的历史,即无论是在 main 还是 dev,使用 git log 查看提交日志都会显示一样的内容。
有个很有趣的现象是,比如在 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 中看到了,其中的原因相信聪明的你应该能很好地解释啦,欢迎在评论区留下你的解释。
这里考考大家,欢迎大家踊跃参与投票或在评论区留下你的答案:
如下图所示,在 dev 1 和 dev 3 分支使用 git log 命令获取到的日志内容一致吗?什么原因呢?