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)为你运行 merge
或 rebase
。鉴于您正在编写一个有特定目标的脚本,您很可能应该使用执行更具体的事情的较低级别的命令。例如,您可以使用 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
此代码是多个步骤的组合。
- 开始与 no-commit 和 no-ff 合并。
- 正在获取两个分支中的差异。
- 正在中止合并
如果有任何冲突,它会在第二步失败,你会得到合并冲突错误作为输出,否则你会在两个分支中得到差异。
有关详细信息,您可以转到 GIT-SCM 文档
我正在编写一个 bash 脚本来实现一些自动化。部分脚本涉及导航到本地 repo,切换到本地 master 分支,然后拉取远程 master 以使用最新代码更新本地 master 分支。
有谁知道我是否可以通过编程方式确定拉取是否导致合并冲突,以便我可以在那时退出而不执行脚本的其余部分?
感谢任何帮助/信息,谢谢!
使用git ls-files -u
。它打印未合并的文件。如果它什么都不打印,则没有未合并的文件。
然而,虽然这是对您提出的问题 "as asked" 的直接回答,但在脚本中使用 git pull
有点冒险:pull
是运行 fetch
为你,然后(取决于你如何指导它 and/or 已经配置了你的 repo)为你运行 merge
或 rebase
。鉴于您正在编写一个有特定目标的脚本,您很可能应该使用执行更具体的事情的较低级别的命令。例如,您可以使用 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
此代码是多个步骤的组合。
- 开始与 no-commit 和 no-ff 合并。
- 正在获取两个分支中的差异。
- 正在中止合并
如果有任何冲突,它会在第二步失败,你会得到合并冲突错误作为输出,否则你会在两个分支中得到差异。
有关详细信息,您可以转到 GIT-SCM 文档