Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git diff tree显示一个delete,但有';git日志中没有删除_Git - Fatal编程技术网

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