我想确定两个Git分支是否已经分歧,或者其中一个分支是否可以简单地快速转发到另一个分支。
换句话说,我想检查其中一个分支的当前HEAD是否已经在某个时刻合并到另一个分支中,或者它是否包含不在另一个分支中的提交。
有没有办法在不实际合并两个分支的情况下执行此操作?在这种情况下,简单的git diff
无济于事。
答案 0 :(得分:5)
您可以使用git merge-base
可以找到here的说明。
答案 1 :(得分:4)
如果可以简单地快进,git merge --ff-only otherbranch
将成功。 (如果不能,则会被拒绝而不是合并提交。)
答案 2 :(得分:2)
我正在使用此shell脚本代码段来实现此目的:
git_is_merged () {
local revlist
if revlist=$(git rev-list -1 "$1" --not "$2"); then
if [ "$revlist" = "" ]; then
echo "'$1' IS merged into '$2'."
else
echo "'$1' is NOT merged into '$2'."
fi
fi
}
alias gim='git_is_merged'
像gim origin/devel origin/master
一样使用它来确定origin/devel
是否合并到origin/master
。
编辑:为了完整起见,如果您只使用命名分支,也可以使用
git branch --contains origin/devel | grep -q origin/master && echo "Merged" || echo "Not merged"
或
git branch --merged origin/master | grep -q origin/devel && echo "Merged" || echo "Not merged"
出于同样的目的。
答案 3 :(得分:0)
如果您需要图形工具,可以使用gitk branch1 branch2
。
如果需要,这还允许您检查不同的提交。