2016-08-01 100 views
0

我在做什么:如何清理git历史记录删除某些提交后被推送?

我完成了一项功能。

git add -A; git commit -m "feature A complete" 

然后我意识到我错过了一些东西。

git add -A; git commit -m "feature A missed something 1" 
git add -A; git commit -m "feature A missed something 2" 
git add -A; git commit -m "feature A missed something 3" 

现在我的历史是这样的:

A238ad1 feature A missed something 3 
3238adX feature A missed something 2 
1238ad7 feature A missed something 1 
111AAA2 feature A complete 

我希望它看起来像这样:

111AAA2 feature A complete 

与所有的missed something的提交合并为feature A complete提交。

我知道git rebase -i HEAD~4是正确的路要走,但它并没有真正删除坏的提交清理历史。

我注意到在其他一些文章中有一个git commit --fixup命令和一个git rebase -i --autosquash,但我没有得到它正常工作。我相信这很容易,我今天刚出来。

+0

他们不会删除任何内容的原因可能是您在交互式重新绑定期间未指定如何处理这些提交。你必须改变'pick',这是'squash'的默认值。通过这种方式,它将压扁提交对方,您将有机会在最后编辑提交 –

回答

1

在这种情况下使用互动的rebase

这可以通过使用

git rebase -i 

发起其次是要包括

git rebase -i HEAD~5 

头数,其中HEAD~5表示最近5条

然后你可以使用更多的o将你的提交压缩成一个并编辑消息。只是代替pick选项写squash,而不是

squash

所以在这里你看,我改变s选项pick这是squash一个快捷方式。当我保存并关闭这个文件时,将会启动交互式重新分配,并且我表示要进行压缩的提交将被压缩到21b4e04 Fixed missing bad practice。挤压后,它会要求你输入一个新的提交信息。输入新消息并点击enter即可完成。

+0

嗯。我刚刚创建了一个测试回购,测试了它,并且它工作正常,但它不适用于我的其他回购。这似乎是正确的答案,即使它不在我的其他repo中工作...:/烦人。 –

+0

有多奇怪,它是否会给出错误信息或任何输出? –

+0

基本上我认为它是因为我已经推动它们。现在我试图找出如何在一系列提交之间压缩提交,因为其他人已经在我之后提交了。即'git rebase -i origin/master〜5 origin/master〜2'。这可能吗? –

相关问题