Add "get squash" command.
This commit is contained in:
parent
afba5f9252
commit
fba79b8894
1 changed files with 31 additions and 0 deletions
31
bin/get
31
bin/get
|
|
@ -201,4 +201,35 @@ echo Cloning $url
|
||||||
git clone "$url"
|
git clone "$url"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
squash)
|
||||||
|
# I implement squash a little differently than most.
|
||||||
|
# 1) Rebase squashing aggregates commit messages, which is usually
|
||||||
|
# counter to the purpose of squashing, which is to hide the fact
|
||||||
|
# that a change took several real commits.
|
||||||
|
# 2) Rebasing also deletes commits by default, which is problematic
|
||||||
|
# if you have pushed those commits to the server already.
|
||||||
|
# This solution is more gentle in that it creates a new commit with
|
||||||
|
# a new commit message containing the same changes as the old
|
||||||
|
# series of commits, but doesn't delete the old commits, leaving them
|
||||||
|
# as a branch.
|
||||||
|
# TODO: check argument is numeric
|
||||||
|
if [[ "$2" =~ ^[0-9]+$ ]]
|
||||||
|
then
|
||||||
|
echo "Squash the following commits together:"
|
||||||
|
git log --abbrev-commit \
|
||||||
|
--color \
|
||||||
|
--graph \
|
||||||
|
--ancestry-path \
|
||||||
|
--pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' \
|
||||||
|
HEAD...HEAD~$2
|
||||||
|
read -p 'Message: ' msg
|
||||||
|
git stash save --include-untracked --quiet 'get-squash autostash'
|
||||||
|
git reset --soft HEAD~$(($2+1))
|
||||||
|
git commit -m "$msg"
|
||||||
|
git stash pop --quiet
|
||||||
|
else
|
||||||
|
echo "The second argument is expected to be an integer."
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
esac
|
esac
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue