如何查找已更改的唯一文件列表

时间:2014-08-13 14:55:38

标签: git

如何使用git获取已更改的文件的唯一列表?我正在寻找专门修改或添加的文件。

这个命令还不错,但它有点过于冗长 - 我不关心它所属的提交,而且它也不是唯一的 - 如果同一个文件被更改了在多次提交中,它被列出两次。

git log --name-status --oneline
  
      
  • e5a7926更改测试的措辞
      | M spec / entities / agent_evaluator_spec.rb
  •   
  • 7b2a81c实施自动转置功能
      | M lib / scoring / entities / agent_evaluator.rb
      | M spec / entities / agent_evaluator_spec.rb
      | M spec / services / agent_evaluation_spec.rb
  •   
  • a5de237将unused_players添加到agent_evaluation规格中   | M spec / entities / agent_evaluator_spec.rb
      | M spec / services / agent_evaluation_spec.rb
      | M spec / support / factory_helpers.rb
  •   
  • 083757c重构代理服务规范
      | M spec / services / agent_service_spec.rb
      | M spec / support / editor_service_stub.rb
  •   

我正在寻找类似的东西:

  

规格/实体/ agent_evaluator_spec.rb
  LIB /得分/实体/ agent_evaluator.rb
  投机/服务/ agent_evaluation_spec.rb
  规格/支持/ factory_helpers.rb
  投机/服务/ agent_service_spec.rb
  规格/支持/ editor_service_stub.rb
  ...

2 个答案:

答案 0 :(得分:2)

目前还没有办法将git-log限制为只更改所有文件名的列表而不查看提交历史记录。但是,你当然可以删除你不关心的东西。例如:

git whatchanged --oneline --name-only |
    grep --extended-regexp --invert-match '^[[:xdigit:]]{7,}'

这将显示历史记录,包括每次提交中更改的文件名,然后egrep将删除所有提交ID和提交摘要。这使您只需在每次提交期间更改的文件名列表,而无需伴随提交历史记录。

答案 1 :(得分:2)

CodeGnome's answer相似但略有不同:

git log --pretty=format: --name-only $more_options | grep . | sort -u

对于$more_options,您可能需要:

--diff-filter=M

或:

--diff-filter=AM --no-renames

或类似的东西。 --diff-filter使用您--name-status看到的状态来禁止或包含特定条目。 (有关详细信息,请参阅git diff documentation。)因为即使使用--pretty=format:(空格式)也会输出日志消息的空白行,我们会引入grep .以仅使用至少一行字符,然后我们通过sort -u运行生成的文件名,以获得uniq - 结果。