Hi Laurence, > Le 25 mai 2020 à 05:40, Laurence Tratt <laurie@xxxxxxxxx> 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@xxxxxxxxxxxxxx/ > > 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.