假设我有一个历史悠久的项目:
0c13c1c - (HEAD) Change 4
fd2ea81 - Change 3
1b82694 - Change 2
5d7f469 - Change 1
b68482e - Initial commit
我知道大多数代码在5d7f469和0c13c1c之间发生了变化,但仍有一些代码没有改变。
我可以这样做:
git common-code 5d7f469 0c13c1c > common-code-only.tar.gz
我希望common-code-only.tar.gz包含一个完整的项目,只包含5d7f469中存在的代码行,并且仍然存在于0c13c1c中。
答案 0 :(得分:1)
好的,基于comment:
据我所知,您需要编写自己的工具。您可以编写自己的“antidiff”,包括一个共同的子序列查找器以及用于打印公共子序列的代码。现有的diff
工具运行相同的查找程序,但随后打印不同的部分。或者,您可以运行git diff
(或任何其他差异工具),它将告诉您哪些部分不同。通过排除,所讨论的其余文件必须相同。这就是我在my own comment中“外翻补丁”的意思:转变差异"inside out"。
请注意,Python有一个库difflib
,可以进行常见的子序列查找。如果您更喜欢编写自己的代码,而不是外翻diff输出,difflib
代码将使这更容易。