我要做的是版本检查。我想确保代码保持在最小版本之上。因此,我需要一种方法来知道当前分支是否包含指定的提交。
当前回答
提取@torek的评论作为答案:
有关如何查找包含指定提交的所有分支,请参阅建议的副本。
要找出当前分支是否包含提交C,请使用“管道”命令git merge-base——is-祖宗。如果C是HEAD的祖先,则当前分支包含C,因此:
if git merge-base --is-ancestor $hash HEAD; then
echo I contain commit $hash
else
echo I do not contain commit $hash
fi
(旁注:在shell脚本中,退出0的命令为“true”,而退出非0的命令为“false”。)
其他回答
是的,另一个选择:
git rev-list <branch name> | grep `git rev-parse <commit>`
这对我来说是最好的,因为它也适用于本地缓存的远程分支,如remotes/origin/master,在git分支上——contains不会工作。
这不仅仅是OP关于“当前分支”的问题,但我发现问这个问题的“任何分支”版本都很愚蠢,所以我决定在这里发帖。
在Windows机器的Windows/CMD终端上。你可以:
> git log | findstr "commit-id"
如:
> git log | findstr "c601cd6366d"
git branch --contains <commit-id> --points-at <target branch name>
如果提交id存在于目标分支中,它将返回目标分支名称。否则命令执行失败。
因为这个问题有一些很好的答案,我添加了我最喜欢的。
这个会告诉你,对于$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签出将返回到当前HEAD(当前文件)的分支,但不会签出所有分支。例如,如果你做了一个git检出master,代码将被检出,就像你在master分支上一样,但它不会检出该分支以外的任何文件进行更改。
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的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之间的区别