🢂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. jako github.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ć:

  1. Otwórz ~/.gitconfig:
nano ~/.gitconfig
  1. 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"
  1. Zapisz i zamknij plik (Ctrl + O, Enter, Ctrl + X w nano).

📦 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ć:

  1. Zapisz plik jako sync-upstream.sh w katalogu repo.
  2. Nadaj mu prawa do uruchamiania:
chmod +x sync-upstream.sh
  1. 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