还原合并Git-Flow

时间:2013-04-18 10:41:17

标签: git git-flow

我正在使用SourceTree和Git-Flow模式。现在我准备了一个版本供我的beta测试人员测试,所以我创建了一个新的release/v1.0.1分支。但是我的思绪滑落了,我决定完成(合并到developmaster并标记)该版本,即使我还没有发布给我的测试人员。所以我想让发布分支再次打开,如果我的测试人员发现任何错误我可以在发布分支中修复这些错误,然后当所有错误得到修复后我就可以完成发布。

那么我怎样才能轻松地使用SourceTree(或使用git命令)恢复到我拥有release/v1.0.1分支时的状态?

来自SourceTree的附加screendump:

enter image description here

编辑:好的我在git reset --hard HEAD~2上做了develop(HEAD~2),因为我已经测试了手动检出。但是现在当我结账master并做git reflog时,在我看来我应该重置HEAD~6

Peters-MacBook-Pro:Remessage peterwarbo$ git reflog
f7663b1 HEAD@{0}: checkout: moving from develop to master
3d132da HEAD@{1}: reset: moving to HEAD~2
2f1c753 HEAD@{2}: checkout: moving from master to develop
f7663b1 HEAD@{3}: checkout: moving from develop to master
2f1c753 HEAD@{4}: merge release/v1.0.1: Merge made by the 'recursive' strategy.
4332fe4 HEAD@{5}: checkout: moving from master to develop
f7663b1 HEAD@{6}: merge release/v1.0.1: Merge made by the 'recursive' strategy.
fe323ef HEAD@{7}: checkout: moving from release/v1.0.1 to master
28a63ea HEAD@{8}: commit: Bumped version number to 1.0.1

但是当我这样做时,我得到了这个“错误”:

Peters-MacBook-Pro:Project peterwarbo$ git reset --hard HEAD~6
fatal: ambiguous argument 'HEAD~6': unknown revision or path not in the working tree.

编辑2:用于说明fuckup的新图片。

enter image description here

编辑3:在user1615903的答案中发出git命令后附加新图像以说明当前状态。为什么说发展落后2?为什么有release/v1.0.1到主服务器的合并,即使我重置为主服务器到初始提交(fe323ef)?

enter image description here

1 个答案:

答案 0 :(得分:10)

这很容易。你需要做的事情是:

  • 将开发分支重置为合并前的提交

  • 将主分支重置为合并前的提交

  • 让发布分支再次指向正确的提交

  • 删除标记

  • 将固定提交推送到远程

所以要做第1步和第2步:

git checkout develop
git reset --hard 4332fe4

git checkout master
git reset --hard <SHA of the commit the master was before the merge>

然后“重新创建”发布分支:

git checkout -b "release/v1.0.1" 28a63ea

最后删除标签:

git tag -d v1.0.1

有关在this stackoverflow question

中撤消合并的详细信息

之后,如果已经推送了更改,则需要使用-f开关覆盖远程更改:

git push -f

并从遥控器中删除标签:

git push --delete origin v1.0.1