Eu quero fazer um, git pull
mas apenas até um commit específico.
A->B->C->D->E->F (Remote master HEAD)
então suponha que meu local master
HEAD aponta para B
, e eu quero puxar até E
. O que devo fazer ?
Isso não está puxando um commit específico, mas sim um commit específico.
git fetch
egit merge E
.Respostas:
git pull
nada mais é quegit fetch
seguido porgit merge
. Então o que você pode fazer égit fetch remote example_branch
git merge <commit_hash>
fonte
git merge E
irá mesclarE
junto com todos os seus ancestraisC
eD
(git sabe dissoA
eB
não precisa ser mesclado porque eles já estavam em seu branch). Se você deseja APENAS as mudanças de,E
então você devegit cherry-pick E
.Primeiro, busque os últimos commits do repositório remoto. Isso não afetará sua filial local.
Em seguida, verifique o branch de rastreamento remoto e faça um registro git para ver os commits
Pegue o hash do commit que você deseja mesclar (ou apenas os primeiros 5 caracteres dele) e mescle esse commit no master
fonte
git fetch
antes de escrever tal absurdo. Além disso, você deve ler a pergunta original e minha resposta. Se você seguir minha resposta, você não estará "de volta na história", como instruo explicitamente o usuário a fazergit checkout master
. No geral, por favor, não poste coisas se você não tiver pelo menos 50% de clareza sobre o que faz.git fetch origin
busca explicitamente a origem .Você também pode puxar o último commit e apenas desfazer até o commit que você deseja:
Substitua
master
pelo ramo desejado.Use o git log para ver para qual commit você gostaria de reverter:
Pessoalmente, isso funcionou melhor para mim.
Basicamente, o que isso faz é puxar o último commit, e você reverter manualmente os commits um por um. Use git log para ver o histórico de commits.
Pontos positivos : funciona conforme anunciado. Você não tem que usar commit hash ou pull de branches desnecessários.
Pontos ruins: você precisa reverter os commits em um.
AVISO: Faça commit / stash de todas as suas mudanças locais, porque com
--hard
você você vai perdê-las. Use por sua conta e risco!fonte
HEAD
antes de voltar - e eu não sei o que aconteceria se você tivesse que resolver conflitos. Mas esta solução permitegit pull --rebase
, e ao contrário do que foi dito, você pode redefinir diretamente para osN
commits anteriores comgit reset --hard HEAD~N
(ou seja, para 3 commits,git reset --hard HEAD~3
).git reset --hard SHA
e ele irá redefinir para o commit que você deseja, sem necessidade de contar para trás.Se você mesclar um commit em seu branch, você deve obter todo o histórico entre eles.
Observar:
fonte
Eu encontrei a resposta atualizada deste vídeo , a resposta aceita não funcionou para mim.
Primeiro clone o repo mais recente do git (se não tiver) usando
git clone <HTTPs link of the project>
(ou usando SSH) e depois vá para o branch desejado usandogit checkout <branch name>
.Use o comando
para verificar os últimos commits. Copie o shal do commit específico. Então use o comando
Depois de pressionar a tecla Enter. Agora use o comando
Agora, o commit particular estará disponível para seu local. Mude qualquer coisa e empurre o código usando
git push origin <branch name>
. Isso é tudo. Verifique o vídeo para referência.fonte
Isso funciona para mim:
por exemplo
Isso puxa 28eb00, ff39e4 e tudo antes, mas não puxa f4d10ad. Ele permite o uso de pull --rebase e respeita as configurações de pull em seu gitconfig. Isso funciona porque você está basicamente tratando 28eb00 como um branch.
Para a versão do git que estou usando, esse método requer um hash de confirmação completo - sem abreviações ou apelidos são permitidos. Você poderia fazer algo como:
fonte