Merge branch 'jk/maint-1.6.3-checkout-unborn' into maint
* jk/maint-1.6.3-checkout-unborn: checkout: do not imply "-f" on unborn branches
This commit is contained in:
commit
bd91890c62
@ -402,7 +402,9 @@ static int merge_working_tree(struct checkout_opts *opts,
|
|||||||
topts.dir = xcalloc(1, sizeof(*topts.dir));
|
topts.dir = xcalloc(1, sizeof(*topts.dir));
|
||||||
topts.dir->flags |= DIR_SHOW_IGNORED;
|
topts.dir->flags |= DIR_SHOW_IGNORED;
|
||||||
topts.dir->exclude_per_dir = ".gitignore";
|
topts.dir->exclude_per_dir = ".gitignore";
|
||||||
tree = parse_tree_indirect(old->commit->object.sha1);
|
tree = parse_tree_indirect(old->commit ?
|
||||||
|
old->commit->object.sha1 :
|
||||||
|
(unsigned char *)EMPTY_TREE_SHA1_BIN);
|
||||||
init_tree_desc(&trees[0], tree->buffer, tree->size);
|
init_tree_desc(&trees[0], tree->buffer, tree->size);
|
||||||
tree = parse_tree_indirect(new->commit->object.sha1);
|
tree = parse_tree_indirect(new->commit->object.sha1);
|
||||||
init_tree_desc(&trees[1], tree->buffer, tree->size);
|
init_tree_desc(&trees[1], tree->buffer, tree->size);
|
||||||
@ -541,14 +543,6 @@ static int switch_branches(struct checkout_opts *opts, struct branch_info *new)
|
|||||||
parse_commit(new->commit);
|
parse_commit(new->commit);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!old.commit && !opts->force) {
|
|
||||||
if (!opts->quiet) {
|
|
||||||
warning("You appear to be on a branch yet to be born.");
|
|
||||||
warning("Forcing checkout of %s.", new->name);
|
|
||||||
}
|
|
||||||
opts->force = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = merge_working_tree(opts, &old, new);
|
ret = merge_working_tree(opts, &old, new);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
40
t/t2015-checkout-unborn.sh
Executable file
40
t/t2015-checkout-unborn.sh
Executable file
@ -0,0 +1,40 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
test_description='checkout from unborn branch protects contents'
|
||||||
|
. ./test-lib.sh
|
||||||
|
|
||||||
|
test_expect_success 'setup' '
|
||||||
|
mkdir parent &&
|
||||||
|
(cd parent &&
|
||||||
|
git init &&
|
||||||
|
echo content >file &&
|
||||||
|
git add file &&
|
||||||
|
git commit -m base
|
||||||
|
) &&
|
||||||
|
git fetch parent master:origin
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'checkout from unborn preserves untracked files' '
|
||||||
|
echo precious >expect &&
|
||||||
|
echo precious >file &&
|
||||||
|
test_must_fail git checkout -b new origin &&
|
||||||
|
test_cmp expect file
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'checkout from unborn preserves index contents' '
|
||||||
|
echo precious >expect &&
|
||||||
|
echo precious >file &&
|
||||||
|
git add file &&
|
||||||
|
test_must_fail git checkout -b new origin &&
|
||||||
|
test_cmp expect file &&
|
||||||
|
git show :file >file &&
|
||||||
|
test_cmp expect file
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'checkout from unborn merges identical index contents' '
|
||||||
|
echo content >file &&
|
||||||
|
git add file &&
|
||||||
|
git checkout -b new origin
|
||||||
|
'
|
||||||
|
|
||||||
|
test_done
|
Loading…
x
Reference in New Issue
Block a user