4 个版本 (2 个破坏性更新)

0.9.0 2024 年 5 月 27 日
0.8.0 2023 年 8 月 28 日
0.7.0 2023 年 3 月 2 日
0.7.0-rc.12023 年 2 月 19 日

#336 in 可视化

Download history 8/week @ 2024-04-13 9/week @ 2024-04-20 7/week @ 2024-04-27 11/week @ 2024-05-04 6/week @ 2024-05-11 5/week @ 2024-05-18 213/week @ 2024-05-25 46/week @ 2024-06-01 24/week @ 2024-06-08 17/week @ 2024-06-15 28/week @ 2024-06-22 8/week @ 2024-06-29 12/week @ 2024-07-06 10/week @ 2024-07-13 15/week @ 2024-07-20 21/week @ 2024-07-27

每月 58 次下载
git-branchless 中使用

MIT/Apache 协议

795KB
17K SLoC

git-branchless logo

Git 的无分支工作流程

(此工具集与分支100%兼容。如果您觉得这很混乱,可以在 此处讨论新的名称.)


Linux build status Windows build status macOS build status
Github Discussions Discord

▼ 跳转到安装 ▼
▼ 跳转到目录 ▼

关于

git-branchless 是一套增强 Git 的工具

简化了 Git 的使用,既适用于初学者也适用于高级用户。示例

为高级用户提供了更多灵活性。示例

  • 补丁堆工作流程:强烈支持“补丁堆”工作流程,该工作流程被 Linux 和 Git 项目以及许多大型科技公司使用。(这就是 Git “应该”被使用的方式。)
  • 原型设计和实验工作流程:通过“分叉”开发对原型设计和实验工作流程提供强支持。
  • git sync:无需先检出即可重新合并所有本地提交栈和分支。
  • git move:在清理旧分支时,可以移动子树而不是“树枝”,而不会影响工作副本等。
  • 匿名分支:减少了实验性工作分支的开销。
  • 内存操作:无需检出相关提交即可修改提交图。
  • git next/prev:快速在提交栈和分支之间跳转。
  • git sw -i/--interactive:交互式选择要切换到的提交。

它为大型仓库和单一代码库提供更快的操作,尤其是在大型科技公司中。例如

  • 参见博客文章 使用 git-move 的闪电般快速重新合并
  • 性能测试:在 torvalds/linux(1M+ 提交)和 mozilla/gecko-dev(700k+ 提交)上进行了基准测试。
  • 内存操作:默认情况下避免接触工作副本(这可能会减慢 git status 或使构建工件无效)。
  • 稀疏索引:使用针对快速提交和合并操作的自定义稀疏索引实现。
  • 分段变更日志DAG:对于提交图的高效查询,例如计算合并基础,在 O(log n) 时间内而不是 O(n) 时间内完成。
  • 预先编译:使用具有良好运行时性能的预先编译语言(Rust)编写。
  • 多线程:在适当的情况下将工作分布到多个CPU核心。
  • 据我所知,git-branchless 提供了 Git 工具和 UI 中 最快 的重新合并实现,原因如上所述。

另请参阅 用户指南设计目标

目录

演示

修复

撤销几乎所有操作

  • 提交。
  • 修改后的提交。
  • 合并和重新合并(例如,如果您错误地解决了冲突)。
  • 检出。
  • 创建、更新和删除分支。

为什么不是 git reflog

git reflog 是一个用于查看单个引用(如 HEAD)之前位置的工具,它可以用于撤销操作。但由于它仅跟踪单个引用的位置,像变基这样的复杂操作在反向工程时可能很繁琐。 git undo 在更高的抽象级别上运行:整个仓库的状态。

git reflog 也基本上不能用于撤销某些罕见操作,例如某些分支的创建、更新和删除。有关更多详细信息,请参阅架构文档

git undo 无法处理什么?

git undo 依赖于 Git 近期版本中的功能才能正常工作。请参阅兼容性图表

目前,git undo 无法撤销以下内容。您可以在问题 #10中找到处理这些情况的设计文档。

  • 通过撤销提交并将更改恢复到工作副本来“取消提交”一个提交。
    • 在原始 Git 中,这可以通过 git reset HEAD^ 来实现。
    • 这种场景最好使用自定义的 git uncommit 命令来实现。请参阅问题 #3
  • 撤销对文件的暂存或取消暂存。这由上述问题 #10 跟踪。
  • 撤销回冲突的 中间,使得 git status 显示类似 path/to/file (both modified) 的消息,以便您可以以不同的方式解决该特定冲突。这由上述问题 #10 跟踪。

从根本上讲,git undo 并不打算处理对未跟踪文件的更改。

与其他 Git 撤销工具的比较
  • gitjk:需要 shell 别名。只能撤销最近一次的命令。只能处理一些 Git 操作(例如,不处理变基)。
  • git-extras/git-undo:只能撤销当前 HEAD 上的提交。
  • git-annex undo:只能撤销对给定文件或目录的最近一次更改。
  • thefuck:只能撤销历史 shell 命令。只能处理一些 Git 操作(例如,不处理变基)。

可视化

使用智能日志(git sl)可视化您的提交历史

为什么不试试git log --graph呢?

git log --graph仅显示附有分支的提交。如果您更喜欢在没有分支的情况下工作,那么git log --graph将不会对您有效。

为了支持广泛重写提交图的用户,git sl还会指出已被废弃且需要修复的提交(标记为rewritten as abcd1234的提交的后代)。它们可以使用git restack自动修复,或者手动处理。

操作

无惧编辑您的提交图

为什么不试试git rebase --interactive呢?

使用git rebase --interactive进行交互式变基完全支持,但它有几个缺点

  • git rebase --interactive只能修复线性提交系列,而不是树。如果您修改了具有多个子提交的提交,那么您必须确保适当地重新变基所有其他子提交。
  • 在开始变基之前,您必须制定一个行动计划。对于某些用例,一次操作单个提交可能比一次操作整个提交系列更容易。

当您使用git rebase --interactivegit-branchless一起时,如果您放弃任何提交,您将被提示修复您的提交图。

安装

请参阅https://github.com/arxanas/git-branchless/wiki/Installation

简而言之:检查适合您系统的存储库中的软件包,或运行cargo install --locked git-branchless。安装完成后,在您的存储库中运行git branchless init

状态

git-branchless目前处于alpha阶段。请为破坏性更改做好准备,因为一些工作流程和架构可能在将来发生变化。它被认为没有重大错误,但它尚未经过全面实战测试。您可以在问题跟踪器中查看已知问题。

git-branchless遵循语义版本控制。新0.x.y版本和达到1.0.0后的新主要版本可能以不向后兼容的方式更改磁盘格式。

想要获取新版本的提醒,请在页面顶部的“通知”菜单中选择“Watch→自定义→发布”,或者在GitPunch网站上通过电子邮件接收通知。

在这个领域有很多有潜力的工具正在开发中。更多信息请参见相关工具

贡献

感谢您对贡献感兴趣!如果您愿意,我很乐意安排一次通话来帮助您加入

关于代码贡献,请查看操作手册了解如何设置开发工作流程,以及编码指南。您还可能想阅读架构文档。

关于贡献文档,请参阅Wiki风格指南

贡献者应遵守行为准则


lib.rs:

方便的命令,帮助用户在提交堆中移动。

依赖关系

~77MB
~1.5M SLoC