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

标签 git git-log

我在一家小公司工作,我们的 Git 存储库有点乱。我刚刚执行了 git pull,我今天早些时候所做的更改消失了!

当我在 master 分支上处理 HEAD 时,git log 会在其历史记录中显示我最后一次提交 b94940c63ef965ce45b0d64ccfba4359134d2552

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

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

当然如果我这样做了:

git checkout b94940c63ef965ce45b0d64ccfba4359134d2552
git log filename

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

换句话说,我所做的提交显示在分支历史记录中(阻止分支 merge ),但个别修改的文件在其历史记录中没有该提交! (除非我明确检查该提交)。

问题:

  1. 这到底是怎么发生的?

  2. 我该如何解决? (我们的 repo 中有多个文件的问题)

最佳答案

好的,问题解决了。当一位同事 pull 车时,他遇到了一些冲突。他没有解决,而是 git 重置了每个暂存文件。这类似于对单个旧文件执行 git checkout old_version。因此 master 上的 HEAD 最终引用了一些具有 old_version 的文件。

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

故事的寓意:修改单个文件的 git 操作( check out 、重置等)是非常危险的。

关于Git 正在丢失单个文件的历史记录/内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6950196/

相关文章:

git - 如何在 git 中以漂亮的格式查看一天的提交?

git - 查看未推送到远程的本地提交的 git 更改/差异

git - 使用什么命令来查看我的实际分支来自哪个分支?

git branch -f 和 git checkout 一步到位

git - .nyc_output 应该包含在 .gitignore 中吗?

python - 为什么我的容器找不到 pip 安装的包(通过 git)?

git - 如何从 git 存储库中删除文件的所有痕迹而不将其从目录中删除?

git - 如何找到两个分支之间的待提交提交(排除已经挑选/merge 的更改)?

git - 批量更改各种存储库中的git remote origin - bash命令

git - 如何查看只有一个用户提交的 git 日志?