Git-NumberedAdd for PowerShell
posted in dev-setup on • by Wouter Van Schandevijl • last updated on🎉🎉 October 2025 update: v1.2
There have been changes in both git (v2.26+) and PowerShell (v7+) that broke
Git-NumberedAdd, it has been a long time coming but, the fixes are finally available in the PSGallery 😅
After copying file paths from git status output and pasting them after a git add quite a few times
by now, I’ve written a small PowerShell script
to manipulate the working directory and staging area with fabricated indexes.
PowerShell Gallery
Now available on the PowerShell Gallery!
Install-Module -Name Git-NumberedAdd
Git-NumberedHelp (alias: gnh)
All these aliases to save time but who can remember all that?
Use gnh to display all actions available by Git-NumberedAdd with description and alias.
Git-NumberedStatus (alias: gs)
Displays the output of git status --short together with fabricated indexes like so

Working directory color codes:
- Yellow: Modified (file0 to file3)
- DarkMagenta: Deleted (file4)
- Blue: Added (file5)
Git-NumberedStatus accepts extra CLI arguments. Example: gs -u to see all --untracked-files.
Configure the color output by modifying $global:gitStatusNumbers.
With Numstat
If $global:gitStatusNumbers.includeNumstat is true (=by default), Git-NumberedStatus will also
execute a git diff --numstat and add lines added/deleted to the output.

Git-NumberedAdd (alias: ga)
All set to stage some files!
PS> Git-NumberedAdd 0 1 2
add 'file0'
add 'file1'
add 'file2'
The same can be achieved with:
Git-NumberedAdd 0-2Git-NumberedAdd -3Git-NumberedAdd 012(as long as index 12 does not exist!)
Git-NumberedAdd +3 would add file4 and file5 in the above scenario.
And Commit
Provide a final string argument to continue and commit the staged files:
gs
ga 0 1 2 "commit: files 0, 1 and 2"
Git-NumberedDiff (alias: gd)
Works like Git-NumberedAdd but can also be called without arguments to
see the diff of all files. It will call git add -N for all newly created
files so that they also show up in the diff.
git diff --cached is currently not implemented in this script.
Git-NumberedReset (alias: grs)
This only works for files already staged. Example output:

To, for example unstage file0 and file4
PS> Git-NumberedReset 02
Unstaged changes after reset:
M file0
M file1
M file2
D file4
All actions
Wrappers for all your basic git commands
# Manipulate working directory:
Git-NumberedAdd # Alias: ga
Git-NumberedAddPatch # Alias: gap
Git-NumberedDiff # Alias: gd
Git-NumberedDiffCached # Alias: gdc
Git-NumberedCheckout # Alias: gco
# Manipulate the staging area:
Git-NumberedReset # Alias: grs
Git-Assuming
Unfamiliar with “assume unchanged”?
Check the docs on git update-index --assume-unchanged.
After a Git-NumberedStatus, assume a file in the working directory with Git-NumberedAssumed (alias: gas)
Unassume files later on:
# List all currently assumed files
Git-ListAssumed # alias: gasl
# and follow with:
# git update-index --no-assume-unchanged
Git-NumberedUnassumed # alias: gnoas
There are now also aliases for git update-index --skip-worktree with Git-NumberedHidden (alias: ghide)
Git-ListHidden # alias: glh
# and follow with:
Git-NumberedHidden # alias: ghide
Utilities
# Get the full path of a file
Git-GetFileNameByIndex 2 # alias: gn
# Delete file with index 2
rm (gn 2)
# Change current path to single index location
Git-NumberedSetLocation # Alias: gsl
# Use Pop-Location (alias: popd) to go back to where you came from
Alternatives
Sometime similar is actually built into Git itself
git add --interactive # or -i for short
Once in interactive mode:

And then use 2: Update to stage files.
Also, see below for similar implementations in Bash and Perl.
-
scmbreeze/scm_breeze : Similar implementation in Bash
-
holygeek/git-number : Similar implementation in Perl
- 17 October 2025 : v1.2: Fixes for git 2.26+ and PowerShell 7+
- 16 January 2020 : Published to the PowerShell Gallery
- 12 January 2020 : More actions and utilities + bugfixes