git-reset: refuse to do hard reset in a bare repository
It makes no sense since there is no working tree. A soft reset should be fine, though. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									02e5ba4ae6
								
							
						
					
					
						commit
						49b9362fd3
					
				|  | @ -244,6 +244,9 @@ int cmd_reset(int argc, const char **argv, const char *prefix) | ||||||
| 	if (reset_type == NONE) | 	if (reset_type == NONE) | ||||||
| 		reset_type = MIXED; /* by default */ | 		reset_type = MIXED; /* by default */ | ||||||
|  |  | ||||||
|  | 	if (reset_type == HARD && is_bare_repository()) | ||||||
|  | 		die("hard reset makes no sense in a bare repository"); | ||||||
|  |  | ||||||
| 	/* Soft reset does not touch the index file nor the working tree | 	/* Soft reset does not touch the index file nor the working tree | ||||||
| 	 * at all, but requires them in a good order.  Other resets reset | 	 * at all, but requires them in a good order.  Other resets reset | ||||||
| 	 * the index file to the tree object we are switching to. */ | 	 * the index file to the tree object we are switching to. */ | ||||||
|  |  | ||||||
|  | @ -0,0 +1,28 @@ | ||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | test_description='git-reset in a bare repository' | ||||||
|  | . ./test-lib.sh | ||||||
|  |  | ||||||
|  | test_expect_success 'setup non-bare' ' | ||||||
|  | 	echo one >file && | ||||||
|  | 	git add file && | ||||||
|  | 	git commit -m one && | ||||||
|  | 	echo two >file && | ||||||
|  | 	git commit -a -m two | ||||||
|  | ' | ||||||
|  |  | ||||||
|  | test_expect_success 'setup bare' ' | ||||||
|  | 	git clone --bare . bare.git && | ||||||
|  | 	cd bare.git | ||||||
|  | ' | ||||||
|  |  | ||||||
|  | test_expect_success 'hard reset is not allowed' ' | ||||||
|  | 	! git reset --hard HEAD^ | ||||||
|  | ' | ||||||
|  |  | ||||||
|  | test_expect_success 'soft reset is allowed' ' | ||||||
|  | 	git reset --soft HEAD^ && | ||||||
|  | 	test "`git show --pretty=format:%s | head -n 1`" = "one" | ||||||
|  | ' | ||||||
|  |  | ||||||
|  | test_done | ||||||
		Loading…
	
		Reference in New Issue
	
	 Jeff King
						Jeff King