命令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更新另一个位置。
答案 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。