2010-09-11 2 views
3

Lors de la réécriture de l'historique d'un référentiel Git, comment pouvez-vous supprimer les signalisations (créées par git commit -s ou git commit --signoff)?Réécriture de l'historique Git: comment supprimer une signature?

git filter-branch « s commit-filter semble soutenir que les variables utilisées par git commit-tree:

GIT_AUTHOR_NAME 
GIT_AUTHOR_EMAIL 
GIT_AUTHOR_DATE 
GIT_COMMITTER_NAME 
GIT_COMMITTER_EMAIL 
GIT_COMMITTER_DATE 
EMAIL 

Répondre

10

offs signe ne sont qu'une partie du corps du message. Donc, vous devrez utiliser git filter-branch --msg-filter pour lancer une commande pour trouver les lignes commençant par Signed-off-by: et les supprimer.

Quelque chose comme

git filter-branch --msg-filter "sed /^Signed-off-by:/d" 

devrait faire l'affaire.

+0

Merci! C'est probablement le meilleur moyen de supprimer toutes les approbations ou toutes les approbations par une personne ou une adresse e-mail particulière. Cependant, votre exemple particulier ne supprime pas les nouvelles lignes avant et après la ligne contenant "Signé par:". Je ne connais pas bien sed et comme il est notoire de ne pas être très bien documenté, je vais juste le noter ici pour être complet. – Mantrum

+1

@Mantrum Oui, cela supprime simplement les lignes de signature elles-mêmes. Vous devrez faire quelque chose d'un peu plus compliqué si vous voulez supprimer la ligne vide supplémentaire avant la signature; vous voudrez vérifier s'il y a d'autres lignes finales en dessous du message (j'ai habituellement 'Bug:' lignes pour indiquer quel bogue il corrige, et parfois 'Paired-with:' ou 'Reviewed-by' pour indiquer la programmation par paire et revue de code). Généralement sur StackOverflow, les réponses vous dirigeront dans la bonne direction, mais vous devrez peut-être remplir certains détails en fonction de vos besoins exacts. –

1

Pour supprimer tous les approbations ou toutes les approbations par une personne/une adresse électronique, voir la réponse de Brian.

D'après les informations Brian fourni (à savoir que les signes-offs font partie du message de commit), il était facile de comprendre comment supprimer ou modifier chaque signe repoussantes:

Exécuter un rebasage interactif (git rebase -i) sur le parent du commit qui a la validation, trouvez le commit dans l'éditeur qui apparaît et remplacez pick par reword. Dans l'éditeur qui s'affiche ensuite, ajustez le message de validation à votre convenance.

+0

Ah, oui. Si vous voulez juste supprimer des signalisations pour une révision particulière, ou quelques révisions, 'git rebase -i' est ce que vous voulez. –

Questions connexes