84 votes

Comment nettoyer mon fork Github pour pouvoir faire des pull requests propres ?

J'ai forqué un dépôt sur Github. J'ai effectué quelques modifications mineures et soumis des demandes d'extraction à l'amont, mais en cours de route, ma fourche est devenue si confuse que je suis incapable de générer des demandes d'extraction propres ; lorsque je lance une demande d'extraction à partir d'une branche avec six modifications, Github veut en soumettre treize, dont sept existent déjà en amont (évidemment).

Mon problème semble être lié à ne tirer que les derniers commits mais lorsque je crée une nouvelle branche et que je sélectionne des commits, j'ai toujours des extras. J'ai testé avec rebasement aussi, mais maintenant il semble que même mon maître est tellement en désordre que je ne peux pas générer une copie propre de en amont . C'est apparemment parce que je n'ai pas compris que je devais rebasement au lieu de fusionner Il est clair que j'ai fait des erreurs ; ce que j'essaie de faire, c'est de trouver comment dénouer ce nœud et revenir à un état propre où je peux avancer utilement.

J'ai un peu envie de faire sauter ma fourche et d'en faire une nouvelle en amont, mais je crois comprendre que cela aussi est difficile.

Après avoir confessé mes péchés sur Git, comment obtenir l'absolution de Gitub ?

1 votes

J'aime votre confession et votre demande d'absolution :-)

0 votes

Quoi, il y a des gens pour qui Git n'est pas une religion ? ;-)

103voto

Bob Fanger Points 9547

Étape 1 : Extraire les changements en amont
Il est recommandé d'ajouter le dépôt en amont en tant que "upstream" comme expliqué sur le site de la Commission européenne. Bifurquer un Repo page :

git pull --rebase upstream master

El --rebase L'option place vos changements au-dessus du dernier commit sans fusion.

Étape 2 : (Facultatif) Fusionner vos commits en 1 seul commit

git reset --soft upstream/master

Cette commande va "annuler" tous vos commits, mais ne modifiera pas les fichiers. Ainsi, vous pouvez effectuer tous vos changements en un seul commit.

git commit -a

Étape 3 : Vérifiez et testez vos modifications

Pour montrer les changements, utilisez une interface graphique comme l'application intégrée gitk , Sourcetree , TortoiseGit o Tour (payé) etc.

Étape 4 : Pousser

git push lancera une erreur, car le push modifierait l'historique du dépôt cible.
Si vous êtes sûr que les changements montrés à l'étape 3 sont corrects, poussez avec "-f".

git push -f origin master

Informations complémentaires
La commande pour ajouter une télécommande est :

git remote add upstream git://github.com/[username]/[project].git

Vous pouvez aussi tirer d'une URL directe :

git pull --rebase  git://github.com/[username]/[project].git

Mais vous aurez alors besoin du hash du dernier commit amont au lieu de "upstream/master" dans les autres étapes.

3 votes

Merci beaucoup. GitHub devrait mettre à jour son Fork A Repo .

0 votes

Merci ! J'avais essayé de nombreuses façons de résoudre ce problème, mais rien ne fonctionnait. J'étais sur le point de faire sauter ma fourchette avant de trouver cette réponse... et ça a marché. Merci !

0 votes

Salut, @JudahHimango. Avez-vous suivi l'"étape 2" aussi. Parce que je suis dans la même situation que vous. Pouvez-vous m'aider.

4voto

Sean Edwards Points 1259

D'après ce que j'ai compris, avec Git et Mercurial (je n'ai utilisé que ce dernier, donc je peux me tromper), ce n'est pas du tout un problème de supprimer un fork et de le re-forker. Je le fais tout le temps avec mes projets. Si vous êtes d'accord pour le faire (vous pouvez sauvegarder vos changements, ou vous n'avez pas de changements significatifs dans votre fork), je dirais que c'est probablement la voie à suivre.

Rappelez-vous, avec DVCS, la bifurcation d'un dépôt crée un clone complet de ce dépôt. répertoire entier . Si vous supprimez votre fork actuel et que vous forkez à nouveau le dépôt original, vous aurez une ardoise complètement propre pour travailler.

0 votes

Dans ce cas, Fork est une fonctionnalité spéciale de github, et non de git, bien qu'il utilise les fonctionnalités de git. Il y a des capacités administratives spéciales de github que vous pouvez faire avec github-forks.

1 votes

Ah, je vois. J'utilise principalement BitBucket, et sur ce site, " Fork " est synonyme de " clone " lorsque vous travaillez avec des copies de travail personnelles. Je vais quand même laisser ma réponse ici, juste au cas où.

0 votes

Oui, j'ai supprimé mon clone local et l'ai re-cloné plusieurs fois déjà. J'ai fait une expérience avec un autre dépôt et il semble qu'il n'y ait pas de problème à supprimer une fourche et à en créer une nouvelle à partir de la même source.

0voto

Seth Robertson Points 13276

Sur votre repo privé, ajoutez le repo de forkee comme un remote. Rebasez/réinitialisez vos branches à partir des branches de la version distante. Faites un "force push" sur votre repo github.

Si vous avez besoin de commandes exactes, faites-le moi savoir. Faites-moi également savoir si vous voulez essayer de préserver les commits locaux ou si vous pouvez les faire disparaître.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X