为什么这个较旧的 git 提交出现在顶部?

Why does this older git commit appear on the top?

考虑以下 git 日志。提交按日期排序。然而,有一个提交明显比其他提交更早,但仍然出现在顶部。

commit f9afb9e89918faaff09686ce1df4a36f12e82693
Author: Kshitiz Sharma
Date:   Fri May 20 11:59:00 2016 +0100

    Deleted tags

commit f3b90300799878178c09841ccac7ffcd4c9cc4d9
Author: Kshitiz.Sharma
Date:   Fri Jun 10 13:00:32 2016 +0000

    Refactor some code

    git-svn-id: svn://1.1.1.1/myrepo@29029 ca623f4c-c864-0410-95d3-a40aa24e21c6

commit c98ad952b84403908ba656ab2f18af9a18a4f95c
Author: Kshitiz.Sharma
Date:   Wed Jun 8 14:35:29 2016 +0000

    Handle nullpointer exception

    git-svn-id: svn://1.1.1.1/myrepo@29010 ca623f4c-c864-0410-95d3-a40aa24e21c6

为什么会这样?

提交日期并不决定它们的顺序。三种情况会导致过时的提交:

  1. 提交可能设置了假日期
  2. 提交可能来自不同的分支,并且可能是使用 merge 引入的(通常的 git log 不显示合并)。
  3. 提交可能已被 rebase 移动(在提交图中移动提交但保持原始日期不变)

根据你使用的 git-svn 的事实判断,它做了很多变基,我猜这是数字 3 的情况。

顶部的提交未转发到 SVN 存储库。它仅存在于 git。其他提交已发送到 SVN(使用 git svn dcommit,如他们的 git-svn-id 所证明)。

当您使用 git svn rebase 从 SVN 中提取最新更改时,git-svn 会重新安排您的提交并将您的本地内容置于(线性)SVN 历史记录之上。 (也就是说,它实际上 rebases SVN 不知道的任何提交。)

变基只是重新排列历史。它不会更改提交日期。