init writes branch.<name>.remote = '.', so submit reports a push that never happened
- Langage dominant
- Go
- Étoiles
- 1.5k
- Forks
- 70
- Merge moyen
- 1 j 8 h
- PR mergées (30 j)
- 7
Description
## Environment
- gh 2.96.0 (2026-07-02), gh-stack **v0.0.4**, git 2.46.1, macOS 26.6
- Run inside a **git worktree** (`GIT_DIR=.git/worktrees/`)
- `origin` is the canonical repo name, not a rename
## Summary
`gh stack init` wrote `branch..remote = .` into git config. `.` means *this local repository*, so the subsequent `gh stack submit` pushed nowhere, printed `Pushing to ....`, and still reported `✓ Pushed and synced 2 branches`. The branches did not exist on `origin`.
This is the same failure as #461 and the same family as #472, but a different trigger. There the cause was a renamed repo; here it is the remote config that `init` itself wrote.
## Repro
```
git worktree add ../wt -b feature/a
# ... commit on feature/a, then branch feature/b on top, commit
gh stack init --base develop feature/a feature/b
git config --get-regexp 'branch\.feature.*remote'
```
Observed:
```
branch.feature/a.remote .
branch.feature/b.remote .
```
Every other branch in the same repo that was not created by `gh stack init` has `remote origin`.
Then:
```
gh stack submit --auto
```
```
Checking stack state...
Pushing to ....
⚠ failed to create PR for feature/a: creating PR: GraphQL: Head sha can't be blank,
Base sha can't be blank, No commits between develop and feature/a,
Head ref must be a branch (createPullRequest)
✓ Pushed and synced 2 branches
```
`git ls-remote --heads origin 'feature/*'` returns nothing. The push never happened, but the last line says it did. The PR-creation error is a downstream symptom: GitHub cannot see a branch that was never pushed.
## Workaround
```
git push origin feature/a feature/b
git branch --set-upstream-to=origin/feature/a feature/a
git branch --set-upstream-to=origin/feature/b feature/b
```
After that, `gh stack submit` prints `Pushing to origin...` and works correctly. The stack view and the GitHub-side stack were unaffected throughout.
## Why it matters
The empty remote name renders as `Pushing to ....`, which reads as ordinary progress ellipsis rather than an empty value, so there is nothing on screen to notice. Combined with the unconditional `✓ Pushed and synced` line, the command looks like it succeeded. I only caught it because PR creation happened to fail in the same run; on a stack where the PRs already exist, `submit` would report success and silently push nothing.
Given #461 and #472 report the same shape from different causes, the general fix may be for `submit` to verify the push landed rather than trusting it, and to refuse an empty or `.` remote outright.
## Note
I have not isolated whether the worktree is required to reproduce. It may be related to #459, which reports that gh-stack ties local state to `$GIT_DIR` and that a worktree changes it.
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Reproduisez le scénario de worktree avec `gh stack init --base develop feature/a feature/b`, inspectez les valeurs résultantes de `branch.*.remote` avec `git config`, puis exécutez `gh stack submit --auto` et comparez le résultat avec `git ls-remote --heads origin`. C’est terminé lorsque init ne crée pas de remote `.` inutilisable et que submit ne signale une réussite que si les branches atteignent effectivement le remote configuré.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- git, github, go
- Domaine
- cli, devtools
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- Active
- Clarté
- Plutôt claire
- Accessibilité débutants
- 48/100