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

[PATCH (repost)] Improve bash prompt to detect merge / rebase in progress

From
Robin Rosenberg <robin.rosenberg.lists@dewire.com>
Date
Feb 6, 2008, 22:14 UTC
Message-ID
<200802062314.39440.robin.rosenberg.lists@dewire.com>
In-Reply-To
<7vodatvmtl.fsf@gitster.siamese.dyndns.org>
Hi Junio,

I'm not sure whether you didn't like it or not or just lost it. Here is the vastly enhanced prompt again, rebased.

-- robin
>From 76aa8bae8491c1ffbd6e3f5c99ab014ef87794c8 Mon Sep 17 00:00:00 2001
From: Shawn O. Pearce <spearce@spearce.org>
Date: Tue, 4 Sep 2007 03:13:01 -0400
Subject: 

This patch makes the git prompt (when enabled) show if a merge or a rebase is unfinished. It also detects if a bisect is being done as well as detached checkouts.

Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
---
 contrib/completion/git-completion.bash |   37 ++++++++++++++++++++++++++++---
 1 files changed, 33 insertions(+), 4 deletions(-)
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 0d33f9a..4ea727b 100755
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -64,12 +64,41 @@ __gitdir ()
 
 __git_ps1 ()
 {
-	local b="$(git symbolic-ref HEAD 2>/dev/null)"
-	if [ -n "$b" ]; then
+	local g="$(git rev-parse --git-dir 2>/dev/null)"
+	if [ -n "$g" ]; then
+		local r
+		local b
+		if [ -d "$g/../.dotest" ]
+		then
+			r="|AM/REBASE"
+			b="$(git symbolic-ref HEAD 2>/dev/null)"
+		elif [ -f "$g/.dotest-merge/interactive" ]
+		then
+			r="|REBASE-i"
+			b="$(cat $g/.dotest-merge/head-name)"
+		elif [ -d "$g/.dotest-merge" ]
+		then
+			r="|REBASE-m"
+			b="$(cat $g/.dotest-merge/head-name)"
+		elif [ -f "$g/MERGE_HEAD" ]
+		then
+			r="|MERGING"
+			b="$(git symbolic-ref HEAD 2>/dev/null)"
+		else
+			if [ -f $g/BISECT_LOG ]
+			then
+				r="|BISECTING"
+			fi
+			if ! b="$(git symbolic-ref HEAD 2>/dev/null)"
+			then
+				b="$(cut -c1-7 $g/HEAD)..."
+			fi
+		fi
+
 		if [ -n "$1" ]; then
-			printf "$1" "${b##refs/heads/}"
+			printf "$1" "${b##refs/heads/}$r"
 		else
-			printf " (%s)" "${b##refs/heads/}"
+			printf " (%s)" "${b##refs/heads/}$r"
 		fi
 	fi
 }
-- 
1.5.4.rc4.25.g81cc
Previous: Junio C HamanoNext: Robin Rosenberg
Message 3 of 16 in “command prompt script for current branch”
  1. Stephen SinclairFeb 6, 2008
  2. Junio C HamanoFeb 6, 2008
  3. Improve bash prompt to detect merge / rebase in progressRobin Rosenberg, Feb 6, 2008
  4. Robin RosenbergFeb 6, 2008
  5. Junio C HamanoFeb 6, 2008
  6. Robin RosenbergFeb 7, 2008
  7. Shawn O. PearceFeb 7, 2008
  8. Steffen ProhaskaFeb 8, 2008
  9. Johannes SchindelinFeb 8, 2008
  10. Steffen ProhaskaFeb 8, 2008
  11. Make git-completion.bash a first-class citizenJohannes Schindelin, Feb 8, 2008
  12. Jakub NarebskiFeb 6, 2008
  13. Mike HommeyFeb 6, 2008
  14. Jakub NarebskiFeb 6, 2008
  15. Stephen SinclairFeb 6, 2008
  16. Jakub NarebskiFeb 6, 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.