我只是用我的git repo做了一件坏事,我不知道如何解决它。我基本上有两个分支,让我们说develop
和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
的变化。如果我现在尝试将develop
合并到feature
,那么2
的变化就会丢失。
我提出了几个解决方案,但我不确定是否有任何解决方案可以实际工作:
b
提交,所以我可以合并来自develop
的所有更改。然后我可以提交更改并将它们与当前的feature
分支合并temp
提交创建一个完整的新分支(假设c
)。然后我可以将feature
分支的所有内容复制到temp分支中而不实际合并,只是复制文件。然后我提交结果更改,然后将新的temp
分支与develop
合并。最后,我可以将生成的内容复制到feature
分支,以便保持对齐。我认为第二个选项实际上可以运作良好,但我不太确定。
为了完成,在第二个选项中,我试图保存feature
分支以保持回购顺序。但我真的不需要保留feature
分支,因为我会在功能实际完成后很快或稍后删除它。
有谁知道更好的方法来帮助我解决这个问题?
先感谢您
使用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
分支仅在您真正引入的变化中有所不同。