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

3
我是一名新手,对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个回答

3
您可以使用git rebase --interactive来进行交互式变基,从而重新排序提交并压缩它们。您可以像这样调用它: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 pictures”提交,然后将“replace”提交压缩,并为您提供编辑器以重写此压缩提交的提交消息。保存该消息后,它将在此之上添加“make a useful commit”。

谢谢。我没意识到你可以重新排序提交,但实际上这正是我想要的。如果我更仔细地阅读了Git消息,我应该可以自己找到答案。:)但有时候你只需要一个指针。再次感谢你的帮助和快速回复。 - user2167634

0

你想要压缩提交历史,这没错。但是,你不能在变基中压缩第一个提交。:(

$ 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

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