我已经编写了一个pull-to-refresh功能并且已经提交给了Github。 1.3.0的功能,已在新产品版本中发布。现在我解决了一些我修改过的关于此功能的代码没有很好地优化,所以我想现在撤消它。我现在即将发布1.4.0,因此在提交之后会有近数百次提交。
谷歌搜索后,我找到了一些关于恢复先前提交的答案。但我的问题是如何恢复几百次以前的提交。
我试图通过Eclipse的git插件通过diff工具比较差异,但发现没有任何结果,因为我将原始文件移动到另一个包。
我对此感到很困惑,我是否必须逐行撤消?
EDIT 我想要做的更像是将很久以前的提交合并到最新的提交中。因为我在我的最新提交中添加了新功能而我不想丢失它们,同时,我也想恢复一些功能。
感谢您的帮助!
答案 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通常会拒绝远程分支更新。如果你做了强迫灌木,要小心,因为你覆盖远程分支并且同时完成提交会丢失。