我现在使用Git很长一段时间了,但今天我遇到了一个问题,即将一些更改从分支合并到分支。我遇到的情况是 - 我有4个分支:2个主要分支和2个功能分支。我们假设他们的调用方式如下:main_branch1
,main_branch2
,feature_branch1
和feature_branch2
。功能分支始终从main_branch1
创建,当您完成工作后,将它们合并回来。然后在某些时候,他们的更改也会合并到main_branch2
。两个主要分支之间没有合并!
这就是问题所在。就我而言,feature_branch1
在某个时间从main_branch1
创建,在其中进行了一些更改并将其合并回主分支。然后我再次从feature_branch2
创建了main_branch1
,并在那里进行了更改,并将其合并回来。现在我想将feature_branch2
合并到main_branch2
,但只是将其更改 - 因为当我创建它时,我从feature_branch1
获得了更改。我尝试使用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
时,我需要稍后添加它们...
知道我该怎么做吗?谢谢! :)
答案 0 :(得分:1)
查看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
。
这是否符合你想要达到的目标?如果没有关于分支当前状态的图表,很难确定!
答案 1 :(得分:1)
如果您要从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