Git-如何合并功能分支,但排除一些提交?
我现在使用Git已经很长时间了,但是今天我遇到了一个问题,就是在不同分支之间合并一些更改。我遇到的情况是-我有4个分支:2个主要分支和2个功能分支。让我们假设它们是这样命名的:Git-如何合并功能分支,但排除一些提交?,git,version-control,merge,branch,rebase,Git,Version Control,Merge,Branch,Rebase,我现在使用Git已经很长时间了,但是今天我遇到了一个问题,就是在不同分支之间合并一些更改。我遇到的情况是-我有4个分支:2个主要分支和2个功能分支。让我们假设它们是这样命名的:main\u branch1,main\u branch2,feature\u branch1和feature\u branch2。要素分支始终是从main_branch1创建的,当您完成工作时,可以将它们合并回其中。然后在某个时间点,它们的更改也合并到main_branch2。两个主要分支之间没有合并! 问题来了。在我现
main\u branch1
,main\u branch2
,feature\u branch1
和feature\u branch2
。要素分支始终是从main_branch1
创建的,当您完成工作时,可以将它们合并回其中。然后在某个时间点,它们的更改也合并到main_branch2
。两个主要分支之间没有合并!
问题来了。在我现在的例子中,feature\u branch1
是在某个时间从main\u branch1
创建的,在它内部做了一些更改,并将其合并回主分支。然后我又从main\u branch1
创建了feature\u branch2
,在那里也做了更改,还将其合并回了它。现在我想将功能分支2
合并到主分支2
中,但只合并它所做的更改-因为当我创建它时,我从功能分支1
中得到了更改。我尝试了使用git rebase,但是没有成功,我的工作树看起来一团糟
下面是我想要实现的目标以及我的树应该是什么样子的图表:
o---------------o---------------------o main_branch1
\ / \ /
o-----------o \ /
feature_branch1 \ /
\ /
o-----------o
feature_branch2 \
\
o-----------o main_branch2
正如您在创建feature\u branch2
时所看到的,我已经从feature\u branch1
中得到了更改,这些更改被合并到main\u branch1
。当我将feature\u branch2
合并到main\u branch2
时,如何排除它们?但当我决定将feature\u branch1
合并到main\u branch2
中时,我需要添加它们
你知道我怎么做吗?谢谢!:) 查看一下
rebase--on
——它可以让您重新设置基础,但可以让您对所涉及的特定提交进行更多的控制
git-rebase--on
在您的情况下,该命令可能类似于:
git-rebase——在主分支2功能分支2上
这将签出main\u branch2
,并在其上逐个应用来自功能的提交。然后可以将功能分支2
合并到主分支2
这就是你想要实现的目标吗?如果没有分支当前状态的图表,很难确定 查看一下rebase--on
——它可以让您重新设置基础,但可以让您对所涉及的特定提交进行更多的控制
git-rebase--on
在您的情况下,该命令可能类似于:
git-rebase——在主分支2功能分支2上
这将签出main\u branch2
,并在其上逐个应用来自功能的提交。然后可以将功能分支2
合并到主分支2
这就是你想要实现的目标吗?如果没有分支当前状态的图表,很难确定 如果要从功能分支1
中排除更改,则需要在创建新分支之前签出该分支,并从功能分支2
中选择提交,然后才能在以后完全合并
git checkout -b nofeature1 <SHA before feature_branch1>
git cherry-pick <first SHA feature_branch2>^..feature_branch2
git checkout main_branch2
git merge nofeature1
git签出-b nofeature1
git cherry pick^..feature_branch2
git签出主分支2
git合并功能1
如果要排除功能分支1
中的更改,则需要在创建新分支之前签出该分支,并从功能分支2
中选择提交,然后才能在以后完全合并
git checkout -b nofeature1 <SHA before feature_branch1>
git cherry-pick <first SHA feature_branch2>^..feature_branch2
git checkout main_branch2
git merge nofeature1
git签出-b nofeature1
git cherry pick^..feature_branch2
git签出主分支2
git合并功能1
是的,我查看了--关于
参数,但我不确定它实际上对我有什么帮助。问题是,当我创建它时,来自分支功能\u branch1
的合并提交已经在功能\u branch2
中。现在我只想将feature\u branch2
合并到main\u branch2
,但没有从feature\u branch1
进行合并提交。上面的图表实际上说明了这一点。是的,我查看了<代码>--查看了<代码>参数,但我不确定它实际上对我有什么帮助。问题是,当我创建它时,来自分支功能\u branch1
的合并提交已经在功能\u branch2
中。现在我只想将feature\u branch2
合并到main\u branch2
,但没有从feature\u branch1
进行合并提交。上面的图表实际上说明了这一点。所以每次我合并到main\u branch2
,我都需要创建一个新分支,而不需要更改feature\u branch1
?@nogravity如果您的起点是main\u branch1
,那么是的,因为它的历史记录中有feature\u branch1
。我认为最好创建一个新的基本分支,而不在其历史中使用feature\u branch1
。否则,您将继续合并回main_branch1
,那么您可能也需要所有其他更改,因此,每次我都需要创建一个新分支,而不必更改feature\u branch1
,每次我合并到main\u branch2
?@nogravity如果你的起点在main\u branch1
上,那么是的,因为它在其内部有feature\u branch1
历史我认为最好创建一个新的基本分支,而不在其历史中使用feature\u branch1
。否则,您将不断地合并回main_branch1
,然后您可能还需要所有其他更改,因此看起来像git cherry pick..m