不确定我到底做错了什么,但是我在我的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
我不再打算保留功能分支,我可以将其删除。但是我想在开始之前合并开发分支中的所有更改。好事是我是唯一一个推/拉这个存储库的人!
答案 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