Re: Git branches - confusing behavior

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2008.05.11 16:04:31 +0300, Dima Kagan wrote:
> Björn Steinbrink wrote:
> > On 2008.05.11 15:33:21 +0300, Dima Kagan wrote:
> >>>> Basically I see that the same file I edited on the 'test_branch'
> >>>> branch appears to be modified on the 'master' branch as well. This
> >>>> behavior is unwanted, of course.
> >>>>
> >>>> Can someone please tell me, what am doing wrong? Or is this git's
> >>>> normal behavior?
> >> I just realized that this behavior is even more confusing.  If I
> >> commit the file on 'test_branch' and only then 'git checkout master'
> >> the changes are not visible on 'master' until I merge. So why should
> >> 'master' be affected by uncommitted changes on some branch???
> > 
> > Uncommitted changes are not on any branch, they are in your working tree
> >
[example removed]
> > 
> > 
> > The uncommitted changes survived the branch change and are still in the
> > working tree, in svn just like in git.
> 
> Yes, I am aware of that, except one rarely works in one directory on
> multiple svn branches, because the branches are not private.

I always did that, the working copy _is_ private even in svn, so messing
with that was not a problem there either.

> Git's branches can be private, so perhaps this behavior should be
> different from SVN?

No. Uncommitted changes are, well, uncommitted. They don't belong to any
branch yet. A branch is not some structure that contains history in
itself. A branch just points to a commit, and the commits, with their
parent-child relations, form the actual history. The index and working
tree are not part of a branch.

Changing that would even break a workflow that is rather common for me.
I start working on something that is either just experimental or assumed
to be a very small change. Then I realize that the change is worth
keeping and/or too big and deserves its own branch. At that point, I can
just do "git checkout -b new_branch", and pretend that I started working
on that branch right from the start. With your proposed change, I would
need some extra command to transfer the work in progress from the old
branch to the new branch.

If I ever want to switch to another branch and not keep the changes in
my working tree and index, I stash them away or create a temporary
commit, which I later amend. That's a use-case that comes up rather
seldom though (for me at least).

> BTW, Is there a way to do 'svn checkout -b new_branch' into a new directory?

There's a script (new-working-tree or so) in contrib/ that can create a
second working tree for a given repo, but I usually prefer to just clone
my repo locally. In the second repo, I can then switch branches as much
as I like ;-)

Björn
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux