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
引入的更改。
答案 0 :(得分:3)
答案 1 :(得分:0)
在这种情况下可以使用交互式rebase。
运行此命令:
git rebase -i YYYY~
您将面临提交列表。删除提交YYYY
的行。然后,保存并退出。
该提交现在已在本地“删除”。说出刚刚发生的事情的一个更好的方法是你所在的分支已被重写,因此在YYYY
之后的所有提交都会有一个新的SHA1哈希。
此时您需要强制推送,因为历史已被重写。如果这是在主分支上:
git push -f origin master
请注意,如果其他人也从这个分支中拉出来,那么典型的拉动对他们来说将无法正常工作,因为该分支的尖端将无法通过其分支的本地副本到达。
他们可以通过以下方式在新主人的基础上重新定位他们的本地分支:
git fetch
git rebase origin/master
如果这个项目中还有其他人,你应该让他们在操作之前了解你在做什么。
编辑:如果您想要实际删除提交,交互式rebase是一个不错的选择。但@ alextercete使用revert
的方法更优越,因为您不必重写历史记录。