Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

`gh stack push` resolves an empty remote and silently pushes nothing when `branch.<name>.remote` is `.`

Abierto
#412 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
55/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
git, github, go
Área
cli

Línea de trabajo

Comienza por la autodetección de remotes y las rutas de push utilizadas por gh stack push, y compara después su tratamiento de branch.<name>.remote = . con los casos de un único remote y remote.pushDefault. Reproduce el problema utilizando los comandos y el repositorio descritos arriba, y verifica que los remotes no resueltos fallen de forma explícita, que se informe del movimiento real de refs y que el estado de salida sea distinto de cero cuando no se haya hecho ningún push.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug topic: cli - push

Summary

When a stack branch's branch.<name>.remote is . (the local repository), gh stack push resolves the push remote to an empty string, pushes nothing, and reports success:

$ gh stack push
Pushing 2 branches to ....
✓ Pushed 2 branches
To create PRs for this stack, run `gh stack submit`

$ git ls-remote --heads origin | grep probe
                       # nothing — no ref was created

Note the blank remote name between "to" and the ellipsis. Exit status is 0.

gh stack submit then fails PR creation, but the error describes a state problem rather than the push failure that caused it, and the run still ends on a success line:

$ gh stack submit --auto
Checking stack state...
Pushing to ....
⚠ failed to create PR for probe-one: creating PR: GraphQL: Head sha can't be blank,
  Base sha can't be blank, No commits between main and probe-one,
  Head ref must be a branch (createPullRequest)
✓ Pushed and synced 2 branches

This is a single-remote repository. origin is the only remote, and it is correct.

Root cause

branch.<name>.remote = . is a normal git configuration meaning "the upstream is a local branch". Anyone with branch.autoSetupMerge = always in their git config gets it automatically on every git switch -c from a local branch — which is exactly how a stack is built, so every branch in the stack has it.

Remote auto-detection appears to read branch.<name>.remote, find ., and yield an empty remote name rather than falling back to the single remote / origin.

Isolated by toggling it:

branch.autoSetupMerge branch.<name>.remote gh stack push branches pushed
always . Pushing 2 branches to .... 0
unset unset Pushing 2 branches to origin... 2

Also fixed by setting remote.pushDefault = origin; unsetting it reproduces the failure again, deterministically.

Reproduction

git config --global branch.autoSetupMerge always   # or set it locally

git switch main
git switch -c probe-one && echo p1 > p1.txt && git add . && git commit -m "p1"
git switch -c probe-two && echo p2 > p2.txt && git add . && git commit -m "p2"
git switch probe-one

git config --get branch.probe-one.remote           # -> .
gh stack init probe-one probe-two
gh stack push                                      # "Pushing 2 branches to ...." / "✓ Pushed 2 branches"
git ls-remote --heads origin | grep probe          # -> nothing

Public repo with two stacks set up for this: https://github.com/xn/gh-stack-repro

Expected

  • Fail loudly when the push remote cannot be resolved, rather than pushing to an empty remote name.
  • Never print ✓ Pushed N branches unless refs actually moved — report per-branch results, and exit non-zero when nothing was pushed.
  • Treat branch.<name>.remote = . as "no usable remote for this branch" and fall back to the single remote / origin / remote.pushDefault.

Workaround

gh stack push --remote origin, or git config remote.pushDefault origin.

Environment

  • gh 2.97.0
  • gh-stack v0.1.0
  • git 2.50.1
  • macOS 26.4.1, darwin/arm64

Related

Same GraphQL error signature as #219 and #381, but a different root cause — those are about which repository the API calls target in multi-remote/fork clones. This one is a single-remote clone where the push target itself resolves to empty and no ref is ever created. #45 is a third variant (SSH host alias); ruled out here — the failure reproduces with a plain https:// remote and a pristine global config.

Lenguaje dominante
Go
Estrellas
1.5k
Forks
73
Merge medio
1 d 8 h
PR fusionados (30 d)
7

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de github/gh-stack

Todos los issues de github/gh-stack

Issues similares

Más issues de Go

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.