在git中,我是否只能看到2次提交之间常见的代码

时间:2018-03-27 00:51:38

标签: git

假设我有一个历史悠久的项目:

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中。

1 个答案:

答案 0 :(得分:1)

好的,基于comment

据我所知,您需要编写自己的工具。您可以编写自己的“antidiff”,包括一个共同的子序列查找器以及用于打印公共子序列的代码。现有的diff工具运行相同的查找程序,但随后打印不同的部分。或者,您可以运行git diff(或任何其他差异工具),它将告诉您哪些部分不同。通过排除,所讨论的其余文件必须相同。这就是我在my own comment中“外翻补丁”的意思:转变差异"inside out"

请注意,Python有一个库difflib,可以进行常见的子序列查找。如果您更喜欢编写自己的代码,而不是外翻diff输出,difflib代码将使这更容易。