对于给定的文件,什么可以使提交不出现在git日志中?

cpjpxq1n  于 2023-06-28  发布在  Git
关注(0)|答案(2)|浏览(125)

我遇到了一个奇怪的行为,想知道发生了什么事。
我感兴趣的提交的hash为4679774 add 0540 e3 e8 f62937 ed 16855694 a3 f465,当查看my-file.htm的历史记录时,它出现在我的dev分支上

$git log origin/dev my-file.htm | grep 4679774add0540e3e8f62937ed16855694a3f465
commit 4679774add0540e3e8f62937ed16855694a3f465

提交中唯一的修改是在我感兴趣的文件上:

$git log --name-status -1 --pretty='' 4679774add0540e3e8f62937ed16855694a3f465
M       my-file.htm

现在,我在我的专长分支上也有那个commit:

$git log origin/feat | grep 4679774add0540e3e8f62937ed16855694a3f465
commit 4679774add0540e3e8f62937ed16855694a3f465

奇怪的是,当查看feat分支上文件的历史记录时,提交不会出现:

$git log origin/feat my-file.htm | grep 4679774add0540e3e8f62937ed16855694a3f465
< Nothing >

我错过了什么?
更新:--follow选项允许我找回我的提交

$git log -6 origin/feat --raw --oneline --follow -- my-file.htm
38f0c748ab
:100644 100644 e1ab553d85 40ec4c0996 M  my-file.htm

9fc49fff8b
:100644 100644 14911a3459 e1ab553d85 M  my-file.htm

4679774add <=== HERE IT IS!
:100644 100644 f9c83e9a19 40ec4c0996 M  my-file.htm

a9ed386008
:100644 100644 41721ec5ce f9c83e9a19 M  my-file.htm

f5256795c9
:100644 100644 14911a3459 41721ec5ce M  my-file.htm

a859b07f2d
:100644 100644 e5c188935d 14911a3459 M  my-file.htm

现在的问题是理解为什么在文件跟踪中出现中断,其中只修改了内容,而没有修改名称。

mgdq6dx1

mgdq6dx11#

尝试添加--full-historygit log通常进行历史简化,当回溯时,它会尝试忽略您不需要的东西。
Git通常对指定路径的解释是“show me commits that explain the current state of the file”,所以如果你知道的提交在分支上,并且在合并过程中修改了,当Git查看合并时,它会看到分支对文件的当前状态没有任何贡献,并且不会麻烦遍历它-无论那里有什么都被恢复了,所以它没有t影响您当前的 checkout ,它不是您正在寻找的任何更改的来源。
可能还有其他方法来产生你所看到的,但这将做到这一点,这是一个启发式的,当它有任何效果时,通常会做人们想要的事情,隐藏多余的提交(所以如果提交被cherrypicked,它不会显示所有的提交)。
你也可以添加-m来查看修改是否真的在合并过程中被恢复,git log通常也不会检查这些,因为它假设你正在寻找导致修改的提交,而不是仅仅将它们向前推进的提交。

z9ju0rcb

z9ju0rcb2#

你的档案好像没什么变化。您可以检查哪些文件在提交中被更改:

git log --name-status -1 --pretty='' 4679774add0540e3e8f62937ed16855694a3f465

相关问题