2011-01-22 48 views
1

我有哪裏的遠程儲存有一些「壞」的承諾的情況。 例如污染遠程主分支或抗摘櫻桃

... o ---- C ---- A ---- B origin/master 

其中A是壞的(但B爲好) 我希望遠程成爲...

... o ---- C ---- B origin/master 
        \ 
        A origin/dev 

這不是明擺着要我如何做到這一點。

在一個變基是不合適的,需要一個不同的結果的情況下。

... o ---- C ---- A ---- B ---- ~A origin/master 
          \ 
          - origin/dev 

這會導致包含A提交的開發分支和不包含A提交的主控。 修訂後的問題是: 如何做一個抗摘櫻桃? 因此,不是生成將存儲庫從狀態C更改爲A的修補程序,而是應用將B更改爲A的修補程序。

+0

顯然上的共享資源庫衍合是不好的形式。在這種情況下它是可以接受的。一般來說,雖然需要更通用的解決方案。 – phreed 2011-01-24 14:56:57

回答

3

拉動以便本地具有相同的存儲庫。

使用git rebase --interactive(見this rundown,如果你不熟悉的互動變基)重新排序的A和B的承諾,所以,你現在有

... o ---- o ---- B ---- A master 

結帳離開那個地方一個新的分支開發,讓您得到

... o ---- o ---- B ---- A master, dev 

切換到主分支,做一個git reset --hard HEAD^回滾該分支一個提交。你現在有

... o ---- o ---- B master 
        \ 
        A dev 

現在git push --force --all你應該是金。 (您需要--force因爲你是在遠程存儲庫,這是危險的,不建議,如果其他開發商已經從它拉出改寫歷史。)