Git alias with variables not working as expected: pathspec did not match any file(s) known to git

alias, git, git-bash

Solution

Use a shell function for the alias:

[alias]

catchup = "!f() { CURRENTBRANCH=$(git symbolic-ref --short HEAD) && .... ;}; f"

There the handling of `$n` works as expected.

The OP mwotton confirms in the comments that the following works:

catchup = "!_(){ CURRENTBRANCH=$(git symbolic-ref --short HEAD) ; echo \"Currently on \"$CURRENTBRANCH\" - switching to \"$@ ; git checkout $@ ; git merge origin/$@ ; echo \"Going back to \"$CURRENTBRANCH ; git checkout $CURRENTBRANCH; }; _"

In multi-line, for more visibility:

catchup = "!_(){ 
  CURRENTBRANCH=$(git symbolic-ref --short HEAD) ; 
  echo \"Currently on \"$CURRENTBRANCH\" - switching to \"$@ ; 
  git checkout $@ ; 
  git merge origin/$@ ; 
  echo \"Going back to \"$CURRENTBRANCH ; 
  git checkout $CURRENTBRANCH; }; _"

Problem

I have created an alias for catching up my tracking branches as needed. Here's the current line from the `[alias]` section of my .gitconfig: ``` catchup = !CURRENTBRANCH=$(git symbolic-ref --short HEAD) && echo Currently on $CURRENTBRANCH - switching to $1 && git checkout $1 && git merge origin/$1 && echo Going back to $CURRENTBRANCH && git checkout "$CURRENTBRANCH" ``` I use it as follows (for example): ``` git catchup new_design ``` This code results in (for example): ``` Currently on integration Switched to branch 'new_design' Your branch is behind 'origin/new_design' by 1 commit, and can be fast-forwarded. Updating c82f7db..51eea8a Fast-forward themes/theme1/css/styles.less | 17 +++++++++++++++++ themes/theme1/js/app.js | 6 +++--- 2 files changed, 20 insertions(+), 3 deletions(-) Going back to integration error: pathspec 'new_design' did not match any file(s) known to git. ``` I have tried the last command in the alias both with and without the double-quotes, with the same result. Anyone know how to resolve that error at the end? For those who might suggest using `git pull`, it doesn't resolve my problem, and would require entering my password. This alias is to be used if I have recently used `git fetch`, and have no need to go back to the remote repo. I am running git bash on Windows 7, fyi.

Original source

Related problems