如何在Git存储库工作树中检测合并冲突(非裸露)

时间:2019-05-10 12:03:30

标签: bash git

是否有一个简单的git命令可以判断(例如,通过退出状态)工作树是否具有未合并的路径/合并冲突?就像当git merge操作失败并且git返回外壳程序时,git的状态表明存在合并冲突。

到目前为止,我发现了git status以及在未合并的情况下将输出的值列表(然后是XY状态代码):

X          Y     Meaning
-------------------------------------------------
D           D    unmerged, both deleted
A           U    unmerged, added by us
U           D    unmerged, deleted by them
U           A    unmerged, added by them
D           U    unmerged, deleted by us
A           A    unmerged, both added
U           U    unmerged, both modified
-------------------------------------------------

因此到目前为止,对我而言唯一的检测方法是与表示未合并的XY代码列表进行匹配,例如:

AA | DD | [ADU]U | U[AD]

(添加了水平空白以提高可读性)

如果未合并路径,则检查出口状态为零(如果没有,则为非零)(如果我对git status的理解在这里是正确的):

git status --porcelain -z \
  | grep -q -z '^\(AA\|DD\|[ADU]U\|U[AD]\) '

这变得相当复杂,我正在寻找一个更简单的命令(最好仅在git中使用)。

我想在bash脚本中将其用于本地构建,如果git存储库工作树中有任何未合并的路径,则拒绝进一步处理。

1 个答案:

答案 0 :(得分:1)

这里已经有该问题的答案:https://stackoverflow.com/a/501461/1150795

在合并过程中提供--no-commit标志,如下所示:

git merge --no-commit --no-ff $BRANCH

然后检查分阶段进行的更改:

git diff --cached

要撤消合并,请输入:

git merge --abort

或者,您可以将本地分支与远程分支进行比较:

git fetch origin/master
git diff master origin/master