如何在另一次提交后远程删除提交

时间:2016-02-05 16:09:52

标签: git

git status给我这样的话:

commit XXXXX
Author: AAAA
Date:   Thu Feb 4 16:47:06 2016 -0500

commit YYYYY
Author: BBBB
Date:   Thu Feb 4 16:47:05 2016 -0500

commit ZZZZZ
Author: CCCC
Date:   Thu Feb 4 16:47:04 2016 -0500

我只想删除YYYYY引入的更改,也就是说,我希望保留XXXXX引入的更改。

2 个答案:

答案 0 :(得分:3)

您可以revert提交引入的更改:

git revert YYYYY

这将创建一个新的提交,如果您已将更改推送到长期存在的远程分支(例如master),则通常优先于执行rebase。

答案 1 :(得分:0)

在这种情况下可以使用交互式rebase。

运行此命令:

git rebase -i YYYY~

您将面临提交列表。删除提交YYYY的行。然后,保存并退出。

该提交现在已在本地“删除”。说出刚刚发生的事情的一个更好的方法是你所在的分支已被重写,因此在YYYY之后的所有提交都会有一个新的SHA1哈希。

此时您需要强制推送,因为历史已被重写。如果这是在主分支上:

git push -f origin master

请注意,如果其他人也从这个分支中拉出来,那么典型的拉动对他们来说将无法正常工作,因为该分支的尖端将无法通过其分支的本地副本到达。

他们可以通过以下方式在新主人的基础上重新定位他们的本地分支:

git fetch
git rebase origin/master

如果这个项目中还有其他人,你应该让他们在操作之前了解你在做什么。

编辑:如果您想要实际删除提交,交互式rebase是一个不错的选择。但@ alextercete使用revert的方法更优越,因为您不必重写历史记录。