1
0
mirror of https://github.com/frebib/dotfiles.git synced 2024-06-14 12:57:23 +00:00

Compare commits

...

2 Commits

Author SHA1 Message Date
9331a74266
aliases: Fix gfrb/gfrbi with slash-delimited branches
Multi-part branch names would be incorrectly split on the last slash and
not the first, causing these aliases to do the wrong thing. These need
the remote name which is the first element. Everything after the first
slash is the branch name, not the last slash.

Signed-off-by: Joe Groocock <me@frebib.net>
2022-10-24 15:24:19 +00:00
cfbe6d6f0f
git: Allow git cleanmerged/defbranch to take args
These aliases now make zero assumptions about either branch or origin
names. They default to origin, and the primary branch is determined from
the refs/remotes/$remote/HEAD symbolic-ref, which will be pulled from
the remote if it's not known locally.
With these it is now possible to act on any remote/branch combination:

    # Get default branch for 'upstream' remote
    $ git defbranch upstream

    # Delete branches merged into the default branch of the 'upstream'
    # remote
    $ git cleanmerged upstream

    # Delete branches merged into the upstream/foo branch
    $ git cleanmerged upstream foo

Signed-off-by: Joe Groocock <me@frebib.net>
2022-10-24 14:51:42 +00:00
2 changed files with 19 additions and 4 deletions

View File

@ -139,8 +139,8 @@ alias grbc="grb --continue"
alias grbsk="grb --skip" alias grbsk="grb --skip"
alias grbsh="grb --show-current" alias grbsh="grb --show-current"
alias grbom="git rebase \"origin/\$(git defbranch)\"" alias grbom="git rebase \"origin/\$(git defbranch)\""
gfrb() { remote="${1%/*}"; git fetch "$remote" && git rebase "$@"; } gfrb() { remote="${1%%/*}"; git fetch "$remote" && git rebase "$@"; }
gfrbi() { remote="${1%/*}"; git fetch "$remote" && git rebase -i "$@"; } gfrbi() { remote="${1%%/*}"; git fetch "$remote" && git rebase -i "$@"; }
alias gam="git am" alias gam="git am"
alias gama="git am --abort" alias gama="git am --abort"

View File

@ -37,8 +37,23 @@
count = !echo $(pwd) && git rev-list HEAD --count count = !echo $(pwd) && git rev-list HEAD --count
unpushed = !git log --oneline @{u}..HEAD unpushed = !git log --oneline @{u}..HEAD
leaders = !git shortlog -s -n --all --no-merges leaders = !git shortlog -s -n --all --no-merges
defbranch = !git symbolic-ref refs/remotes/origin/HEAD | sed \"s@^refs/remotes/origin/@@\" defbranch = "!defbranch() { \
cleanmerged = !git branch --merged \"origin/$(git defbranch)\" | grep -ve \"^\\\\*\" -e \"^. $(git defbranch)$\" | xargs -r git branch -d r=\"${1:-origin}\"; \
{ \
git symbolic-ref \"refs/remotes/$r/HEAD\" || { \
git remote set-head \"$r\" -a >&2 && \
git symbolic-ref \"refs/remotes/$r/HEAD\"; \
}; \
} 2>/dev/null \
| sed \"s@^refs/remotes/$r/@@\"; \
}; defbranch"
cleanmerged = "!cleanmerged() { \
r=\"${1:-origin}\"; \
b=\"${2:-$(git defbranch \"$r\")}\"; \
git branch --merged \"$r/$b\" | \
grep -ve \"^\\\\*\" -e \"^. $b$\" | \
xargs -r git branch -d; \
}; cleanmerged"
[advice] [advice]
statusHints = false statusHints = false
pushUpdateRejected = false pushUpdateRejected = false