On Fri, Jan 29, 2010 at 04:51:18PM -0500, Nicolas Pitre wrote:
quoted
Using a detached head is a more advanced feature than wanting to
checkout a remote branch locally, creating a local tracking branch. As
such, 'git checkout origin/topic' now means the same as 'git checkout
-t origin/topic', and you can get the old behavior back by doing 'git
checkout origin/topic^0'.
What purpose does this "feature" serve? Making sure people remain
stupid and get even more confused when the special dwimery doesn't work
because they don't know the difference between a local branch and a
remote tracking branch?
And now people will be left wondering why after a fetch they don't get
the latest stuff when they do "git checkout topic" again. Is this any
better?
I am entering the discussion a bit late, and things have moved on from
this point, but I wanted to mention that I have in the past made the
same argument that you have in your second paragraph (that you leave
users _more_ confused after a fetch), but somebody (I think Jay) managed
to convince me otherwise.
The saving feature is that we now print out the symmetric difference
information between a branch and its upstream during checkout. So the
user experience looks like:
$ git checkout topic
Branch topic set up to track remote branch topic from origin.
Switched to a new branch 'topic'
... time passes ...
$ git fetch
...
9f137a4..22ac6a6 topic -> origin/topic
$ git checkout topic
Switched to branch 'topic'
Your branch is behind 'origin/topic' by 6 commits, and can be fast-forwarded.
So I think it is not quite as bad as at least I had originally thought.
There are still a few rough edges, though:
1. If I stay on the 'topic' branch and run "git fetch", then I don't
see the checkout message. If I don't understand that a local branch
has been created, I might expect the new changes to be present. But
they're not. If I do a pull instead, it does "just work", even if I
am clueless about the local branch.
I wonder if a "fetch" which updates the upstream branch of the
current HEAD should print something like the "Your branch is
behind..." message.
2. If I am clueless that the local branch exists, I can see that there
are new changes that I can "fast forward". But if I am clueless
about local branches, do I know that means I need to run "git merge
origin/topic"? However, I can't think of an improved message that
would make the situation clear without adding a bunch of annoying
text.
-Peff