Git checkout --our path/to/file.txt 返回"updated 0 paths from the index"



当试图修复二进制文件的合并问题时,我使用git checkout -我们的路径/to/file.txt,但它一直从索引返回更新的0路径。你知道哪里出了问题吗?

如前所述,这应该意味着没有更新任何内容,因为它不需要更新。

从Git 2.23 (Q3 2019)开始,正确的命令是

git restore --ours -- path/to/file.txt

如果你还在使用git checkout,请使用git 2.38 (Q3 2022),因为"git checkout">(man)错误地计算了它更新的路径,已被纠正。

参见Matheus Tavares (matheustavares)的commit 611c778, commit 11d14de, commit ed602c3 (14 Jul 2022)。
(由juno C Hamano -gitster- in commit acdb1e1, 01 Aug 2022)

checkout:修复关于更新条目的最终计数的两个错误

署名:Matheus Tavares

git checkout(man)<pathspec>的末尾,我们得到一条消息,告知在工作树中更新了多少条目。
然而,由于两个原因,这个数字可能是不准确的:

  1. 延迟条目当前被计数两次。
  2. 失败项被包含在计数中。

第一个问题的发生是因为计数器在将条目插入延迟签出队列之前首先增加,并且在finish_delayed_checkout()调用checkout_entry()时再次增加。

第二次发生是因为checkout_entry()中计数器的增量太早了,在条目被签出之前。

修复,将计数增加进一步的调用堆栈和删除重复增量延误条目。

请注意,我们必须为计数器保留每个条目的引用(并行签出和延迟签出),因为并非所有条目总是在同一个计数器上累积。

参见checkout_worktree(), atbuiltin/checkout.c的例子。