GIT-HTTP-PUSH(1)

πŸ’… GIT-HTTP-PUSH(1) β€” like, the git-http-push manual, bestie

okay so you found the git-http-push page and you're like "what is this" β€” don't worry, i gotchu. this is the git manual's very own push-objects-over-HTTP/DAV situation, and we're gonna read it together. grab a snack. πŸ“


✨ NAME ✨

git-http-push β€” push objects over HTTP/DAV to another repository. yeah. that's the whole vibe. πŸ¦‹


🌸 SYNOPSIS 🌸

git http-push [--all] [--dry-run] [--force] [--verbose] <URL> <ref> [<ref>...]

like, that's the shape of it. don't freak out, we'll go through every single flag, promise. 🫢


πŸŽ€ DESCRIPTION πŸŽ€

So what does it actually do? It sends the missing objects over to the remote repository, and then it updates the remote branch. that's it. that's the main character energy. ✨

⚠️ NOTE, and this one's important: this command is temporarily disabled if your libcurl is older than 7.16, because that combination has been reported not to work and sometimes corrupts the repository. 😭 not a vibe. please check your libcurl, i am begging.

πŸ’– OPTIONS πŸ’–

every single one, no skips, no cap:

  • --all β€” don't just assume the remote repo is complete in its current state. instead, verify that all the objects in the entire local ref's history actually exist on the remote. thorough queen behavior. πŸ‘‘
  • --force β€” normally the command refuses to update a remote ref if it's not an ancestor of the local ref you're using to overwrite it. this flag kills that check. which means… the remote repository can lose commits. so use it with care, bestie, i'm serious. πŸ’€
  • --dry-run β€” do literally everything except actually sending the updates. it's giving rehearsal. 🎭
  • --verbose β€” report the list of objects being walked locally, plus the list of objects successfully sent to the remote repository. nosy and we love that for us. πŸ™ˆ
  • -d, -D β€” remove <ref> from the remote repository. the specified branch cannot be the remote HEAD. and if -d is specified, these other conditions must also be met:
    • Remote HEAD must resolve to an object that exists locally
    • Specified branch resolves to an object that exists locally
    • Specified branch is an ancestor of the remote HEAD
  • <ref>... β€” the remote refs to update. that's the list, babes. ⭐

πŸ¦‹ SPECIFYING THE REFS πŸ¦‹

okay this part is lowkey the most fun, let's get into it.

A <ref> specification can be either a single pattern, or a pair of such patterns separated by a colon ":" β€” which, iykyk, means a ref name cannot have a colon in it. and a single pattern <name> is just a shorthand for <name>:<name>. cute, right? 🌈

Each pattern pair <src>:<dst> has two sides: the source side (before the colon) and the destination side (after the colon). The ref to be pushed is determined by finding a match that matches the source side, and where it gets pushed is determined by the destination side. slay.

  • It is an error if <src> does not match exactly one of the local refs. one. exactly one. not zero, not two. πŸ’…
  • If <dst> does not match any remote ref, then either:
    • it has to start with "refs/" β€” and in that case <dst> is used as the destination literally
    • <src> == <dst> and the ref that matched the <src> must not exist in the set of remote refs β€” then the ref matched <src> locally is used as the name of the destination

Without --force, the <src> ref is stored at the remote only if <dst> does not exist, or <dst> is a proper subset (i.e. an ancestor) of <src>. this check is known as the "fast-forward check", and it exists to avoid accidentally overwriting the remote ref and losing other people's commits from there. we respect other people's commits in this house. 🫢

With --force, the fast-forward check is disabled for all refs. all of them. 🫨

Optionally, a <ref> parameter can be prefixed with a plus + sign to disable the fast-forward check only on that ref. surgical. targeted. iconic. 🎯


πŸ’œ GIT πŸ’œ

Part of the git(1) suite. obviously. πŸ’…


and that's the whole page, bestie β€” you ate that. πŸ“βœ¨ this was Git 2.56.0 from 2026-09-27, and i'm blowing you a little kiss goodbye πŸ«ΆπŸ’– see you in the next manpage!! 🧚

πŸ“¦ where this page comes from