From mboxrd@z Thu Jan 1 00:00:00 1970 From: Victor Engmark Subject: Re: [BUG] git checkout allowed with uncommitted changes Date: Thu, 13 Oct 2011 16:44:50 +0200 Message-ID: <20111013144450.GA2856@victor.terreactive.ch> References: <20111013145924.2113c142@ashu.dyn.rarus.ru> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: git@vger.kernel.org To: arQon X-From: git-owner@vger.kernel.org Thu Oct 13 16:45:05 2011 Return-path: Envelope-to: gcvg-git-2@lo.gmane.org Received: from vger.kernel.org ([209.132.180.67]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1REMWv-0001gZ-4z for gcvg-git-2@lo.gmane.org; Thu, 13 Oct 2011 16:45:05 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755884Ab1JMOo7 (ORCPT ); Thu, 13 Oct 2011 10:44:59 -0400 Received: from gate.terreactive.ch ([212.90.202.121]:53326 "EHLO mail.terreactive.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751841Ab1JMOo6 (ORCPT ); Thu, 13 Oct 2011 10:44:58 -0400 Mail-Followup-To: arQon , git@vger.kernel.org Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.20 (2009-06-14) X-terreActive-From: victor.engmark@terreactive.ch X-Spam-Status: No Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Archived-At: On Thu, Oct 13, 2011 at 12:42:42PM +0000, arQon wrote: > Simple testcase: > > >git init > Initialized empty Git repository in C:/git-test/.git/ > >notepad file1 > >notepad file2 > >git st > # On branch master > # Initial commit > # Untracked files: > # (use "git add ..." to include in what will be committed) > # file1.txt > # file2.txt > nothing added to commit but untracked files present (use "git add" to track) > > >git add . > >git st > # On branch master > # Initial commit > # Changes to be committed: > # new file: file1.txt > # new file: file2.txt > > >git commit -am "init" > 2 files changed, 2 insertions(+), 0 deletions(-) > create mode 100644 file1.txt > create mode 100644 file2.txt > > >git co -b foo > Switched to a new branch 'foo' > >notepad file1 > (edit stuff) > >git st > # On branch foo > # Changes not staged for commit: > # modified: file1.txt > > >git co master > M file1.txt > > file1 now has the wrong data in it for "master" branch. The most important thing a VCS should do is to keep history intact. That happens when you check out in Git: No branches were changed, only the working space. The second most important thing a VCS should do is not destroy any of your uncommitted work unless you tell it to. That also happens when you check out in Git. The third most important thing a VCS should do is facilitate the developer's workflow. One common thing to do is to work on some thing, for example refactoring. During this process you might realize that one of the changes actually fixed a bug in the software. To keep things in their right place, you could now either 1. `checkout master` and commit the fix there, then shift back and continue working, or 2. commit the refactorings, `checkout master`, and commit the fix there. Either of these are easy to do with Git. There really is no reason why the changes in the workspace should be considered as "part of" the currently active branch, because they *are* not. Cheers, V -- terreActive AG Kasinostrasse 30 CH-5001 Aarau Tel: +41 62 834 00 55 Fax: +41 62 823 93 56 www.terreactive.ch Wir sichern Ihren Erfolg - seit 15 Jahren