🢂Jak zaktualizować forka na GitHubie ‑ krok po kroku z wyjaśnieniem
Jeśli rozwijasz projekt na GitHubie, który jest forkiem innego repozytorium, z czasem będziesz potrzebować zsynchronizować go z oryginałem.
🧠 Założenia
Załóżmy, że:
- stworzyłeś forka repozytorium
github.com/example/original-repo
, np. jakogithub.com/myuser/my-forked-repo
, - chcesz pobierać aktualizacje z oryginału (
upstream
) do swojego forka (origin
), - używasz gałęzi
main
.
📌 Konfiguracja zdalnych repozytoriów
Na początku ustawiasz oryginalne repozytorium jako upstream
:
git remote rename origin upstream
git remote add origin https://github.com/myuser/my-forked-repo
To daje Ci dwa zdalne repozytoria:
origin
- Twój fork,upstream
- oryginał.
Sprawdź poprawność:
git remote -v
🔧 Synchronizacja z oryginałem - krok po kroku
1. Przełącz się na gałąź main
git checkout main
Po co? Musisz być na gałęzi, którą chcesz zaktualizować.
2. Pobierz zmiany z oryginalnego repozytorium
git fetch upstream
Po co?
To pobiera wszystkie aktualne zmiany z upstream
, ale jeszcze ich nie wprowadza do Twojej gałęzi. Git aktualizuje tylko dane o tym, co jest nowego w upstream/main
.
3. Zmerguj zmiany z upstream/main
do swojej gałęzi
git merge upstream/main
Po co?
To właściwy moment, w którym Twoja lokalna gałąź main
dostaje wszystkie zmiany z oryginału.
Jeśli nie masz lokalnych zmian - merge przejdzie gładko.
Jeśli masz własne zmiany - Git zapyta, jak rozwiązać konflikty.
4. Wypchnij zmiany do swojego forka na GitHubie
git push origin main
Po co?
Twoje zaktualizowane repozytorium lokalne trafia na GitHub - dzięki temu Twój fork (my-forked-repo
) ma teraz najnowsze zmiany z oryginału.
🔍 Co tak naprawdę się dzieje?
Krok | Co się dzieje? | Gdzie? |
---|---|---|
checkout main |
Przełączasz się na lokalną gałąźmain |
lokalnie |
fetch upstream |
Pobierasz zmiany z oryginału | upstream → lokalne |
merge upstream/main |
Łączysz zmiany z oryginału z lokalnymi | lokalnie |
push origin main |
Wysyłasz zmiany na GitHub | lokalne →origin |
🔄 Alternatywa: git rebase
Jeśli zależy Ci na czystej historii commitów, zamiast merge
możesz użyć:
git rebase upstream/main
Uwaga: rebase
może wymagać więcej uwagi przy rozwiązywaniu konfliktów, ale historia będzie bardziej liniowa i czytelna.
✅ Podsumowanie
Aby aktualizować forka z oryginalnego repozytorium:
git checkout main
git fetch upstream
git merge upstream/main
git push origin main
To bezpieczny i przejrzysty sposób na synchronizację własnego projektu z upstreamem.
🔧 Automatyzacja z Git alias
Alias Git (szybko i wygodnie)a
Dodaj do swojego pliku konfiguracyjnego ~/.gitconfig
alias, np. git sync-upstream
.
✅ Jak to zrobić:
- Otwórz
~/.gitconfig
:
nano ~/.gitconfig
- Dodaj sekcję (lub dopisz do istniejącej):
[alias]
sync-upstream = "!f() { \
git checkout main && \
git fetch upstream && \
git merge upstream/main && \
git push origin main; \
}; f"
- Zapisz i zamknij plik (
Ctrl + O
,Enter
,Ctrl + X
wnano
).
📦 Użycie:
W katalogu repo wpisujesz:
git sync-upstream
I gotowe - aktualizacja przebiegnie automatycznie.
🔧 Automatyzacja z Skryptem Bash
Jeśli wolisz mieć osobny plik, np. do wielokrotnego użycia albo integracji z CI/CD:
📄 Plik: sync-upstream.sh
#!/bin/bash
set -e
echo ">>> Przełączam się na main..."
git checkout main
echo ">>> Pobieram zmiany z upstream..."
git fetch upstream
echo ">>> Scalanie zmian z upstream/main..."
git merge upstream/main
echo ">>> Wysyłam zmiany do origin..."
git push origin main
echo "✅ Zakończono synchronizację z upstream!"
✅ Jak używać:
- Zapisz plik jako
sync-upstream.sh
w katalogu repo. - Nadaj mu prawa do uruchamiania:
chmod +x sync-upstream.sh
- Uruchom:
./sync-upstream.sh
🧠 Kiedy alias, a kiedy skrypt?
Potrzebujesz… | Wybierz |
---|---|
Jednolinijkowca do używania lokalnie | Alias Git |
Elastycznego narzędzia np. z dodatkowymi opcjami | Skrypt Bash |
Integracji z CI/CD lub automatyzacji większej liczby repozytoriów | Skrypt Bash |