1

Donc, je voudrais réécrire l'histoire d'un repo git. Maintenant, tous les commits que je voudrais changer ont déjà été publiés et poussés et je suis conscient que réécrire l'histoire en repos publié est une mauvaise pratique. Cependant, ce repo n'a pas de fourche et une seule branche principale. Est-ce que cela rend l'histoire de la réécriture plus sûre?Amit Git Author Dans un Repo publié

Si oui, ce que je veux faire est de changer l'auteur de tous les commits depuis une certaine date par un auteur spécifique au nouvel auteur. Voici le code qui permet github de le faire:

#!/bin/sh 

git filter-branch --env-filter ' 
OLD_EMAIL="[email protected]" 
CORRECT_NAME="Your Correct Name" 
CORRECT_EMAIL="[email protected]" 
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ] 
then 
    export GIT_COMMITTER_NAME="$CORRECT_NAME" 
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL" 
fi 
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ] 
then 
    export GIT_AUTHOR_NAME="$CORRECT_NAME" 
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL" 
fi 
' --tag-name-filter cat -- --branches --tags 

Quelqu'un peut-il changer pour inclure mon exigence que l'évolution commits depuis une certaine date, disons, après le 20 Juin?

De même, est-il possible d'annuler facilement ce changement après avoir vu les effets?

Répondre

0

Cela rend-il l'historique de la réécriture plus sûr?

Si quelqu'un a cloné les commits que vous êtes sur le point de réécrire, ils seront surpris quand les changements d'histoire. S'ils ont des commits locaux au-dessus des commits d'origine, un nettoyage sera nécessaire, mais devrait être faisable à peu d'effort. Depuis votre dépôt ne semble pas être beaucoup utilisé, les risques semblent négligeables, et le pire des cas est un inconvénient mineur. Est-ce que quelqu'un peut changer cela pour inclure mon exigence de changer seulement les commits depuis une certaine date, par exemple, après le 20 juin? Je ne pense pas que vous pouvez spécifier une limite de date à git filter-branch. Mais vous pouvez spécifier une gamme de révisions. Je suggère de trouver la révision après laquelle vous voulez faire le changement, par exemple en regardant git log --before 'June 20'. Une fois que vous avez le SHA, changer la partie de fin de votre script comme ceci:

git filter-branch --env-filter ' 
# ... no change, as in your post 
' -f SHA.. 

Aussi, est-il possible d'annuler facilement ce changement après avoir vu les effets?

Faites une sauvegarde de la branche, par exemple avec:

git branch master-bak 

Cela crée une copie de la branche en cours. Comme vous avez écrit que vous avez une branche master, je suppose que vous êtes sur master maintenant, alors cela va créer une sauvegarde de celui-ci.

Si vous n'êtes pas satisfait du résultat de la commande git filter-branch ci-dessus, vous pouvez restaurer l'état d'origine de la branche de la sauvegarde avec:

git reset --hard master-bak 
+0

Merci beaucoup pour la réponse complète, rapide! –