4

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

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

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

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

4

4 回答 4

3

你应该能够恢复 H.

git revert H

但是,您将无法修复它并在修复后重新合并它。D 只能通过对第一次还原进行还原来重做。

根据您的工作流程,在不包含 b4 的情况下再次进行合并可能会更容易。

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

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

于 2013-01-15T08:36:23.300 回答
1

这个

本质上,您想用类似的东西撤消合并

git revert -m 1 H

创建提交L,然后在以后该提交再次生效时

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

并再次合并它。

在我的示例中,我已经完成了 revert on master,但我建议git revert H在最低级别的分支上进行初始更改,这样更改没有意义 - 如果只是为了避免它成为 master 的一部分,那么在该级别进行,但是如果您不希望它影响 b3(或任何其他分支)然后在 b3 上执行此还原 - 以及随后的还原-还原。

于 2013-11-19T10:28:37.543 回答
0

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

如果它被推送(即您不想重置):在 b3 上恢复您的合并提交(H)(这将创建一个新的提交 - 比如说 Q)并再次将 b3 合并到 master 中(因此您合并此提交以恢复更改, 由 b4) 带来。如果您想稍后将 b4 合并到 master 中,您需要:将 b3 合并到 b4(这会将 Q 带入 b4),在 b4 上恢复 Q(因此您恢复恢复) - 现在可以再次处理 b4 并合并到稍后在某个时候掌握

如果它只是一个 D commit,您不想在 master 中拥有,您可以执行以下操作:

  • 结帐 b4
  • 恢复 D (这将创建一个新的提交 - 比如说,U)
  • 将 b4 合并到 master 中(或者只挑选 U 提交,删除不需要的更改)。

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

于 2013-11-20T00:01:54.050 回答
0

假设没有推动:

        git checkout master -b old-ref

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

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

应该得到原产地/主人

    git rebase -i TEMP

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

于 2013-11-26T00:51:50.703 回答