我遇到了一个奇怪的行为,想知道发生了什么事。
我感兴趣的提交的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
现在的问题是理解为什么在文件跟踪中出现中断,其中只修改了内容,而没有修改名称。
2条答案
按热度按时间mgdq6dx11#
尝试添加
--full-history
。git log
通常进行历史简化,当回溯时,它会尝试忽略您不需要的东西。Git通常对指定路径的解释是“show me commits that explain the current state of the file”,所以如果你知道的提交在分支上,并且在合并过程中修改了,当Git查看合并时,它会看到分支对文件的当前状态没有任何贡献,并且不会麻烦遍历它-无论那里有什么都被恢复了,所以它没有t影响您当前的 checkout ,它不是您正在寻找的任何更改的来源。
可能还有其他方法来产生你所看到的,但这将做到这一点,这是一个启发式的,当它有任何效果时,通常会做人们想要的事情,隐藏多余的提交(所以如果提交被cherrypicked,它不会显示所有的提交)。
你也可以添加
-m
来查看修改是否真的在合并过程中被恢复,git log
通常也不会检查这些,因为它假设你正在寻找导致修改的提交,而不是仅仅将它们向前推进的提交。z9ju0rcb2#
你的档案好像没什么变化。您可以检查哪些文件在提交中被更改: