如何撤消上百次提交

时间:2014-11-29 09:34:15

标签: git github

我已经编写了一个pull-to-refresh功能并且已经提交给了Github。 1.3.0的功能,已在新产品版本中发布。现在我解决了一些我修改过的关于此功能的代码没有很好地优化,所以我想现在撤消它。我现在即将发布1.4.0,因此在提交之后会有近数百次提交。

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

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

我对此感到很困惑,我是否必须逐行撤消?


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

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

可能更容易:

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

请记住,您可以cherry-pick a range of commits

答案 1 :(得分:1)

我会先创建一个'撤消分支'当前分支而不是git rebase -i HEAD~XXX。撤销分支不是必需的,但如果出现问题,您可以删除它。

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

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

git rebase -i <commitid>

这将打开rebase交互式编辑器。只需删除pick <commitid>行即可删除您不想要的提交。

另请查看https://stackoverflow.com/a/27076194/974186以获取有关rebase interactive的详细信息。

如果您从undo分支中删除了提交,一切正常,您只需将原始分支指向新的重写历史记录即可。

git checkout originalBranch
git reset --hard undo

现在您可以推送更改,但可能需要强制推送。如果不在线,Git通常会拒绝远程分支更新。如果你做了强迫灌木,要小心,因为你覆盖远程分支并且同时完成提交会丢失。