在 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 时,我需要手动合并一些文件以获得 F
和 G
。
鉴于这种情况,当我完成变基后,我如何才能看到我在变基期间所做的这些更改的差异?
更正式地说,我想在使用 -Xtheirs
在 master
之上重新设置 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 上、比较结果并将其全部还原的脚本会更准确地产生您所要求的结果——但我认为这是一个不错的妥协,它是超级快 运行,不需要设置或恢复临时操作。
假设我有一个回购协议:
A - B - C <- master
\ D - E <- dev
然后,我从 dev
创建一个新分支 feature
并在 master
A - B - C <- master
\ \ F - G <- feature
\ D - E <- dev
在进行 rebase 时,我需要手动合并一些文件以获得 F
和 G
。
鉴于这种情况,当我完成变基后,我如何才能看到我在变基期间所做的这些更改的差异?
更正式地说,我想在使用 -Xtheirs
在 master
之上重新设置 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 上、比较结果并将其全部还原的脚本会更准确地产生您所要求的结果——但我认为这是一个不错的妥协,它是超级快 运行,不需要设置或恢复临时操作。