La principale raison de ce que je peux voir est la suivante:
- L’interface utilisateur GitHub pour la fusion des demandes d'extraction actuellement (octobre 2015) ne vous permet pas de modifier la première ligne du message de validation, ce qui vous oblige à le modifier.
Merge pull request #123 from joebloggs/fix-snafoo
- L’interface utilisateur GitHub permettant de parcourir l’historique des validations ne vous permet pas de visualiser l’historique de la branche du
--first-parent
point de vue.
- L’interface utilisateur de GitHub qui examine le blâme d’un fichier ne vous permet pas de visualiser le blâme du fichier avec le
--first-parent
point de vue (notez que cela n’a été corrigé que dans Git 2.6.2, nous pourrions donc pardonner à GitHub de ne pas avoir ce message. disponible)
Ainsi, lorsque vous combinez les trois situations ci-dessus, vous obtenez une situation dans laquelle les modifications inconditionnelles en cours de fusion sont laides à partir de l'interface utilisateur de GitHub.
Votre histoire avec les commits écrasés ressemblera à quelque chose comme
1256556316... Merge pull request #423 from jrandom/add-slideshows
7hgf8978g9... Added new slideshow feature
56556316ad... Merge pull request #324 from ahacker/fix-android-display
787g8fgf78... Hotfix for android display issue
f56556316e... Merge pull request #28 from somwhere/select-lang-popup
9080gf6567... Implemented pop-up to select language
Considérant que sans commets écrasés l'histoire ressemblera à quelque chose comme
1256556316... Merge pull request #423 from jrandom/add-slideshows
7hgf8978g9... Added new slideshow feature, JIRA # 848394839
85493g2458... Fixed slideshow display issue in ie
gh354354gh... wip, done for the week
789fdfffdf... minor alignment issue
56556316ad... Merge pull request #324 from ahacker/fix-android-display
787g8fgf78... hotfix for #5849564648
f56556316e... Merge pull request #28 from somwhere/select-lang-popup
9080gf6567... implemented feature # 65896859
gh34839843... minor fix (typo) for 3rd test
Lorsque vous avez beaucoup de commits dans un suivi de relations publiques où un changement est intervenu, cela peut devenir un peu un cauchemar si vous vous limitez à utiliser l'interface utilisateur de GitHub .
Par exemple, vous trouvez qu'un pointeur null est dé-référencé quelque part dans un fichier ... vous dites donc "qui a fait cela, et quand? Quelles versions de version sont affectées?". Ensuite, vous vous dirigez vers la vue des responsables dans l'interface utilisateur de GitHub et vous constatez que la ligne a été modifiée dans789fdfffdf
... "oh, mais attendez une seconde, l'indentation de cette ligne venait juste d'être modifiée pour s'inscrire dans le reste du code"; la page de blâme ... finalement vous trouvez le commit ... c'est un commit d'il y a 6 mois ... "oh **** cela pourrait affecter les utilisateurs depuis 6 mois" dites-vous ... ah mais attendez, ce commit était en fait dans une requête Pull et n’a été fusionné qu’hier et personne n’a encore publié de communiqué à ce sujet ... "Bon sang pour avoir fusionné des commits sans avoir écrasé l’histoire" UI GitHub
Voyons maintenant comment cela fonctionne si vous utilisez la ligne de commande Git (et le super-génial 2.6.2 qui a le correctif pour git blame --first-parent
)
- Si vous utilisiez la ligne de commande Git, vous seriez en mesure de contrôler complètement le message de validation de la fusion. Ainsi, la validation de la fusion pourrait avoir une belle ligne de résumé.
Donc, notre histoire de commit ressemblerait à
$ git log
1256556316... #423 Added new slideshow feature
7hgf8978g9... Added new slideshow feature, JIRA # 848394839
85493g2458... Fixed slideshow display issue in ie
gh354354gh... wip, done for the week
789fdfffdf... minor alignment issue
56556316ad... #324 Hotfix for android display issue
787g8fgf78... hotfix for #5849564648
f56556316e... #28 Implemented pop-up to select language
9080gf6567... implemented feature # 65896859
gh34839843... minor fix (typo) for 3rd test
Mais on peut aussi faire
$ git log --first-parent
1256556316... #423 Added new slideshow feature
56556316ad... #324 Hotfix for android display issue
f56556316e... #28 Implemented pop-up to select language
(En d'autres termes: la CLI Git vous permet de prendre votre gâteau et de le manger aussi)
Maintenant, lorsque nous abordons le problème du pointeur null ... eh bien, nous utilisons simplement git blame --first-parent -w dodgy-file.c
et nous recevons immédiatement le commit exact où la dé-référence du pointeur null a été introduite dans la branche principale en ignorant les simples changements d'espaces.
Bien sûr, si vous effectuez des fusions à l'aide de l'interface utilisateur de GitHub, alors git log --first-parent
c'est vraiment merdique, car GitHub a forcé la première ligne du message de validation de fusion:
1256556316... Merge pull request #423 from jrandom/add-slideshows
56556316ad... Merge pull request #324 from ahacker/fix-android-display
f56556316e... Merge pull request #28 from somwhere/select-lang-popup
Donc, pour résumer une longue histoire:
L'interface utilisateur de GitHub (octobre 2015) présente un certain nombre d'inconvénients en ce qui concerne la fusion des demandes d'extraction, la présentation de l'historique des validations et l'attribution des informations de responsabilité. Le meilleur moyen actuel de corriger ces défauts dans l'interface utilisateur de GitHub est de demander aux personnes d'écraser leurs commits avant de procéder à la fusion.
La CLI Git ne présente pas ces problèmes et vous pouvez facilement choisir la vue à afficher afin de découvrir à la fois la raison pour laquelle une modification particulière a été apportée de cette façon (en consultant l'historique des commits non annulés), ainsi que voir les commits effectivement écrasés.
Post script
La dernière raison souvent invoquée pour écraser les commits est de faciliter le portage en arrière… Si vous n'avez qu'un seul commit à sauvegarder (c.-à-d. Le commit écrasé), il est facile de choisir les cerises…
Eh bien, si vous regardez l’histoire de git avec, git log --first-parent
vous pouvez simplement choisir les modifications de fusion. La plupart des gens sont confus, car ils doivent spécifier l’ -m N
option mais si vous recevez le commit, git log --first-parent
vous savez que c’est le premier parent que vous souhaitez suivre, ce sera donc le cas.git cherry-pick -m 1 ...