Rozdział 23 · Część I · Git i GitHub od podstaw

Branch, HEAD origin/main: Git rozumie, gdzie jesteśmy

Najpierw oddzielmy bieżącą lokalną gałąź od lokalnej wiedzy o GitHub. Wtedy switch, fetch, pull i push przestaną być zbiorem magicznych poleceń.

SafeSort · Część 1 z 6Git i GitHub

Przed pierwszą działającą gałęzią zbudujemy jeden spójny model: gdzie leży zmiana, do którego commita wskazuje bieżąca gałąź i co dokładnie Git aktualizuje przy fetch, pull oraz push.

Working treepliki na dysku — to,co oznacza tekstRedaktorgit addkopiuje obecną wersjętreści w stagingarea / indeksgit committworzy nowy commitw lokalnym grafiegit pushoferuje GitHubzaktualizuj zdalnegałąź
plik pozostaje w working tree: git add zamiast go przesuwać, zatwierdza wybraną treść do indeksu

git add nie przenosi pliku w inne miejsce. Plik roboczy pozostaje na dysku i może się ponownie zmieniać. Polecenie indeksuje migawkę swojej aktualna zawartośćto będzie częścią następnego commitu.

Commity tworzą graf

Każdy commit zna commit nadarcy. Dlatego story nie jest jak folder z wersje oraz na wykresie. Gałęzią nazwę ruchomą, która wskazuje na pojedynczy commit. HEAD zwykle wskazuje na wybraną gałąź. Nowy commit otrzymuje aktualne Commituj nadrzędne i przesuwaj tę gałąź dalej.

~/safesort $ git log --oneline --graph --decorate --all
* c31a4d2 (HEAD -> feature/scanner) Add directory scanner
* 82b19aa Add scanner test
* 4f10c77 (main, origin/main) Initial project structure
HEAD wskazuje wybrany feature/scanner; main i origin/main nadal znajdują się na poprzednim commitcie
NazwaGdzie mieszkaCo oznacza
mainrepozytorium lokalnetwoja lokalna gałąź
origin/mainrepozytorium lokalneostatni znany Git odległym stanie main
main on GitHubrepozytorium zdalneprawdziwa gałąź na serwerze GitHub

origin/main nie pokazuje stanu GitHub w czasie rzeczywistym. To lokalne remote-tracking odniesienie, które zmienia się, gdy Git otrzymuje informacje z serwera, na przykład po git fetch.

git fetchpobiera nowecommitów i aktualizacjiorigin/main; robotnicy...git pullnajpierw fetch, potemintegracja uzyskanejrozgałęzia się do obecnegogit pushwysyła lokalniesię zobowiązuje i pytazaktualizować gałąź na…
fetch aktualizuje wiedzę o remote; pull dodaje integrację; push przechodzi w przeciwnym kierunku
~/safesort $ git status
On branch main
Your branch is up to date with 'origin/main'.
~/safesort $ git branch -vv
* main 4f10c77 [origin/main] Initial project structure
~/safesort $ git fetch origin
~/safesort $ git log --oneline --graph --decorate --all
KomendaCo pokazuje
git statusktóre pliki zostały zmienione, które już są w staging, które Git w ogóle nie śledzi
git diffwierszowymi zmianami w drzewie roboczym, jeszcze nie dodanymi do staging
git diff --stagedzmiany linijka po linijce już dodane do staging będą zawarte w commitcie
git branch -vvlokalnych oddziałów, obecny oddział i ich upstream- powiązania
git log --oneline --graph --decorate --allCommit graph i link locations

Krótko

  • Gąłąź jest ruchomym odniesieniem do zatwierdzenia; HEAD zwykle wskazuje na obecnie wybraną gałąź.
  • main, origin/main i main na GitHub oznaczają trzy rozróżnialne stany, a nie trzy pisowni tego samego obiektu.
  • fetch aktualizuje remote-tracking linki; pull dodaje integrację; push aktualizuje zdalną gałąź.
Oficjalna dokumentacja
Git Branching — Branches in a Nutshell
git-fetch
git-pull
git-push