如何检测裸git存储库

时间:2018-03-30 15:51:51

标签: git github merge diff

目前我需要在服务器端的裸仓库中找到分支之间的冲突(git无法自动解决)。

我尝试使用git read-tree -i -m ${merge_base} ${branch_a} ${branch_b}生成索引文件,然后通过git ls-files --stage读取其内容。但是通过阶段号识别文件冲突仍然不够,因为即使在两个分支上都修改了文件的同一行,如果修改完全相同,git仍然可以自动解决冲突。

如果有人有想法解决这个问题,或者知道如何使用git Plumbing命令进行merge操作,请告诉我。

感谢您的帮助!

2 个答案:

答案 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。然后你会看到会发生什么,如果你面临一个大混乱,你可以恢复。 我不会使用管道命令。如果这是至关重要的只是看看 什么合并。