我现在已经尝试了大约一整天来在功能和开发之间进行简单的合并。
基本上我想要的是能够手动将所有功能冲突合并到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-name
和git reset --hard feature-name@{n}
是无价的命令。 (总是使用--hard,因为它丢弃了本地更改,因此非常谨慎)
编辑:虽然我仍然不知道为什么会发生这种情况VonC提供了一个良好的止损解决方案。
对于那些想知道从本地分支机构签到新本地文件夹的方式的人,请看这篇文章:https://stackoverflow.com/a/16493707/6419701
我进行合并的方式是使用语法的优秀meld tool ubuntu:meld folder1 folder2
答案 0 :(得分:1)
在你目前的情况下,我会:
feature
分支在磁盘上的新路径中,develop
和feature
)与git外部的diff工具(kdiff3或其他)合并(即,没有git merge,只是一些旧式文件夹比较/合并),并且清理.orig
个文件,feature
git merge --ours develop
然后,只是为了进行测试,我会对两个分支中的同一个文件进行并发修改,看看git merge develop
是否有效,并使冲突解决步骤成为传统的git merge
。< / p>