修复了双重意外合并和推入 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--
我把我的一个项目的 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--