【问题标题】:combine 'git status' and find command with mmin or mtime option结合 'git status' 和 find 命令与 mmin 或 mtime 选项
【发布时间】:2012-08-04 15:22:16
【问题描述】:

'git status' 命令给出自上次提交以来更改的文件列表。

带有 mmin 或 mtime 选项的 find 命令给出在给定时间长度内保存的文件列表。但它也会包含我编辑过的文件,然后撤消更改,即内容未更改的文件。

我需要的是获取在给定时间长度内已修改(内容已更改)的文件列表。有可能吗?

谢谢

【问题讨论】:

    标签: linux git time find diff


    【解决方案1】:

    你想要的是 Git whatchanged

    这是一个使用whatchanged 显示添加文件的示例(我没有碰巧在我使用的测试存储库中修改过文件,但您可以轻松地将结果限制为修改过的文件而不是添加的文件):

    $ git whatchanged --after='2012-07-07 17:20' --before='2012-07-28 23:31' --diff-filter=A -r --oneline --name-only
    82b9dcf F
    E/F
    95a02ce D
    D
    

    如手册中所述,whatchanged 在幕后使用rev-listdiff-treewhatchanged 还使用rev-listdiff-tree 可用的选项。 diff-tree --diff-filter 选项将:

    仅选择已添加 (A)、已复制 (C)、已删除 (D)、已修改 (M)、重命名 (R)、类型(即常规文件、符号链接、子模块...)已更改的文件(T)、未合并 (U)、未知 (X) 或它们的配对已断开 (B)。

    如果你想直接使用rev-listdiff-tree(避免提交日志whatchanged想要输出),你可以使用:

    $ git diff-tree --diff-filter=A -r --name-only $(git rev-list -n 1 --before='2012-07-07 17:20' HEAD) $(git rev-list -n 1 --before='2012-07-28 23:31' HEAD)
    D
    E/F
    

    【讨论】:

    • 谢谢,这是一个非常有用的命令。我必须使用--pretty=oneline 而不是--oneline 才能让它工作。但我认为它提供了在给定时间范围内提交的所有文件。它包括在给定时间范围之前保存的文件。
    猜你喜欢
    • 2016-12-09
    • 1970-01-01
    • 2014-10-25
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 2018-11-20
    相关资源
    最近更新 更多