From: Jakub Narebski <jnareb@gmail.com>
To: Dima Kagan <dima.kagan@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: Git branches - confusing behavior
Date: Sun, 11 May 2008 15:40:04 +0200 [thread overview]
Message-ID: <200805111540.05195.jnareb@gmail.com> (raw)
In-Reply-To: <4826DF6A.2070306@gmail.com>
Dima Kagan wrote:
> Jakub Narebski wrote:
>> Dima Kagan <dima.kagan@gmail.com> writes:
[...]
> So if I am working on more than one branch at a time I need to commit
> my changes every time before I do 'git checkout <branch>'?
[...]
Not necessary, see below (and it is not necessary bad).
>>> 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?
>>
>> This is normal, and wanted, behavior.
> That's a subjective point of view :) I'm coming from the SVN world and
> uncommitted changes on one branch don't affect other branches. Is
> there a way I can achieve this behavior with git?
How would you want git to behave, with "git checkout <branch>" changing
branches _in place_, in single working area? Besides, current
behavior, together with "git checkout -m" option, allows to change
branches when you have realized (after making some changes) that you
are on wrong branch...
There are few possible solutions:
1. Save state before switching branches
1.1. You can simply commit changes before switching branch, perhaps with
"(WIP)" (work in progress) in the commit message. Then, when you go
back to the branch, you can continue your work, and simply --amend (as
in "git commit --amend" a commit.
1.2. You can use git-stash to save state of your working area (working
directory) _and_ index, change branches, and when going back to branch
restore state using "git stash apply". I think you can save state even
during not resolved merge.
1.3. If you use patch management interface on top of Git, like StGit
(or Guilt), you can simply "stg refresh" a patch, then change branches.
When returning to branch, use refresh and/or edit, then create new
patch if you think current is finished (you can always go back...).
2. Use separate working for differen branches: this is what Bazaar does,
what Mercurial does by default without 'localbranch' extension, and I
think also what Subversion does. Take a look at contrib/workdir
on how to manage multiple working areas with single repository; the
core.workdir and --working-dir could also be of help.
Note that in this case you have to take care to not have the same branch
checked out to two (or more) different working areas, to not stomp on
your changes, and to avoid confusion.
Final note: you would work better learning SCM "the git way", and not to
rely on Subversion bad habits (yes, I know that bad CVS habits are
worse...) ;-)
--
Jakub Narebski
Poland
next prev parent reply other threads:[~2008-05-11 13:41 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-11 11:31 Git branches - confusing behavior Dima Kagan
2008-05-11 11:42 ` Jakub Narebski
2008-05-11 11:58 ` Dima Kagan
2008-05-11 12:06 ` David Symonds
2008-05-11 12:11 ` Dima Kagan
2008-05-11 12:13 ` David Symonds
2008-05-11 12:17 ` Dima Kagan
2008-05-11 12:20 ` Steve Frécinaux
[not found] ` <f35478f50805110513h15aa462bs9ee35ed4738d3009@mail.gmail.com>
2008-05-11 12:21 ` Dima Kagan
2008-05-11 13:40 ` Jakub Narebski [this message]
2008-05-11 12:33 ` Dima Kagan
2008-05-11 12:57 ` Björn Steinbrink
2008-05-11 13:04 ` Dima Kagan
2008-05-11 13:27 ` Björn Steinbrink
2008-05-11 13:39 ` Dima Kagan
[not found] ` <4826F72D.2070205-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2008-05-11 15:25 ` Patrick Aljord
2008-05-11 15:39 ` Teemu Likonen
2008-05-12 7:49 ` Miles Bader
2008-05-11 14:03 ` Theodore Tso
-- strict thread matches above, loose matches on Subject: below --
2008-06-30 7:23 Matt Seitz (matseitz)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200805111540.05195.jnareb@gmail.com \
--to=jnareb@gmail.com \
--cc=dima.kagan@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).