我要做的是版本检查。我想确保代码保持在最小版本之上。因此,我需要一种方法来知道当前分支是否包含指定的提交。


当前回答

因为这个问题有一些很好的答案,我添加了我最喜欢的。

这个会告诉你,对于$br中的最后$n次提交,哪个分支包含了每一个:

br=mybranch
n=10
git log --oneline -n$n $br | awk '{print; system("git branch --contains "$1)}'

下面这个类似,但对分支列表执行相同的操作:

br="mybranch yourbranch herbranch"
n=4
for br in $brs; do git log --oneline -n$n $br | awk '{print; system("git branch --contains "$1)}'; done

其他回答

因为这个问题有一些很好的答案,我添加了我最喜欢的。

这个会告诉你,对于$br中的最后$n次提交,哪个分支包含了每一个:

br=mybranch
n=10
git log --oneline -n$n $br | awk '{print; system("git branch --contains "$1)}'

下面这个类似,但对分支列表执行相同的操作:

br="mybranch yourbranch herbranch"
n=4
for br in $brs; do git log --oneline -n$n $br | awk '{print; system("git branch --contains "$1)}'; done
git branch --contains <commit-id> --points-at <target branch name>

如果提交id存在于目标分支中,它将返回目标分支名称。否则命令执行失败。

有多种方法可以实现这一结果。第一个简单的选择是使用git日志并使用grep搜索特定的提交,但这并不总是准确的

git log | grep <commit_id>

你最好直接使用git分支来查找包含给定COMMIT_ID的所有分支

git branch --contains $COMMIT_ID

下一步是找到当前的分支,这可以从git 1.8.1开始使用

git symbolic-ref --short HEAD

结合在一起的

git branch $(git symbolic-ref --short HEAD) --contains $COMMIT_ID

但是上面的命令不会返回true或false,如果提交在当前分支中,则有一个更短的版本返回退出代码0,如果不是则返回退出代码1

git merge-base --is-ancestor $COMMIT_ID HEAD

退出代码很好,但当你想要字符串为真或假的答案,你需要添加更多,然后结合if从bash你得到

if [ 0 -eq $(git merge-base --is-ancestor $COMMIT_ID HEAD) ]; then echo "true"; else echo "false"; fi

只在本地分行查,那已经签出去了。

git branch --contains $COMMIT_ID

检入所有分支(获取的本地和远程分支)

git branch -a --contains $COMMIT_ID

确保获取遥控器

git fetch origin

列出包含commit的本地分支:

Git分支——包含<commit-id>

列出所有包含commit的分支,只包括remote:

Git分支-a——包含<commit-id>

类似地,检查commit是否在特定的分支中:

Git log <branch> | grep <commit_id>

如果分支不存在,则在分支名称前加上origin/