6 个版本
0.1.0 | 2022年6月21日 |
---|---|
0.0.5 | 2021年11月30日 |
0.0.4 | 2020年11月11日 |
0.0.3 | 2020年10月4日 |
0.0.2 | 2020年9月23日 |
#3 in #quickfix
每月下载 22 次
27KB
266 行
Git QuickFix
Quickfix 允许您在不离开当前分支的情况下,将 git 仓库中的更改提交到一个新分支。
动机
我经常为一些引起我注意的小瑕疵编写补丁。我发现每次都需要暂存主要更改、切换到从主分支创建的新分支、提交并推送补丁,然后再切回原始分支,这很麻烦。
优势
- 最小化上下文切换。
- 在大型仓库中,分支切换耗时显著,所以使用 Quickfix 会更快。
- 所有操作都在内存中完成,因此监视文件系统的工具和 IDE 不会感到困惑。
工作原理
-
提交更改。
-
gitquickfix --push <new_branch>
- 这将基于
<origin/main
(或远程默认分支)创建一个名为<new_branch>
的新分支。 - 您当前分支上的最后一个提交将被 cherry-pick 到这个新分支。
- 如果不想将新分支推送到 origin,请省略
--push
。
- 这将基于
-
git quickfix --help
提供了更多选项。- 使用
--onto <branch>
,您可以修改<new_branch>
基于的分支。 - 使用
--remove
,将删除原始分支上的最后一个提交。 - 如果您有想要临时存储的本地更改,请添加
--autostash
。
- 使用
cherry-pick 是在内存中完成的。这意味着您的工作目录将不会被修改。
除非提供了 --remove
,否则 quickfix 提交将被保留(在 v0.0.5 中更改)。
安装
您可以使用 Cargo 安装 quickfix。
Cargo 可用于所有主流平台。如何安装 Cargo 在这里描述: https://doc.rust-lang.net.cn/cargo/getting-started/installation.html
cargo install git-quickfix
已知问题
-
默认分支从origin通过硬编码的列表获取。欢迎提交补丁。如果远程的默认分支不是main、master、devel或develop,您需要手动提供。同样,如果远程不是称为'origin',您也必须使用
--onto
选项手动提供分支名称。如果您对此感到烦恼,请创建一个问题。 -
不会修复:
--push
使用shell推送更改。优点:所有代理、认证和其他配置都被获取。但感觉不太对。
常见问题解答
- 它可以处理多个提交吗? -- 不可以。我试图保持该工具简单。然而,我最初就是从这开始的。如果您看到需求,请创建一个功能请求。
- 考虑过提交钩子吗? -- 实际上没有。虽然原始提交将运行前置和后置提交钩子,但 cherry-pick 本身不会运行前置提交钩子。据我所知,这可能是 git 的行为,或者可能不是?这些都无关紧要,因为 libgit2 不支持钩子。如果您需要特定的 git-hook,请创建一个新工单。
- 这是如何工作的? -- libgit2 提供了一个原始 cherry-pick 方法。这是在内存中工作的,这意味着工作目录(即已签出的文件)可以保持不变。该方法返回一个原始索引对象,我使用它来创建一个新的提交。
相关工作
git absorb
: https://github.com/tummychow/git-absorbgit trim
: https://github.com/foriequal0/git-trim
依赖项
~17–27MB
~465K SLoC