Kroky nižšie vysvetľujú, ako udržiavať forknутú verziu repozitára v súlade s upstream vetvou. Viem, že to bolo zdokumentované už mnohokrát, ale nejaký čas som s tým mal problémy, kým som nenašiel workflow, ktorý mi vyhovuje najviac – preto som ho zdokumentoval.
Vytvor fork cez UI, naklonuj forknутý repozitár a prejdi do adresára:
git clone --recurse-submodules git@github.com:peterbabic/a-forked-repository.git
cd forked-repository
Pridaj upstream remote, ale len ak ešte nie je nastavený:
git remote add upstream git@github.com:ORIGINAL-ACCOUNT/repository.git
Vráť sa na hlavnú vetvu, ak tam ešte nie si:
git checkout main
Načítaj najnovšie zmeny a pridaj ich do repozitára:
git pull --rebase upstream main
Tento príkaz však môže zlyhať s nasledujúcou chybou:
CONFLICT (add/add): Merge conflict in ...
error: could not apply 11fa9d20...
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 11fa9d20...
To znamená, že existujú lokálne nesynchronizované zmeny, napríklad zavedené cez GitHub GUI. Aby si sa cez ne dostal, najprv prerušь rebase:
git rebase --abort
A potom spusti rebase znovu so zadanou stratégiou:
git pull --rebase -s recursive -X ours upstream main
Tento príkaz nahradí lokálne konfliktné súbory súbormi z upstream bez pýtania, čo môže byť potenciálne nebezpečné. Zvyšok je odoslať zmeny späť do origin (forku):
git push --force-with-lease origin main
Opakuj posledné tri príkazy na udržiavanie forku aktuálneho.
Tip: Písanie --rebase sa dá vynechať pomocou tohto nastavenia:
git config --global pull.rebase true
Pre úplnosť, takto by mali vyzerať remoty:
git remote --verbose
origin git@github.com:peterbabic/a-forked-repository.git (fetch)
origin git@github.com:peterbabic/a-forked-repository.git (push)
upstream git@github.com:ORIGINAL-ACCOUNT/repository.git (fetch)
upstream git@github.com:ORIGINAL-ACCOUNT/repository.git (push)
Toto je 40. príspevok série #100daystooffload.
Odkazy #
- https://github.com/tldr-pages/tldr/pull/5526#issuecomment-808965434
- https://stackoverflow.com/a/44491614/1972509
- https://stefanbauer.me/articles/how-to-keep-your-git-fork-up-to-date
- https://git-scm.com/docs/git-pull#Documentation/git-pull.txt---rebasefalsetruemergespreserveinteractive
- https://sdqweb.ipd.kit.edu/wiki/Git_pull_—rebase_vs._—merge
- https://stackoverflow.com/a/3443225/1972509