git - 错误的部分合并后合并两个分支
问题描述
我只是用我的 git repo 做了一件坏事,我不知道如何解决它。我基本上有两个分支,比如说develop
and 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
分支与develop
. 最后,我可以将生成的内容复制到feature
分支,使其保持对齐。
我认为第二种选择实际上可以很好地工作,但我不确定。
最后,在第二个选项中,我尝试保存feature
分支以保持 repo 有序。但是我真的不需要保留feature
分支,因为我会在功能实际完成时很快或稍后将其删除。
有谁知道更好的方法来帮助我解决这个问题?
先感谢您
解决方案
使用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
分支仅在您真正引入的更改方面有所不同。
推荐阅读
- laravel - Vue js Preloader 不会停止加载
- javascript - 切换元素
- jquery - Jquery DataTable 未显示(ReactJs)
- kubernetes - ReplicaSet 抛出错误“选择器与模板标签不匹配”
- r - 在 R 中使用 ifelse 循环多个矩阵以记录归一化值
- angular - 类字段中的 Angular 10 哈希是什么意思?
- netlogo - 如何在 netlogo 中设置字符串?如何将字符添加到netlogo中的字符串
- functional-programming - 将 Lift 与 Either 或 Maybe monad 一起使用
- powerbi - 按到 POWER BI DAX 查询的行号分区
- swift - 在 SwiftUI 中开始文本字段编辑时检索键盘高度