我刚刚在 Git repo 上做了一些糟糕的事情,我不知道如何解决这个问题。我什至不知道我是怎么把它弄得这么乱的……!
在 repo(托管在 git hub 上)上,有 3 个我感兴趣的分支:master、brancheA、brancheB。brancheA 和 brancheB 不相关(涉及不同的文件)。
这是它目前的样子:
A -- B -- C -- D -- master
\ \ change_from_B_1..4 -- change_from_A_1+2 -- brancheA
\ -- merge_from_master -- change_from_A_1 -- change_from_A_2 -- brancheB
我想哭:> 是的,change_from_A 的意思是“应该在 Branche A 中的更改”!最糟糕的是,在分支 A 中,在我将 master 合并到 brancheB 之前,有 4 个提交在 brancheB (change_from_B_1..4) 中使用。现在,这 4 个提交在 brancheA 中(如何??),不再在 brancheB 中。
我不知道我做了什么来解决这种情况,如果有帮助,这里是我的 git reflog 的一些摘录:
b8b5db7 HEAD@{0}: checkout: moving from brancheA to brancheB
015fdc1 HEAD@{1}: checkout: moving from brancheB to brancheA
b8b5db7 HEAD@{2}: checkout: moving from brancheA to brancheB
015fdc1 HEAD@{3}: checkout: moving from master to brancheA
3830ccb HEAD@{4}: checkout: moving from brancheB_tmp to master
2a9ba60 HEAD@{5}: cherry-pick: change_from_B_1
3830ccb HEAD@{6}: checkout: moving from 3830cc to brancheB_tmp
3830ccb HEAD@{7}: pull origin master: Fast-forward
8ef3368 HEAD@{8}: checkout: moving from brancheB to master
b8b5db7 HEAD@{9}: pull origin brancheA: Merge made by recursive.
cc17c2e HEAD@{10}: pull origin brancheB: Fast-forward
d867eff HEAD@{11}: HEAD^^: updating HEAD
cc17c2e HEAD@{12}: checkout: moving from brancheA to brancheB
015fdc1 HEAD@{13}: commit: change_from_B_6?? (lost :<)
2f650f6 HEAD@{14}: commit: change_from_B_5?? (lost :<)
9098bfa HEAD@{15}: commit: change_from_A_1+2
01c7a5e HEAD@{16}: HEAD^^^: updating HEAD
cc17c2e HEAD@{17}: checkout: moving from brancheB to brancheA
cc17c2e HEAD@{18}: merge brancheA: Fast-forward
d867eff HEAD@{19}: checkout: moving from brancheA to brancheB
cc17c2e HEAD@{20}: commit: change_from_A_2
3bee54e HEAD@{21}: checkout: moving from brancheB to brancheA
d867eff HEAD@{22}: checkout: moving from brancheA to brancheB
3bee54e HEAD@{23}: commit: change_from_A_1
d867eff HEAD@{24}: checkout: moving from d867eff to brancheA
d867eff HEAD@{25}: checkout: moving from brancheB to another_branch
d867eff HEAD@{26}: checkout: moving from another_branch to brancheB
d867eff HEAD@{27}: checkout: moving from d867eff to another_branch
d867eff HEAD@{28}: commit (merge): Merge branch 'master' of super_github
01c7a5e HEAD@{29}: commit: change_from_B_4
1dbc4e1 HEAD@{30}: commit: change_from_B_3
52417fa HEAD@{31}: commit: change_from_B_2
8e5d258 HEAD@{32}: commit: change_from_B_1
8ef3368 HEAD@{33}: checkout: moving from master to brancheB
对我来说,在我开始引入 brancheA 之前,一切看起来都很正常(d867eff HEAD@{24}: checkout: 从 d867eff 转移到 brancheA)。当时,我只是在编写代码,并没有真正关心 git……大错特错。无论如何,我不确定是什么造成了混乱,是 cc17c2e HEAD@{18}: merge brancheA: Fast-forward 吗?我不记得要求那个...!其余的可能是让混乱变得更糟的东西,我很惭愧把它放在这里,但在这一点上,我感到很无助。
我考虑过从头开始重新启动并从 master 重新生成所有提交,但是我会丢失代码审阅者在 github 上的所有评论,这将是一个巨大的损失。
我想做的事:
- 删除 brancheB 中的 change_from_A_1 / change_from_A_2
- 在从 master 合并之前移回 brancheA 中应该在 brancheB 中的提交
要达到这样的目的:
A -- B -- C -- D -- master
\ \ -- change_from_A_1+2 -- brancheA
\ change_from_B_1..4 -- merge_from_master -- brancheB
你有什么建议吗?谢谢!!