git:合并来自还原以前合并的分支的更改

git:合并来自还原以前合并的分支的更改,git,merge,Git,Merge,对不起,这个标题让人困惑,但我想不出更好的了 这是我的问题。我有两个分支,develope和feature。我遵循了这个过程: 在功能中写入代码 将功能合并到开发 发现错误,恢复合并 编写一些无关的代码并直接提交到develope 现在,我想将我对develop所做的更改合并回功能中。问题是,当我这样做时,它会把我以前在功能中所做的所有更改都吹走。我假设发生这种情况是因为第3步中的还原比功能中的任何代码更改都要新,所以它会将还原应用于更改 有可能做我想做的事吗?我唯一能想到的就是在develop

对不起,这个标题让人困惑,但我想不出更好的了

这是我的问题。我有两个分支,
develope
feature
。我遵循了这个过程:

  • 功能中写入代码
  • 功能
    合并到
    开发
  • 发现错误,恢复合并
  • 编写一些无关的代码并直接提交到
    develope
  • 现在,我想将我对
    develop
    所做的更改合并回
    功能中。问题是,当我这样做时,它会把我以前在
    功能中所做的所有更改都吹走。我假设发生这种情况是因为第3步中的还原比
    功能中的任何代码更改都要新,所以它会将还原应用于更改


    有可能做我想做的事吗?我唯一能想到的就是在
    develope
    中还原还原,然后合并,然后还原还原的还原。这似乎有点麻烦。

    我认为您可以通过两个步骤来纠正这种情况:

    1) 执行
    develope
    的交互式重基,并删除还原提交,即

    git rebase -i HEAD~6    # or however far back is the merge commit
    
    删除包含revert commit的行并完成重基。此时,
    develope
    现在拥有原始的合并提交,但没有恢复

    2) 在
    develope
    上重新建立基础,指定
    develope
    功能
    都源自的提交哈希值。默认情况下,rebase将完全忽略合并提交,从而将其删除:

    git checkout feature
    git rebase <SHA-1>
    
    git签出功能
    吉特重基
    
    其中
    这里是从
    develope
    分支出来的提交
    功能

    在这两个步骤之后,您的
    开发
    分支将既没有合并提交也没有恢复提交,您应该可以安全地将其合并到
    功能

    我强烈建议阅读@torek在这个问题上给出的答案:


    通常,您创建一个功能分支,然后在该分支上工作以完成您的功能。然后将功能合并到开发分支,一段时间后,开发状态变为活动状态

    在您的情况下,如果您在“开发”分支上有更改,我更希望您的功能分支上有一个重基。然后,您将获得所有更改,并且您的特性分支将被重写到dev分支的最后一次提交

    Atlassian提供了一个很好的教程,介绍了如何使用要素分支


    我认为这不能解决问题。为什么我们要在功能上重新设置develop的基础,以将提交从前者带入后者?不,如果您将功能分支的基础重新设置为与develop相同的状态,那么您将有所有新的更改,并且在日志中,看起来您已从新位置创建了一个新分支。是的,但这不会带来恢复,从而抹掉了他在
    功能
    分支中的其他工作?除非我们消除错误的合并,否则无法让
    开发
    功能
    交互而不发生这种情况。好的一点可能是,这个问题当时更容易理解。但是我会做一些测试并尝试这种情况:)是的,这个问题令人困惑,您描述的工作流程可能首先避免了这个问题,这可能是OP想要的。请参阅