问题
I have a Git alias that expands to:
git log --graph --oneline --all --decorate
According to man git log
there are a couple of suspicious options: --not
and --branches
; but I can't make it work properly.
How should I edit that to hide the stashes?
FYI: as per the accepted question and comment my .gitconfig
alias now looks like this:
[alias]
l = log --branches --remotes --tags --graph --oneline --decorate --notes HEAD
回答1:
Instead of doing --all
and then trying to filter out the stashes, don't ever include them in the first place:
git log --branches --remotes --tags --graph --oneline --decorate
The main problem that arises from trying to filter them out afterwards is that if the stash is the latest commit on that branch (because even though it's not the head
of the branch, it's still the most recent descendant of it), it can actually filter out the entire branch from the log, which isn't what you want.
回答2:
My alias:
[alias]
l = log --oneline --decorate --graph --exclude=refs/stash
In this case you will be able to use these forms without showing the stash:
git l
for the current branchgit l feature234
for a specific branchgit l --all
for the overall history
From the manual:
--exclude=<glob pattern>
Do not include refs matching that the next --all, --branches, --tags, --remotes, or --glob would otherwise consider.
回答3:
Note that Andrew's answer wouldn't work for hiding StGit1.) branches <branch>.stgit
(from StGit version 0.15) which otherwise litter the output making it unusable.
Currently I use the following solution:
$ git log --graph --oneline --decorate \
$(git for-each-ref --format="%(refname)" refs/heads/ refs/remotes/ |
grep -v "\.stgit$")
1.) StGit ("Stacked Git") provides Quilt/mq--like functionality to Git (i.e. pushing/popping patches to/from a stack).
来源:https://stackoverflow.com/questions/9437182/git-show-all-branches-but-not-stashes-in-log