what if you want to throw away work in a branch even if it's not merged? doesn't the safety check prevent that? Junio C Hamano wrote: > The new flag '-d' lets you delete a branch. For safety, it does not > lets you delete the branch you are currently on, nor a branch that > has been fully merged into your current branch. > > The credit for the safety check idea goes to Daniel Barkalow. > > Signed-off-by: Junio C Hamano <junkio@cox.net> > > --- > > git-branch.sh | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++------ > 1 files changed, 54 insertions(+), 6 deletions(-) > > 6a714989f83ccb93188dc37791da8a0f2e32cabe > diff --git a/git-branch.sh b/git-branch.sh > --- 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)"' [<branchname> [start-point]] > + echo >&2 "usage: $(basename $0)"' [-d <branch>] | [<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,6 +12,59 @@ If two arguments, create a new branch <b > exit 1 > } > > +delete_branch () { > + option="$1" branch_name="$2" > + headref=$(readlink "$GIT_DIR/HEAD" | sed -e 's|^refs/heads/||') > + case ",$headref," in > + ",$branch_name,") > + die "Cannot delete the branch you are on." ;; > + ,,) > + die "What branch are you on anyway?" ;; > + esac > + branch=$(cat "$GIT_DIR/refs/heads/$branch_name") && > + branch=$(git-rev-parse --verify "$branch^0") || > + die "Seriously, what branch are you talking about?" > + case "$option" in > + -D) > + ;; > + *) > + mbs=$(git-merge-base -a "$branch" HEAD | tr '\012' ' ') > + case " $mbs " in > + *' '$branch' '*) > + # the merge base of branch and HEAD contains branch -- > + # which means that the HEAD contains everything in the HEAD. > + ;; > + *) > + echo >&2 "The branch '$branch_name' is not a strict subset of your current HEAD. > +If you are sure you want to delete it, run 'git branch -D $branch_name'." > + exit 1 > + ;; > + esac > + ;; > + esac > + rm -f "$GIT_DIR/refs/heads/$branch_name" > + echo "Deleted branch $branch_name." > + exit 0 > +} > + > +while case "$#,$1" in 0,*) break ;; *,-*) ;; *) break ;; esac > +do > + case "$1" in > + -d | -D) > + delete_branch "$1" "$2" > + exit > + ;; > + --) > + shift > + break > + ;; > + -*) > + usage > + ;; > + esac > + shift > +done > + > case "$#" in > 0) > headref=$(readlink "$GIT_DIR/HEAD" | sed -e 's|^refs/heads/||') > @@ -36,11 +89,6 @@ case "$#" in > esac > branchname="$1" > > -case "$branchname" in > --*) > - usage;; > -esac > - > rev=$(git-rev-parse --verify "$head") || exit > > [ -e "$GIT_DIR/refs/heads/$branchname" ] && die "$branchname already exists" > - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
This archive was generated by hypermail 2.1.8 : 2005-09-15 00:55:23 EST