$ Git Game

Already up to date. and Everything up-to-date

Both mean Git found nothing to do. They are spelled differently because they come from different parts of Git, and they check different things.

$ git pull
Already up to date.
$ git push
Everything up-to-date

What each one checked

git pull fetches, then asks whether origin/main has a commit your main lacks. If it doesn't, there is nothing to merge or rebase, and the merge machinery says Already up to date.: a sentence, with a full stop.

git push asks the opposite: whether the remote's main lacks a commit yours has. If it doesn't, there is nothing to send, and the push machinery says Everything up-to-date: hyphens, no full stop. Git dropped the hyphens from the merge's message years ago and never from the push's. Both are correct output today, so these pages leave them as they are.

The line between them

git status doesn't talk to the remote. It compares your main with origin/main as of your last fetch, and counts: ahead by the commits you have and it doesn't, behind by the reverse.

$ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

Ahead means a push has something to send. Behind means a pull has something to bring. Both at once means the branches have diverged, which is where the forced update page leaves bot. Neither, and the two commands above print their nothing-to-do lines:

$ git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

Why the game does this to you

A day's pack can push with nothing to push, or pull at the tip. The remote prints the same two lines, and charges nothing: an op with nothing to do is free in Git Game, so the pull written before every push costs you only on the days it brings something in.

Play a day where this happens

One tap starts a game against the bot, and your first pull is written for you.

play the bot now

Output captured from Git 2.50.1 (Apple Git-155) by scripts/git-output.sh, in a scratch repository with two clones, ana's and bot's, and fixed dates, so the hashes are the same on every run. It is captured again at every Git release.