问:
我在存储库中有一堆提交。我想查看两次提交之间更改的文件列表 - 从 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: 删除了提交之间的分隔符空间。
huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。