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

Re: recurse-submodules can remove local changes when switching branches?

From
Philippe Blain <levraiphilippeblain@gmail.com>
Date
May 25, 2020, 17:28 UTC
Message-ID
<1788146A-420A-41F9-A286-165F574089BD@gmail.com>
In-Reply-To
<20200525094019.22padbzuk7ukr5uv@overdrive.tratt.net>
Hi Laurence,
Show 42 quoted lines
> Le 25 mai 2020 à 05:40, Laurence Tratt <laurie@tratt.net> a écrit :
> 
> If one creates a new repository, makes a new branch, adds a submodule, makes
> local changes to that submodule, then switches to another branch, it seems
> that git can silently remove those local changes.
> 
> Here's an example (the repositories involved are irrelevant other than
> they're small!):
> 
>  $ git clone https://github.com/ltratt/supuner/
>  $ cd supuner
>  $ git submodule add https://github.com/ltratt/extsmail extsmail
>  $ git checkout --recurse-submodules -b b
>  $ git commit -m "add submodule" .
> 
> At this point make a local change to extsmail/README.md and confirm that
> git has noticed that something in the submodule has changed:
> 
>  $ git status
>  On branch b
>  Changes not staged for commit:
>    (use "git add <file>..." to update what will be committed)
>    (use "git restore <file>..." to discard changes in working directory)
>    (commit or discard the untracked or modified content in submodules)
>          modified:   extsmail (modified content)
> 
>  no changes added to commit (use "git add" and/or "git commit -a")
> 
> then change branch (in the supuner repository, not extsmail!):
> 
>  $ git checkout --recurse-submodules master
> 
> The switch of branch succeeds without warning me that I have changes in my
> submodule. But then:
> 
>  $ git status
>  On branch master
>  Your branch is up to date with 'origin/master'.
> 
>  nothing to commit, working tree clean
> 
> My local changes to the submodule have disappeared entirely.

I believe this is the same bug that was reported in 2018 here: https://lore.kernel.org/git/CAHsG2VT4YB_nf8PrEmrHwK-iY-AQo0VDcvXGVsf8cEYXws4nig@mail.gmail.com/

Show 11 quoted lines
> 
> Switching back to `b` does not restore my changes:
> 
>  $ git checkout --recurse-submodules b
>  On branch b
>  nothing to commit, working tree clean
> 
> This happens on 2.26.2 and the current master. AFAICS this only happens
> because the master branch does not yet have the submodule registered in it.
> If it does, "checkout --recurse-submodules" maintains my local changes in
> the submodule across the branch switch.
Thanks, this information should be useful for debugging.
Philippe.
Previous: Laurence TrattNext: Laurence Tratt
Message 2 of 3 in “recurse-submodules can remove local changes when switching branches?”
  1. Laurence TrattMay 25, 2020
  2. Philippe BlainMay 25, 2020
  3. Laurence TrattMay 25, 2020

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.