如何仅列出在两次提交之间更改的文件的名称

问:

我在存储库中有一堆提交。我想查看两次提交之间更改的文件列表 - 从 SHA1 到 SHA2。

我应该使用什么命令?

答1:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

git diff --name-only SHA1 SHA2

您只需要包含足够的 SHA 哈希来识别提交。你也可以这样做,例如

git diff --name-only HEAD~10 HEAD~5

查看第十次最新提交和第五次最新提交(左右)之间的差异。

这也适用于 git show。 git show --name-only SHA1。

git diff --name-status [TAG|SHA1] 也显示了对文件进行了哪些操作

您也可以执行以下操作: git diff --name-only HEAD@{3} HEAD@{0} 以获得您想要比较的确切提交。

@AugustLilleaas 实际使用 show 只会显示 2 个特定提交,如果您在这 2 个提交之间有提交,它们将被排除在外

如下所述,git diff --name-status 似乎不想显示添加的文件。 @sschuberth 指出 git show,这对我来说似乎工作正常:git show --pretty=format: --name-status。只是做 git show --name-status 会提供更多信息,但仍然很好而且很密集......这将是我的新 goto 命令;)

答2:

HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com

git diff --name-status [SHA1 [SHA2]]

就像–name-only,除了你得到一个简单的前缀告诉你文件发生了什么(修改,删除,添加…)

git log --name-status --oneline [SHA1..SHA2]

类似,但提交在提交消息之后列出,因此您可以看到文件何时更改。

如果您对某些文件/文件夹发生的事情感兴趣,您可以将 – […] 附加到 git 日志版本。

如果您想查看单个提交发生了什么,请将其称为 SHA1,然后执行 git log --name-status --oneline [SHA1^…SHA1]

文件状态标志:

Flag 名称 含义 M modified 文件已修改 C copy-edit 文件已复制并修改 R rename-edit 文件已重命名和修改 A 添加的文件已添加 D 已删除 文件已删除 U unmerged 文件合并后有冲突

我碰巧说 git diff --name-status 它确实给出了“添加的文件”。

对于 git log,它需要在 SHA 之间有两个点,例如 SHA1..SHA2,并且第二个 SHA 不是可选的,所以它应该如下所示: git log --name-status --oneline [SHA1.. SHA2]

--relative[=] 选项可能对您有所帮助,我不确定。否则总是有 | erep -v '(.tmp|.foo|.dontwant)$' ...

@artfulrobot 你是说egrep吗?

@DavidMoles 是的,我做到了,但我现在无法编辑评论!

答3:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

似乎没有人提到开关 --stat:

$ git diff --stat HEAD~5 HEAD
 .../java/org/apache/calcite/rex/RexSimplify.java   | 50 +++++++++++++++++-----
 .../apache/calcite/sql/fun/SqlTrimFunction.java    |  2 +-
 .../apache/calcite/sql2rel/SqlToRelConverter.java  | 16 +++++++
 .../org/apache/calcite/util/SaffronProperties.java | 19 ++++----
 .../org/apache/calcite/test/RexProgramTest.java    | 24 +++++++++++
 .../apache/calcite/test/SqlToRelConverterTest.java |  8 ++++
 .../apache/calcite/test/SqlToRelConverterTest.xml  | 15 +++++++
 pom.xml                                            |  2 +-
 .../apache/calcite/adapter/spark/SparkRules.java   |  7 +--
 9 files changed, 117 insertions(+), 26 deletions(-)

还有–numstat

$ git diff --numstat HEAD~5 HEAD
40      10      core/src/main/java/org/apache/calcite/rex/RexSimplify.java
1       1       core/src/main/java/org/apache/calcite/sql/fun/SqlTrimFunction.java
16      0       core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
8       11      core/src/main/java/org/apache/calcite/util/SaffronProperties.java
24      0       core/src/test/java/org/apache/calcite/test/RexProgramTest.java
8       0       core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
15      0       core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
1       1       pom.xml
4       3       spark/src/main/java/org/apache/calcite/adapter/spark/SparkRules.java

和–shortstat

$ git diff --shortstat HEAD~5 HEAD
9 files changed, 117 insertions(+), 26 deletions(-)

接受的答案是正确的,但这非常有用,并为您提供了一些额外的信息。谢谢!

同意这是一个更有用的答案,因为它包含差异统计信息。

答4:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

但是要查看您的分支与其共同祖先与另一个分支(例如 origin/master)之间的文件更改:

git diff --name-only `git merge-base origin/master HEAD`

这真的很有用!我希望我可以简单地说 git diffstatus master 或类似的,触发上述。

或git show --pretty=format: --name-only origin/master..。

您可能无法将其设为 git 别名,但您绝对可以将其放入 .bashrc 中。

或者更简单:git diff --name-only HEAD...master(注意三个点)。有关详细说明,请参阅 here。

看起来大部分是正确的答案!简单的 git diff --name-only master..branch 不对应 github PR 列表。这种方式更精确。但无论如何,我有 173 个 chaned 文件,而 github PR 中有 171 个。 (没有 merge-base 我有 228 对 171)

答5:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

为了补充@artfulrobot 的答案,如果您想在两个分支之间显示更改的文件:

git diff --name-status mybranch..myotherbranch

注意优先级。如果您首先放置较新的分支,那么它会将文件显示为已删除而不是添加。

添加 grep 可以进一步细化:

git diff --name-status mybranch..myotherbranch | grep "A\t"

然后将只显示在 myotherbranch 中添加的文件。

正则表达式很好,几乎可以做任何事情。但是,在这种情况下,还有 --diff-filter 本身提供了此功能,这意味着错误结果的可能性较小(例如误报)

如果文件名中有 "A\t",这将不起作用。你需要grep "^A\t"

答6:

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

另请注意,如果您只想查看上次提交和之前的提交之间的更改文件,则可以正常工作:

git show --name-only

简单易记。它应该得到更多的支持。

答7:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

将以下别名添加到您的 ~/.bash_profile 文件中,然后运行 source ~/.bash_profile;现在,无论何时您需要从您的 git 存储库中查看上次提交、运行 showfiles 中的更新文件。

alias showfiles='git show --pretty="format:" --name-only'

或 git config --global alias.showfiles 'show --pretty="format:" --name-only' 使 git showfiles。

答8:

一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会

每个先前答案的最大问题是,如果您想使用您试图从存储库中取出的信息,您会被输入一个寻呼机,这非常烦人。特别是如果您是一名开发人员,他们宁愿学习您应该开发的应用程序的业务逻辑,而不是学习 vim 命令。

使用 --no-pager 可以解决该问题。

git --no-pager  diff --name-only sha1 sha2

答9:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

这将显示文件中的更改:

git diff --word-diff SHA1 SHA2

答10:

huntsbot.com – 高效赚钱,自由工作

对于只需要关注 Java 文件的人来说,这是我的解决方案:

 git diff --name-status SHA1 SHA2 | grep '\.java$'

答11:

打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!

以下对我很有效:

git show --name-only --format=tformat: SHA1..SHA2

它也可以与单个提交一起使用:

git show --name-only --format=tformat: SHA1

这对于在 Jenkins 中使用非常方便,其中为您提供了变更集 SHA 哈希值的列表,并希望遍历它们以查看哪些文件已更改。

这类似于前面的几个答案,但使用 tformat: 而不是 format: 删除了提交之间的分隔符空间。

原文链接:https://www.huntsbot.com/qa/4lMw/how-to-list-only-the-names-of-files-that-changed-between-two-commits?lang=zh_CN&from=csdn

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值