两个补丁之间的差异

use*_*416 2 git diff git-flow

假设我有一个开发分支,并且在某个功能分支中工作,其中我有一个或多个提交,我不断修改提交并与其他一些分支进行变基(以保持提交历史记录干净以供将来使用)。在每个阶段,我都会在本地进行与开发相关的差异。所以我有一组差异,我想看看它们之间的区别。我怎样才能轻松做到这一点?我可以使用什么样的 git 命令序列?

更新

解决方案是有两个与开发相关的差异。在开发中拥有存储库的副本,应用第一个差异。复制花药并应用另一个补丁。使用一些比较工具并比较两个存储库。这将是我所期望的结果。这种方法的问题是我需要至少有两个存储库副本,并使用一些工具来比较目录。另一种可能更好的方法是使用两个分支,应用补丁并提交更改,然后比较分支。问题: git 命令中是否有更简单的东西可以做到这一点?比如拿这个分支和两个 diff 文件,返回给我 diff?

pet*_*ldi 5

您的第二个工作流程就是答案。这是一个可能的别名:

diffdiff = !git stash save -u -q &&
    git apply $1 && git add -A && git commit -q -m"1" &&
    git reset --hard HEAD@{1} -q &&
    git apply $2 && git add -A && git commit -q -m"2" &&
    git reset --hard HEAD@{1} -q && git stash pop -q &&
    git diff HEAD@{3} HEAD@{1} && :
Run Code Online (Sandbox Code Playgroud)

在您想要应用位于存储库外部的差异文件的差异的分支上调用它。

git diffdiff <diff_file_1> <diff_file_2>
Run Code Online (Sandbox Code Playgroud)

不是多平台解决方案,在 osx 上使用 zsh 和 bash shell 进行了测试。如果您可以手动执行此操作,那么它会更简单,这里的大部分复杂之处在于提供一种万无一失的解决方案。另外,输出的第一行是噪音,似乎 git stash pop 不遵守 --quiet 参数。

(编辑:不需要临时分支,所以我简化了别名。)