En premier lieu, si vous travaillez avec d'autres personnes sur le même référentiel de code, vous ne devez pas supprimer un commit car lorsque vous forcez la mise à jour sur le référentiel, cela laissera les référentiels locaux de vos collègues dans un état illégal (par exemple s'ils faites des commits après celui que vous avez supprimé, ces commits seront invalides car ils étaient basés sur un commit désormais inexistant).
Cela dit, ce que vous pouvez faire est d' annuler le commit. Cette procédure se fait différemment (différentes commandes) selon le CVS que vous utilisez:
Sur git :
git revert <commit>
Sur mercurial :
hg backout <REV>
EDIT:
L'opération de retour crée un nouveau commit qui fait le contraire du commit rétabli (par exemple, si le commit d'origine a ajouté une ligne, le commit de retour supprime cette ligne), supprimant efficacement les modifications du commit indésirable sans réécrire l'historique du référentiel.
git backout <REV>
? Ouhg backout <REV>
:?Si vous ne travaillez pas avec les autres (ou êtes heureux de leur causer des ennuis importants) , il est possible de supprimer les commits des branches de bitbucket.
Si vous essayez de changer une branche non principale:
si vous essayez de changer la branche principale
Dans git en général, la branche master n'est pas spéciale - c'est juste une convention. Cependant, bitbucket et github et les sites similaires nécessitent généralement qu'il y ait une branche principale (probablement parce que c'est plus facile que d'écrire plus de code pour gérer l'événement qu'un référentiel n'a pas de branches - pas sûr). Vous devez donc créer une nouvelle branche et en faire la branche principale:
Sur Bitbucket, allez dans les paramètres du référentiel, et changez la «Branche principale» en
master_temp
(sur Github, changez la «Branche par défaut»).Maintenant, allez sur Bitbucket et vous devriez voir l'historique que vous voulez. Vous pouvez maintenant accéder à la page des paramètres et redéfinir la branche principale en
master
.Ce processus fonctionnera également avec tous les autres changements d'historique (par exemple
git filter-branch
). Vous devez simplement vous assurer de réinitialiser les validations appropriées, avant que le nouvel historique ne se sépare de l'ancien.edit : apparemment, vous n'avez pas besoin d'aller à tous ces tracas sur github, car vous pouvez forcer une branche de réinitialisation .
Gérer les collaborateurs ennuyés
La prochaine fois que quelqu'un essaiera d'extraire de votre référentiel (s'il a déjà tiré le mauvais commit), l'extraction échouera. Ils devront réinitialiser manuellement un commit avant l'historique modifié, puis tirer à nouveau.
S'ils ont retiré le mauvais commit et se sont engagés dessus , alors ils devront réinitialiser, puis
git cherry-pick
les bons commits qu'ils veulent créer, recréant efficacement la branche entière sans le mauvais commit.S'ils n'ont jamais tiré le mauvais commit, alors tout ce processus ne les affectera pas et ils peuvent tirer normalement.
la source
vous pouvez réinitialiser pour
HEAD^
forcer le pousser.Il supprimera votre dernier commit et reflétera sur bitbucket comme commit supprimé mais restera toujours sur leur serveur.
la source
J'ai eu des problèmes avec git revert dans le passé (principalement parce que je ne suis pas tout à fait sûr de son fonctionnement.) J'ai eu du mal à revenir en arrière à cause de problèmes de fusion.
Ma solution simple est la suivante.
Étape 1.
votre projet dans un autre dossier, puis:
Étape 2.
puis Étape 3.
dans votre dernier (et principal) répertoire de projet (celui qui a le dernier commit problématique) collez les fichiers de l'étape 2
Étape 4.
Étape 5.
Prendre plaisir
la source
git revert
est simple: il crée un nouveau commit qui fait l'inverse des changements dans un commit précédent (ou plusieurs commits). Il ne supprime pas les commits, donc ce n'est pas pertinent pour cette question. De plus, l'étape de clonage n'est pas vraiment nécessaire.Voici une approche simple en 4 étapes maximum:
0 - Informez l'équipe que vous allez réparer le référentiel
Connectez-vous avec l'équipe et informez-les des changements à venir.
1 - Supprimer le dernier commit
En supposant que votre branche cible est
master
:À ce stade, vous avez terminé si vous travaillez seul.
2 - Corrigez les dépôts locaux de votre coéquipier
Chez vos coéquipiers:
Si votre coéquipier n'a eu aucun nouveau commit, vous avez terminé à ce stade et vous devriez être synchronisé.
3 - Ramener les commits perdus
Supposons qu'un coéquipier ait un nouveau commit non publié qui a été perdu dans ce processus.
Faites cela pour autant de commits que nécessaire.
J'ai utilisé avec succès cette approche à plusieurs reprises. Il faut un effort d'équipe pour s'assurer que tout est synchronisé.
la source
Comme d'autres l'ont dit, vous souhaitez généralement utiliser
hg backout
ougit revert
. Cependant, parfois, vous voulez vraiment vous débarrasser d'un commit.Tout d'abord, vous voudrez accéder aux paramètres de votre référentiel. Cliquez sur le
Strip commits
lien.Entrez l'ID de l'ensemble de modifications pour l'ensemble de modifications que vous souhaitez détruire, puis cliquez sur
Preview strip
. Cela vous permettra de voir le type de dommage que vous êtes sur le point de faire avant de le faire. Ensuite, cliquez simplementConfirm
et votre commit n'est plus de l'histoire. Assurez-vous de dire à tous vos collaborateurs ce que vous avez fait, afin qu'ils ne repoussent pas accidentellement le commit incriminé.la source
Une fois les modifications validées, il ne pourra plus être supprimé. car la nature fondamentale de commit n'est pas de supprimer.
Chose que vous pouvez faire (méthode simple et sûre),
Rebase interactif:
1)
git rebase -i HEAD~2
# affichera vos 2 derniers commits2) Votre commit sera répertorié comme, Récent apparaîtra en bas de la page LILO (dernier dans Last Out)
Supprimer entièrement la dernière ligne de validation
3) enregistrez-le par
ctrl+X
ouESC:wq
maintenant votre branche sera mise à jour sans votre dernier commit.
la source
Vous pouvez également écrire la commande pour Bitbucket comme mentionné par Dustin :
Pour supprimer le dernier commit localement dans git, utilisez:
la source
A présent, cloud bitbucket (je ne sais pas quelle version) permet de revenir sur un commit du système de fichiers comme suit (je ne vois pas comment revenir de l'interface Bitbucket dans le navigateur Chrome).
-sauvegardez l'intégralité de votre répertoire pour sécuriser les modifications que vous avez commises par inadvertance
-sélectionner le répertoire extrait
-bouton droit de la souris: tortoise git menu
-repo-browser (l'option de menu 'revert' annule uniquement les modifications non validées)
-appuyez sur le bouton HEAD
-sélectionnez la ligne supérieure (le dernier commit)
-bouton droit de la souris: annuler le changement par ce commit
-après avoir annulé les modifications sur le système de fichiers, appuyez sur commit
-ce met à jour GIT avec un message 'Revert (votre message précédent). Cela revient à commettre untel
-sélectionnez 'commit and push'.
la source