我刚刚在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
分支,因为我会在功能真正完成时迟早删除它。
有人知道更好的方法来帮助我解决这个问题吗?
提前谢谢
答案 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
分支仅在您真正引入的更改方面有所不同。