2011-04-19 32 views
14

我正在使用git並希望更改現有分支的基礎。這是由一個部署系統引起的,它將這個明確的分支引入我的生產環境。在規劃我的發佈時,我每次想要上線時都會創建一個標籤。但我的分支也有特殊的變化,所以git reset --hard v1.0將無法​​正常工作。在git中更改分支的根目錄

這裏有個小例子。我想這

 C---D---E deploy 
    /
A---B---F---G master 
    \ 
     v1.0 

成爲這個

      C---D---E deploy 
         /
A---B---F---G---H---I---J---K master 
    \     \ 
     v1.0    v1.1 

也許git rebase就是我尋找,但該名男子的網頁不幫我。感謝您的回覆!

回答

10

git rebase應該,像你說的,允許你改變部署的基礎:

git checkout deploy 
git rebase v1.1 # using the tag 
(or: 
git rebase J # SHA1 of J 
or 
git rebase master~1 
) 

但你最終會與

C'---D'---E' deploy 

也就是說,在提交部分的SHA1 deploy分支被重寫,如果沒有人克隆說deploy分支並且正在進行分支,那麼分支不會太壞。
由於它是部署的分支,所以最有可能是這種情況(即沒有人在處理所述分支的克隆)。

+0

但它不可能使用標籤名稱?! – micha149 2011-04-19 06:03:55

+0

@ micha149:是的,我誤以爲它是一個分支名稱! – VonC 2011-04-19 06:07:10

2

我不明白你爲什麼想失去原來的分支。我會做在這種情況下什麼:

# create a new branch from your 1.1 tag 
git checkout -b deploy1.1 v1.1 
# merge your existing branch into this one 
git merge deploy 

編輯:添加的架構

最終你會用類似的東西

 C---D---E deploy 
    /  \_______ 
    /    F deploy1.1 
    /    /
A---B---F---G--H--I--J--K--L 
    \     \ 
    v1.0     V1.1 
+0

我不想放鬆它,因爲有一些重要的變化。就像完全添加的Zend Framework Library一樣,配置數據庫連接和其他設置,我只需要在生產系統上。 – micha149 2011-04-19 06:02:58

+0

與我有關,你保留你原來的分支,並從J中合併了一個新分支,這意味着你仍然可以修改舊的1.0修補分支並在新分支上工作(在你的繪圖中,你刪除了C - D - E ,因此我的問題) – Bruce 2011-04-19 06:05:35

+1

如果您需要跟蹤每個部署所需的每個開發工作,我實際上更喜歡這個解決方案。 (所以+1)但是如果說開發工作總是相同的話,那麼簡單的rebase就足夠了。 – VonC 2011-04-19 06:09:59

2

混帳底墊應爲你工作:

git checkout deploy 
git rebase master~1 

git rebase v1.1 

看一看http://progit.org/book/ch3-6.html - 將幫助你理解衍合更好,我覺得

+0

爲您解決了'master〜1' – knittl 2011-04-19 06:26:26

2

是的,你可以使用變基到達到預期的效果。以下命令將檢出deploy分支和重放其所有的提交,這是不可達的通過v1.1,對v1.1頂部:

git rebase v1.1 deploy 

(冗長的方法是:git rebase --onto v1.1 v1.0 deploy

但爲什麼墊底和改變歷史?你可以簡單地轉變發展主線爲部署分支:

git checkout deploy 
git merge v1.1 

這將使你的所有提交的哈希值不變,你的歷史記錄會再這個樣子(M作爲合併提交):

 C---D---E-----------M deploy 
    /    /
A---B---F---G---H---I---J---K master 
    \     \ 
     v1.0    v1.1 

由於在重新綁定和合並期間可能會出現衝突,因此在使用基於合併的方法時,您將遇到合併衝突的歷史記錄。與rebase你沒有在rebase操作過程中發生衝突的歷史。使用基於合併的工作流程,您可以稍後在合併提交的(組合)區別中看到您的衝突。

+0

+1的合併衝突史。 – VonC 2011-04-19 06:50:09