从主分支中删除单个合并分支

Posted

技术标签:

【中文标题】从主分支中删除单个合并分支【英文标题】:Remove a single merged branch from master branch 【发布时间】:2014-12-04 14:00:52 【问题描述】:

在我的 master 分支中,有以下本地分支已合并,但我想从 master 中删除 local_branch3

local_branch1
local_branch2
local_branch3
local_branch4

从 master 中删除 local_branch3 后,我希望它保持本地分支(仅从 master 中删除)。

我已经检查过Steve Harman's blog 关于这个类似的问题,但这似乎也永远删除了本地分支。

编辑:澄清我的意思,正如我在以下 cmets 中发布的那样:

我希望 master 分支撤消由 local_branch3 合并产生的更改,同时保持 local_branch3 不变。

原因是我想在调整 local_branch3 时保持 master 分支的可交付性。

【问题讨论】:

保持本地分支(仅从 master 中删除) 到底是什么意思?您要么删除本地分支,要么不删除。您是在谈论远程存储库吗? 查看有关删除远程与本地分支的答案:***.com/a/26237660/1861459 How to revert a merge commit that's already pushed to remote branch?的可能重复 【参考方案1】:

也许您的意思是从 master 恢复 local_branch3?

如果是这样,首先检查合并 local_branch3 的提交的 SHA1 值。 还有

git checkout master
git revert -m 1 <<SHA1 value>>

然后在 master 分支中没有 local_branch3 代码。并且 locah_branch3 将保留。

【讨论】:

是的,这正是我的意思。我希望 master 分支撤消由 local_branch3 合并引起的更改,同时保持 local_branch3 不变。 但请注意@jthill 在下面写的内容 - 将您的 local_branch3 合并回 master 可能并不那么简单。【参考方案2】:

如果我没看错问题,shirakia 的答案(还原合并提交的更改)是正确的,它的工作原理与宣传的一样,OP 应该使用它。

但值得指出的是,如果对 local3 的进一步工作使其整体有效,并且您自然希望重新应用原始工作以及后来的更正,会发生什么。

该合并时的 local3 提交现在是合并提交历史的一部分。因为来自 local3 的任何进一步合并的基础内容都在新的合并基础上,所以所有这些历史记录都被有效地标记为(实际上,它已经)已正确应用:任何以后的合并只看到自那时以来所做的更改。还原并未撤消该部分(事实上,这就是还原的全部意义,即不删除该提交)。

Here's a well-known discussion of how to reapply the changes if further development on local3 makes the whole thing mergeable again (you revert the revert, you put the changes back yourself)。

另一种可能更简单的说法是,撤消您不想从历史记录中删除的任何提交的正确方法是还原它。这包括以后任何撤消还原的决定。

【讨论】:

以上是关于从主分支中删除单个合并分支的主要内容,如果未能解决你的问题,请参考以下文章

git从主分支上拉取新分支以及提交代码合并到主分支

如何将错误修复分支合并到主分支?

在 git 中如何将 Feature 分支合并到 Main 分支然后重新同步

删除合并的分支给出“错误:分支 X 未完全合并......”

Git合并单个commit或者一系列commit以及合并其中一个分支的其中部分代码的操作

git分支的创建与合并