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

时间:2017-01-31 09:26:36

标签: git bitbucket atlassian-sourcetree sourcetree

我手上有一点谜题:几个先前提交的文件在一夜之间消失了,但没有一个提交显示它们已被删除。怎么会发生这种情况?

情况如下:

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

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

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

PS。当然,我向BitBucket支持提交了一张支持票,但我并不十分相信他们会快速回复。

1 个答案:

答案 0 :(得分:3)

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

我会调整repo,branch或project权限,这样就不会再发生了。或者,如果您可以转到gitflow或功能流方法,则可以要求所有用户都使用拉取请求。还要确保你的开发人员接受过如何使用Git的教育。

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