#!/usr/bin/env bash # Copyright 2026 Hee-Suk Kim # SPDX-License-Identifier: GPL-3.0-only set -euo pipefail . lib.bash usage() { cat <] ${NAME} [-t ] -f ${NAME} -h Move HEAD to . By default, HEAD is detached at the resolved chain -t save HEAD to before switch -f HEAD follows after switch -h print this help EOF } symbolic= refname= while getopts hft: o; do case $o in h) usage; exit 0 ;; f) symbolic=true ;; t) refname="$OPTARG" ;; *) usage; exit 1 ;; esac done shift $((OPTIND - 1)) [[ $# -eq 1 ]] || { usage >&2; exit 1; } chain="$1" [[ -n $refname ]] && sib save "$refname" is_ref() { sib show-ref "$1" >/dev/null 2>&1 } if [[ -n $symbolic ]]; then is_ref "$chain" || die "-f set but $chain is not ref" sib symbolic-ref -m "switch to symbolic $chain" HEAD "$chain" echo "HEAD now followes $chain" >&2 else res=$(sib rev-parse "$chain" 2>/dev/null) || die "$chain is invalid" echo "switch to $chain ($(sib git rev-parse --short $res)) from $(sib git rev-parse --short HEAD)" >&2 sib update-ref -m "switch to $chain" --no-deref HEAD $res fi