#git-branchless #git-rebase #git-branch #git-commit #git-workflow #git-version #git-repository

bin+lib git-branchless-record

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 日

#12 in #git-rebase

Download history 11/week @ 2024-04-21 6/week @ 2024-04-28 12/week @ 2024-05-05 5/week @ 2024-05-12 6/week @ 2024-05-19 221/week @ 2024-05-26 42/week @ 2024-06-02 23/week @ 2024-06-09 17/week @ 2024-06-16 25/week @ 2024-06-23 22/week @ 2024-06-30 14/week @ 2024-07-07 10/week @ 2024-07-14 11/week @ 2024-07-21 40/week @ 2024-07-28 13/week @ 2024-08-04

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

MIT/Apache

1MB
20K 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操作(例如,不处理rebase)。
  • git-extras/git-undo:只能撤销当前HEAD处的提交。
  • git-annex undo:只能撤销给定文件或目录的最新更改。
  • thefuck:只能撤销历史shell命令。只能处理一些Git操作(例如,不处理rebase)。

可视化

使用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:

在工作副本中提交更改。

依赖项

~76MB
~1.5M SLoC