web-dev-qa-db-fra.com

Comment puis-je supprimer un commit sur GitHub?

J'ai "accidentellement" poussé un commit vers GitHub.

Est-il possible de supprimer ce commit?

Je veux restaurer mon référentiel GitHub tel qu'il était avant ce commit.

1591
hectorsq

Remarque: veuillez voir l'alternative à git rebase -i dans les commentaires ci-dessous—

git reset --soft HEAD^

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

Ensuite, forcez Push to GitHub en utilisant git Push Origin +branchName --force

Voir Git Magic Chapitre 5: Leçons de l’histoire - et d’autres pour plus d’informations (par exemple, si vous souhaitez supprimer les anciens commits).

Oh, et si votre arbre de travail est sale, vous devez d'abord faire un git stash, puis un git stash apply.

1130
Can Berk Güder
git Push -f Origin HEAD^:master

Cela devrait "annuler" le Push.

914
Dustin

Pour un retour facile, 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 contre le numéro du commit sur lequel vous voulez revenir.

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
325
CodeWalrus
  1. git log pour trouver le commit que vous voulez annuler

  2. git Push Origin +7f6d03:master tandis que 7f6d03 est la validation avant la validation incorrecte. + était pour force Push

Et c'est tout.

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

91
kate

Si vous souhaitez conserver les modifications de la validation après la 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 à partir du journal:

git log

2 - Réinitialiser git à la référence de commit:

 git reset <commit_ref>

3 - Cachez/stockez les modifications locales du mauvais commit à utiliser plus tard après avoir poussé à distance:

 git stash

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

git Push -f

5 - Récupérer 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 toutes les modifications supplémentaires dont vous avez besoin, puis validez les fichiers nécessaires (ou utilisez un point '.' À la place de 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>" .
52
Loukan ElKadi

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

35
subutux

Utilisez git revert pour annuler votre Push.

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 (pas de modification du commit HEAD).

26
Jyoti Prakash
1. git reset HEAD^ --hard
2. git Push Origin -f

Ce travail pour moi.

22
Hilen

Pour supprimer le commit 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

16
george mano

Supprimez le dernier commit 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
14
Ekambaram E

Vous devez connaître votre hachage de commit à partir du commit auquel vous souhaitez revenir. Vous pouvez l'obtenir à partir d'une URL GitHub telle que: https://github.com/your-organization/your-project/commits/master

Supposons que le hachage du commit (sur lequel vous souhaitez revenir) soit "99fb454" (version longue "99fb45413eb9ca4b3063e07b40402b136a8cf264"), il ne vous reste plus qu'à:

git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264
git Push --force
9
Benny Neugebauer

Recherchez 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 voulez juste revenir en arrière d’un commit, trouvez le début de l’arbitre de ce commit, par exemple, il s’agit de 7f6d03, et le nom de la branche que vous souhaitez modifier, par exemple, il est maître et faire ce qui 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 --force un commit, vous pouvez potentiellement réécrire l’historique des autres personnes qui fusionnent votre branche. Toutefois, si vous décelez rapidement le problème (avant que quiconque d'autre ne fusionne votre branche), vous ne rencontrerez aucun problème.

9
orb

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

Le guide de github sur ceci recommande d'utiliser un outil externe, mais je préfère utiliser l'outil intégré.

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

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 différer 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 voudrez peut-être conserver la sauvegarde locale pendant un moment, au cas où.

6
goncalopp

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. Procédez avec force git Appuyez sur votre référentiel.

git Push -f Origin <branch>

J'espère que cela t'aides!

5
Kent Aguilar

Pour conserver la structure de branchement 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^^
3
Carlos Mafla

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

Vous pouvez parcourir vos commits récents, puis sélectionner un hachage de validation en cliquant sur le bouton "Copier le SHA complet" pour l'envoyer dans le Presse-papiers.

Si votre dernier hachage de validation est, disons g0834hg304gh3084gh (par exemple)

Vous devez courir:

git Push Origin +g0834hg304gh3084gh:master

Utilisez le hachage que vous avez copié précédemment pour en faire la révision "HEAD".

Ajoutez vos modifications locales souhaitées. Terminé ;)

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)
2
M_R_K

si vous voulez supprimer ne rebase interactive,

git rebase -i HEAD~4

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

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

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

2ème méthode, revenez,

git revert 29f4a2 #your commit ID

cela annulera le commit spécifique

0