git merge更改日志输出(非稳定排序)

git merge更改日志输出(非稳定排序),git,Git,我注意到git merge在进行合并时似乎没有进行稳定排序。或者它可能是完全不同的东西。我真的不知道出了什么问题 如果您尝试这个小测试用例10-20次,直到它显示“FLAKY”: (这是一个单行程序,可以在bash提示符下运行) 通常,您在末尾回显的日志如下所示: merge 1 2 0 但一段时间后,您可能会得到1和2来切换位置: merge 2 1 0 这令人难以置信地愤怒。我总是可以在测试中使这两个第一次提交可以互换,但我不希望这样。我宁愿去掉片状物。有人知道是什么原因吗?TLDR:这

我注意到git merge在进行合并时似乎没有进行稳定排序。或者它可能是完全不同的东西。我真的不知道出了什么问题

如果您尝试这个小测试用例10-20次,直到它显示“FLAKY”:

(这是一个单行程序,可以在bash提示符下运行)

通常,您在末尾回显的日志如下所示:

merge 1 2 0
但一段时间后,您可能会得到1和2来切换位置:

merge 2 1 0

这令人难以置信地愤怒。我总是可以在测试中使这两个第一次提交可以互换,但我不希望这样。我宁愿去掉片状物。有人知道是什么原因吗?

TLDR:这是一种很容易触发的竞争条件,因为git日志以1秒的分辨率按时排序。一个可能的解决方法是使用:

git log --topo-order

所以在调查之后。Git订单根据日期/时间提交。这是显而易见的。存储的日期以秒为单位,以unix时间戳为单位,因此分辨率非常糟糕。当所有提交都具有相同的时间戳时(通常情况下),它将选择按某种(稳定的!)顺序“merge 1 2 0”对它们进行排序

然而,有时,最后2正好发生在时间改变时,因此它将有一个更高的时间戳,因此总是放在1之上

所以这是常见的情况:

Merge: a217d34 1f853fc
Date:   1381855683 +0200
    merge

commit a217d34c3b7694e4a5f963ead624b4d3e4a87adf
Date:   1381855683 +0200
    1

commit 1f853fc9acf669929ccab71d341784a525a5360e
Date:   1381855683 +0200
    2

commit 490507918504597c90300889aaf3cb5cbb5dd82c
Date:   1381855683 +0200
    0
这是一个特殊的(片状的)案例。至少在这次测试中,我想在我的真实测试中可能会有所不同,只有当他们突然有相同的时间时,它才会剥落

Merge: a2f0bba f3b9f1e
Date:   1381855747 +0200
    merge

commit f3b9f1eeeef0c8c77aa8505224198951dc6d6904
Date:   1381855747 +0200
    2

commit a2f0bba815bb2a1e8e611f755397350c732b5e6b
Date:   1381855746 +0200
    1

commit ab28f3063df4d51c79ee0fbdec0ae77f870e8e3b
Date:   1381855746 +0200
    0
我还没有设计出我将遵循什么计划来修复这个问题,但似乎
git log--topoorder
就可以了。它至少在这个小测试中表现相同

Merge: a2f0bba f3b9f1e
Date:   1381855747 +0200
    merge

commit f3b9f1eeeef0c8c77aa8505224198951dc6d6904
Date:   1381855747 +0200
    2

commit a2f0bba815bb2a1e8e611f755397350c732b5e6b
Date:   1381855746 +0200
    1

commit ab28f3063df4d51c79ee0fbdec0ae77f870e8e3b
Date:   1381855746 +0200
    0