зеркало из https://github.com/microsoft/git.git
reset: parse rev as tree-ish in patch mode
Since2f328c3d
("reset $sha1 $pathspec: require $sha1 only to be treeish", 2013-01-14), we allowed "git reset $object -- $path" to reset individual paths that match the pathspec to take the blob from a tree object, not necessarily a commit, while the form to reset the tip of the current branch to some other commit still must be given a commit. Like resetting with paths, "git reset --patch" does not update HEAD, and need not require a commit. The path-filtered form, "git reset --patch $object -- $pathspec", has accepted a tree-ish since2f328c3d
. "git reset --patch" is documented as accepting a <tree-ish> sincebf44142f
("reset: update documentation to require only tree-ish with paths", 2013-01-16). Documentation changes are not required. Loosen the restriction that requires a commit for the unfiltered "git reset --patch $object". Signed-off-by: Nika Layzell <nika@thelayzells.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
d9f6f3b619
Коммит
0a8e3036a3
|
@ -320,7 +320,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
|
|||
if (unborn) {
|
||||
/* reset on unborn branch: treat as reset to empty tree */
|
||||
oidcpy(&oid, the_hash_algo->empty_tree);
|
||||
} else if (!pathspec.nr) {
|
||||
} else if (!pathspec.nr && !patch_mode) {
|
||||
struct commit *commit;
|
||||
if (get_oid_committish(rev, &oid))
|
||||
die(_("Failed to resolve '%s' as a valid revision."), rev);
|
||||
|
|
|
@ -38,6 +38,27 @@ test_expect_success PERL 'git reset -p HEAD^' '
|
|||
test_i18ngrep "Apply" output
|
||||
'
|
||||
|
||||
test_expect_success PERL 'git reset -p HEAD^^{tree}' '
|
||||
test_write_lines n y | git reset -p HEAD^^{tree} >output &&
|
||||
verify_state dir/foo work parent &&
|
||||
verify_saved_state bar &&
|
||||
test_i18ngrep "Apply" output
|
||||
'
|
||||
|
||||
test_expect_success PERL 'git reset -p HEAD^:dir/foo (blob fails)' '
|
||||
set_and_save_state dir/foo work work &&
|
||||
test_must_fail git reset -p HEAD^:dir/foo &&
|
||||
verify_saved_state dir/foo &&
|
||||
verify_saved_state bar
|
||||
'
|
||||
|
||||
test_expect_success PERL 'git reset -p aaaaaaaa (unknown fails)' '
|
||||
set_and_save_state dir/foo work work &&
|
||||
test_must_fail git reset -p aaaaaaaa &&
|
||||
verify_saved_state dir/foo &&
|
||||
verify_saved_state bar
|
||||
'
|
||||
|
||||
# The idea in the rest is that bar sorts first, so we always say 'y'
|
||||
# first and if the path limiter fails it'll apply to bar instead of
|
||||
# dir/foo. There's always an extra 'n' to reject edits to dir/foo in
|
||||
|
|
Загрузка…
Ссылка в новой задаче