文件从存储库中消失,但提交历史记录中没有删除
Files disappeared from repository, but there is no deletion in commit history
我有点困惑:几个以前提交的文件一夜之间消失了,但是没有一个提交表明它们被删除了。怎么会这样?
情况如下:
- 我在 BitBucket 上有一个私有 Git 存储库,只有一个分支。
- 我的团队中还有其他 3 个人,每个人都在使用 SourceTree 作为他们的 git 界面。
- 昨天我推送了一个提交 - 然后存储库就没问题了。
- 从那时起,所有其他 3 名团队成员都推送了几次提交:
- 一个是本地合并,
- 两人在线(即通过网页)
README.md
编辑,
- 有人在线(即通过网页)删除了一个不相关的文件,
- 而其他的是包含 1 个或 2 个文件的多次提交。
- 早上,我拉取了版本库,却发现版本库中没有了几个不同的文件,这些文件是由不同的人在不同的时间提交的:
- 它们从本地副本中消失了,
- 它们已从项目的 BitBucket 网站上的 Source 页面消失,
- 它们已从从 下载 页面下载的 .zip 中消失。
- 但是:
- none 我的提交后删除了这些文件中的任何一个,
- 我可以转到修改了 "disappeared" 个文件的较早提交,转到其摘要页面,查看其历史记录 - 其中 none 的提交也删除了文件。
- 我仔细检查过没有人动过
.gitignore
,但它自去年 12 月以来就没有动过。
此外,为了进一步混淆问题:几个月前我在一次提交中添加了文件 A.R
和 test-A.R
。后来我将 test-A.R
重命名为 test.A.R
。现在 A.R
仍在存储库中,但 test-A.R
和 test.A.R
都不在。
那么,什么可能导致文件从 Git 存储库中删除 而没有 任何实际删除它们的提交?
PS。当然,我向 BitBucket 支持部门提交了支持请求,但我不太相信他们会迅速做出回应。
很可能有人强制推送(即 git push -f ...
),这意味着他们本地历史记录中的任何内容都会替换远程上的分支。正如您所假设的那样,不需要删除内容的提交。如果开发人员从未同步他们的更改以查看服务器上的所有提交,然后强制推送他们的 out-of-date 历史记录,那么您可能会丢失提交。这一切都假设 "private" 存储库意味着您小组中的开发人员都可以写入存储库。
我会调整回购、分支或项目权限,以免再次发生这种情况。或者,如果您同意迁移到 gitflow 或功能流方法,则可以要求所有用户使用拉取请求。还要确保您的开发人员接受过如何使用 Git 的培训。
这里只是一个猜测,但如果每个人都进行了更改但有几个人丢失了他们的提交,那么我的猜测是没有丢失任何提交的人就是错误的人。
我有点困惑:几个以前提交的文件一夜之间消失了,但是没有一个提交表明它们被删除了。怎么会这样?
情况如下:
- 我在 BitBucket 上有一个私有 Git 存储库,只有一个分支。
- 我的团队中还有其他 3 个人,每个人都在使用 SourceTree 作为他们的 git 界面。
- 昨天我推送了一个提交 - 然后存储库就没问题了。
- 从那时起,所有其他 3 名团队成员都推送了几次提交:
- 一个是本地合并,
- 两人在线(即通过网页)
README.md
编辑, - 有人在线(即通过网页)删除了一个不相关的文件,
- 而其他的是包含 1 个或 2 个文件的多次提交。
- 早上,我拉取了版本库,却发现版本库中没有了几个不同的文件,这些文件是由不同的人在不同的时间提交的:
- 它们从本地副本中消失了,
- 它们已从项目的 BitBucket 网站上的 Source 页面消失,
- 它们已从从 下载 页面下载的 .zip 中消失。
- 但是:
- none 我的提交后删除了这些文件中的任何一个,
- 我可以转到修改了 "disappeared" 个文件的较早提交,转到其摘要页面,查看其历史记录 - 其中 none 的提交也删除了文件。
- 我仔细检查过没有人动过
.gitignore
,但它自去年 12 月以来就没有动过。
此外,为了进一步混淆问题:几个月前我在一次提交中添加了文件 A.R
和 test-A.R
。后来我将 test-A.R
重命名为 test.A.R
。现在 A.R
仍在存储库中,但 test-A.R
和 test.A.R
都不在。
那么,什么可能导致文件从 Git 存储库中删除 而没有 任何实际删除它们的提交?
PS。当然,我向 BitBucket 支持部门提交了支持请求,但我不太相信他们会迅速做出回应。
很可能有人强制推送(即 git push -f ...
),这意味着他们本地历史记录中的任何内容都会替换远程上的分支。正如您所假设的那样,不需要删除内容的提交。如果开发人员从未同步他们的更改以查看服务器上的所有提交,然后强制推送他们的 out-of-date 历史记录,那么您可能会丢失提交。这一切都假设 "private" 存储库意味着您小组中的开发人员都可以写入存储库。
我会调整回购、分支或项目权限,以免再次发生这种情况。或者,如果您同意迁移到 gitflow 或功能流方法,则可以要求所有用户使用拉取请求。还要确保您的开发人员接受过如何使用 Git 的培训。
这里只是一个猜测,但如果每个人都进行了更改但有几个人丢失了他们的提交,那么我的猜测是没有丢失任何提交的人就是错误的人。