* deleting a branch @ 2005-09-13 15:39 Chuck Lever 2005-09-13 16:05 ` Junio C Hamano 2005-09-14 8:46 ` [PATCH] git-branch -d <branch>: delete unused branch Junio C Hamano 0 siblings, 2 replies; 6+ messages in thread From: Chuck Lever @ 2005-09-13 15:39 UTC (permalink / raw) To: git [-- Attachment #1: Type: text/plain, Size: 135 bytes --] a couple of newbie questions. 1. how do i delete a branch? 2. is there a conventional place where branch description files reside? [-- Attachment #2: cel.vcf --] [-- Type: text/x-vcard, Size: 439 bytes --] begin:vcard fn:Chuck Lever n:Lever;Charles org:Network Appliance, Incorporated;Linux NFS Client Development adr:535 West William Street, Suite 3100;;Center for Information Technology Integration;Ann Arbor;MI;48103-4943;USA email;internet:cel@citi.umich.edu title:Member of Technical Staff tel;work:+1 734 763 4415 tel;fax:+1 734 763 4434 tel;home:+1 734 668 1089 x-mozilla-html:FALSE url:http://www.monkey.org/~cel/ version:2.1 end:vcard ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: deleting a branch 2005-09-13 15:39 deleting a branch Chuck Lever @ 2005-09-13 16:05 ` Junio C Hamano 2005-09-13 16:23 ` Daniel Barkalow 2005-09-14 8:46 ` [PATCH] git-branch -d <branch>: delete unused branch Junio C Hamano 1 sibling, 1 reply; 6+ messages in thread From: Junio C Hamano @ 2005-09-13 16:05 UTC (permalink / raw) To: cel; +Cc: git Chuck Lever <cel@citi.umich.edu> writes: > a couple of newbie questions. > > 1. how do i delete a branch? "rm -f .git/refs/heads/no-longer-needed". Make sure your working tree is not on that branch (i.e. .git/HEAD should not be pointing at it). I have not introduced "git branch -d no-longer-needed" because I think that should do a bit more than "rm -f". For example: - making sure you are not on that branch (obvious), - check if all changes on that branch are included in the master branch or some other branch (easy if we hardcode "master"; checking all other branches might be nicer but expensive). - otherwise tell the user this and that changes will be forever lost and get a confirmation before removing. > 2. is there a conventional place where branch description files reside? No, but somebody proposed a convention a couple of days ago. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: deleting a branch 2005-09-13 16:05 ` Junio C Hamano @ 2005-09-13 16:23 ` Daniel Barkalow 0 siblings, 0 replies; 6+ messages in thread From: Daniel Barkalow @ 2005-09-13 16:23 UTC (permalink / raw) To: Junio C Hamano; +Cc: cel, git On Tue, 13 Sep 2005, Junio C Hamano wrote: > "rm -f .git/refs/heads/no-longer-needed". Make sure your > working tree is not on that branch (i.e. .git/HEAD should not be > pointing at it). > > I have not introduced "git branch -d no-longer-needed" because > I think that should do a bit more than "rm -f". For example: > > - making sure you are not on that branch (obvious), > > - check if all changes on that branch are included in the > master branch or some other branch (easy if we hardcode "master"; > checking all other branches might be nicer but expensive). You could check HEAD. I think the most common cases would either be that you just created a branch from HEAD and changed your mind, or that you've just merged the branch into something. Other that that, I think the common case is that you've made patches, sent them off, and they were accepted. In the first two, you're probably on the branch that includes or matches the one you're deleting; on the third, we want user confirmation, since it's external to the system. -Daniel *This .sig left intentionally blank* ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH] git-branch -d <branch>: delete unused branch. 2005-09-13 15:39 deleting a branch Chuck Lever 2005-09-13 16:05 ` Junio C Hamano @ 2005-09-14 8:46 ` Junio C Hamano 2005-09-14 14:54 ` Chuck Lever 1 sibling, 1 reply; 6+ messages in thread From: Junio C Hamano @ 2005-09-14 8:46 UTC (permalink / raw) To: Chuck Lever; +Cc: git, Daniel Barkalow 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" ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] git-branch -d <branch>: delete unused branch. 2005-09-14 8:46 ` [PATCH] git-branch -d <branch>: delete unused branch Junio C Hamano @ 2005-09-14 14:54 ` Chuck Lever 2005-09-14 16:15 ` Junio C Hamano 0 siblings, 1 reply; 6+ messages in thread From: Chuck Lever @ 2005-09-14 14:54 UTC (permalink / raw) To: Junio C Hamano; +Cc: git, Daniel Barkalow [-- Attachment #1: Type: text/plain, Size: 2913 bytes --] 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" > [-- Attachment #2: cel.vcf --] [-- Type: text/x-vcard, Size: 439 bytes --] begin:vcard fn:Chuck Lever n:Lever;Charles org:Network Appliance, Incorporated;Linux NFS Client Development adr:535 West William Street, Suite 3100;;Center for Information Technology Integration;Ann Arbor;MI;48103-4943;USA email;internet:cel@citi.umich.edu title:Member of Technical Staff tel;work:+1 734 763 4415 tel;fax:+1 734 763 4434 tel;home:+1 734 668 1089 x-mozilla-html:FALSE url:http://www.monkey.org/~cel/ version:2.1 end:vcard ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] git-branch -d <branch>: delete unused branch. 2005-09-14 14:54 ` Chuck Lever @ 2005-09-14 16:15 ` Junio C Hamano 0 siblings, 0 replies; 6+ messages in thread From: Junio C Hamano @ 2005-09-14 16:15 UTC (permalink / raw) To: cel; +Cc: git, Daniel Barkalow Chuck Lever <cel@citi.umich.edu> writes: > what if you want to throw away work in a branch even if it's not merged? > doesn't the safety check prevent that? Yes. And you would get instructions on what to do from the command upon refusal. ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2005-09-14 16:15 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2005-09-13 15:39 deleting a branch Chuck Lever 2005-09-13 16:05 ` Junio C Hamano 2005-09-13 16:23 ` Daniel Barkalow 2005-09-14 8:46 ` [PATCH] git-branch -d <branch>: delete unused branch Junio C Hamano 2005-09-14 14:54 ` Chuck Lever 2005-09-14 16:15 ` Junio C Hamano
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).