我很好地搞砸了我的一个项目的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个独立分支而不是合并的混乱?
答案 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--