Vraag Hoe kan ik een GitHub forked repository bijwerken?


Ik heb onlangs een project gevorkt en verschillende fixes toegepast. Vervolgens heb ik een pull-aanvraag gemaakt die vervolgens werd geaccepteerd.

Een paar dagen later werd nog een verandering aangebracht door een andere bijdrager. Dus mijn vork bevat die verandering niet.

Hoe kan ik die verandering in mijn vork krijgen? Moet ik mijn vork verwijderen en opnieuw maken wanneer ik verdere wijzigingen moet aanbrengen? Of is er een updateknop?


2829
2017-08-30 13:53


oorsprong


antwoorden:


In je lokale kloon van je gevorkte repository, kun je de originele GitHub-repository als een "remote" toevoegen. ("Remotes" zijn als bijnamen voor de URL's van repositories - origin is er bijvoorbeeld een.) Vervolgens kunt u alle takken van die upstream-repository ophalen en uw werk rebasen om verder te werken aan de upstream-versie. In termen van commando's die er als volgt kunnen uitzien:

# Add the remote, call it "upstream":

git remote add upstream https://github.com/whoever/whatever.git

# Fetch all the branches of that remote into remote-tracking branches,
# such as upstream/master:

git fetch upstream

# Make sure that you're on your master branch:

git checkout master

# Rewrite your master branch so that any commits of yours that
# aren't already in upstream/master are replayed on top of that
# other branch:

git rebase upstream/master

Als u de geschiedenis van uw mastertak niet wilt herschrijven (bijvoorbeeld omdat andere mensen deze mogelijk hebben gekloond), moet u de laatste opdracht vervangen door git merge upstream/master. Echter, voor het maken van verdere pull-aanvragen die zo schoon mogelijk zijn, is het waarschijnlijk beter om te rebasen.


Als je je branch hebt gerebased upstream/master je moet misschien de push forceren om het naar je eigen gevorkte repository op GitHub te duwen. Je zou dat doen met:

git push -f origin master

U hoeft alleen de -f de eerste keer nadat je bent herbaskt.


3098
2017-08-30 14:01



Vanaf mei 2014 is het mogelijk om een ​​vork rechtstreeks bij GitHub bij te werken. Dit werkt nog steeds vanaf september 2017, MAAR het zal leiden tot een vuile commit-geschiedenis.

  1. Open je vork op GitHub.
  2. Klik op Pull-verzoeken.
  3. Klik op Nieuw Pull-verzoek. Standaard vergelijkt GitHub het origineel met je vork, en er zou niets moeten zijn om te vergelijken als je geen wijzigingen hebt aangebracht.
  4. Klik de basis omschakelen als je die link ziet. Anders stelt u handmatig de basis vork ga naar je vork, en de kop vork naar de stroomopwaartse. Nu vergelijkt GitHub je vork met het origineel en zou je de nieuwste wijzigingen moeten zien. enter image description here
  5. Maak een pull-aanvraag en wijs een voorspelbare naam toe aan uw pull-aanvraag (bijv. Update from original).
  6. Blader naar beneden naar Trekaanvraag samenvoegen, maar klik nog niet op iets.

Nu heb je drie opties, maar elk zal leiden tot een minder overzichtelijke commit-geschiedenis.

  1. De standaard zal een lelijke merge commit creëren.
  2. Als u op de vervolgkeuzelijst klikt en 'Squash en samenvoegen' kiest, worden alle tussenliggende commits in één gepropt. Dit is meestal iets dat je niet wilt.
  3. Als u klikt Rebasen en samenvoegen, alle commits worden "met" u gemaakt, de originele PR's zullen naar uw PR linken, en GitHub zal weergegeven worden This branch is X commits ahead, Y commits behind <original fork>.

Dus ja, je kunt je repo up-to-date houden met zijn upstream via de GitHub web-UI, maar dat zal je commit-geschiedenis ondermijnen. Erbij blijven de opdrachtregel in plaats daarvan - het is gemakkelijk.


642
2018-05-25 07:31



Hier is het officiële document van GitHub over Een vork synchroniseren:

Een vork synchroniseren

De opzet

Voordat u kunt synchroniseren, moet u een afstandsbediening toevoegen die naar de upstream-repository wijst. Je hebt dit misschien gedaan toen je oorspronkelijk vertrok.

Tip: door je vork te synchroniseren, wordt je lokale kopie van de repository alleen bijgewerkt; het werkt je repository niet bij op GitHub.

$ git remote -v
# List the current remotes
origin  https://github.com/user/repo.git (fetch)
origin  https://github.com/user/repo.git (push)

$ git remote add upstream https://github.com/otheruser/repo.git
# Set a new remote

$ git remote -v
# Verify new remote
origin    https://github.com/user/repo.git (fetch)
origin    https://github.com/user/repo.git (push)
upstream  https://github.com/otheruser/repo.git (fetch)
upstream  https://github.com/otheruser/repo.git (push)

synchroniseren

Er zijn twee stappen vereist om je repository te synchroniseren met de upstream: eerst moet je de remote ophalen, dan moet je de gewenste branch samenvoegen met je lokale branch.

Ophalen

Ophalen van de externe repository zal zijn filialen en hun respectievelijke commits binnenhalen. Deze worden opgeslagen in uw lokale repository onder speciale branches.

$ git fetch upstream
# Grab the upstream remote's branches
remote: Counting objects: 75, done.
remote: Compressing objects: 100% (53/53), done.
remote: Total 62 (delta 27), reused 44 (delta 9)
Unpacking objects: 100% (62/62), done.
From https://github.com/otheruser/repo
 * [new branch]      master     -> upstream/master

We hebben nu de hoofdtak van de upstream opgeslagen in een lokale branch, stroomopwaarts / master

$ git branch -va
# List all local and remote-tracking branches
* master                  a422352 My local commit
  remotes/origin/HEAD     -> origin/master
  remotes/origin/master   a422352 My local commit
  remotes/upstream/master 5fdff0f Some upstream commit

Samenvoegen

Nu we de upstream-repository hebben opgehaald, willen we de wijzigingen samenvoegen met onze lokale vestiging. Dit zal die tak synchroon met stroomopwaarts brengen, zonder onze lokale veranderingen te verliezen.

$ git checkout master
# Check out our local master branch
Switched to branch 'master'

$ git merge upstream/master
# Merge upstream's master into our own
Updating a422352..5fdff0f
Fast-forward
 README                    |    9 -------
 README.md                 |    7 ++++++
 2 files changed, 7 insertions(+), 9 deletions(-)
 delete mode 100644 README
 create mode 100644 README.md

Als uw lokale filiaal geen unieke commits had, voert git in plaats daarvan een "fast-forward" uit:

$ git merge upstream/master
Updating 34e91da..16c56ad
Fast-forward
 README.md                 |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Tip: als je je repository op GitHub wilt bijwerken, volg je de instructies hier


365
2017-10-21 23:04



Veel antwoorden leiden uiteindelijk tot het verplaatsen van je vork een verplichting die voor je ligt van de bovenliggende repository. Dit antwoord vat de gevonden stappen samen hier welke zal verplaats je vork naar dezelfde commit als de ouder.

  1. Verander de map naar uw lokale repository.

    • Schakel over naar de hoofdtak als dat niet het geval is git checkout master
  2. Voeg de ouder toe als een externe repository, git remote add upstream <repo-location>

  3. Kwestie git fetch upstream
  4. Kwestie git rebase upstream/master

    • In dit stadium controleer je of je vastlegt wat er wordt samengevoegd door te typen git status
  5. Kwestie git push origin master

Raadpleeg voor meer informatie over deze opdrachten stap 3.


81
2017-08-05 14:59



Sinds november 2013 is er een onofficieel functieverzoek geopend met GitHub om hen te vragen een zeer eenvoudige en intuïtieve methode toe te voegen om een ​​lokale vork synchroon met upstream te houden:

https://github.com/isaacs/github/issues/121

Opmerking: aangezien het functieverzoek niet-officieel is, is het ook raadzaam om contact op te nemen support@github.com om uw ondersteuning toe te voegen voor een functie als deze om te worden geïmplementeerd. Het bovenstaande verzoek om een ​​niet-officiële functie kan worden gebruikt als bewijs van de hoeveelheid interesse in deze die wordt geïmplementeerd.


39
2018-02-21 10:42



Voorwoord: Je vork is de "oorsprong" en de repository waar je van hebt gevorkt is "stroomopwaarts".

Laten we aannemen dat je je vork al op je computer hebt gekloond met een opdracht als deze:

git clone git@github.com:your_name/project_name.git
cd project_name

Als dat wordt gegeven, moet je in deze volgorde verder gaan:

  1. Voeg de "upstream" toe aan uw gekloonde repository ("oorsprong"):

    git remote add upstream git@github.com:original_author/project_name.git
    
  2. Haal de commits (en branches) op van de "upstream":

    git fetch upstream
    
  3. Schakel over naar de "master" -tak van uw vork ("oorsprong"):

    git checkout master
    
  4. Bewaar de wijzigingen in uw "hoofd" -tak:

    git stash
    
  5. Voeg de wijzigingen van de "master" -tak van de "stroomopwaarts" in uw "master" -tak van uw "oorsprong":

    git merge upstream/master
    
  6. Los samenvoegingsconflicten op en combineer uw samenvoeging

    git commit -am "Merged from upstream"
    
  7. Duw de wijzigingen in je vork

    git push
    
  8. Krijg uw opgeslagen veranderingen terug (indien aanwezig)

    git stash pop
    
  9. Je bent klaar! Gefeliciteerd!

GitHub biedt ook instructies voor dit onderwerp: Een vork synchroniseren


29
2018-03-16 12:24



Vanaf de datum van dit antwoord heeft GitHub niet (of zal ik niet langer zeggen?) deze functie in de webinterface. Je kunt het echter vragen support@github.com om daar je stem voor toe te voegen.

In de tussentijd heeft GitHub-gebruiker bardiharborow een hulpmiddel gemaakt om dit te doen: https://upriver.github.io/

Bron is hier: https://github.com/upriver/upriver.github.io


21
2017-09-14 14:22



Als, zoals ik, jij leg nooit iets rechtstreeks vast om te beheersen, wat u eigenlijk zou moeten doen, kunt u het volgende doen.

Maak vanaf de lokale kloon van je vork je stroomopwaartse afstandsbediening. U hoeft dat slechts één keer te doen:

git remote add upstream https://github.com/whoever/whatever.git

Wanneer u de upstream-repository-mastertak wilt bijhouden, moet u het volgende doen:

git checkout master
git pull upstream master

Ervan uitgaande dat je jezelf nooit iets hebt toegewijd aan de meester, zou je al klaar moeten zijn. Nu kun je je lokale meester naar je oorspronkelijke GitHub-vork op afstand duwen. U kunt ook uw ontwikkelingstak rebasen op uw nu bijgewerkte lokale meester.

Dus voorbij de initiële upstream setup en master checkout, alles wat je hoeft te doen is het volgende commando uitvoeren om je master te synchroniseren met upstream: git trek stroomopwaartse meester.


21
2018-01-03 16:59



Als u GitHub voor Windows gebruikt, hebben ze nu een functie met één klik om vorken bij te werken:

  1. Selecteer de repository in de gebruikersinterface.
  2. Klik bovenaan op de knop "Update from user / branch".

12
2018-03-31 21:45



Volg de onderstaande stappen. Ik heb ze geprobeerd en het heeft me geholpen.

Afrekenen naar uw kantoor

Syntaxis: git branch yourDevelopmentBranch
Voorbeeld: git checkout master

Trek aan de bron van de bronrepository voor het ophalen van de nieuwste code

Syntaxis: git pull https://github.com/tastejs/awesome-app-ideas meester
Voorbeeld: git pull https://github.com/ORIGINAL_OWNER/ORIGINAL_REPO.git BRANCH_NAME


8
2018-01-15 12:31