“git merge”将最近编辑的文件重置为旧版本

时间:2015-10-29 14:31:16

标签: git github

我在GitHub上使用遥控器的私人存储库内部工作。今天早上同步我的本地存储库之后,我发现我的很多工作都已丢失并重置为以前的版本。截至目前,似乎提交历史记录反映了正确的工作,但是当您查看文件时,它们已经过时数天到数周。假设这是一个本地问题,我已经尝试了各种各样的事情,包括git reset --hard [hash],事情仍然不同步。

使用GitHub文件浏览器,与提交历史记录实际显示的内容相比,某些目录和文件似乎与它们关联的错误最新版本哈希值。这导致事情在实际进行最后一次提交后的几天到几周内过时了。

此时我们已经能够复制问题的原因,但这很奇怪,因为合并显然导致git恢复到旧文件:

  1. git reset --hard [hash] - 查看文件反映了正确的工作
  2. 文件有一个微不足道的变化
  3. git add [file]
  4. git commit -m [notes]
  5. git pull - 对已提交的文件执行合并,之后文件将还原为已提交的工作文件的旧版本。
  6. 因此,什么可能导致此问题以及如何解决它?

1 个答案:

答案 0 :(得分:1)

这听起来像服务器上的历史记录被重写(通常是push -f的结果)并且您的本地克隆仍然具有旧历史记录。对于Git来说,这只不过是你和遥控器之间的分支(两者都有"新的"其他人不知道的提交)。为了协调这段历史,Git需要执行合并。当Git尝试合并文件内容时,这可能会导致意外结果,因此在新创建的合并提交中可能会丢失更改。

如果您确定遥控器上的版本是正确的,则可以执行以下步骤以使本地克隆处于相同的状态:

  1. git fetch获取所有远程提交
  2. git reset --hard origin/master 小心,删除未经修改的更改
  3. 必须对包含旧/重写历史的每个克隆执行此操作。更简单的方法是获取远程存储库的新克隆。