I need to delete a remote branch, and found this technique:
> git push origin :the_remote_branch
I tried passing it to `Network`s `Push` method in the following forms, but nothing seems to work (`options` is my login credentials):
_repo.Network.Push(_repo.Network.Remotes["origin"], "origin/:NewBranchForDeletion", options)
_repo.Network.Push(_repo.Network.Remotes["origin"], ":NewBranchForDeletion", options)
_repo.Network.Push(_repo.Network.Remotes["origin"], ":origin/NewBranchForDeletion", options)
_repo.Network.Push(_repo.Network.Remotes["origin"], ":refs/remotes/:origin/NewBranchForDeletion", options)
_repo.Network.Push(_repo.Network.Remotes["origin"], ":refs/remotes/origin/NewBranchForDeletion", options)
_repo.Network.Push(_repo.Network.Remotes["origin"], "refs/heads/:origin/NewBranchForDeletion", options)
_repo.Network.Push(_repo.Network.Remotes["origin"], "refs/heads/:NewBranchForDeletion", options)
And a few other options. I cannot get it to work at all, it returns errors such as (for the ":NewBranchForDeletion" method):
> Not a valid reference "NewBranchForDeletion"
### Update:
Thanks to @Rob for finding me this comment on LibGit2Sharp's repo: https://github.com/libgit2/libgit2sharp/issues/466#issuecomment-21076975
The first option fails with a `NullReferenceException` on `objectish`, and using `string.Empty` for `objectish` results in the error mentioned above. The second option is what I am trying, except I am using the version with HTTPS validation:
repo.Network.Push(repo.Remotes["my-remote"], objectish: null, destinationSpec: "my-branch");
// Or using a refspec, like you would use with git push...
repo.Network.Push(repo.Remotes["my-remote"], pushRefSpec: ":my-branch");
As stated in the **[documentation](https://git-scm.com/docs/git-push)**, a refspec _"Specif(ies) what destination ref to update with what source object. The format of a <refspec> parameter is an optional plus `+`, followed by the source object <src>, followed by a colon `:`, followed by the destination ref <dst>."_
It also mentions that _"Pushing an empty <src> allows you to delete the <dst> ref from the remote repository."_
Considering these above, using the `void Push(Remote remote, string pushRefSpec)` overload, and passing `:refs/heads/branch_to_delete` as the `pushRefSpec` should do the trick.