我的情况如下:
我有两个或多或少相同代码的存储库(比如repo A和B)。我想从回购A.回购B回购 在repo A上执行以下命令:
git remote add repoB path/to/repoB
git checkout -b branchB repoB/master
git merge branchB
问题:
我收到了大量both added
个冲突,因为这两个存储库都包含许多相同的文件,这些文件在第一次提交时添加并保持不变。
如何在不花一整天时检查“两个已添加”文件是否有不同的内容或相同的情况下合并此回购?
我想自动合并相同的文件,只留下具有不同内容的文件进行手动合并。
答案 0 :(得分:3)
也许有人可以提供更简单的方法来做到这一点,但我找到的唯一选择是:
git remote add repoB path/to/repoB git checkout -b branchB repoB/master
git rebase -i --root
git merge -Xours SHA_OF_BRANCHB_INITIAL_COMMIT
git rebase --continue
git merge branchB
由于此解决方案,所有常见文件都在前两次提交中合并,因此我可以在此合并中安全地使用-Xours
或-Xtheirs
答案 1 :(得分:1)
答案 2 :(得分:1)
当合并必须使用不良基础时,它会得到不准确的变化 - 在这种情况下,历史记录显示根本没有共同的祖先,merge的autoreolve从每个显示为单个添加的更改块的文件开始。
你可以尝试的一件事是将根系嫁接在一起:
echo $(git rev-list --max-parents=0 other) \
$(git rev-list --max-parents=0 HEAD) > .git/info/grafts
git merge
other
如果结果不好,只需中止合并并取出.git/info/grafts
文件即可。
通用后备是
git merge --no-commit --strategy ours
other
git diff ..other | git apply
git add --patch .