我正在使用SourceTree和Git-Flow模式。现在我准备了一个版本供我的beta测试人员测试,所以我创建了一个新的release/v1.0.1
分支。但是我的思绪滑落了,我决定完成(合并到develop
和master
并标记)该版本,即使我还没有发布给我的测试人员。所以我想让发布分支再次打开,如果我的测试人员发现任何错误我可以在发布分支中修复这些错误,然后当所有错误得到修复后我就可以完成发布。
那么我怎样才能轻松地使用SourceTree(或使用git命令)恢复到我拥有release/v1.0.1
分支时的状态?
来自SourceTree的附加screendump:
编辑:好的我在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的新图片。
编辑3:在user1615903的答案中发出git命令后附加新图像以说明当前状态。为什么说发展落后2?为什么有release/v1.0.1
到主服务器的合并,即使我重置为主服务器到初始提交(fe323ef
)?
答案 0 :(得分:10)
这很容易。你需要做的事情是:
将开发分支重置为合并前的提交
将主分支重置为合并前的提交
让发布分支再次指向正确的提交
删除标记 p>
将固定提交推送到远程
所以要做第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