![](/img/trans.png)
[英]How can we restrict git to not allow merge from the feature branch if it is some commits behind the destination branch
[英]Git - how to merge feature branch, but exclude some commits?
我已經使用Git很長時間了,但是今天我遇到了合並分支之間的某些更改的問題。 我遇到的這種情況是-我有4個分支:2個主要分支和2個特征分支。 假設它們的調用方式如下: main_branch1
, main_branch2
, feature_branch1
和feature_branch2
。 要素分支總是從main_branch1
創建的,當您完成工作時,將它們合並回去。 然后在某個時間點,它們的更改也會合並到main_branch2
中。 兩個主要分支之間沒有合並! 問題來了。 在我現在的情況下, feature_branch1
有時是從main_branch1
創建的,在其中進行了一些更改並將其合並回主分支。 然后,我再次從main_branch1
創建了feature_branch2
, main_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.