簡體   English   中英

在git中更改分支的根目錄

[英]Change root of a branch in git

我正在使用git並希望更改現有分支的基礎。 這是由部署系統引起的,該系統將此顯式分支拉入我的生產環境。 在規划我的版本時,我每次想要上線時都會創建一個標簽。 但我的分支也有特殊的變化,所以git reset --hard v1.0將無效。

這是一個小例子。 我要這個

      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是我正在尋找的,但是手冊頁對我沒有幫助。 謝謝你的回復!

像你說的那樣, 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分支,並在努力。
由於它是用於部署的分支,因此很可能就是這種情況(即沒有人正在研究所述分支的克隆)。

我不明白你為什么要失去原來的分支。 在這種情況下我會做什么:

 # 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

是的,你可以使用rebase來達到預期的效果。 以下命令將檢出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運行期間,您沒有沖突歷史記錄。 使用基於合並的工作流,您可以稍后在合並提交的(組合)差異中查看您的沖突。

git rebase應該適合你:

git checkout deploy
git rebase master~1

要么

git rebase v1.1

看看http://progit.org/book/ch3-6.html - 我認為應該幫助你更好地理解rebase

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM