Question

I & "accidentellement &"; poussé un commit vers GitHub.

Est-il possible de supprimer ce commit?

Je souhaite rétablir le référentiel GitHub tel qu'il était avant cette validation.

Était-ce utile?

La solution

  

Remarque: dans les commentaires ci-dessous, veuillez consulter la solution de rechange à git rebase -i & # 8212;

     

git reset --soft HEAD^

Commencez par supprimer le commit sur votre référentiel local. Vous pouvez le faire en utilisant git rebase -i HEAD~2. Par exemple, s'il s'agit de votre dernière validation, vous pouvez effectuer git push origin +branchName --force et supprimer la deuxième ligne dans la fenêtre de l'éditeur qui apparaît.

Ensuite, forcez le push sur GitHub en utilisant git stash

Voir Git Magic Chapitre 5: Leçons sur l'histoire - Et Ensuite pour plus d’informations (par exemple, si vous souhaitez supprimer les anciennes modifications).

Oh, et si votre arbre de travail est sale, vous devez d'abord faire un git stash apply, puis un <=> après.

Autres conseils

git push -f origin HEAD^:master

Cela devrait & "annuler" & "; la poussée.

Pour revenir facilement s'il ne s'agit que d'une erreur (peut-être avez-vous créé un référentiel, puis avez-vous poussé vers l'original au lieu d'un nouveau)? Voici une autre possibilité:

git reset --hard 71c27777543ccfcb0376dcdd8f6777df055ef479

Évidemment, permutez ce nombre par le numéro du commit sur lequel vous voulez retourner.

Tout ce qui s’est passé depuis sera supprimé une fois que vous aurez appuyé à nouveau. Pour ce faire, la prochaine étape serait:

git push --force
  1. git log pour connaître le commit que vous souhaitez annuler

  2. git push origin +7f6d03:master tandis que 7f6d03 est le commit avant le commit mal poussé. + était pour force push

Et c'est tout.

Voici est un très bon guide qui résout votre problème, facile et simple!

Si vous souhaitez conserver les modifications de validation après leur suppression:

Notez que cette solution fonctionne si la validation à supprimer est la dernière validée.

1 - Copiez la référence de validation à laquelle vous souhaitez revenir du journal:

git log

2 - Réinitialisez git à la référence de validation:

 git reset <commit_ref>

3 - Stockez / stockez les modifications locales du mauvais commit à utiliser plus tard après le transfert à distance:

 git stash

4 - Transférez les modifications dans le référentiel distant, (-f ou --force):

git push -f

5 - Récupérez les modifications stockées dans le référentiel local:

git stash apply

7 - Si vous avez des fichiers non suivis / nouveaux dans les modifications, vous devez les ajouter à git avant de valider:

git add .

6 - Ajoutez les modifications supplémentaires dont vous avez besoin, puis validez les fichiers nécessaires (ou utilisez un point '.' au lieu d'indiquer chaque nom de fichier, pour valider tous les fichiers du référentiel local:

git commit -m "<new_commit_message>" <file1> <file2> ...

ou

git commit -m "<new_commit_message>" .

Vous devrez vider votre cache pour le vider complètement. cette page d'aide de git vous aidera. (ça m'a aidé) http://help.github.com/remove-sensitive-data/

Utilisez git revert pour annuler votre diffusion.

  

git-revert - Annule des commits existants

git revert [--edit | --no-edit] [-n] [-m parent-number] [-s] <commit>...
git revert --continue
git revert --quit
git revert --abort

Annulez les modifications introduites par les correctifs associés et enregistrez de nouveaux commits qui les enregistrent. Cela nécessite que votre arbre de travail soit propre (aucune modification de la validation HEAD).

1. git reset HEAD^ --hard
2. git push origin -f

Ce travail pour moi.

Pour supprimer la validation du référentiel distant:

 git push -f origin last_known_good_commit:branch_name

Pour supprimer le commit de votre référentiel local:

git reset --hard HEAD~1

lien

Supprimez la dernière validation en conservant le travail que vous avez effectué:

git reset --soft HEAD~1

Supprimez le dernier commit en détruisant le travail que vous avez effectué:

git reset --hard HEAD~1

Trouvez la spécification de référence du commit que vous voulez être la tête de votre branche sur Github et utilisez la commande suivante:

git push origin +[ref]:[branchName]

Dans votre cas, si vous souhaitez simplement revenir en arrière sur une validation, recherchez le début de l’arrière de cette référence, par exemple, il s’agit de 7f6d03, et le nom de la branche que vous souhaitez modifier, par exemple, c’est maître et procédez comme suit:

git push origin +7f6d03:master

Le caractère plus est interprété comme --force, ce qui sera nécessaire puisque vous réécrivez l'historique.

Notez que chaque fois que vous <=> effectuez un commit, vous pouvez potentiellement réécrire l'historique d'autres personnes qui fusionnent votre branche. Cependant, si vous décelez rapidement le problème (avant que quiconque d'autre ne fusionne votre branche), vous ne rencontrerez aucun problème.

Vous devez connaître votre hachage de commit à partir du commit sur lequel vous souhaitez revenir. Vous pouvez l'obtenir à partir d'une URL GitHub telle que: https://github.com/your -organisation / votre-projet / commits / maître

Supposons que le hachage du commit (vers lequel vous souhaitez revenir) est & "99fb454 &"; (version longue & "; 99fb45413eb9ca4b3063e07b40402b136a8cf264 &";), tout ce que vous avez à faire est:

git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264
git push --force

Si vous faites cela parce que vous avez des données sensibles dans un commit, il n'est pas sûr d'utiliser les autres réponses ici (à l'exception des subutux, que je développerai plus loin).

Le guide github à ce sujet recommande d'utiliser un outil externe, mais je préférez utiliser celui qui est intégré.

Tout d'abord, effectuez une sauvegarde de votre référentiel . Puis:

git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' \
--prune-empty --tag-name-filter cat -- --all

Après cela, assurez-vous que le référentiel est dans l'état souhaité . Vous voudrez peut-être vous différencier de la sauvegarde.

Si vous êtes sûr que c'est correct, alors:

#get rid of old unreferenced commits (including the data you want to remove)
git gc --prune=now
git push origin --force --all

Vous pouvez conserver la sauvegarde locale pendant un moment, au cas où.

Exécutez cette commande sur votre terminal.

git reset HEAD~n

Vous pouvez supprimer les n derniers commits du référentiel local, par exemple. TÊTE ~ 2. Continuez avec force git push sur votre référentiel.

git push -f origin <branch>

J'espère que ça aide!

Pour conserver la structure de ramification et de fusion, il est important d'utiliser l'option --preserve-merges lors de la création d'une base:

git rebase --preserve-merges -i HEAD^^

Enregistrez d'abord vos modifications locales quelque part sur le côté (sauvegarde)

Vous pouvez parcourir vos commits récents, puis sélectionner un hachage de validation en cliquant sur " Copier l'intégralité du SHA " bouton pour l'envoyer au presse-papier.

Si votre dernière valeur de validation est, disons g0834hg304gh3084gh (par exemple)

Vous devez exécuter:

git push origin +g0834hg304gh3084gh:master

Utilisation du hachage que vous avez copié précédemment pour en faire le & "HEAD &"; révision.

Ajoutez vos modifications locales souhaitées. Fait;)

Pour GitHub

  • Réinitialisez vos commits (HARD) dans votre référentiel local
  • Créer une nouvelle branche
  • Poussez la nouvelle branche
  • Supprimer l'ancienne branche (en créer une nouvelle comme branche par défaut si vous supprimez la branche principale)

si vous souhaitez supprimer une rebase interactive,

git rebase -i HEAD~4

4 represents total number of commits to display count your commit and changez-le en conséquence

et supprimez la validation que vous voulez dans la liste ...

enregistrer les modifications avec Ctrl + X (ubuntu) ou : wq (centos)

2ème méthode, revenez,

git revert 29f4a2 #your commit ID

cela annulera la validation spécifique

Ce n’est pas très bien de ré-écrire l’histoire. Si nous utilisons git revert <commit_id>, cela créera une validation propre de cet identifiant de validation.

De cette façon, l’histoire n’est pas réécrite, mais tout le monde sait qu’il ya eu un retour.

Ajoutez / supprimez des fichiers pour que tout se passe comme vous le souhaitez:

git rm classdir
git add sourcedir

Modifiez ensuite le commit:

git commit --amend

Le commit précédent, erroné, sera édité pour refléter le nouvel état d'index. En d'autres termes, ce sera comme si vous n'aviez jamais commis l'erreur à la première place

Notez que vous ne devriez faire cela que si vous n'avez pas encore poussé. Si vous avez poussé, il vous suffira de commettre un correctif normalement.

Dans GitHub Desktop , vous pouvez cliquer avec le bouton droit de la souris sur la validation et la rétablir, ce qui créera une nouvelle validation. qui annule les modifications.

La validation accidentelle sera toujours dans votre historique (ce qui peut poser problème si, par exemple, vous avez validé par erreur une clé d'API ou un mot de passe), mais le code est annulé.

C’est l’option la plus simple et la plus simple, la réponse acceptée est plus complète.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top