git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [REQ] Better error reporting when git rebase cannot rebase

From
Jeff King <peff@peff.net>
Date
Apr 3, 2008, 09:57 UTC
Message-ID
<20080403095722.GA6673@coredump.intra.peff.net>
In-Reply-To
<47F3A9CA.9090307@vivisimo.com>
On Wed, Apr 02, 2008 at 11:44:10AM -0400, Jake Goulding wrote:
Show 5 quoted lines
> Right now, if you have modified files in the working directory and  
> attempt to do a git rebase, you will see messages like:
>
> $ git rebase origin/master
> Makefile: needs update

I agree that message is terrible. I have long since lost my git virginity, and it makes sense to me now, but I remember getting confused by it quite a bit early on.

Unfortunately I am not sure of the best way to fix this message. It happens at a very low level in read-cache.c, and so it shows up in several different places. I am not even sure of all the places you can see it, so coming up with different text that makes more sense is non-trivial.

> However, it isn't always clear that that means the rebase *did not work*.
> This has bitten a few of my developers a few times when they think that a 
> rebase worked and that they need to perform some sort of "update" to the 
> files in question.

But this is, I think, a slightly separate issue, which is that rebase just bails without saying why. And that's easy to fix. How about this?

-- >8 -- rebase: warn about uncommitted changes before bailing

If refreshing the index reports modified files, we used to just bail without saying anything else, leaving the user only with the cryptic "foo: needs update" message. Let's also tell them that we are canceling the rebase.

Signed-off-by: Jeff King <peff@peff.net>
---
The message is patterned off the one below it. Maybe "uncommitted" is
not the right word; technically the changes are _unstaged_. And the
message for the index and head differing says the index is "not up to
date"; perhaps that should say "uncommitted changes".
 git-rebase.sh |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/git-rebase.sh b/git-rebase.sh
index 9b13b83..045b8ac 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -282,7 +282,10 @@ else
 fi
 
 # The tree must be really really clean.
-git update-index --refresh || exit
+if ! git update-index --refresh; then
+	echo >&2 cannot rebase: you have uncommitted changes
+	exit 1
+fi
 diff=$(git diff-index --cached --name-status -r HEAD --)
 case "$diff" in
 ?*)	echo "cannot rebase: your index is not up-to-date"
-- 
1.5.5.rc2.170.g6aa60.dirty
Previous: Jake GouldingNext: Jake Goulding
Message 2 of 3 in “[REQ] Better error reporting when git rebase cannot rebase”
  1. Jake GouldingApr 2, 2008
  2. Jeff KingApr 3, 2008
  3. Jake GouldingApr 3, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.