繁体   English   中英

列出两次 git 提交之间添加或删除的目录

[英]List the directories added or removed between two git commits

我可以使用类似的命令

git diff --stat <commit-hash-1> <commit-hash-2>

git diff --name-status <commit-hash-1> <commit-hash-2>

(例如,来自此处此处)列出在两次提交之间发生更改的文件,但我将如何列出目录? 即我将如何列出在两次提交之间添加或删除的目录?

注意这里有一个类似措辞的问题但问题和答案包括文件,我只想要目录。

这个答案中,你需要

  • 处理git diff --stat的输出以获取文件夹的名称
  • 检查是否
    • 该文件夹存在于<commit-hash-1>而不是<commit-hash-2> (意味着该路径的 ls-files 不列出任何文件)
    • 已删除文件夹的反向

在 Git 2.31(2021 年第一季度)中,“ git {diff,log} --{skip,rotate}-to=<path> ”允许用户丢弃早期路径的 diff 输出或将它们移到输出的末尾。

因此,您可以对文件夹顺序输出进行排序,以便以最佳预期方式处理所述输出。

请参阅Junio C gitster ( gitster ) 的commit 1eb4136 (2021 年 2 月 11 日
(由Junio C gitster合并-- gitster -- in commit 845d603 ,2021 年 2 月 25 日)

diff :--{旋转,跳过}-to=

在“ git difftool( man ) 的实现中,存在这样一种情况,即用户希望开始查看特定路径上的差异并继续查看其余部分,可选择绕到开头。
由于实现“ git diffman输出的后处理步骤这样的功能有些麻烦,让我们在内部使用两个新选项来支持它。

  • git diff --rotate-to=C( man ) ,当生成的补丁将显示路径ABCDE没有选项时,将“旋转”路径以显示补丁到CDEAB
    当没有显示C补丁时,这是一个错误。
  • git diff --skip-to=Cman会跳过C之前的路径,并显示CDE补丁。
    同样,当没有显示C补丁时,这是一个错误。
  • " git log [-p] " ( man ) " 也接受这两个选项,但如果指定路径没有变化,则不会报错。
    相反,输出路径集被旋转或跳过到指定路径或在指定路径之后排序的第一个路径。

diff-options现在包含在其手册页中

--skip-to=<file>

--rotate-to=<file>

从输出中丢弃命名之前的文件(即“跳到”),或将它们移动到输出的末尾(即“旋转到”)。 这些主要是为了使用git difftool命令而发明的,否则可能不会很有用。

gitdiffcore现在包含在其手册页中

diffcore-rotate:用于更改输出开始的路径

此转换采用一个路径名,并旋转一组文件对,以便给定路径名的文件对排在最前面,可选择丢弃在它之前的路径。 这用于实现--skip-to--rotate-to选项。 当指定的路径名​​不在文件对集合中时,这是一个错误,但是当与“ git log ”系列命令一起使用时出错是没有用的,因为期望给定的路径会被每个人修改是不合理的以及“git log”命令显示的每个提交。

因此,当与“ git log ”一起使用时,排序与给定路径名相同的文件对或排序后的第一个文件对是输出开始的位置。

将此转换与 diffcore-order 结合使用将产生意想不到的结果,因为当 diffcore-order 生效时,此转换的输入可能未排序。

您也可以恢复差异:

在 Git 2.31(2021 年第一季度)中,“ git difftoolman学习了--skip-to=<path>选项以从任意路径重新启动中断的会话。

请参阅ZheNing Hu ( adlternative ) 的commit 1c88102 (2021 年 2 月 19 日
(由Junio C gitster合并-- gitster -- in commit 6eea44c ,2021 年 2 月 25 日)

difftool.c : 学习一种从指定文件开始的新方法

签字人:胡哲宁

git difftool ( man )只允许我们依次选择要查看的文件。
如果有很多文件的提交并且我们在中间退出,我们将不得不再次遍历列表以获取我们想要查看的文件差异。
因此,教命令一个选项--skip-to=<path>以允许用户说较早路径的差异并不有趣(因为它们已经在较早的会话中看到)并使用命名路径启动此会话。

git difftool现在包含在其手册页中

--rotate-to=<file>

开始显示给定路径的差异,在它移动到结束和输出之前的路径。

--skip-to=<file>

开始显示给定路径的差异,跳过它之前的所有路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM