【问题标题】:Revert merge Git-Flow恢复合并 Git-Flow
【发布时间】:2013-04-18 10:41:17
【问题描述】:

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

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

来自 SourceTree 的附加屏幕转储:

编辑:好的,我在develop(HEAD~2)上做了git reset --hard 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?为什么即使我重置为 master 到初始提交 (fe323ef),但仍会从 release/v1.0.1 合并到 master?

【问题讨论】:

  • 所以基本上你只需要在master和develop中删除最后一次提交,并再次将28a63ea设置为“release/v1.0.1”?
  • 我相信吗?我还需要删除对masterdevelop 进行的合并
  • 标签也应该被删除。基本上,我只想及时回到创建release/v1.0.1 分支并提交以提高版本号时的状态。
  • HEAD~6(从 HEAD 返回 6 次提交)与 HEAD@{6}(前 6 次 git 操作)不同

标签: git git-flow


【解决方案1】:

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

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

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

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

  • 移除标签

  • 将固定提交推送到远程

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

【讨论】:

  • 我试过你推荐的,但我现在似乎卡住了?请查看我更新的问题。
  • 那么,你用 HEAD~2 重置了吗?这意味着您将分支提示移到了两个提交之后,而现在您正试图将它移到另外 6 个提交之后?请附上一张来自 SourceTree 的新图片,它确实有助于说明这一点。
  • 所以我傻了?我可以撤消吗? (幸运的是,我在 Bitbucket 上镜像了我的存储库)我现在正在上传新图片。
  • 编辑了我的答案,使其指的是提交 SHA 而不是 HEAD-something。别担心,在 git 中永久删除东西真的很难。
猜你喜欢
  • 2017-08-03
  • 1970-01-01
  • 2018-11-29
  • 2018-08-30
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多