目前我需要在服务器端的裸仓库中找到分支之间的冲突(git无法自动解决)。
我尝试使用git read-tree -i -m ${merge_base} ${branch_a} ${branch_b}
生成索引文件,然后通过git ls-files --stage
读取其内容。但是通过阶段号识别文件冲突仍然不够,因为即使在两个分支上都修改了文件的同一行,如果修改完全相同,git仍然可以自动解决冲突。
如果有人有想法解决这个问题,或者知道如何使用git Plumbing命令进行merge
操作,请告诉我。
感谢您的帮助!
答案 0 :(得分:3)
尝试git merge-tree
。
这是一个bash函数示例,它将两个分支作为参数。如果存在冲突,则输出“冲突”,否则“无冲突”。该功能不够健壮。
function testconflict() {
foo=$1
bar=$2
mergebase=$(git merge-base $foo $bar)
if [ "$mergebase" = "" ];then
#in case foo and bar have no common ancestor, use the empty tree as the merge base
mergebase=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi
#test if the output has conflict markers of "merge" style
git merge-tree $mergebase $foo $bar | xargs |
if grep -oe '<<<<<<<.*=======.*>>>>>>>';then
echo conflict
else
echo no conflict
fi
}
答案 1 :(得分:0)
我只是检查git merge otherbranch --no-ff --no-commit。然后你会看到会发生什么,如果你面临一个大混乱,你可以恢复。 我不会使用管道命令。如果这是至关重要的只是看看 什么合并。