git-commit-vandalism/git-checkout-script
Linus Torvalds 714fff2aa8 Make "git checkout" verify that the argument refers to a commit
We still need to create a new branch if it didn't refer to an existing
branch, otherwise our HEAD will continue to point to something totally
different than what we just checked out.

I'll need to think about it.  Maybe only do it with "-f" and force it to
the "master" branch?
2005-07-11 18:32:30 -07:00

53 lines
1001 B
Bash
Executable File

#!/bin/sh
. git-sh-setup-script || die "Not a git archive"
old=$(git-rev-parse HEAD)
new=
force=
branch=
while [ "$#" != "0" ]; do
arg="$1"
shift
case "$arg" in
"-f")
force=1
;;
*)
rev=$(git-rev-parse --verify --revs-only "$arg^0") || exit
if [ -z "$rev" ]; then
echo "unknown flag $arg"
exit 1
fi
if [ "$new" ]; then
echo "Multiple revisions?"
exit 1
fi
new="$rev"
if [ -f "$GIT_DIR/refs/heads/$arg" ]; then
branch="$arg"
fi
;;
esac
i=$(($i+1))
done
[ -z "$new" ] && new=$old
if [ "$force" ]
then
git-read-tree --reset $new &&
git-checkout-cache -q -f -u -a
else
git-read-tree -m -u $old $new
fi
#
# Switch the HEAD pointer to the new branch if it we
# checked out a branch head, and remove any potential
# old MERGE_HEAD's (subsequent commits will clearly not
# be based on them, since we re-set the index)
#
if [ "$?" -eq 0 ]; then
[ "$branch" ] && ln -sf "refs/heads/$branch" "$GIT_DIR/HEAD"
rm -f "$GIT_DIR/MERGE_HEAD"
fi