PHP / Magento Dev Blog

  • Publikacje
  • O autorze
  • Kontakt

Kurs Gita #4 – praca zdalna: remote, fetch vs pull, force-with-lease

by Henryk Tews / wtorek, 12 maja 2026 / Opublikowano w Git

Praca z remote to codzienność w każdym zespole – ale wiele osób używa tylko git pull i ma mglistą świadomość co się właściwie dzieje. Tracking refs, różnica między fetch a pull, kiedy --force-with-lease zamiast --force, i jak naprawdę działają zdalne branche to wiedza, która ratuje przed nieodwracalnymi błędami.

Remote – skonfiguruj i zarządzaj

# Lista zdalnych repozytoriów
git remote -v

# Dodaj remote
git remote add upstream https://github.com/magento/magento2.git

# Zmień URL
git remote set-url origin git@github.com:firma/projekt.git

# Usuń remote
git remote remove upstream

# Pobierz informacje o wszystkich remotach
git remote update

Fetch – bezpieczna aktualizacja

Fetch pobiera zmiany z remote i aktualizuje tracking refs (origin/main, origin/develop) bez dotykania lokalnych branchów. Zawsze bezpieczny.

# Pobierz zmiany ze wszystkich remotów
git fetch --all

# Pobierz konkretny remote
git fetch origin

# Pobierz konkretny branch
git fetch origin main

# Po fetch sprawdź co nowego
git log main..origin/main --oneline
git diff main origin/main

# Wyświetl zdalne branche
git branch -r
git branch -a   # lokalne + zdalne

Pull – fetch + merge w jednym

# Standardowy pull (merge)
git pull origin main

# Pull z rebase zamiast merge
git pull --rebase origin main

# Ustaw rebase jako domyślną strategię pull
git config --global pull.rebase true

# Sprawdź co zostanie zmergowane przed pull
git fetch origin
git log HEAD..origin/main --oneline

Push i force-with-lease

# Zwykły push
git push origin main

# Push nowego brancha i ustaw tracking
git push -u origin feature/order-export

# Force push (NIEBEZPIECZNY - nadpisuje zdalną historię)
git push --force origin main  # nigdy na shared branchach!

# Force-with-lease (bezpieczny odpowiednik --force)
# Wycofa się jeśli ktoś inny wypchnął zmiany od ostatniego fetch
git push --force-with-lease origin main

# Kiedy force-with-lease jest potrzebny?
# Po git rebase -i na feature branchu - SHA się zmieniły
# Po git commit --amend na feature branchu
# Nigdy na main/develop/release!

Tracking branches

# Sprawdź tracking dla każdego brancha
git branch -vv
# * main          a3d5e2f [origin/main] Add product export
#   feature/cart  b4c6d7e [origin/feature/cart: ahead 2] Fix total

# Ustaw tracking ręcznie
git branch --set-upstream-to=origin/main main

# Utwórz lokalny branch śledzący zdalny
git checkout --track origin/feature/new-api
# lub krócej:
git checkout feature/new-api  # Git automatycznie znajdzie origin/feature/new-api

Praca z wieloma remotami

# Typowy setup przy forku: origin = Twój fork, upstream = oryginał
git remote add origin git@github.com:henryk/magento2-module.git
git remote add upstream git@github.com:firma/magento2-module.git

# Aktualizuj swój fork z upstream
git fetch upstream
git checkout main
git rebase upstream/main
git push origin main

# Sprawdź czy Twój branch jest aktualny z upstream
git log HEAD..upstream/main --oneline

Czyszczenie starych tracking refs

# Usuń tracking refs do branchów usuniętych na remote
git fetch --prune
git remote prune origin

# Ustaw automatyczne pruning
git config --global fetch.prune true

# Wyświetl "stale" tracking refs
git remote prune origin --dry-run

Podsumowanie

Fetch jest bezpieczny – aktualizuje tylko tracking refs. Pull to fetch + merge, z opcją rebase. Force-with-lease to jedyna akceptowalna forma force pusha na feature branchach po rebase. Tracking branches łączą lokalne branche z ich zdalnymi odpowiednikami i umożliwiają git push bez podawania remote/branch. Następny wpis: workflow zespołowy – Git Flow, trunk-based development i code review.

About Henryk Tews

Co możesz przeczytać następne

Kurs Gita #1 – model danych: blobs, trees, commity, refs
Kurs Gita #5 – workflow zespolowy: Git Flow, trunk-based, PR, code review
Kurs Gita #6 – hooki i automatyzacja: pre-commit, PHPStan, commit-msg, DDEV
  • Publikacje
  • O autorze
  • Kontakt

© 2026 Created by

GÓRA
Zarządzaj zgodą
Aby zapewnić jak najlepsze wrażenia, korzystamy z technologii, takich jak pliki cookie, do przechowywania i/lub uzyskiwania dostępu do informacji o urządzeniu. Zgoda na te technologie pozwoli nam przetwarzać dane, takie jak zachowanie podczas przeglądania lub unikalne identyfikatory na tej stronie. Brak wyrażenia zgody lub wycofanie zgody może niekorzystnie wpłynąć na niektóre cechy i funkcje.
Funkcjonalne Zawsze aktywne
Przechowywanie lub dostęp do danych technicznych jest ściśle konieczny do uzasadnionego celu umożliwienia korzystania z konkretnej usługi wyraźnie żądanej przez subskrybenta lub użytkownika, lub wyłącznie w celu przeprowadzenia transmisji komunikatu przez sieć łączności elektronicznej.
Preferencje
Przechowywanie lub dostęp techniczny jest niezbędny do uzasadnionego celu przechowywania preferencji, o które nie prosi subskrybent lub użytkownik.
Statystyka
Przechowywanie techniczne lub dostęp, który jest używany wyłącznie do celów statystycznych. Przechowywanie techniczne lub dostęp, który jest używany wyłącznie do anonimowych celów statystycznych. Bez wezwania do sądu, dobrowolnego podporządkowania się dostawcy usług internetowych lub dodatkowych zapisów od strony trzeciej, informacje przechowywane lub pobierane wyłącznie w tym celu zwykle nie mogą być wykorzystywane do identyfikacji użytkownika.
Marketing
Przechowywanie lub dostęp techniczny jest wymagany do tworzenia profili użytkowników w celu wysyłania reklam lub śledzenia użytkownika na stronie internetowej lub na kilku stronach internetowych w podobnych celach marketingowych.
  • Zarządzaj opcjami
  • Zarządzaj serwisami
  • Zarządzaj {vendor_count} dostawcami
  • Przeczytaj więcej o tych celach
Zobacz preferencje
  • {title}
  • {title}
  • {title}