From: Christian Couder Date: Fri, 23 May 2014 06:39:54 GMT Subject: Re: [RFC/PATCH] replace: add --graft option Message-ID: <20140523.083954.56876133762506067.chriscool@tuxfamily.org> In-Reply-To: <5379D1EF.8040203@alum.mit.edu> From: Michael Haggerty > On 05/18/2014 08:29 PM, Christian Couder wrote: >> The usage string for this option is: >> >> git replace [-f] --graft [...] >> >> First we create a new commit that is the same as >> except that its parents are [...] >> >> Then we create a replace ref that replace with >> the commit we just created. >> >> With this new option, it should be straightforward to >> convert grafts to replace refs, with something like: >> >> cat .git/info/grafts | while read line >> do git replace --graft $line; done > > I love the functionality; I think it's a great step towards making > grafts obsolete. > > I haven't worked with Git's object reading/writing code much, but it > surprised me that you are editing the commit object basically as a > string, using hard-coded length constants and stuff. It seems > error-prone, and we already have a commit parser. > > Would it be possible to program this at a higher layer of abstraction > based on the commit object produced by the existing commit parser? > E.g., edit the object it produces, and write the result? Or create a > new commit object out of the parsed commit object and write that? I tried to program this at a higher layer of abstraction first, but it was not easy to properly write the new commit. > It's great that you're working on this! Thanks, Christian.