J'ai ouvert une pull request pour rails repo sur github en utilisant le bouton Fork & Edit this file file.
Maintenant, après avoir reçu des commentaires sur mon PR, je voulais ajouter d'autres commits. alors voici ce que j'ai fini par faire
$ git clone [email protected]:gaurish/rails.git #my forked repo
$ git rebase -i 785a2e5 #commit hash of my commit using which PR was opened
$ git checkout patch-3 #branch name I had to send my commits under to be shown in that PR
$ git commit -am "Changes done as per feedback"
$ git push origin patch-3
Cela a bien fonctionné mais semble un flux de travail assez complexe. Peut-être que je me trompe, quelque chose ne va pas ici?
ma question est la suivante: est-ce que je fais cela correctement? sinon, quelle est la bonne façon de procéder?
git
github
pull-request
CuriousMind
la source
la source
Réponses:
Étant donné que vous utilisez les outils de GitHub et que vous ne modifiez qu'un seul fichier, vous pouvez également parcourir le fichier sur GitHub, sélectionner la branche appropriée dans le coin supérieur gauche sous le menu déroulant "tree:" (
patch-3
dans votre cas), puis choisir "Modifier ce fichier". Désormais, vos modifications seront validées dans cette branche et apparaîtront dans votre pull requestla source
Je viens de bloguer sur ce sujet:
Comment garder cette branche de fonctionnalités à jour? La fusion des derniers commits en amont est facile, mais vous voulez éviter de créer un commit de fusion, car cela ne sera pas apprécié lorsqu'il est poussé vers l'amont: vous recommencez alors effectivement les changements en amont, et ces commits en amont recevront un nouveau hachage ( comme ils obtiennent un nouveau parent). Ceci est particulièrement important, car ces validations fusionnées seraient reflétées dans votre demande d'extraction GitHub lorsque vous transmettez ces mises à jour à votre branche de fonctionnalités GitHub personnelle (même si vous le faites après avoir émis la demande d'extraction.)
C'est pourquoi nous devons rebaser au lieu de fusionner:
L'option rebase et la commande rebase de git garderont votre arbre propre et éviteront d'avoir des validations de fusion. Mais gardez à l'esprit que ce sont vos premiers commits (avec lesquels vous avez émis votre première pull request) qui sont rebasés, et qui ont maintenant un nouveau hachage de commit, qui est différent des hachages d'origine qui se trouvent toujours dans votre branche de dépôt github distante .
Maintenant, pousser ces mises à jour vers votre branche de fonctionnalité GitHub personnelle échouera ici, car les deux branches diffèrent: l'arborescence de la branche locale et l'arborescence de la branche distante sont «désynchronisées», à cause de ces différents hachages de validation. Git vous dira d'abord
git pull --rebase
, puis de pousser à nouveau, mais ce ne sera pas une simple avance rapide, car votre historique a été réécrit. Ne fais pas ça!Le problème ici est que vous récupérerez à nouveau vos premiers commits modifiés tels qu'ils étaient à l'origine, et ceux-ci seront fusionnés au-dessus de votre branche locale. En raison de l'état de désynchronisation, cette extraction ne s'applique pas proprement. Vous obtiendrez un historique cassé où vos commits apparaissent deux fois. Lorsque vous poussez tout cela dans votre branche de fonctionnalités GitHub, ces modifications seront reflétées sur la demande d'extraction d'origine, qui deviendra très, très moche.
AFAIK, il n'y a en fait pas de solution totalement propre à cela. La meilleure solution que j'ai trouvée est de forcer le transfert de votre branche locale vers votre branche GitHub (en forçant en fait une mise à jour non rapide):
Comme pour git-push (1):
Alors ne tirez pas, forcez simplement à pousser comme ceci:
ou:
Cela écrasera clairement votre branche distante, avec tout ce qui se trouve dans votre branche locale. Les commits qui sont dans le flux distant (et qui ont causé l'échec) y resteront, mais seront des commits suspendus, qui seront finalement supprimés par git-gc (1). Pas grand-chose.
Comme je l'ai dit, c'est AFAICS la solution la plus propre. L'inconvénient de cela, c'est que votre PR sera mis à jour avec ces derniers commits, qui auront une date ultérieure, et pourraient apparaître désynchronisés dans l'historique des commentaires du PR. Pas de gros problème, mais cela pourrait être déroutant.
la source
Vous pouvez également créer une nouvelle demande d'extraction qui est liée à la
master
place d'unabc1234
révision .De cette façon, tout nouveau commit / push vers votre référentiel sera ajouté à la pull request.
la source
Ouais - vous faites beaucoup plus de travail que nécessaire. Faites simplement un commit supplémentaire, puis forcez-le. Vous verrez le commit d'origine ainsi que celui qui vient d'être poussé lorsque vous actualisez github dans votre navigateur.
la source