714fff2aa8
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?
53 lines
1001 B
Bash
Executable File
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
|