Merge branch 'jc/checkout-merge-base'

* jc/checkout-merge-base:
  rebase -i: teach --onto A...B syntax
  rebase: fix --onto A...B parsing and add tests
  "rebase --onto A...B" replays history on the merge base between A and B
  "checkout A...B" switches to the merge base between A and B
This commit is contained in:
Junio C Hamano
2010-01-13 12:31:13 -08:00
7 changed files with 222 additions and 5 deletions

View File

@ -495,6 +495,25 @@ get_saved_options () {
test -f "$DOTEST"/rebase-root && REBASE_ROOT=t
}
LF='
'
parse_onto () {
case "$1" in
*...*)
if left=${1%...*} right=${1#*...} &&
onto=$(git merge-base --all ${left:-HEAD} ${right:-HEAD})
then
case "$onto" in
?*"$LF"?* | '')
exit 1 ;;
esac
echo "$onto"
exit 0
fi
esac
git rev-parse --verify "$1^0"
}
while test $# != 0
do
case "$1" in
@ -602,7 +621,7 @@ first and then run 'git rebase --continue' again."
;;
--onto)
shift
ONTO=$(git rev-parse --verify "$1") ||
ONTO=$(parse_onto "$1") ||
die "Does not point to a valid commit: $1"
;;
--)