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



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的方法更胜一筹,因为你不必重写历史。

最新更新