git - 即使文件更改,Git 也不会显示更改
问题描述
git坏了还是我们做错了什么?;-)
我们发现,在最新版本的 git 存储库中更改了一个文件,我试图弄清楚它何时使用whatchanged
.
怎么会这样:
$ git checkout 27773b72432e86d308d25d666663f237e50aa3fd Tools/foo.php
$ md5sum Tools/foo.php
85552061cae9832c11eb6607ac88e3d8 Tools/foo.php
$ git checkout master Tools/foo.php
$ md5sum Tools/foo.php
f38f51232785a432af2d1bd8db4429ed Tools/foo.php
但:
$ git whatchanged 27773b72432e86d308d25d666663f237e50aa3fd..master | grep foo.php
# empty result
怎么会这样?
解决方案
简短的回答是,您可能想尝试使用
git whatchanged master..27773b72432e86d308d25d666663f237e50aa3fd
(确实,您确实应该使用它git log
,但这与为什么它没有达到您的预期无关。)
以下是一些有助于理解原因的信息:
正如其他用户所建议的那样,该符号27773b72432e86d308d25d666663f237e50aa3fd..master
并不意味着“一系列提交开始于(但不包括)并结束于(并包括)”。它有时会简化为那个,但这不是它的意思。(你马上就会明白为什么区分很重要。)27773b7
master
master
它的意思是,“所有可以从 到达,但不能从到达的提交27773b7
”。(“可达”意味着通过父指针。)
现在,如果我们假设您的提交图看起来像
.... 27773b7 -- A -- B -- C <--(master)
那么这将减少到其他人已经确定的“范围”类型。但在这种情况下,您不会遇到问题。那是因为您已经证明 at的文件与( )27773b7
的文件不同,这意味着要么或要么必须更改它。如果您的提交图看起来像那样。C
master
A
B
C
所以我们可以得出结论,您的提交图看起来不像那样。
它的另一种外观是
--- o -- A -- 27773b7 -- x ...
\
B -- C <--(master)
在此图中,27773b7...master
仅表示B
和C
,因为A
不能通过 到达master
,而通过o
可以到达master
,也可以通过 到达27773b7
。
现在文件不同的原因可能27773b7
是它被自己A
或27773b7
自己改变了。在任何一种情况下,使用27773b7^
(如其他答案所示)都无济于事。
这让我回到了我的观点:如果您真的想将A..B
符号视为定义范围,则不能假定范围的开头是A
; 如果有的话,你会期望它是 and 之间的合并基础A
(B
如果有的话;有时它可能只是B
s 提交层次结构的根) - 这等于A
只有 ifA
可以从B
. 无论如何,你不能假设它是一个线性的提交范围。
但是了解它真正指示的提交图的子集会更清楚,如果A..B
没有显示任何内容,您可能需要尝试B..A
。
推荐阅读
- python-3.x - opencv问题足够的值来解包(预期3,得到2)
- google-cloud-platform - 谷歌视觉产品搜索的图像大小调整最佳实践
- python - 如何从 Dash Plotly 应用程序通过浏览器进行 API 调用
- email - 谷歌应用程序脚本 gmail 应用程序作为别名发送
- javascript - 如何使用 API 数据正确更新 React & Chart.js 应用程序中的图表
- ios - iOS 7 和 TLS1.2 支持
- jquery - 我可以在 jQuery 中将 find()、prop() 和 css() 写在一行中吗?
- regex - 用于不一致的 html 颜色代码的正则表达式
- google-analytics - 在 Google Universal Analytics 事件之后获取交易详情
- ios - 我想在页面 ViewController 的开头显示广告