-
1. Početak
- 1.1 O kontroli verzije
- 1.2 Kratka istorija Gita
- 1.3 Osnove Gita
- 1.4 Komandna linija
- 1.5 Instaliranje Gita
- 1.6 Podešavanja za prvi put
- 1.7 Traženje pomoći
- 1.8 Rezime
-
2. Osnove Gita
- 2.1 Pravljenje Git repozitorijuma
- 2.2 Snimanje promena na repozitorijumu
- 2.3 Pregled istorije komitova
- 2.4 Opovrgavanje
- 2.5 Rad sa udaljenim repozitorijumima
- 2.6 Tagovanje
- 2.7 Alijasi
- 2.8 Rezime
-
3. Grananje u Gitu
- 3.1 Grananje ukratko
- 3.2 Osnove grananja i spajanja
- 3.3 Upravljanje granama
- 3.4 Tokovi rada sa grananjem
- 3.5 Udaljene grane
- 3.6 Rebaziranje
- 3.7 Rezime
-
4. Git on the Server
- 4.1 Protokoli
- 4.2 Postavljanje Gita na server
- 4.3 Generisanje javnog SSH ključa
- 4.4 Podešavanje servera
- 4.5 Git Daemon
- 4.6 Pametan HTTP
- 4.7 GitWeb
- 4.8 Opcije za hostovanje koje nude treća lica
- 4.9 Rezime
-
5. Distribuirani Git
- 5.1 Distribuirani tokovi rada
- 5.2 Kako doprineti projektu
- 5.3 Održavanje projekta
- 5.4 Rezime
-
6. GitHub
-
7. Git Tools
- 7.1 Revision Selection
- 7.2 Interactive Staging
- 7.3 Stashing and Cleaning
- 7.4 Signing Your Work
- 7.5 Searching
- 7.6 Rewriting History
- 7.7 Reset Demystified
- 7.8 Advanced Merging
- 7.9 Rerere
- 7.10 Debugging with Git
- 7.11 Submodules
- 7.12 Bundling
- 7.13 Replace
- 7.14 Credential Storage
- 7.15 Summary
-
8. Prilagođavanje Gita
- 8.1 Konfiguracija Gita
- 8.2 Git atributi
- 8.3 Git hukovi
- 8.4 Primer polise sprovedene od strane Gita
- 8.5 Rezime
-
9. Git i ostali sistemi
- 9.1 Git kao klijent
- 9.2 Migriranje na Git
- 9.3 Rezime
-
10. Git iznutra
- 10.1 Vodovod i porcelan
- 10.2 Git objekti
- 10.3 Git reference
- 10.4 Paketoteke
- 10.5 Refspek
- 10.6 Transfer Protocols
- 10.7 Maintenance and Data Recovery
- 10.8 Environment Variables
- 10.9 Summary
-
A1. Appendix A: Git in Other Environments
- A1.1 Graphical Interfaces
- A1.2 Git in Visual Studio
- A1.3 Git in Eclipse
- A1.4 Git in Bash
- A1.5 Git in Zsh
- A1.6 Git in Powershell
- A1.7 Summary
-
A2. Appendix B: Embedding Git in your Applications
- A2.1 Command-line Git
- A2.2 Libgit2
- A2.3 JGit
-
A3. Appendix C: Git Commands
- A3.1 Setup and Config
- A3.2 Getting and Creating Projects
- A3.3 Basic Snapshotting
- A3.4 Branching and Merging
- A3.5 Sharing and Updating Projects
- A3.6 Inspection and Comparison
- A3.7 Debugging
- A3.8 Patching
- A3.9 Email
- A3.10 External Systems
- A3.11 Administration
- A3.12 Plumbing Commands
2.4 Osnove Gita - Opovrgavanje
Opovrgavanje
U bilo kom trenutku, možda poželite da opovrgnete (undo) nešto što ste uradili. Ovde ćemo baciti pogled na nekoliko osnovnih alata za opovrgavanje promena. Ovo je jedna od retkih oblasti u Gitu gde možete izgubiti neke podatke ako nešto uradite pogrešno.
Česta stvar tokom koje se javlja potreba za opovrgavanjem je situacija kada komitujete prerano i možda zaboravite neke fajlove, ili napravite grešku u komit poruci.
Ako želite da ponovo probate taj komit, možete da izvršite komit sa opcijom --amend
:
$ git commit --amend
Ova komanda uzima vaš stejdž i koristi ga za komit. Ako niste napravili nikakve izmene od poslednjeg komita (na primer, pokrenete ovu komandu odmah nakon poslednjeg komita), onda će snimak izgledati potpuno isto, i sve što ćete promeniti je komit poruka.
Isti editor za komit poruku se pojavljuje, ali se u njemu već nalazi ukucana poruka iz prethodnog komita. Možete editovati poruku kao i uvek, ali time brišete prethodni komit.
Kao primer, ako komitujete i onda shvatite da ste zaboravili da stejdžujete promene u fajlu koji ste želeli da dodate ovom komitu, možete da uradite nešto ovako:
$ git commit -m 'initial commit'
$ git add <zaboravljeni-fajl>
$ git commit --amend
Na ovaj način na kraju dobijate samo jedan komit — drugi komit preklapa rezultat prvog.
Uklanjanje fajla sa stejdža
Sledeća dva odeljka demonstriraju kako da prepletete stejdž sa promenama u radnom direktorijumu.
Dobar deo je to što vas komanda koju koristite da bi odredili stanje ove dve oblasti takođe podseća i na način za opovrgavanje promena koje napravite.
Na primer, recimo da ste promenili dva fajla i da želite da ih komitujete kroz dve posebne promene, ali ste slučajno ukucali git add *
i time ih oba dodali na stejdž.
Kako da jedan od njih sklonite sa stejdža?
Komanda git status
vas podseća na to:
$ git add *
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
modified: CONTRIBUTING.md
Odmah ispod dela "Changes to be committed" piše da treba da koristite git reset HEAD <file>...
da biste fajl skinuli sa stejdža. Taj savet ćemo iskoristiti da uradimo upravo to:
$ git reset HEAD CONTRIBUTING.md
Unstaged changes after reset:
M CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md
Ova komanda je pomalo čudna, ali obavlja posao.
Fajl CONTRIBUTING.md
je modifikovan ali više nije na stejdžu.
Note
|
Mada |
Zasad je ova čarobna reč sve što je potrebno da znate o git reset
komandi.
Mnogo detaljnije ćemo ispitati šta tačno radi reset
u Reset Demystified kada ćemo i pogledati kako da je iskoristimo da bismo uradili neke veoma zanimljive stvari.
Razmodifikovanje modifikovanog fajla
Šta ako shvatite da ne želite da zadržite izmene u fajlu CONTRIBUTING.md
?
Kako da ga jednostavno razmodifikujete — da ga vratite na stanje u kakvom je bio kada ste poslednji put načinili komit (ili inicijalno klonirali, ili kako god ga dovukli u radni direktorijum)?
Srećom, git status
vam govori kako i to da uradite.
U prošlom primeru izlaza, fajlovi koji nisu bili na stejdžu bili su predstavljeni ovako:
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md
Kaže vam kako eksplicitno da odbacite promene koje ste napravili. Hajde da uradimo šta nam savetuje.
$ git checkout -- CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
Možete da proverite da su se promene vratile na staro.
Important
|
Važno je da razumete da je |
Ako biste želeli da zadržite promene koje ste napravili u fajlu ali i ipak želite da se trenutno vratite na staro, saznaćete kako da uradite to pomoću skrivanja (stash) i grananja (branching) u Grananje u Gitu; to su obično bolji načini za rad.
Upamtite, sve što je komitovano u Gitu se skoro uvek može povratiti.
Čak i komitovi koji su bili na granama koje su obrisane ili komitovi koji su prepisani koristeći --amend
komit mogu da se povrate (vidite Data Recovery za obnovu podataka).
Ipak, sve što izgubite a nikad nije bilo komitovano verovatno više nikad nećete videti.