Consider
$ git status
On branch chore/nbsp-fix-2
nothing to commit, working directory clean
$ git rebase -i master
Cannot rebase: You have unstaged changes.
Please commit or stash them.
How do I work out what the unstaged changes are that are preventing git from rebasing?
Some background: Someone managed to add files with a non-breaking space (%A0) in the name. This has caused problems with the repository. The files show up as not tracked and git thinks the repository is dirty — a similar problem.
The technique I was using to correct the problem is to create a new branch before those changes were made and cherry-pick the few commits after those changes. Unfortunately I am now in this situation. I can imagine there is some other file or other remnant of that problem preventing me from moving forward. I am now in this position after cherry-picking the single commit following the bad file names.
I'm looking for suggestions for getting past this problem. What is rebase seeing that status does not see?
Turns out git rebase
is a shell script in /usr/libexec/git-core/git-rebase
, grepping for "have unstaged changes" in that dir gets exactly one hit, in git-sh-setup
, in this function:
require_clean_work_tree () {
git rev-parse --verify HEAD >/dev/null || exit 1
git update-index -q --ignore-submodules --refresh
err=0
if ! git diff-files --quiet --ignore-submodules
then
echo >&2 "Cannot $1: You have unstaged changes."
err=1
fi
[ ... ]
and rebase does invoke that. So, to answer
What is rebase seeing that status does not see?
your question, try git diff-files
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With