Git正在丢失单个文件的历史记录/内容
我在一家小公司工作,我们的Git回购有点混乱。我刚刚做了一次git pull,今天早些时候所做的更改都不见了 当我在主分支上进行HEAD操作时,Git正在丢失单个文件的历史记录/内容,git,git-log,Git,Git Log,我在一家小公司工作,我们的Git回购有点混乱。我刚刚做了一次git pull,今天早些时候所做的更改都不见了 当我在主分支上进行HEAD操作时,git log显示了我在其历史中的最后一次提交b94940c63ef965ce45b0d64ccfba4359134d2552 现在,如果我对丢失更改的问题文件执行了git log filename,则不会显示提交(只显示先前的提交) 执行git日志--follow filename,我的提交B94940C63EF965CE45B0D64CCBCFBA4
git log
显示了我在其历史中的最后一次提交b94940c63ef965ce45b0d64ccfba4359134d2552
现在,如果我对丢失更改的问题文件执行了git log filename
,则不会显示提交(只显示先前的提交)
执行git日志--follow filename,我的提交B94940C63EF965CE45B0D64CCBCFBA4359134D2552显示为最新的
如果我这样做了,那就足够了:
git checkout b94940c63ef965ce45b0d64ccfba4359134d2552
git log filename
然后会显示提交,并且我的更改会显示在文件中
换句话说,我所做的提交将显示在分支历史记录中(阻止分支合并),但是单个修改的文件在其历史记录中没有该提交!(除非我明确签出该提交)
问题:
首先,您应该掌握Git命令的作用以及存储在存储库中的数据
- 获取一个历史可视化工具,如或Gitk,以查看您的提交历史,并查看提交基于什么提交
- 做两件事:它从远程存储库检索新提交,并将远程存储库的头与当前头(在当前分支中)合并
git fetch
并手动合并需要合并的内容,而不是使用git pull
。这样,您就可以控制正在进行的编辑
至于你目前的情况,我不认为Git正在丢失数据。你说你的档案还在历史上。因此,现在您可能需要进行一些创造性的重置(恢复到旧版本)或修补程序(可能手动),以使项目文件达到您希望的状态。这应该只是一个注释,但很难阅读。签出master后:
git checkout master
它的输出是什么
git status
及
好的,我把问题解决了。当一个同事拉车时,他遇到了一些冲突。他没有解决问题,而是重置了每个暂存文件。这类似于对单个旧文件执行git签出旧版本。因此,在主文件的前面提到了一些旧版本的文件 现在我正在手动修复他炸掉的东西
故事的寓意:在单个文件上修改git操作(签出、重置等)是非常危险的。您可以在您想要查看哪些文件可能丢失提交的文件夹中实际使用此bash脚本:
#/bin/zsh
对于f,单位为$(查找。-name'*.php')
做
follow=$(git log--oneline-1--pretty=format:“%h”---$f)
log=$(git log--follow--oneline-1--pretty=格式:“%h”---$f)
如果[$log!=$follow];然后
echo“follow$follow,log$log=>f”
fi
完成
感谢您对Giggle和Gitk的建议。它们很有用,但只是告诉我控制台显示的相同信息;分支具有正确的历史记录-文件没有。不知何故,这些文件的版本是错误的。幸运的是,没有数据丢失,因此我可以进行重置。但我只是担心其他事情正在发生(事情很快就会再次破裂),这就是为什么我想知道事情是如何发展到这种地步的。给未来的评论者注意:whatchanged从git日志中得到了不同的结果——下面这不是真正的道德。其寓意是:“学会解决合并冲突”。这适用于任何风投,而且根据围绕它的问题有多少,这似乎是开发人员中最不熟练的技能。非常同意,@Ryan,而且问题往往会因为人们“手动恢复他吹出的东西”而延长而不是恢复更改并让他正确地进行合并。
git whatchanged -m -p <path>
git log --graph --oneline b94940c63ef965ce45b0d64ccfba4359134d2552..master