从git中还原合并和历史“撤销”
我们团队的正常流程是将我们的功能分支合并到QA分支中,测试该分支,然后将我们的功能分支移到Master中。 团队中的某个人正在遵循正常的流程,但在QA之后他并没有将他的分支合并到Master中,而是将所有QA合并到了Master中。 这把我们的主要分支搞砸了,因为其他开发商没有做过的项目进入了分支机构。
合并是从gitLab的界面完成的,而不是终端。 我们想要做的是完全恢复这个合并和所有102次提交。 恢复后我们不希望有任何历史记录。 在我们的遥控器上执行此操作的最佳方式是什么? 我已经看到人们提到使用-m和git还原,但是如果我正确理解它会扰乱历史。 合并是否没有真正的“撤销”? 我们在这里有点绝望。 谢谢!
您可以重置master
,例如
master
|
V
o--o---o--o
/
/
o---o---o
^
|
qa_branch
如果你的仓库看起来像这样,你可以做
$ git checkout master
$ git reset --hard HEAD^
的HEAD^
是用于第一父提交的快捷方式HEAD
。 你也可以使用HEAD^1
。
在你做完这个之后你的仓库看起来像
master
|
V
o--o---o
o---o---o
^
|
qa_branch
警告
现在您必须强制推送来覆盖origin/master
。 在这种情况下,您必须确保没有其他开发者在此期间在origin/master
上推送更改。 否则,这些更改将会丢失。
以这种方式强制推送
$ git push -f origin master
我相信最好的解决方案是从master
分支的最后一个优点(例如tmp-master
)创建一个新分支,然后完全删除主分支。 一旦它消失了,你可以从你的tmp-master
分支的头部创建一个新的master
。 当然,你需要强制新的主分支到原点,并让所有其他人拿着一个主副本再次把它拉下来。
我相信这些命令应该是:
git checkout master
git checkout <sha of last good commit>
git checkout -b tmp-master
git branch -d master
git checkout -b master
git push -f origin master
那么,在每个拥有master
分支的机器上:
git checkout master
git pull
对于类似(但略有不同)的方法,请查看:这个问题
恢复后我们不希望有任何历史记录。
在这种情况下,这可能是GitLab的WONTFIX,因为它们通常反对来自Web UI的历史更改。 例如http://feedback.gitlab.com/forums/176466-general/suggestions/5590144-allow-git-reset-hard-from-web-interface:
您不应该重置远程仓库上的分支机构。
所以你可能不得不求助于可以在其他答案中找到的非GitLab Git方法,以及许多其他Git问题。
链接地址: http://www.djcxy.com/p/15829.html