我在一家小公司工作,我们的Git回购有点搞砸了.我刚刚做了一个git pull,我今天早些时候做出的改变都消失了!
当我在主分支上的HEAD上工作时,在其历史记录中git log显示我的最后一次提交b94940c63ef965ce45b0d64ccfba4359134d2552.
现在,如果我git log filename为丢失更改的有问题的文件执行操作,则不显示该提交(仅显示先前的提交).
执行git log --follow filename,我的提交b94940c63ef965ce45b0d64ccfba4359134d2552显示为最新.
果然,如果我这样做:
git checkout b94940c63ef965ce45b0d64ccfba4359134d2552
git log filename
Run Code Online (Sandbox Code Playgroud)
然后显示提交,我的更改在文件中!
换句话说,我所做的提交显示在分支历史记录中(阻止分支合并),但是单个修改过的文件在其历史记录中没有该提交!(除非我明确签出该提交).
问题:
这究竟是怎么发生的?
我如何解决它?(我们的仓库中有多个文件存在问题)
好了,找出了问题所在。当一个同事撤离时,他遇到了一些冲突。他没有解决问题,而是git重置每个暂存的文件。这类似于对单个旧文件执行git checkout old_version。因此,主服务器上的HEAD最终引用了一些具有old_version的文件。
现在,我正在手动恢复他炸掉的内容。
故事的寓意:修改单个文件上的git操作(签出,重置等)非常危险。