如何列出提交中的所有文件?

问:

如何打印属于给定提交的所有文件的普通列表?

尽管以下列出了这些文件,但它还包含每个文件的不需要的差异信息:

git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

答1:

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

首选方式(因为它是一个管道命令;意味着程序化):

$ git diff-tree --no-commit-id --name-only -r bd61ad98
index.html
javascript/application.js
javascript/ie6.js

另一种方式(不太喜欢脚本,因为它是一个瓷器命令;意味着面向用户)

$ git show --pretty="" --name-only bd61ad98    
index.html
javascript/application.js
javascript/ie6.js

–no-commit-id 禁止提交 ID 输出。

–pretty 参数指定一个空的格式字符串,以避免在开头出现杂乱无章的情况。

–name-only 参数仅显示受影响的文件名(感谢 Hank)。如果您想查看每个文件(已删除、已修改、已添加)发生了什么,请改用 --name-status

-r 参数是递归到子树

应该注意的是,在查看根提交时,diff-tree 不起作用。

将 --name-only 选项替换为 --name-status 将提供更清晰的摘要。

如果您希望它在根提交上工作,请使用 --root 标志。从手册页:“当指定 --root 时,初始提交将显示为一个大的创建事件。这相当于针对 NULL 树的差异。”

git log --name-only -n 1 最后一次提交是:git log --name-only -n 1 HEAD~1..HEAD

如果有人想知道(就像我一样)为什么第一种方式是“首选”,它可以追溯到@drizzt 的评论; git show 是“瓷器”(意味着面向用户),而 git diff-tree 是“管道”(意味着以编程方式使用,例如从脚本中使用)。前者的界面可能会随着时间而改变(因此 git 维护者可能会放弃 --name-only,尽管我不认为他们会)出于可用性原因,而后者的界面将保持稳定尽可能出于兼容性原因。

答2:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

如果要获取已更改文件的列表:

git diff-tree --no-commit-id --name-only -r 

如果要获取提交中所有文件的列表,可以使用

git ls-tree --name-only -r 

带有 --name-only 的 ls-tree 似乎不适用于 1.6.4.4 或 1.6.3.3。你认为这是一个错误吗?

事实证明,参数的顺序在这里很重要。您帖子中的那个不起作用,而您回复中的那个起作用 - 至少在您更新您的帖子之前;)

通过 --no-commit-id 以避免打印 SHA1,如下所示:git diff-tree --no-commit-id --name-only -r

diff-tree 不返回任何内容,可能是因为我引用的提交添加了文件,但没有更改任何现有文件。 ls-tree 为我提供了 repo 中所有文件的列表,而不仅仅是上次提交中添加/更改的文件。我想知道是否有第三个命令来列出所有新文件(即添加到给定的提交中)?

@CoDEmanX:您没有错过添加 -r / -t 选项,是吗?因为 diff-tree 处理修改和添加的文件。如果您想列出所有新的(添加的)文件,请使用 git diff-tree -r --name-only --no-commit-id --diff-filter=A

答3:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

我只是假设这不需要 gitk。在这种情况下,请尝试 git show --name-only 。

--name-only 在我需要的大多数情况下就足够了;因此,赞成最短的解决方案(也是我在 1 次尝试中记住的唯一解决方案)。

作为真正喜欢 CLI git 的人,gitk 实际上是查看文件并显示差异所在文件的一种不错的方式。例如,审查来自同行的怪物提交的代码。

要记住的最短和最容易的答案。

答4:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

我个人将 --stat 和 --oneline 与 show 命令结合使用:

git show --stat --oneline HEAD
git show --stat --oneline b24f5fb
git show --stat --oneline HEAD^^..HEAD

如果您不喜欢/想要添加/删除统计信息,可以将 --stat 替换为 --name-only

git show --name-only --oneline HEAD
git show --name-only --oneline b24f5fb
git show --name-only --oneline HEAD^^..HEAD

非常好。要定义别名:alias gits='git show --stat --oneline',然后 gits 本身显示最新更改(在 HEAD 中),而 gits b24f5fb 可用于显示任何修订的更改。

