#git-branchless #git-branch #commit #git-workflow #graph #index #command

bin+lib git-branchless-smartlog

git-branchless 的支持库

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日

#979 in 开发工具

Download history 15/week @ 2024-04-14 19/week @ 2024-04-21 14/week @ 2024-04-28 21/week @ 2024-05-05 12/week @ 2024-05-12 12/week @ 2024-05-19 231/week @ 2024-05-26 47/week @ 2024-06-02 26/week @ 2024-06-09 20/week @ 2024-06-16 32/week @ 2024-06-23 17/week @ 2024-06-30 16/week @ 2024-07-07 13/week @ 2024-07-14 16/week @ 2024-07-21 45/week @ 2024-07-28

每月95次下载
用于 3 个库

MIT/Apache 协议

780KB
17K SLoC

git-branchless logo

Git 无分支工作流程

(这套工具完全兼容分支。如果您认为这很令人困惑,可以在这里 讨论新名称。)


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 操作(例如,不处理变基)。

可视化

使用 smartlog(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 » Custom » Releases”。或者使用 GitPunch 通过电子邮件发送通知。

这个领域正在开发许多有前景的工具。有关更多信息,请参阅 相关工具

贡献

感谢您对贡献的兴趣!如果您愿意,我很乐意安排一次电话会议来 帮助您入门

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

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

贡献者应遵守行为准则


lib.rs:

显示用户最近工作的提交的图表。

仍在进行中的提交集是从事件日志中推断出来的;请参阅eventlog模块。

依赖项

~75MB
~1.5M SLoC