Recentemente, mudei de SVN para Git e estou um pouco confuso com alguma coisa. Eu precisava executar a versão anterior de um script por meio de um depurador, então fiz git checkout <previous version hash>
e fiz o que precisava fazer.
Agora quero voltar para a versão mais recente, mas não conheço o hash. Quando digito git log
, não vejo.
Como posso fazer isso? Além disso, existe uma maneira mais fácil de alterar versões do que digitando hashes - algo como "voltar duas versões" ou "ir para a mais recente cronologicamente"?
git
git-checkout
Nathan Long
fonte
fonte
git checkout master
é exatamente como eu volto de um ramo. Então, isso significa que, quando eu faço check-out de uma versão anterior, estou essencialmente criando um ramo?git log
será exibido em relação a esse ponto? E quando faço o checkout master, movo o ponteiro para a versão mais recente do branch master?git checkout
é uma maneira de movimentar a cabeça. Quando você desanexou o HEAD, você apontou diretamente para o commit fornecido; quando você faz check-out do master novamente, ele aponta novamente para o master. (E muitos comandos comogit log
realmente ter um intervalo de revisões, cujo padrão é HEAD.)Quando você faz o checkout para uma confirmação específica, o git cria uma ramificação desanexada. Então, se você ligar para:
Você verá algo como:
Para voltar ao chefe da ramificação principal, você só precisa fazer o checkout para sua ramificação principal:
Este comando excluirá automaticamente a ramificação desanexada.
Se
git checkout
não funcionar, você provavelmente modificou arquivos conflitantes entre ramificações. Para impedir que você perca o código, o git exige que você lide com esses arquivos. Você tem três opções:Esconda suas modificações (você pode abri-las mais tarde):
Descarte as alterações que redefinem a ramificação desanexada:
Crie uma nova ramificação com as modificações anteriores e confirme-as:
Depois disso, você pode voltar ao seu ramo principal (versão mais recente):
fonte
Isso fez o truque para mim (eu ainda estava no ramo mestre):
fonte
Para retornar à versão mais recente:
Por exemplo,
git checkout master
ougit checkout dev
fonte
Você pode fazer o check-out usando nomes de filiais, por um lado.
Eu sei que existem várias maneiras de mover o HEAD, mas deixarei para um especialista em git enumerá-las.
Eu só queria sugerir
gitk --all
- achei extremamente útil ao começar com o git.fonte
Eu estou apenas começando a cavar mais fundo em git, então não tenho certeza se eu entendi corretamente, mas acho que a resposta correta à pergunta do OP é que você pode executar
git log --all
com uma especificação de formato como este:git log --all --pretty=format:'%h: %s %d'
. Isso marca a versão atual com check-out como(HEAD)
e você pode simplesmente pegar a próxima da lista.BTW, adicione um alias como este ao seu
.gitconfig
com um formato um pouco melhor e você poderá executargit hist --all
:Em relação às versões relativas, encontrei este post , mas ele fala apenas sobre versões mais antigas, provavelmente não há nada para se referir às versões mais recentes.
fonte
Algumas das respostas aqui assumem que você está no ramo principal antes de decidir fazer o checkout de um commit mais antigo. Isso não é sempre o caso.
Irá apontar você de volta para o ramo em que estava anteriormente (independentemente de ser mestre ou não).
fonte
git checkout hash2
depoisgit checkout hash1
,git checkout -
o levará de volta parahash1
.Quando você volta para uma versão anterior,
Você pode ver seu log de recursos (hash) com este comando, mesmo nesta situação;
master
pode ser substituído por outro nome de filial.Em seguida, faça o checkout, você poderá voltar ao recurso.
fonte
Com o Git 2.23+ (agosto de 2019), a melhor prática seria usar em
git switch
vez do comando confusogit checkout
.Para criar uma nova ramificação com base em uma versão mais antiga:
Para voltar ao ramo principal atual:
fonte
Uma solução mais elegante e simples é usar
Ele retornará à versão local mais ressentida da ramificação e também salvará suas alterações no stash; portanto, se você quiser desfazer esta ação, faça:
fonte