diff options
author | Junio C Hamano <junkio@cox.net> | 2005-11-11 11:12:50 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2005-11-18 15:53:12 -0800 |
commit | eb777612f085fc42afd0ac6986ed8062f8b75cbd (patch) | |
tree | 1d09a7c3017c6aa588fe1799f8ef133a49e0a001 /git-branch.sh | |
parent | f9039f30d56e3815eaab870d8b19c7b94aded8aa (diff) | |
download | git-eb777612f085fc42afd0ac6986ed8062f8b75cbd.tar.gz git-eb777612f085fc42afd0ac6986ed8062f8b75cbd.tar.xz |
git-branch: -f to forcibly reset branch head.
A new usage, 'git-branch -f branch [start]', resets the branch head at
start (or current head). Should be considered a dangerous operation,
but if you are like me to keep rewinding branches it is handy.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'git-branch.sh')
-rwxr-xr-x | git-branch.sh | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/git-branch.sh b/git-branch.sh index 11d52fd78..2594518e9 100755 --- a/git-branch.sh +++ b/git-branch.sh @@ -3,7 +3,7 @@ . git-sh-setup || die "Not a git archive" usage () { - echo >&2 "usage: $(basename $0)"' [-d <branch>] | [<branch> [start-point]] + echo >&2 "usage: $(basename $0)"' [-d <branch>] | [[-f] <branch> [start-point]] If no arguments, show available branches and mark current branch with a star. If one argument, create a new branch <branchname> based off of current HEAD. @@ -12,11 +12,12 @@ If two arguments, create a new branch <branchname> based off of <start-point>. exit 1 } +headref=$(GIT_DIR="$GIT_DIR" git-symbolic-ref HEAD | + sed -e 's|^refs/heads/||') + delete_branch () { option="$1" shift - headref=$(GIT_DIR="$GIT_DIR" git-symbolic-ref HEAD | - sed -e 's|^refs/heads/||') for branch_name do case ",$headref," in @@ -52,6 +53,7 @@ delete_branch () { exit 0 } +force= while case "$#,$1" in 0,*) break ;; *,-*) ;; *) break ;; esac do case "$1" in @@ -59,6 +61,9 @@ do delete_branch "$@" exit ;; + -f) + force="$1" + ;; --) shift break @@ -72,8 +77,6 @@ done case "$#" in 0) - headref=$(GIT_DIR="$GIT_DIR" git-symbolic-ref HEAD | - sed -e 's|^refs/heads/||') git-rev-parse --symbolic --all | sed -ne 's|^refs/heads/||p' | sort | @@ -97,10 +100,18 @@ branchname="$1" rev=$(git-rev-parse --verify "$head") || exit -[ -e "$GIT_DIR/refs/heads/$branchname" ] && - die "$branchname already exists." git-check-ref-format "heads/$branchname" || die "we do not like '$branchname' as a branch name." +if [ -e "$GIT_DIR/refs/heads/$branchname" ] +then + if test '' = "$force" + then + die "$branchname already exists." + elif test "$branchname" = "$headref" + then + die "cannot force-update the current branch." + fi +fi git update-ref "refs/heads/$branchname" $rev |