Re: Petite question Git

Top Page

Reply to this message
Author: Edgar Bonet
Date:  
To: guilde
Subject: Re: Petite question Git
Bonjour !

Marc Terrier a écrit :
> Il ne m'a pas été difficile de revenir à un historique plus "clean",
> dans mon repo local, en faisant
> "git reset <sha1 du dernier commit correct>"


Le problème avec ça c'est que tu perds le travail qui a été fait depuis.
Normalement, la façon canonique de nettoyer l'historique est de réécrire
l'histoire avec un rebase interactif :

    git rebase -i origin/master


Tu réordonnes les commits pour placer chaque commit de régularisation
juste après le commit à régulariser, et tu changes la commande en
« squash » :

    pick commit foireux #1
    squash correctif au commit foireux #1
    pick commit foireux #2
    squash correctif au commit foireux #2
    ...


Après le rebase, chaque correctif sera fusionné avec le commit qu'il est
sensé corriger, et tu obtiens une suite de commits propre.

> $ git push origin master
> error: impossible de pousser des références [...]
> Comment est-ce que je pourrais revenir en arrière ?


Facile :

    git push --force origin master


Mais c'est dangereux. Si ton collègue a continué à travailler sur la
base de la branche sale, il va garder l'ancien historique dans son
dépôt, et ça va atterrir dans le dépôt de référence à son prochain push.
Donc vous vous retrouverez avec deux histoires alternatives
parallèles...

Pour que ça se passe bien, il faut te coordonner avec lui. Il devra
s'assurer de n'avoir aucun travail en cours qui n'est pas dans le dépôt
de référence et, après ton force-push, il devra à son tour faire

    git pull --force origin


pour jeter son historique et le remplacer par l'histoire que tu as
réécrite.

Attention : si le dépôt est public, n'importe qui peut être en train de
travailler sur la base de l'historique actuel, et il ne va pas être
content si tu fais un force-push. Il est en général très mal vu de
réécrire une histoire qui a déjà été rendue publique.

À+,

Edgar.