获取哪些提交被强制推送的历史记录

7
昨天,我们团队的一名成员在我们的Bitbucket存储库中执行了git push --force。我知道是谁做的,但我想知道是否可能收集哪些提交被强制推送到存储库中。
我正在从git日志/历史记录中寻找的信息类似于这样 - + 1951097...9b070f0 tower -> origin/tower (forced update) 当我尝试拉取我的本地分支并在强制推送后遇到合并冲突时,我看到了这个消息,但除了那一次之外,我没有在其他地方看到它。是否有一个地方可以看到所有提交(特别是那些旁边带有(forced update)标记的提交)?运行Git refloggit log似乎不返回此信息。
我看到了这篇文章(非常搞笑),类似于这个问题 - 如何查找在git中强制推送的人? 与以前的问题提问者不同,我只是在克隆本地副本后寻找使用--force推送到存储库中的提交。是否可能收集这些信息,还是我没有机会?
谢谢。

1
如果您可以访问托管在服务器上的存储库,您可以在那里查看reflogs。最好实现一些访问控制,如“不允许强制推送”。 - ElpieKay
1个回答

6

我的旧回答是关于找出谁进行了强制推送,而不是关于强制推送的内容。

如果您可以访问服务器,则应使用git reflog查找旧提交(在推送之前)的痕迹。

从那里,您可以推断出替换旧分支历史记录的新提交。

请注意,如果您无法访问远程服务器(通常为:github.com),则仍然可以通过“穷人版reflog”即推送事件(GitHub Events API)获取旧分支SHA1(在强制推送之前)。
参见"github是否记得提交ID?":查找正确分支上的任何最近推送事件:最后一个事件将是被强制推送的提交ID,上一个事件将代表旧的SHA1提交。


嗯,没错,除了在裸库中,core.logAllRefUpdates 默认为 false,而且大多数服务器端的代码库都是裸库。看起来 GitHub 记住了比哈希值更多的细节,所以这必须独立完成。 - torek
@torek 是的,如果我们谈论的是 github.com,你将通过 push 事件获得很多信息。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接