git replace

Patchs et réécriture

Remplacer un objet par un autre, sans réécrire l’historique


La commande 'git replace' indique à Git d’utiliser un objet à la place d’un autre partout où il apparaît — par exemple pour greffer un ancien historique sur un nouveau, ou masquer un commit cassé — sans réécrire aucun commit. Les remplacements sont stockés comme refs sous refs/replace/ et peuvent être partagés ou retirés. La plupart des commandes les suivent ; git log marque les commits remplacés.

Synopsis

git replace [-f] <object> <replacement>
git replace --graft <commit> [<parent>...]
git replace -d <object>...
git replace -l
[ ] facultatif| ou<arg> valeur à remplacer... répétable--flag option

Exemples

Greffer un historique

git replace --graft <first-new-commit> <last-old-commit>

Relier un ancien historique importé.


Lister

git replace -l

Objets remplacés.


Annuler

git replace -d <object>

Retirer un remplacement.

Exemples de workflows

1
git fetch old-repo

Récupérer les anciens commits

2
git replace --graft <new-root> old/main

Faire continuer l’ancien historique par la nouvelle racine

Dépannage

Le remplacement n’est pas visible pour les autres

Cause : refs/replace n’est pas poussé par défaut

git push origin "refs/replace/*"

Astuces et pièges

Bonnes pratiques

  • ✓Utilisez --graft pour relier des historiques ; évitez les remplacements pour les corrections courantes.

Erreurs fréquentes

  • ✗Oublier que les remplacements sont locaux tant que vous ne poussez pas refs/replace/*.

FAQ

A:

Oui : git --no-replace-objects <command>.