 <p>Let's say branches <code>A</code> and <code>B</code>, standing on <code>A</code>, file <code>f</code> was modified (and not checked into <code>A</code>), while <code>B</code> contains another version. If I try to rebase <code>B</code> onto <code>A</code>, the local changes for <code>f</code> are lost. Solution: Commit the changes to <code>f</code>, or stash them away for later, or perhaps discard them by <code>git checkout f</code>.</p> <p>That is what the message says, in a nutshell.</p> <p>If you "tried again until it worked", you probably lost changes like the above.</p> <p><strong>Morals of the story:</strong> If you want to do any more complex operation with <code>git</code> (like pulling from upstream, rebasing, changing last commit, ...) make <em>sure</em> everything is tidy. I.e., <code>git status</code> says it is clean, and hopefully no untracked files.</p>