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