也可以创建一个 git 别名...例如 git config --global alias.changes 'show --stat --oneline'。然后您可以键入 git changes(带有可选的 commit-ish)并从上面的第一个示例中获取输出。

Git for Windows 需要双引号:git config --global alias.changes "show --stat --oneline"

好的。与公认的答案不同,git show 也适用于查看隐藏的更改:例如 git show --stat --oneline stash@{1}

这是我真正需要的!与“ git diff-tree --name-status -r ”不同,使用此命令我也可能会在合并中看到受影响的文件!谢谢 !

答5:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

你也可以做

git log --name-only

您可以浏览各种提交、提交消息和更改的文件。

键入 q 以获取您的提示。

谢谢,它有帮助。顺便说一句:使用 git show 5944ad2a8b5 --name-only 列出特定提交的名称

与省略 --name-only 相比有什么区别?或者换句话说,它应该做什么以及它如何回答这个问题?

简短易记。

答6:

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

最近我需要列出两次提交之间的所有更改文件。所以我使用了这个(也是 *nix 特定的)命令

git show --pretty="format:" --name-only START_COMMIT..END_COMMIT | sort | uniq

或作为 Ethan points out:

git diff --name-only START_COMMIT..END_COMMIT

使用 --name-status 还将在每个文件旁边包含更改(添加、修改、删除等):

git diff --name-status START_COMMIT..END_COMMIT

如果使用 git diff --name-status START_COMMIT..END_COMMIT,则不需要尾随 |sort | uniq。

更正上述评论:git diff --name-only START_COMMIT..END_COMMIT

这就是我一直在寻找的。我如何使用它:git diff --name-only START_COMMIT..END_COMMIT | grep -v -e '**.png' -e '**.xml'。我只想要一个添加了数千个 PNG 和 XML 布局的巨大 PR 的代码更改列表。

答7:

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

最简单的形式:

git show --stat (hash)

这更容易记住,它将为您提供所需的所有信息。

如果您真的只想要文件的名称,您可以添加 --name-only 选项。

git show --stat --name-only (hash)

--name-only 仍将包含几个标题行,其中包含作者、日期和提交消息等信息。

答8:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

我经常使用 changed alias。要设置它:

git config --global alias.changed 'show --pretty="format:" --name-only'

然后:

git changed (lists files modified in last commit)
git changed bAda55 (lists files modified in this commit)
git changed bAda55..ff0021 (lists files modified between those commits)

可能有用的类似命令:

git log --name-status --oneline (very similar, but shows what actually happened M/C/D)
git show --name-only

“变”有什么特别之处吗?它是一个词的任意选择吗?大会?内置的东西?

答9:

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

利用

git log --name-status

这将向您显示提交 ID、消息、更改的文件以及是否已修改、创建、添加或删除。有点像一个多合一的命令。

这会显示每个最近提交的巨大列表,我必须按住 ENTER 按钮才能查看所有内容,然后它会锁定我的 cmd。不,谢谢。

答10:

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

使用标准 git diff 命令(也适用于编写脚本):

git diff --name-only ^ 

如果您还想要更改文件的状态:

git diff --name-status ^ 

这适用于合并提交。

感谢您提供适用于合并提交的变体!

答11:

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

尝试使用此命令获取名称并更改行数

git show --stat 

只显示文件名

git show --stat --name-only  

要获取最后一次提交哈希,请尝试以下命令:

git log -1

带有显示文件名和文件状态的上次提交修改、创建或删除:

 git log -1 --oneline --name-status 

或为所有人

git log

有关更高级的 git 日志信息,请阅读以下文章:

Git 日志格式字符串备忘单

git log 备忘单

@DanFare “致命:无法识别的参数:--names-only”来自 2.20.1.windows.1

“for all”...只是 git log 没有给您文件名...

原文链接:https://www.huntsbot.com/qa/Lded/how-do-i-list-all-the-files-in-a-commit?lang=zh_CN&from=csdn

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值