如何检测GIT存储库工作树中的合并冲突(非BARE)



是否有一个简单的git命令可以告诉(例如,通过退出状态(工作树是否具有未合并的路径/合并冲突?就像当git合并操作失败时,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状态的理解正确在这里(:

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

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

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

在这里已经有答案: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

最新更新