• D
    Build in checkout · 782c2d65
    Daniel Barkalow 提交于
    The only differences in behavior should be:
    
     - git checkout -m with non-trivial merging won't print out
       merge-recursive messages (see the change in t7201-co.sh)
    
     - git checkout -- paths... will give a sensible error message if
       HEAD is invalid as a commit.
    
     - some intermediate states which were written to disk in the shell
       version (in particular, index states) are only kept in memory in
       this version, and therefore these can no longer be revealed by
       later write operations becoming impossible.
    
     - when we change branches, we discard MERGE_MSG, SQUASH_MSG, and
       rr-cache/MERGE_RR, like reset always has.
    
    I'm not 100% sure I got the merge recursive setup exactly right; the
    base for a non-trivial merge in the shell code doesn't seem
    theoretically justified to me, but I tried to match it anyway, and the
    tests all pass this way.
    
    Other than these items, the results should be identical to the shell
    version, so far as I can tell.
    
    [jc: squashed lock-file fix from Dscho in]
    Signed-off-by: NDaniel Barkalow <barkalow@iabervon.org>
    Signed-off-by: NJohannes Schindelin <johannes.schindelin@gmx.de>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    782c2d65
git.c 12.7 KB