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

时间:2012-03-11 04:24:33

标签: 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更新另一个位置。

2 个答案:

答案 0 :(得分:3)

你真的想要git diff-tree;另见我对你问题的另一个答案。 : - )

编辑细节:

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

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

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

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

(显然身份证会有所不同)。

如果您的分支名称引用“我们上次发送的内容”,例如分支THEYHAVE,并且您希望将它们发送给分支TESTED上的内容,则可以执行以下操作:

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

并使用$nhash中的各种字母代码和值等来提取文件(“git cat-file -p $ nhash”即使在{{1}中也可以获取文件的内容} repo)。

(您可以使用--bare为您的案例简化此操作。)

一旦你将所有FTP编辑到它应该去的地方,你就可以使用--name-status将分支标签THEYHAVE移动到任何名为TESTED名称的分支(使用{{可能是个好主意) 1}}曾经“抢先”获取该分支的ID,以防它在您完成所有这些工作时移动。)

答案 1 :(得分:0)

我不知道确切的diff格式,但您可以在脚本中执行以下操作:

  • git fetch注意:不要拉,而是取。
  • 以您喜欢的格式在diff<branch>之间执行<remote>/<branch>,并存储结果或采取必要的操作。
  • <remote>/<branch>合并到<branch>

这样,您就可以在单独的push es。

上执行操作