Thanks for the info about the upcoming "precious" attribute. Looks useful. I didn't get the impression that Git normally overwrites ignored files. I ran some more experiments: git rebase FETCH_HEAD # bails git rebase -i FETCH_HEAD # overwrites git merge FETCH_HEAD # bails git reset --keep FETCH_HEAD # bails git reset --merge FETCH_HEAD # bails git checkout FETCH_HEAD # overwrites # without feature 2 locally: git merge FETCH_HEAD # overwrites, fast-forwards git merge --no-ff FETCH_HEAD # bails On Fri, Apr 12, 2019 at 9:30 AM Phillip Wood <phillip.wood123@xxxxxxxxx> wrote: > > Hi > > On 12/04/2019 00:56, wh wrote: > > I'm using git 2.20.1 from Debian. Git is usually careful not to > > overwrite untracked files, including ignored files. > > Git normally overwrites ignored files, so I think in your example rebase > -i is working as expected, I'm surprised that the am based rebase does > not overwrite the ignored file. There has been some discussion about > introducing 'precious' files that are ignored but protected in the same > way as untracked files [1]. > > Best Wishes > > Phillip > > [1] https://public-inbox.org/git/20190409102649.22115-1-pclouds@xxxxxxxxx/ > > But interactive > > rebase doesn't detect this (non-interactive rebase works fine). > > > > Reproduction: > > ----- > > > > #!/bin/sh > > mkdir upstream > > cd upstream > > git init > > echo 1 >feature-1 > > git add feature-1 > > git commit -m "feature 1" > > > > cd .. > > git clone upstream local > > cd local > > # write some tools for our own convenience > > echo ours >tools > > echo /tools >>.git/info/exclude > > # start working on a feature > > git checkout -b f2 > > echo wip >feature-2 > > git add feature-2 > > git commit -m "wip" > > > > cd ../upstream > > # official tools are available > > echo theirs >tools > > git add tools > > git commit -m "tools" > > > > cd ../local > > git fetch ../upstream master > > > > # this would be okay > > #git rebase FETCH_HEAD > > > > # problem: overwrites tools silently > > GIT_EDITOR=true git rebase -i FETCH_HEAD > > > > cat tools > > > > ----- > > > > Expected: `git rebase -i` fails because it would have to overwrite the > > untracked "tools" file. Contents of tools file remains `ours`. > > > > Actual: Contents of tools file becomes `theirs`. > >