git报告 – 获取更改的文件

由于官僚主义,我需要得到我的存储库中所有已更改文件的列表(我从现有的源代码开始)。

我应该运行什么来获得这个列表?

对于在给定SHA和当前提交之间更改的文件:

git diff --name-only <starting SHA> HEAD 

或者如果您想包含已更改但尚未提交的文件:

 git diff --name-only <starting SHA> 

更一般地说,下面的语法总是告诉你哪些文件在两个提交(由他们的SHA或其他名字指定)之间改变了:

 git diff --name-only <commit1> <commit2> 

要查找自上次提交以来修改的所有文件的名称:

 git diff --name-only 

或者(有关更多信息,包括未跟踪的文件):

 git status 
  • 要列出所有未处理的跟踪更改的文件:

     git diff --name-only 
  • 要列出所有已执行跟踪的已更改文件:

     git diff --name-only --staged 
  • 要列出所有分阶段和非分期跟踪更改的文件:

     { git diff --name-only ; git diff --name-only --staged ; } | sort | uniq 
  • 要列出所有未跟踪的文件(通过git status列出的文件,因此不包括任何被忽略的文件):

     git ls-files --other --exclude-standard 

如果你在一个shell脚本中使用这个,并且你想以编程的方式检查这些命令是否返回了任何东西,你会对git diff--exit-code选项感兴趣。

当我添加/修改/删除了许多文件(自上次提交以来),我喜欢按时间顺序查看这些修改。

为此我使用:

  • 列出所有非暂存文件:

     git ls-files --other --modified --exclude-standard 
  • 要获取每个文件的最后修改date:

     while read filename; do echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename; done 
  • 将其从最旧到最近sorting:

     sort 

别名使其更易于使用:

 alias gstlast='git ls-files --other --modified --exclude-standard|while read filename; do echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename; done|sort' 

例如:

 username@hostname:~> gstlast 2015-01-20 11:40:05.000000000 +0000 .cpl/params/libelf 2015-01-21 09:02:58.435823000 +0000 .cpl/params/glib 2015-01-21 09:07:32.744336000 +0000 .cpl/params/libsecret 2015-01-21 09:10:01.294778000 +0000 .cpl/_deps 2015-01-21 09:17:42.846372000 +0000 .cpl/params/npth 2015-01-21 12:12:19.002718000 +0000 sbin/git-rcd 

我现在可以检查我的修改,从最古老到最近。

git show你可以得到类似的结果。 为了看看提交(如它看起来在git log视图)与文件列表中包含,使用:

 git show --name-only [commit-id_A]^..[commit-id_B] 

其中[commit-id_A]是最初的提交, [commit-id_B]是最后一个提交,比你想显示。

^符号特别注意 。 如果你不这样做,commit-id_A信息将不会被部署。

这可以使用像下面的git status和grep命令来完成。 像git status -s | grep M git status -s | grep M

 root@user-ubuntu:~/project-repo-directory# git status -s | grep M M src/.../file1.js M src/.../file2.js M src/.../file3.js ....