#git #git-workflow #git-branchless #git-branch #commit #git-repository #undo

bin+lib git-branchless-query

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 #undo

Download history 13/week @ 2024-04-22 5/week @ 2024-04-29 13/week @ 2024-05-06 3/week @ 2024-05-13 7/week @ 2024-05-20 230/week @ 2024-05-27 35/week @ 2024-06-03 19/week @ 2024-06-10 15/week @ 2024-06-17 26/week @ 2024-06-24 15/week @ 2024-07-01 9/week @ 2024-07-08 9/week @ 2024-07-15 13/week @ 2024-07-22 80/week @ 2024-07-29 15/week @ 2024-08-05

118 每月下载量
git-branchless 中使用

MIT/Apache

775KB
16K 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中最快速的rebase实现,原因如下。

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

内容表

演示

修复

撤销几乎所有操作

  • 提交。
  • 修改提交。
  • 合并和变基。
  • 查看历史记录。
  • 修复和重做操作。

查看工作区。

设置和重置。

使用命令行界面。

查看状态。

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 后的新主要版本可能会以不兼容的方式更改磁盘格式。

要通知新版本,请在 Github 页面顶部的通知菜单中选择“Watch”>“Custom”>“Releases”。或者使用 GitPunch 通过电子邮件发送通知。

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

贡献

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

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

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

贡献者应遵守 行为准则

依赖项

~77MB
~1.5M SLoC