People don’t think of the unix command line as a UI, but it is and it has its own idioms. Nearly all of them are conventions, not hard and fast rules. Because of this sometimes things take on a few meanings.
The first meaning of the dash, "-"
is to mark a command line flag
like ls -l
or mkdir -p
. It comes up less often, but another
pretty well known meaning is stdout
/stdin
. The most common use
here is with tar: ssh host 'tar cf - dir' | tar xf -
is a pretty
common way to copy a directory.
In neither case is the "-"
actually special. Convention and
libraries implementing that convention are what make those things
worse. The low-level open(2)
call will try and open a file named
"-"
if you give it that as a file name argument.
The third, far less known meaning of "-"
is “the last one.” It
exists, afaik, in only one standard unix command: cd -
. It’s a
way to pop back and forth between two directories. If you’re in
/foo
and you type cd /bar
you can now just type cd -
to bounce
back and forth between them.
It turns out the git developers noticed this and have made it so
git checkout
and git merge
both understand this. So this is
not an uncommon workflow:
|
|
This way you can really quickly make a test branch to try things out and see if they work and once you’re happy with it just do those last two commands to get those back into the main branch you’re working on.
Note that the apparent originator of this idiom, cd -
, works in a
per-process way. Each shell session has a different view of dirs
to pop back and forth between. This idiom in git is per repo.
Multiple shell sessions in the same repo can toggle back and forth
between branches.