Pour les modifications masquées dans les validations de fusion
Les validations de fusion ont automatiquement leurs modifications masquées dans la sortie du journal Git. La pioche et le blâme inversé n'ont pas trouvé le changement. Donc, la ligne que je voulais avait été ajoutée puis supprimée et je voulais trouver la fusion qui la supprimait. L' git log -p -- path/file
historique du fichier n'a montré que son ajout. Voici le meilleur moyen que j'ai trouvé pour le trouver:
git log -p -U9999 -- path/file
Recherchez la modification, puis recherchez en arrière "^ commit" - le premier "^ commit" est le commit où le fichier avait cette ligne en dernier. Le deuxième "^ commit" est après sa disparition. Le deuxième commit peut être celui qui l'a supprimé. Le -U9999
est destiné à afficher l'intégralité du contenu du fichier (après chaque modification du fichier), en supposant que vos fichiers sont tous composés de 9 999 lignes maximum.
Recherche toutes les fusions associées via la force brute (diff chaque validation de fusion possible avec son premier parent, exécuté contre des tonnes de validations)
git log --merges --pretty=format:"git diff %h^...%h | grep target_text" HEAD ^$(git merge-base A B) | sh -v 2>&1 | less
(J'ai essayé de restreindre davantage le filtre de révision, mais j'ai rencontré des problèmes et je ne le recommande pas. Les modifications d'ajout / suppression que je cherchais étaient sur différentes branches qui ont été fusionnées à différents moments et A ... B n'incluait pas lorsque les modifications ont été fusionnées dans la ligne principale.)
Afficher un arbre Git avec ces deux validations (et une grande partie de l'historique Git complexe supprimé):
git log --graph --oneline A B ^$(git merge-base A B)
(A est le premier commit ci-dessus, B est le deuxième commit ci-dessus)
Afficher l'historique de A et l'histoire de B moins l'historique de A et de B.
Version alternative (semble montrer le chemin de façon plus linéaire plutôt que l'arbre d'historique Git normal - cependant je préfère l'arbre d'historique git normal):
git log --graph --oneline A...B
Trois, pas deux points - trois points signifie «r1 r2 - pas $ (git merge-base --all r1 r2). côté), mais pas des deux. " - source: "man gitrevisions"
git log -S<string> /path/to/file
veut un-c
ou-cc
aussi pour montrer les suppressions pendant la fusion (conflits)