我意外地将功能分支推送到远程主站。现在我想将master恢复为之前的提交。当我选择“将当前分支恢复到此提交”时,仅恢复本地分支,并且由于远程主控器提前55(意外推送),我无法将刚刚恢复的本地主控制器推送到远程控制器。
在SO和Google上查看此问题时,我发现许多人使用命令行强制推送。但是因为我正在使用Source Tree,所以我想提出一种实际使用Source Tree的方法。
我也找到了rebase选项,但我似乎找不到一步一步的教程..
有什么想法吗?
答案 0 :(得分:18)
当你推送一个提交时,恢复它的最安全的方法(而不是用-f强制推送)是使用revert
函数,因此在你之前的提交之上创建一个新的提交。
可以使用Sourcetree,右键单击要还原的提交,然后选择"反向提交..."。
您需要以相反的顺序为要恢复的每个提交执行此操作。
答案 1 :(得分:1)
Sourcetree没有向您公开-f
标记:https://answers.atlassian.com/questions/54469/how-do-i-perform-a-forced-push-push-f-from-sourcetree
因此,将遥控器恢复到其原始状态的唯一方法是以相反顺序引入的每个提交git revert
。
假设遥控器处于提交A
并且你推动你的功能分支持有提交B
,C
和D
,你必须
git revert D
git revert C
git revert B
git push
推送工作正常,因为您不会修改推送的历史记录,而是推送一组新的更改。
如果您想将一系列还原缩短为一次提交,则可以执行
git rebase -i origin/master
并选择每个revert
提交为squashed
。然后,您的push
将只包含一次恢复D
,C
和B
的提交。
答案 2 :(得分:1)