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
引入的更改。
您可以还原提交引入的更改:
git revert YYYYY
这将创建一个新的提交,如果您已经将更改推送到长期存在的远程分支(例如 master
(,这通常比执行变基更可取。
在这种情况下可以使用交互式变基。
运行以下命令:
git rebase -i YYYY~
您将面临一系列提交。删除带有提交YYYY
的行。然后,保存并退出。
该提交现在已在本地"删除"。说刚刚发生的事情的更好方法是,您所在的分支已被重写,因此YYYY
过去所在的位置之后的所有提交都将具有新的 SHA1 哈希。
在这一点上,你需要强制推动,因为历史已经被改写了。如果这是在主分支上:
git push -f origin master
请注意,如果其他人也从此分支拉取,则典型的拉取对他们来说将无法正常工作,因为该分支的本地副本将无法访问该分支的尖端。
他们可以在新主节点之上重新定位其本地分支:
git fetch
git rebase origin/master
如果这个项目上有其他人,你应该让他们在手术前知道你在做什么。
编辑:如果您想实际删除提交,交互式变基是一个不错的选择。但是@alextercete使用revert
的方法更胜一筹,因为你不必重写历史。