我想从git遥控器中删除一些提交。我可以通过执行交互式rebase并跳过我不想要的提交来完成此操作吗?
...然后强行推到遥控器?
或者revert
可以接受要恢复的提交列表吗?
答案 0 :(得分:1)
所以你可以通过在本地分支上做一个rebase或其他任何事情,然后强制推送来做到这一点。
git push --force origin master
但如果这是一个共享的回购,这是一件非常危险的事情。特别是,如果有人结账,当他们试图再次拉动时,他们的树就会搞砸了。
更好的方法是使用revert
执行以下操作(来自手册页),
Given one or more existing commits, revert the changes that the related patches introduce, and record some new commits that record them. This requires your working tree to be clean (no modifications from the HEAD commit).
或者以外行人的话来说,它会做出新的提交来撤消旧的提交。然后,您可以在不使用--force
的情况下将它们推送到遥控器。仍会有所有旧提交的记录,您仍然可以revert
或reset
返回给他们,但它将安全。
是的,revert
可以对revert
进行一系列提交。手册页中的示例是,
git revert -n master~5..master~2
哪个会将第五个恢复到最后一个提交。使用范围的revert
不会创建新的提交,但它只是修改工作树。所以你必须在之后进行自己的提交。
但是当他们必须与你合并时,仍然可能让某人脾气暴躁,因为与revert
合并有时会使正在使用的文件和编辑消失。