Git:试图在被删除的分支上追溯被压缩的提交——这可能吗

  • 本文关键字:提交 压缩 删除 Git 分支 git
  • 更新时间 :
  • 英文 :


在过去6周的某个时候,代码库中引入了一个问题。我已经确定是哪个分支引入了它(以及该分支的头/尾提交(,但我现在想开始跟踪该分支上的各个提交,以确定确切的原因。

我的问题是:

  1. 有问题的分支在合并到master后被生成服务器删除
  2. 在合并之前,提交被压缩(由构建服务器(
  3. 我无法访问本地环境,提交最初是在该环境中进行和推送的

我可以在我们的构建服务器上查看现已删除的分支的提交历史记录,但如果我尝试在本地签出其中一个分支,我只会得到错误

error: pathspec '<commit-id>' did not match any file(s) known to git

构建服务器也很乐意向我显示每次提交的diff,这意味着它们仍然在git的某个地方(或者构建服务器已经缓存了它们,但这似乎不太可能(。

我看到了对git reflog的引用,但这似乎只适用于本地存储库历史记录(或者,更有可能的是,我没有找到它提供的一些高级选项(。

有办法做到这一点吗?TIA。

我可以在构建服务器上看到现已删除的分支的提交历史。。。

登录到构建服务器,并在挤压之前根据最新的提交ID创建一个新分支:

git branch investigation-branch 1234abcd # use the last commit id before the squash
git push origin investigation-branch # assuming your remote is "origin"

现在从您的本地机器中提取,您应该能够像以前一样看到该分支。如果您愿意,您可以在完成调查后简单地删除远程上的分支。

注意:如果您不想登录到构建服务器,那么可能另一台机器也有提交。可能仍然有它们的地方是:

  1. 推送提交的原始机器。(已经排除了您无法访问此项的可能性。(
  2. 生成服务器。(已确认。(
  3. 在分支上存在这些提交的时间窗口期间提取回购的任何机器尚未被垃圾收集。所需的提交在被压扁之前在分支上存在的时间越长,它们被另一台机器获取的概率就越大。请注意,孤立提交的默认垃圾收集时间为90天,因此6周前完全在默认时间窗口内,尽管可以手动运行命令来清理本地repo并更快地清除这些孤立提交
  4. 您使用集中式存储库吗?如果是,它应该仍然有一个未引用提交的副本,并且可能有一个访问它们的机制。有些工具甚至允许您直接从UI从任何历史提交创建新分支。这基本上可以实现您的目标,而无需登录服务器手动完成

最新更新