]> git.ipfire.org Git - thirdparty/git.git/commit - t/t9902-completion.sh
checkout: introduce --{,no-}overlay option
authorThomas Gummerer <t.gummerer@gmail.com>
Tue, 8 Jan 2019 21:52:24 +0000 (21:52 +0000)
committerJunio C Hamano <gitster@pobox.com>
Tue, 8 Jan 2019 22:49:28 +0000 (14:49 -0800)
commit091e04bc8cbb0c89c8112c4784f02a44decc257e
treef72dbe0c834e26a998196a749795ea7b70df53d9
parentb7033e73b7b671670160726f62ac16d88161e3d0
checkout: introduce --{,no-}overlay option

Currently 'git checkout' is defined as an overlay operation, which
means that if in 'git checkout <tree-ish> -- [<pathspec>]' we have an
entry in the index that matches <pathspec>, but that doesn't exist in
<tree-ish>, that entry will not be removed from the index or the
working tree.

Introduce a new --{,no-}overlay option, which allows using 'git
checkout' in non-overlay mode, thus removing files from the working
tree if they do not exist in <tree-ish> but match <pathspec>.

Note that 'git checkout -p <tree-ish> -- [<pathspec>]' already works
this way, so no changes are needed for the patch mode.  We disallow
'git checkout --overlay -p' to avoid confusing users who would expect
to be able to force overlay mode in 'git checkout -p' this way.

Untracked files are not affected by this change, so 'git checkout
--no-overlay HEAD -- untracked' will not remove untracked from the
working tree.  This is so e.g. 'git checkout --no-overlay HEAD -- dir/'
doesn't delete all untracked files in dir/, but rather just resets the
state of files that are known to git.

Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-checkout.txt
builtin/checkout.c
t/t2025-checkout-no-overlay.sh [new file with mode: 0755]
t/t9902-completion.sh