Kaip atnaujinti platų „GitHub“ saugyklą?

Neseniai pažymėjau projektą ir pritaikiau keletą pataisų. Tada sukūriau užklausą dėl perkėlimo, kuris buvo priimtas.

Po kelių dienų kitą pakeitimą padarė kitas dalyvis. Taigi mano kištukas neturi šio pakeitimo ... Kaip aš galiu gauti šį pakeitimą mano kištuko?

Ar turiu atlikti papildomus pakeitimus ir iš naujo sukurti mano kištuką? Ar yra naujinimo mygtukas?

2522
30 авг. nustatė Lea Hayes 30 rug. 2011-08-30 16:53 '11, 16:53, 2011-08-30 16:53
@ 15 atsakymų

Savo šakotojo saugyklos klone galite pridėti originalų „GitHub“ saugyklą kaip „nuotolinį“. („Ištrynimai“ yra panašūs į saugyklų URL slapyvardžius, pavyzdžiui, origin ). Tada jūs galite gauti visus filialus iš šio upstream saugyklos ir iš naujo įkelti savo darbą, kad galėtumėte toliau dirbti su ankstesne versija. Kalbant apie komandas, kurios gali atrodyti taip:

 # 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 

Jei nenorite perrašyti pagrindinės šakos istorijos (pvz., Kadangi kiti gali jį klonuoti), turėtumėte pakeisti paskutinę git merge upstream/master komandą. Tačiau norint, kad traukimo užklausos būtų kuo švaresnės, tikriausiai geriausia perpakuoti.


Jei sugadinote savo „ upstream/master filialą, gali prireikti spustelėti, kad jį įstumtumėte į savo didelę „GitHub“ saugyklą. Jūs tai padarytumėte:

 git push -f origin master 

Jums reikia naudoti -f tik iš naujo įdiegus.

2769
30 авг. Marko Longairo atsakymas 30 rug . 2011-08-30 17:01 '11 prie 17:01 2011-08-30 17:01

Nuo 2014 m. Gegužės mėn. Galite atnaujinti kištuką tiesiai iš „GitHub“. Jis vis dar veikia nuo 2017 m. Rugsėjo mėn., BUT , kuris sukels purviną fiksavimo istoriją.

  • Atidarykite „github“ kištuką.
  • Spustelėkite Pull Requests .
  • Spustelėkite „ New Pull Request“ . Pagal nutylėjimą „GitHub“ lygina originalą su šakute, ir neturėtų būti nieko palyginama, jei nepadarėte jokių pakeitimų.
  • Jei matote šią nuorodą, spustelėkite perjungti bazę . Priešingu atveju rankiniu būdu nuleiskite pagrindinę šakutę į šakės ir galinės šakės šakutę į viršų. Dabar „GitHub“ palygins jūsų kištuką su originalu, ir turėtumėte matyti visus naujausius pakeitimus. 2019
25 мая '14 в 10:31 2014-05-25 10:31 atsakymas pateikiamas lobzik gegužės 25 d. 14 d. 10:31 2014-05-25 10:31

Čia yra oficialus „GitHub“ dokumentas „ Sync Fork“ :

Sinchronizuoti šakutę

Tinkinimas

Prieš sinchronizuodami, turite pridėti ištrintą elementą, rodantį į viršutinę saugyklą. Galbūt tai padarėte, kai pradžioje šakojosi.

Taryba Sinchronizavimo šakutė atnaujina tik vietinę saugyklos kopiją; ji neatnaujina savo saugyklos „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) 

Sinchronizavimas

Reikia sinchronizuoti savo saugyklą su ankstesniuoju etapu: pirmiausia reikia ištraukti iš konsolės, tuomet turite susieti norimą filialą su vietiniu filialu.

Gaunama

Ištraukimas iš nuotolinio saugyklos sukels jo filialus ir atitinkamus įsipareigojimus. Jie saugomi jūsų vietinėje saugykloje pagal specialius filialus.

 $ git fetch upstream # Grab the upstream remote 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 

