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 频道告诉我的你的想法。谢谢!