J'ai une situation où j'ai fusionné quelques années de validations dans un référentiel. L'un des commits avait un commentaire qui était une pâte d'un journal Address Sanitizer lié au correctif.Pourquoi une branche de filtre sans opération crée-t-elle une divergence, et comment puis-je résoudre ce problème?
Cela ne semble pas si mal, sauf adresse journaux Sanitizer ressembler à ceci:
==10856==ERROR: AddressSanitizer: heap-buffer-overflow on address
0x62a00000b201 at pc 0x47df61 bp 0x7fffffff2ca0 sp 0x7fffffff2c98
READ of size 1 at 0x62a00000b201 thread T0
#0 0x47df60 in Expand_Series ../src/core/m-series.c:145
#1 0x47e5a7 in Extend_Series ../src/core/m-series.c:187
#2 0x466e0c in Scan_Quote ../src/core/l-scan.c:462
#3 0x46a797 in Scan_Token ../src/core/l-scan.c:918
#4 0x46e263 in Scan_Block ../src/core/l-scan.c:1188
...
Et il va jusqu'à # 250 ou dans ce cas. GitHub analyse les motifs #XXX et s'ils correspondent à un numéro de problème, mettez une note à propos de la mention sur le problème référencé. Alors soudain, GitHub pense que ce commit est en train de faire des remarques sur tous les problèmes et toutes les demandes, et le fera pendant un certain temps.
Je pensais que je venais d'utiliser un git filter-branch
que je ne me dérange vraiment casser de l'histoire (je devais faire un filtre déjà branche pour se débarrasser de certaines choses que je ne voulais pas). Cependant, j'ai fait cette autre branche de filtre avant que je fasse une fusion et ai continué avec le travail. Maintenant que j'ai remarqué cette apparition dans GitHub, je voudrais revenir en arrière et le réécrire et ne me dérange pas si chaque commit sur chaque branche après ce point obtient un nouveau hachage. C'est bon pour moi. La réécriture Je me suis mis au travail, mais ce que je n'arrive pas à comprendre, c'est pourquoi il y a tellement de divergence. Il semble avoir fait de la réécriture qui affecte les choses avant d'apporter des changements au commentaire. En tant que test simple, j'ai essayé ce que je pensais devrait être un no-op:
git filter-branch -f --msg-filter 'sed "s/a/a/g"' -- --all
Je ne suis pas personne sed, mais je crois comprendre que cela refaire tous les messages de validation et de remplacer a
avec a
. (Rand Ayn serait heureux.)
Il ne diverge pas autant commits que mon remplacement effectif ... 600 au lieu de 1000. Mais qu'il diverge tout indique que j'ai une sorte de malentendu. Comment est-ce que je peux réécrire that commit message in the history sans endommager tous les commits en dehors de ceux qui se produisent après lui ... et obtenir l'effet sur toutes les branches?
https://rtyley.github.io/bfg-repo-cleaner/#examples avec '--replace-Text' pour la prochaine fois –