#git-rebase #git-commit #git #editor #rebase #line-editor #tool

应用 git-interactive-rebase-tool

基于终端的完整功能的git交互式rebase序列编辑器

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 文本编辑器

Download history 1/week @ 2024-04-21 1/week @ 2024-04-28 3/week @ 2024-05-05 11/week @ 2024-05-19 1/week @ 2024-05-26 1/week @ 2024-06-02 191/week @ 2024-06-09 75/week @ 2024-06-16 156/week @ 2024-06-23 76/week @ 2024-06-30 7/week @ 2024-07-07 1/week @ 2024-07-14 1/week @ 2024-07-21 88/week @ 2024-07-28 3/week @ 2024-08-04

每月下载量93

GPL-3.0-or-later

1MB
32K SLoC

Crates.io Packaging status GitHub license Coverage Status

Git交互式Rebase工具

原生跨平台基于终端的完整功能序列编辑器,适用于Git 1.7.8+的交互式rebase。

Git Interactive Rebase Tool

目录

特性

跨平台

构建并在Linux、macOS、Windows和许多其他操作系统上运行。

设置操作

轻松设置操作为picksquashfixupeditreworddrop

Basic operations

重新排序rebase列表

通过单次按键重新排序操作列表。

Reorder items

多行修改

使用可视化模式一次性更改操作并重新排序多行。

Visual mode

切换break标记

Toggle breaks

查看提交详情和差异

通过按键查看提交概览和完整提交差异。

Commit overview

Commit diff

支持Unicode和表情符号

Unicode support

Emoji support

编辑exec命令

轻松编辑由exec命令运行的命令。

exec action command edit

在外部编辑器中编辑

需要在Git编辑器中执行某些操作?快速切换到您的编辑器,进行更改,然后返回工具。

Shell out to editor

高级功能

修改行执行命令

此可选功能允许在修改行后注入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"

脚本提供的第一个参数始终是执行的操作。然后,根据操作,脚本将接收一组不同的参数。

对于 dropfixupeditpickrewordsquash 操作,脚本还将接收到原始提交哈希,对于 exec 操作,提供原始和新命令,对于 labelresetmergeupdate-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发行版上工作。如果该项目在您的平台上无法运行,请提交一个问题

该工具已在TilixGnome终端中进行了测试。

macOS

支持最新版本的macOS,尽管旧版本也应该可以工作。

该工具已在iTerm2终端中进行了测试。

Windows

支持Windows 10和Windows 11的最新版本。

该工具已在Windows 11的PowerShellWindows控制台内的命令提示符以及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-configliblzma-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,将确保可重复构建。

许可证

Git交互式rebase工具在GPLv3许可下发布。请参阅LICENSE

有关此项目使用的第三方库的许可,请参阅Third Party Licenses

依赖关系

~12–20MB
~336K SLoC