ITADN
MitMaro/git-interactive-rebase-tool
MitMaro/git-interactive-rebase-tool · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

Crates.io Packaging status GitHub license Coverage Status

Git 交互式变基工具

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

Git Interactive Rebase Tool

目录

功能

跨平台

在 Linux、macOS、Windows 及许多其他平台上构建并运行。

设置操作

轻松将操作设置为 picksquashfixupeditreworddrop

Basic operations

重新排序 rebase 列表

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

Reorder items

多行修改

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

Visual mode

切换 breaks

Toggle breaks

查看提交详情和差异

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

Commit overview

Commit diff

Unicode 和 Emoji 支持

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,会提供原始标签/引用和新标签/引用。

假设 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

获取帮助

该工具内置了帮助功能,可通过使用 ? 键访问。

常用默认按键绑定

按键绑定可以进行自定义,请参阅 配置 以获取所有按键绑定及配置相关信息。

KeyModeDescription
?All显示帮助
UpNormal/Diff向上移动选择
DownNormal/Diff向下移动选择
Page UpNormal/Diff向上移动选择五行
Page DownNormal/Diff向下移动选择五行
HomeNormal/Diff将选择移动到列表开头
EndNormal/Diff将选择移动到列表末尾
qNormal/Diff中止交互式变基
QNormal/Diff立即中止交互式变基
wNormal/Diff写入交互式变基文件
WNormal/Diff立即写入交互式变基文件
jNormal/Diff向下移动所选提交
kNormal/Diff向上移动所选提交
bNormal切换 break 操作
pNormal/Diff将所选提交设置为 pick
rNormal/Diff将所选提交设置为 reword
eNormal/Diff将所选提交设置为 edit
sNormal/Diff将选中的提交设置为待压缩(squash)
fNormal/Diff将选中的提交设置为待修复(fix-up)
dNormal将选中的提交设置为待丢弃
dDiff显示完整的提交差异
ENormal编辑可编辑操作的命令
vNormal/Diff进入和退出可视模式(用于选择)
INormal插入新行
Control+dNormal复制选中的行
DeleteNormal/Diff删除选中的行
!Normal/Diff在外部编辑器中打开待办文件
Control+zNormal/Diff撤销上一步更改
Control+yNormal/Diff重做之前撤销的更改
cNormal/Diff显示提交信息
DownDiff向下滚动视图
UpDiff向上滚动视图
LeftDiff向左滚动视图
RightDiff向右滚动视图
HomeDiff滚动视图到顶部
EndDiff滚动视图到末尾
PageUpDiff向上翻页滚动视图
PageDownDiff向下滚动视图一步

支持的平台

Linux

支持所有基于 Linux 的发行版。该项目已在 Debian 和 Ubuntu 上进行测试,但应适用于任何标准 Linux 发行版。如果该项目在你的平台上无法正常工作,请提交一个 issue

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

macOS

支持最新版本的 macOS,但之前的版本应该也能正常工作。

该工具已在 iTerm2Terminal 中进行了测试。

Windows

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

该工具已在 Windows 11 的 PowerShell 以及 Windows ConsoleWindows 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-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

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 环境变量,将确保构建可重现。

相关项目

许可证

版权所有 © 2017-2024 Tim Oram 及贡献者

本程序是自由软件:您可以按照自由软件基金会发布的 GNU 通用公共许可证的条款重新分发和/或修改它, 许可证版本 3,或(在您选择的情况下)任何更高版本。

本程序分发的希望是它会有用, 但没有任何保证;甚至没有对 适销性或特定用途适用性的隐含保证。 请参阅 GNU 通用公共许可证以获取更多详细信息。

GNU 通用公共许可证的副本可以在文件 COPYING 中找到。

请参阅 Third Party Licenses 了解本项目使用的第三方库的许可证。