Dabar mes turime pirmaujančią šaką, saugomą vietiniame skyriuje, aukštyn / žemyn

 $ 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 

Susijungimas

Dabar, kai mes pasirinkome „upstream“ saugyklą, mes norime sujungti savo pakeitimus į mūsų vietinį skyrių. Dėl to šis filialas bus sinchronizuojamas su ankstesniuoju etapu, neprarandant vietinių pokyčių.

 $ git checkout master # Check out our local master branch Switched to branch 'master' $ git merge upstream/master # Merge upstream 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 

Jei jūsų vietinis filialas neturi jokių unikalių įsipareigojimų, git vietoj to atlieka greitą paspaudimą:

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

Taryba Jei norite atnaujinti savo saugyklą „GitHub“, vadovaukitės čia pateiktomis instrukcijomis .

325
22 окт. atsakymas pateiktas „ jumpnett“ spalio 22 d. 2013-10-22 02:04 '13, 02:04 2013-10-22 02:04

Daugelis atsakymų galų gale perkelia šakutę vieną užrakintą prieš pagrindinę saugyklą. Šis atsakymas apibendrina čia aptiktus veiksmus, kurie jūsų šakutę perkelia į tą patį fiksavimą kaip ir tėvas .

  • Pakeiskite katalogą į vietinę saugyklą.

    • Eikite į pagrindinį filialą, jei nesate git checkout master
  • Pridėkite pagrindinį objektą kaip nuotolinį saugyklą, git remote add upstream <repo-location>

  • git fetch upstream problemą
  • git rebase upstream/master problema

    • Šiuo metu patikrinate, kas išsprendžia, kas bus sujungta, įvesdami „ git status
  • git push origin master problema

Daugiau informacijos apie šias komandas žr. 3 veiksme .

68
05 авг. atsakymą pateikė Sahar Rabinoviz 05 rug. 2015-08-05 17:59 '15, 17:59, 2015-08-05 17:59

Nuo 2013 m. Lapkričio mėn. „GitHub“ buvo atidarytas neoficialus funkcijų prašymas, kad jie paprašytų pridėti labai paprastą ir intuityvų metodą, kad vietinis kištukas būtų sinchronizuojamas su „upstream“:

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

Pastaba Kadangi funkcijų prašymas yra neoficialus, taip pat rekomenduojama susisiekti su support@github.com kad pridėtumėte palaikymą tokiai funkcijai, kokia bus įgyvendinama. Pirmiau minėtas neoficialus prašymas gali būti naudojamas kaip įrodymas, kaip šis procesas yra įdomus.

32
21 февр. atsakymas pateikiamas 21 vasario mėn. 2016-02-21 13:42 '16, 13:42 pm. 2016-02-21 13:42

Pratarmė: Jūsų kištukas yra „šaltinis“, o saugykla, iš kurios esate šakotoji, yra „aukštyn“.

Tarkime, kad jau prijungėte savo kištuką prie kompiuterio naudodami šią komandą:

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

Jei tai nurodyta, turite tęsti toliau nurodytą tvarką:

  • Pridėti „į viršų“ į savo klonuotą saugyklą („kilmė“):

     git remote add upstream git@github.com:original_author/project_name.git 
  • Ištraukti įsipareigojimus (ir filialus) iš viršaus:

     git fetch upstream 
  • Perjunkite į „pirmaujančią“ šakutės šaką („kilmė“):

     git checkout master 
  • Atkreipkite dėmesį į „pagrindinio“ filialo pakeitimus:

     git stash 
  • Sujunkite pakeitimus iš „pirmaujančio“ filialo „į viršų“ į „pagrindinį“ „kilmės“ padalinį:

     git merge upstream/master 
  • Išspręsti sujungimo konfliktus, jei tokių yra, ir sujungti

     git commit -am "Merged from upstream" 
  • Įdėkite pakeitimus į savo kištuką

     git push 
  • Grąžinkite paslėptus pakeitimus (jei yra)

     git stash pop 
  • Jūs baigsite! Sveikiname!

