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

时间:2015-11-30 20:49:46

标签: git merge git-revert

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

这就是我想要的:

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

总共四个分支,3个不稳定的分支和一个主人。

然而,不知何故,我创建了一个偶然的合并,然后在我尝试撤消它时又发生了另一个糟糕的合并。所以现在我的存储库看起来像这样:

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

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

幸运的是,我确切知道每个文件在每个分支上应该是什么样子,我可以在我的团队恢复行动之前在遥控器上重写历史记录几周。

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

1 个答案:

答案 0 :(得分:2)

假设示例提交标识符准确反映了提交的实际安排:

从起点开始:

    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--