web-dev-qa-db-fra.com

comment écraser les commits avec les nouveaux sur git?

Je travaille donc sur un projet sensible avec un groupe et toutes nos sources sont sur Github. J'ai récemment poussé un commit et me suis rendu compte par la suite qu'il y avait beaucoup d'erreurs dans mon Push. Depuis, j'ai corrigé toutes ces erreurs sur ma copie locale et je suis sur le point de pousser à nouveau. Cependant, y a-t-il un moyen de pousser et d'écraser mon dernier commit? Ma raison est, je ne veux pas que les autres consultent mon commit initial et les changements qu'il a subis ... 

Fondamentalement, je veux écraser l'ancien commit avec mon nouveau.

Toute aide serait appréciée! Je vous remercie.

NOTE: Je viens de remarquer que cette question a été marquée comme un doublon. Pour clarifier, ma question concerne le remplacement d'un commit qui a déjà été poussé. Ma question ne concerne PAS la modification d'un message de validation incorrect.

16
sparta93

Habituellement, une fois que quelque chose est sorti sur Github (ou sur un dépôt public), il n’ya aucun moyen de faire sûr personne d’autre n’a le mauvais commit.

Si vous voulez simplement un historique de code plus propre, la façon de faire ce que vous demandez vous oblige à écraser l'historique à la fois localement et sur le projet distant.

Ce que vous voulez, c'est soit de faire un git commit --amend pour modifier votre ancien commit si vous n'avez pas encore créé un nouveau commit avec vos modifications.

Si vous avez déjà créé un nouveau commit, vous voudrez utiliser git rebase -i pour écraser votre commit par-dessus l'ancien.

Une fois que vous avez effectué cette modification localement et vérifié que votre commit ressemble à ce que vous souhaitez, vous devez git Push --force pour écraser l'historique sur la télécommande Github.

Voici un tutoriel sur la façon de réécrire l’historique dans git, il explique les deux approches énumérées dans cette réponse .

23
ffledgling

Je ne vous conseillerais pas de le faire car GIT n'est pas destiné à supprimer et/ou éditer des commits. Vous pouvez simplement annuler votre validation précédente, puis valider à nouveau le code "valide".

Ou vous pouvez Rebaser votre branche ..__ ou consulter cette Réponse .

1
Stijn Bernards