我有一个需要与远程合并的本地分支。远程和本地分支都有许多不同的提交(在各种文件上)。是否可以识别和合并仅具有快进类型(远程端)更改的文件?我想手动处理所有其他更改。当存在任何双面更改时,git merge --ff-only不会合并任何内容。
编辑:我想更清楚地提出问题。假设原始文件(在父节点上)是file1,file2,file3,file4。我的本地分支,我修改了file1,file2,删除了file4,添加了file5。在他们的远程分支中,他们修改了file1,file3,删除了file4,添加了file6。我想做以下事情:
答案 0 :(得分:2)
git read-tree
是低级别合并准备,一切都没有实际的冲突解决方案。一个简单的方法是
git merge
-s ours --no-commit
other
# no-op merge, just sets up parents
git read-tree -um $(
git merge-base
HEAD
other
) HEAD
other
#
manual resolution here
git commit
它会在两个分支中留下不同的新内容以进行手动解析,但会接受所有最多一个新版本的文件。您可能需要read-tree
--aggressive
选项来处理整个文件的删除和添加作为普通更改。
作为针对不太可能的案例的安全游戏,请检查git merge-base
--all HEAD
other
的输出。如果它显示多个基数(就像每个分支上的最新合并具有共同父项时那样),git' s(默认)"递归"合并策略会导出基本内容,产生比实际基数更好的自动分辨率结果,您可能需要特别注意手动分辨率。
答案 1 :(得分:0)
您可以声明类似于“Git - how to force merge conflict and manual merge on selected file”的合并驱动程序。
该驱动程序将使用git merge-file
,除非您可以测试其退出值:
此程序的退出值在出错时为负数,否则为冲突数。
如果合并是干净的,则退出值为0.
因此,如果它返回0,您可以让合并继续(您的合并驱动程序以状态'0'退出)
在任何其他情况下,您将通过退出状态为“1”来强制进行手动合并。