我在一家小公司工作,我们的 Git 存储库有点乱。我刚刚执行了 git pull
,我今天早些时候所做的更改消失了!
当我在 master 分支上处理 HEAD 时,git log
会在其历史记录中显示我最后一次提交 b94940c63ef965ce45b0d64ccfba4359134d2552。
现在,如果我对丢失更改的有问题的文件执行 git log filename
,则不会显示该提交(仅显示较早的提交)。
执行 git log --follow filename
,我的提交 b94940c63ef965ce45b0d64ccfba4359134d2552 显示为最新。
当然如果我这样做了:
git checkout b94940c63ef965ce45b0d64ccfba4359134d2552
git log filename
然后显示提交并且我的更改在文件中!
换句话说,我所做的提交显示在分支历史记录中(阻止分支 merge ),但个别修改的文件在其历史记录中没有该提交! (除非我明确检查该提交)。
问题:
这到底是怎么发生的?
我该如何解决? (我们的 repo 中有多个文件的问题)
最佳答案
好的,问题解决了。当一位同事 pull 车时,他遇到了一些冲突。他没有解决,而是 git 重置了每个暂存文件。这类似于对单个旧文件执行 git checkout old_version。因此 master 上的 HEAD 最终引用了一些具有 old_version 的文件。
现在我正在手动恢复他吹出的东西。
故事的寓意:修改单个文件的 git 操作( check out 、重置等)是非常危险的。
关于Git 正在丢失单个文件的历史记录/内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6950196/