Skip to content

'gh pr create' fails if skipping pushing with "GraphQL error: Head sha can't be blank, Base sha can't be blank, No commits between master and <branch>, Head ref must be a branch" #2691

@phil-blain

Description

@phil-blain

Describe the bug

Under some circumstances (not sure exactly why, see below), if I choose to skip pushing the current branch, PR creation fails with the following error:

GraphQL error: Head sha can't be blank, Base sha can't be blank, No commits between master and , Head ref must be a branch"

This is on 1.4.0 but also happened on 1.3.1.

Steps to reproduce the behavior

I think this should reproduce the problem. I'm pretty sure the bug is linked to the upstream configuration for the current branch :

  1. Create a topic branch, and set the Git upstream configuration to the upstream branch where this topic will eventually be integrated (see Detect push target for local branches without upstream configuration #575): git checkout -b my-topic upstream/master
  2. Add some commits, and push to your fork : git push origin HEAD
  3. Create the PR with gh: gh pr create
  4. Choose "Skip pushing the branch" when asked where to push. I already pushed it myself, and I don't want gh to mess with my upstream configuration (i.e. I want to avoid gh doing git branch --set-upstream-to=origin/$(git branch --show-current) or git push -u origin $(git branch --show-current)), a behaviour which can't be disabled at the moment).
  5. Enter title
  6. Edit body
  7. Submit
  8. Experience error: pull request create failed: GraphQL error: Head sha can't be blank, Base sha can't be blank, No commits between master and my-topic, Head ref must be a branch

Expected vs actual behavior

I expected the PR creation to succeed. The GraphQL error seems to imply that gh is making a incorrect API request because (I assume) it can't correctly compute the required arguments.

Logs

## Git state before attempting PR creation
# upstream branch is upstream/master
$ git rev-parse --symbolic-full-name  @{upstream}
refs/remotes/upstream/master
# current branch is one commit ahead of its upstream
$ git log --oneline --decorate @{upstream}..HEAD
494173a586 (HEAD -> fix-linkgit-git1, origin/fix-linkgit-git1) git.txt: fix typos in 'linkgit' macro invocation
# current branch is already pushed to my fork
$ git  log --oneline --decorate origin/$(git branch --show-current)..HEAD
# empty

# configured remote for 'gh' is 'ggg', which I do not have push access to:
$ git config --get-regexp  'remote.*.gh-resolved'
remote.ggg.gh-resolved base

# Try creating the PR:
$ gh pr create 
? Where should we push the 'fix-linkgit-git1' branch? Skip pushing the branch

Creating pull request for fix-linkgit-git1 into master in gitgitgadget/git

? Title Fix typo in 'linkgit' macro invocation
? Body <Received>
? What's next? Submit

X operation failed. To restore: gh pr create --recover /var/folders/lr/r6n2057j0dzd4gdb614fp0740000gp/T/gh303112606.json

pull request create failed: GraphQL error: Head sha can't be blank, Base sha can't be blank, No commits between master and fix-linkgit-git1, Head ref must be a branch

Another thing I noticed while debugging this: If I choose to open the PR against my own fork (-R phil-blain/git), it works., even if I do not skip pushing the branch.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinggh-prrelating to the gh pr commandp2Affects more than a few users but doesn't prevent core functions

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions