Re: Fwd: Problem: git doesn't update working dir (always) when checkout'ing other branch
- From
- Andy Parkins <andyparkins@gmail.com>
- Date
- May 22, 2007, 08:04 UTC
- Message-ID
- <200705220904.39487.andyparkins@gmail.com>
- In-Reply-To
- <566574ef0705212105k1387cf41n18e076c0bdf47ec6@mail.gmail.com>
On Tuesday 2007 May 22, Stian Haklev wrote:
> git --version > ../file1
Good stuff. The ">" only redirects stdout to file1; stderr would still be written to your terminal - did you notice any errors from this script? Could you run again, but append "2>&1" to the end of each redirecting line?
> git status >> ../file1
Seemed fine after this.
> echo checking out works with old >> ../file1 > git checkout works-with-old >> ../file1
Seemed fine after this.
> git status >> ../file1
Seemed fine after this.
> git checkout master >> ../file1 > git status >> ../file1
Kaboom!
Show 18 quoted lines
> # On branch master > # Changes to be committed: > # (use "git reset HEAD <file>..." to unstage) > # > # deleted: NOTES > # modified: display-page.rb > # deleted: eee_darwin > # modified: gui.rb > # modified: htmlshrinker-data.rb > # modified: htmlshrinker.rb > # modified: mongrel-web-gui.rb > # modified: mongrel-web.rb > # modified: zarchive.rb > # new file: zcompress.rb > # modified: zdump-7z.rb > # modified: zdump.rb > # modified: zipdoc.rb > # deleted: zutil.rb
Wow. I've never seen anything like that. Neither the index nor the working tree has actually been updated - but HEAD now points at master.
What was the output of that last git-checkout (unfortunately it outputs to stderr not stdout, so you'll need the "2>&1" at the end of each line in your script)? git-checkout won't change HEAD unless the change of index and working tree worked. I can't see the path through the git-checkout script that would have done what you're describing. I think it's going to need a guru on this one, however, we'll keep at it until I can't think of any more questions :-)
Do you observe the same behaviour on all repositories or just this one particular repository?
What's the form of this repository? That is to say, is works-with-old a branch from master or is it an independent branch? e.g.
0 -- * -- * -- * (master) 0 -- * -- * -- * (master)
or \
0 -- * -- * -- * (works-with-old) * -- * -- * (works-with-old)
I assume once you get into this broken state that running "git-reset --hard"
restores the working tree back to master?Does changing that last checkout to "git-checkout -f master" improve things?
Andy
-- Dr Andy Parkins, M Eng (hons), MIET andyparkins@gmail.com