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

时间:2013-01-15 08:25:25

标签: git version-control branching-and-merging feature-branch

我有7个影响相同文件的分支,所有分支都通过辅助分支合并到主分支中。其中一个分支并不意味着要合并,因为它不稳定 - 我可以撤消该单个分支所做的更改吗?

假设我的存储库如下所示:

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

现在D在主人中。我想删除它(但保留在b4分支中)。

4 个答案:

答案 0 :(得分:3)

你应该能够恢复H。

git revert H

但是,您将无法修复它并在以后修复时重新合并。 D只会通过恢复第一个恢复来重做。

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

我在这里的帖子(或谷歌“每个功能分支”)中解决了这类问题:http://dymitruk.com/blog/2012/02/05/branch-per-feature/

摆脱坏分支是这个工作流程的核心。我希望它可以帮助你。

答案 1 :(得分: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上做这个恢复 - 以及随后的恢复 - 恢复 - 。

答案 2 :(得分:0)

如果一切都在你的本地仓库中(没有被推到任何地方),我只需要在合并之前将分支重置为状态并再次进行合并。

如果它被推(即你不想重置):在b3上恢复你的合并提交(H)(这将创建一个新的提交 - 比方说,Q)并将b3合并到master中再次(所以你合并这个提交由b4带来的还原变化的提交)。如果你想稍后将b4合并到master中,你需要:将b3合并到b4(这会将Q引入b4),在b4上恢复Q(所以你还原恢复) - 现在b4可以再次处理并合并到稍后掌握

如果它只是一个D提交,您不想拥有,请执行以下操作:

  • 结帐b4
  • 还原D(这将创建一个新的提交 - 比方说,U)
  • 将b4合并到master(或者只是U-commit,删除不需要的更改)。

稍后,您可以在b4上恢复U commit(即返回D中的更改)并再次将b4合并到master中。

答案 3 :(得分:0)

假设没有推动:

        git checkout master -b old-ref

万一我们需要它......然后:

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

应该获得origin / master

    git rebase -i TEMP

现在你可以正确地(或不是)完成未完成的合并。如果进行了推送,并且您无法控制它(意味着重建它&#34;从头开始&#34;),您将不得不恢复错误提交。