【问题标题】:May I list the files of the current commit?我可以列出当前提交的文件吗?
【发布时间】:2017-09-13 19:04:49
【问题描述】:

想象一下,每次我提交文件时,在推送它们之前,我都想列出它们以进行检查。我该怎么做?

我试过了:

git ls-tree -r --name-only master
git ls-files -stage

如果我编辑一个文件,add 然后commit 它。如果我尝试上述代码,它会显示我的所有文件。

我只想列出将在当前提交时推送的文件。

【问题讨论】:

  • 对于任何提交,而不仅仅是当前,请参阅stackoverflow.com/questions/424071/…
  • 实际上,每个提交都包含一个每个文件的副本。如果您想查看一个提交与另一个提交之间的不同,您必须让 Git 将一个提交与另一个提交进行比较。

标签: git git-commit


【解决方案1】:

Git diff 来解决这个问题。您将使用--name-only 标志。要获取当前提交的内容,请使用以下命令:

#before stage
  git diff --name-only 
#staged changes before committing
  git diff --name-only --cached
#after committing
  git diff --name-only HEAD^ HEAD

如果您想查看在多次提交时将要推送的文件,您需要指定当前分支头和远程头

git diff --name-only remote/branch branch

【讨论】:

  • 每次我编写git diff ... 命令时,它什么都不显示。仅限空行。
  • @PlayHardGoPro 抱歉,我忘了包括所有三种形式。我已经更新了我的答案,具体取决于您何时需要该列表,您需要稍微不同的语法。
  • 不错。第三个工作正常。只是文件名!
  • @PlayHardGoPro:请注意,将remote/branch 标识的提交与branch 标识的提交进行比较可能无法显示您实际发送的所有内容。例如,考虑一下,如果您首先提交将README 替换为一万张青蛙照片,然后进行第二次提交,将伪造的README 替换为原始照片,会发生什么情况。比较起点和终点没有变化,但git push 实际上会推送多蛙README,因为那是在commits 之一中。
  • 另一个注意事项 - 确保您已运行 git fetch 以确保您的本地远程/分支副本是最新的。
【解决方案2】:

如果你想在最后一次提交(本地或非本地)中列出文件,使用这个

git show --name-only

【讨论】:

  • 或者,使用--name-status 也显示每个文件的状态(例如,M 表示已修改,A 表示已添加,D 表示已删除),或--stat 用于显示更改数量的差异统计在每个文件中。
【解决方案3】:

正如您在推送之前所说,我可以假设您的工作流程是 git add 然后 git commit 然后 git push。

您可以使用 --short 选项 link! 进行提交!

这将为您提供当前提交中所有文件更改、添加或删除的输出。

git commit --short -m "message for the commit"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 2011-06-25
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多