Skip to content

Instantly share code, notes, and snippets.

@chernjie
Last active August 29, 2015 14:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chernjie/a8c9b55aeb1ec9ae1dfc to your computer and use it in GitHub Desktop.
Save chernjie/a8c9b55aeb1ec9ae1dfc to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
_usage () {
echo Cherry pick merge commits >&2
exit 1
}
_error () {
echo "$@" >&2
exit 1
}
getCommitMessage () {
git log -1 $1 --format="%B"
}
getCommitAuthor () {
git log -1 $1 --format="%an"
}
getCommitTimestamp () {
git log -1 $1 --format="%ad"
}
getMergedHeads () {
git show $1 | grep ^Merge -m1 | cut -d: -f2- | xargs -n1
}
findMergePoint () {
local merges=$(getMergedHeads $@)
for i in $merges
do
git log -1 $i --format="%h %s %an" >&2
done
select mergePoint in $merges "Cancel"; do
case $mergePoint in
Cancel ) _error "Aborted";;
* ) break;;
esac
done
}
main () {
findMergePoint $@
git merge $mergePoint -m "$(getCommitMessage $@)" &&
git commit \
--author "$(getCommitAuthor $@)" \
-m "$(getCommitMessage $@)" \
--date "$(getCommitTimestamp $@)" \
--amend
}
case $1 in
'') _usage ;;
*) main $@ ;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment