问:
如何打印属于给定提交的所有文件的普通列表?
尽管以下列出了这些文件,但它还包含每个文件的不需要的差异信息:
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开始!