2017-07-06 3 views
0

J'ai fourché un repo sur github, puis j'ai fait git checkout X et fait quelques changements à la branche X. Après avoir terminé, j'ai fait une demande de traction de la branche X du repo fourchu à la branche X du repo original.
Mes modifications ont été fusionnées avec la branche X du dépôt d'origine, puis j'ai apporté d'autres modifications et effectué une autre demande d'extraction à partir de ma succursale vers la succursale d'origine du service repo X. Cependant, cela montre encore mon précédemment fusionné engage comme sous, enter image description hereGit: Nouvelle demande de tirage de la même branche montre encore les commits précédents

Ici, commits jusqu'à Jul 05, 2017 ont déjà été fusionnés à la branche X du repo d'origine. J'ai seulement besoin des commits sur Jul 06 pour apparaître sur cette demande de traction. Après avoir essayé pendant un certain temps, je suis incapable de trouver une solution. Voici ce que je ne basé sur this après,

  • configuration nouvelle en amont comme si -
    git remote add upstream https://path/to/original/repo.git
  • chercher changements à jour mon repo en forme de fourche - git fetch upstream
  • rebasage sur la branche X - git rebase X
  • Cependant, maintenant Je vois une liste encore plus grande de commits mis en scène pour la demande de traction. Je suis sûr que je ne comprends pas complètement comment fonctionnent les requêtes, mais je suppose que c'est parce que mon repo fourchu ne sait pas que les commits précédents ont déjà été fusionnés.
    Je sais que le flux de travail habituel devrait être de fourchette le repo, faire une nouvelle branche pour chaque changement, faire une demande de traction, supprimer la branche une fois que les modifications ont été fusionnées. Je n'étais pas au courant et j'ai trébuché sur ce problème. Comment est-ce que j'inclue seulement les nouveaux commits (non-fusionnés) dans la demande de traction, et pas tous les précédents également?

    Merci pour l'aide.

    Répondre

    1

    Une façon est de cherry-pick les commits d'une nouvelle nouvelle branche de l'amont:

    git fetch upstream X:X_new 
    git checkout X_new 
    git cherry-pick 92495c5 
    git cherry-pick ... 
    

    Vous pouvez ensuite ouvrir une nouvelle demande de traction. Si vous voulez garder le même tirage demande, vous devrez renommer à l'ancien nom, et la force de poussée à votre repo:

    git checkout X 
    git checkout -b X_backup 
    git branch -D X 
    git checkout X_new 
    git checkout -b X 
    git push origin X -f 
    

    et si elle correspond à votre besoin, vous pouvez supprimer les autres branches :

    git branch -D X_backup 
    git branch -D X_new