Git Alias - Multiple Commands and Parameters
Git Alias - Multiple Commands and Parameters
I am trying to create an alias that uses both multiple git commands and positional parameters. There are stackoverflow pages for each, and it would appear painfully obvious to do both, but I am having trouble.
As an example, I want to switch to branch foo and perform a status. So in my .gitconfig
, I have:
[alias] chs = !sh -c 'git checkout $0 && git status'
which doesn't work. Whereas something like this will work.
chs = !sh -c 'git checkout $0' echoes = !sh -c 'echo hi && echo bye'
Any insight would be appreciated.
Thanks!
Answer by Olivier Verdier for Git Alias - Multiple Commands and Parameters
This will work (tested with zsh and bash):
[alias] chs = !git checkout $1 && git status
Answer by Kevin Ballard for Git Alias - Multiple Commands and Parameters
You can define a shell function.
[alias] chs = "!f(){ git checkout \"$1\" && git status; };f"
Answer by FractalSpace for Git Alias - Multiple Commands and Parameters
[alias] chs = !git branch && git status
Answer by brocksamson for Git Alias - Multiple Commands and Parameters
Try this one:
[alias] chs = "!sh -c 'git checkout \"$0\" && git status'"
Call it like this: git chs master
Answer by gmarik for Git Alias - Multiple Commands and Parameters
It's possible to have multiline git alias by appending \
at the end of each line.
[alias] chs = "!git checkout $1 \ ; git status \ "
Answer by Ben Collins for Git Alias - Multiple Commands and Parameters
The problem here is that the positional parameters seem to be getting sent to the shell command twice (as of git 1.9.2). To see what I mean, try this:
[alias] test = !git echo $*
Then, do git test this is my testing string
. You should observe the following output (last two lines edited here for clarity):
03:41:24 (release) ~/Projects/iOS$ git test this is my testing string this is my testing string this is my testing string ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ #1 #2
One way to work around this would be to
[alias] chs = !git checkout $1 && git status && git echo x >/dev/null
This will consume the extra positional parameter as it gets applied to that last echo command and have no effect on the results.
Answer by Brondahl for Git Alias - Multiple Commands and Parameters
Apolgies for necro-ing the question, but I've now solved the remaining problem with the primary answer (solved for Windows batch / msysgit bash, don't know about other environments)
As Olivier Verdier and Kevin 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
Answer by VitalyB for Git Alias - Multiple Commands and Parameters
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.
Fatal error: Call to a member function getElementsByTagName() on a non-object in D:\XAMPP INSTALLASTION\xampp\htdocs\endunpratama9i\www-stackoverflow-info-proses.php on line 71
0 comments:
Post a Comment