我正在开发分支和两个不同的(本地)功能分支。
a -- b -- e <-- develop
\ \
\ f -- g <-- feature-branch-1
\
c -- d <-- feature-branch-2
我通过运行
将来自feature-branch-1的更改合并到feature-branch-2中git checkout feature-branch-2
git rebase feature-branch-1
如果我理解正确,现在看起来像这样:
a -- b -- e <-- develop
|\
| f -- g <-- feature-branch-1
\
f -- g -- c -- d <-- feature-branch-2
然而,我意识到我在分支1中引入了一个我不知道如何修复的错误。所以这个错误现在也在分支2中,并阻止我将feature-branch-2合并到develop中。我想回到原来的状态
a -- b -- e <-- develop
\ \
\ f -- g <-- feature-branch-1
\
c -- d <-- feature-branch-2
这样我就可以安全地将feature-branch-2合并到develop中。我怎样才能做到这一点?
答案 0 :(得分:6)
查看feature-branch-2
git checkout feature-branch-2
并且从g(最后一次提交feature-branch-1)开始提交到develop:
git rebase --onto develop feature-branch-1
请注意,feature-branch-2将基于e
而不是b
,但我认为这不重要?如果是:请在develop
命令中将b
替换为git rebase
。
答案 1 :(得分:4)
您有两种可能性:
git reflog feature-branch-2
检索提交d
的哈希值。
然后通过执行重置来撤消(如果您有未经修改的更改,则在运行此命令之前存储):
git reset --hard <hash_of_commit_d>
此解决方案相当于纯粹的&#34;撤消&#34;。你将处于与rebase之前完全相同的状态。此外,一个优点是,如果你在rebase期间遇到冲突,你将不会再以另一种方式再次解决它们。
编辑:此答案中也有描述:https://stackoverflow.com/a/135614/717372
rebase --onto
(详见@Veger答案)如果你在rebase之后做了一些新的提交,这个解决方案会更好。但如果你在原始的rebase期间遇到冲突,你将不得不解决相反的问题。
在这种情况下,也许一个很好的解决方案是为原始提交{strong>执行reset
而仅为添加的提交执行rebase --onto
(您必须创建一个临时分支实现那个)