skipnothing/Git

Pull Requests

You've clicked the green Merge button and watched your branch fold into main. Now grep the whole .git/ folder for that button, the object store, the refs, the config, every command git ships, and it isn't there.

  • ▸Search every byte under .git/ for the green Merge button and you come back empty: it was never there.
  • ▸Push three more commits and the web page's diff updates itself, no command told it to.
  • ▸Same branch, three merge buttons, three different commits land on main.
BUILDS ON
01

The proposal your repo never stores

You push feature to the server and open the web page: a title box, a description, a green Merge button waiting for a click. It feels like the branch now lives somewhere new. So look for that somewhere. Run git cat-file --batch-check --batch-all-objects on the server's repo and you find every commit you pushed, they arrived with git push, before you opened anything. Then search .git/refs/, .git/config, .git/HEAD, the packed refs, every file git writes. On GitHub you find one new line: refs/pull/1/head, a ref naming the commit your push already delivered (beside it refs/pull/1/merge, a trial merge GitHub builds for its checks). The title, the description and the button are nowhere in them.

The button, the title, the description, the review thread: none of it is a git object. Opening the page ran one HTTP call to the hosting service (GitHub, GitLab, Gitea), which wrote a single row into its own database. That row records two branch names and a state, and points back at commits git already had. Clone the server's repository onto a laptop with the service nowhere on it and every commit comes down; the row does not, and neither do the refs/pull/ refs, since a clone copies only branches and tags.

The viz below puts the two stores side by side: git's object store on one side, the platform's table on the other. Trigger the open and see which store the new row lands in, and what git gains: one ref to a commit it already had.

TWO STORES, ONE OPEN

Keep going, sign up to unlock the rest

3 more parts in this topic, plus 18+ more topics in Git.

Sign up, it's freeSee the full Git
Collaboration0/4#16 Remotes
#18 Git Hooks