我要做的是版本检查。我想确保代码保持在最小版本之上。因此,我需要一种方法来知道当前分支是否包含指定的提交。
当前回答
因为这个问题有一些很好的答案,我添加了我最喜欢的。
这个会告诉你,对于$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/
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别