This will work (tested with zsh and bash):
[alias] chs = !git checkout $1 && git status
This targets Windows batch / msysgit bash; might not work on other environments.
As Olivier Verdier and Lily Ballard have said
[alias] chs = !git checkout $1 && git status
almost works, but gives a spurious extra insertion of the argument ...
git chs demo -> git checkout demo && git status demo
But if you add && :
to the end of your alias, then the spurious argument is consumed into a location tag.
So
[alias] chs = !git checkout $1 && git status && :
gives the correct output ...
git chs demo -> git checkout demo && git status
You can define a shell function.
[alias] chs = "!f(){ git checkout \"$1\" && git status; };f"
I was able to create multi-line and quite complex git aliases. They work fine on Windows but I assume they'd work elsewhere too, for example:
safereset = "!f() { \
trap 'echo ERROR: Operation failed; return' ERR; \
echo Making sure there are no changes...; \
last_status=$(git status --porcelain);\
if [[ $last_status != \"\" ]]; then\
echo There are dirty files:;\
echo \"$last_status\";\
echo;\
echo -n \"Enter Y if you would like to DISCARD these changes or W to commit them as WIP: \";\
read dirty_operation;\
if [ \"$dirty_operation\" == \"Y\" ]; then \
echo Resetting...;\
git reset --hard;\
elif [ \"$dirty_operation\" == \"W\" ]; then\
echo Comitting WIP...;\
git commit -a --message='WIP' > /dev/null && echo WIP Comitted;\
else\
echo Operation cancelled;\
exit 1;\
fi;\
fi;\
}; \
f"
I wrote a post and have a few more examples here.
[alias]
chs = !git branch && git status
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With