Git : 判断分支是否处于合并冲突状态

Git : Determine if branch is in a merge conflict state

我正在编写一个 bash 脚本来实现一些自动化。部分脚本涉及导航到本地 repo,切换到本地 master 分支,然后拉取远程 master 以使用最新代码更新本地 master 分支。

有谁知道我是否可以通过编程方式确定拉取是否导致合并冲突,以便我可以在那时退出而不执行脚本的其余部分?

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

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

然而,虽然这是对您提出的问题 "as asked" 的直接回答,但在脚本中使用 git pull 有点冒险:pull 是运行 fetch 为你,然后(取决于你如何指导它 and/or 已经配置了你的 repo)为你运行 mergerebase。鉴于您正在编写一个有特定目标的脚本,您很可能应该使用执行更具体的事情的较低级别的命令。例如,您可以使用 git fetch 后跟(正如 Etan Reisner 在评论中建议的那样)git merge --ff-only 以便 从不 尝试合并。

根据 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

这列出了存在合并冲突的文件:

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

git config --global user.email "Email Id" && git config --global user.name "User Name" && git merge --no-commit --no-ff origin/master && git diff --cached && git merge --abort

此代码是多个步骤的组合。

  1. 开始与 no-commit 和 no-ff 合并。
  2. 正在获取两个分支中的差异。
  3. 正在中止合并

如果有任何冲突,它会在第二步失败,你会得到合并冲突错误作为输出,否则你会在两个分支中得到差异。

有关详细信息,您可以转到 GIT-SCM 文档