Extrait de code git

Corriger un commit

Cette astuce fonctionne lorsque vous êtes seul sur votre dépôt. Elle peut être dangereuse lorsque de nombreuses personnes travaillent sur le même dépôt.

Faites :

git reset --soft HEAD^

Jusqu’au mauvais commit. Puis faites :

git push --force origin master

Le mauvais commit est maintenant supprimé de Github.

Ensuite, remontez jusqu’à avoir de mauvais commit dans votre dépôt :

git reset --soft HEAD

Puis faites :

git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_EMAIL" = "bad.address@mail.com" ];
then
  export GIT_AUTHOR_EMAIL=good.address@mail.com;
  export GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME";
  export GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL";
fi;
git commit-tree "$@"'

Cette ligne fork la branche actuelle avec un nouveau commit, corrigé.

Si vous avez cette erreur :

A previous backup already exists in refs/original/

Vous pouvez faire :

git update-ref -d refs/original/refs/heads/master

Puis réessayer la commande git filter-branch.

Une fois que votre branche master a les bons commits, vous pouvez la pousser entièrement sur Github via :

git push --force origin master

D’autres options peuvent être trouvées ici.

Nettoyer refs/original/refs/heads/master

Après un filter-branch, il peut rester un résidu local de la branche, faisant office de backup : refs/original/refs/heads/master. Pour le supprimer, il faut passer par :

git update-ref -d refs/original/refs/heads/master

Plus d’information ici.

Faire un commit à une date donnée

Pour avoir une date valide :

$ date
Sat 06 Feb 2021 09:12:48 PM CET
GIT_COMMITTER_DATE="Sat 06 Feb 2021 09:12:48 PM CET" git commit -m"message" --date "Sat 06 Feb 2021 09:12:48 PM CET"

Il faut mettre la date aux deux endroits.

Modifier la date d’un commit

git filter-branch --env-filter \
    'if [ $GIT_COMMIT = 119f9ecf58069b265ab22f1f97d2b648faf932e0 ]
     then
         export GIT_AUTHOR_DATE="Sun 07 Feb 2021 11:33:10 AM CET"
         export GIT_COMMITTER_DATE="Sun 07 Feb 2021 11:33:10 AM CET"
     fi'

Dernière mise à jour : sam. 06 février 2021