2010-02-07 52 views
11

我最近有一個關於多計算機git開發設置的question answered,我得到的解決方案確實解決了我與master分支的情況,但沒有基於主分支的分支。重建分支的git同步

這裏是我的當前設置:

A--B--C--D master 
      \ 
      E--F--G--H BUG_37 

BUG_37是開發一個修復程序在系統功能要求的可選跟蹤的錯誤了分公司,並最終將被合併到主線,但暫時分開。在這種狀態下的存儲庫,一個一個機器,我做了一些改動master分支:

A--B--C--D--I--J--K master 
      \ 
      E--F--G--H BUG_37 

我再重訂的BUG_37分支到master,以確保它的工作,以增強最新的變化:

A--B--C--D--I--J--K master 
        \ 
        E1--F1--G1--H1 BUG_37 

假設rebase有幾個衝突需要在rebase最終確定之前手動修復。如果我將這些更改推送到遠程存儲庫,並且現在希望將更改轉移到另一個仍然具有原始設置的開發系統,那麼最好的方法是什麼? git pull --rebase將再次運行rebase,我將不得不手動去解決我第一次經歷的衝突,對吧?如果我再次遇到衝突時會犯一個小錯誤,例如E1-H1在這個新系統中稍有不同,我會讓版本庫更加不同步。

如何在原始狀態下以本地存儲庫和處於第三種狀態的遠程存儲庫,並更新本地存儲庫以與遠程存儲庫完全匹配(廢除更改EH並將BUG_37的HEAD移動到新的位置)?

回答

4

我不會變基在所有上已經共享的分支。雖然它產生了最清潔的歷史,但它將改變BUG_37中所有提交的哈希值。因此在目標機器上,您需要完全刪除BUG_37並再次將其拉出。這可以做一兩次,但不像常規工作流程那麼好。

這將是更容易合併masterBUG_37;那麼合併提交(在您解決衝突的地方)可以推送到其他機器,並且分支不需要被刪除。

4

刪除分支,然後從遠程存儲庫中提取兩個分支。

git branch -D BUG_37 
git pull origin master 
git pull origin BUG_37:BUG_37 

如果你不想被確定這個工程之前刪除本地BUG_37分支,拉遠程分支到另一個地方分支:

git pull origin BUG_37:NEW_BUG_37 
3

我遵循相同的工作流程,基本上在筆記本電腦和臺式機之間切換。我將桌面和筆記本電腦克隆的主要回購保存在deskotp的回購庫中。最終他們不同步,因爲我更新master後,我想重新分配我的主題分支。

答案很簡單,就是不要使用git,而是使用rsync,讓您的回購同步。如果你知道你是唯一處理它的人,那麼這是有道理的。

那麼,我不是那種解決方案的粉絲。所以,這可能有點「更清潔」。在筆記本電腦上,拉從桌面的回購重建基礎分支時:

git co topic 
git fetch origin/topic 
git reset --hard origin/topic 

這將拋出任何承諾不會在桌面上的回購,所以一定要確保你真的想這樣做。

此外,你可能只是git pull筆記本電腦的master分支,因爲它應該總是快速前進,因爲你可能不需要重新綁定它。我認爲重新分配主題分支是有意義的,儘管如此,否則試圖將它合併回主最終是一種痛苦。

2

我剛剛嘗試過,並使用git pull --rebase工作時從重新啓動的分支拉。沒有--rebase標誌,提交將被複制,但--rebase提交不會被複制。