Re: RFC: grafts generalised
From: Dmitry Potapov <hidden>
Date: 2016-06-15 22:44:52
On Wed, Jul 2, 2008 at 10:10 PM, Stephen R. van den Berg [off-list ref] wrote:
Dmitry Potapov wrote:quoted
On second thought, it may be not necessary. You can extract an old commit object, edit it, put it into Git with a new SHA1, and then use the graft file to replace all references from an old to a new one. And you will be able to see changes immediately in gitk.Hmmmm, interesting thought. That just might solve my problem.
This script is just a prove of the concept. It seems to work for me, but I don't really tested it. =========================================== #!/bin/bash set -e # creating some silly repo git init # creating some history for ((i=0; $i<10; i++)) do echo foo$i > foo$i git add foo$i git commit -m "add foo$i" done # run gitk to see it gitk --all & # dump all graft info to text file git rev-list --parents --all > .git/info/grafts.tmp mv .git/info/grafts.tmp .git/info/grafts # please choose what commit you want to edit echo while read -p 'Edit commit: ' C do C=$(git rev-parse "$C") || continue # edit commit C git cat-file commit $C > .git/COMMIT_OBJ vim .git/COMMIT_OBJ C2=$(git hash-object -w -t commit .git/COMMIT_OBJ) # replace all references from C to C2 sed -e 's/\<'$C'\>/'$C2'/g' < .git/info/grafts > .git/info/grafts.tmp mv .git/info/grafts.tmp .git/info/grafts done =========================================== Dmitry