Git 并没有真正保存这些信息。如果您有 reflog,它确实会为 reflog 过期时间保存一些东西。这些时间默认为 30 天和 90 天,分别用于不可访问和可访问的提交。1 因此, Gerhard Poul 的答案将适用于您的 local dev
,并且由于即使对于远程跟踪分支通常也会启用 reflog,因此您还可以使用来git reflog show origin/dev
查看Git 在其/操作期间记录的内容。git fetch
git pull
到期时间通常从 开始git gc
,所以如果git gc
有一段时间没有运行,您可以多获得几天的信息。
如果在您的服务器上启用了 reflogs(默认情况下它们未启用),您可以登录到您的服务器并在git reflog show dev
那里运行。
在所有情况下,您可能需要添加--date=<format>
(例如,--date=iso
)以替换为:{@n}
@{date}
$ git reflog --date=iso master
11ae6ca master@{2016-06-17 13:32:00 -0700}: reset: moving to HEAD^
3d9eb53 master@{2016-06-17 13:31:44 -0700}: commit: Revert "fdmillion: repair example"
11ae6ca master@{2016-04-22 05:27:07 -0700}: commit (amend): add run-checks script
becf391 master@{2016-04-22 05:24:48 -0700}: commit: add run-checks script
这将为您提供每个参考更改的时间戳,这对于关联“谁在何时做了什么”很有用。
1这在技术上是胡说八道。:-) 提交——嗯,所有的 Git 对象,真的——要么是可访问的,要么是不可访问的,但是 reflog 条目使它们可以访问,所以这个特殊的速记可能令人费解。实际定义可以从对应参考的当前值中得到。也就是说,当git reflog expire
引用到期时,它会查看:
- 这是一个 reflog 条目
refs/heads/foo
- 分支
foo
名称是什么提交?(称这个H为头)
- 这个 reflog 条目名称是什么提交?(调用此E进入)
- E是H的祖先吗?(见
git merge-base --is-ancestor
)
- 如果是,请使用
gc.reflogExpire
或gc.<pattern>.reflogExpire
- 如果否,请使用
gc.reflogExpireUnreachable
或gc.<pattern>.reflogExpireUnreachable
两个非模式名称默认分别为90.days.ago
和30.days.ago
(默认不设置模式值)。有一种特殊情况refs/stash
设置为never
.