git - 如何查看在上次收到的推送中修改/添加/删除的所有文件?

标签 git

命令 git show --pretty="format:"--name-status bd61ad98 将显示在上次提交中修改/添加/删除的所有文件的列表,其中 bd61ad98 是提交 ID。输出如下所示:

[trusktr@rocketship express.git]$ git show --pretty="format:" --name-status bd61ad98

A       test.txt
D       test3.txt
M       wp-atom.php

如果一个命令显示相同的信息,但针对上次推送的所有提交呢?例如,如果一个文件被删除(D),然后重新添加(A),然后修改(M),理想状态将是 M 表示已修改。换句话说,最终结果是文件被修改了。

有这样的命令吗?即使命令列出文件的重复状态,也没有问题。我可以编写一个脚本来确定最终效果。

也许有一种方法可以比较差异并输出修改/删除/添加的文件列表?

我需要这样一个文件的原因是我正在制作一个脚本,该脚本将根据此信息使用 FTP 更新另一个位置。

最佳答案

你真的想要 git diff-tree;也请参阅我对您的其他问题的其他回答。 :-)

编辑细节:

git diff-tree -r [other options] commit1 [commit2]

将为您提供在 commit1 和(我认为)其直接父级(如果省略 commit2)之间,或在 commit1 和 commit2 之间所做的更改(以 git-diff-tree 记录的格式)。

您也可以给它一个实际的树 ID,但是您必须给它两个树 ID,因为它将无法找到父树,例如:

git diff-tree -r 69d8f48dd3e69f228b9a727cc69f8fbaf4534b4f
error: Object 69d8f48dd3e69f228b9a727cc69f8fbaf4534b4f is a tree, not a commit

(显然 ID 会有所不同)。

如果您有一个分支名称指的是“我们上次发送的内容”,例如分支 THEYHAVE,并且您想向他们发送分支 TESTED 上的内容,你可以这样做:

git diff-tree -r THEYHAVE TESTED |
    while read omode nmode ohash nhash letter pathname; do
        ...
    done

并使用 $nhash 中的各种字母代码和值等来提取文件(“git cat-file -p $nhash”即使在--裸 repo )。

(您可能可以根据您的情况使用 --name-status 来简化它。)

一旦你将所有东西都通过 FTP 传输到它应该去的地方,你就可以使用 git update-ref 将 THEYHAVE 的分支标签移动到任何名为 TESTED names 的分支(它可能是一个最好使用 git rev-parse 一次“预先”获取该分支的 ID,以防它在您执行所有这些工作时移动)。

关于git - 如何查看在上次收到的推送中修改/添加/删除的所有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9652435/

相关文章:

git log - 找出哪个提交添加了特定文件

git - 使用远程主机作为工作目录,git 扩展

git - 带有gradle-git的RefNotFoundException

git - 如何从 Github 历史记录中删除本地不存在的提交?

git - 在 GitLab 中从命令行 merge merge 请求

Github for Windows 忽略 .gitignore Visual Studio

git repo 对象目录气球无缘无故地变大

git - gitlab 中的 2 个帐户的 ssh 不起作用

git - 如何使用 Subgit Hook SVN 更新

git - .gitignore 文件可以命名吗? (例如 xxx.gitignore)