2014-10-27 136 views
7

我意外地將功能分支推送到遠程主服務器。現在我想將主人恢復到之前的提交。當我選擇「將當前分支還原到此提交」時,只有本地分支被還原,並且由於遠程主服務器提前55(意外推送),我無法將剛剛還原的本地主服務器推送到遠程服務器。使用sourcetree恢復推送到遠程

在SO和Google上查看此問題時,我發現許多人使用命令行使用強制推送。但是由於我使用的是源代碼樹,我想提出一種實際使用源代碼樹的方法。

我還發現了底墊的選擇,但我似乎無法找到一個一步一步的教程..

任何想法?

回答

0

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將只包含一次提交,一次性返回D,CB

+0

我發現大部分與sourcetree相關的答案都說'-f'不是必需的,而且可以用'rebase'來完成。我假設有一個sourcetree的方法來實現這一點,但你的回答表明它不能用sourcetree完成? SO上的大多數其他答案也顯示實際的GIT命令,而不是源樹步驟。我不是GIT精明的,可以自己做這個翻譯。 – Greggg 2014-10-27 15:15:19

+0

這不能用rebase來完成。如果你願意使用控制檯,那麼在那裏指定'-f'標誌。 – eckes 2014-10-27 15:24:24

+0

所以不可能只使用SourceTree? – 2014-10-29 12:13:40

8

當你推送一個提交時,最安全的方法來恢復它(而不是使用-f強制推送)是使用revert函數,所以在之前的提交之上創建一個新的提交。

這是可以做到的,使用Sourcetree,右鍵單擊要恢復的提交,然後選擇「反向提交...」。

enter image description here

您將需要爲每個做這個承諾要恢復,按相反的順序。

1

執行此操作的最佳方法是使用下圖中顯示的Reset <branch> to this commit選項。

Reset to previous commit

一個彈出會顯示給你選擇,你喜歡什麼模式碼復位的選擇。 [見下文] Choose the mode of reset

注:這是不完全的代碼逆轉,但它消除你從遠程完全提交,並使它看起來更清潔。

+0

這隻影響本地分支。如果你已經推送了你的提交,這只是從你的本地回購中刪除數據 - 遠程將會有所有的變化。 – 2018-01-23 23:00:47