J'ai récemment créé un projet et appliqué plusieurs correctifs. J'ai ensuite créé une demande de tirage qui a ensuite été acceptée.
Quelques jours plus tard, une autre modification a été apportée par un autre contributeur. Donc, ma fourchette ne contient pas ce changement.
Comment puis-je mettre ce changement dans ma fourchette? Dois-je supprimer et recréer ma fourchette lorsque j'ai d'autres modifications à apporter? Ou existe-t-il un bouton de mise à jour?
git
github
pull-request
git-fork
Lea Hayes
la source
la source
Réponses:
Dans votre clone local de votre référentiel forké, vous pouvez ajouter le référentiel GitHub d'origine en tant que "distant". (Les "télécommandes" sont comme des surnoms pour les URL des référentiels -
origin
par exemple.) Ensuite, vous pouvez récupérer toutes les branches de ce référentiel en amont et rebaser votre travail pour continuer à travailler sur la version en amont. En termes de commandes qui pourraient ressembler à:Si vous ne voulez pas réécrire l'historique de votre branche principale (par exemple parce que d'autres personnes l'ont peut-être clonée), vous devez remplacer la dernière commande par
git merge upstream/master
. Cependant, pour effectuer d'autres requêtes d'extraction aussi propres que possible, il est probablement préférable de rebaser.Si vous avez rebasé votre branche sur,
upstream/master
vous devrez peut-être forcer le push pour le pousser vers votre propre référentiel forké sur GitHub. Vous feriez cela avec:Vous ne devez l'utiliser que
-f
la première fois après avoir rebasé.la source
-f
qui gâche tout le monde qui aurait pu cloner votre version.git merge --no-ff upstream/master
cette façon, vos validations ne sont plus au top.À partir de mai 2014, il est possible de mettre à jour un fork directement depuis GitHub. Cela fonctionne toujours depuis septembre 2017, MAIS cela conduira à un sale historique de commit.
Update from original
).Vous avez maintenant trois options, mais chacune mènera à un historique de commit moins que net.
This branch is X commits ahead, Y commits behind <original fork>
.Donc oui, vous pouvez garder votre dépôt à jour avec son amont en utilisant l'interface utilisateur Web de GitHub, mais cela endommagera votre historique de validation. Restez à la ligne de commande à la place - c'est facile.
la source
Voici le document officiel de GitHub sur la synchronisation d'un fork :
la source
git push origin master
--follow-tags
: stackoverflow.com/a/26438076/667847git merge upstream/master
, puis vérifier pour développer la branche et fairegit merge upstream/develop
Permission denied (publickey). fatal: Could not read from remote repository.
lorsque j'essayais de récupérer le compte Github de Facebook en amont.De nombreuses réponses finissent par déplacer votre fork d' un commit avant le référentiel parent. Cette réponse résume les étapes trouvées ici qui déplaceront votre fork vers le même commit que le parent .
Modifiez le répertoire dans votre référentiel local.
git checkout master
Ajoutez le parent en tant que référentiel distant,
git remote add upstream <repo-location>
git fetch upstream
Problème
git rebase upstream/master
git status
Problème
git push origin master
Pour plus d'informations sur ces commandes, reportez-vous à l' étape 3 .
la source
Si, comme moi, vous ne soumettez jamais rien directement à master , ce que vous devriez vraiment faire, vous pouvez faire ce qui suit.
À partir du clone local de votre fork, créez votre télécommande en amont. Vous ne devez le faire qu'une seule fois:
Ensuite, chaque fois que vous souhaitez rattraper la branche principale du référentiel en amont, vous devez:
En supposant que vous n'avez jamais commis quoi que ce soit sur le maître vous-même, vous devriez déjà avoir terminé. Vous pouvez maintenant pousser votre maître local vers votre fork GitHub distant d'origine. Vous pouvez également rebaser votre branche de développement sur votre maître local désormais à jour.
Au-delà de la configuration initiale en amont et de la vérification du maître, il vous suffit d'exécuter la commande suivante pour synchroniser votre maître avec l'amont: git pull upstream master .
la source
Avant-propos: Votre fork est l '"origine" et le référentiel à partir duquel vous avez forké est l' "amont".
Supposons que vous avez déjà cloné votre fork sur votre ordinateur avec une commande comme celle-ci:
Si cela est donné, vous devez continuer dans cet ordre:
Ajoutez le "amont" à votre référentiel cloné ("origine"):
Récupérez les commits (et les branches) de "l'amont":
Basculez vers la branche "master" de votre fork ("origine"):
Cachez les changements de votre branche "master":
Fusionnez les changements de la branche "master" de "l'amont" dans votre branche "master" de votre "origine":
Résolvez les conflits de fusion, le cas échéant, et validez votre fusion
Poussez les changements sur votre fourche
Récupérez vos modifications cachées (le cas échéant)
Vous avez terminé! Toutes nos félicitations!
GitHub fournit également des instructions pour ce sujet: Synchroniser un fork
la source
git remote add upstream [email protected]:original_author/project_name.git
juste un aliasgit remote add upstream https://github.com/original_author/project_name.git
?git stash
et unegit stash pop
partie très utileDepuis novembre 2013, il y a eu une demande de fonctionnalité non officielle ouverte avec GitHub pour leur demander d'ajouter une méthode très simple et intuitive pour garder une branche locale en synchronisation avec l'amont:
https://github.com/isaacs/github/issues/121
Remarque: Étant donné que la demande de fonctionnalité n'est pas officielle, il est également conseillé de contacter
[email protected]
pour ajouter votre prise en charge pour une fonctionnalité comme celle-ci à implémenter. La demande de fonctionnalité non officielle ci-dessus pourrait être utilisée comme preuve du montant d'intérêt pour cette mise en œuvre.la source
À la date de cette réponse, GitHub n'a pas ( ou devrais-je dire plus? ) Cette fonctionnalité dans l'interface Web. Vous pouvez cependant demander
[email protected]
d'ajouter votre vote pour cela.En attendant, l'utilisateur de GitHub bardiharborow a créé un outil pour ce faire: https://upriver.github.io/
La source est ici: https://github.com/upriver/upriver.github.io
la source
Si vous utilisez GitHub pour Windows ou Mac, ils ont maintenant une fonction en un clic pour mettre à jour les fourches:
la source
En fait, il est possible de créer une branche dans votre fork à partir de n'importe quel commit de l'amont dans le navigateur:
https://github.com/<repo>/commits/<hash>
, où repo est votre fork, et hash est un hachage complet de commit que vous pouvez trouver dans l'interface Web en amont. Par exemple, je peux ouvrir https://github.com/max630/linux/commits/0aa0313f9d576affd7747cc3f179feb097d28990 , qui indiquelinux
master
le moment de l'écriture.Vous pouvez ensuite récupérer cette branche dans votre clone local et vous n'aurez pas à renvoyer toutes ces données vers GitHub lorsque vous poussez des modifications au-dessus de cette validation. Ou utilisez l'interface Web pour modifier quelque chose dans cette branche.
Comment cela fonctionne (c'est une supposition, je ne sais pas exactement comment GitHub le fait): les fourches partagent le stockage d'objets et utilisent des espaces de noms pour séparer les références des utilisateurs. Vous pouvez donc accéder à toutes les validations via votre fork, même si elles n'existaient pas au moment de la fourche.
la source
Suivez les étapes ci-dessous. Je les ai essayés et cela m'a aidé.
Commander à votre succursale
Tirez la branche du référentiel source pour obtenir le dernier code
la source
git push HttpsForYourForkOfTheRepo BRANCH_NAME
Je mets à jour mes dépôts fourchus avec cette seule ligne:
Utilisez-le si vous ne souhaitez pas ajouter un autre point de terminaison distant à votre projet, comme d'autres solutions publiées ici.
la source
pull
.En complément de cette réponse, je cherchais un moyen de mettre à jour toutes les branches distantes de mon référentiel cloné ( origine ) à partir des branches en amont en une seule fois. Voilà comment je l'ai fait.
Cela suppose que vous avez déjà configuré une en amont pointant à distance au référentiel source (où l' origine a été fourchue de) et ont synchronisé avec
git fetch upstream
.Exécutez ensuite:
La première partie de cette commande répertorie toutes les têtes du référentiel distant en amont et supprime le SHA-1 suivi du
refs/heads/
préfixe de nom de branche.Ensuite, pour chacune de ces branches, il pousse la copie locale de la branche de suivi à distance en amont (
refs/remotes/upstream/<branch>
côté local) directement vers la branche distante d' origine (refs/heads/<branch>
côté distant).L'une de ces commandes de synchronisation de branche peut échouer pour l'une des deux raisons: soit la branche en amont a été réécrite, soit vous avez poussé les validations sur cette branche vers votre fork. Dans le premier cas où vous n'avez rien engagé dans la branche de votre fork, il est prudent de pousser avec force (ajoutez le commutateur -f , c'est-
git push -f
à- dire dans la commande ci-dessus). Dans l'autre cas, cela est normal car votre branche fork a divergé et vous ne pouvez pas vous attendre à ce que la commande sync fonctionne jusqu'à ce que vos validations aient été fusionnées en amont .la source
L'application "Pull" est une solution de configuration et d'oubli automatique. Il synchronisera la branche par défaut de votre fork avec le référentiel en amont.
Visitez l'URL, cliquez sur le bouton vert "Installer" et sélectionnez les référentiels où vous souhaitez activer la synchronisation automatique.
La branche est mise à jour une fois par heure directement sur GitHub, sur votre machine locale, vous devez tirer la branche principale pour vous assurer que votre copie locale est synchronisée.
la source
mergemethod
. Plus d'informations à ce sujet iciAndroid Studio a maintenant appris à fonctionner avec les référentiels fork de GitHub (vous n'avez même plus besoin d'ajouter de référentiel distant "en amont" par commande de console).
Ouvrir le menu VCS → Git
Et faites attention aux deux derniers éléments du menu contextuel:
Rebaser ma fourche GitHub
Créer une demande de tirage
Essayez les. J'utilise le premier pour synchroniser mon référentiel local. Quoi qu'il en soit, les branches du référentiel distant parent ("en amont") seront accessibles dans Android Studio après avoir cliqué sur "Redéfinir ma fourchette GitHub", et vous pourrez facilement les utiliser.
(J'utilise Android Studio 3.0 avec les plugins "Git integration" et "GitHub".)
la source
Lorsque vous avez cloné votre référentiel forké, accédez au chemin du répertoire où réside votre clone et aux quelques lignes de votre terminal Git Bash.
Et là, vous êtes prêt à partir. Toutes les modifications mises à jour dans le référentiel principal seront insérées dans votre référentiel fork.
La commande "fetch" est indispensable pour rester à jour dans un projet: ce n'est que lorsque vous effectuez une "git fetch" que vous serez informé des changements que vos collègues ont poussés sur le serveur distant.
Vous pouvez toujours visiter ici pour d'autres questions
la source
Si vous définissez votre amont. Vérifiez avec
git remote -v
, cela suffira.la source
Cela dépend de la taille de votre référentiel et de la façon dont vous l'avez créé.
S'il s'agit d'un référentiel assez volumineux, vous souhaitiez peut-être le gérer d'une manière spéciale (par exemple, l'historique des suppressions). Fondamentalement, vous pouvez obtenir des différences entre les versions actuelles et en amont, les valider, puis revenir au maître.
Essayez de lire celui-ci . Il décrit comment gérer les grands référentiels Git et comment les amont avec les dernières modifications.
la source
Je voudrais ajouter à la réponse de @ krlmlr .
Dans un premier temps , le dépôt en forme de fourche a une branche nommée:
master
. Si vous travaillez sur une nouvelle fonctionnalité ou un correctif, vous devez généralement créer une nouvelle branchefeature
et apporter les modifications.Si vous souhaitez que le référentiel forké soit synchronisé avec le référentiel parent, vous pouvez configurer un fichier de configuration (
pull.yml
) pour l' application Pull ( dans la branche de fonctionnalité ), comme ceci:Cela permet de maintenir à jour la
master
branche du dépôt fourchu avec le dépôt parent. Il maintient lafeature
branche du dépôt fourchu mise à jour via lamaster
branche du dépôt fourchu en la fusionnant. Cela suppose que lafeature
branche est la branche par défaut qui contient le fichier de configuration.Ici, deux
mergemethods
sont en jeu, l'unhardreset
qui aide à forcer les changements de synchronisation dans lamaster
branche du référentiel fourchu avec le référentiel parent et l'autre méthodemerge
. Cette méthode est utilisée pour fusionner les modifications que vous avez effectuées dans lafeature
branche et les modifications effectuées en raison de la synchronisation forcée dans lamaster
branche. En cas de conflit de fusion, l'application Pull vous permettra de choisir le prochain plan d'action lors de la demande Pull.Vous pouvez lire sur les configurations de base et avancées et divers
mergemethods
ici .J'utilise actuellement cette configuration dans mon dépôt fourchu ici pour m'assurer qu'une amélioration demandée ici reste à jour.
la source
Il y a deux choses principales à garder un dépôt forké toujours à jour pour de bon.
Ainsi, lorsque votre demande de tirage est acceptée, vous pouvez supprimer la branche en toute sécurité car votre code contribué sera alors en direct dans votre maître de votre dépôt forké lorsque vous le mettrez à jour avec l'amont. Par cela, votre maître sera toujours en bon état pour créer une nouvelle branche pour effectuer un autre changement.
Cela peut être fait avec cron . Voici un exemple de code si vous le faites sous Linux.
mettre ce code sur
crontab file
pour exécuter le travail sur une base horaire.puis créez le
cron.sh
fichier script et une interaction git avec ssh-agent et / ou attendez comme ci-dessousVérifiez votre référentiel forké. De temps en temps, il affichera toujours cette notification:
la source
Utilisez ces commandes (dans le cas chanceux)
la source