Subject: Re: Recovering from commit --amend in rebase --interactive

From: Boaz Harrosh <[email-masked]>
Date: Tue, 01 Jun 2010 12:48:58 +0300

On 06/01/2010 12:27 PM, Peter Krefting wrote:
> Hi!
> 
> I am a frequent user of rebase --interactive, and sometimes I do change a 
> commit to "edit", which presents me with an already committed change, which 
> I can fix up, and do "git commit --amend" on.
> 
> However, sometimes I get conflicts during rebase. In some cases I have 
> already seen that conflict, so rerere handles it for me. I am still dropped 
> out of rebase to manually add the fixes, though.
> 
> The problem now is that is way too easy to just do a "git commit --amend" 
> like in the case above, and thus overwriting the previous commit 
> unintentionally.
> 

The prints are clear enough.

If stop do to "edit" then it prints ... you do:
git commit --amend
git rebase --continue

If stop do to merge-conflict it prints ... you do:
git add ... (Note no commit command)
git rebase --continue

You should be getting used to it after a while, I promise you

> Is there an easy way of working around the issue?
> 
> 
> Last time this happened to me, I *did* notice my mistake as I entered the 
> editor, since it came up with the previous commit's message. However, as the 
> commit message file was in a good shape, I found no way to break out of the 
> amend. 

What?!? no, why. Just empty out the message at editor and save. It will abort
any commit and do nothing. 
(For example with kwrite, ctrl-a, delete, ctrl-s, exit)

It does not matter if the commit as entered some default text for you or
not. When editor is done if file is empty (or all comments) then it will
abort and do nothing. Do not worry. The original commit is un affected.
The message is just extracted from the original commit put to a tmp file
and enter into editor. (its just a commit -c after all)

> I ended up using "git reflog" to find out what I overwrote, then "git 
> diff $commitid > savedpatch" to remember what the change that I mistakenly 
> amended was, then "git checkout $commitid" and "git apply savedpatch" and 
> "git add" on the changed files. What I am wondering if there is an easier 
> way of recovering?
> 

Boaz