git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Torsten Bögershausen" <tboegi@web.de>
To: Ed Avis <eda@waniasset.com>, git@vger.kernel.org
Subject: Re: Suggestion: make git checkout safer
Date: Wed, 03 Jun 2015 21:26:49 +0200	[thread overview]
Message-ID: <556F54F9.2050202@web.de> (raw)
In-Reply-To: <loom.20150603T114527-151@post.gmane.org>

On 2015-06-03 11.55, Ed Avis wrote:
> Jeff King <peff <at> peff.net> writes:
> 
>> I would say the more "usual" way to use checkout like this
>> is to give specific paths. I.e., run "git status", say "oh, I need to
>> restore the contents of 'foo', but not 'bar'", and run "git checkout
>> foo". That works regardless of the type of change to "foo" and "bar".
> 
> That seems fine - a specific file is named and you clearly want to alter
> the contents of that file.  By analogy, 'rm foo' will silently delete it,
> but if you specify a directory to delete recursively you need the -r flag.
> OK, it's not a perfect analogy because the purpose of rm is to delete data
> and nothing else ;-).
> 
> If my personal experience is anything to go by, newcomers may fall into the
> habit of running 'git checkout .' to restore missing files.  In the old days
> I would often delete a file and then run 'cvs update' or 'svn update' to
> restore it.  That would fetch a fresh copy from the repository, and while
> it might do some kind of diff/patch operation on modified files, it would
> not simply throw away local changes.
> 
> 'git checkout .' seems like the analogous command, but it has much sharper
> edges.  I still think it should be safer by default, but if you decide
> against that then perhaps you need to create some way to restore missing
> files and not overwrite others.  'git checkout --no-overwrite'?  Then it
> could even be added to .gitconfig as the default for those who like it.
> 
> I have to say that as a newcomer to git I do not like the idea of creating
> a special undo log for git.  It would just be yet another concept to learn
> and another thing to add to the list of 'where is git hiding my data this
> time?'.  And the time when it would be useful - after some bungled operation
> that lost data - is just the time when the user is already confused and
> adding another semi-hidden stash of objects to the mix would befuddle them
> further.  If there is to be a backup made of local changes that get lost,
> and I agree it is a good idea, then it should be something stupid and
> completely obvious, such as saving the old file as 'foo.before_checkout.1'.
> 
This is what my Git says:

git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   A
        deleted:    B

(So it should be somewhat self-documenting)


I try to avoid things like "git reset --hard", and "git checkout .",
and often use "git stash" instead.

It may be that there is a chance to improve the documentation.

Just for curiosity:
From where did you got the information to run "git checkout ." ?

  parent reply	other threads:[~2015-06-03 19:27 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-03  8:50 Suggestion: make git checkout safer Ed Avis
2015-06-03  9:06 ` Jeff King
2015-06-03  9:21   ` Ed Avis
2015-06-03  9:35     ` Jeff King
2015-06-03  9:55       ` Ed Avis
2015-06-03 17:35         ` Junio C Hamano
2015-06-03 17:49           ` Randall S. Becker
2015-06-03 18:11             ` Junio C Hamano
2015-06-03 18:18               ` Randall S. Becker
2015-06-03 18:14             ` Stefan Beller
2015-06-04 10:47               ` Ed Avis
2015-06-04 11:02                 ` Ed Avis
2015-06-03 19:26         ` Torsten Bögershausen [this message]
2015-06-03 19:47         ` Kevin Daudt
2015-06-04 11:00           ` Ed Avis
2015-06-04 20:14             ` Torsten Bögershausen
2015-06-05  9:32               ` Ed Avis
2015-06-05 10:49                 ` Duy Nguyen
2015-06-05 17:44                 ` Eric Sunshine
2015-06-05 18:03                   ` Junio C Hamano
2015-06-05 18:46                     ` Ed Avis
2015-06-05 18:37                   ` Eric Sunshine
2015-06-03 20:12         ` Philip Oakley
2015-06-03 17:32       ` Junio C Hamano
2015-06-03 19:06         ` Jeff King
2015-06-03 19:24           ` Randall S. Becker
2015-06-03 21:29           ` Junio C Hamano
2015-06-04  9:01             ` John Szakmeister

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=556F54F9.2050202@web.de \
    --to=tboegi@web.de \
    --cc=eda@waniasset.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).