如何撤消数百个以前的提交



我已经编写了一个拉刷新功能并已提交到Github。该功能在 1.3.0 中发布,并且已在新产品版本中发布。现在我保护了一些我修改的这个功能的代码没有得到很好的优化,所以我想现在撤消它。我现在即将发布 1.4.0,因此提交后有近数百个提交。

谷歌搜索后,我找到了一些关于恢复以前的提交的答案。但我的问题是如何恢复几乎数百次以前的提交。

我试图通过 Eclipse 的 git 插件通过 diff 工具比较差异,但发现没有任何结果,因为我将原始文件移动到另一个包。

对此感到非常困惑,我必须逐行撤消它吗?


编辑我想做的更像是将很久以前的提交合并到最新的提交。因为我在最新的提交中添加了新功能,我并不是要丢失它们,同时,我也想恢复一些功能。

感谢您的帮助!

以下操作可能更容易:

  • 在要还原的提交之前创建一个分支,
  • git cherry-pick当前分支的所有提交,你想要保留:这将在你的分支之上重放它们,而分支没有你想要避免的提交。

请记住,您可以挑选一系列提交。

我将首先创建当前分支的"撤消分支",然后执行git rebase -i HEAD~XXX。撤消分支不是必需的,但如果出现问题,您可以将其删除。

git checkout -b undo
git rebase -i HEAD~100

HEAD~100替换为要在历史记录中返回的提交数。或者,您也可以使用特定的提交。

git rebase -i <commitid>

这将打开变基交互式编辑器。只需通过删除pick <commitid>行来删除您不需要的提交。

另请查看 https://stackoverflow.com/a/27076194/974186,了解有关变基交互式的详细信息。

如果您从undo分支中删除了提交并且一切看起来都很好,则可以将原始分支指向新的重写历史记录。

git checkout originalBranch
git reset --hard undo

现在,您可以推送更改,但可能需要执行强制推送。如果远程分支更新不符合要求,Git 通常会拒绝它。如果您执行强制灌木丛,请小心,因为您覆盖了远程分支并同时完成的提交会丢失。

最新更新