Git 如何获取提交ID列表的差异

Git 如何获取提交ID列表的差异,git,Git,如何获取提交ID列表的差异(包括所有文件更改) 我有一个来自2个分支的提交列表,我想找到差异并确认来自分支1的所有提交是否已经在分支2中可用 这个列表大约有100多个提交,我想为它获得一个单独的diff文件。对于您可以使用的每个提交 git branch --contains <commit> 看 只需将其包装到脚本中,并为列表中的每个提交运行它。Basic method 对于您的问题,最基本的答案是使用git-patch-id。请参阅git-patch-id1中的描述: 补丁ID

如何获取提交ID列表的差异(包括所有文件更改)

我有一个来自2个分支的提交列表,我想找到差异并确认来自分支1的所有提交是否已经在分支2中可用


这个列表大约有100多个提交,我想为它获得一个单独的diff文件。

对于您可以使用的每个提交

git branch --contains <commit>

只需将其包装到脚本中,并为列表中的每个提交运行它。

Basic method 对于您的问题,最基本的答案是使用git-patch-id。请参阅git-patch-id1中的描述:

补丁ID只是与补丁相关联的diff的SHA-1,空白和行号被忽略。因此,它相当稳定,但同时也相当独特,即具有相同补丁ID的两个补丁几乎保证是相同的东西

瞧,你可以用这个东西来寻找可能的重复提交

然而,git补丁id有点笨重的接口——它要求标准输入上有一个diff文件。因此,对于id为commit-id的提交,您可以使用:

git diff COMMIT-ID~ COMMIT-ID | git patch
请注意git补丁的输出校验和是不同的,因为输入差异中存在一些差异。例如,如果添加-U选项,校验和会发生变化

有更好的办法! 事实证明,有一个工具包装了git patch-id。要从分支一获取所有提交,而分支二上没有这些差异,只需使用git log和一些额外的选项:

git log --cherry-pick --right-only --oneline --no-abbrev-commit TWO...ONE
商业选择是-樱桃挑选和-权利只。请参见git-log1——它们在那里描述得非常清楚

变差了?
至于从这些提交中获得单个差异,如果它们不是连续的,恐怕不可能。请记住,差异是基于存储库中以前的状态提交的。您最好的选择是选择对稳定分支的承诺,并做好解决冲突的准备。

具体来说,您想实现什么?除了比较两个分支之外,您还需要差异吗?是的,由于一些错误,两个分支已损坏,我有一个100多个提交的列表,这些提交将在已知的稳定分支上完成。