首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >撤消将特征分支重新定位到另一个特性分支

撤消将特征分支重新定位到另一个特性分支
EN

Stack Overflow用户
提问于 2018-01-20 13:24:45
回答 2查看 1.1K关注 0票数 5

我正在开发一个分支和两个不同的(本地)特性分支。

代码语言:javascript
复制
a -- b -- e                  <-- develop
     \     \
      \     f -- g           <-- feature-branch-1
       \
        c -- d               <-- feature-branch-2

通过运行,我将从特性分支-1到功能分支-2的更改结合在一起。

代码语言:javascript
复制
git checkout feature-branch-2
git rebase feature-branch-1

如果我理解正确的话,现在看起来是这样的:

代码语言:javascript
复制
a -- b -- e                  <-- develop
          |\
          | f -- g           <-- feature-branch-1
           \
            f -- g -- c -- d <-- feature-branch-2

然而,我意识到我在分支1中引入了一个错误,我还不知道如何修复。因此,这个错误现在也出现在分支2中,并且阻止我将特性分支-2合并到开发中。我想回到原来的状态

代码语言:javascript
复制
a -- b -- e                  <-- develop
     \     \
      \     f -- g           <-- feature-branch-1
       \
        c -- d               <-- feature-branch-2

这样我就可以安全地将特性分支-2合并到开发中。我怎样才能做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-20 13:28:55

查看特性-分支-2

代码语言:javascript
复制
git checkout feature-branch-2

并根据从g开始的提交(最后一次提交特性分支-1)到开发:

代码语言:javascript
复制
git rebase --onto develop feature-branch-1

请注意,特性分支-2将基于e而不是b,但我不认为这有多大关系?如果是这样的话:在develop命令中用b替换git rebase

票数 7
EN

Stack Overflow用户

发布于 2018-01-20 13:57:03

你有两种可能性:

  • 第一个也是更简单的方法是查看reflog:

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 (您必须创建一个临时分支来实现这一点)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48356652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档