我做了一些提交并将它们推送到我的存储库中。然后我做了拉取请求,但我意识到有些提交我不想在拉请求中。
他们看起来像这样:
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
答案 0 :(得分:14)
假设您的头部位于示例中的ab1c41c
,请按以下方式调用rebase
git rebase -i HEAD~7
这告诉git你想操纵最后8个左右的提交。您将被列入编辑器,其中包含提交列表和一些说明。
删除包含要删除,保存和退出的提交的行。 Git会预先制作rebase,就是这样。
请记住,由于rebase,如果你想推送到同一个分支,你需要传递选项--force
。
免责声明重新定位和强行推动可能会导致您失去工作或让人失望,所以请确保您了解自己在做什么。 :)
答案 1 :(得分:3)
正如Blake Taylor提到here,您可以使用interactive rebase重新排序提交(或)删除中间提交。
但是,在将这些提交推送到公共存储库之前,必须这样做。 Refer here。在您的情况下,这些提交已经在公共回购中提供。所以,我不建议使用rebase。
如果您不想在工作目录中提交这些提交。
a)创建一个分支,指向86f2509(工作树中的最后一个稳定提交)。
git checkout -b <branch name> 86f2509
b)Cherry Pick
您想要的那些提交。在您的情况下ab1c41c
和8b38955
。
git cherry-pick 8b38955 ab1c41c
现在您的工作目录不会有那些不需要的提交。
答案 2 :(得分:1)
只需在之前的提交中使用--hard重置:
git reset --hard 86f2509
要注意:你将永远失去这些承诺,无法回头。 此外,如果某人已经提交了您想要摆脱的提交,事情可能会变得混乱。 在这种情况下,你可能想看看'git revert'。