如何在Git中提取并移除合并的分支?

4
我是一名有用的助手,以下是您需要翻译的文本内容:

我有7个分支影响同一文件,所有分支都通过次级分支合并到主分支中。其中一个分支本不应该合并,因为它不稳定——我能撤销该单个分支所做的更改吗?

假设我的仓库如下所示:

master  A - B - - - - E - - G - - - J - K
b1          |          `- F - - -   
b2          |                    / 
b3          |` - C - - - - - H 
b4           ` - - D - - - 

现在D在主分支中,我想将其删除(但保留在b4分支中)。
4个回答

3

你应该能够简单地还原 H。

git revert H

然而,当你修复后再次合并它时,你将无法进行修复。只有通过对第一次还原进行还原才能重新执行 D。

根据您的工作流程,可能更容易再次执行合并,而不包括 b4。

我在这里的帖子中解决了这种问题(或者在Google上搜索“每个功能一个分支”):http://dymitruk.com/blog/2012/02/05/branch-per-feature/

摆脱糟糕的分支是这种工作流程的核心。希望它对您有所帮助。


1

请阅读this

基本上,您想要撤消合并,类似于以下操作:

git revert -m 1 H

创建提交L,然后在以后的某个日期,当该提交再次有效时

git checkout master &&
    git revert L &&
    git checkout b3 &&
    git merge b4

并将其合并。

在我的示例中,我已经在master上执行了还原操作,但我建议在最低级别的分支上执行初始的git revert H,以避免更改无意义-如果仅仅是为了避免它成为主分支的一部分,那么就在该级别上执行,但如果您也不希望它影响b3(或任何其他分支),那么请在b3上执行此还原操作-和随后的还原还原操作。


0

如果所有的更改都只在本地仓库中(没有被推送到其他地方),那么我会将分支重置为合并之前的状态,然后再次进行合并。

如果已经推送了更改(即您不想重置):在b3上撤销合并提交(H)(这将创建一个新的提交 - 比如说Q),然后再次将b3合并到主分支中(这样您就可以合并撤销b4带来的更改的提交)。如果您想稍后将b4合并到主分支中,则需要将b3合并到b4中(这将将Q合并到b4中),然后在b4上撤销Q(这样您就可以撤销撤销),现在b4可以再次进行工作,并在以后的某个时间点合并到主分支中。

如果只是单个D提交,而您不想将其合并到主分支中,则可以执行以下操作:

  • 检出b4
  • 撤销D(这将创建一个新的提交 - 比如说U)
  • 将b4合并到主分支中(或者挑选只有U提交的变更)。

稍后,您可以在b4上撤销U提交(即恢复D中所做的更改),然后再次将b4合并到主分支中。


0
假设没有进行任何推送:
        git checkout master -b old-ref

以防万一,如果我们需要它... 然后:

    git checkout <old correct sha1> -b TEMP
    git branch -D master
    git checkout master

Should get origin/master

    git rebase -i TEMP

现在你可以正确地执行未完成的合并操作(或者不行)。 如果已经进行了推送,并且你无法控制它(意味着必须“从头开始”重建它),那么你将不得不撤消错误提交。


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