使用sourcetree将推送恢复为远程

时间:2014-10-27 14:44:14

标签: git atlassian-sourcetree

我意外地将功能分支推送到远程主站。现在我想将master恢复为之前的提交。当我选择“将当前分支恢复到此提交”时,仅恢复本地分支,并且由于远程主控器提前55(意外推送),我无法将刚刚恢复的本地主控制器推送到远程控制器。

在SO和Google上查看此问题时,我发现许多人使用命令行强制推送。但是因为我正在使用Source Tree,所以我想提出一种实际使用Source Tree的方法。

我也找到了rebase选项,但我似乎找不到一步一步的教程..

有什么想法吗?

3 个答案:

答案 0 :(得分:18)

当你推送一个提交时,恢复它的最安全的方法(而不是用-f强制推送)是使用revert函数,因此在你之前的提交之上创建一个新的提交。

可以使用Sourcetree,右键单击要还原的提交,然后选择"反向提交..."。

enter image description here

您需要以相反的顺序为要恢复的每个提交执行此操作。

答案 1 :(得分:1)

Sourcetree没有向您公开-f标记:https://answers.atlassian.com/questions/54469/how-do-i-perform-a-forced-push-push-f-from-sourcetree

因此,将遥控器恢复到其原始状态的唯一方法是以相反顺序引入的每个提交git revert

假设遥控器处于提交A并且你推动你的功能分支持有提交BCD,你必须

git revert D
git revert C
git revert B
git push

推送工作正常,因为您不会修改推送的历史记录,而是推送一组新的更改。

如果您想将一系列还原缩短为一次提交,则可以执行

git rebase -i origin/master

并选择每个revert提交为squashed。然后,您的push将只包含一次恢复DCB的提交。

答案 2 :(得分:1)

执行此操作的最佳方法是使用下面图片中显示的Reset <branch> to this commit选项。

Reset to previous commit

将显示一个弹出窗口,您可以选择要选择的代码重置模式。 [见下文] Choose the mode of reset

注意: 这不完全是代码撤销,但它会完全从本地删除您的提交并使其看起来更清晰。