[英]How to create the branch from specific commit in different branch
我在master分支中做了幾次提交,然后將它們合並到dev分支。
我想從dev分支中的特定提交創建一個分支,它首先在master分支中提交。
我使用了命令:
git checkout dev
git branch <branch name> <commit id>
但是,這會從master分支創建分支,而不是我期望的dev分支。 master分支和dev分支中的commit id相同。 那么,我如何區分不同分支中的相同提交ID?
PS:我在github上做了一個例子https://github.com/RolandXu/test_for_branch
我使用了命令:
git checkout dev
git branch test 07aeec983bfc17c25f0b0a7c1d47da8e35df7af8
我期望的是測試分支包含aa.txt bb.txt cc.txt。 但是,測試分支僅包含aa.txt和cc.txt。 它很可能是從主分支創建了分支。
如果您使用這種形式的branch
命令(帶起點),則HEAD
位置無關緊要。
你在做什么:
git checkout dev
git branch test 07aeec983bfc17c25f0b0a7c1d47da8e35df7af8
首先,將HEAD
設置為分支dev
,
其次,在commit 07aeec98
上啟動一個新分支。 此提交中沒有bb.txt(根據您的github repo)。
如果要在剛剛簽出的位置啟動新分支,可以運行沒有起始點的分支:
git branch test
或者像其他人一樣,在一次操作中分支和結賬:
git checkout -b test
我認為你可能會因為07aeec98
是分支dev
一部分而感到困惑。 確實,這個提交是dev
的祖先,它需要進行更改以達到dev
的最新提交。 但是,它們是達到最新dev
所需的其他提交,這些不一定是07aeec98
的歷史。
8480e8ae
(您添加bb.txt的地方)不在07aeec98
的歷史記錄中。 如果從07aeec98
分支,則不會得到8480e8ae
引入的8480e8ae
。
換句話說:如果將分支A和分支B合並到分支C中,然后在提交A時創建新分支,則不會獲得B中引入的更改。
在這里,你有兩個並行分支master和dev,你在dev中合並。 從master的提交(比合並更早)分支將不會為您提供dev的更改。
如果要將master中的新更改永久集成到功能分支中,則應將master
合並到其中並繼續。 但是,這將在您的功能分支中創建合並提交。
如果您尚未發布功能分支,則還可以在更新的主分支上重新定義它們: git rebase master featureA
。 准備好解決可能的沖突。
如果您想要一個工作流程,您可以在其中處理沒有合並提交的功能分支,並且仍然可以與master中的較新更改集成,我建議您執行以下操作:
dev
分支 dev
。 不要直接提交到dev
,只將它用於合並其他分支。
例如,如果您正在處理功能A和B:
a---b---c---d---e---f---g -master
\ \
\ \-x -featureB
\
\-j---k -featureA
將分支合並到dev
分支以檢查它們是否與新主服務器配合良好:
a---b---c---d---e---f---g -master
\ \ \
\ \ \--x'---k' -dev
\ \ / /
\ \-x---------- / -featureB
\ /
\-j---k--------------- -featureA
您可以繼續處理功能分支,並定期將主數據庫和功能分支的新更改合並到dev
。
a---b---c---d---e---f---g---h---i----- -master
\ \ \ \
\ \ \--x'---k'---i'---l' -dev
\ \ / / /
\ \-x---------- / / -featureB
\ / /
\-j---k-----------------l------ -featureA
當需要集成新功能時,將功能分支(不是dev
!)合並到master中。
您的參數順序錯誤:
git branch <branch-name> <commit>
為此,檢查哪個分支並不重要; 它會做你說的。 (如果省略commit參數,則默認在與當前參數相同的位置創建分支。)
如果要在創建時檢出新分支:
git checkout -b <branch> <commit>
如果省略commit參數,則具有相同的行為。
你必須做:
git branch <branch_name> <commit>
(您正在交換分支名稱並提交)
或者你可以這樣做:
git checkout -b <branch_name> <commit>
如果代替您使用分支名稱,您將從分支的末端獲得分支。
嘗試
git checkout <commit hash>
git checkout -b new_branch
提交應該只在樹中存在一次,而不是在兩個單獨的分支中存在。
這允許您檢查特定的提交並為其命名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.