Estou fazendo um git bisect
e depois de chegar ao commit problemático, agora estou tentando dar um passo para frente / para trás para ter certeza de que estou no caminho certo.
Eu sei que devo HEAD^
voltar na história, mas existe outro atalho para me fazer avançar (em direção a um commit específico no futuro) como este:
A - B - C(HEAD) - D - E - F
Eu sei que o meu objectivo é F e quero passar de C para D .
NOTA: esta não é uma duplicata do Git: como ir e voltar entre os commits , minha pergunta é um pouco diferente e não foi respondida lá
git checkout -b new_branch HEAD~4
para voltar 4 commits de HEAD como em stackoverflow.com/a/4940090/911945Respostas:
Eu experimentei um pouco e isso parece funcionar para navegar para frente ( editar : funciona bem apenas quando você tem um histórico linear sem commits de mesclagem):
onde
towards
é um SHA1 do commit ou uma tag.Explicação:
$()
significa: obter todos os commits entre atualHEAD
etowards
commit (excluindoHEAD
), e classificá-los na ordem de precedência (comogit log
por padrão - ao invés da ordem cronológica que é estranhamente o padrãorev-list
), e então pegar o último (tail
), ou seja, aquele para o qual queremos ir.git checkout
para executar uma verificação.Você pode definir uma função acessível como um alias de espera de parâmetro em seu
.profile
arquivo para navegar para o commit específico:fonte
git log
mostra os commits em ordem cronológica, por padrão, o mesmo querev-list
, exceto ao usar o--graph
sinalizador.Tudo que você precisa para ficar claro, não o estado da cabeça separada, é reiniciar, não verificar.
fonte
git reset "HEAD@{1}"
em certas conchas como fish e powershell ..git reflog
também pode ser útil para encontrar o commit correto.git reset HEAD
para voltar para onde estava ... agora não tenho ideia em que estado está meu repositório e tudo é assustador. O que eu deveria fazer agora?Eu acredito que você pode fazer:
Para avançar um compromisso no tempo. Para avançar vários commits, use HEAD @ {2}, HEAD @ {3}, etc.
fonte
É isso que estou usando para navegar para frente e para trás.
movendo para o próximo commit
movendo para o commit anterior
fonte
git checkout <current branch>
anexa ao último commit.git checkout -b <new-branch-name>
do commit atual permite mudanças no novo branch.git rebase -i
também funciona. Além disso , nomeei minhan()
funçãonx()
para evitar conflito com o gerenciador de versão de nó "n". Certifique-se de verificar os aliases!Digamos que F é o commit mais recente
trunk
(insira o nome do seu próprio branch aqui) ... você pode se referir a ele comotrunk~0
(ou apenastrunk
), E astrunk~1
, D astrunk~2
etc.Dê uma olhada em seu reflog para mais maneiras de nomear commits.
fonte
F
e que saiba para onde no histórico desse ramo você deseja ir. Ele não está tentando se mover para frente em relação à CABEÇA, mas menos para trás em relação ao tronco.trunk~2
A?trunk
e sua correnteHEAD
são idênticos, o que não é mostrado na pergunta, o que eu afirmei que não é o que estou assumindo, e que é muito improvável no meio de umbisect
Retroceder é trivial, pois você está descendo na árvore e sempre há um caminho a percorrer
Ao avançar para a frente, você está subindo na árvore, então precisa ser explícito para qual branch você está almejando:
Uso:
git down
,git up <branch-name>
fonte
HEAD^
geralmente seja um padrão razoável.Se você quiser ver mais adiante, pode fazer este truque, já que o Git não tem um comando estrito para isso.
Exemplo
Lista de hashes de histórico de registro:
usando o comando
git log --reverse C..
, na saída você vai ver B e A .fonte
Provavelmente não é a maneira mais agradável, mas você pode usar
git log
para ver a lista de commits e então usargit checkout [sha1 of D]
para mover para D.fonte
Acabei de fazer um teste nisso. digamos, por exemplo, você está no branch master. Faça:
Assim, o head é desconectado e você pode tentar novamente para ir para qualquer outro commit:
Assim que terminar de olhar ao redor, você pode voltar ao seu estado original apenas fazendo check-out naquele branch. No meu exemplo: ramo mestre
Se você não quer ir para o estado original, e quer manter um dos commits como seu cabeçalho e continuar a partir daí, então você precisa ramificar a partir daí. por exemplo, após "git checkout HEAD @ {4}", você pode emitir
fonte
Como solução alternativa, você pode simplesmente retornar ao HEAD com
E então vá para o commit que você gostaria, com
fonte
Se você estiver usando código vs, o histórico do Git é um plugin incrível onde você pode ver com eficiência os commits e verificar seu conteúdo no próprio editor. verifique o link
fonte
Onde:
branchName
é igual ao nome da filialcommitInOrder
é igual a um commit a partir do primeiro commit no branch selecionado (então 1 é o primeiro commit, 2 é o segundo commit no branch, etc.)fonte