修复了双重意外合并和推入 git

Fixed double accidental merge and push in git

我把我的一个项目的 git 存储库搞砸了,需要帮助修复它。

这就是我想要的:

alpha      E--
          /
master --A--
         |\
beta     | B--C--
          \
gamma      D--

总共四个分支,三个不稳定分支和一个主控。

然而,不知何故,我创建了一个意外的合并,然后当我试图撤消它时又创建了一个错误的合并。所以现在我的存储库看起来像这样:

master --A--E--------Y
         |          / \
beta     |   X--B--C   Z--C'
          \ / 
gamma      D--B?--C?

根本没有 alpha 分支(不知何故,即使我确实做了 git checkout -b alpha),beta 分支处于非常奇怪的回归状态,并且 gamma 分支具有 beta 的提交在它上面分支​​,没有任何明显的合并。

幸运的是,我确切地知道每个文件在每个分支上应该是什么样子,并且我可以在我的团队 returns 采取行动之前的几周内在远程重写历史记录。

如何在不丢失工作的情况下创建我的 4 个独立分支而不是合并的混乱?

假设示例提交标识符准确反映了您的提交的真实排列:

起点:

    master --A--E--------Y
             |          / \
    beta     |   X--B--C   Z--C'
              \ / 
    gamma      D--B?--C?

1.

git checkout master
git reset --hard A

    master --A
             |\-E--------Y
             |          / \
    beta     |   X--B--C   Z--C'
              \ / 
    gamma      D--B?--C?

2.

git checkout gamma
git reset --hard D

    master --A
             |\-E--------Y
             |          / \
    beta     |   X--B--C   Z--C'
              \ / 
    gamma      D

3.

git checkout -b alpha
git reset --hard E

    master --A
    alpha    |\-E
             |   --------Y
             |          / \
    beta     |   X--B--C   Z--C'
              \ / 
    gamma      D

4.

git checkout beta
git reset --hard C

    alpha      E
              /
    master --A
              \
    gamma      D
                \
    beta         X--B--C

git rebase --onto master X C

    alpha      E--
              /
    master --A--
             |\
    beta     | B"--C"--
              \
    gamma      D--