Re: [BUG] rebase --interactive silently overwrites ignored files
- From
- Phillip Wood <phillip.wood123@gmail.com>
- Date
- Apr 14, 2019, 13:24 UTC
- Message-ID
- <a3c544e2-2087-1877-38e3-c85651db32f5@gmail.com>
- In-Reply-To
- <CAL_tzDFQQtDYMStN+RDVYN_TzJmO+kufMhG9PGHwvsUWREpgWQ@mail.gmail.com>
On 14/04/2019 02:59, wh wrote:
> Thanks for the info about the upcoming "precious" attribute. Looks useful.
Hmm, unfortunately it's not looking so hopeful now [1]
Show 12 quoted lines
> 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
Thanks for sharing that, I was assuming the other commands behaved like checkout, I'm intrigued that merge behaves differently to rebase -i as they use the same underlying machinery, I'm a bit snowed under at the moment but I'll try and take a look at what's going sometime in the not too distant future.
Best Wishes
Phillip
[1] https://public-inbox.org/git/CACsJy8AEZ-Lz6zgEsuNukvphB9TTa9FAC1gK05fhnie2xtfc9w@mail.gmail.com/T/#u
Show 70 quoted lines
> On Fri, Apr 12, 2019 at 9:30 AM Phillip Wood <phillip.wood123@gmail.com> 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@gmail.com/ >> >> 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`. >>>