合并分支不会产生冲突以解决
Merging branch not creating conflicts to resolve
为了在功能和开发之间进行简单的合并,我已经尝试了大约一整天。
基本上我想要的就是能够手动将feature的所有冲突合并到develop中,这样我就可以在不破坏develop的情况下得到新的feature。
以下是我迄今为止尝试过的方法
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,但无法识别一个文件中的差异。需要注意的是,这个文件是前段时间合并到develop中的。在开发中删除的文件仍然存在于功能中,但扩展名为 '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 的新手和在学习如何使用合并和变基等转换功能时遇到类似问题的人
git reflog feature-name
和 git reset --hard feature-name@{n}
是无价的命令。 (始终谨慎使用 --hard,因为它会丢弃本地更改)
编辑:虽然我仍然不知道为什么会发生这种情况,但 VonC 提供了一个很好的权宜之计解决方案。
如果有人想知道从本地分支结帐到新本地文件夹的方式,请查看此 post:
我进行合并的方式是使用 ubuntu 的优秀 meld tool 使用语法:meld folder1 folder2
以你现在的情况,我会:
- checkout
feature
磁盘上新路径中的分支,
- 用差异工具(kdiff3 或其他)在 git 之外合并两个分支(
develop
和 feature
)(即,没有 git 合并,只是一些老式文件夹 comparison/merge),并清理 .orig
文件,
- 记录从 develop 到
feature
的合并 git merge --ours develop
。
然后,为了测试,我会在两个分支中对同一个文件进行并发修改,看看 git merge develop
是否有效,并引入传统 git merge
的冲突解决步骤.
为了在功能和开发之间进行简单的合并,我已经尝试了大约一整天。
基本上我想要的就是能够手动将feature的所有冲突合并到develop中,这样我就可以在不破坏develop的情况下得到新的feature。
以下是我迄今为止尝试过的方法
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,但无法识别一个文件中的差异。需要注意的是,这个文件是前段时间合并到develop中的。在开发中删除的文件仍然存在于功能中,但扩展名为 '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 的新手和在学习如何使用合并和变基等转换功能时遇到类似问题的人
git reflog feature-name
和 git reset --hard feature-name@{n}
是无价的命令。 (始终谨慎使用 --hard,因为它会丢弃本地更改)
编辑:虽然我仍然不知道为什么会发生这种情况,但 VonC 提供了一个很好的权宜之计解决方案。
如果有人想知道从本地分支结帐到新本地文件夹的方式,请查看此 post:
我进行合并的方式是使用 ubuntu 的优秀 meld tool 使用语法:meld folder1 folder2
以你现在的情况,我会:
- checkout
feature
磁盘上新路径中的分支, - 用差异工具(kdiff3 或其他)在 git 之外合并两个分支(
develop
和feature
)(即,没有 git 合并,只是一些老式文件夹 comparison/merge),并清理.orig
文件, - 记录从 develop 到
feature
的合并git merge --ours develop
。
然后,为了测试,我会在两个分支中对同一个文件进行并发修改,看看 git merge develop
是否有效,并引入传统 git merge
的冲突解决步骤.