From: Björn Steinbrink Date: Mon, 02 Nov 2009 15:34:28 GMT Subject: Re: Binary files in a linear repository Message-ID: <20091102153428.GA4778@atjola.homenet> In-Reply-To: <8470D32E-2CAA-4E3F-8BA0-B4578372A3C4@jump-ing.de> On 2009.11.02 16:08:25 +0100, Markus Hitter wrote: > The situation I'm trying to solve is: > > - A revision earlier than the latest one is checked out. > > - Files of this earlier commit are modified. > > - I want to record this earlier commit along with it's modifications > as a new commit on top of master, ignoring intermediate commits: > > com005 <-- master > com004 > com003 <-- HEAD, files modified > com002 > com001 (initial commit) > > One solution to do this is to move all files somewhere else, check > out master, deleting all checked out files, placing the moved away > files back into place and committing the result as com006. > Obviously, this is a pretty complex operation, just waiting to > exploit coding mistakes. Additionally, this will be slow. Instead of doing "git checkout com003", which detaches HEAD, you could do: git read-tree -u --reset com003 Which will update the index and working tree to reflect the contents of com003. The modify stuff, add, commit, done. > Now I'm thinking about a much simpler solution: Simply declare the > current set of files as (a modified) master/com005 and commit them. > A "cp $GIT_DIR/master $GIT_DIR/HEAD" followed by a commit would do > it. > > Now my question: Is it safe to tweak the files in $GIT_DIR this way > or will this corrupt the repository? Ignoring that $GIT_DIR/master is the wrong path, that 'cp' would (at best) act like detaching HEAD. Björn