我正在开发一个分支和两个不同的(本地)特性分支。
a -- b -- e <-- develop
\ \
\ f -- g <-- feature-branch-1
\
c -- d <-- feature-branch-2通过运行,我将从特性分支-1到功能分支-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中,并且阻止我将特性分支-2合并到开发中。我想回到原来的状态
a -- b -- e <-- develop
\ \
\ f -- g <-- feature-branch-1
\
c -- d <-- feature-branch-2这样我就可以安全地将特性分支-2合并到开发中。我怎样才能做到这一点?
发布于 2018-01-20 13:28:55
查看特性-分支-2
git checkout feature-branch-2并根据从g开始的提交(最后一次提交特性分支-1)到开发:
git rebase --onto develop feature-branch-1请注意,特性分支-2将基于e而不是b,但我不认为这有多大关系?如果是这样的话:在develop命令中用b替换git rebase。
发布于 2018-01-20 13:57:03
你有两种可能性:
git reflog feature-branch-2
若要检索提交d的散列,请执行以下操作。
然后通过执行重置(在运行此命令之前存储此命令,如果您已经进行了未实现的更改):
git reset --hard <hash_of_commit_d>
此解决方案等效于纯粹的“撤消”。你将处于与重新基地之前完全相同的状态。另外,一个优点是,如果你在重新基地的过程中遇到冲突,你就不用再用另一种方式解决它们了。
编辑:在这个答案中也有描述:https://stackoverflow.com/a/135614/717372
rebase --onto (详见@Veger答案)如果您在重基之后执行了一些新提交,则此解决方案更好。但是如果你在最初的重基过程中有冲突,你将不得不解决相反的冲突。
在这种情况下,一个很好的解决方案可能是对原始提交执行reset,和只对添加的提交执行rebase --onto (您必须创建一个临时分支来实现这一点)。
https://stackoverflow.com/questions/48356652
复制相似问题