在 master 之上重新定位后,我如何 git diff 分支

How can I git diff branches after rebasing on top of master

假设我有一个回购协议:

A - B - C <- master
  \ D - E <- dev

然后,我从 dev 创建一个新分支 feature 并在 master

之上重新设置它的基线
A - B - C <- master
 \        \ F - G <- feature 
  \ D - E <- dev

在进行 rebase 时,我需要手动合并一些文件以获得 FG

鉴于这种情况,当我完成变基后,我如何才能看到我在变基期间所做的这些更改的差异?

更正式地说,我想在使用 -Xtheirsmaster 之上重新设置 dev 之后,首先获得 F 和结果提交之间的差异。 G 相同(命令可能略有不同)和来自此潜在 rebase 的第二次提交。

有没有什么方法可以简洁地做到这一点,而不需要在 master 之上实际变基 dev

TL;DR

显示所需信息的最简单方法是比较差异。

故事

在像你这样的情况下,我倾向于自己比较提交的内容。

在 Bash 提示符下,命令

diff <(git show D) <(git show F)

将为您区分差异。

您会得到一些虚假的差异:提交和文件的 sha1、行号(如果发生更改)以及上下文行(如果发生更改)

因此您需要查找以 < +< -> +> - 开头的行,以查看 D 和F.

中的更改集

您出于任何原因手动进行的任何更改,无论是修复冲突还是进行进一步更改,都将显示在此差异中。

更干净的输出

OP @Lezkus 在评论中提出的 diff 命令变体消除了 diff 输出中的大量噪音:

diff -I '@@[^@]*@@' -I '^index.*' -I 'commit.*' <(git show D) <(git show F)

注意事项

这不完全是您所要求的——将 D 挑选到 C 上、比较结果并将其全部还原的脚本会更准确地产生您所要求的结果——但我认为这是一个不错的妥协,它是超级快 运行,不需要设置或恢复临时操作。