6

我正在使用 SourceTree 和 Git-Flow 模式。现在我已经为我的 beta 测试人员准备了一个版本来测试,所以我创建了一个新release/v1.0.1分支。但是我的想法一闪而过,我决定完成(合并developmaster标记)发布,即使我什至没有将发布发送给我的测试人员。因此,如果我的测试人员发现任何错误,我希望再次打开发布分支,我可以在发布分支中修复这些错误,然后当所有错误都修复后,我可以完成发布。

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

来自 SourceTree 的附加屏幕转储:

在此处输入图像描述

编辑:好的,我做了git reset --hard HEAD~2on 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:新图像来说明他妈的。

在此处输入图像描述

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

在此处输入图像描述

4

1 回答 1

14

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

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

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

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

  • 移除标签

  • 将固定提交推送到远程

所以要做第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

有关在此 stackoverflow 问题中撤消合并的更多信息

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

git push -f

并从远程删除标签:

git push --delete origin v1.0.1
于 2013-04-18T11:21:43.353 回答