Question Réinitialisation à distance d'un certain commit


Je veux supprimer toutes les modifications effectuées après la validation <commit-hash> . Alors j'ai fait:

git reset --hard <commit-hash>

Maintenant, je veux faire la même chose avec ma télécommande. Comment puis-je faire ceci? J'ai fait quelques commits (et pousse) après <commit-hash> et je veux juste les jeter tous. Est-ce que quelque chose est allé terriblement mal dans le chemin et je ne veux pas le rendre pire qu'il ne l'est déjà. (

Je veux fondamentalement rembobiner mon origin/master à <commit-hash>


425
2018-04-28 09:46


origine


Réponses:


En supposant que votre branche s'appelle master ici et à distance, et que votre télécommande est appelée origin vous pourriez faire:

 git reset --hard <commit-hash>
 git push -f origin master

Cependant, vous devriez éviter de le faire si quelqu'un d'autre travaille avec votre dépôt distant et a retiré vos modifications. Dans ce cas, il serait préférable de revenir les commits que vous ne voulez pas, puis en poussant comme d'habitude.

Mettre à jour: Vous avez expliqué ci-dessous que d'autres personnes ont apporté les modifications que vous avez apportées, il est donc préférable de créer un nouveau commit qui annule tous ces changements. Il y a une bonne explication de vos options pour le faire dans cette réponse de Jakub Narębski. La méthode la plus pratique dépend du nombre d’engagements que vous souhaitez rétablir et de la méthode qui vous convient le mieux.

Depuis votre question, il est clair que vous avez déjà utilisé git reset --hard pour réinitialiser votre master branche, vous devrez peut-être commencer par utiliser git reset --hard ORIG_HEAD pour ramener votre succursale là où elle était avant. (Comme toujours avec git reset --hard, sois sûr que git status est propre, que vous êtes sur la bonne branche et que vous êtes au courant de git reflog comme un outil pour récupérer des commits apparemment perdus.) Vous devriez également vérifier que ORIG_HEAD points à droite commettre, avec git show ORIG_HEAD.


756
2018-04-28 09:54



Utilisez les autres réponses si cela ne vous dérange pas de perdre des changements locaux. Cette méthode peut toujours détruire votre télécommande si vous choisissez le mauvais hachage de validation pour revenir à.

Si vous voulez juste faire de la correspondance distante un commit qui se trouve déjà dans votre branche locale:

  1. Faire ne pas faire une réinitialisation.
  2. Utilisation git log pour trouver le hachage du commit auquel vous voulez que la télécommande soit. git log -p pour voir les changements, ou git log --graph --all --oneline --decorate pour voir un arbre compact. (Avoir ce dernier comme alias dans votre shell est très pratique.)
  3. Copiez le hachage.
  4. Exécuter une commande comme:

    git push --force <remote> <the-hash>:<the remote branch>
    

    par exemple.

    git push --force origin 606fdfaa33af1844c86f4267a136d4666e576cdc:master
    

59
2017-11-14 02:11



J'ai résolu le problème comme le vôtre avec ces commandes:

git reset --hard <commit-hash> 
git push -f <remote> <local branch>:<remote branch> 

50
2018-03-07 12:20



Mes deux cents aux réponses précédentes: si

git push --force <remote> <the-hash>:<the remote branch>

ne fonctionne toujours pas, vous voudrez peut-être modifier <your-remote-repo>.git/config section de réception du fichier:

[receive]
  #denyNonFastforwards = true
  denyNonFastforwards = false

4
2017-12-22 09:51



Si vous voulez une version précédente du fichier, je vous recommande d’utiliser git checkout.

git checkout <commit-hash>

Faire cela vous renverra dans le temps, cela n'affecte pas l'état actuel de votre projet, vous pouvez venir sur la ligne principale     git checkout ligne principale

mais lorsque vous ajoutez un fichier dans l'argument, ce fichier vous est renvoyé d'une heure précédente à l'heure actuelle de votre projet, c'est-à-dire que votre projet actuel est modifié et doit être validé.

git checkout <commit-hash> -- file_name
git add .
git commit -m 'file brought from previous time'
git push

L'avantage de ceci est qu'il ne supprime pas l'historique, et qu'aucun ne modifie un changement de code particulier (git revert)

Vérifiez plus ici https://www.atlassian.com/git/tutorials/undoing-changes#git-checkout


3
2018-05-06 02:00



Fais une chose, obtenir le numéro SHA du commit comme 87c9808 et puis,

  1. bouge toi-même, c'est ta tête au commit spécifié (en faisant git reset --hard 89cef43 // mentionne ton numéro ici)
  2. Ensuite, faites quelques changements dans un fichier aléatoire, de sorte que le git vous demande de le valider localement, puis à distance Ainsi, ce que vous devez faire maintenant est. après application du changement git commit -a -m "trial commit"
  3. Maintenant, poussez la validation suivante (si celle-ci a été validée localement) par git pousser le maître d'origine
  4. Maintenant ce que git demandera de vous est que

erreur: n'a pas réussi à pousser certaines références à   'https://github.com/YOURREPOSITORY/AndroidExperiments.git'   indice: les mises à jour ont été rejetées parce que le bout de votre branche actuelle est derrière   indice: son homologue à distance. Intégrez les modifications à distance (par ex.   indice: 'git pull ...') avant de pousser à nouveau. **

  1. Donc maintenant ce que vous pouvez faire est

git push --force origin master

  1. Et donc, j'espère que ça marche :)

1
2017-07-18 09:16



Sur GitLab, vous devrez peut-être définir votre branche sur non protégé avant de faire ça. Vous pouvez le faire dans [repo]> Paramètres> Référentiel> Branches protégées. Ensuite, la méthode de la réponse de Mark fonctionne.

git reset --hard <commit-hash>
git push -f origin master

1
2018-01-04 17:04



Section d'apprentissage: Annuler les commits publics avec le retour sur Atlasssian Blog https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting 


0
2018-05-23 04:55