你真的想要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 会有所不同)。
如果您的分支名称指的是“我们上次发出的内容”,例如,branchTHEYHAVE
,并且您想向他们发送分支上的内容TESTED
,你可以这样做:
git diff-tree -r THEYHAVE TESTED |
while read omode nmode ohash nhash letter pathname; do
...
done
并使用各种字母代码和值$nhash
依此类推来提取文件(“git cat-file -p $nhash”即使在--bare
repo).
(你可以用以下方法简化这个--name-status
对于你的情况,可能是。)
一旦你把所有东西都通过 FTP 传输到了它应该去的地方,你就可以使用git update-ref
将分支标签 THEYHAVE 移动到名为 TESTED 名称的任何分支(使用git rev-parse
一次“预先”获取该分支的 ID,以防它在您执行所有这些工作时移动)。