From: Jakub Narebski Date: Fri, 11 Dec 2009 01:33:18 GMT Subject: Re: How to selectively recreate merge state? Message-ID: <200912110233.18756.jnareb@gmail.com> In-Reply-To: <7vzl5q71rp.fsf@alter.siamese.dyndns.org> Dnia piątek 11. grudnia 2009 02:11, Junio C Hamano napisał: > Jakub Narebski writes: > > > --unresolve:: > > Restores the 'unmerged' or 'needs updating' state of a > > file during a merge if it was cleared by accident. > > > > Unless "git add foo" not only adds current contents of foo at stage 0, > > but also removes higher stages from index... > > By definition, adding anything at stage #0 is to remove higher stages. Hmmm... let's test it: $ git merge side-branch Auto-merging foo CONFLICT (content): Merge conflict in foo Automatic merge failed; fix conflicts and then commit the result. $ git ls-files --stage 100644 257cc5642cb1a054f08cc83f2d943e56fd3ebe99 1 foo 100644 3bd1f0e29744a1f32b08d5650e62e2e62afb177c 2 foo 100644 469a41eda5c8b45503a3bfc32ad6b5decc658132 3 foo $ $ git add foo $ git ls-files --stage 100644 a1b58d38ffa61e8e99b7cb95cdf540aedf2a96b3 0 foo Now let's test '--unresolve' option of git-update-index: $ git update-index --unresolve foo $ git ls-files --stage foo 100644 3bd1f0e29744a1f32b08d5650e62e2e62afb177c 2 foo 100644 469a41eda5c8b45503a3bfc32ad6b5decc658132 3 foo WTF? What happened to stage 1 (ancestor)? $ git checkout --conflict=merge foo error: path 'foo' does not have all three versions Let's recover it by hand: $ echo -e "100644 257cc5642cb1a054f08cc83f2d943e56fd3ebe99 1\tfoo" | git update-index --index-info $ git ls-files --stage foo 100644 257cc5642cb1a054f08cc83f2d943e56fd3ebe99 1 foo 100644 3bd1f0e29744a1f32b08d5650e62e2e62afb177c 2 foo 100644 469a41eda5c8b45503a3bfc32ad6b5decc658132 3 foo $ git checkout --conflict=merge foo -- Jakub Narebski Poland