簡體   English   中英

Git-如何合並功能分支,但排除一些提交?

[英]Git - how to merge feature branch, but exclude some commits?

我已經使用Git很長時間了,但是今天我遇到了合並分支之間的某些更改的問題。 我遇到的這種情況是-我有4個分支:2個主要分支和2個特征分支。 假設它們的調用方式如下: main_branch1main_branch2feature_branch1feature_branch2 要素分支總是從main_branch1創建的,當您完成工作時,將它們合並回去。 然后在某個時間點,它們的更改也會合並到main_branch2中。 兩個主要分支之間沒有合並! 問題來了。 在我現在的情況下, feature_branch1有時是從main_branch1創建的,在其中進行了一些更改並將其合並回主分支。 然后,我再次從main_branch1創建了feature_branch2main_branch1那里進行了更改,並將其重新合並到其中。 現在,我想將feature_branch2合並到main_branch2 ,但只合並其中的更改-因為創建它時,我從feature_branch1獲得了更改。 我嘗試使用git rebase ,但git rebase ,而且我的工作樹看起來像是一團糟。

這是我想要實現的圖以及樹的外觀:

o---------------o---------------------o  main_branch1
 \             / \                   /
  o-----------o   \                 /
feature_branch1    \               /
                    \             /
                     o-----------o
                  feature_branch2 \
                                   \
                                    o-----------o  main_branch2

如您所見,當我創建feature_branch2 ,我已經從feature_branch1獲得了更改,這些更改已合並到main_branch1 當我將feature_branch2合並到main_branch2時,如何排除它們? 但是,當我決定將feature_branch1合並到main_branch2時,稍后需要添加它們。

知道我該怎么做嗎? 謝謝! :)

回顧一下rebase --onto它可以讓您重新設置基礎,但可以使您對所涉及的特定提交有更多的控制權。

git rebase --onto <new_base_branch> <old_base_branch> <branch_to_rebase>

在您的情況下,該命令可能類似於:

git rebase --onto main_branch2 <hash_of_commit_at_base_of_main_branch2> feature_branch2

這將檢出main_branch2並逐一應用來自feature_branch2的提交。 然后,您可以將feature_branch2合並到main_branch2

這是否符合您想要實現的目標? 沒有分支的當前狀態圖就很難確定!

如果要從feature_branch1排除更改,則需要在創建新分支之前從中簽出,然后從feature_branch2挑選提交,然后稍后就可以完全合並。

git checkout -b nofeature1 <SHA before feature_branch1>
git cherry-pick <first SHA feature_branch2>^..feature_branch2
git checkout main_branch2
git merge nofeature1

暫無
暫無

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

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