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 每月下载量

MIT 许可证

42KB
908

git-clean

Build Status

问题

如果你长期在一个项目上工作,你肯定会有很多分支。每次完成工作后都本地删除这些分支会让人烦恼,这会花费你很多时间进行分支修剪,或者试图记住'那个命令'来删除所有本地合并的分支。

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命令branchrev-parseremotepullpushgit 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