生成要删除的所有文件的列表以及要在两个git提交之间添加的所有文件

时间:2018-03-07 18:25:06

标签: git diff

我有一个旧的系统,我必须处理,接口是垃圾。我无法重命名或移动文件。我必须删除旧位置并添加新位置。

我这样做是通过提供要删除的所有文件的列表,然后提供要添加/更新的所有文件

当我重新命名文件并在git中提交时,它被视为rename操作,所以当我运行时

git diff SHA1 SHA2 --name-only

我得到所有删除的列表,添加和重命名为一个。如果我跑

git diff SHA1 SHA2 --name-only --diff-filter=R

我得到了操作的最终结果(文件被重命名为但不是从重命名为)。如果我跑

我删除了文件,但没有将重命名为的文件。

在一个命令中需要这个,我可以在以后产生重叠并重复输出。

帮助?感谢。

1 个答案:

答案 0 :(得分:3)

在git中没有重命名操作。当diff报告重命名时,它会在一条路径上看到删除,在另一条路径上看到添加,计算新文件是否足够相似"对于被删除的内容,它可能只是一个重命名,并推断出你喜欢它的报道。

如果您不希望将它们报告为重命名,而是希望分别报告删除和添加,那么您可以说

git diff SHA1 SHA2 --name-only --no-renames

更有用的是,你可以说

git diff SHA1 SHA2 --name-status --no-renames

,已删除文件的行将以D开头,添加文件的行将以A开头。

另一方面,如果您正在使用--name-status,那么根据您对输出的处理方式,也许可以不关闭重命名检测;然后你会得到像

这样的东西
$ git diff SHA1 SHA2 --name-status

R100   file1   file2

其中IIRC R100表示"重命名为100%内容匹配"

但话又说回来,如果在单独的行上输入条目对您来说效果很好,那么关闭重命名检测可能会更有效(特别是如果实际发生了很多删除和添加)。

我想最后一个排列:如果你真的只想要文件名列表,那么你可以制作一个添加列表

git diff SHA1 SHA2 --name-only --no-renames --diff-filter=A

和删除之一

git diff SHA1 SHA2 --name-only --no-renames --diff-filter=D