我在GitHub上使用遥控器的私人存储库内部工作。今天早上同步我的本地存储库之后,我发现我的很多工作都已丢失并重置为以前的版本。截至目前,似乎提交历史记录反映了正确的工作,但是当您查看文件时,它们已经过时数天到数周。假设这是一个本地问题,我已经尝试了各种各样的事情,包括git reset --hard [hash]
,事情仍然不同步。
使用GitHub文件浏览器,与提交历史记录实际显示的内容相比,某些目录和文件似乎与它们关联的错误最新版本哈希值。这导致事情在实际进行最后一次提交后的几天到几周内过时了。
此时我们已经能够复制问题的原因,但这很奇怪,因为合并显然导致git恢复到旧文件:
git reset --hard [hash]
- 查看文件反映了正确的工作git add [file]
git commit -m [notes]
git pull
- 对已提交的文件执行合并,之后文件将还原为已提交的工作文件的旧版本。因此,什么可能导致此问题以及如何解决它?
答案 0 :(得分:1)
这听起来像服务器上的历史记录被重写(通常是push -f
的结果)并且您的本地克隆仍然具有旧历史记录。对于Git来说,这只不过是你和遥控器之间的分支(两者都有"新的"其他人不知道的提交)。为了协调这段历史,Git需要执行合并。当Git尝试合并文件内容时,这可能会导致意外结果,因此在新创建的合并提交中可能会丢失更改。
如果您确定遥控器上的版本是正确的,则可以执行以下步骤以使本地克隆处于相同的状态:
git fetch
获取所有远程提交git reset --hard origin/master
小心,删除未经修改的更改 必须对包含旧/重写历史的每个克隆执行此操作。更简单的方法是获取远程存储库的新克隆。