Git:从历史记录中删除替换文件的提交
问题描述:
我对git很陌生,所以一些cruft和错误已经累积在我的仓库中。现在我想再次清理它。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
,我发现了很多关于“挤压”的提交,但如果我正确理解它将“邻居”提交结合在一起。我想要做的更多的是选择某些提交并合并它们。我希望这对任何人都有意义。 :)
答
您可以使用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
当您保存这个文件,然后让底垫开始,它会添加“big picutres”提交,然后挤压“替换”提交,并给你一个编辑器来重写这个压扁提交的提交信息。保存该消息后,它会在此之上添加“进行有用的提交”。
答
你想打壁球,你是对的。但是,你无法压制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
谢谢你。我不知道,你可以重新排序提交,但实际上这正是我想要的。如果我会更加仔细阅读git的消息我应该自己也想通了。:)不过有时你只需要那个指针。再次感谢您的帮助和快速回复。 – user2167634 2013-03-14 07:37:11