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.