768 votes

Tirer les nouvelles mises à jour du dépôt GitHub original vers le dépôt GitHub forké

J'ai forké le dépôt de quelqu'un sur GitHub et j'aimerais mettre à jour ma version avec les commits et les mises à jour faites dans le dépôt original. Celles-ci ont été faites après que j'ai forké ma copie.

Comment puis-je intégrer les modifications qui ont été apportées à l'origine et les incorporer dans mon référentiel ?

1 votes

Il peut s'agir d'un doublon ou d'un simple lien : Fusionner entre forks dans GitHub .

0 votes

Si vous souhaitez synchroniser d'autres balises, procédez comme suit git push --force origin --tags après les solutions proposées !

2 votes

871voto

VonC Points 414372

Vous devez ajouter le dépôt original (celui que vous avez forké) en tant que dépôt distant.

A partir de la Documentation GitHub sur le forçage d'un dépôt :

Screenshot of the old GitHub interface with a rectangular lens around the "Fork" button

Une fois le clonage terminé, votre repo aura un remote nommé " origin "qui pointe vers votre fork sur GitHub.
Ne laissez pas le nom vous confondre, cela ne pointe pas vers le repo d'origine à partir duquel vous avez forké. Pour vous aider à suivre ce repo, nous allons ajouter un autre remote nommé "upstream" :

$ cd PROJECT_NAME
$ git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
$ git fetch upstream

# then: (like "git pull" which is fetch + merge)
$ git merge upstream/master master

# or, better, replay your local work on top of the fetched branch
# like a "git pull --rebase"
$ git rebase upstream/master

Il y a également un outil en ligne de commande ( gh ) qui peut faciliter les opérations ci-dessus .

Voici un aperçu de son fonctionnement :

Flowchart on the result after the commands are executed

Voir aussi " Les Git forks sont-ils en fait des clones de Git ? ".

16 votes

0 votes

Besoin d'ajouter git merge après git fetch upstream

3 votes

@syedrakib Je préfère un git rebase upstream/master mais j'ai ajouté les deux possibilités dans la réponse.

124voto

n00shie Points 534

En plus de la réponse de VonC, vous pouvez encore l'adapter à votre goût.

Après avoir récupéré la branche distante, il faut encore fusionner les commits. Je remplacerais

$ git fetch upstream

avec

$ git pull upstream master

puisque git pull est essentiellement git fetch + git merge.

0 votes

Que se passe-t-il si je sais que la branche amont n'apporte aucune modification aux fichiers existants, mais que seuls quelques fichiers de ressources ont été ajoutés ?

4 votes

Dans ce cas, il est certain qu'il suffit d'effectuer une avance rapide.

0 votes

Comment faire maître en amont écraser tous les fichiers locaux (afin d'éviter les conflits de fusion) upstream master est en tête du code dans ce cas, nous lui faisons donc confiance à 100% ... nous avons réussi à le faire.

118voto

Akshayraj Kore Points 1306

Utiliser :

git remote add upstream ORIGINAL_REPOSITORY_URL

Ceci aura pour effet de positionner votre upstream sur le dépôt à partir duquel vous avez forké. Ensuite, faites ceci :

git fetch upstream      

Cela permettra de récupérer toutes les branches, y compris master, du dépôt original.

Fusionnez ces données dans votre branche principale locale :

git merge upstream/master

Poussez les changements vers votre dépôt forké, c'est-à-dire vers l'origine :

git push origin master

Voilà ! Vous avez terminé la synchronisation du référentiel original.

78voto

Dmitry Pavlov Points 2260

Le présent vidéo spectacles comment mettre à jour un fork directement depuis GitHub

Les étapes :

  1. Ouvrez votre fork sur GitHub.
  2. Cliquez sur Pull Requests .
  3. Cliquez sur New Pull Request . Par défaut, GitHub compare l'original avec votre fork, et il ne devrait pas y avoir de comparaison à faire si vous n'avez pas fait de changements.
  4. Cliquez sur switching the base . GitHub va maintenant comparer votre fork avec l'original, et vous devriez voir toutes les dernières modifications.
  5. Cliquez sur Create a pull request pour cette comparaison et attribuez un nom prévisible à votre demande de téléchargement (par exemple, Update from original).
  6. Cliquez sur Create pull request .
  7. Faites défiler vers le bas et cliquez sur Merge pull request et enfin Confirm fusionner. Si votre fork n'a pas été modifié, vous pourrez le fusionner automatiquement.

6voto

cakraww Points 311

Si vous voulez le faire sans cli, vous pouvez le faire entièrement sur le site Github.

  1. Allez dans votre dépôt fork.
  2. Cliquez sur New pull request .
  3. Assurez-vous de définir votre fork comme dépôt de base, et le dépôt original (en amont) comme dépôt principal. En général, vous ne voulez synchroniser que la branche master.
  4. Create a new pull request .
  5. Sélectionnez la flèche à droite du bouton de fusion, et assurez-vous de choisir rebase au lieu de merge. Cliquez ensuite sur le bouton. De cette manière, il n'y aura pas de validation de fusion inutile.
  6. Fait.

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