GitHub pull request indiquant les commits déjà dans la twig cible

J’essaie d’examiner une demande de tirage sur GitHub vers une twig qui n’est pas maître. La twig cible était derrière le maître et la requête d’extraction était validée par le maître, alors j’ai fusionné le maître et l’ai poussé vers GitHub, mais les commits et les diff pour eux apparaissent toujours dans la demande d’extraction après rafraîchissement. J’ai doublé vérifié que la twig sur GitHub a les commits du maître. Pourquoi apparaissent-ils toujours dans la demande d’extraction?

J’ai également vérifié la requête d’extraction localement et elle ne montre que les commits non fusionnés.

Il semble que la requête Pull ne conserve pas de trace des modifications apscopes à la twig cible (j’ai contacté le support GitHub et j’ai reçu une réponse le 18 novembre 2014 en indiquant que c’était par conception).

Cependant, vous pouvez l’obtenir pour vous montrer les modifications mises à jour en procédant comme suit:

http://githuburl/org/repo/compare/targetbranch...currentbranch 

Remplacez githuburl , org , repo , targetbranch et currentbranch si nécessaire.

Ou comme hexsprite indiqué dans sa réponse, vous pouvez également le forcer à mettre à jour en cliquant sur Modifier sur le PR et en changeant temporairement la base en une twig différente et inversement. Cela produit l’avertissement:

Êtes-vous sûr de vouloir changer de base?

Certains commits de l’ancienne twig de base peuvent être supprimés de la chronologie et les anciens commentaires peuvent devenir obsolètes.

Et laissera deux entrées de journal dans le PR:

entrer la description de l'image ici

Voici une bonne solution de contournement. Utilisez le bouton Edit lorsque vous affichez le PR dans GitHub pour changer la twig de base à autre chose que master . Puis remettez-le en master et il affichera désormais correctement uniquement les modifications des commits les plus récents.

Une façon de résoudre ce problème est de git rebase targetbranch dans ce PR. Ensuite, git push --force targetbranch , alors Github affichera les bons commits et diff. Soyez prudent avec cela si vous ne savez pas ce que vous faites. Peut-être vérifier d’abord une twig de test pour faire le rebase, puis git diff targetbranch pour vous assurer qu’il est toujours ce que vous voulez.

En résumé, GitHub ne rebase pas automatiquement l’historique des validations dans les requêtes pull. Les solutions les plus simples sont les suivantes:

Solution 1: Rebase

Supposons que vous souhaitiez fusionner avec master partir de feature-01 :

 git fetch origin git checkout feature-01 git rebase origin/master git push --force 

Si vous travaillez sur une fourche, vous devrez peut-être remplacer l’ origin ci-dessus par l’ upstream . Voir Comment mettre à jour un repository GitHub forked? pour en savoir plus sur le suivi des twigs distantes du référentiel d’origine.

Solution 2: créer une nouvelle requête d’extraction

Supposons que vous souhaitiez fusionner l’intro master de feature-01 :

 git checkout feature-01 git checkout -b feature-01-rebased git push -u origin feature-01-rebased 

Maintenant, ouvrez une demande de pull pour feature-01-rebased et fermez celle pour feature-01 .

Pour toute autre personne confrontée à cela et perturbée par le comportement GitHub Pull Request, la cause première est qu’un PR est un diff de la twig source par rapport à l’ancêtre commun de la twig source et de la twig cible. Il affichera donc tous les changements sur la twig source jusqu’à l’ancêtre commun et ne tiendra pas compte des modifications éventuelles sur la twig cible.

Plus d’informations disponibles ici: https://developer.atlassian.com/blog/2015/01/a-better-pull-request/

Les diffs basés sur des ancêtres communs semblent dangereux. Je souhaite que GitHub ait la possibilité de créer un PR basé sur la fusion à trois voies plus standard.

Vous devez append ce qui suit à votre fichier ~/.gitconfig :

 [rebase] autosquash = true 

Cela aboutira automatiquement à la même chose que ce que montre cette réponse .

Je l’ai eu d’ ici .

Je ne suis pas tout à fait sûr de la théorie derrière cela. Mais je l’ai eu plusieurs fois et capable de résoudre ce problème en procédant comme suit.

 git pull --rebase 

Cela va extraire et fusionner les modifications de votre twig de référentiel d’origine (si vous avez indiqué cela)

Ensuite, vous poussez vos modifications avec force vers votre repository clone github (cible)

 git push -f origin master 

Cela garantira que votre clone de github et votre repository parent sont au même niveau de validation de github et que vous ne voyez aucune modification inutile dans les twigs.

Approche sécurisée si vous êtes trop préoccupé par les erreurs: accédez au fichier et supprimez manuellement les modifications, puis écrasez avec votre dernier commit en utilisant

 git add . && git commit -a --allow-empty-message -m '' && git reset --soft HEAD~2 && git commit --edit -m"$(git log --format=%B --reverse HEAD..HEAD@{1})" 

Je n’y a pas de conflits, vous êtes prêt à partir!