J'essaye de passer en revue une pull request sur GitHub vers une branche qui n'est pas master. La branche cible était derrière master et la demande d'extraction montrait les commits de master, j'ai donc fusionné master et l'ai poussé vers GitHub, mais les commits et les différences pour eux apparaissent toujours dans la demande d'extraction après l'actualisation. J'ai vérifié deux fois que la branche sur GitHub a les commits de master. Pourquoi apparaissent-ils toujours dans la pull request?
J'ai également vérifié la demande d'extraction localement et elle ne montre que les commits non fusionnés.
Réponses:
Il semble que la demande d'extraction ne garde pas trace des modifications apportées à la branche cible (j'ai contacté le support GitHub et j'ai reçu une réponse le 18 novembre 2014 indiquant que c'était par conception).
Cependant, vous pouvez l'obtenir pour vous montrer les modifications mises à jour en procédant comme suit:
Remplacer
githuburl
,org
,repo
,targetbranch
etcurrentbranch
selon les besoins.Ou comme hexsprite l'a souligné dans sa réponse, vous pouvez également le forcer à se mettre à jour en cliquant Editsur le PR et en changeant temporairement la base en une autre branche et vice-versa . Cela produit l'avertissement:
Et laissera deux entrées de journal dans le PR:
la source
Voici une bonne solution de contournement. Utilisez le
Edit
bouton lors de l'affichage du PR dans GitHub pour changer la branche de base en autre chose quemaster
. Revenez ensuite àmaster
et il affichera désormais correctement uniquement les modifications des commits les plus récents.la source
Pour résumer, GitHub ne rebase pas automatiquement l'historique des validations dans les pull requests. Les solutions les plus simples sont:
Solution 1: Rebase
Supposons que vous souhaitiez fusionner à
master
partir defeature-01
:Si vous travaillez sur une fourche, vous devrez peut-être remplacer
origin
ci-dessus parupstream
. Consultez Comment mettre à jour un référentiel fourchu GitHub? pour en savoir plus sur le suivi des branches distantes du référentiel d'origine.Solution 2: créer une nouvelle demande d'extraction
Supposons que vous souhaitiez fusionner l'intro
master
defeature-01
:Ouvrez maintenant une pull request pour
feature-01-rebased
et fermez celle pourfeature-01
.la source
Vous devez ajouter les éléments suivants à votre
~/.gitconfig
fichier:Cela obtiendra automatiquement la même chose que ce que montre cette réponse .
J'ai eu ça d' ici .
la source
Pour quiconque rencontre cela et confondu par le comportement de la demande d'extraction de GitHub, la cause première est qu'un PR est un diff de l'extrémité de la branche source par rapport à l'ancêtre commun de la branche source et de la branche cible. Il affichera donc tous les changements sur la branche source jusqu'à l'ancêtre commun et ne prendra pas en compte les changements qui auraient pu survenir sur la branche cible.
Plus d'informations disponibles ici: https://developer.atlassian.com/blog/2015/01/a-better-pull-request/
Les différences basées sur les ancêtres communs semblent dangereuses. J'aimerais que GitHub ait la possibilité de créer un PR basé sur la fusion à 3 voies plus standard.
la source
Une façon de résoudre ce problème est
git rebase targetbranch
dans ce PR. Ensuitegit push --force targetbranch
, Github affichera les bons commits et diff. Soyez prudent avec cela si vous ne savez pas ce que vous faites. Peut-être vérifiez d'abord une branche de test pour faire le rebase puisgit diff targetbranch
pour vous assurer que c'est toujours ce que vous voulez.la source
Cela se produit avec GitHub lorsque vous écrasez des commits fusionnés à partir de la branche cible.
J'avais utilisé squash et fusionner avec Github comme stratégie de fusion par défaut, y compris les fusions de la branche cible. Cela introduit un nouveau commit et GitHub ne reconnaît pas que ce commit écrasé est le même que ceux déjà dans master (mais avec des hachages différents). Git le gère correctement, mais vous voyez à nouveau toutes les modifications dans GitHub, ce qui rend la révision ennuyeuse. La solution est de faire une fusion régulière de ces commits en amont au lieu d'un squash et d'une fusion. Lorsque vous souhaitez fusionner une autre branche dans la vôtre en tant que dépendance,
git merge --squash
et revenir sur cette seule validation avant de retirer du master une fois que cette autre branche l'a effectivement fait pour master.EDIT: une autre solution consiste à rebaser et à forcer la poussée. Histoire propre mais réécrite
la source
Je ne suis pas vraiment sûr de la théorie derrière cela. Mais j'ai eu cela plusieurs fois et j'ai pu résoudre ce problème en procédant comme suit.
Cela récupérera et fusionnera les modifications de votre branche principale du référentiel d'origine (si vous avez pointé dessus)
Ensuite, vous poussez vos modifications avec force dans votre référentiel cloné github (cible)
Cela garantira que votre clone github et votre dépôt parent sont au même niveau de validation github et que vous ne voyez pas de changements inutiles entre les branches.
la source
Essayez les commandes ci-dessous, une par une.
la source
Approche sans échec si vous êtes trop inquiet de gâcher les choses: accédez au fichier et supprimez manuellement les modifications, puis écrasez avec votre dernier commit en utilisant
I il n'y a pas de conflits, vous êtes prêt à partir
la source