1#!/bin/sh 2. git-sh-setup-script|| die "Not a git archive" 3 4old=$(git-rev-parse HEAD) 5new= 6force= 7branch= 8while["$#"!="0"];do 9 arg="$1" 10shift 11case"$arg"in 12"-f") 13 force=1 14;; 15*) 16rev=$(git-rev-parse --verify --revs-only "$arg^0")||exit 17if[-z"$rev"];then 18echo"unknown flag$arg" 19exit1 20fi 21if["$new"];then 22echo"Multiple revisions?" 23exit1 24fi 25 new="$rev" 26if[-f"$GIT_DIR/refs/heads/$arg"];then 27 branch="$arg" 28fi 29;; 30esac 31 i=$(($i+1)) 32done 33[-z"$new"] && new=$old 34 35if["$force"] 36then 37 git-read-tree --reset$new&& 38 git-checkout-cache -q -f -u -a 39else 40 git-read-tree -m -u$old $new 41fi 42 43# 44# Switch the HEAD pointer to the new branch if it we 45# checked out a branch head, and remove any potential 46# old MERGE_HEAD's (subsequent commits will clearly not 47# be based on them, since we re-set the index) 48# 49if["$?"-eq0];then 50["$branch"] &&ln-sf"refs/heads/$branch""$GIT_DIR/HEAD" 51rm-f"$GIT_DIR/MERGE_HEAD" 52fi