Git正在丢失单个文件的历史/内容

时间:2011-08-05 00:34:45

标签: git git-log

我在一家小公司工作,我们的Git回购有点搞砸了。我刚做了一个git pull,我今天早些时候所做的更改已经消失了!

当我在主分支上使用HEAD时,git log在其历史记录中显示我最后一次提交 b94940c63ef965ce45b0d64ccfba4359134d2552

现在,如果我为丢失更改的有问题文件执行git log filename,则不显示该提交(仅显示先前的提交)。

执行git log --follow filename,我的提交 b94940c63ef965ce45b0d64ccfba4359134d2552 显示为最新。

如果我这样做肯定的话:

git checkout b94940c63ef965ce45b0d64ccfba4359134d2552
git log filename

然后显示提交我的更改在文件中!

换句话说,我所做的提交显示在分支历史记录中(阻止分支合并),但是单个修改过的文件在其历史记录中没有该提交! (除非我明确签出该提交)。

问题:

  1. 这究竟是怎么发生的?

  2. 如何解决? (我们的仓库中有多个文件存在问题)

4 个答案:

答案 0 :(得分:4)

好吧想出了问题。当一位同事拉扯时,他遇到了一些冲突。他没有解析,而是重置每个分段文件。这类似于在单个旧文件上执行git checkout old_version。所以主人的HEAD最终引用了一些有old_version的文件。

现在我正在手动恢复他吹的东西。

故事的道德:修改单个文件的git操作(检出,重置等)是非常危险的。

答案 1 :(得分:1)

这应该只是一个评论,但很难阅读。检查出主人后:

git checkout master

的输出是什么
git status

git whatchanged -m -p <path>

git log --graph --oneline b94940c63ef965ce45b0d64ccfba4359134d2552..master

答案 2 :(得分:0)

首先,您应该掌握Git命令的作用以及存储库中存储的数据。

  • 获取像Giggle或Gitk这样的历史可视化工具,以查看您的提交历史记录,并根据提交内容查看提交内容。

  • git pull做了两件事:它从远程存储库中检索新提交,它将远程存储库的头部与当前头部合并(在当前分支中) )。

因此,鉴于此,您可能希望将来更加小心。您可以执行git pull并手动合并需要合并的内容,而不是使用git fetch。这样你就可以控制你正在进行的编辑。

至于你目前的情况,我认为Git不会丢失数据。你说你的文件仍在历史中。因此,现在您可能需要进行一些创造性的重置(恢复到旧版本)或补丁(可能是手动)以使您的项目文件进入您希望它们的状态。

答案 3 :(得分:0)

您实际上可以在要查看可能丢失其提交的文件的文件夹中使用此bash脚本:

&#13;
&#13;
masker.setProgressNode(fancyProgessnode);
 masker.setProgressVisible(true);
 masker.setSkin(new MaskerPaneSkin(masker));
&#13;
&#13;
&#13;