2016-01-13 1 views
1

J'ai une branche de requête de traction qui inclut seulement 15 commits et après une mauvaise fusion (ou une mauvaise rebase), les commits qui ont déjà été fusionnés en master apparaissent sur GitHub comme de nouveaux commits.Comment réparer une branche de requête de tirage ayant subi une mauvaise fusion?

Il est probable que ces validations aient été créées lorsqu'une branche tierce a été fusionnée dans la branche de requête de tirage avant que cette branche tierce ne soit fusionnée dans le maître. Quoiqu'il me soit nécessaire de nettoyer cette branche de requête de tirage pour que GitHub ne s'affiche que dans la validation et que le fichier diffère les 15 validations spécifiques à la branche de requête pull elle-même.

Avez-vous des conseils et astuces pour y parvenir? Dans le passé, j'ai simplement choisi les commissions dont je savais qu'elles étaient exclusives à la branche de demande de tirage dans une nouvelle branche. Ensuite, j'ai supprimé la branche de requête d'extraction d'origine, renommée la nouvelle branche avec le même nom que la branche de requête de traction d'origine et j'ai poussé cette branche vers GitHub, ce qui a résulté en une diff propre. Cependant, cette technique n'est pas idéale sur les branches à long terme avec de nombreux collaborateurs, car en raison des fusions tout au long de la durée de vie de la branche de requête d'origine, il est difficile de déterminer quelles sont les exclusions de la branche.

+0

Pouvez-vous montrer l'état actuel du dépôt en utilisant 'git log --oneline --graph --decorate'? – Ferrybig

+0

Malheureusement, je ne peux pas. –

Répondre

1

Rebase supprime les validations de fusion dans le cadre du processus.

C'est probablement votre meilleur choix pour nettoyer cela - rebasculez la branche de requête de tirage sur master.

Je suggère de créer une branche jetable pour tester la rebase avec si.

  • git checkout pull-request-branch
  • git checkout -b rebase-test
  • git rebase master rebase-test

qui vous donnera la possibilité de diff la branche rebase-test résultant contre le maître et l'pull-request-branch pour vous assurer que vous avez le résultat que vous voulez.

1

Quand je dois enlever plusieurs commits sur une branche, j'utilise rebasage interactif

rebase -i <SHA of the last commit onto you rebase> 

alors vous pouvez simplement commenter les commits (ou supprimer les lignes) que vous souhaitez ne pas rejouer.

Si vous souhaitez trouver des commits communs à deux branches, vous pouvez utiliser git show-branch. À noter que le rebasage interactif est très utile avec git reset lorsque vous devez diviser une branche en plusieurs branches avec des sous-ensembles exclusifs de validations.