Je veux faire un git pull
mais seulement jusqu'à un commit spécifique.
A->B->C->D->E->F (Remote master HEAD)
alors supposez que mon local master
HEAD pointe vers B
, et je veux tirer jusqu'à E
. Que dois-je faire?
Ce n'est pas tirer un commit spécifique, c'est tirer jusqu'à un commit spécifique.
git pull
n'est rien d'autre que git fetch
suivi par git merge
. Donc ce que vous pouvez faire c'est
git fetch remote example_branch
git merge <commit_hash>
Commencez par récupérer les derniers commits du dépôt distant. Cela n'affectera pas votre succursale locale.
git fetch Origin
Ensuite, vérifiez la branche de suivi à distance et faites un journal git pour voir les commits
git checkout Origin/master
git log
Prenez le hash de commit du commit que vous voulez fusionner jusqu'à (ou juste les 5 premiers caractères de celui-ci) et fusionnez-le en master
git checkout master
git merge <commit hash>
Si vous fusionnez un commit dans votre branche, vous devriez obtenir tout l'historique entre.
Observer:
$ git init ./ Inscriptible git vide initialisé dans /Users/dfarrell/git/demo/.git/ $ echo 'a'> lettre $ git ajouter une lettre $ git commit -m 'Lettre initiale' [maître (root-commit) 6e59e76] Lettre initiale 1 fichier modifié, 1 insertion (+) Créer le mode 100644 lettre $ echo 'b' >> lettre $ git ajouter une lettre && git commit -m 'Ajouter une lettre' [maître 7126e6d] Ajouter une lettre 1 fichier modifié, 1 insertion (+) $ Echo 'c' >> lettre; git ajouter une lettre && git commit -m 'Ajouter une lettre' [maître f2458be] Ajouter une lettre 1 fichier modifié, 1 insertion (+) $ echo 'd' >> lettre ; git ajouter une lettre && git commit -m 'Ajouter une lettre' [maître 7f77979] Ajouter une lettre 1 fichier modifié, 1 insertion (+) $ echo 'e' >> lettre ; git ajouter une lettre && git commit -m 'Ajouter une lettre' [maître 790eade] Ajouter une lettre 1 fichier modifié, 1 insertion (+) $ git log commit 790eade367b0d8ab8146596cd717c25fd895302a Auteur: Dan Farrell Date: jeu 16 juillet 14:21:26 2015-0500 Lettre additionnelle commit 7f77979efd17f277b4be695c559c1383d2fc2f27 Auteur: Dan Farrell Date: jeu 16 juil 14:21:24 2015-0500 Lettre d’ajout commit f2458bea7780bf09fe643095dbae95cf97357ccc Auteur: Dan Farrell Date: jeu 16 juil 14:21:19 2015-000 Lettre additionnelle commit 7126e6dcb9c28ac60cb86ae40fb358350d0c5fad Auteur: Dan Farrell Date: jeu 16 juil 14:20:52 2015-0500 Ajouter lettre commit 6e59e7650314112fb80097d7d3803c964b3656f0 Auteur: Dan Farrell Date: jeu 16 juillet 14:20:33 2015-0500 Lettre initiale . $ git ch eck 6 6 6 en Français Vous pouvez regarder autour de vous, faire des modifications expérimentales de Et les valider, et vous pouvez supprimer tous les commits que vous avez effectués dans cet état Sans impacter les branches en effectuant une autre vérification. .] Si vous voulez créer une nouvelle branche pour conserver les commits que vous créez, vous pouvez le faire (maintenant ou plus tard) en utilisant -b à nouveau avec la commande checkout. Exemple: Git checkout -b nouveau_nom_du_groupe HEAD est maintenant à 7126e6d ... Ajout de la lettre $ Git checkout -b B 7126e6dcb9c28c60cb86ae40fb358350. .____.] Passée à une nouvelle couche 'B' $ Git pull référentiel distant. Assurez-vous de disposer des droits d'accès appropriés et que le référentiel existe. $ git merge 7f77979efd17f277b4be695c559c1383d2fc2f27 Mise à jour 7126e6d .. 7f77979 Avance rapide Lettre | 2 ++ 1 fichier modifié, 2 insertions (+) $ Lettre cat. A B C D
Vous pouvez également extraire le dernier commit et l'annuler jusqu'à ce que vous le désiriez:
git pull Origin master
git reset --hard HEAD~1
Remplacez master
par votre branche souhaitée.
Utilisez le journal git pour voir à quel commit vous voudriez revenir:
git log
Personnellement, cela a mieux fonctionné pour moi.
Fondamentalement, cela extrait la dernière validation, et vous rétablissez manuellement les validations une par une. Utilisez git log afin de voir l'historique de validation.
Bons points: Fonctionne comme annoncé. Vous n'avez pas besoin d'utiliser commit hash ou de tirer des branches inutiles.
Mauvais points: Vous devez annuler les commits par un.
ATTENTION: Valider/conserver toutes vos modifications locales, car avec --hard
vous allez les perdre. A utiliser à vos risques et périls!