• T
    checkout: introduce --{,no-}overlay option · 091e04bc
    Thomas Gummerer 提交于
    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: NJunio C Hamano <gitster@pobox.com>
    Signed-off-by: NThomas Gummerer <t.gummerer@gmail.com>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    091e04bc
git-checkout.txt 19.0 KB