Git: parecia estar em "(sem ramificação)" e depois perdi minhas alterações


11

Eu estava tentando passar do meu espaço de trabalho do Git para o Github, mas minhas alterações adicionadas e confirmadas não pareciam ser enviadas.

Então, fazendo um "git branch", obtive algo parecido com isto:

git branch
* (no branch)
  master

Tolamente, eu pensei que poderia voltar ao mestre com

git checkout master

e agora minhas mudanças parecem ter passado. Meu ramo principal tem cerca de um dia. E parece que não há como voltar a isso (sem ramificação).

Minhas alterações estão perdidas? Ou existe uma maneira de recuperá-los?

Respostas:


13

Contanto que você não tenha feito um git gc, você não perdeu nada. Tudo o que você precisa fazer é encontrá-lo novamente :) O que você ganha com:

git reflog show

Isso deve mostrar o que aconteceu e o ID do (s) nó (s) ausente (s).


2
Eu faria git reflog sem especificar o mestre. É possível ter confirmações que não estão vinculadas a uma ramificação e, nesse caso, é provável que isso tenha acontecido. Você pode fazer o checkout de uma confirmação em uma nova ramificação para que ela tenha um caminho para ela.
— 9139 Jeff Ferland

Você está certo, provavelmente melhor assim. Minha suposição da pergunta foi que estava no mestre para o commit. Eu atualizei minha resposta.
— CK.

Uau, obrigada! Eu cometi um estoque enorme em nenhum ramo, depois mudei para mestre para fundi-lo ... e fui a minha referência.
— Pascal

Já faz muitos anos, mas eu também pulei nisso. Voltei para o ramo principal e, de repente, puf. Todos os meus 2 dias de trabalho (ou seja, 8 horas por dia) se foram. Muito obrigado!
— Falgantil 25/09/15

5

A resposta acima está correta. Isto é o que eu fiz:

$ git reflog
5b35f6d HEAD@{1}: pull github master: Fast forward
ca92d15 HEAD@{2}: checkout: moving from 759dab1b15731ce7680c26839ca470d20e709e36 to master
759dab1 HEAD@{3}: commit (merge): Merge branch 'master' of github.com:gonzojive/IODB-ui into HEAD
065e269 HEAD@{4}: commit: added fieldsets to snazzy form
f357606 HEAD@{5}: commit: preliminary support for google maps.
ca92d15 HEAD@{6}: checkout: moving from master to ca92d15d272867b63d54f96d4aa57f8ecc479cd0

$ git checkout ca92d15d272867b63d54f96d4aa57f8ecc479cd0

O "Oh não!" momento é este:

checkout: moving from master to ca92d15d272867b63d54f96d4aa57f8ecc479cd0

ca92d15d272867b63d54f96d4aa57f8ecc479cd0 é o ramo anônimo que aparece como (sem ramo). Para voltar a ele, basta fazer um check-out do git e seu pseudobranch antigo é restaurado.

Eu recomendo fazer o backup do seu repositório git antes de acidentalmente obtê-lo, apenas para ficar tranquilo.


Simplesmente verificar o ramo não funcionou para mim. Minhas alterações foram feitas corretamente no meu ramo de recursos. Ainda não consegui vê-los no meu espaço de trabalho. Eu devo ter perdido minhas mudanças de alguma forma. No entanto, eu poderia recuperar minhas alterações executando git reset --hard <commit-id>. O ID de confirmação é o código alfanumérico na primeira coluna de git reflog. Consulte effectif.com/git/recovering-lost-git-commits .
— Torsten

2
# if you have already checked out to master, 
# you won't know the commit-ish of your "no branch":

git fsck --lost-found # (to find your <commit-ish>)
git merge <commit-ish>

# if you are still on your "no branch" commit:

git log # (the commit-ish will be on the first line)
git checkout master
git merge <commit-ish>

# or

git log | head -n 1 | cut -d ' ' -f 2 | pbcopy
git checkout master
git merge <commit-ish>

De muitas maneiras, incluindo rev-list, apenas o fsck ajudou a encontrar o commit sem ramificação. Muito obrigado.
— temoto
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.