今天,一位同事咨询如何打开特定 Git 分支中所有已更改的文件。他们正在审查一个大型拉取请求,有时在本地编辑器中审查文件比在 GitHub 的代码审查界面中更容易。您可以查看整个文件、运行测试或本地构建,并获得比 GitHub diff 更详细的上下文信息。
这是我建议的片段:
git diff --name-only " $BRANCH_NAME " $( git merge-base origin/main " $BRANCH_NAME " ) \ | xargs open -a "Visual Studio Code"
它使用了一些巧妙的 Git 功能,所以让我们来分解一下。git diff --name-only " $BRANCH_NAME " $( git merge-base origin/main " $BRANCH_NAME " ) \ | xargs open -a "Visual Studio Code"
工作原理
此命令分为三个部分:
-
找出 dev 分支与 main 分支的分歧点。我们可以使用
git-merge-base
:$ git merge-base origin/main " $BRANCH_NAME " 9ac371754d220fd4f8340dc0398d5448332676c3
此命令为我们提供了主分支和开发分支的共同祖先——这是开发人员创建其分支时的主分支的提示。
在小型代码库中,主分支可能自 dev 分支创建以来就没有变化过。但在大型代码库中,由于许多人都在进行修改,主分支可能自 dev 分支创建以来就发生了变化。
这是一张快速图片:
共同祖先 主分支 开发分支 Git 历史记录的简单图示。主分支上有一系列线性提交,然后是后来创建的开发分支。创建分支的提交以红色突出显示。
这告诉我们正在审查哪些提交——这个分支中有哪些变化?
-
获取 dev 分支中已更改的文件列表。我们可以使用
git-diff
查看两次提交之间的差异。如果添加--name-only
标志,它只会打印包含更改的文件名列表,而不是完整的差异。$ git diff --name-only " $BRANCH_NAME " $( git merge-base … ) assets/2025/exif_orientation.py src/_drafts/create-thumbnail-is-exif-aware.md src/_images/2025/exif_orientation.svg
因为我们正在比较 dev 分支的尖端和 dev 分支与主分支分歧点之间的差异,所以这会打印出 dev 分支中已更改的文件列表。
(我最初建议使用
git diff --name-only "$BRANCH_NAME" origin/main
,但这是错误的。这会打印两个分支之间所有不同的文件,其中包括在创建 dev 分支后合并到 main 的更改。) -
在文本编辑器中打开文件。我建议通过管道连接到
xargs
并open
,但有很多方法可以做到这一点:$ git diff … | xargs open -a "Visual Studio Code"
xargs
命令对于重复执行同一件事非常有用——在本例中,就是在 VS Code 中打开一堆文件。你输入一个空格分隔的字符串,它会将字符串拆分成不同的部分,然后逐个对每个部分运行相同的命令。这相当于运行:open -a "Visual Studio Code" "assets/2025/exif_orientation.py" open -a "Visual Studio Code" "src/_drafts/create-thumbnail-is-exif-aware.md" open -a "Visual Studio Code" "src/_images/2025/exif_orientation.svg"
open
命令打开文件,-a
标志告诉它使用哪个应用程序。我们在工作中主要使用 VS Code,但您也可以在此处传递任何文本编辑器。阅读
open
的手册页时,我想起可以一次打开多个文件,所以不用xargs
也能做到这一点。我本能地选择了xargs
,因为我对它非常熟悉,而且它是一种可靠的方法,可以接受一个只需要输入的命令,然后通过多个输入来运行它。
[如果这篇文章的格式在你的阅读器中看起来很奇怪,请访问原始文章]
原文: https://alexwlchan.net/2025/review-files-in-text-editor/?ref=rss