Git: Recuperar ramo (remoto) eliminado

Eu preciso recuperar dois ramos do Git que de alguma forma eu deletei durante um push.

Estas duas ramificações foram criadas em um sistema diferente e depois enviadas para o meu repositório "compartilhado" (github).

No meu sistema, eu (aparentemente) recuperei os ramos durante uma busca:

~/myfolder> git fetch
remote: Counting objects: 105, done.
remote: Compressing objects: 100% (58/58), done.
remote: Total 62 (delta 29), reused 0 (delta 0)
Unpacking objects: 100% (62/62), done.
From github.com:mygiturl
 * [new branch]      contact_page -> origin/contact_page
   731d1bb..e8b68cc  homepage   -> origin/homepage
 * [new branch]      new_pictures -> origin/new_pictures

Logo depois disso eu fiz um empurrão para enviar minhas alterações locais para o repositório central. Por algum motivo, essas ramificações foram excluídas do meu sistema local e do repositório central:

~/myfolder> git push
Counting objects: 71, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (43/43), done.
Writing objects: 100% (49/49), 4.99 KiB, done.
Total 49 (delta 33), reused 0 (delta 0)
To [email protected]:mygiturl.git
 - [deleted]         contact_page
 + e8b68cc...731d1bb homepage -> homepage (forced update)
   bb7e9f2..e0d061c  master -> master
 - [deleted]         new_pictures
   e38ac2e..bb7e9f2  origin/HEAD -> origin/HEAD
   731d1bb..e8b68cc  origin/homepage -> origin/homepage
   e38ac2e..bb7e9f2  origin/master -> origin/master
 * [new branch]      origin/contact_page -> origin/contact_page
 * [new branch]      origin/new_pictures -> origin/new_pictures

Não é muito fácil tirar os galhos da máquina de nascimento, então eu gostaria de tentar recuperá-los do meu local, se possível.

Todas as informações do git "undo" que eu pesquisei foram recuperadas com commits perdidos. Eu não acho que se aplica aqui, desde que eu não tenha comido UIDs para esses ramos.

Eu gostaria de saber como posso recuperá-los. Eu também gostaria de saber como eles foram excluídos em primeiro lugar e como posso evitar isso no futuro.

EDIT: por solicitação, aqui está a minha configuração repo

user.name=Craig Walker
[email protected]
alias.unadd=reset HEAD
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
[email protected]:MyGitURL.git
remote.origin.mirror=true
branch.master.remote=origin
branch.master.merge=refs/heads/master
alias.undo=reset --hard
alias.test=push -f ci HEAD:master
alias.st=status
alias.ci=commit
alias.br=branch
alias.co=checkout
alias.ch=checkout
alias.df=diff
alias.lg=log -p
alias.who=shortlog -s --
remote.ci.url=ContinuousIntegrationGitURL
remote.ci.fetch=+refs/heads/*:refs/remotes/ci/*
branch.photo.remote=origin
branch.photo.merge=refs/heads/photos
remote.foo.url=FooGitURL
remote.foo.fetch=+refs/heads/*:refs/remotes/cynthia/*
branch.homepage.remote=origin
branch.homepage.merge=refs/heads/homepage

questionAnswers(9)

yourAnswerToTheQuestion