Como mudar para o commit específico do Git sem perder todos os commits feitos depois dele ?
Quero que os arquivos locais sejam alterados, mas o banco de dados das confirmações permanecerá intacto, apenas o ponteiro da posição atual está definido como confirmação atualmente selecionada.
Desejo alterar o estado dos arquivos para confirmação específica, executar o projeto e, quando terminar, restaurar os arquivos de volta à última confirmação.
Como fazer isso sem compactar a pasta do projeto inteiro?
Respostas:
Se você estiver em um determinado ramo
mybranch
, vá em frente egit checkout commit_hash
. Então você pode retornar ao seu ramo porgit checkout mybranch
. Eu tive o mesmo jogo dividindo um bug hoje :) Além disso, você deve saber sobre o git bisect .fonte
git checkout commit_hash
se estiver em um repositório limpo e não precisar fazer ramificações. Pode ser mais fácil para alguns casos de uso (como o meu).git bisect
referência; que ferramenta extremamente útil!Primeiro, use
git log
para ver o log, escolha a confirmação desejada, anote o hash sha1 usado para identificar a confirmação. Em seguida, corragit checkout hash
. Depois que você terminargit checkout original_branch
,. Isso tem a vantagem de não mover o HEAD, simplesmente muda a cópia de trabalho para um commit específico.fonte
git checkout <original_branch>
.git checkout HEAD
é efectivamente um NOOPgit reset --hard <hash>
altera o HEAD da ramificação atual, enquantogit checkout <hash>
você recebe um checkout desanexado que não altera nenhuma ramificação, e você pode retornar facilmente sem conhecer o hash ID original de sua ramificação, como mostrado nesta resposta.Além das outras respostas aqui, mostrando como
git checkout <the-hash-you-want>
vale a pena saber que você pode voltar para onde estava usando:Isso geralmente é mais conveniente do que:
Como você pode antecipar,
git checkout @{-2}
o levará de volta ao ramo em que se encontravagit checkout
há dois segundos e da mesma forma para outros números. Se você se lembra de onde estava para números maiores, deveria receber algum tipo de medalha por isso.Infelizmente para a produtividade,
git checkout @{1}
não o leva ao ramo em que você estará no futuro, o que é uma pena.fonte
git checkout -
é um apelido abreviado paragit checkout @{-1}
@{n}
sintaxe geral , pois ela funciona com muitos comandos git. Achei difícil adicionar sua abreviação sem tornar a resposta um pouco confusa. Em vez disso, votei no seu comentário - espero que as pessoas o vejam. Obrigado novamente.git merge -
para mesclar o ramo que você fez check-out pela última vez no ramo que fez check-out no momento. É comocd -
no bash.