从主分支中删除单个合并分支
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 中如何将 Feature 分支合并到 Main 分支然后重新同步
删除合并的分支给出“错误:分支 X 未完全合并......”