2013-09-26 33 views
1

我知道這個問題以前有人問,但儘管給出答案git reset --hard HEAD~1作品,我不能因爲服務器是向前推進到服務器。明顯的拉動讓我回到了原來的位置。Git的 - 如何回滾

如何重置服務器?

+1

使用'git revert'並推送。 – Mali

+2

強制PSA:推動重寫歷史的改變被認爲是......「反社會」。 Git只能讓你做到這一點,而不是因爲它是一個好主意。 – millimoose

+0

對。那麼如何回滾?這不是源頭控制點嗎? –

回答

2

一推,只要你有一定的變化的使用。

git push origin --force 
+0

這是有效的,但如果其他人已經拉動了歷史呢?他將無法在不改寫自己 – ThanksForAllTheFish

+0

@mardavi這是正確的 - 另一個人可以「挑選」他們的承諾 - 也許它值得研究。爲什麼不只是做另一個修復你想刪除的修改的提交,這樣你的朋友就不需要這樣做。 –

+0

Oliver的答案立即解決了這個問題,但請看VonC的答案,因爲它反映了我應該做的事情。 –

2

力推是一個選項,如果你的同事接受自己的本地分支重置爲新的原點/主(假設我們正在談論的是「主」分支)。

git fetch 
git reset origin/master 

(不是reset --hard,因爲這將消除在進步和私人檔案工作)
(請注意,它會unstage任何已經添加到索引)


另一種選擇,「撤消你的蠢蛋」(如果你已經推錯了),它將恢復它,創建一個新的取消前一個。
參見git revert

然後,您可以推(推定期),其恢復提交。

+1

還原通常是撤消更改的安全正確方法。它相當於其他VCS中的所有恢復/撤消機制,並且會保留錯誤的提交以及您在歷史記錄中恢復它的事實。 – poke

1

這一切都取決於項目的約定。安全的做法是使用git revert,因爲如果這是策略,您可以隨後放棄提交。如果要恢復合併,則需要使用git revert --mainline <parent-number>指定要恢復到哪個父級(「主線」)。

你應該問項目的維護者解釋一下在您的特定情況下做的。


在我們的團隊,我們用下面的一組規則:

  • 只有拉使用變基(branch.autosetuprebase=always
  • master是唯一的 「公共」 分支
  • 發展分支機構保持「私人」甚至當推到我們的共享服務器

這意味着每個人都隨意隨自己的私人分支去做任何他們想做的事情,你可以根據自己的意願改變或放棄提交。另一方面,我們的共享服務器被配置爲拒絕強制推送給主。

這並不是說我們從來沒有重置主,有時(也許一年一次),有人可能會意外地推動合併,我們認爲,這將非常搞砸了我們的歷史。在這些特殊情況下,我們的一位git-gurus會給整個團隊寫一封電子郵件,解釋即將發生的事情以及更新本地克隆的步驟。