Git:确定分支是否处于合并冲突状态

时间:2015-01-16 18:54:09

标签: git bash

我正在写一个bash脚本来做一些自动化。部分脚本涉及导航到本地存储,切换到本地主分支,然后拉远程主控以使用最新代码更新本地主分支。

有没有人知道我是否可以以编程方式确定拉动是否导致合并冲突,以便我可以保释并且不执行脚本的其余部分?

感谢任何帮助/信息,谢谢!

3 个答案:

答案 0 :(得分:13)

使用git ls-files -u。它打印未合并的文件。如果没有打印,则没有未合并的文件。

然而,虽然这是你问过的问题的直接答案"如果被问及",在脚本中使用git pull有点冒险:pull是一种便利为您运行fetch的脚本,然后(取决于您如何指导它和/或配置了您的仓库)为您运行mergerebase。鉴于您正在编写一个具有特定目标的脚本,您应该最有可能使用执行更具体事情的低级命令。例如,您可以使用git fetch后跟(正如Etan Reisner在评论中建议的那样)git merge --ff-only,以便永远不会尝试合并。

答案 1 :(得分:5)

根据torek给出的答案,这是一个现成的代码段:

CONFLICTS=$(git ls-files -u | wc -l)
if [ "$CONFLICTS" -gt 0 ] ; then
   echo "There is a merge conflict. Aborting"
   git merge --abort
   exit 1
fi

答案 2 :(得分:0)

这将列出合并冲突的文件:

git diff --name-only --diff-filter=U