Re: Commited to wrong branch
- From
Martin Langhoff <martin.langhoff@gmail.com>
- Date
- Sep 15, 2009, 10:55 UTC
- Message-ID
- <46a038f90909150355h20b39c71w4af7e2be2920fdbb@mail.gmail.com>
- In-Reply-To
- <26ae428a0909150331q391ed39ak622902d175b46d84@mail.gmail.com>
On Tue, Sep 15, 2009 at 12:31 PM, Howard Miller <howard@e-learndesign.co.uk> wrote:
Show 8 quoted lines
> I am resurrecting a discussion from a week or two back (been on > holiday). As follows... > > I had made some changes to some files and then done a commit. Only > then did I realise that I had the wrong branch checked out. To make > matters worse I then did a 'git reset HEAD^' which means that I can > now no longer switch branches. I am stuck. I had some advice (thanks!) > but it was not complete. I'd appreciate some more help.
Hi Howard,
just to make sure I understand your issue
1 - you were on branch X, thinking your were on branch Y 2 - edit, diff, commit, realised the mistake 3 - git reset HEAD^
so if you now run `git status` and `git diff` it will show your changes as if they were uncommitted and unstaged.
(Before you start with various attempts to recover below, a great trick is to make an instant-backup in case things go wrong: cd .. / ; cp -pr moodle.git moodle-backup.git ; cd moodle.git )
You can now try do do
4 - git checkout Y
and if the changes are on files that don't change between X and Y, then git will change the branches and keep your changes there. If the files are different between X and Y, it won't work.
What I can recommend is to save your patch, as follows
5 - git diff > tempchanges.patch 6 - git reset --hard # this will discard your changes, careful 7 - git checkout Y 8 - patch -p1 < tempchanges.patch
The patch may not apply cleanly :-) -- note that patch is more tolerant of iffy merges than git's internal implementation ("git apply") -- so it will succeed more often... but the results need review.
There is a more git-style approach that is to use git-stash -- it uses git-apply and may not do what you want. The steps are
5a - git stash # will save your changed files into a "stashed commit" and clear out the changes from your working copy 6a - git checkout Y 7a - git stash apply
hth,
m
-- martin.langhoff@gmail.com martin@laptop.org -- School Server Architect - ask interesting questions - don't get distracted with shiny stuff - working code first - http://wiki.laptop.org/go/User:Martinlanghoff