GIT修复重复提交推送到远程

时间:2015-08-21 15:57:40

标签: git github

不确定我到底做错了什么,但是我在我的git repo中弄乱了一些东西,现在看起来像这样:

master, origin/master   : C1
develop, origin/develop : C1 -> C2 -> C3 -> C4 -> C5 -> C6     -> C7
feature, origin/feature : C1 -> C2 -> C3 -> C4 -------> C6copy -> C7copy -> C8 ->...-> C50

我应该运行哪些git命令来获得我的开发和主分支的以下状态:

master, origin/master   : C1 -> C2 -> C3 -> C4 -> C5 -> C6 -----> C7 -> C8 ->...-> C50
develop, origin/develop : C1 -> C2 -> C3 -> C4 -> C5 -> C6 -----> C7 -> C8 ->...-> C50

我不再打算保留功能分支,我可以将其删除。但是我想在开始之前合并开发分支中的所有更改。好事是我是唯一一个推/拉这个存储库的人!

1 个答案:

答案 0 :(得分:1)

如果C6copy和C7copy是C6和C7的实际副本,您可以执行以下操作:

git checkout feature
git rebase develop

在这些命令之后,如果C6和C7是副本,则您的功能应如下所示:

  

功能:C1 - > C2 - > C3-> C4-> C5 - > C6-> C7 - > C8 - > ...-> C50

或者如果他们不喜欢这样:

  

功能:C1 - > C2 - > C3-> C4-> C5 - > C6-> C7 - > C6copy - > C7copy    - > C8 - > ...-> C50

如果他们不是,你想要摆脱副本,你可以交互式rebase而不是摆脱这两个复制的提交。
在功能分支中达到所需方案后,您可以执行以下操作:

git branch -f develop
git branch -f master

这会强制分支开发并掌握到当前位置,即C50,即最后一次提交功能。然后你的存储库看起来像这样:

  

origin / master:C1
  master:C1 - > C2 - > C3-> C4-> C5 - > C6-> C7 - > C8 - > ...-> C50
  origin / develop:C1 - > C2 - > C3-> C4-> C5 - > C6-> C7
  开发:C1 - > C2 - > C3-> C4-> C5 - > C6-> C7 - > C8 - > ...-> C50
  起源/特征:C1 - > C2 - > C3-> C4 -------> C6copy - > C7copy - > C8 - > ...-> C50
  特征:C1 - > C2 - > C3-> C4-> C5 - > C6-> C7 - > C8 - > ...-> C50

在这种情况下,master将在origin / master之前提交49次,并且在origin / develop之前开发将是43次提交,因此您可以正常推送它们:

git checkout develop
git push origin develop
git checkout master
git push origin master

最后,您需要做的就是删除功能。功能将提前45次提交和46次原点/功能(因为原点/功能缺少C5),您需要强制删除,因为您的分支尚未完全合并:

git branch -D feature