* 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).