我有两个分歧的分支(master和feature)。
master - C1 - C3
\
feature C2 - C4 - C5
C2 和 C4 只是带有临时代码的脏提交,我不想将它们放入两个分支的最终合并/变基中。
我通常执行一个:
git checkout master
git cherry-pick C5 (last commit from the feature branch)
但是这次我有 C3 冲突,我无法选择提交。
我尝试将 C3 重新定位到功能分支中,这样在挑选樱桃时不会发生冲突。
git checkout feature
git rebase master
现在我得到了这个
master - C1 - C3
\
feature C2 - C4 - C5
看起来不错,但如果我尝试再次挑选主人,我仍然会遇到冲突(在我从一些文件中删除的一些空白空间上)。
Git 告诉我要解决冲突、添加文件并提交。我可以手动解决冲突,但不想将它们作为冲突解决方案提交。
我想避免在我的历史中提交与实现不直接相关的事情。我什至不知道该写什么作为提交消息。
- 为什么我在变基后仍然会发生冲突?
- 以及如何在没有额外提交的情况下让 C5 被合并/挑选以掌握?
我通常更喜欢cherry-pick,因为我可以避免“无用”的合并提交,并且只提交关于代码更改的提交。然后在那之后我删除了分支,过了一会儿我确定我不再需要它了
[[ 编辑 ]]
奇怪的行为是 C5 和 C3 在 C3 上未更改的文件上发生冲突。
事实上,所有检测到的冲突在主分支上都是空的
<<<<<<< HEAD
=======
[ added code ..................... ]
[ .......... from ................ ]
[ ............... 'feature' branch ]
>>>>>>> 581g52d... "Commit message from 'feature' C5 "
我需要“解决”的只是从冲突文件中删除冲突标签。
- 我不明白冲突的原因
- 我想手动解决它,然后合并/樱桃挑选,而不必创建新的提交
- 导致提交只会解决与将来将被删除的分支的一些冲突
- 删除分支后,该提交将在存储库历史记录中没有意义/位置
[[ 编辑 2 ]]
此外,如果我尝试使用 `git cherry-pick master/C3来添加功能,我会得到:
没有添加到提交的更改(使用“git add”和/或“git commit -a”)以前的cherry-pick 现在是空的,可能是由于冲突解决。
我不明白为什么我有相反方向的冲突(从功能到主)
[[ 编辑 3 - 从头开始重试!]]
这也是我尝试过的。
制作了master分支的两个副本,最后一次提交为 C3,命名为:master_copy和repeat_feature
git checkout master
//git branch master_copy
_git branch repeat_feature
- 从特性分支中挑选每个提交,直到 C5,到repeat_feature
git checkout repeat_feature
/git cherry-pick C2^..C5
(来自特征)
- (我没有冲突)
- 试图从repeat_feature将 C5 挑选到master_copy中
- 请记住,repeat_feature是从 C3 开始的(因此,如果有一些冲突,则应该在从 C2 到 C5 挑选樱桃时提出这些冲突)
git checkout master_copy
/git cherry-pick repeat_feature_C5
我仍然有同样的冲突!
即使我是从同一个 C3 提交开始(将分支克隆到repeat_feature分支时)并尝试挑选到同一个 C3 提交(进入master_copy)!
我完全不明白发生了什么以及为什么我会遇到这些空洞的冲突,这些冲突阻止我将我的功能移动到主分支。
这里需要专家的建议。