diff --git a/lib/git/git_ahead.fish b/lib/git/git_ahead.fish
index af6c21f49babb85e6274675cd1e517c33fa07219..16aa924a46334ca2bad159a0c0581fb97b90d6a0 100644
--- a/lib/git/git_ahead.fish
+++ b/lib/git/git_ahead.fish
@@ -1,15 +1,22 @@
 function git_ahead -a ahead behind diverged none
-  git_is_repo; and begin
-    test -z "$ahead"; and set ahead "+"
-    test -z "$behind"; and set behind "-"
-    test -z "$diverged"; and set diverged "±"
-    test -z "$none"; and set none ""
-    command git rev-list --left-right "@{upstream}...HEAD" ^/dev/null \
-    | awk "/>/ {a += 1} /</ {b += 1} \
-      {if (a > 0) nextfile} END \
-      {if (a > 0 && b > 0) print \"$diverged\"; \
-      else if (a > 0) print \"$ahead\"; \
-      else if (b > 0) print \"$behind\";
-      else printf \"$none\"}"
+  not git_is_repo; and return
+
+  set -l commit_count (command git rev-list --count --left-right "@{upstream}...HEAD" ^/dev/null)
+
+  switch "$commit_count"
+  case ""
+    # no upstream
+  case "0"\t"0"
+    test -z "$ahead"; and echo "$ahead"
+      or echo ""
+  case "*"\t"0"
+    test -z "$behind"; and echo "$behind"
+      or echo "-"
+  case "0"\t"*"
+    test -z "$ahead"; and echo "$ahead"
+      or echo "+"
+  case "*"
+    test -z "$diverged"; and echo "$diverged"
+      or echo "±"
   end
 end