如何撤销Git Flow中的特性完成?

43

我正在学习git-flow,刚刚执行了git flow feature finish <feature-name>命令,这将我的功能分支合并到develop分支并将其删除。

相反,我想将特性分支推送到github上,以便在同行评审后合并它。

所以问题是,我如何“撤消”此命令。换句话说,我如何将我的最后两个提交从develop分支移动到我的功能分支?

2个回答

82

这些步骤应该能解决问题:

获取所需的sha:

git log

<sha1>是合并之前的最后一次提交。
<sha2>是你开始开发该功能之前 develop 分支上的最新一次提交。

git checkout develop
git checkout -b feature/<feature-name>
git reset <sha1> --hard
git checkout develop
git reset <sha2> --hard

将您的特性分支推送。


2
我不得不读几遍才意识到为什么要在特性分支上重置(第三行)。回想起来似乎很明显 :) 谢谢!(顺便说一下,<sha's> 在标记中丢失了) - hakunin
4
如果最后一次操作是 git flow feature finish,则可以在两个分支中使用 git reset --hard HEAD^,而不是使用提交的 sha 值,因为这些提交在两种情况下都是最新的。 - clemlatz
2
如果像我一样,你正在尝试撤销一个“热修复完成”,那么你还需要重置主分支中的最后一次提交。 - clemlatz

0

我发现最简单的方法是使用 返回原点,来更新主分支(我们称之为默认)。

git checkout -B master origin/master

或者等效的更新命令

git switch -C master origin/master

checkout -B 和 switch -C(或--force-create)如果已经存在,则都将分支移动到新位置。

更新 后来我考虑了一下,虽然它对我有用,但我还是有点想删除它,因为我怀疑它可能只适用于快进的情况,而不是常规合并。这也可能解释为什么 git reset --hard <SHA-from-reflog> 对我没有用,让我陷入了困惑的状态,即因为我“重置”了我的本地 master 而不是特性分支头。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接