簡體   English   中英

如何從不同分支中的特定提交創建分支

[英]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中的較新更改集成,我建議您執行以下操作:

  • 將每個新功能分支基於master的提交
  • 在master的提交上創建一個dev分支
  • 當您需要查看功能分支如何與master中的新更改集成時,將master和feature分支合並到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

提交應該只在樹中存在一次,而不是在兩個單獨的分支中存在。

這允許您檢查特定的提交並為其命名。

你可以在本地提到這一點

git checkout -b <branch-name> <sha1-of-commit>

或者,您可以在github中執行此操作,請按照以下步驟操作:

1-在存儲庫中,單擊“ Commits

2-在要分支的提交上,單擊<>以在歷史記錄中的此時瀏覽存儲庫。

承諾歷史

3-單擊tree: xxxxxx左上角的tree: xxxxxx 只需鍵入一個新的分支名稱,單擊Create branch xxx ,如下所示。

創建新的分支

現在,您可以在本地從該分支獲取更改並從那里繼續。

暫無
暫無

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

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