Back to blog

From `git add` to Vercel Production: The Missing Middle

Today's Questions Looked Basic. They Weren't.

Today I asked a chain of questions that sound beginner-level:

  • How do I see the test environment?
  • Is this flow correct: push branch -> preview, push main -> production?
  • What is a PR?
  • What does git add actually do?
  • In my codified workflow, how should these be managed?

If you only look at vocabulary, this sounds like onboarding. For me, it was different: I wasn't just learning terms, I was naming and connecting actions I already perform. Before today I could do the flow. Today I could explain why it works.

Gap #1 I Closed: Preview Is Usually Automatic

My original model looked like this:

my initial model

git push branch -> then manually push Vercel preview git push main -> Vercel production

What got clarified: if your repo is connected to Vercel, there usually isn't a separate "push preview" step. Push to Git and Vercel auto-creates Preview. Merge or push to the production branch and Vercel auto-deploys Production.

Tiny distinction, huge mental relief. One less imagined manual step makes the whole release path more stable.

Gap #4 I Closed: Commands Must Be Executable, Not Just Plausible

The most useful part of the new chat was three concrete failures:

today's command reality
git add
-> Nothing specified, nothing added.
 
git push branch
-> fatal: 'branch' does not appear to be a git repository
 
git push -u origin feature/preview-test
-> error: src refspec feature/preview-test does not match any

All three point to the same principle: natural-language intent is not executable Git syntax.
"run git add" without arguments doesn't tell Git what to stage. "push branch" sounds right in human language, but Git parses branch as a remote name. And you can't push feature/preview-test until that local branch actually exists.

So this chat helped me tighten the order into something mechanically correct:

order refined from real failures

git add . (or git add -A) -> git commit -> git checkout -b feature/preview-test -> git push -u origin feature/preview-test -> check Vercel Preview

Gap #5 I Noticed: Preview Success vs Immediate Main Push

In the new chat, I successfully pushed feature/preview-test and got Preview, then immediately ran:

You

run git push to main

This isn't wrong, but it exposed a decision gap: having a Preview does not automatically mean "ship to Production now."
If Preview is meant to be a final check, the workflow should have an explicit gate (even for a solo project): "Preview passed -> approve -> push main."

That becomes the next tiny rule I want to codify:
Preview first -> explicit go/no-go -> main

Gap #2 I Closed: PR Is Not a Vercel Concept

I asked a question that felt embarrassingly simple:

You

What is PR?

I had been mixing PR and deployment in my head. My clean definition now:

AI summary

A PR (Pull Request) is a merge proposal in your Git hosting platform. Its core job is code review and merge control, not deployment by itself.

The relationship is:

  • PR branch commits often trigger Vercel Preview;
  • but PR's core meaning is "should this enter main?";
  • production still depends on what lands in the production branch.

That separation fixed a lot of confusion for me.

Gap #3 I Closed: The Real Role of git add

The most useful clarification today was putting git add back in context: not a random command you type by habit, but the boundary setter for a commit.

mental model
write changes
-> git add      # choose what enters this snapshot
-> git commit   # create a traceable snapshot
-> git push     # publish snapshot to remote/CI
-> vercel deploy (auto)

Before, I behaved more like "finish writing then push." Now I treat it as: add selects, commit signs, push broadcasts. Once that is explicit, rollback, debugging, and postmortems all get easier.

Putting It Back into My Codified Workflow

This is my current minimal release loop:

my minimal release loop (current)
  1. Before starting: git pull --rebase origin main
  2. Write/edit
  3. git add -A
  4. git commit -m "post: ..."
  5. git push origin main
  6. wait for Vercel auto-deploy to production

For bigger changes, branch + PR + Preview first. For normal logbook posts, I don't force heavyweight ceremony.

That matches the whole project principle: sufficient, repeatable, low cognitive load.

What I Actually Learned

AI summary
  • "I know the term" is not the same as "I know the action's responsibility in a workflow."
  • Even lightweight workflows need boundaries, or every release depends on memory.
  • Naming steps clearly is really about reducing future decision cost.

I didn't write much code today.
I turned a habitual release action into an explicit process.
Not flashy, but probably one of the highest-leverage improvements this week.