You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Git命令获取分支所有已提交及未提交的文件变更?

解决方案

一、移除git status输出的状态前缀

如果只想提取文件路径,去掉开头的状态标识(比如??),用文本过滤命令即可:

git status --porcelain -uall | sed 's/^.. //'

或者用awk实现同样效果:

git status --porcelain -uall | awk '{print substr($0,4)}'

这两个命令都会删掉输出开头的两个字符和后续空格,直接保留文件路径。

二、获取当前分支所有变更文件(含已提交、暂存、未暂存)

要达到类似Pull Request的展示效果,需要整合三类文件的查询结果,去重后得到完整的变更列表:

完整命令组合

{
  # 当前分支相对于main已提交的所有变更文件
  git diff --name-only main...HEAD
  # 暂存区待提交的文件
  git diff --name-only --cached
  # 工作区未暂存的变更文件
  git diff --name-only
} | sort | uniq

各命令说明

  • git diff --name-only main...HEAD:查询当前分支与main分支的合并基础之后,所有已提交的变更文件,逻辑和PR展示的已提交内容一致。
  • git diff --name-only --cached:列出已经add到暂存区、等待commit的文件。
  • git diff --name-only:列出工作区中修改了但还没add的文件。
  • sort | uniq:合并重复的文件路径(比如同一个文件可能既在已提交记录里,又被再次修改未暂存)。

可选:包含未跟踪文件

如果需要把git status里的未跟踪文件(即??开头的文件)也加进来,把过滤后的git status输出补充进去:

{
  git diff --name-only main...HEAD
  git diff --name-only --cached
  git diff --name-only
  git status --porcelain -uall | sed 's/^.. //'
} | sort | uniq

内容的提问来源于stack exchange,提问作者Student18

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 15:45:03