diff options
| -rw-r--r-- | reachable.c | 3 | ||||
| -rwxr-xr-x | t/t5304-prune.sh | 22 | 
2 files changed, 25 insertions, 0 deletions
| diff --git a/reachable.c b/reachable.c index 654a8c58d6..6f6835bf27 100644 --- a/reachable.c +++ b/reachable.c @@ -229,6 +229,9 @@ void mark_reachable_objects(struct rev_info *revs, int mark_reflog,  	/* Add all external refs */  	for_each_ref(add_one_ref, revs); +	/* detached HEAD is not included in the list above */ +	head_ref(add_one_ref, revs); +  	/* Add all reflog info */  	if (mark_reflog)  		for_each_reflog(add_one_reflog, revs); diff --git a/t/t5304-prune.sh b/t/t5304-prune.sh index 377d3d3899..01c6a3fc1d 100755 --- a/t/t5304-prune.sh +++ b/t/t5304-prune.sh @@ -104,6 +104,28 @@ test_expect_success 'prune: prune unreachable heads' '  ' +test_expect_success 'prune: do not prune detached HEAD with no reflog' ' + +	git checkout --detach --quiet && +	git commit --allow-empty -m "detached commit" && +	# verify that there is no reflogs +	# (should be removed and disabled by previous test) +	test ! -e .git/logs && +	git prune -n >prune_actual && +	: >prune_expected && +	test_cmp prune_actual prune_expected + +' + +test_expect_success 'prune: prune former HEAD after checking out branch' ' + +	head_sha1=$(git rev-parse HEAD) && +	git checkout --quiet master && +	git prune -v >prune_actual && +	grep "$head_sha1" prune_actual + +' +  test_expect_success 'prune: do not prune heads listed as an argument' '  	: > file2 && | 
