了解Git时间轴的顺序提交

时间:2015-06-23 15:00:12

标签: git commit timeline

请考虑帮助我理解时间表。在一个教程中,时间轴箭头从右到左指向。

这是提交7点回到提交6指出提交5等等。如果提交在数组中并且您继续将提交添加到数组的前面,这是有意义的。但是,并不是一个人(I)通常会想到时间表。

在另一个时间轴箭头指向左到右(这是我通常认为的时间轴。)原始提交1指向下一个更改的提交(2)等。

考虑Git时间表的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

请注意,教程(至少是我见过的那些教程)不讨论时间轴,而是讨论提交图。

基本思想是除了分支中的第一个提交之外的每个提交都有一个或多个父提交。当然,这些父/子关系形成一个图形,其中提交是其顶点,而这些关系是它的边缘。

教程通常使用箭头渲染这些边。那些箭头指向的地方(从孩子到其父母或反之亦然)取决于特定形象的作者试图传达的内容:如果他们想传达父母/子女的关系,那么箭头将被指向父母,如果他们想突出"发展进程的方向"据说箭头指向孩子们。

请考虑放弃这个概念"时间表"尽快 - 否则这可能会在以后咬你。

它的问题是它在Git中根本就不存在。是的,git log显示给你的内容以形成一个时间轴,但这是欺骗性的,因为你还在处理提交的父/子关系的最简单的情况。你的历史沿着想象的时间线线性地前进。

现在假设这个简单的案例:

  1. 你有一个分支" A"您已经创建了10个提交。
  2. 然后你分叉一个分支" B"关闭它并开始实现一些功能 在那个分支上。
  3. 在攻击" B"时,你继续添加东西" A"时。 假设您已经设法在" A"上添加了另外10个提交。在黑客攻击" B"。
  4. 现在正在烹饪的功能" B"完成所以你 合并" B"回到" A"。让我们假设您已经完成了二十次提交" B"在合并之前。结果将是"钻石"在你的历史中 图:历史分歧然后再收敛 - 形成 "双方"钻石它的一面 - " A"分支 - 将有10个提交,另一个 - " B" - 将有二十个。从合并提交开始,您将再次提交一行提交。
  5. 正如您所看到的,您不再拥有简单易用的时间轴,因为它的中间将是由两个⊂时间轴组成的钻石。 : - )

    当然,Git工具可以显示默认的历史记录很高兴"折叠"该钻石的两面都是看起来像某个时间轴的东西,但这些提交的顺序不会反映他们的父/子关系。

    因此,您越早在Git存储库中更改历史记录的心智模型以采用该图形概念,您就越能为处理具有大量合并的真实存储库做好准备。

答案 1 :(得分:-1)

从技术上讲,正确的方法是第一种方式,即箭头指向后方。这是因为实际存储了git提交的方式:每个提交都有一个指向其父级的指针。

所有这一切,你会经常看到它做到了两个方面。使用上下文来确定正在使用哪个。