[PATCH] rebase: improve error messages about dirty state
- From
Jeff King <peff@peff.net>
- Date
- Dec 10, 2008, 09:25 UTC
- Message-ID
- <20081210092518.GA14424@coredump.intra.peff.net>
If you have unstaged changes in your working tree and try to rebase, you will get the cryptic "foo: needs update" message, but nothing else. If you have staged changes, you get "your index is not up-to-date".
Let's improve this situation in two ways:
- for unstaged changes, let's also tell them we are canceling the rebase, and why (in addition to the "needs update" lines)
- for the staged changes case, let's use language that is a little more clear to the user: their index contains uncommitted changes
Signed-off-by: Jeff King <peff@peff.net> --- I am cleaning up some old branches, and I think this is worth applying. It came out of a "rebase's error message is confusing" thread back in April:
http://thread.gmane.org/gmane.comp.version-control.git/78698
It would be nice also to say "foo: locally modified" instead of "foo: needs update" but the REFRESH_SAY_CHANGED functionality isn't exposed via the command line.
git-rebase.sh | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/git-rebase.sh b/git-rebase.sh index ea7720d..ebd4df3 100755 --- a/git-rebase.sh +++ b/git-rebase.sh @@ -332,11 +332,14 @@ else fi # The tree must be really really clean. -git update-index --ignore-submodules --refresh || exit +if ! git update-index --ignore-submodules --refresh; then + echo >&2 "cannot rebase: you have unstaged changes" + exit 1 +fi diff=$(git diff-index --cached --name-status -r --ignore-submodules HEAD --) case "$diff" in -?*) echo "cannot rebase: your index is not up-to-date" - echo "$diff" +?*) echo >&2 "cannot rebase: your index contains uncommitted changes" + echo >&2 "$diff" exit 1 ;; esac
-- 1.6.1.rc2.15.g7752a