git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: "git checkout" resets modified files

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 29, 2015, 07:15 UTC
Message-ID
<xmqqlhcuzhsu.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<CANDob0LdQpoSfsedPK_yhNunXBvNTc9L1zKOM9h8dBUDePs0kg@mail.gmail.com>
Steve Heyns <notzippy@gmail.com> writes:
Show 13 quoted lines
> "git checkout" resets modified files
>
> Version git  2.5.0,
>
> Description:
> I was automating a process that would pull and switch to another
> branch when I stumbled across this. I have not been able to emulate
> this from command line but using go (or I imagine other languages are
> similar) if you execute a command like
>
> exec.Command("git","checkout","")
>
> A checkout with the branch parameter but the branch parameter is empty.

It is not feeding an empty branch parameter [*1*]. It is asking Git to check out all paths that match a pathspec "" out of the index.

Now, arguably, the user who would want to match everything may be more likely to give "." as the pathspec (or if she is not at the root of the working tree, ":/"), but "" means the same thing as ".", and the requested behaviour "check out all that match this pathspec from the index" would essentially mean "I want to get rid of all the modification in my working tree relative to the index".

I do not think this behaviour depends on the vintage of Git. An empty string as pathspec has always matched "everything in here" AFAIR.

[Footnote]
*1* Checking out a branch whose name is an empty string can be asked
    explicitly by disambiguating double-dash like this:
    $ git checkout "" --
And it will be answered (correctly) with:
    fatal: invalid reference
Previous: Steve HeynsNext: Junio C Hamano
Message 2 of 3 in “"git checkout" resets modified files”
  1. Steve HeynsAug 29, 2015
  2. Junio C HamanoAug 29, 2015
  3. Junio C HamanoAug 29, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.