我已经编写了一个拉刷新功能并已提交到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 通常会拒绝它。如果您执行强制灌木丛,请小心,因为您覆盖了远程分支并同时完成的提交会丢失。