Git:从历史记录中删除已替换文件的提交

时间:2013-03-13 23:13:05

标签: git

我对git很新,因此我的存储库中积累了一些错误和错误。现在我想再次清理它。

我的情况如下。我已将图片添加到我的存储库但分辨率过高。我稍后用较小的版本替换它们,但它们仍然存在于我的历史中。我是唯一曾在该存储库上工作的人,因此可以容忍重写历史记录的问题。我的问题是我在添加图片和替换它们之间做了其他提交。这可能吗?如果是,那么如何?

为了说明我的内容:

04f9ac3 replace big pictures with small pictures
503c2b6 make a useful commit
8ab463d add big picutres
3d2a5a5 initial commit

我想要实现的目标:

XXXXXXX combined commit of the "add big pictures" and "replace with small pictures"
503c2b6 make a useful commit
3d2a5a5 initial commit

我发现了很多关于“压缩”提交的内容,但如果我理解正确,它会将“相邻”提交组合在一起。我想要做的更多是选择某些提交并将它们组合起来。我希望这对任何人都有意义。 :)

2 个答案:

答案 0 :(得分:3)

您可以使用git rebase --interactive获取交互式rebase,您可以在其中重新排序提交并压缩它们。你可以像git rebase -i 3d2a5a5一样调用它,你可能会看到像

这样的东西
pick 8ab463d add big picutres
pick 503c2b6 make a useful commit
pick 04f9ac3 replace big pictures with small pictures

您现在可以编辑此列表,因此它看起来像

pick 8ab463d add big picutres
squash 04f9ac3 replace big pictures with small pictures
pick 503c2b6 make a useful commit

当您保存此文件并让rebase启动时,它将添加“big picutres”提交,然后压缩“替换”提交,并为您提供一个编辑器来重写此压缩提交的提交消息。保存该消息后,它将在此基础上添加“进行有用的提交”。

答案 1 :(得分:0)

你想挤压,你是对的。但是,你不能压缩rebase中的第一个提交。 :(

$ git log
04f9ac3 replace big pictures with small pictures
503c2b6 make a useful commit
8ab463d add big picutres
3d2a5a5 initial commit

$ git rebase -i 3d2a5a5    <--- Choose a commit BEFORE the one you don't want
squash 8ab463d             <--- First commit in rebase cannot be squashed :(
pick 503c2b6
pick 04f9ac3
相关问题