14 个版本
使用旧 Rust 2015
0.8.0 | 2023 年 11 月 13 日 |
---|---|
0.7.0 | 2022 年 12 月 28 日 |
0.6.0 | 2021 年 12 月 16 日 |
0.5.1 | 2017 年 2 月 7 日 |
0.2.1 | 2016 年 2 月 16 日 |
#467 in 命令行工具
45 每月下载量
42KB
908 行
git-clean
问题
如果你长期在一个项目上工作,你肯定会有很多分支。每次完成工作后都本地删除这些分支会让人烦恼,这会花费你很多时间进行分支修剪,或者试图记住'那个命令'来删除所有本地合并的分支。
git-clean
试图解决这个问题。通过运行git-clean
,你可以快速轻松地删除所有已合并的分支。
其他实现
还有一些其他类似工具,但它们在某些方面都未能满足我的需求。
https://github.com/arc90/git-sweep
这个工具非常适合小型项目,但如果你在大型项目上工作,有成千上万的提交和数千个活跃分支,它就会卡住。我曾多次尝试在这些大型项目上使用它,但从未成功。如果分支在远程已被删除,它也难以删除本地分支。
https://github.com/mloughran/git-clean
这个工具采用了一种略有不同的方法,它会逐个显示每个分支,并让你决定如何处理它。这可能对某些人很有用,但当我无法管理git branch
的输出时,我通常会清理我的分支,所以我更愿意一次性删除所有已合并的分支。
https://github.com/dstnbrkr/git-trim
这个工具做了一些类似于交互式变基的操作,它会显示你所有的分支在你的文本编辑器中,让你选择要删除的分支,并在保存时删除它们。我的问题是:这是一个手动过程 - 以及 - 它不仅显示合并分支,这意味着你可能删除了包含有价值工作的分支。
本项目的优势
- 快速
本项目是用Rust编写的,它的速度非常快。[真的非常快] 删除100多个分支大约需要1.8秒,其中大部分时间是网络延迟。 ./target/release/git-clean 0.07s user 0.08s system 8% cpu 1.837 total
- 批量操作
它可以批量删除您的分支,不需要逐个步骤或选择要删除的分支。它假定您想要删除与基础分支平行的所有分支。
- 删除本地和远程分支
它将删除本地和远程分支,并处理远程分支已删除的错误。
- 仅显示已合并的分支
它不会删除有有价值工作的分支,因为它只会删除与指定的基础分支(默认为main)平行的分支。
- 处理被Github压缩的分支
Github最近推出了从Github UI压缩合并的功能,这是一个非常实用的工具,可以避免频繁手动变基。 git-clean
知道如何识别被Github压缩的分支,并确保它们被清理出您的本地仓库。
假设
此工具假定(但也会检查)您的git
已正确配置以从当前仓库推送和拉取。git-clean
应从包含您关心的.git
目录的目录中运行。
此工具将在您的系统上运行git
命令branch
、rev-parse
、remote
、pull
和push
。 git push
将仅在为您删除远程分支时运行,形式为git push <remote> --delete <branch>
。如果这不可接受,请使用-l
标志仅删除本地分支。
安装
如果您是Rust开发者,可以使用Cargo进行安装
cargo install git-clean
此项目是在Rust 1.14.0稳定版上开发的,所以如果您在编译/安装步骤中遇到问题,请确保您的Rust版本为>= 1.14.0稳定版。
请确保将安装路径添加到您的PATH变量中。对我来说,它被下载到了
/Users/mattcasper/.multirust/toolchains/stable/cargo/bin/git-clean
如果您不是Rust开发者,或者更喜欢其他方式,还有一个homebrew公式
brew tap mcasper/formulae
brew install git-clean
验证它是否正常工作!
$ git-clean -h
USAGE:
git-clean [FLAGS] [OPTIONS]
FLAGS:
-d, --delete-unpushed-branches Delete any local branch that is not present on the remote. Use this to speed up
the checks if such branches should always be considered as merged
-h, --help Prints help information
-l, --locals Only delete local branches
-r, --remotes Only delete remote branches
-s, --squashes Check for squashes by finding branches incompatible with main
-V, --version Prints version information
-y, --yes Skip the check for deleting branches
OPTIONS:
-b, --branch <branch> Changes the base for merged branches (default is main)
-i, --ignore <ignore>... Ignore given branch (repeat option for multiple branches)
-R, --remote <remote> Changes the git remote used (default is origin)
更新
如果您是从旧版本的git-clean更新,并使用Cargo进行安装,只需用--force
运行安装命令即可
cargo install git-clean --force
用法
git-clean
列出要删除的所有分支,并提示您确认
$ git-clean
The following branches will be deleted locally and remotely:
branch1
branch2
branch3
Continue? (Y/n)
如果接受,它将删除列出的分支,包括本地和远程
Continue? (Y/n) y
Remote:
- [deleted] branch1
branch2 was already deleted in the remote.
Local:
Deleted branch branch1 (was 3a9ea97).
Deleted branch branch2 (was 3a9ea97).
Deleted branch branch3 (was 3a9ea97).
远程已删除的分支将从输出中过滤掉。
它还提供了几个选项来调整要删除的分支及其位置。
-l
和-r
切换仅删除本地或仅删除远程分支-R
更改删除远程分支时使用的git远程-b
更改用于查找要删除的已合并分支的基础分支
以及其他杂项选项
-y
覆盖删除分支检查。对于不需要提示的自动化工作流程来说非常方便。
贡献
欢迎PR和问题!
依赖项
~2.7–4MB
~59K SLoC