我正在写一个bash脚本来做一些自动化。部分脚本涉及导航到本地存储,切换到本地主分支,然后拉远程主控以使用最新代码更新本地主分支。
有没有人知道我是否可以以编程方式确定拉动是否导致合并冲突,以便我可以保释并且不执行脚本的其余部分?
感谢任何帮助/信息,谢谢!
答案 0 :(得分:13)
使用git ls-files -u
。它打印未合并的文件。如果没有打印,则没有未合并的文件。
然而,虽然这是你问过的问题的直接答案"如果被问及",在脚本中使用git pull
有点冒险:pull
是一种便利为您运行fetch
的脚本,然后(取决于您如何指导它和/或配置了您的仓库)为您运行merge
或rebase
。鉴于您正在编写一个具有特定目标的脚本,您应该最有可能使用执行更具体事情的低级命令。例如,您可以使用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