我在一家小公司工作,我们的Git回购有点搞砸了。我刚做了一个git pull
,我今天早些时候所做的更改已经消失了!
当我在主分支上使用HEAD时,git log
在其历史记录中显示我最后一次提交 b94940c63ef965ce45b0d64ccfba4359134d2552 。
现在,如果我为丢失更改的有问题文件执行git log filename
,则不显示该提交(仅显示先前的提交)。
执行git log --follow filename
,我的提交 b94940c63ef965ce45b0d64ccfba4359134d2552 显示为最新。
如果我这样做肯定的话:
git checkout b94940c63ef965ce45b0d64ccfba4359134d2552
git log filename
然后显示提交和我的更改在文件中!
换句话说,我所做的提交显示在分支历史记录中(阻止分支合并),但是单个修改过的文件在其历史记录中没有该提交! (除非我明确签出该提交)。
问题:
这究竟是怎么发生的?
如何解决? (我们的仓库中有多个文件存在问题)
答案 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脚本:
masker.setProgressNode(fancyProgessnode);
masker.setProgressVisible(true);
masker.setSkin(new MaskerPaneSkin(masker));
&#13;