文件从存储库中消失,但提交历史记录中没有删除

Dra*_*mok 3 git bitbucket atlassian-sourcetree sourcetree

我手头有一个难题:几个先前提交的文件一夜之间消失了,但没有一个提交表明它们已被删除。怎么会这样?

情况如下:

  • 我在 BitBucket 上有一个私有 Git 存储库,只有一个分支。
  • 我的团队中还有 3 个人,每个人都使用 SourceTree 作为他们的 git 接口。
  • 昨天我推送了一个提交 - 之后存储库没问题。
  • 从那以后,所有其他 3 名团队成员都推送了几次提交:
    • 一个是本地合并,
    • 两个是在线(即通过网页)README.md编辑,
    • 一个是在线(即通过网页)删除一个不相关的文件,
    • 其他的则是包含 1 或 2 个文件的几次提交。
  • 早上,我拉了仓库,才发现仓库里没有几个不同的文件,这些文件是不同人在不同时间提交的:
    • 他们从本地副本中消失了,
    • 他们从项目的 BitBucket 网站上的Source页面消失了,
    • 它们从下载页面下载的 .zip 中消失了。
  • 然而:
    • 在我删除任何这些文件之后,没有任何提交,
    • 我可以转到修改“消失”文件的较早提交,转到其摘要页面,查看其历史记录 - 并且其中的任何提交也不会删除该文件。
  • 我仔细检查过没有人.gitignore碰过 ,但自去年 12 月以来它就没有动过。

此外,作为进一步混淆问题:几个月前,我添加的文件A.R,并test-A.R在一个单一的提交。后来我将其重命名test-A.Rtest.A.R. 现在A.R仍然在存储库中,但既不存在test-A.R也不test.A.R仍然存在。

那么,什么可能导致文件从 Git 存储库中删除而没有任何提交实际删除它们?


附注。当然,我向 BitBucket Support 提交了一张支持票,但我不太相信他们会很快做出回应。

jbu*_*jbu 7

很可能有人强制推送(即git push -f ...),这意味着他们本地历史中的任何内容都替换了远程上的分支。正如您似乎假设的那样,不需要进行删除内容的提交。如果开发人员从未同步他们的更改以查看服务器上的所有提交,然后强制推送其过时的历史记录,那么您可能会丢失提交。这一切都假设“私有”存储库是指您小组中的开发人员都可以写入存储库。

我会调整 repo、branch 或 project 权限,以免再次发生这种情况。或者,如果您同意迁移到 gitflow 或功能流方法,您可以要求所有用户使用拉取请求。还要确保您的开发人员接受过如何使用 Git 的教育。

这里只是一个猜测,但很可能如果每个人都进行了更改但有几个人丢失了他们的提交,那么我的猜测是没有丢失任何提交的人是过错的人。