„GitHub“ taip pat pateikia šios temos instrukcijas: „ Sync Fork“

21
16 марта '16 в 15:24 2016-03-16 15:24 Atsakymą pateikė Benny Neugebauer kovo 16, 16 d. 15:24 2016-03-16 15:24

Nuo šio atsakymo datos „GitHub“ neturi ( arba nesakau? ) Interneto sąsajos funkcija. Tačiau galite paprašyti support@github.com pridėti savo balsavimą už tai.

Tuo pačiu metu „GitHub bardiharborow“ naudotojas sukūrė įrankį: https://upriver.github.io/

Šaltinis čia: https://github.com/upriver/upriver.github.io

17
14 сент. atsakymą pateikė Lucero 14 sep. 2016-09-14 17:22 '16 at 17:22 pm 2016-09-14 17:22

Jei, kaip ir aš, niekada nieko nedarote tiesiogiai su kapitonu , kurį jums tikrai reikia, galite tai padaryti.

Iš vietinio jūsų šakės klono sukurkite savo „uplink“ konsolę. Jums tai reikia padaryti tik vieną kartą:

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

Tada, kai norite pasivyti pagrindinį saugyklos saugyklą, turite:

 git checkout master git pull upstream master 

Darant prielaidą, kad jūs niekada nieko nepadarėte savo šeimininkui, turėtumėte tai padaryti. Dabar galite spustelėti vietinį vedlį savo nuotolinio „GitHub“ kištuko. Taip pat galite įdiegti savo plėtros filialą į savo modernų vietinį kompiuterį.

Taigi, prieš pradinį nustatymą ir pagrindinį testą, viskas, ką jums reikia padaryti, yra paleisti šią komandą, kad sinchronizuotumėte savo lyderį su „up“: „ git pull upstream master“ .

10
03 янв. atsakymas suteiktas Slion 03 jan. 2017-01-03 19:59 '17 19:59 pm 2017-01-03 19:59

Jei naudojate „GitHub“ sistemai „Windows“, dabar jie turi vieną paspaudimo funkciją, skirtą šakių atnaujinimui:

  • Vartotojo sąsajoje pasirinkite repo.
  • Viršutinėje dalyje spustelėkite mygtuką „Atnaujinti iš vartotojo / filialo“.
6
01 апр. Atsakymas pateikiamas ShitalShah 01 Bal. 2016-04-01 00:45 '16 ne 0:45 2016-04-01 00:45

Atlikite šiuos veiksmus. Aš juos išbandžiau ir tai padėjo man.

Pirkite savo filialą

Sintaksė: „ git“ filialas „YourDevelopmentBranch“
Pavyzdys: „ git checkout“ vedlys

Išjunkite šaltinio saugyklos filialą, kad gautumėte naujausią kodą.

Sintaksė: git pull https://github.com/tastejs/awesome-app-ideas master
Pavyzdys: git patraukite https://github.com/ORIGINAL_OWNER/ORIGINAL_REPO.git BRANCH_NAME

6
15 янв. atsakymą pateikė Venkat.R 15 sausis 2016-01-15 15:31 '16 at 15:31 2016-01-15 15:31

Tiesą sakant, galite sukurti šakutės šakutę savo naršyklėje iš bet kokio aukštesnio lygmens fiksavimo:

  • atidarykite https://github.com/<repo>/commits/<hash> , kur repo yra jūsų šakutė, o maišos yra visa fiksavimo fazė, kurią galite rasti viršutinėje žiniatinklio sąsajoje. Pvz., Galiu atidaryti https://github.com/max630/linux/commits/0aa0313f9d576affd7747cc3f179feb097d28990 , kuris nurodo linux master kaip rašymo laiką.
  • Spustelėkite mygtuką „Medis: ....“.
  • įveskite naujo filialo pavadinimą ir paspauskite „Enter“

2019

18 янв. atsakymas pateikiamas max630 sausis 18 2017-01-18 09:41 '17 at 9:41 2017-01-18 09:41

