Given a simple
git status command yields something like below, we can utilise some low-level options to simplify this list if we want to maybe pipe the files into a command.
❯ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: .gitignore modified: index.js modified: package.json modified: yarn.lock Untracked files: (use "git add <file>..." to include in what will be committed) README.md no changes added to commit (use "git add" and/or "git commit -a")
Porcelain commands are ones that Git describes as ones that are quite low-level and not ones that everyday users might need. However, for
git status, this could be useful.
Give the output in an easy-to-parse format for scripts. This is similar to the short output, but will remain stable across Git versions and regardless of user configuration
Running it will give us something like below:
❯ git status --porcelain M .gitignore M index.js M package.json M yarn.lock ?? README.md
We can take this further to remove the
M or the
❯ git status --porcelain | sed s/^...// .gitignore index.js package.json yarn.lock README.md
And if we wanted to put all of these onto one line to maybe pass to a script or pipe the output to another command, we could do something like:
❯ git status --porcelain | sed s/^...// | tr '\n' ' ' .gitignore index.js package.json yarn.lock README.md
To pass this to a script, we could do:
❯ stat $(git status --porcelain | sed s/^...// | tr '\n' ' ')