Git-NumberedAdd for PowerShell
posted in dev-setup on • by Wouter Van Schandevijl • last updated onAfter 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-2
Git-NumberedAdd -3
Git-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
- 16 January 2020 : Published to the PowerShell Gallery
- 12 January 2020 : More actions and utilities + bugfixes