git:合并来自恢复先前合并的分支的更改

时间:2017-02-16 15:07:53

标签: git merge

对于令人困惑的标题感到抱歉,但我无法想出更好的标题。

这是我的问题。我有2个分支,developfeature。我按照这个过程:

  1. feature
  2. 中编写代码
  3. feature合并到develop
  4. 发现错误,还原合并
  5. 编写一些不相关的代码并直接提交到develop
  6. 现在,我想将我直接更改为develop的更改合并回feature。问题在于,当我这样做时,它会消除我之前在feature中所做的所有更改。我假设发生这种情况是因为步骤3中的恢复比feature中的任何代码更改更新,因此它适用于恢复更改。

    我可以做我想做的事吗?我唯一能想到的是恢复develop中的恢复,然后合并,然后还原恢复的恢复。这看起来很麻烦。

2 个答案:

答案 0 :(得分:2)

我认为你可以分两步纠正这种情况:

1)执行import numpy as np import pandas as pd X = pd.DataFrame([[1,2], [3,4]]) Y = pd.DataFrame([[2,1], [3,3]]) ​ def f(x, y): # this is a demo function that takes in two ints and return str(x) + str(y) # concatenate them as str ​ vecF = np.vectorize(f) # vectorize the function with numpy.vectorize ​ X # 0 1 #0 1 2 #1 3 4 Y # 0 1 #0 2 1 #1 3 3 pd.DataFrame(vecF(X, Y)) # apply the function to two data frames # 0 1 #0 12 21 #1 33 43 的交互式rebase并删除还原提交,即

develop

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

2)对develop执行rebase,指定developdevelop生成的提交的哈希值。默认情况下,rebase将完全忽略合并提交,从而将其删除:

feature

此处的git checkout feature git rebase <SHA-1> 来自<SHA-1>从[{1}}分支出来的提交。

在这两个步骤之后,您的feature分支既没有合并提交也没有恢复提交,您应该安全地将其合并到develop

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

Accidentally merged in wrong branch to mine. Is there a way to remove these unwanted files?

答案 1 :(得分:1)

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

在您的情况下,如果您对开发分支进行了更改,我希望您的功能分支上有一个rebase。然后,您将获得所有更改,并且您的功能分支将重写为您的开发分支的最后一次提交。

Atlassian有一个很好的教程,你可以使用功能分支。

https://www.atlassian.com/git/tutorials/comparing-workflows#feature-branch-workflow