Eu meio que quero o equivalente a cd -
para o git. Se eu estiver no ramo master
e fizer o checkout foo
, adoraria poder digitar algo como git checkout -
voltar master
e digitar novamente para retornar foo
.
Existe algo assim? Seria difícil de implementar?
git
git-checkout
Matt Briggs
fonte
fonte
gc-
ou foi abreviada paragit checkout -
Respostas:
Das notas de versão do 1.6.2
e
fonte
error: pathspec '@-' did not match any file(s) known to git. error: pathspec '@1' did not match any file(s) known to git.
@{u}
, que é o ramo upstream do ramo atual. É muito útil, por exemplo, paragit log @{u}..
quais listas de confirmações upstream que ainda não foram recebidas. E o inverso,git log ..@{u}
que é apenas o commit local que ainda não foi divulgado.A maneira mais simples de fazer isso hoje em dia é:
... que é um alias de:
Se você quiser saber mais sobre isso, escrevi um artigo inteiro aqui: Confira a ramificação anterior no Git .
fonte
for i in{1..10}; do git rev-parse --symbolic-full-name @{-$i}; done
git reflog | ? { $_ -match ': checkout: moving from (.*) to (.*)'} | % { $Matches[1] }
. No bash, você deve escrever algo equivalente (obter reflog e filtrá-lo para linhas que contenham ": checkout:" string e depois extrair o nome do ramo). Este é realmente o que git fazComo o @Karl aponta e do
git checkout
manual:Então, ambos
git checkout -
egit checkout @{-1}
iria trabalhar neste casoMais próximo, eu acredito que está usando ogit reflog
e analisar o mais recentemoving from branch1 to branch2
egit checkout branch1
fonte
Apenas adicionando mais detalhes às respostas anteriores para entender o mecanismo pelo qual
git checkout @{-N}
funciona. Ele percorre o reflog para inspecionar o histórico de checkout; portanto, se você quiser implementar algo semelhante por conta própria, poderá analisar a saída degit reflog
procurarcheckout:
linhas. Você pode verificar a implementação na fonte gitsha1_name.c
, especificamente na funçãointerpret_nth_prior_checkout
.fonte
A versão Git
2.23
introduziu ogit switch
comando que você pode usar para fazer isso (e mais). Citando a documentação oficial:No seu caso específico, você pode emitir
git switch -
para voltar ao ramo em que estava anteriormente. Você pode executar o mesmo comando novamente para retornar à primeira ramificação.PS Não é que você ainda não saiba como fazer isso (quero dizer, já se passaram sete anos desde que você fez essa pergunta), mas esse comando é menos confuso e amigável para iniciantes, pois trata de uma confusão comum que surge ao usar
git checkout
.fonte
Cheguei a essa pergunta com o mesmo pensamento de fazer checkout do meu ramo anterior. Estou usando ohmyz no
Mac
. O comando abaixo me ajudou.fonte
gco
como uma maneira curta de escrevergit checkout
. Então égco -
só ligargit checkout -
.git checkout -
. atualizado à prova de falhas.A solução mais popular é:
Onde N - passo, conte as filiais para voltar ao histórico de checkout.
fonte
Aqui estão os ponteiros para as partes da documentação do Git que descrevem os
git checkout -
egit checkout @{-1}
soluções dadas pelas outras respostas:Ao especificar uma revisão do Git para qualquer comando,, por
@{-<n>}
exemplo,@{-1}
significa “a n- ésima ramificação / confirmação feita antes da atual.” A documentação paragit checkout <branch>
reitera: "Você pode usar a@{-N}
sintaxe para se referir à N-ésima última ramificação / confirmação verificada usando agit checkout
operação".Para o
<branch>
argumento degit checkout
, "você também pode especificar '-
', que é sinônimo de '@{-1}
'."fonte