Je veux annuler toutes les modifications apportées après commit <commit-hash>
..____.
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 pousses) après <commit-hash>
et je veux juste les supprimer tous. Est-ce juste que quelque chose a mal tourné terriblement et je ne veux pas aggraver la situation? ; (
Je veux fondamentalement rembobiner mon Origin/master
à <commit-hash>
En supposant que votre branche s'appelle master
à la fois ici et à distance, et que votre télécommande s'appelle Origin
, vous pourriez faire:
git reset --hard <commit-hash>
git Push -f Origin master
Toutefois, vous devriez éviter cela si quelqu'un d'autre travaille avec votre référentiel distant et a extrait vos modifications. Dans ce cas, il serait préférable de revenir les commits que vous ne voulez pas, puis Push comme d'habitude.
Mise à jour: vous avez expliqué ci-dessous que d'autres personnes ont retiré les modifications que vous avez effectuées, c'est donc meilleur pour créer un nouveau commit qui annule toutes ces modifications . Il y a une bonne explication de vos options pour ce faire dans cette réponse de Jakub Narębski . La méthode la plus pratique dépend du nombre de commits que vous souhaitez annuler et de la méthode la plus logique pour vous.
Comme il ressort clairement de votre question que vous avez déjà utilisé git reset --hard
pour réinitialiser votre branche master
, vous devrez peut-être commencer par utiliser git reset --hard ORIG_HEAD
pour ramener votre branche là où elle se trouvait auparavant. (Comme toujours avec git reset --hard
, assurez-vous que git status
est propre, que vous êtes sur la bonne branche et que vous êtes au courant de git reflog
en tant qu'outil pour récupérer les commits apparemment perdus. ) Vous devriez également vérifier que ORIG_HEAD
pointe vers le bon commit, avec git show ORIG_HEAD
.
Utilisez les autres réponses si cela ne vous dérange pas de perdre des modifications locales. Cette méthode peut toujours détruire votre télécommande si vous choisissez le hachage de validation incorrect sur lequel vous souhaitez revenir.
Si vous voulez simplement faire en sorte que la télécommande corresponde à un commit déjà dans votre branche locale:
git log
pour trouver le hachage du commit que vous voulez utiliser pour la télécommande. git log -p
pour voir les modifications, ou git log --graph --all --oneline --decorate
pour voir un arbre compact. (Avoir ce dernier comme alias dans votre shell est très pratique.)Exécutez une commande comme:
git Push --force <remote> <the-hash>:<the remote branch>
par exemple.
git Push --force Origin 606fdfaa33af1844c86f4267a136d4666e576cdc:master
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>
Mes deux cents aux réponses précédentes: si
git Push --force <remote> <the-hash>:<the remote branch>
ne fonctionne toujours pas, vous pouvez modifier la section de réception du fichier <your-remote-repo>.git/config
:
[receive]
#denyNonFastforwards = true
denyNonFastforwards = false
Si vous voulez une version précédente du fichier, je vous recommanderais d'utiliser git checkout.
git checkout <commit-hash>
Cela vous renverra dans le temps, cela n’affectera pas l’état actuel de votre projet, vous pourrez accéder à Mainline Git Checkout Mainline
mais lorsque vous ajoutez un fichier dans l'argument, ce fichier vous est renvoyé d'une heure antérieure à l'heure de votre projet actuel, 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 cela est qu’il ne supprime pas l’historique, ni annule les modifications de code particulières (git revert)
Vérifiez plus ici https://www.atlassian.com/git/tutorials/undoing-changes#git-checkout
Si votre branche n'est pas en développement ou en production, le moyen le plus simple d'y parvenir est de réinitialiser localement un certain commit et de créer une nouvelle branche à partir de là. Vous pouvez utiliser:
git checkout 000000
(où 000000 est l'identifiant de validation où vous voulez aller) dans votre branche problématique et créez simplement une nouvelle branche:
git remote add [nom_de_votre_remote]
Ensuite, vous pouvez créer un nouveau PR et tout ira bien!
Sur GitLab, vous devrez peut-être définir votre branche sur sans protection avant de le faire. Vous pouvez le faire dans [référentiel]> 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
Section Apprendre: Annuler les commandes publiques avec Revert sur Atlasssian Blog https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting
Faites une chose, obtenez le n ° SHA du commit. tels que 87c9808 et ensuite,
erreur: échec de pousser certains refs à ' https://github.com/YOURREPOSITORY/AndroidExperiments.git ' Astuce: les mises à jour ont été rejetées car le bout de votre branche actuelle est derrière indice: son homologue à distance. Intégrez les modifications à distance (par exemple .____. Indice: 'git pull ...') avant d'appuyer à nouveau. **
git Push --force Origin master