GitButler CLI 入门指南

GGitButler
컴퓨터/소프트웨어창업/스타트업AI/미래기술

Transcript

00:00:00大家好。我是 Scott Chacone,Git Brother 的首席执行官。
00:00:02今天我将快速演示一下全新的 Git Brother CLI。
00:00:06如果你熟悉命令行,
00:00:08并希望能够以编程方式使用 Git Brother,
00:00:11那么这个全新的 Git Brother CLI 会是一个非常酷的选择。
00:00:14那我们现在就开始吧。好,我们先从一个仓库开始。
00:00:18我这里有一个小的 Rust 项目,
00:00:20我们将开始演示 Git Brother CLI 的工作流程。
00:00:23它本质上是 Git 的掉入式替代方案。安装完成后,
00:00:27你可以使用 “but” 命令。它将取代 Git 成为你的主要操作接口。
00:00:32你可以运行 “but” 或者 “but status”,前者是后者的简写。
00:00:35它会显示当前状态。
00:00:38这与 Git status 的输出非常相似。
00:00:41我们可以看到有四个已修改的文件。
00:00:44其中几个是未跟踪的,几个是已更改的。
00:00:47包含了一些新文件和修改过的文件,但在 “but” 的输出中,
00:00:50status 只会列出这四个。这些就是你的改动,对吧?
00:00:55这些是你修改过的内容。你可以根据需要提交它们。
00:00:59我们要做的就是直接运行 “but commit”。
00:01:02它会创建一个临时分支。我们来试一下。
00:01:05再次运行 “but status”,可以看到所有改动都合并到了一个提交中。
00:01:11我们还可以运行 “but status -f” 或 “--files”。
00:01:15它会显示该提交中修改的具体文件。
00:01:18但假设我们并不想把所有改动都放在一个提交里,对吧?
00:01:21有些是 Clod 相关的,一个是 readme,
00:01:24还有一个是功能代码的改动。这其实是三个独立的改动,
00:01:28所以我们希望分为三个提交。让我们撤销刚才的操作。
00:01:31我们可以通过运行 uncommit 来撤销提交。
00:01:36现在恢复原状了。这里还有一个临时分支,
00:01:40如果想删掉也可以,但我们就直接重用它吧。
00:01:44我要重命名一下,把这个分支叫做 “Clod stuff”。
00:01:48现在有了一个新分支,我可以把内容暂存进去,
00:01:53类似于 git add。我们可以输入 “but stage G0 H0”。
00:01:58这些是对应文件的短代码。
00:02:01如果你愿意,也可以输入完整路径,
00:02:04但我们尽量让操作变得更快捷。现在看一眼,
00:02:08这些已经暂存到 “Clod stuff” 分支了,我可以用 -o 提交,
00:02:12也就是只提交已暂存的内容。如果只运行 commit,
00:02:15它会把已暂存和未暂存的内容全部提交。
00:02:18等分支变多的时候,这会更容易理解,不过我们先提交这个。
00:02:20现在我们有了一个包含一次提交的分支,
00:02:25以及一些未暂存的改动。
00:02:28有趣的地方来了,与 Git 不同的是,
00:02:31假设我想把这个 readme 提交,
00:02:34推送到远端并开启一个 PR。
00:02:37在平常,如果我正在这个 “Clod” 分支上,
00:02:41我得先贮藏这个分支,添加 readme,提交,
00:02:44然后推送到 PR。
00:02:45但在 Git Brother 中,我们可以拥有平行分支。
00:02:50我可以运行 “but branch new as readme”,你会看到出现了一个
00:02:55独立的新分支,然后我可以暂存那个文件。
00:03:00直接提交那个文件。
00:03:01看一眼已更改的文件,对吧?
00:03:07我有一个包含两个 Clod 相关改动的提交,
00:03:09还有一个包含 readme 改动的提交。同样的,
00:03:11如果我愿意,我可以运行 commit,
00:03:17-c 代表创建,我可以以此创建一个新分支,我想说,实际上,
00:03:21让我看看具体改了什么。我有点忘了。噢,
00:03:25是这个 read 命令。好的。
00:03:27它会抓取最后未提交的内容,或者当前所有未提交的内容,
00:03:32让你创建一个新分支并提交到该分支。
00:03:35现在我们可以看到有三个分支了。
00:03:38它们彼此独立。
00:03:39所有这些改动仍然都在我们的工作目录中。
00:03:42我们实际上完全没有切换工作目录。
00:03:44我们只是在内存中创建提交。
00:03:46现在运行 “but push”,它会问:你想推送哪一个?
00:03:50你想全部推送吗?它们每个都有一个未推送的提交。
00:03:53或者只推送其中一个?我们只推送 readme 吧。
00:03:57假设我们觉得只有这个目前准备好了。
00:03:59选中它,它就会完成推送。
00:04:02再次查看 status,
00:04:03我们可以从状态提示中看到,这个分支已经推送了。
00:04:06而其他的还是仅在本地。
00:04:08所以 Git Brother 在同时处理多个分支方面非常强大,
00:04:11但它也能处理堆栈分支 (Stacked Branches)。
00:04:13我们来看一个例子:基于已有的一个提交
00:04:17来创建新内容,
00:04:19并在此基础上创建一个堆栈分支。
00:04:20这样我们可以合并底层的分支,同时继续开发上层的。
00:04:23假设我们要创建一个堆栈分支。
00:04:26我们希望这个 read 命令被评审并合并,
00:04:30但我们也想继续在该基础上开发。
00:04:32这种有依赖关系的情况,堆栈分支比独立分支更合适。
00:04:35操作方式是运行:
00:04:38“but branch new -a”,-a 代表锚点 (anchor),
00:04:42锚定到 “SC read command”,新分支叫 “SC read more”。
00:04:46现在看一眼,
00:04:48你可以看到这个分支是堆叠在上面的。
00:04:50让我们来编辑一下。
00:04:52我们可以看到这里是获取 10 条消息并显示。
00:04:57我们把它改成 20 条,顺便把这里也改了。
00:05:02可以看到有了改动,这里还有一个锁图标,因为它
00:05:09修改了一个已经在别处提交过的文件。
00:05:11所以它被锁定在特定的提交上。
00:05:13我们只能在它之上提交,因为它修改的是那里引入的代码。
00:05:16我们可以用 diff 命令查看改动,
00:05:20这可以很方便地查看修改了哪些代码块,然后
00:05:25直接提交。好的。
00:05:28为了展示调整提交是多么容易,
00:05:32我来演示一下,
00:05:33运行 “status -f” 查看所有文件。
00:05:37我们来分享这些。刚才看过了 push,
00:05:40它会推送到你的远程仓库,
00:05:42但我们也可以输入 “PR” 来开启拉取请求。我们可以选择:
00:05:46你想为哪些分支开启 PR?
00:05:48我们就为所有分支都开启 PR 吧。
00:05:50它会为每一个 PR 打开编辑器并询问:
00:05:54PR 的描述想写什么?我就简单写一下。
00:05:57现在所有的 PR 都开启了。
00:06:01开启之后,我们可以在上方看到这些编号。1 号、2 号,
00:06:04这些就是 PR 编号和对应的消息。
00:06:06我们每次都使用了相同的消息。
00:06:08还可以使用 -v 命令,
00:06:10也就是详细模式 (verbose),来查看每个 PR 的 URL。
00:06:12我们来看其中一个。
00:06:14这是修改 readme 的 PR,可以看到它只有一个提交,
00:06:18且只包含对那一个 readme 文件的修改。它是隔离的。
00:06:23而这是那个堆栈 PR。
00:06:24通过查看其中一个,我们可以发现它创建了一个
00:06:28堆栈。第一个,
00:06:30即底层的 PR,目标分支是 main。
00:06:35而第二个,我们可以从这里跳过去,它的目标是第一个。
00:06:39所以它正确地处理了堆栈分支。
00:06:41现在看看集成代码时会发生什么。
00:06:43去到这个 readme 的 PR,我们可以说:好的,
00:06:46看起来不错,我把它合并了。现在它已经在上游了。
00:06:49如果我们运行 “but pull --check”,它会进行检查。
00:06:55我们也可以运行 “but fetch”,它会自动帮你运行这个。
00:06:57它还会偶尔在后台进行 fetch。
00:07:00我们在运行一些命令时你可能已经看到了。
00:07:02它会提示“已启动后台任务”。我们可以看到这个分支已被集成。
00:07:06它显示已在上游集成。所以当我们运行 “but pull” 时,
00:07:10它会获取最新的信息。
00:07:13它会变基 (rebase) 我们的其他分支,并移除这个已集成的
00:07:16分支。我们可以看到它已从本地移除。
00:07:19现在看,那个已经完成了,
00:07:22剩下的已经完成了变基以保持更新,如果需要,我们可以再次推送。
00:07:25任何时候,
00:07:29如果你想变回普通的 Git 操作,可以运行 “but tear down”,
00:07:33它会让你选择一个分支。
00:07:36你会发现它默认选择你最初所在的那个分支,
00:07:39但你刚才处理的所有分支依然还在。
00:07:43只是普通的 Git 一次只能处于一个分支。现在你又回到了单一分支模式。
00:07:47你可以通过 set up 和 tear down 来自由进出 Git Brother 模式。
00:07:50无论你是想同时处理多个分支,还是只想用正常的 Git 提交工具。
00:07:55不过即使在 Git Brother 模式下,你依然可以使用大部分
00:08:00Git 命令。比如 “git show” 某个提交,完全没问题。
00:08:04“git log” 也是一样,依然有效。
00:08:08所有的读取类命令都运行正常,比如 show、log 等,
00:08:13我们真正为你接管和管理的是提交过程。在这种情况下,
00:08:16你也可以直接 checkout 到一个分支,Git Brother 会识别到,
00:08:21并撤销它之前所做的操作。
00:08:24你应该就能恢复如初。
00:08:26最后我要展示的是,所有这些命令都有
00:08:30--json 版本。如果你想以 JSON 格式运行 status,
00:08:34直接运行即可。如果你想查看某个提交,
00:08:41几乎所有的命令都有这个选项,
00:08:44你可以通过 “but help” 查看所有命令。几乎所有这些
00:08:48都有 --json 或 -J 选项。
00:08:52这意味着你可以轻松地编写脚本。甚至更有趣的是,
00:08:56你可以运行 diff,它会给你一个 JSON 版本的差异对比,
00:09:00我觉得这非常酷。
00:09:01以上就是对 Git Brother 的一个初步介绍,以及它与 Git 的区别。
00:09:05再说一次,你可以把它放在任何 Git 仓库中。
00:09:08运行 “but set up”,就可以开始使用这些命令了。
00:09:12你可以获得 JSON 输出,可以管理多个分支,
00:09:15可以管理堆栈分支,还可以进行
00:09:17GitHub 集成和 PR 管理。
00:09:20所有这些都是即插即用的,直接运行 but 命令就行。
00:09:24任何时候你想回到 Git,
00:09:26虽然大部分 Git 命令在这个环境下依然有效,
00:09:29但你只需 tear down 或 checkout 分支,它就会清理好一切。
00:09:33今天就去试试吧。
00:09:35访问 [gitbrother.com/cli](https://www.google.com/search?q=https://gitbrother.com/cli) 下载并开始体验。
00:09:39欢迎加入我们的 Discord 频道告诉我的你的想法。谢谢!

Key Takeaway

GitButler CLI 是一款功能强大的 Git 增强工具,通过平行分支、堆栈管理和 JSON 自动化支持,彻底简化了复杂的多任务开发流程。

Highlights

GitButler CLI(简称 "but")是 Git 的无缝替代工具,旨在通过编程方式增强 Git 工作流。

支持“平行分支”功能,允许开发者在不切换工作目录或使用 stash 的情况下,同时处理多个独立的分支。

引入了“堆栈分支”(Stacked Branches)管理,能够处理具有依赖关系的功能开发并自动管理目标分支。

深度集成 GitHub,支持直接通过命令行创建、管理 PR,并能自动识别远程合并状态以清理本地分支。

所有命令均支持 --json 输出选项,极大地方便了开发者编写自动化脚本和进行工具集成。

具备灵活的切入与退出机制,通过 setup 和 tear down 命令可以随时在 GitButler 模式与传统 Git 模式间切换。

Timeline

GitButler CLI 简介与基础操作

GitButler 首席执行官 Scott Chacone 介绍了这款专为命令行用户设计的全新 CLI 工具。它是 Git 的掉入式替代方案,用户在安装后可以使用 "but" 命令替代传统的 "git" 指令。演示从一个 Rust 项目开始,展示了 "but status" 如何以更简洁的方式列出已修改和未跟踪的文件。通过执行 "but commit",工具会自动创建一个临时分支并将所有更改打包。如果用户对提交不满意,可以使用 "uncommit" 轻松撤销操作并恢复到之前的状态。

平行分支与高效代码暂存

这一章节重点介绍了如何利用短代码快速暂存文件以及 GitButler 独特的平行分支概念。开发者可以使用类似 "but stage G0 H0" 的命令,通过简短的索引号而非完整路径来暂存特定文件,从而提高操作速度。视频展示了将不同性质的改动(如 Cloud 相关代码与 README 文档)分离到不同分支的过程。与传统 Git 不同,GitButler 允许这些分支在内存中并行存在,互不干扰。这种方式避免了频繁切换分支带来的开销,让开发者能够更专注地组织代码结构。

创建独立分支与 PR 预览

Scott 演示了如何在不更改工作目录内容的前提下,从现有改动中提取特定文件并创建新分支。例如,通过 "but branch new as readme" 命令,可以将 README 的修改直接隔离到一个独立分支中。这种机制允许开发者在同一个工作空间内同时准备多个逻辑上的 PR。运行 "but push" 时,系统会交互式地询问用户想要推送哪一个分支,或者是否全部推送。状态界面会清晰地标记出哪些分支已推送到远端,哪些仍仅保留在本地,确保了远程与本地同步的透明度。

堆栈分支管理详解

视频深入探讨了“堆栈分支”(Stacked Branches)这一高级功能,用于处理有依赖关系的改动。通过 "but branch new -a" 命令,开发者可以将一个新分支锚定在现有分支之上,形成逻辑上的堆叠。当上层分支修改了底层分支已提交的文件时,GitButler 会显示锁图标以提示冲突风险。这种模式非常适合在等待底层代码评审的同时,继续在其基础上开发后续功能。通过 diff 命令,用户可以精确查看每个代码块的改动情况,并确保提交的原子性。这种结构化的分支管理方式极大地提升了处理复杂功能链的效率。

GitHub 集成与自动化 PR 工作流

GitButler 提供了强大的 GitHub 集成功能,支持直接通过 "but PR" 命令为所有选中分支批量开启拉取请求。系统会自动为每个 PR 打开编辑器以输入描述信息,并为堆栈分支正确配置目标基准。在演示中,Scott 展示了如何在 GitHub 上合并一个 README 的 PR,随后回到命令行执行 "but pull --check"。GitButler 能够智能识别上游已合并的分支,并在本地自动进行变基(rebase)处理。它会自动清理已集成的本地分支,确保开发者的工作环境始终保持整洁且与主干同步。

兼容性、JSON 支持与总结

在最后一部分中,Scott 强调了 GitButler 与传统 Git 的兼容性,用户可以随时通过 "tear down" 切换回普通的单一分支模式。即使在 GitButler 模式下,标准的 Git 读取命令如 log 和 show 依然完全可用。该工具的一个巨大亮点是所有命令都支持 --json 格式输出,这使得它非常适合被集成到各种脚本和自动化流水线中。无论是差异对比(diff)还是状态查询,结构化的 JSON 数据都为开发者提供了极大的灵活性。视频最后鼓励用户访问官网下载体验,并加入 Discord 社区参与讨论。这种即插即用的特性使得 GitButler 成为提升 Git 操作体验的理想选择。

Community Posts

View all posts