15个版本 (稳定版)
2.4.1 | 2024年6月27日 |
---|---|
2.3.0 | 2023年7月19日 |
2.2.1 | 2022年10月14日 |
2.2.0 | 2022年4月29日 |
0.4.0 | 2017年2月11日 |
#9 in 文本编辑器
每月下载量93
1MB
32K SLoC
Git交互式Rebase工具
原生跨平台基于终端的完整功能序列编辑器,适用于Git 1.7.8+的交互式rebase。
目录
特性
跨平台
构建并在Linux、macOS、Windows和许多其他操作系统上运行。
设置操作
轻松设置操作为pick
、squash
、fixup
、edit
、reword
和drop
。
重新排序rebase列表
通过单次按键重新排序操作列表。
多行修改
使用可视化模式一次性更改操作并重新排序多行。
切换break
标记
查看提交详情和差异
通过按键查看提交概览和完整提交差异。
支持Unicode和表情符号
编辑exec
命令
轻松编辑由exec
命令运行的命令。
在外部编辑器中编辑
需要在Git编辑器中执行某些操作?快速切换到您的编辑器,进行更改,然后返回工具。
高级功能
修改行执行命令
此可选功能允许在修改行后注入exec
操作,修改是通过更改操作、命令或引用来确定的。这可以用于更新提交消息中的引用或在修改的提交上仅运行测试套件。
要启用此选项,请设置interactive-rebase-tool.postModifiedLineExecCommand
选项,提供一个可执行文件或脚本。
git config --global interactive-rebase-tool.postModifiedLineExecCommand "/path/to/global/script"
或使用针对特定仓库的配置,用于特定的脚本。
git config --global interactive-rebase-tool.postModifiedLineExecCommand "/path/to/repo/script"
脚本提供的第一个参数始终是执行的操作。然后,根据操作,脚本将接收一组不同的参数。
对于 drop
、fixup
、edit
、pick
、reword
和 squash
操作,脚本还将接收到原始提交哈希,对于 exec
操作,提供原始和新命令,对于 label
、reset
、merge
和 update-ref
操作,提供原始标签/引用和新标签/引用。
以下是一个结果重置 todo 文件的完整示例,假设 interactive-rebase-tool.postModifiedLineExecCommand
被设置为 script.sh
。
# original line: label onto
label new-onto
exec script.sh "label" "onto" "new-onto"
# original line: reset onto
reset new-onto
exec script.sh "reset" "onto" "new-onto"
pick a12345 My feature
# original line: pick b12345 My change
squash b12345 My change
exec script.sh "squash" "b12345"
# original line: label branch
label branch
exec script.sh "label" "branch" "new-branch"
# original line: exec command
exec new-command
exec script.sh "exec" "command" "new-command"
设置
大多数系统
git config --global sequence.editor interactive-rebase-tool
Windows
标准命令提示符和 Windows 终端
git config --global sequence.editor "'C:/path/to/interactive-rebase-tool.exe'"
GitBash
GitBash 需要使用 winpty
才能正常工作,因此要设置编辑器,请使用
git config --global sequence.editor "winpty /c/path/to/interactive-rebase-tool.exe"
备注
Windows 10 之前的版本在渲染饱和的深色颜色时存在 严重的渲染问题,例如在现代显示器上完全无法辨认的蓝色。虽然可以避免使用饱和颜色,但更好的选择是使用微软的 ColorTool 更新主题。
临时覆盖
您可以通过使用 GIT_SEQUENCE_EDITOR
环境变量来临时使用不同的序列编辑器。
GIT_SEQUENCE_EDITOR=emacs git rebase -i [<upstream> [<branch>]]
直接使用
interactive-rebase-tool <rebase-todo-filepath>
interactive-rebase-tool --help
interactive-rebase-tool --version
获取帮助
该工具具有内置的帮助,可以通过使用 ?
键来访问。
常见默认键绑定
键绑定可以自定义,请参阅 配置 了解所有键绑定和配置信息。
键 | 模式 | 描述 |
---|---|---|
? |
全部 | 显示帮助 |
向上 | 正常/差异 | 将选择项向上移动 |
向下 | 正常/差异 | 将选择项向下移动 |
向上翻页 | 正常/差异 | 将选择项向上移动五行 |
向下翻页 | 正常/差异 | 将选择项向下移动五行 |
主页 | 正常/差异 | 将选择项移动到列表开头 |
结束 | 正常/差异 | 将选择项移动到列表末尾 |
q |
正常/差异 | 中止交互式重置 |
Q |
正常/差异 | 立即中止交互式重置 |
w |
正常/差异 | 写入交互式重置文件 |
W |
正常/差异 | 立即写入交互式重置文件 |
j |
正常/差异 | 将选定的提交向下移动 |
k |
正常/差异 | 将选定的提交向上移动 |
b |
正常 | 切换断点操作 |
p |
正常/差异 | 将选定的提交设置为拾取 |
r |
正常/差异 | 将选定的提交设置为重写 |
e |
正常/差异 | 将选定的提交设置为编辑 |
s |
正常/差异 | 将选定的提交设置为合并 |
f |
正常/差异 | 将选定的提交设置为修复 |
d |
正常 | 将选定的提交设置为删除 |
d |
差异 | 显示完整提交差异 |
E |
正常 | 编辑可编辑操作的命令 |
v |
正常/差异 | 进入和退出可视化模式(用于选择) |
I |
正常 | 插入新行 |
删除 |
正常/差异 | 删除选定的行 |
! |
正常/差异 | 在外部编辑器中打开 todo 文件 |
控制+z |
正常/差异 | 撤销上一个更改 |
控制+y |
正常/差异 | 重做之前撤销的更改 |
c |
正常/差异 | 显示提交信息 |
向下 | 差异 | 向下滚动视图 |
向上 | 差异 | 向上滚动视图 |
左 | 差异 | 向左滚动视图 |
右 | 差异 | 向右滚动视图 |
主页 | 差异 | 滚动视图到顶部 |
结束 | 差异 | 滚动视图到末尾 |
PageUp | 差异 | 向上滚动一步 |
PageDown | 差异 | 向下滚动一步 |
支持的平台
Linux
支持所有基于Linux的发行版。该项目已在Debian和Ubuntu上测试,但应在任何标准Linux发行版上工作。如果该项目在您的平台上无法运行,请提交一个问题。
macOS
支持最新版本的macOS,尽管旧版本也应该可以工作。
Windows
支持Windows 10和Windows 11的最新版本。
该工具已在Windows 11的PowerShell和Windows控制台内的命令提示符以及Windows终端中进行了测试。来自Git for Windows提供的最新版本的Git Bash也得到支持。
Windows控制台和Git Bash仅提供有限支持,并且可能会出现一些功能或图形问题。不支持在传统模式下运行的Windows控制台。
Cygwin不受官方支持。
其他
其他平台不受官方支持。一些平台有社区支持,如果您在平台上遇到问题,请提交一个问题。
开发
安装Rust
要开始开发该项目,您需要安装Rust,这通常可以通过rustup完成。
设置
Cargo Make
该项目使用cargo-make作为任务运行器。要安装
cargo install --force cargo-make
Debian和衍生版本
如果您计划构建发布包,您将需要pkg-config
和liblzma-dev
。它们可以使用apt
安装。
sudo apt install pkg-config liblzma-dev
构建和运行
要构建或运行项目,从项目根目录运行
# only build
cargo make build --release
# build and run
cargo run -- <path-to-git-rebase-todo-file>
示例rebase todo文件可以在./test/fixtures中找到。
测试
为所有功能提供了自动化测试,可以使用以下命令运行
cargo make test
文档
该项目的API文档是使用Rust Doc生成的
cargo make docs
代码检查
除了rustc提供的代码检查外,该项目还使用Clippy提供额外的代码检查,使用以下命令运行
cargo make lint
这将使用稳定版和夜间版运行代码检查。夜间版的代码检查可能会显示错误,但不会导致失败。
格式化
该项目使用rust-fmt提供一致的格式。一个有用的脚本将确保所有文件都格式正确
cargo make format
覆盖率
该项目使用Tarpaulin生成覆盖率报告。覆盖率报告用于查找测试中的差距。要生成覆盖率报告
cargo make coverage
除了打印到CLI的报告外,还可以在coverage
目录中找到HTML报告。
发布
Debian打包构建
cargo make build-deb
deb文件将写入target/debian/git-interactive-rebase-tool_*.deb
。
RPM构建
cargo make build-rpm
将rpm文件写入到target/generate-rpm/git-interactive-rebase-tool-*.deb
。
可重复构建
通过提供一个有效的UNIX时间戳环境变量SOURCE_DATE_EPOCH
,将确保可重复构建。
相关项目
- rebase-editor是一个用Node.js编写的非常类似的项目。
- cj-git-patchtool是另一个用于大量执行git rebase的工具。
- andrewshadura/git-crecord提供了对提交更改的交互式选择。
许可证
Git交互式rebase工具在GPLv3许可下发布。请参阅LICENSE。
有关此项目使用的第三方库的许可,请参阅Third Party Licenses。
依赖关系
~12–20MB
~336K SLoC