Subject: Re: Triangular workflow

From: Jeff King <[email-masked]>
Date: Tue, 13 Jan 2026 16:40:59 -0500

On Tue, Jan 13, 2026 at 07:35:57PM +0100, Harald Nordgren wrote:

> > For my triangular workflow the ahead/behind for the push branch is just
> > useless noise. I treat my push destination like a mirror, where I always
> > just push up everything at the end of the day.
> 
> This seems like a sub-optimal workflow 🤗
> 
> May I ask where you normally push (unless you only ever push once at the
> end) of the day? If it's another branch than your mirror, why not set that
> as your push destination then, and push to your push destination with the
> longer
> 
>     git push origin my-mirror
> 
> It makes more sense to me to reserve the shorter and more convenient
> 'git push' for something you do many times a day.

I couldn't quite parse what you meant by "another branch than your
mirror", but I'll describe my workflow:

  1. My "origin" remote is https://github.com/gitster/git.

  2. Most branches have origin/master as their upstream, though
     occasionally I'll have dependent branches that use "." as their
     remote and the local base branch for the "branch" field.

     E.g.

       git checkout -b jk/some-topic origin/master
       ...
       git checkout -t -b jk/another-topic jk/some-topic

  3. My mirror is https://github.com/peff/git, which I call "github" in
     the remote (arguably confusing, but back when I started that
     convention I was pulling Junio's tree from kernel.org ;) ). I point
     remote.pushdefault to the "github" remote.

  4. My push.default setting is "current", so if I want to push up a
     single branch, I can just "git push". I hardly ever do that,
     though.

  5. I usually push once per day or so. After integrating my topics into
     a shared daily-driver branch, I run something like:

       make test && make install && git push -f github refs/heads/jk/*

     (it's not exactly that; I have a script which picks out the local
      refs, but it's the moral equivalent of that).

So I don't ever care about the relationship between a specific jk/foo
and my mirror's version of it. I don't expect anybody to look at those,
and they exist mostly for backup and CI purposes (though I don't run CI
on the individual branches, but only the integrated result).

And having the extra output from "git checkout" is just extra noise for
me, especially because it is easy to see only the second message (which
looks just like the upstream ahead/behind message, of course) and get
confused. The first time I saw it I thought I had misconfigured
something with my branch.

-Peff