2011-09-29 65 views
2

我有一個git工作流問題,並且我沒有完全理解所有條款以知道該如何處理Google。Git:從克隆更改爲遠程分支

簡短版本:當本地存儲庫作爲遠程存儲庫的克隆啓動時,是否可以將本地git目錄「切換」爲遠程存儲庫的分支?我對git很陌生,所以我仍然在這裏加快速度,如果我已經說過一些似乎是錯誤/假設的事情,請讓我知道。

長版。

我有一個本地存儲庫,它是「中央」存儲庫的克隆。這個存儲庫有幾個分支,每個分支在原始存儲庫的主分支之前有很多修訂。

$ git branch 
    foo 
* master 
    universal_imports  

我知道我可以「切換」到我的本地分支之一,通過使用Git的checkout命令

$ git checkout foo 
$ git checkout universal_imports 
etc. 

我也有幾個遙控器

$ git remote 
origin 
upstream 

upsteam的主人分支是我們的真相之源。它是產品,上述的中央庫。如前所述,我的本地主存儲庫是作爲此存儲庫的克隆而開始的。 (實際上,我的本地存儲庫是遠程的origin的一個克隆,它是上游主分支的github fork。我不確定這是否相關)

這是我試圖解決的場景。我一直在我的分支上進行新的開發。我有很多版本超過原來的主人。但是,我剛剛收到了修復生產中的問題的請求。我在這裏的心智模型將

    所以它的生產代碼
  1. 做修復並提交
  2. 合併我的本地代碼轉換成源的真理分支匹配
  3. 交換機我的本地代碼
  4. 將我的本地代碼切換回我的「真實」分支,並繼續開發新功能

目標是避免在準備好之前將任何新代碼投入生產。

缺少重新克隆中央存儲庫的地方,有沒有一個git工作流程?理想情況下,我想像我描述的「切換到遠程分支」,但如果這是無稽之談,有沒有辦法我可以用git來處理這種情況。 (在新的工作上大開眼界,但主要是能夠在歷史的後面進一步工作)

回答

2

您可以創建一個新分支來跟蹤這樣的遠程分支(這裏的本地分支稱爲'bugfix') :

git checkout -b bugfix upstream/master 

一旦你有一個本地分支跟蹤,並與所需的遠程分支同步,你可以進行更改,然後git commitgit push,然後結帳你原來工作的分支。

最後,再次檢查你的工作分支之後,你想要麼合併您的bug修正變更到您的工作的分支這樣的:

git merge bugfix 

或者重訂像這樣(墊底創造一個更清潔的歷史但在解決conflifcts更多的工作):

git rebase -i bugfix 

你可以繼續留下分支存在(在這種情況下,你可能會想將它的東西比「漏洞修復」更持久,可能像「上游主人「或」現場產品「,或w hatever)。或者你可以刪除本地分支,如果你不想要它,像這樣:

git branch -D bugfix