合并分支不会创建冲突来解决

时间:2016-06-06 04:56:07

标签: git version-control merge rebase

我现在已经尝试了大约一整天来在功能和开发之间进行简单的合并。

基本上我想要的是能够手动将所有功能冲突合并到develop中,这样我就可以在不破坏开发的情况下获得新功能。

以下是我迄今为止尝试过的事情

git checkout develop; git merge feature
git checkout feature; git merge -s ours develop
git checkout feature; git merge -s recursive -X ours develop
git checkout develop; git merge -s recursive -X theirs feature
git checkout develop; git merge -s recursive -X theirs feature
git checkout feature; git merge -s resolve develop

在所有这些情况下,分支几乎完全覆盖另一个分支。我没有机会手动合并文件内的冲突。

git checkout feature; git rebase develop
某些文件会调用

mergetool,但无法识别一个文件中的差异。应该注意的是,此文件之前已合并到开发中。在开发中删除的文件仍然存在于功能中,但具有“orig”扩展名。这是我到目前为止最接近两个分支的同步,但代价是不能轻易地将功能分支出去。

git checkout develop; git rebase feature

提供了一系列删除或保留文件的选项,然后导致错误:file not found Continue merging other unresolved paths (y/n) ? y

我还没有尝试过樱桃树或孤儿树。也许解决方案就在那里?

我是否有可能删除了一些文件并重新创建它们,这就是为什么git甚至没有尝试组合分支?

每次添加新功能时,是否需要手动合并? Git - how to force merge conflict and manual merge on selected file

似乎很难

我知道我搞砸了某个地方,但我无法弄清楚我做错了哪里或哪里。我可以手动编辑所有未更改的文件,但这会破坏使用git的目的。

我哪里出错了?如何解决这种情况(无需手动编辑文件)?我下次应该做些什么呢?

P.S。对于那些刚接触git并且在学习如何使用变换功能(如merge和rebase)时遇到类似麻烦的人 git reflog feature-namegit reset --hard feature-name@{n}是无价的命令。 (总是使用--hard,因为它丢弃了本地更改,因此非常谨慎)

编辑:虽然我仍然不知道为什么会发生这种情况VonC提供了一个良好的止损解决方案。

对于那些想知道从本地分支机构签到新本地文件夹的方式的人,请看这篇文章:https://stackoverflow.com/a/16493707/6419701

我进行合并的方式是使用语法的优秀meld tool ubuntu:meld folder1 folder2

1 个答案:

答案 0 :(得分:1)

在你目前的情况下,我会:

  • checkout feature分支在磁盘上的新路径中,
  • 将两个分支(developfeature)与git外部的diff工具(kdiff3或其他)合并(即,没有git merge,只是一些旧式文件夹比较/合并),并且清理.orig个文件,
  • 使用feature
  • 将合并从开发记录到git merge --ours develop

然后,只是为了进行测试,我会对两个分支中的同一个文件进行并发修改,看看git merge develop是否有效,并使冲突解决步骤成为传统的git merge。< / p>