4个版本 (2个重大更新)
0.9.0 | 2024年5月27日 |
---|---|
0.8.0 | 2023年8月28日 |
0.7.0 | 2023年3月2日 |
0.7.0-rc.1 | 2023年2月19日 |
#78 in 可视化
每月77次下载
用于 2 crates
770KB
17K SLoC
Git的无分支工作流程
(这套工具与分支100%兼容。如果您觉得这很令人困惑,可以在这里讨论新的名称.)
关于
git-branchless
是一套工具,以多种方式增强Git
它 使Git更易于使用,无论是新手还是高级用户。例如
git undo
:一个通用撤销命令。请参阅博客文章git undo: 我们可以做得更好。- 智能日志:一个方便的可视化工具。
git restack
:修复损坏的提交图。- 假设合并:避免被合并冲突困扰。
它 为高级用户提供了更多灵活性。例如
- 补丁堆工作流程:强烈支持类似于Linux和Git项目,以及许多大型科技公司所使用的“补丁堆”工作流程。(这是Git“本意”上的使用方式。)
- 原型和实验工作流程:通过“分歧”开发提供对原型和实验工作的强烈支持。
git sync
:重新设置所有本地提交堆栈和分支,而无需先检出它们。git move
:在清理旧分支时,能够移动子树而不是“棍子”,不会触及工作副本等。- 匿名分支:减少了实验性工作分支的开销。
- 内存操作:在无需检出相关提交的情况下修改提交图。
git next/prev
:在提交堆栈中快速跳转到提交和分支之间。git sw -i/--interactive
:交互式选择要切换到的提交。
它为大型仓库和单仓库提供了更快的操作,尤其是在大型科技公司中。例如
- 请参阅博客文章Lightning-fast rebases with git-move。
- 性能测试:在torvalds/linux(1M+ 提交)和mozilla/gecko-dev(700k+ 提交)上进行了基准测试。
- 在内存中操作:默认情况下避免触及工作副本(这可能会减慢
git status
或使构建工件失效)。 - 稀疏索引:使用自定义的稀疏索引实现,以加快提交和合并操作。
- 分段变更日志DAG:对于提交图上的高效查询,例如在O(log n)而不是O(n)内计算merge-base。
- 预编译:使用具有良好运行时性能(Rust)的预编译语言编写。
- 多线程:在适当的地方将工作分配到多个CPU核心。
- 据我所知,
git-branchless
由于其上述原因,提供了Git工具和UI中最快的rebase实现。
目录
演示
修复
撤销几乎所有操作
- 提交。
- 修改后的提交。
- 合并和变基(例如,如果您错误地解决了冲突)。
- 检出。
- 创建、更新和删除分支。
为什么不使用git reflog
?
git reflog
是一个查看单个引用(如HEAD
)先前位置的工具,可以用于撤销操作。但由于它只跟踪单个引用的位置,因此复杂的操作(如变基)可能难以逆向工程。 git undo
在更高层次上操作:您的整个仓库状态。
git reflog
也不能从根本上用于撤销一些罕见操作,例如某些分支的创建、更新和删除。有关更多详细信息,请参阅架构文档。
git undo
无法处理哪些内容?
git undo
依赖于 Git 近期版本中的功能才能正常工作。请参阅兼容性图表。
目前,git undo
无法撤销以下内容。您可以在问题 #10中找到处理这些情况的设计文档。
- 通过撤销提交并恢复其更改到工作副本来“撤销提交”。
- 在库存 Git 中,这可以通过
git reset HEAD^
来实现。 - 此场景最好通过自定义的
git uncommit
命令来实现。请参阅问题 #3。
- 在库存 Git 中,这可以通过
- 撤销文件的状态或取消状态。这已在上述问题 #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 --interactive
与git-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风格指南。
贡献者应遵守行为准则。
lib.rs
:
更新提交信息
依赖项
~76MB
~1.5M SLoC