Git 乱七八糟!犯了错误的错误

Git 乱七八糟!犯了错误的错误,git,branch,commit,Git,Branch,Commit,我只是在Git回购上做了一些糟糕的事情,我不知道如何处理这个问题。我甚至不知道我是怎么把它弄得这么乱的 在回购协议(托管在GitHub上)上,我感兴趣的分支有三个:master、brancheA、brancheB。brancheA和brancheB是不相关的(接触不同的文件) 以下是目前的情况: A -- B -- C -- D -- master \ \ change_from_B_1..4 -- change_from_A_1+2 -- brancheA

我只是在Git回购上做了一些糟糕的事情,我不知道如何处理这个问题。我甚至不知道我是怎么把它弄得这么乱的

在回购协议(托管在GitHub上)上,我感兴趣的分支有三个: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
我想哭:>是的,从A改变意味着“应该在A分支中的改变”!最糟糕的是,在branche A中,在我将master合并到brancheB之前,brancheB中有4个提交(将_从_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

你有什么建议吗?谢谢

你总能解决这类问题

  • 分别在branchA和branchB处创建oldBranchA和oldBranchB
  • 将branchA重置为master,将branchB重置为B
  • 结帐分行
  • 樱桃采摘1+2的零钱
  • 结帐部
  • cherry从\u B\u 1..4中选择更改\u,然后从\u master中合并\u
  • 移除oldBranchA和oldBranchB
  • 要推回原点,请执行git push-f branchA:branchA。但是在做这件事之前要考虑10次,因为你要做的是覆盖发布的历史
    谢谢对于步骤8,如何推回遥控器?我尝试了git push origin branchA,但我遇到了一个被拒绝的快进问题。“我应该强制还是意味着我在步骤上犯了错误?”安德斯,我谨慎地补充道。谢谢!我完成了所有步骤,回购似乎恢复正常!唯一的缺点是我丢失了查看代码的人对github的所有评论(cherry pick似乎重新生成了新的哈希)。我在邮件里有一份,所以没有什么大损失。@Enders,恭喜你!顺便说一句,如果您更改提交历史记录,则无法保留旧哈希。这是故意的。
    A -- B -- C -- D -- master
         \               \  -- change_from_A_1+2 -- brancheA 
          \ change_from_B_1..4 -- merge_from_master -- brancheB