Pipes in a Git alias?
GitBashUnixGit Problem Overview
I work on feature branches that have annoying big names, so I often end up grepping my current branch name when I need to push up to the feature branch from my local feature branch, like so:
git branch | grep '*' | sed 's/* //' | xargs git push origin
This works fine. I want to make this an alias, so I did this in ~/.gitconfig
:
[alias]
pushcur = branch | grep '*' | sed 's/* //' | xargs git push origin
Now, when I run git pushcur
, I get the following error:
usage: git branch [options] [-r | -a] [--merged | --no-merged]
Leading me to believe that the alias is not properly parsing the pipes. Is there something else I should do to achieve the desired alias?
Git Solutions
Solution 1 - Git
I don't think you can, but you can prefix it with an !
to treat the command as a new shell command
[alias]
pushcur = ! git branch | grep '*' …
Solution 2 - Git
I typically make small git-
scripts and put them in a directory that's in my path (~/.local/bin
). Check out git-extras for a bunch of good examples.
Solution 3 - Git
A simple workaround is to add it as shell alias.
Here is an example:
alias grf="git rebase -i $(git merge-base --fork-point master)"
(rebase on the fork commit of current branch and master interactively)
For bash, add it to ~/.bashrc
, then you can simply use grf
.