Question Supprimer les validations d'une branche dans Git


Je voudrais savoir comment supprimer un commit.

Par deleteJe veux dire que c'est comme si je ne m'étais pas engagé, et quand je ferai un effort dans le futur, mes changements ne vont pas pousser à la branche distante.

Je lis l'aide de git, et je pense que la commande que je devrais utiliser est git reset --hard HEAD. Est-ce correct?


2574
2017-08-27 03:39


origine


Réponses:


Prudent:  git reset --hard  SUPPRIMERA VOS CHANGEMENTS DE REPERTOIRE DE TRAVAIL. Assurez-vous de stocker les changements locaux que vous voulez garder avant d'exécuter cette commande.

En supposant que vous êtes assis sur ce commit, alors cette commande va le vaincre ...

git reset --hard HEAD~1

le HEAD~1 signifie l'engagement avant la tête.

Ou, vous pouvez regarder la sortie de git log, recherchez l'ID de validation du commit que vous souhaitez sauvegarder, puis procédez comme suit:

git reset --hard <sha1-commit-id>

Si vous l'avez déjà poussé, vous devrez faire un effort pour vous en débarrasser ...

git push origin HEAD --force

toutefoisSi d'autres l'ont tirée, il vaudrait mieux commencer une nouvelle branche. Parce que quand ils tirent, il va juste fusionner dans leur travail, et vous le ferez remonter à nouveau.

Si vous avez déjà poussé, il peut être préférable d'utiliser git revert, pour créer un commit "image miroir" qui annulera les modifications. Cependant, les deux validations seront dans le journal.


FYI - git reset --hard HEAD C'est génial si vous voulez vous débarrasser de WORK IN PROGRESS. Il vous réinitialisera à la validation la plus récente et effacera tous les changements dans votre arbre de travail et votre index.


Enfin, si vous avez besoin de trouver un commit que vous avez "supprimé", il est généralement présent dans git reflog sauf si vous avez des ordures collectées dans votre dépôt.


3305
2017-08-27 03:44



Si vous n'avez pas encore poussé le commit n'importe où, vous pouvez utiliser git rebase -i pour enlever ce commit. Tout d'abord, découvrez à quelle distance ce commit est (approximativement). Alors fais:

git rebase -i HEAD~N

le ~N signifie rebaser le dernier N commet (N doit être un nombre, par exemple HEAD~10). Ensuite, vous pouvez modifier le fichier que Git vous présente pour supprimer le commit incriminé. Lors de la sauvegarde de ce fichier, Git réécrira tous les commits suivants comme si celui que vous avez supprimé n'existait pas.

Le livre Git a un bon section sur le rebasement avec des images et des exemples.

Soyez prudent avec cela, car si vous changez quelque chose que vous avoir poussé ailleurs, une autre approche sera nécessaire à moins que vous n'ayez l'intention de faire une poussée de la force.


603
2017-08-27 03:51



Une autre possibilité est l'une de mes commandes préférées personnelles:

git rebase -i <commit>~1

Cela va démarrer le rebase en mode interactif -i au moment juste avant le commit que vous voulez frapper. L'éditeur démarrera la liste de tous les commits depuis lors. Supprimez la ligne contenant le commit que vous voulez effacer et sauvegardez le fichier. Rebase fera le reste du travail, supprimant uniquement ce commit, et rejouant tous les autres dans le journal.


416
2017-08-27 03:49



J'ajoute cette réponse parce que je ne vois pas pourquoi quelqu'un qui a juste essayé de commettre le travail voudrait supprimer tout ce travail en raison d'une erreur en utilisant Git!

Si vous voulez garder votre travail et juste annuler cette commande de commit (vous avez attrapé avant de pousser à repo):

git reset --soft HEAD~1

N'utilisez pas le --hard drapeau sauf si vous voulez détruire votre travail en cours depuis le dernier commit.


281
2017-10-15 18:17



Si vous n'avez pas publié de modifications, pour supprimer le dernier commit, vous pouvez le faire

$ git reset --hard HEAD^

(Notez que cela supprime également tous les changements non validés, utilisez avec précaution).

Si vous avez déjà publié un commit à supprimer, utilisez Git Revert

$ git revert HEAD

47
2017-08-27 10:47



Suppression d'un commit entier

git rebase -p --onto SHA^ SHA

Remplacez évidemment "SHA" par la référence dont vous voulez vous débarrasser. Le "^" dans cette commande est littéral.

http://sethrobertson.github.io/GitFixUm/fixup.html


43
2017-08-31 19:36



git reset --hard commitId

git push <origin> <branch> --force

PS: CommitId renvoie celui que vous souhaitez rétablir


33
2017-10-16 09:51