Atnaujinu savo šakotą saugyklą viena eilute:

 git pull https://github.com/forkuser/forkedrepo.git branch 

Naudokite tai, jei nenorite prie kito projekto pridėti kito nuotolinio taško, kaip ir kiti čia paskelbti sprendimai.

1
08 сент. atsakymą pateikė R.Bravo 08 sep . 2017-09-08 05:00 '17, 5:00 2017-09-08 05:00

Kaip papildymą prie šio atsakymo, ieškojau būdų, kaip vienu metu atnaujinti visus mano klonuoto repo nuotolinio stebėjimo filialus. Taip aš tai padariau.

Daroma prielaida, kad jūs jau nustatėte nuotolinį šaltinio duomenų saugyklos šaltinio rodmenį ir sinchronizavote jį su git fetch upstream .

Vykdyti:

 for branch in $(git ls-remote --heads upstream|sed 's#^.*refs/heads/##'); do git push origin refs/remotes/upstream/$branch:refs/heads/$branch; done 

Pirmoje šios komandos dalyje bus išvardyti visi upstream nuotolinio atpirkimo skyriaus skyriai ir pašalintas priešdėlis SHA-1 ir /refs/heads/ .

Tada kiekvienam iš šių filialų jis nukels vietinę nuotolinio filialo kopiją ( refs/remotes/upstream/<branch> ) tiesiai į nuotolinį filialą, kurio origin ( refs/heads/<branch> ).

Bet kuri iš šių šakų sinchronizavimo komandų gali būti užbaigta vienu iš dviejų priežasčių: arba upstream filialas buvo perrašytas, arba jūs padaryėte šio šakos pataisą savo šakutėje. Pirmuoju atveju, kai nepadarysite šakutės į šakutę, yra sunku nuspausti ( git push -f ). Kitais atvejais normalus, kai šakės atšakos skiriasi, ir jūs negalite tikėtis, kad sinchronizavimo komanda dirbs tol, kol jūsų įsipareigojimai bus susieti atgal į upstream .

1
12 июня '17 в 23:17 2017-06-12 23:17 Thomas Guyot-Sionnest atsakymas birželio 12 d., 17 val. 11:17 2017-06-12 23:17

Tai priklauso nuo kapinyno dydžio ir šakos.

Jei tai yra gana didelė saugykla, galbūt norėsite jį tvarkyti ypatingu būdu (pvz., Perrašyti istoriją). Iš esmės, galite gauti skirtumą tarp dabartinių ir didėjančių versijų, pataisyti juos ir tada vilkite vyšnus į šeimininką.

Pabandykite jį perskaityti. Jame aprašoma, kaip elgtis su didelėmis „Git“ saugyklomis ir kaip juos naršyti su naujausiais pakeitimais.

0
23 апр. atsakymas pateikiamas s0nicYouth 23 d. 2017-04-23 15:47 '17 at 15:47 2017-04-23 15:47

Dabar „Android“ studija sužinojo, kaip dirbti su „github“ šakių saugyklomis (net nereikia pridėti nuotolinio saugyklos „upstream“) iš konsolės komandos)

Atidarykite VCS → git meniu

ir atkreipkite dėmesį į paskutinius 2 iššokančius meniu elementus:

  • Remontuokite mano github kištuką

  • Sukurkite ruožo užklausą

Išbandykite juos. Aš sėkmingai naudoju pirmąjį. Bet kokiu atveju, po to, kai nuotolinio saugyklos filialai, iš kurių jūs esate šakoje, bus prieinami „Android“ studijoje, ir jūs galite lengvai dirbti su jais.

(Naudoju „Android Studio 3.0“ su „git integracija“ ir „github“ papildiniais)

2019

13 нояб. Alexshr lapkričio 13 d. Atsakymas 2017-11-13 23:03 '17, 11:03 PM 2017-11-13 23:03

Kiti klausimai apie „gitub“ žymes arba „ Užduoti klausimą“