#git-branch #git-repository #commit #patch #push #quickfix #outside

bin+lib git-quickfix

一个用于在当前分支之外应用补丁的小工具

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 次

GPL-3.0 许可证

27KB
266

Git QuickFix

Quickfix 允许您在不离开当前分支的情况下,将 git 仓库中的更改提交到一个新分支。

动机

我经常为一些引起我注意的小瑕疵编写补丁。我发现每次都需要暂存主要更改、切换到从主分支创建的新分支、提交并推送补丁,然后再切回原始分支,这很麻烦。

优势

  • 最小化上下文切换。
  • 在大型仓库中,分支切换耗时显著,所以使用 Quickfix 会更快。
  • 所有操作都在内存中完成,因此监视文件系统的工具和 IDE 不会感到困惑。

工作原理

  1. 提交更改。

  2. gitquickfix --push <new_branch>

    • 这将基于 <origin/main(或远程默认分支)创建一个名为 <new_branch> 的新分支。
    • 您当前分支上的最后一个提交将被 cherry-pick 到这个新分支。
    • 如果不想将新分支推送到 origin,请省略 --push
  3. 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 方法。这是在内存中工作的,这意味着工作目录(即已签出的文件)可以保持不变。该方法返回一个原始索引对象,我使用它来创建一个新的提交。

依赖项

~17–27MB
~465K SLoC