2013-03-13 184 views
3

我对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 

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

回答

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 

当您保存这个文件,然后让底垫开始,它会添加“big picutres”提交,然后挤压“替换”提交,并给你一个编辑器来重写这个压扁提交的提交信息。保存该消息后,它会在此之上添加“进行有用的提交”。

+0

谢谢你。我不知道,你可以重新排序提交,但实际上这正是我想要的。如果我会更加仔细阅读git的消息我应该自己也想通了。:)不过有时你只需要那个指针。再次感谢您的帮助和快速回复。 – user2167634 2013-03-14 07:37:11

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 
相关问题