17

我做了一些提交并将它们推送到我的存储库中。然后我做了一个拉取请求,但我意识到有些提交我不想在拉取请求中。

它们看起来像这样:

My commits look like this:

Correct HTML    
ab1c41c 

HTML escaping   
8b38955 

Merge branch 'master' into internationalized    
2854662

Modified config 
b942f13 

tried pushing   
b73d792 

Added assets    
f20106e 

Added config    
408118f 

Fixed views conflicts   
86f2509 

added layouts   
da27e11 

Fixed layout markup
92d6bcc 

如果我想摆脱这些提交:

Modified config 
b942f13 

tried pushing   
b73d792 

Added assets    
f20106e 

Added config    
408118f 

我该怎么做?请注意,我想保留这些早于我要删除的那些:

Correct HTML    
ab1c41c 

HTML escaping   
8b38955
4

3 回答 3

26

您可以进行交互式变基

假设您的头在ab1c41c您的示例中,请按如下方式调用变基

git rebase -i HEAD~7

这告诉 git 你想要操纵最后 8 个左右的提交。您将进入您的编辑器,其中包含提交列表和一些说明。

删除包含要删除、保存和退出的提交的行。Git 将执行 rebase,仅此而已。

请记住,由于变基,如果你想推送到同一个分支,你需要传递 option --force

免责声明重新定位和强制推送可能会导致您失去工作或惹恼他人,因此请确保您了解自己在做什么。:)

于 2012-06-20T07:09:08.480 回答
6

正如 Blake Taylor 在这里提到的,您可以使用交互式 rebase来重新排序提交(或)删除中间提交。

但这必须在您将这些提交推送到公共存储库之前完成。参考这里。在您的情况下,这些提交已经在公共存储库中可用。所以,我不建议使用rebase。

如果您不希望这些提交在您的工作目录中。

  • a) 创建一个分支,指向 86f2509(工作树中的最后一个稳定提交)。

    git checkout -b <branch name> 86f2509

  • b)Cherry Pick你想要的那些提交。在你的情况下ab1c41c8b38955.

    git cherry-pick 8b38955 ab1c41c

现在您的工作目录将不会有那些不需要的提交。

于 2012-06-20T08:24:21.907 回答
0

只需在之前的提交上使用 --hard 重置:

git reset --hard 86f2509

当心:你将永远失去这些提交,没有办法回去。此外,如果有人拉入了您想要摆脱的提交,事情可能会变得一团糟。在这种情况下,您可能想查看“git revert”。

于 2012-06-20T05:31:39.077 回答