Git-Commit是HEAD的祖先,但不影响HEAD,并且不会出现在gitk中<;路径>;

Git-Commit是HEAD的祖先,但不影响HEAD,并且不会出现在gitk中<;路径>;,git,version-control,distributed,Git,Version Control,Distributed,使我迷惑的文件是v5/employer/controllers/\u employer.php 在第一幅图中,您将看到Brian在14:55:47的提交中更改了文件,名为“提交内容的时间” 但该提交的唯一子项(第二个图像),Brian在14:56:45执行的合并操作,并没有显示对该文件的任何更改。但它是不同的 当您在合并操作后查看该文件的实际内容时,您可以看到它与之前的版本不同,但修补程序视图中没有显示任何内容 所以基本上,Brian在“提交时间”提交中的更改丢失了,至少对于该文件是这样 现

使我迷惑的文件是
v5/employer/controllers/\u employer.php

在第一幅图中,您将看到Brian在14:55:47的提交中更改了文件,名为“提交内容的时间”

但该提交的唯一子项(第二个图像),Brian在14:56:45执行的合并操作,并没有显示对该文件的任何更改。但它是不同的

当您在合并操作后查看该文件的实际内容时,您可以看到它与之前的版本不同,但修补程序视图中没有显示任何内容

所以基本上,Brian在“提交时间”提交中的更改丢失了,至少对于该文件是这样

现在,如果我运行
gitk--all v5/employer/controllers/_employer.php
,我会得到第三个映像--它根本不显示提交


这是怎么回事?我们都疯了吗,还是git真的丢失了我们的数据?

是的,它开始看起来像是一个冲突合并失败了。merge commit是“time to commit stuff”的子级,它有另一个父级(显然,这是一个合并),注释中指出_employer.php中存在冲突

我们回去仔细看了一下合并过程中发生的事情。事实证明,我们使用git gui的“使用远程版本”来尝试解决冲突,而不是像meld这样的外部合并工具,因为冲突其实很小。事实证明,该按钮不仅解决了与远程版本的冲突,它还使用合并的本地或远程版本推送整个文件

而且,由于该文件与其父提交之一相同,因此在该修订版中不会显示为修改后的文件。一开始这让我很困惑,因为文件在合并到另一个分支后发生了更改。但事实是,我并不是在一个分支中合并,我是在合并两个分支,它也可能是在另一个方向上合并,而文件实际上并没有改变


啊。嗯,这是用户错误(惊讶,惊讶)。这是一个警告,提醒您始终使用外部合并工具来解决冲突。

git reflog告诉您什么?我从未使用过git reflog,手册页也没有明确说明它在我的情况下有何帮助。你能再给我一点指导吗?另外,如果有帮助的话,在同一个提交中所做的其他更改已经使它一直到当前的头部。不是那个文件中的,它只是告诉你在整个存储库中最近完成的操作。可能会提示您为什么存储库会出错,还可能会提示您可以使用提交ID来恢复丢失的提交(通过git merge或git reset)。