- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 GitHub 上有分支 Branch-Master、Branch-A、Branch-B、Branch-C。我一般 merge 到master,删除 merge 的分支。这会在我的本地计算机上留下一堆分支,但不会在 GitHub 上留下。
如何自动删除本地分支?我想创建一个 git 钩子(Hook)来执行此操作。
当我尝试
git remote prune origin
然后运行 git branch,我仍然可以看到我所有的分支,甚至是 merge 和删除到 master 的分支。
我知道我能做到
git branch -d {the_local_branch}
手动,但这在执行 githook 时没有帮助,或者我有多个分支需要系统地删除。
我不喜欢这里给出的答案: How can I delete all Git branches which have been merged?
它们是基于名称并推断已删除的分支,而不是以某种方式显式传递特定于该分支的分支 ID。我在提供的链接中了解到,如果我创建一个与删除的分支名称相同的分支名称,即使它们是不同的分支,它也会被删除。
How do I delete a Git branch locally and remotely?
没有解决我的问题,因为它的解决方案已经在上面说明了。
如果分支 uid 存在,我宁愿使用某种类型的比较函数。
最佳答案
作为phd noted in a comment ,分支机构没有基础 ID。分支名称只是您的 存储库中的本地 名称,由您创建或应您的要求创建,用于标识一个特定的提交。您可以随时将此名称更改为您喜欢的任何字符串,只要它满足 the requirements for a branch name。 . Git 不会记得它曾经有过其他名称。
现在,还有一些额外的信息:您的 .git/config
文件可以而且通常会在其中为每个分支包含一些注释,例如:
[branch "master"]
remote = origin
merge = master
[branch "develop"]
remote = another-remote
merge = develop
这些设置定义了分支的上游设置。一个分支可以根本没有上游——在这种情况下两个设置不存在——或者一个上游,在这种情况下两个设置存在并描述上游,使用以前处理这个问题的旧历史方法中的两个部分发明了远程跟踪名称。
如果您使用标准 Git 命令重命名分支,这些配置部分将自动重命名。例如,在 git branch -m develop xyz
之后,你将拥有:
[branch "xyz"]
remote = another-remote
merge = develop
这意味着你本地分支的上游xyz
是another-remote/develop
. (这假定远程 fetch =
的标准 another-remote
设置。)
通过一些努力,可以通读每个分支的上游设置(如果有的话):使用 git for-each-ref
枚举所有分支,然后,对于每个分支,使用 git rev-parse --symbolic-full-name <branch>@{upstream}
查看它是否有上游,如果有,上游名称是什么。请注意,您在这里必须小心一点,因为“远程”可以设置为 .
, 说明某个本地分支的上游是另一个本地分支。
结合这种编程测试(“分支 X 是否有上游,如果有,它实际上是一个远程跟踪名称,它是什么远程跟踪名称?”)与第二次测试(“在使用 git remote <remote> prune
或 git fetch <remote> --prune
之后,远程跟踪名称是否存在?”)可能会得到你想要的。您需要进行一些编码(例如,bash 脚本)。使其最佳化或在一个钩子(Hook)内工作是很困难的,但总体任务非常简单:
git for-each-ref --format='%(refname:short)' refs/heads |
while read branch; do
# make sure it has an upstream set -- if not, ignore
upstream=$(git rev-parse --symbolic-full-name ${branch}@{upstream}) || continue
# make sure the upstream is a remote-tracking name
case $upstream in
refs/remotes/*) ;;
*) continue;;
esac
# get the name of the remote
remote=${upstream#refs/remotes/}
remote=${remote%%/*}
# prune remote-tracking branches
git remote $remote prune
# and test whether the upstream still exists
git rev-parse $upstream && continue
# $branch has upstream $upstream which is gone, so:
echo git branch -D $branch
done
这是完全未经测试的,并且缺少一些重要的部分,比如对它不会要删除的分支保持安静(每个 rev-parse
都会将消息发送到 stdout 和/或 stderr)。它实际上也没有删除任何分支:因为这可能是相当不可恢复的,所以人们会想先彻底测试它,然后才删除 echo
.
关于git - 删除所有不再在 Github 上的分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56061869/
你好 StackOverflow。 我在 Github 上遇到了一个奇怪的错误。 存储库 Link 我在 4 个月前创建了一个存储库。并且只向该存储库添加了 2 个贡献者。 • 我没有再添加贡献者但是
我已经配置了 Jenkins Github 拉取请求构建器插件来构建我机构成员提出的每个拉取请求。它就像一个魅力。 但是,构建并没有像在这个不错的 post 中显示的那样将构建状态报告回 github
我只是想知道在任何 GitHub 源代码查看页面上可以查看多少个字符而不会溢出(水平滚动)。 最佳答案 在 OS X v10.9 (小牛队): 谷歌浏览器:125 火狐:122 Safari :121
我一直在寻找可以进入 .github 的事物的零碎示例。 GitHub 存储库上的目录。 我可以看到它用于 GitHub 操作和工作流以及拉取请求和问题模板,但我看不到一个页面,其中概述了您可以在理想
尝试运行 --is-bare-repository 命令,但意识到在我的克隆副本上运行它是不正确的。有没有办法在实际的 GitHub 存储库上使用相同的命令?存储库也没有显示 .git 文件。请原谅我
我正在使用 github 页面和 jekyll 创建一个博客。我想知道是否有一种方法可以将 github 文件(即存储库中的文件)中的代码片段嵌入到博客文章中。我可以在此页面上找到有关嵌入要点的解决方
我在 GitHub 存储库中有一个文件,需要通过运行命令偶尔更新。 作为 GitHub Workflows 的一部分,我想让一个机器人运行一个命令,并查看它是否在 repo 上创建了一个差异,如果是,
尝试从 Github 桌面应用程序发布到 github.com 时出现以下错误。 GitHub Desktop was unable to store the account token in the
类似于Desktop notifications from GitHub (从 10 年前开始)但提出了一个稍微不同的问题 - GitHub 是否支持 web notifications ?我想知道关
我想使用 semantic-release 在 Github 版本上发布整个目录(构建目录),但不幸的是它将每个构建文件作为单个 Assets 发布。 用于复制: 我正在使用 Vue CLI 生成一个
这让我发疯,我知道这听起来像是一个愚蠢的问题,但我已经为此苦苦挣扎了 2 天。我刚刚完成了 Visual Code 的编码,我想将它推送到 github 上。所以我创建了一个名为 mern-maps
在 GitHub 上,一个用户可以属于多个组织。一个存储库是否也可以成为多个组织的一部分? 最佳答案 根据 this blog post by GitHub , 一个仓库只能属于一个组织。 Creat
在 GitHub 操作中,我使用脚本创建了一个文件。然后我可以使用 git 创建一个分支,添加文件,提交文件并将分支推送到 repo。全部使用 git。 然后我想从我的操作中创建一个 PR,所以我使用
在 GitHub 中,当我转到:[Insights] - [Networks] 时,我看到我的分支有不同的颜色。有些在 blue , 其他人在 green .我找不到解释。 有谁知道不同颜色是什么意思
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我只是在尝试 GitHub。 为什么有些提交显示为“一天前在 GitHub 上提交”而其他提交显示为“一天前提交”? 例如这里: https://github.com/apple/swift/comm
有没有办法更改 Github 上的配色方案以进行语法高亮显示?我已经进行了基本搜索,但找不到答案。 最佳答案 目前没有办法改变服务器端的配色方案。 github.com 的几个用户已经要求 自定义语法
Github 上关闭的拉取请求是否意味着拉取请求未合并? 如果没有,有没有办法确定已关闭的拉取请求是否已合并? 谢谢。 最佳答案 If no, is there a way I can determi
不确定这是否与主题无关,但我真的很好奇这种类型的图表是否有名称以及如何创建。 像这样:https://help.github.com/articles/viewing-contributions-on
GitHub 中合作者和贡献者的拉取请求有什么区别?我没有发现合作者有任何特殊特权。 最佳答案 合作者对贡献者的一项特权是......他们(合作者)可以直接推送到您的存储库(因为您拥有 added t
我是一名优秀的程序员,十分优秀!