[英]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.