Add to ~/.profile:
# git pull request processing
pull() {
if [ "x$1" = "x" ]; then
echo No branch or PRs specified
echo either:
echo pull branch-name 111 222 333
echo or:
echo pull 111 222 333
echo where 111, 222, 333 are the PR \#s
echo and branch-name is the target branch for the merge
return
fi
BRANCH=master
HAS_BRANCH=0
if [[ $1 =~ ^[0-9]+$ ]]; then
echo No branch specfied, defaulting to master
HAS_BRANCH=0
else
BRANCH=$1
HAS_BRANCH=1
fi
echo Branch is $BRANCH
cmd="git fetch upstream $BRANCH"
FIRST=1
for var in "$@"
do
if [ $HAS_BRANCH = "1" ] && [ $FIRST = "1" ] ; then
FIRST=0
else
cmd="$cmd pull/$var/head:pullRequest$var"
fi
done
$cmd
git branch -D pulls-$BRANCH
git checkout $BRANCH
git rebase upstream/$BRANCH
git checkout -b pulls-$BRANCH
for var in "$@"
do
git checkout pullRequest$var
git rebase pulls-$BRANCH
git checkout pulls-$BRANCH
git merge pullRequest$var
git branch -D pullRequest$var
done
}
When merging to master, I just do pull 123 234 345 from within the clone of the repo in question. If
everything rebases properly, the results are in a new branch called pulls-master. I then
git reset --hard master-ignore to that and force push.
When the pull requests are targetting another branch, say 3.0.x pass in the branch name first pull 3.0.x 234 345 567.
This ends up in a new pulls-3.0.x branch.