Skip to content
  • Thomas Rast's avatar
    Implement 'git checkout --patch' · 4f353658
    Thomas Rast authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    This introduces a --patch mode for git-checkout.  In the index usage
    
      git checkout --patch -- [files...]
    
    it lets the user discard edits from the <files> at the granularity of
    hunks (by selecting hunks from 'git diff' and then reverse applying
    them to the worktree).
    
    We also accept a revision argument.  In the case
    
      git checkout --patch HEAD -- [files...]
    
    we offer hunks from the difference between HEAD and the worktree, and
    reverse applies them to both index and worktree, allowing you to
    discard staged changes completely.  In the non-HEAD usage
    
      git checkout --patch <revision> -- [files...]
    
    it offers hunks from the difference between the worktree and
    <revision>.  The chosen hunks are then applied to both index and
    worktree.
    
    The application to worktree and index is done "atomically" in the
    sense that we first check if the patch applies to the index (it should
    always apply to the worktree).  If it does not, we give the user a
    choice to either abort or apply to the worktree anyway.
    
    Signed-off-by: default avatarThomas Rast <trast@student.ethz.ch>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    4f353658