| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -29,7 +29,7 @@ <h1 id="top">Git: Wizualna ściąga</h1> | |||
| 29 | 29 | </ul> | |
| 30 | 30 | </div> | |
| 31 | 31 | ||
| 32 | - <p id="link-to-png">Jeśli obrazy nie wyświetlają się poprawnie, może skorzystać z wersji <a href="?no-svg">Non-SVG</a>.</p> | ||
| 32 | + <p id="link-to-png">Jeśli obrazy nie wyświetlają się poprawnie, można skorzystać z wersji <a href="?no-svg">Non-SVG</a>.</p> | ||
| 33 | 33 | ||
| 34 | 34 | <p id="link-to-svg">SVG zostało dezaktywowane. | |
| 35 | 35 | <a href="index.html">(Aktywuj SVG ponownie)</a></p> | |
@@ -71,36 +71,36 @@ <h2 id="basic-usage">Podstawy</h2> | |||
| 71 | 71 | ||
| 72 | 72 | <li><code>git commit</code> zapisuje migawkę (snapshot) przechowalni (stage) jako nowy commit.</li> | |
| 73 | 73 | ||
| 74 | - <li><code>git reset -- <em>files</em></code> usuwa pliki z przechowalni (stage); oznacza to, że komenda ta kopiuje <em>pliki</em> z ostatniego commita do przechowalni (stage). Używa się jej do "cofania" komendy <code>git add <em>files</em></code>. Komendy <code>git reset</code> można użyć również do całkowitego usunięcia wszystkich zmian.</li> | ||
| 74 | + <li><code>git reset -- <em>files</em></code> usuwa pliki z przechowalni (stage); oznacza to, że komenda ta kopiuje <em>pliki</em> z ostatniego commita do przechowalni (stage), nadpisując jej stan. Używa się jej między innymi do "cofania" komendy <code>git add <em>files</em></code>. Komendy <code>git reset</code> można użyć również do całkowitego usunięcia wszystkich zmian.</li> | ||
| 75 | 75 | ||
| 76 | 76 | <li><code>git checkout -- <em>files</em></code> kopiuje <em>pliki</em> z przechowalki (stage) do katalogu roboczego (working directory). Komendy tej używa się do cofnięcia wszelkich zmian lokalnych.</li> | |
| 77 | 77 | ||
| 78 | 78 | </ul> | |
| 79 | 79 | ||
| 80 | - <p>Możesz użyć <code>git reset -p</code>, <code>git checkout -p</code>, lub | ||
| 81 | - <code>git add -p</code> zamiast (lub oprócz) wyszczególniania konkretnych elementów. Wówczas możesz wybrać je w sposób interaktywny.</p> | ||
| 80 | + <p>Można również użyć <code>git reset -p</code>, <code>git checkout -p</code>, lub | ||
| 81 | + <code>git add -p</code> zamiast (lub oprócz) wyszczególniania konkretnych elementów. Wówczas można wybrać je w sposób interaktywny.</p> | ||
| 82 | 82 | ||
| 83 | - <p>Możliwe jest również bezpośrednie przeskoczenie do historii commitów i sprawdzenie plików bezpośrednio, bez konieczności przeniesienia ich do przechowalni (stage).</p> | ||
| 83 | + <p>Możliwe jest również bezpośrednie przeskoczenie do historii commitów i sprawdzenie plików bezpośrednio, bez konieczności wcześniejszego przeniesienia ich do przechowalni (stage).</p> | ||
| 84 | 84 | ||
| 85 | 85 | <div class="center"><img src='basic-usage-2.svg.png'></div> | |
| 86 | 86 | ||
| 87 | 87 | <ul> | |
| 88 | 88 | ||
| 89 | 89 | <li><code>git commit -a </code>automatycznie dodaje zmiany ze wszystkich znanych plików (dotyczy to zarówno <tt>git add</tt> jak i <tt>git rm</tt> dla plików usuniętych z katalogu roboczego (working directory)), a następnie wykonuje komendę <tt>git commit</tt>.</li> | |
| 90 | 90 | ||
| 91 | - <li><code>git commit <em>files</em></code> tworzy nowy commit, który zawiera całą zawartość ostatniego commita oraz migawkę (snapshot) wybranych <em>plików</em>. Oczywiście <em>pliki</em> kopiowane są do przechowalni (stage).</li> | ||
| 91 | + <li><code>git commit <em>files</em></code> tworzy nowy commit, który zawiera całą zawartość ostatniego commita oraz migawkę (snapshot) wybranych <em>plików</em>. Oczywiście <em>pliki</em> kopiowane są również do przechowalni (stage).</li> | ||
| 92 | 92 | ||
| 93 | 93 | <li><code>git checkout HEAD -- <em>files</em></code> kopiuje <em>pliki</em> z ostatniego commita zarówno do przechowalni (stage) jak i katalogu roboczego (working directory).</li> | |
| 94 | 94 | ||
| 95 | 95 | </ul> | |
| 96 | 96 | ||
| 97 | 97 | <h2 id="conventions">Konwencja</h2> | |
| 98 | 98 | ||
| 99 | - <p>W dalszej części tego dokumentu będą używane grafiki w następującej formi.</p> | ||
| 99 | + <p>W dalszej części tego dokumentu będą używane grafiki w następującej formie.</p> | ||
| 100 | 100 | ||
| 101 | 101 | <div class="center"><img src='conventions.svg.png'></div> | |
| 102 | 102 | ||
| 103 | - <p>Commity pokazane są w zielonych polach jako pięcio znakowe identyfikatory, które wskazują na swoich rodziców (wcześniejsze commity). Gałęzie (branche) pokazane są w pomarańczowych polach i wskazują na aktualne commity. Aktualne gałęzie (branche) można zidentyfikować dzięki specjalnemu oznaczeniu <em>HEAD</em>, które rzeczywiście jest "przyczepione" do gałęzi (brancha), w której się aktualnie znajdujemy. Na pokazanej grafice widzimy pięć ostatnich commitów, spośród których <em>ed489</em> jest najbardziej aktualnym. | ||
| 103 | + <p>Commity pokazane są w zielonych polach jako pięcioznakowe identyfikatory, które wskazują na swoich rodziców (wcześniejsze commity). Gałęzie (branche) pokazane są w pomarańczowych polach i wskazują na aktualne commity. Aktualne gałęzie (branche) można zidentyfikować dzięki specjalnemu oznaczeniu <em>HEAD</em>, które w rzeczywistości jest "przyczepione" do gałęzi (brancha), w której się aktualnie znajdujemy. Na pokazanej grafice widzimy pięć ostatnich commitów, spośród których <em>ed489</em> jest najbardziej aktualnym. | ||
| 104 | 104 | <em>master</em> (aktualna gałąź - branch) wskazuje na ten commit, podczas gdy <em>maint</em> (inna gałąź - branch) wskazuje na przodka gałęzi (branch) <em>master</em> i jej commit.</p> | |
| 105 | 105 | ||
| 106 | 106 | <h2 id="commands-in-detail">Poszczególne komendy</h2> | |
@@ -113,7 +113,7 @@ <h3 id="diff">Diff</h3> | |||
| 113 | 113 | ||
| 114 | 114 | <h3 id="commit">Commit</h3> | |
| 115 | 115 | ||
| 116 | - <p>Kiedy zatwierdzasz (commitujesz) zmiany, Git tworzy nowy obiekt używając plików znajdujących się w przechowalni (stage), jednocześnie wskazując jako swojego rodzica ostatni istniejący commit. Następnie aktualna gałąź (branch) zaczyna wskazywać na właśnie wykonany commit. Na grafice umieszczonej poniżej, aktualna gałąź (branch) to <em>master</em>. Zanim komenda została wykonana, gałąź (branch) <em>master</em> wskazywała na commit <em>ed489</em>. Po jej wykonaniu nowy commit oznaczony jako <em>f0cec</em> został utworzony z rodzicem w postaci <em>ed489</em>, a następnie gałąź (branch) <em>master</em> została przeniesiona na nowy commit.</p> | ||
| 116 | + <p>Kiedy zatwierdzasz (commitujesz) zmiany, Git tworzy nowy obiekt używając plików znajdujących się w przechowalni (stage), jednocześnie wskazując jako swojego rodzica ostatni istniejący commit. Następnie aktualna gałąź (branch) zaczyna wskazywać na właśnie tworzony commit. Na grafice umieszczonej poniżej aktualna gałąź (branch) to <em>master</em>. Zanim komenda została wykonana, gałąź (branch) <em>master</em> wskazywała na commit <em>ed489</em>. Po jej wykonaniu nowy commit oznaczony jako <em>f0cec</em> został utworzony z rodzicem w postaci <em>ed489</em>, a następnie gałąź (branch) <em>master</em> została przeniesiona na nowy commit.</p> | ||
| 117 | 117 | ||
| 118 | 118 | <div class="center"><img src='commit-master.svg.png'></div> | |
| 119 | 119 | ||
@@ -136,21 +136,21 @@ <h3 id="checkout">Checkout</h3> | |||
| 136 | 136 | ||
| 137 | 137 | <div class="center"><img src='checkout-files.svg.png'></div> | |
| 138 | 138 | ||
| 139 | - <p>Kiedy <em>nie</em> zostanie podana nazwa pliku tylko nazwa gałęzi (branch) w lokalnym repozytorium, <em>HEAD</em> zostanie przeniesione do podanej gałęzi (branch) - oznacza to "przełączenie się" do danej gałęzi (branch). Przechowalnia (stage) oraz katalog roboczy (working directory) zawierają wówczas elementy commita z aktualnej gałęzi (branch). Każdy z plików wchodzących w skład nowego commita (<em>a47c3</em> poniżej) zostanie skopiowany; każdy plik wchodzący w skład starego commita (<em>ed489</em>), ale nie istnieje w nowym, zostanie usunięty; każdy z plików wchodzący w skład innych commitów zostanie zignorowany.</p> | ||
| 139 | + <p>Kiedy <em>nie</em> zostanie podana nazwa pliku tylko nazwa gałęzi (branch) w lokalnym repozytorium, <em>HEAD</em> zostanie przeniesione do podanej gałęzi (branch) - oznacza to "przełączenie się" do danej gałęzi (branch). Przechowalnia (stage) oraz katalog roboczy (working directory) zawierają wówczas elementy commita z aktualnej gałęzi (branch). Każdy z plików wchodzących w skład nowego commita (<em>a47c3</em> poniżej) zostanie skopiowany; każdy plik wchodzący w skład starego commita (<em>ed489</em>) i jednocześnie nie istniejący w nowym, zostanie usunięty; każdy z plików wchodzących w skład innych commitów zostanie zignorowany.</p> | ||
| 140 | 140 | ||
| 141 | 141 | <div class="center"><img src='checkout-branch.svg.png'></div> | |
| 142 | 142 | ||
| 143 | - <p>Kiedy ani nazwa pliku ani nazwa gałęzi (branch) z lokalnego repozytorium <em>nie</em> zostanie podana — zamiast tego może zostać podant tag, gałąź zdalnego repozytorium, SHA-1 ID lub coś w rodzaju <em>master~3</em> — otrzymamy anonimową gałąź (branch) zwaną <em>detached HEAD</em>. Jest ona przydatna do skakania po całej historii commitów. Powiedzmy, że chcemy skompilować wersję 1.6.6.1 gita. Możemy wykonać komendę <code>git checkout v1.6.6.1</code> (jest to tag, nie nazwa gałęzi (branch)), skompilować, zainstalować gita, a następnie wrócić do głównej gałęzi master, wydając komendę <code>git checkout master</code>. Mimo wszystko, commitowanie z wykorzystaniem detached HEAD działa trochę inaczej niż zazwyczaj; zostało to opisane <a href="#detached">poniżej</a>.</p> | ||
| 143 | + <p>Kiedy ani nazwa pliku ani nazwa gałęzi (branch) z lokalnego repozytorium <em>nie</em> zostanie podana — zamiast tego może zostać podanty tag, gałąź zdalnego repozytorium, SHA-1 ID lub coś w rodzaju <em>master~3</em> — otrzymamy anonimową gałąź (branch) zwaną <em>detached HEAD</em>. Jest ona przydatna do skakania po całej historii commitów. Powiedzmy, że chcemy skompilować wersję 1.6.6.1 gita. Możemy wykonać komendę <code>git checkout v1.6.6.1</code> (jest to tag, nie nazwa gałęzi (branch)), skompilować, zainstalować gita, a następnie wrócić do głównej gałęzi master, wydając komendę <code>git checkout master</code>. Mimo tej prostoty i podobieństw do zwykłej wersji tej komendy, commitowanie z wykorzystaniem detached HEAD działa trochę inaczej niż zazwyczaj; zostało to opisane <a href="#detached">poniżej</a>.</p> | ||
| 144 | 144 | ||
| 145 | 145 | <div class="center"><img src='checkout-detached.svg.png'></div> | |
| 146 | 146 | ||
| 147 | 147 | <h3 id="detached">Committing z odłączonym (detached) HEAD</h3> | |
| 148 | 148 | ||
| 149 | - <p>Kiedy <em>HEAD</em> zostanie odłączone, commity działają tak samo jak zazwyczaj, z tą różnicą, że żadna istniejąca i nazwana gałąź (branch) nie zostanie zaktualizowana. Można powiedzieć, że commit pojawi się w anonimowej gałęzi (commit).</p> | ||
| 149 | + <p>Kiedy <em>HEAD</em> zostanie odłączone, commity działają tak samo jak zazwyczaj, z tą różnicą, że żadna istniejąca i nazwana gałąź (branch) nie zostanie zaktualizowana. Można powiedzieć, że commit pojawi się w anonimowej gałęzi (branch).</p> | ||
| 150 | 150 | ||
| 151 | 151 | <div class="center"><img src='commit-detached.svg.png'></div> | |
| 152 | 152 | ||
| 153 | - <p>W momencie, w którym HEAD zostanie przeniesiony w dowolne inne miejsce, takie jak na przykład gałąź (branch) <em>master</em>, nic już nie wskazuje na dany commit, w związku z czym commit przepada. W poniższym przykłądzie widać, że po wydaniu komendy nie ma żadnego dowiązania do commita <em>2eecb</em>.</p> | ||
| 153 | + <p>W momencie, w którym HEAD zostanie przeniesiony w dowolne inne miejsce, takie jak na przykład gałąź (branch) <em>master</em>, nic już nie wskazuje na dany commit, w związku z czym commit przepada. W poniższym przykładzie widać, że po wydaniu komendy nie ma żadnego dowiązania do commita <em>2eecb</em>.</p> | ||
| 154 | 154 | ||
| 155 | 155 | <div class="center"><img src='checkout-after-detached.svg.png'></div> | |
| 156 | 156 | ||
@@ -162,11 +162,11 @@ <h3 id="reset">Reset</h3> | |||
| 162 | 162 | ||
| 163 | 163 | <p>Komenda reset przenosi aktualną gałąź (branch) do wskazanej pozycji oraz opcjonalnie aktualizuje przechowalnię (stage) oraz katalog roboczy (working directory). Jest również używana do kopiowania plików z katalogu git (history) do przechowalni (stage) bez naruszania katalogu roboczego (working directory).</p> | |
| 164 | 164 | ||
| 165 | - <p>Jeśli zostanie podany commit, ale nie zostaną podane nazwy plików, aktualna gałąź (branch) zostanie przeniesiona do podanego commita, a przechowalnia (stage) zaktualizowana o jego zawartość. Jeśli zostanie dodany przełącznik <code>--hard</code> zaktualizowany zostanie również katalog roboczy (working directory). Przełącznik <code>--soft</code> służy do przeniesienia gałęzi (branch), ale bez aktualizacji przechowalni (stage) oraz katalogu roboczego (working directory).</p> | ||
| 165 | + <p>Jeśli zostanie podany commit, ale nie zostaną podane nazwy plików, aktualna gałąź (branch) zostanie przeniesiona do podanego commita, a przechowalnia (stage) zaktualizowana o jego zawartość. Jeśli zostanie dodany przełącznik <code>--hard</code>, zaktualizowany zostanie również katalog roboczy (working directory). Przełącznik <code>--soft</code> służy do przeniesienia gałęzi (branch) do wskazanego miejsca, jednak bez aktualizacji przechowalni (stage) oraz katalogu roboczego (working directory).</p> | ||
| 166 | 166 | ||
| 167 | 167 | <div class="center"><img src='reset-commit.svg.png'></div> | |
| 168 | 168 | ||
| 169 | - <p>Jeśli commit nie zostanie podany, domyślnie gałąź (branch) wskazuje na <em>HEAD</em>. W takim przypadku nie nastąpi zmiana gałęzi (branch) - przechowalnia (stage) zostanie zresetowana do zawartości ostatniego commita (jeśli zostanie użyty przełącznik <code>--hard</code> resetowi ulegnie również katalog roboczy (working directory).</p> | ||
| 169 | + <p>Jeśli commit nie zostanie podany, domyślnie gałąź (branch) wskazuje na <em>HEAD</em>. W takim przypadku nie nastąpi zmiana gałęzi (branch) - przechowalnia (stage) zostanie zresetowana do zawartości ostatniego commita (jeśli zostanie użyty przełącznik <code>--hard</code> resetowi ulegnie również katalog roboczy (working directory)).</p> | ||
| 170 | 170 | ||
| 171 | 171 | <div class="center"><img src='reset.svg.png'></div> | |
| 172 | 172 | ||
@@ -176,7 +176,7 @@ <h3 id="reset">Reset</h3> | |||
| 176 | 176 | ||
| 177 | 177 | <h3 id="merge">Merge</h3> | |
| 178 | 178 | ||
| 179 | - <p>Scalanie (merge) tworzy nowy commit, który łączy w sobie zmiany zawarte w innych commitach. Przed wykonaniem scalania (merging), przechowalnia (stage) musi zawierać aktualny commit, do którego będzie następowało scalanie. Najprostszym przypadkiem jest taki, w którym inny commit jest przodkiem commitu, do którego chcemy scalać. Następnym prostym przypadkiem jest taki, w którym aktualny commit jest przodkiem innego commita, który chcemy scalić z aktualnym. Oba przypadki kończą się scalaniem (merge) poprzez <em>fast-forward</em> Wskaźnik zostaje przeniesiony w prosty sposób na nowy commit.</p> | ||
| 179 | + <p>Scalanie (merge) tworzy nowy commit, który łączy w sobie zmiany zawarte w innych commitach. Przed wykonaniem scalania (merging), przechowalnia (stage) musi zawierać aktualny commit, do którego będzie następowało scalanie. Najprostszym przypadkiem jest taki, w którym inny commit jest przodkiem commitu, do którego chcemy scalać. Następnym prostym przypadkiem jest taki, w którym aktualny commit jest przodkiem innego commita, który chcemy scalić z aktualnym. Oba przypadki kończą się scalaniem (merge) poprzez <em>fast-forward</em> - wskaźnik zostaje przeniesiony w prosty sposób na nowy commit.</p> | ||
| 180 | 180 | ||
| 181 | 181 | <div class="center"><img src='merge-ff.svg.png'></div> | |
| 182 | 182 | ||
@@ -202,15 +202,14 @@ <h3 id="rebase">Rebase</h3> | |||
| 202 | 202 | ||
| 203 | 203 | <div class="center"><img src='rebase-onto.svg.png'></div> | |
| 204 | 204 | ||
| 205 | - <p>Istnieje również komenda z przełącznikiem <code>git rebase --interactive</code>, która pozwala na wykonywania bardziej skomplikowanych operacji niż tylko same powtarzanie commitów. Niestety nie istnieje żadna oczywista grafika, która w sposób jasny pomogłaby wyjaśnić jej działanie; więcej szczegółów można znaleźć pod tym linkiem: <a | ||
| 206 | - href='http://www.kernel.org/pub/software/scm/git/docs/git-rebase.html#_interactive_mode'>git-rebase(1)</a> | ||
| 207 | - for more details.</p> | ||
| 205 | + <p>Istnieje również komenda z przełącznikiem <code>git rebase --interactive</code>, która pozwala na wykonywania bardziej skomplikowanych operacji niż tylko samo powtarzanie commitów. Niestety nie istnieje żadna oczywista grafika, która w sposób jasny pomogłaby wyjaśnić jej działanie; więcej szczegółów można znaleźć pod tym linkiem: <a | ||
| 206 | + href='http://www.kernel.org/pub/software/scm/git/docs/git-rebase.html#_interactive_mode'>git-rebase(1)</a></p> | ||
| 208 | 207 | ||
| 209 | 208 | <h2 id="technical-notes">Uwagi techniczne</h2> | |
| 210 | 209 | ||
| 211 | - <p>Zawartość plików nie jest tak naprawdę trzymana w pliku index (<em>.git/index</em>) lub w obiektach będących commitami. Tak naprawdę każdy plik trzymany jest w bazie obiektów (object database) (<em>.git/objects</em>) jako obiekt zwany <em>blob</em>, który można zidentyfikować za pomocą hasha SHA-1. Plik index zawiera listę plików wraz z ich identyfikatorami przypisanymi do obiektów blob, a oprócz tego zawiera również inne dane. Na potrzeby commitów stworzony został inny typ danych, znany jako drzewa (<em>tree</em>), który również można zidentyfikować z wykorzystaniem hashy. Drzewa (trees) powiązane są z katalogami w katalogu roboczym (working directory) i zawierają listę drzew oraz obiektóœ typu blob, które połączone są z nazwami plików w danym katalogu. Każdy commit posiada identyfikator swojego "top-level tree", który z kolei zawiera wszystkie obiekty typu blob oraz inne drzewa (trees) powiązane z danym commitem.</p> | ||
| 210 | + <p>Zawartość plików nie jest tak naprawdę trzymana w pliku index (<em>.git/index</em>) lub w obiektach będących commitami. Tak naprawdę każdy plik trzymany jest w bazie obiektów (object database) (<em>.git/objects</em>) jako obiekt zwany <em>blob</em>, który można zidentyfikować za pomocą hasha SHA-1. Plik index zawiera listę plików wraz z ich identyfikatorami przypisanymi do obiektów blob, a oprócz tego zawiera również inne dane. Na potrzeby commitów stworzony został inny typ danych, znany jako drzewa (<em>tree</em>), który również można zidentyfikować z wykorzystaniem hashy. Drzewa (trees) powiązane są z katalogami w katalogu roboczym (working directory) i zawierają listę drzew oraz obiektów typu blob, które połączone są z nazwami plików w danym katalogu. Każdy commit posiada identyfikator swojego "top-level tree", który z kolei zawiera wszystkie obiekty typu blob oraz inne drzewa (trees) powiązane z danym commitem.</p> | ||
| 212 | 211 | ||
| 213 | - <p>Podczas wykonywania commita z odłączonym HEAD (detached HEAD), ostatni commit tak naprawdę posiada coś, co na niego wskazuje: reflog HEADa (historia wykonywanych zmian na headach). Mimo wszystko wskazanie to wygasa po krótkiej chwili, w związku z tym commit może zostać zutylizowany, podobnie do commitów porzuconych przez komendy <code>git commit --amend</code> oraz <code>git rebase</code>.</p> | ||
| 212 | + <p>Podczas wykonywania commita z odłączonym HEAD (detached HEAD), ostatni commit tak naprawdę posiada coś, co na niego wskazuje: reflog HEADa (historia wykonywanych zmian na headach). Mimo wszystko wskazanie to wygasa po krótkiej chwili, a w związku z tym commit może zostać zutylizowany, podobnie jak commity porzuconye przez komendy <code>git commit --amend</code> oraz <code>git rebase</code>.</p> | ||
| 214 | 213 | ||
| 215 | 214 | <hr> | |
| 216 | 215 | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments