我开始处理一个我认为只需要提交一个问题的问题,然后我开始在这个问题中包含其他功能和UI更改,结果是4个提交左右。我希望看到这些提交的所有差异合并,而不会立即重叠,我不确定是否存在这样的git命令。
我试过了git show sha sha sha sha
,但它只显示了所有差异,而不是像我想要的那样合并差异。
例如,如果提交1添加了一行并且提交2删除了相同的行,则合并的diff甚至不应该提及这行代码,类似于提交1和2修改的同一行应该只显示最后的编辑提交2。
重要的是要记住,由于多个用户提交到同一个存储库,因此在4个提交之间有多个提交。
答案 0 :(得分:2)
我想回复一下你可以使用一个简单的git diff
但我读了你的最后一句话。
重要的是要记住,由于多个用户提交到同一个存储库,因此在4个提交之间有多个提交。
这是至关重要的一点。
据我所知,“过滤”的变化不可能来自差异的特定提交。您可以单独查看每个提交的更改,但您似乎知道这一点。
尽管如此,如果您真的希望获得更改的差异,并且只有此提交所引入的更改,那么有一种方法可以实现这一点。
创建一个临时的分支,指向您想要差异的第一次提交。
git branch tmp <first-commit-for-diff>
git checkout tmp
然后使用git cherry-pick
按顺序应用所有进一步提交的更改,并希望包含在差异中。
git cherry-pick <second-commit-for-diff>
git cherry-pick <third-commit-for-diff>
# And so on
这可能会导致冲突,特别是如果以后的提交依赖于您未提交的提交所引入的更改{.1}}。
在此之后,您可以使用第一次提交的父来区分分支。
cherry-pick
这应该会产生所需的“组合差异”。
为了在将来简化此过程,我建议从一开始就使用分支(例如,称为git diff tmp <first-commit-for-diff>^ # The trailing ^ tells git to use the parent
)。然后,您可以继续处理自己的更改,而不会受到其他用户引入的更改的困扰。
完成工作后,您可以将此分支合并到开发分支中。
这通常是git中非常常见的工作流程。
答案 1 :(得分:2)
我猜你真正想要的是你工作的一组特定文件的差异,而不会在存储库的不同部分进行无关的更改。假设commit1
是第一次提交而commit2
是最后一次提交而[<path>...]
是您处理的文件/目录列表,则可以使用
git diff commit1^..commit2 -- [<path>...]
查看合并后的更改。如果您不希望看到相同路径中的其他更改,那么您可能会运气不好,因为您的某些提交可能基于这些更改。