Allow git-checkout when on a non-existant branch.
I've seen some users get into situtations where their HEAD symbolic-ref is pointing at a non-existant ref. (Sometimes this happens during clone when the remote repository lacks a 'master' branch.) If this happens the user is unable to use git-checkout to switch branches as there is no prior commit to merge from. So instead of giving the user low-level errors about how HEAD can't be resolved and how not a single revision was given change the type of checkout to be a force and go through with the user's request anyway. Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <junkio@cox.net>maint
							parent
							
								
									4a0641b7cf
								
							
						
					
					
						commit
						5a03e7f253
					
				|  | @ -4,8 +4,8 @@ USAGE='[-f] [-b <new_branch>] [-m] [<branch>] [<paths>...]' | |||
| SUBDIRECTORY_OK=Sometimes | ||||
| . git-sh-setup | ||||
|  | ||||
| old=$(git-rev-parse HEAD) | ||||
| old_name=HEAD | ||||
| old=$(git-rev-parse --verify $old_name 2>/dev/null) | ||||
| new= | ||||
| new_name= | ||||
| force= | ||||
|  | @ -139,6 +139,13 @@ fi | |||
| 	die "git checkout: to checkout the requested commit you need to specify  | ||||
|               a name for a new branch which is created and switched to" | ||||
|  | ||||
| if [ "X$old" = X ] | ||||
| then | ||||
| 	echo "warning: You do not appear to currently be on a branch." >&2 | ||||
| 	echo "warning: Forcing checkout of $new_name." >&2 | ||||
| 	force=1 | ||||
| fi | ||||
|  | ||||
| if [ "$force" ] | ||||
| then | ||||
|     git-read-tree --reset -u $new | ||||
|  |  | |||
|  | @ -31,6 +31,15 @@ test_expect_success setup ' | |||
| 	git checkout master | ||||
| ' | ||||
|  | ||||
| test_expect_success "checkout from non-existing branch" ' | ||||
|  | ||||
| 	git checkout -b delete-me master && | ||||
| 	rm .git/refs/heads/delete-me && | ||||
| 	test refs/heads/delete-me = "$(git symbolic-ref HEAD)" && | ||||
| 	git checkout master && | ||||
| 	test refs/heads/master = "$(git symbolic-ref HEAD)" | ||||
| ' | ||||
|  | ||||
| test_expect_success "checkout with dirty tree without -m" ' | ||||
|  | ||||
| 	fill 0 1 2 3 4 5 >one && | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Shawn Pearce
						Shawn Pearce