如何获取git子树的差异?

14

我有一个仓库,其中还挂载了另一个仓库。

git subtree add -P some/path  otherremote otherbranch

开发进行了一些本地更改,但也进行了几轮合并:

git fetch otherremote
git subtree merge -P some/path otherremote/otherbranch
git commit

现在我想获取另一个远程/另一个分支的HEAD与某个路径下树之间的差异。我该如何做到这一点?

1个回答

14

这应该是您要找的内容:

git diff otherremote/otherbranch commit:some/path

你甚至可以使用所有标准的 commit 命名约定来与之前的版本进行比较。

例如,我在远程 repo 中创建了一个u-bootmaster分支,在我的主 repo 中作为一个子树存在于 u-boot/。要查看自特定版本以来本地 master 分支所做的更改:

git diff u-boot/master~17 master:u-boot/

经测试可用于 git 1.9.0,尽管我相信这通常也适用于旧版本。


1
顺便说一下,如果远程发生了变化,除非我们再次执行 git remote update 或者 git subtree pull(后者也是合并),否则差异仍将显示来自过时分支的结果。即使我们从完全相同的子树推送到远程,情况也是如此。 - Wtower
1
在你的例子中,~17代表什么? - Costin_T
FTR: ~17 的意思是“回退 17 个版本”。因此,这将使用 master 分支之前的第 17 个提交。 - Flamefire
为了(可能)通过抽象澄清:“git diff subtree-remote/commitish commitish: subtree_path_prefix/”,其中 subtree_path_prefix 是包含子树仓库根目录的目录。因此,如果您有一个名为 barproj 的项目,在称为 foosub 的目录中与其根不同的子树,并且有一个名为 foorepo 的远程仓库用于该子树,则要将远程主分支的 HEAD 与本地仓库进行比较,您需要在 barproj 目录中运行 git diff foorepo/main main:foosub - chb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接