错误的部分合并后合并两个分支

时间:2018-08-31 09:04:21

标签: git merge

我刚刚在git repo中做了一件坏事,但我不知道如何解决。 我基本上有两个分支,比如developfeature,它们会不断更新。有一次,我在分支develop上更改了几个文件。我还需要在feature分支中进行这些更改,因此,我不再进行此操作,而是在两个分支之间进行了合并,仅应用了这些更改(并丢弃了所有其他文件的更改/冲突)。之后,我仅对feature分支进行了一些提交。

那是我想要的,但是有一个大问题。现在,我需要完全合并两个分支(将develop合并到feature中),但是当我尝试这样做时,什么也没有发生。我实际上知道为什么什么都没发生(git认为两个分支已经合并,唯一的更改是在feature分支中。这与我尝试合并刚刚创建的分支相同),但是我仍然需要完成与旧更改合并。 为了在情况示例中更好地理解这一点,

develop  o--c--1-- --2-- --o- 
             \              \
feature       \ --o-- --b-- -\m--o-

b: commit before wrong partial merge
1: changes applied in the m commit (after wrong merge
2: changes NOT applied in the m commit (after wrong merge
m: result of partial merge

正如m提交中所述,我只是拥有1的更改,而没有2的更改。如果我尝试将develop合并到feature中,则会丢失2的更改。

我想出了几种解决方案,但不确定其中任何一种是否真的可以工作:

  1. 我可以签出到b提交,以便可以合并develop中的所有更改。然后,我可以提交更改并将其与当前feature分支合并
  2. 我可以根据temp提交创建一个完整的新分支(比如c)。然后,我可以将feature分支的所有内容复制到temp分支中,而无需实际合并,而只是复制文件。然后,我提交结果更改,然后将新的temp分支与develop合并。最后,我可以将结果内容复制到feature分支中,以便保持对齐。

我认为第二个选项实际上可以很好地工作,但是我不确定。

最后,在第二个选项中,我尝试保存feature分支以使仓库保持顺序。但是,我真的不需要保留feature分支,因为我会在功能真正完成时迟早删除它。

有人知道更好的方法来帮助我解决这个问题吗?

提前谢谢

1 个答案:

答案 0 :(得分:1)

使用git cherry-pick

develop  o--c--1--2---3---4--o- 
             \                \
feature       \---o-----b------\m--o-

如果第一次提交已在您的功能分支中,则:

git checkout feature
git cherry-pick {second-commit-hash}
git cherry-pick {third-commit-hash}
git cherry-pick {fourth-commit-hash}

接下来,您可以compare branches以确保您的feature分支与develop分支仅在您真正引入的更改方面有所不同。