Git 交互式变基工具
原生跨平台、功能完备的基于终端的 序列编辑器,用于 Git 1.7.8+ 的交互式变基。
目录
功能
跨平台
在 Linux、macOS、Windows 及许多其他平台上构建并运行。
设置操作
轻松将操作设置为 pick、squash、fixup、edit、reword 和 drop。

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

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

切换 breaks

查看提交详情和差异
按下按键即可查看提交概览以及完整的提交差异。


Unicode 和 Emoji 支持


编辑 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,会提供原始标签/引用和新标签/引用。
假设 interactive-rebase-tool.postModifiedLineExecCommand 被设置为 script.sh,以下是生成的 rebase todo 文件的完整示例。
# 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'"
Git Bash
Git Bash 需要使用 winpty 才能正常工作,因此设置编辑器请使用:
git config --global sequence.editor "winpty /c/path/to/interactive-rebase-tool.exe"
备注
Windows 10 之前的版本存在严重的深色饱和颜色渲染问题,例如在现代显示器上完全无法辨认的蓝色。虽然可以避免使用饱和颜色,但更好的选择是使用 Microsoft 的 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
获取帮助
该工具内置了帮助功能,可通过使用 ? 键访问。
常用默认按键绑定
按键绑定可以进行自定义,请参阅 配置 以获取所有按键绑定及配置相关信息。
| Key | Mode | Description |
|---|---|---|
? | All | 显示帮助 |
| Up | Normal/Diff | 向上移动选择 |
| Down | Normal/Diff | 向下移动选择 |
| Page Up | Normal/Diff | 向上移动选择五行 |
| Page Down | Normal/Diff | 向下移动选择五行 |
| Home | Normal/Diff | 将选择移动到列表开头 |
| End | Normal/Diff | 将选择移动到列表末尾 |
q | Normal/Diff | 中止交互式变基 |
Q | Normal/Diff | 立即中止交互式变基 |
w | Normal/Diff | 写入交互式变基文件 |
W | Normal/Diff | 立即写入交互式变基文件 |
j | Normal/Diff | 向下移动所选提交 |
k | Normal/Diff | 向上移动所选提交 |
b | Normal | 切换 break 操作 |
p | Normal/Diff | 将所选提交设置为 pick |
r | Normal/Diff | 将所选提交设置为 reword |
e | Normal/Diff | 将所选提交设置为 edit |
s | Normal/Diff | 将选中的提交设置为待压缩(squash) |
f | Normal/Diff | 将选中的提交设置为待修复(fix-up) |
d | Normal | 将选中的提交设置为待丢弃 |
d | Diff | 显示完整的提交差异 |
E | Normal | 编辑可编辑操作的命令 |
v | Normal/Diff | 进入和退出可视模式(用于选择) |
I | Normal | 插入新行 |
Control+d | Normal | 复制选中的行 |
Delete | Normal/Diff | 删除选中的行 |
! | Normal/Diff | 在外部编辑器中打开待办文件 |
Control+z | Normal/Diff | 撤销上一步更改 |
Control+y | Normal/Diff | 重做之前撤销的更改 |
c | Normal/Diff | 显示提交信息 |
| Down | Diff | 向下滚动视图 |
| Up | Diff | 向上滚动视图 |
| Left | Diff | 向左滚动视图 |
| Right | Diff | 向右滚动视图 |
| Home | Diff | 滚动视图到顶部 |
| End | Diff | 滚动视图到末尾 |
| PageUp | Diff | 向上翻页滚动视图 |
| PageDown | Diff | 向下滚动视图一步 |
支持的平台
Linux
支持所有基于 Linux 的发行版。该项目已在 Debian 和 Ubuntu 上进行测试,但应适用于任何标准 Linux 发行版。如果该项目在你的平台上无法正常工作,请提交一个 issue。
该工具已在 Tilix 和 Gnome Terminal 中进行了测试。
macOS
支持最新版本的 macOS,但之前的版本应该也能正常工作。
该工具已在 iTerm2 和 Terminal 中进行了测试。
Windows
支持 Windows 10 和 Windows 11 的最新版本。
该工具已在 Windows 11 的 PowerShell 以及 Windows Console 和 Windows Terminal 中的 Command Prompt 中进行了测试。由 Git for Windows 提供的最新版本的 Git Bash 也得到支持。
Windows Console 和 Git Bash 仅获得最低限度的支持,可能会出现某些功能缺失或图形故障。以legacy mode 运行的 Windows Console 不受支持。
Cygwin 未获得官方支持。
其他
其他平台未获得官方支持。某些平台拥有社区支持,如果你在让该项目在你的平台上运行方面遇到困难,请提交一个 issue。
开发
安装 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
Linting
作为 rustc 提供的 lints 的补充,本项目使用 Clippy 提供额外的 linting,运行方式如下:
cargo make lint
这将使用 stable 和 nightly 运行 lints。nightly lints 可能会显示错误,但不会导致失败。
Format
本项目使用 rust-fmt 以提供一致的格式。一个有用的脚本将确保所有文件格式正确:
cargo make format
覆盖率
该项目使用 Tarpaulin 生成覆盖率报告。覆盖率报告用于发现测试中的遗漏。生成覆盖率报告的方法如下:
cargo make coverage
作为打印到 CLI 的报告补充,HTML 报告可在 coverage 目录中找到。
发布
Debian 打包构建
cargo make build-deb
A 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 提供对提交更改的交互式选择。
许可证
版权所有 © 2017-2024 Tim Oram 及贡献者
本程序是自由软件:您可以按照自由软件基金会发布的 GNU 通用公共许可证的条款重新分发和/或修改它, 许可证版本 3,或(在您选择的情况下)任何更高版本。
本程序分发的希望是它会有用, 但没有任何保证;甚至没有对 适销性或特定用途适用性的隐含保证。 请参阅 GNU 通用公共许可证以获取更多详细信息。
GNU 通用公共许可证的副本可以在文件 COPYING 中找到。
请参阅 Third Party Licenses 了解本项目使用的第三方库的许可证。
