首页 > 解决方案 > 错误的部分合并后合并两个分支

问题描述

我只是用我的 git repo 做了一件坏事,我不知道如何解决它。我基本上有两个分支,比如说developand feature,我会不断更新。有一次,我更改了分支上的几个文件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。如果我尝试将其合并developfeature现在,则2更改将丢失。

我想出了几个解决方案,但我不确定其中任何一个是否真的有效:

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

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

最后,在第二个选项中,我尝试保存feature分支以保持 repo 有序。但是我真的不需要保留feature分支,因为我会在功能实际完成时很快或稍后将其删除。

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

先感谢您

标签: gitmerge

解决方案


使用git cherry-pick.

develop  o--o--1--2--3--4--o- 
             \              \
feature       o--o--o--o--o--o--o-

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

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

然后,您可以比较分支以确保您的feature分支与您的develop分支仅在您真正引入的更改方面有所不同。


推荐阅读