Git:检索特定提交

12
我需要将 Git 存储库中的一组提交导出到归档文件中。 我应该如何做? 在 svn 中,我可以选择提交并导出到 zip。

你的意思是导出这些提交的差异吗? - CharlesB
是的,抱歉,现在我意识到这个理解起来并不容易。 我需要一个归档文件,其中包含在2个提交之间最新的文件。 - user1170896
2个回答

19

导出某个提交之前的代码库:

git archive -o export.zip <COMMIT>。将<COMMIT> 替换为您想要导出的提交号。

创建两个提交之间的补丁:

git diff COMMIT1 COMMIT2 > patch.txt


我原以为这个命令会导出存储库中的每个提交,直到找到指定的提交为止。 我需要仅导出指定的提交,就像一个补丁一样。 - user1170896
好的...但是补丁是用于另一个存储库的。它包含标记以了解修改的位置。我需要一个仅包含指定提交之间已修改(最新)文件的归档文件。 - user1170896
所以您想要在特定提交号有效的某些特定文件的导出吗? - tobiasbayer
那是正确的。 假设我运行一个网站,刚刚提交了一些修改到存储库中。现在为了部署我的修改,我需要一个归档文件,其中只包含最后提交和上一个提交之间修改过的文件。 感谢您的耐心 :) - user1170896
https://dev59.com/GHI-5IYBdhLWcg3wxrqQ - tobiasbayer
@user1170896 你可以使用 patch -p1 < patch.txt 来部署修改。 - Max Nanasy

10

Git有一种方便的方法可以为每个提交创建补丁(patch)。尽管最初是为了格式化补丁以便通过电子邮件发送,但它们也是提取一组更改的方便方法。

您需要的命令是git format-patch,将这些格式化的补丁应用回git的方式是使用git am命令。

例如,如果您有两次提交C1和Cn想要导出为一组git补丁,您只需要:

git format-patch -k C1..Cn

这将创建一个编号的补丁集(在您当前的目录中)。每个补丁将是提交的差异,以及提交信息(标题、注释、作者、日期等)。

这比两个提交之间的简单差异文件提供的要多得多。


我认为这应该是 git format-patch -k C1~..Cn 而不是 git format-patch -k C1..Cn,因为范围的左侧是 排除 的,所以您必须给出第一个提交的 父级 (~)。 - nh2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接