从主分支中删除一个已合并的分支。

18

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

local_branch1
local_branch2
local_branch3
local_branch4
在从主分支中删除local_branch3后,我希望它仍然是一个本地分支(只从主分支中删除)。
我已经查看了Steve Harman的博客,但那似乎也会永久删除本地分支。 编辑:为了澄清我的意思,正如我在下面的评论中发布的:
  

我希望主分支撤消由于合并local_branch3而产生的更改,同时保持local_branch3不受影响。

原因是我想在local_branch3上进行微调,同时保持master分支可交付。

你所说的“保持本地分支(仅从主分支中删除)”是什么意思?你要么删除本地分支,要么不删除。你是在谈论远程存储库吗? - Sascha Wolf
请查看有关删除远程与本地分支的答案:https://dev59.com/h3I-5IYBdhLWcg3wI0p9#26237660 - pherris
可能是重复的问题:如何撤销已经推送到远程分支的合并提交? - Andrew C
2个回答

25

也许你的意思是要从主分支回滚本地分支3?

如果是这样,请先检查合并本地分支3的提交的SHA1值。然后

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

那么主分支中就没有 local_branch3 的代码了,local_branch3 将保留。


是的,这正是我想要的。我希望主分支撤销由local_branch3合并产生的更改,同时保持local_branch3不变。 - TonyGW
但要注意@jthill下面写的 - 将您的local_branch3合并回主分支可能不那么简单。 - carecki

5
如果我理解问题正确,shirakia的答案(还原合并提交的更改)是正确的,它的效果如广告所述,OP应该使用它。
但值得指出的是,如果在local3上进行进一步的工作使其整个有效,并且您自然希望重新应用原始工作以及后来的更正,则会发生什么。
截至合并时的local3提交现在是合并提交历史的一部分。由于从local3进行任何进一步合并的基本内容位于新合并基础处,因此所有这些历史记录实际上已标记为(实际上已经)已正确应用:任何后来的合并只看到从那时起进行的更改。还原没有撤消那部分(事实上,这就是还原的全部目的,不要删除该提交)。
这里是一个众所周知的讨论如何重新应用更改,如果在local3上进行进一步开发使整个过程再次可合并(您还原还原,您自己放回更改)

另一种更简单的表述方式是,撤销任何您不想从历史记录中删除的提交的正确方法是还原它。这包括后来决定撤销还原的情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接