git:如果已经合并了一个较新的状态,如何合并旧状态?

时间:2018-05-17 16:02:50

标签: git git-merge branching-and-merging

我们有一个分支(让我们说分支A)我们想要合并到master进行一些修改,还有一些我们想要合并的修改,但是想留待以后使用。我们没有修改/拆分提交,只是手动修改代码。

因此我们从分支B创建了一个新分支(分支A),以将整个代码保存在当前状态,包括我们稍后想要合并的修改。在现有分支(分支A)中,我们手动修改代码以删除我们现在不想合并的部分。

然后我们将分支A合并到master。问题是,如果我们现在尝试合并分支B,git merge表示一切都是最新的。我想这是因为BBmaster的共同祖先(即分支A在删除部分代码之前)没有具体区别,与分支B相同。例如,git diff master...B显示没有差异。但存在实际差异。

我知道我们没有遵循最佳做法。我们应该创建一个新分支来修改历史记录。或者我们应该删除新分支B中的部分代码,而不是原始分支A

但是有没有办法告诉git改变它的合并策略,以便它实际上选择分支B中的差异?

1 个答案:

答案 0 :(得分:0)

我认为没有办法以这种方式更改合并策略,因为更改的历史记录与合并相关。这不仅仅是比较两个独立的文件,而是关于应用更改。 由于BA的管理员,因此在合并A之后,B 上的所有更改都合并为主。

如果旧状态的冗余和合并将撤消更新的更改,整个 合并概念会变得非常......很奇怪。

您实际想要做的不是更改的合并(因为所有 已合并),但还原的某些更改已经合并了。

为此,您可以在git revert <sha>分支上使用master<sha>您可以指定要恢复的提交。

git revert <sha>创建一个新的提交,完全执行指定提交的反转。

<强>原始

         master <- HEAD
           |
1----------5
 `-2--3--4´
      |  |
      B  A

git revert 4

之后
            master <- HEAD
              |
1----------5--6
 `-2--3--4´    `revert A
      |  |
      B  A

如果您在B之后进行了多次提交,则可以指定范围:

git revert B..A

,它将为每个原始提交创建单独的恢复提交,或使用

git revert --no-commit B..A
git commit -m"Revert everything at once"

为所有还原的更改创建一个单一的还原提交。