git diff tree显示一个delete,但有';git日志中没有删除
git diff tree显示一个delete,但有';git日志中没有删除,git,Git,git diff tree表示文件已被删除,但当我运行git log时,它没有显示任何内容 也就是说: > git diff-tree --stat --summary 1990ca669fe..00de228dcdc -- t/tests.conf t/tests.conf | 9 --------- 1 files changed, 0 insertions(+), 9 deletions(-) delete mode 100644 t/tests.conf 当我跑步时: &g
git diff tree
表示文件已被删除,但当我运行git log
时,它没有显示任何内容
也就是说:
> git diff-tree --stat --summary 1990ca669fe..00de228dcdc -- t/tests.conf
t/tests.conf | 9 ---------
1 files changed, 0 insertions(+), 9 deletions(-)
delete mode 100644 t/tests.conf
当我跑步时:
> git log 1990ca669fe..00de228dcdc -- t/tests.conf
我没有输出
我知道如何追踪git为什么认为这个文件被删除了,因为它也在我尝试的合并中造成了问题吗
更新
这也不会产生任何输出:
> git log 1990ca669fe...00de228dcdc -- t/tests.conf
并且可以访问提交:
> git rev-list 00de228dcdc | grep 1990ca669fe
1990ca669fe9ec94d215945388458daba8d94747
我的猜测是1990ca669fe和00de228dcdc有不同的历史记录(两者都无法从另一个获得)。您可能需要此命令(三个点,而不是两个点): 它将显示历史记录每一方的提交(而不仅仅是导致00de228dcdc的提交) 简而言之:
要查看两侧(A和B)的“内容”,请使用
git diff A..B
和git log A..B
要仅从第二方(B)获取“stuff”,请使用
git diff A…B
和git log A…B
这是一个非常不幸的用户界面疣
“日志”命令用于查看历史图表(提交“范围”或提交集)。
它们将
A..B
解释为等同于B——而不是A
(即,可从B访问但不能从A访问的提交集)A…B
相当于ab--not$(git merge base--all A B)
(即,自它们分开以来,来自双方的提交集;这称为“A和B的对称差”)
“diff”命令用于比较两个特定的树或blob(主要是“端点”),而不是任何可能连接它们的历史记录。它们将A..B
解释为等同于A B
(即,这只是直接指定差异操作端点的另一种方式)<代码>A…B相当于$(git merge base A B)…B
或$(git merge base A B)B
(这是历史记录,因此上面的“大部分”都是这样)
发件人:
“diff”是指比较两个端点,而不是范围,范围符号(“…”和“…”)并不表示中“指定范围”部分中定义的范围
让我们考虑两种不同的历史:<代码> Git Log.A.B./Cult>和<代码> Git DIF.A.B./C>。 如果A和B线性相关(如下所示)
然后,您将看到这两种命令类型的类似输出git log A..B
将显示提交3、4和B。git diff A..B
将显示提交A和B引用的树之间的差异;此差异相当于累积由提交3、4和B表示的修补程序
由于A和B的合并基是A本身,所以这三个点版本是无趣的。对于“log”命令,A…B
表示ab--而不是$(git merge base--all A B)
,其结果是ab--nota
,意思是B--nota
,与A..B
相同。对于“diff”命令,A…B
意味着$(git merge base A B)…B
,它最终是A..B
但是,如果A和B具有不同的历史(两者都无法从另一个获得;如下所示)
然后,diff将包括来自两个分支的更改,而日志将仅显示对其中一个分支所做的提交git log A..B
将显示提交5、6和A.git diff A..B
将显示提交A和B引用的树之间的差异;此差异将包括由提交5、6和B以及3、4和A表示的修补程序
在本例中,三个点变体很有趣。对于“日志”命令,A…B
表示ab--not$(git merge base--all A B)
,这意味着ab--not D
,最终扩展到集合3、4、A、5、6、B(即可以从A或B访问但不能同时从两者访问的提交)。对于“diff”命令,A…B
意味着$(git merge base A B)…B
,它最终是D..B
(即,自从B从A分支后在“B侧”所做的所有更改)。这是一个很难解决的问题。我也很困惑。等待VonC澄清:Dha..很高兴我不是一个人。这有点让我发疯了。@Magnus@Tyrone我怀疑是因为“…”的含义可能不同于diff tree和log:看,或者我也怀疑这一点,但无法破解它。谢谢。如果您想用图形表示法回答git log
中的“…”和git diff
之间的差异,请参阅非常清楚的:“diff”是关于比较两个端点,而不是范围,范围符号(“…”和“…”)并不意味着范围
-克里斯坦克斯。这是一个很好的答案,所以我投了赞成票。不幸的是,git日志中的三点也不会产生任何输出。我的回购协议里有点奇怪。我认为罪魁祸首是还原的合并,但我在日志中看不到t/tests.conf实际被删除的任何内容,所以我不明白为什么git在我对这些提交进行区分时认为它被删除了。
git log 1990ca669fe...00de228dcdc -- t/tests.conf
---1---2---A---3---4---B
---1---D---3---4---A
\
5---6---B