如何跟踪 GIT 强制推送?你能 lose/delete 提交吗?

How to track GIT force pushes? Can you lose/delete commits?

这是我们团队合作的一个回购协议: https://github.com/hmcts/prd-pui-manager/pulls?q=is%3Apr+is%3Aclosed

我们无法理解为什么当我们下拉 master 时,我们在提交日志中看不到 PR 45、46。 https://github.com/hmcts/prd-pui-manager/pull/45 https://github.com/hmcts/prd-pui-manager/pull/46

我有 运行: git reflog 并查看是否有强制推送,但没有显示任何内容。

PR 48:https://github.com/hmcts/prd-pui-manager/pull/48 删除 PR 45,46 ,如果是如何?

有没有办法调试强制推送到主控?

我希望我能在这方面得到帮助,因为我花了一段时间来了解如何调试这些流程。 我已按照以下步骤尝试调试:

合并 PR 48 后,PR 45 也更改为 return 恢复丢失的代码,但我想弄清楚我们是如何丢失两个 PR 的

GitHub 审计追踪

GitHub 有用于解决此类问题的审核日志:

文档:https://developer.github.com/v3/activity/events/

对于您的情况,分析 https://api.github.com/users/hmcts/events 可能会揭示您正在寻找的内容。我在 refs/heads/masterPullRequestEvents 上浏览了一下 PushEvent。我没有找到您的具体答案,但通过一些挖掘您可能会找到答案。

丢失提交

为了回答你问题的另一部分,强制推送是我知道丢失提交的唯一方法。

暂时解决这个问题,你仍然有分支,所以你可以将它们合并到 master 中以获得你的更改。

对于未来,我建议强制执行以下内容:

  • 永远不要推送 force master 或任何其他共享分支,
  • 只能强制推送属于单个开发人员的分支,前提是开发人员知道he/she做什么

此外,如果您不再有分支,您可以查看开发人员的计算机,比较日志和重新登录并从不同的地方重建您的分支(例如,dev 1 将有旧的他的 reflog 中的版本,所以你可以拉出当前的 master,并合并这个已被删除的旧版本,dev 2 将具有强制推送的版本,等等)。这是一项繁琐的任务,但这是恢复丢失数据的最佳方式。