没有合并的git合并

没有合并的git合并,git,merge,Git,Merge,我有一个问题,我分别在dev和本月的release分支上做了相同的错误修复,但是由于架构的不同,修复在两个分支上的不同文件中 我遵循的是,将发布分支合并回dev中,但既然该修复已经应用到dev中,有没有一种简单的方法可以“合并”但只保留dev中的内容 dev branch: dev - changes - fix1a - moreChanges -?- justKeepDev \

我有一个问题,我分别在dev和本月的release分支上做了相同的错误修复,但是由于架构的不同,修复在两个分支上的不同文件中

我遵循的是,将发布分支合并回dev中,但既然该修复已经应用到dev中,有没有一种简单的方法可以“合并”但只保留dev中的内容

dev branch:      dev - changes - fix1a - moreChanges -?- justKeepDev
                   \                                     /?/
release branch:     release14.01 - fix1b ----------------

一种方法是恢复
fix1a
,然后将发布分支直接合并回开发分支。这将有效地撤消由
fix1a
引入的所有更改,这样当您从发布分支合并相同的修复时,那里的修复将返回到开发分支。如果您当前在
dev
分支上处于
moreChanges
,在
release14.01
分支上处于
fix1b
,则类似于:

git checkout dev
git revert (commit hash of fix1a)
git merge release14.01

如果您需要帮助可视化恢复将执行的操作,我认为找到的图表将非常有用。

如果我正确理解您的意思,我们的合并策略应该满足您的需要。从文件中:

ours
    This resolves any number of heads, but the resulting tree of
    the merge is always that of the current branch head,
    effectively ignoring all changes from all other branches. It
    is meant to be used to supersede old development history of
    side branches. Note that this is different from the -Xours
    option to the recursive merge strategy.
要使用此功能,请执行以下操作:

git checkout dev
git merge -s ours release14.01

这里有
我们的
合并策略(不要与
递归
合并策略的
我们的
参数混淆):

这将在分支
dev
中进行合并提交,以便
dev
看起来合并了
rel7
,但将使用分支
dev
中的所有(且仅)文件。这是否真的能让你有所收获取决于你如何使用它们:进行这种合并的意义在于,如果
rel7
上有一个稍后的补丁,可以合并到
dev
中而不做任何更改,1你可以先将它提交给
rel7
,然后再提交,
git将rel7
合并到
dev
中,以在
dev
中获取相同的修复


1换句话说,作为单独的“fix1b”和“fix1a”提交的修复程序不合格。您无法简单地将fix1b更改合并到另一个文件/函数/任何内容中。首先修复
rel7
中的问题,然后将
rel7
合并到
dev
中,没有任何好处。(通常很难事先判断这是否属实,所以你可以按如下所述进行尝试,然后发现没有优势的情况……之后,你就可以选择你的毒药了,就“如何做”而言,这类情况没有单一的最佳答案。)


这里的想法是首先在发布分支上进行修复,然后将相同的修复合并到开发行中。将此“虚拟”合并到
ours
策略中,只需设置一些设置,以便下一次合并不会尝试引入“fix1b”


使用链接页面上描述的方法,您应该首先在发布分支(或发布分支下的分支)上编码“fix1b”,然后测试并发布它。然后,您将执行一个
git merge
将其引入
dev
,如果该合并需要更改,您可能会将更改作为合并的一部分(有些人确实不喜欢此方法)或作为单独的修复提交(我自己也不喜欢此方法,它通常会导致合并提交本身中断或测试失败).

google for
cherry pick
@zerkms,但我不想随便挑选任何东西,这是最重要的。我只想注册合并。对,对未来合并的影响是首要考虑的;即使不再有发布分支更新,当所有内容最终同步到master时,仍然可能会导致问题。本应按照所述方式完成,但当发现错误时,开发人员已经偏离太多,无法轻松实现该方法,因此这似乎是最佳的替代选项。对于
fix1b
,您可以从
dev
创建一个新分支,将
released
合并到此分支中(无需手动更改),修复一个新的提交,然后将新分支合并到
dev
=>中,最后一次合并将触发CI测试,通过+代码审阅者将看到git做了什么以及哪些是手动更新:)
$ git checkout dev
$ git merge -s ours rel7