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

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。两个主要分支之间没有合并! 问题来了。在我现

我现在使用Git已经很长时间了,但是今天我遇到了一个问题,就是在不同分支之间合并一些更改。我遇到的情况是-我有4个分支:2个主要分支和2个功能分支。让我们假设它们是这样命名的:
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