首页 > 解决方案 > git ls-files --modified 也列出已删除的文件

问题描述

git ls-files --modified

应该只列出修改过的文件。但是,它也包括已删除的文件。

另一方面,

git ls-files --deleted

仅列出已删除的文件,这是预期的。

当有一个单独的命令仅列出已删除的文件时,为什么 git 将已删除的文件视为已修改?

系统信息:

> git --version
git version 1.7.1

> lsb_release -a
LSB Version:    :base-4.0-amd64:base-4.0-ia32:base-4.0-noarch:core-4.0-amd64:core-4.0-ia32:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-ia32:printing-4.0-noarch
Distributor ID: CentOS
Description:    CentOS release 6.8 (Final)
Release:        6.8
Codename:       Final

> uname -m
x86_64

> echo $0
/bin/tcsh

标签: git

解决方案


git ls-files --modified认为已删除的文件已修改,因为它实际上已被修改(以至于完全丢失)。

如果您需要从--modifiedor-m输出中减去已删除的文件,您有多种选择:

  • 使用git status --porcelain(不确定这是否存在于您在此处与 CentOS 一起使用的真正古老的 Git 中),并解释其输出;
  • 使用git ls-files两次,一次得到修改后的包含删除的列表,再次得到删除的列表,减去已删除的文件;或者
  • 使用git ls-files -m -d -t(可以压缩为git ls-files -mdt)并解释其输出。

对于最后一个测试用例,我为 Git 克隆了 Git 存储库,在工作树中稍微修改了 Makefile,然后zlib.c从工作树中删除:

$ git ls-files -mdt
C Makefile
R zlib.c
C zlib.c

请注意如何zlib.c出现两次,一次被R移除,一次被C挂起(修改)。当您阅读结果时,让R状态覆盖状态只是编程的小问题。C


推荐阅读