Najčešće pogreške i pitanja vezana uz Git i praktični načini za njihovo rješavanje

💖 Sviđa li vam se? Podijelite vezu sa svojim prijateljima

Ako koristite provjeru autentičnosti lozinkom:

  1. $ git klon https://username:password@gitsrv/opt/git/repository.git

Rad s granama

Prikaži sve grane:
  1. grana $git
Napravi novu granu:
  1. grana $git
Idi na novu temu:
  1. $git naplata
Napravite novu granu i prijeđite na nju:
  1. $ git odjava -b
Brisanje lokalne podružnice:
  1. $ git grana -d
Brisanje grane iz udaljenog repozitorija:
  1. $ git push origin --delete

Rad s obvezama

Kako ukloniti zadnji commit?

  1. $ git reset --soft HEAD^
Git Kako. Poglavlje 16: Poništavanje obveza
Git Kako. Poglavlje 17. Uklanjanje obveza iz grane
Službena Git dokumentacija. Osnove Gita - Vraćanje promjena

Kako promijeniti zadnji commit?

  1. $ git add new_file.txt
  2. $ git commit --izmijeni

Kako promijeniti komentar na zadnji commit?

  1. $ git commit --izmijeni
  2. $ git commit --izmijeni -m "Novi komentar"

Kako spojiti više obveza?

  1. $ git rebase -i GLAVA~3
Umjesto HEAD~3, možete koristiti hash commit-a. Morate proslijediti hash komitiranja u koje želite sve spojiti (izravnati).
Otvorit će se uređivač s popisom obveza, s najstarijim obvezama na vrhu.
  1. odaberite 1111111 Objavite 1 komentar
  2. odaberite 2222222 Objavite 2 komentara
  3. odaberite 3333333 Objavite 3 komentara
Pijuk morate zamijeniti tikvom kako bi izgledalo ovako:
  1. odaberite 1111111 Objavite 1 komentar
  2. squash 2222222 Objavi 2 komentara
  3. squash 3333333 Objavi 3 komentara
Zatim morate spremiti datoteku i izaći. Opet će biti otvoreno uređivač teksta sa svim komentarima predaje. Morate urediti, spremiti i izaći. Nakon ovih koraka, komit će se spojiti.

Kako mogu poništiti promjene na određenoj datoteci i vratiti je u stanje u kojem je bila nakon posljednjeg urezivanja?

  1. $ git odjava -- file.txt

Kako poništiti sve neizvršene (nepodvrgnute) promjene?

  1. $git naplata

Kako zadržati neke datoteke za sljedeći commit?

Recimo da želite izvršiti promjene u nekim datotekama, i upisati promjene u drugim datotekama u sljedećem predanju. Tada ih možete privremeno ukloniti iz repozitorija (datoteke bez faze), a zatim ih ponovno dodati.
  1. $ git reset HEAD file.txt
Ova naredba će ukloniti datoteku iz repozitorija; ostat će u starim obvezama. Head pokazuje na posljednje uvrštavanje u trenutnoj grani.

Ako ne možete gurnuti u udaljeno spremište jer je trenutna verzija spremišta manja od one na udaljenom spremištu

U ovom slučaju možete napraviti prisilno guranje.
  1. $ git push -f izvorni master

Spajanje grana

Kako uzeti samo neke datoteke iz druge grane?

  1. $ git checkout naziv grane -- put/do/datoteke.datoteke

Udaljena spremišta

Prikaz informacija o udaljenom spremištu

  1. $ git udaljeni prikaz porijekla
Na ekranu će se prikazati nešto poput ovoga:
  1. *daleko porijeklo
  2. Dohvaćanje URL-a: git@gitsrv:/opt/git/test-project.git
  3. Push URL: git@gitsrv:/opt/git/test-project.git
  4. GLAVA grane: gospodar
  5. Udaljena grana:
  6. glavno novo (sljedeće dohvaćanje će biti pohranjeno u daljinski/podrijetlo)
  7. Lokalna referenca konfigurirana za "git push":
  8. master gura na master (lokalno zastarjelo)

Dodavanje udaljenog repozitorija

  1. $ git udaljeno dodavanje izvora git@gitsrv:/opt/git/test-project.git

Izbrisane grane - ovo su poveznice na stanje grana u vašim udaljenim spremištima. To su lokalni ogranci koji se ne mogu pomicati; automatski se pomiču kad god komunicirate preko mreže. Udaljeni ogranci djeluju kao knjižne oznake koje vas podsjećaju gdje su ogranci u udaljenim repozitorijima bili zadnji put kada ste se s njima povezali.

Izgledaju kao (naziv udaljenog predstavništva)/(podružnica). Na primjer, ako želite vidjeti kako je glavna grana izgledala na izvornom poslužitelju zadnji put kada ste se na njega spojili, provjerite izvornu/glavnu granu. Ako ste vi i partner radili na istom problemu i oni su objavili iss53 granu, možete imati vlastitu lokalnu iss53 granu; ali će ta grana na poslužitelju ukazivati ​​na commit u origin/iss53.

Sve ovo može biti zbunjujuće, pa pogledajmo primjer. Stvorio sam udaljeno spremište na GitHubu https://github.com/n0tb0dy/RemoreBranches

Tamo sam napravio tri obveze


Prilikom kloniranja udaljenog repozitorija, Git će ga automatski imenovati podrijetlo, će uzeti sve podatke od tamo, stvoriti pokazivač na ono na što grana pokazuje tamo ovladati; majstorski, i nazovite ga lokalno porijeklo/gospodar(ali ne možete ga pomaknuti). Git će vas također učiniti vašom vlastitom granom ovladati; majstorski, koji će započeti na istom mjestu kao i grana ovladati; majstorski V podrijetlo, pa ćeš imati s čime raditi.

“podrijetlo” nije poseban naziv

Ovo je slično nazivu glavne grane koji je zadan prilikom stvaranja lokalno spremište. Baš kao grana ovladati; majstorski stvoren prema zadanim postavkama na naredbu git init, isto ime se koristi prema zadanim postavkama podrijetlo na zapovijed git klon. Ako izdate naredbu git clone –o booyah tada ćete dobiti booyah/master kao zadanu udaljenu granu.

I tako se vraćamo našim... obvezama. Na udaljenom repozitoriju izgledaju ovako

Tim git dohvati jednostavno prima nadogradnje od poslužitelja koje još nemate i ni na koji način ne mijenja vaš radni direktorij. Ova naredba jednostavno prima podatke i omogućuje vam da odlučite što ćete učiniti s njima (spojiti ih sa svojim podacima, urediti ih itd.)

Tim git povuci , U većini slučajeva, odmah spaja primljene podatke s vašima.

Obično je bolje koristiti samo naredbu git fetch i naredbu git merge kako biste sami mogli kontrolirati proces spajanja.

Uklanjanje udaljenih grana

To naravno znači brisanje ogranaka na udaljenom poslužitelju

$ git push origin --delete serverfix


pljesak! I nit na udaljenom poslužitelju je nestala. Ali u osnovi ova naredba samo uklanja pokazivač grane na udaljenom poslužitelju. Poslužitelj Git nastavit će pohranjivati ​​sve informacije o predaji dok ne izdate naredbu za skupljanje smeća.

Udaljene grane su reference na stanje grana u vašim udaljenim spremištima. To su lokalni ogranci koji se ne mogu pomicati; automatski se pomiču kad god komunicirate preko mreže. Udaljeni ogranci djeluju kao knjižne oznake koje vas podsjećaju gdje su ogranci u udaljenim repozitorijima bili posljednji put kada ste se s njima povezali.

Izgledaju kao (naziv udaljenog predstavništva)/(podružnica) . Na primjer, ako želite vidjeti kako je glavna grana izgledala na izvornom poslužitelju zadnji put kada ste se na njega spojili, provjerite izvornu/glavnu granu. Ako ste vi i partner radili na istom problemu i on je objavio iss53 granu, možete imati svoju lokalnu iss53 granu; ali će ta grana na poslužitelju ukazivati ​​na commit u origin/iss53.

Sve ovo može biti zbunjujuće, pa pogledajmo primjer. Recimo da imate vlastiti Git poslužitelj na svojoj mreži na git.ourcompany.com. Ako klonirate nešto iz njega, Git će to automatski nazvati origin , uzeti sve podatke odatle, stvoriti pokazivač na ono na što pokazuje glavna grana i to lokalno nazvati origin/master (ali ne možete ga premjestiti). Git će vam također dati vašu vlastitu glavnu granu, koja će započeti na istom mjestu kao glavna grana izvora, tako da imate s čime raditi (pogledajte sliku 3-22).

Slika 3-22. Kloniranje Git projekta daje vam vlastitu glavnu granu i origin/master koji ukazuje na glavnu granu u izvoru.

Ako učinite nešto na svojoj lokalnoj glavnoj grani, a u međuvremenu netko drugi unese promjene na git.ourcompany.com i tamo ažurira glavnu granu, vaše priče će se nastaviti drugačije. Također, dok ne kontaktirate izvorni poslužitelj, vaš izvorni/glavni pokazivač se neće pomaknuti (pogledajte sliku 3-23).



Slika 3-23. Kada obavljate lokalni posao i netko gura promjene na udaljeni poslužitelj, svaka se priča nastavlja drugačije.

Da bi vaš rad bio sinkroniziran, pokrenite naredbu git fetch origin. Ova naredba traži kojem poslužitelju podrijetlo odgovara (u našem slučaju to je git.ourcompany.com); izvlači sve podatke koje već nemate i ažurira vašu lokalnu pohranu podataka; pomiče izvorni/glavni pokazivač na novu poziciju (vidi sliku 3-24).


Slika 3-24. Naredba git fetch ažurira vaše udaljene reference.

Da pokažemo kako bi udaljene grane izgledale u situaciji s više udaljenih poslužitelja, pretpostavimo da imate još jedan interni Git poslužitelj koji za razvoj koristi samo jedan od vaših razvojnih timova. Ovaj poslužitelj se nalazi na git.team1.ourcompany.com. Možete ga dodati kao novu udaljenu vezu na projekt na kojem trenutno radite pomoću naredbe git remote add na isti način kao što je opisano u poglavlju 2. Nazovite ovaj udaljeni poslužitelj teamone , što je skraćenica za puni URL (pogledajte sliku .3-25).



Slika 3-25. Dodavanje dodatnog udaljenog poslužitelja.

Sada možete pokrenuti git fetch teamone da dohvatite sve što je na poslužitelju, a ne na vašem. Budući da je u ovaj trenutak ovaj poslužitelj ima samo djelić podataka koje ima izvorni poslužitelj, Git ne dohvaća nikakve podatke, već gura udaljenu granu pod nazivom teamone/master , koja ukazuje na istu predaju kao i glavna grana na teamone poslužitelju (pogledajte sliku 3 -26).



Slika 3-26. Sada imate lokalnu vezu na glavnu granu na teamone.

Slanje izmjena

Ako imate serverfix granu na kojoj želite raditi s nekim drugim, možete je gurati na isti način na koji ste poslali svoju prvu granu. Izvršite git push (udaljeni poslužitelj) (grana):

$ git push origin serverfix Brojanje objekata: 20, gotovo. Sažimanje objekata: 100% (14/14), gotovo. Objekti za pisanje: 100% (15/15), 1,74 KiB, gotovo. Ukupno 15 (delta 5), ​​ponovno korišteno 0 (delta 0) Za [e-mail zaštićen]:schacon/simplegit.git * serverfix -> serverfix

To je na neki način skraćenica. Git automatski proširuje naziv serverfix grane u refs/heads/serverfix:refs/heads/serverfix, što znači "uzmi moju lokalnu serverfix granu i ažuriraj udaljenu serverfix granu iz nje." Detaljno ćemo raspravljati o dijelu refs/heads/ u 9. poglavlju, ali on se obično može izostaviti. Također možete napraviti git push origin serverfix:serverfix - dogodit će se ista stvar - piše "uzmi moj serverfix i napravi ga udaljenim serverfixom". Ovaj format možete koristiti za guranje lokalnog ogranka u udaljeni ogranak s drugim imenom. Ako ne želite da se grana zove serverfix on udaljeni poslužitelj, zatim umjesto prethodne naredbe pokrenite git push origin serverfix:awesomebranch . Ovo će poslati vašu lokalnu granu serverfix u granu awesomebranch udaljenog projekta.

$ git fetch origin remote: Brojanje objekata: 20, gotovo. daljinski: Sažimanje objekata: 100% (14/14), gotovo. daljinski: Ukupno 15 (delta 5), ​​ponovno korišteno 0 (delta 0) Raspakiranje objekata: 100% (15/15), gotovo. Iz [e-mail zaštićen]:schacon/simplegit * serverfix -> origin/serverfix

Važno je napomenuti da kada imate nove udaljene grane kada dohvaćate, ne dobivate automatski lokalne kopije koje je moguće uređivati ​​za njih. Drugim riječima, u našem slučaju nećete dobiti novu serverfix granu - samo origin/serverfix pointer, koji ne možete promijeniti.

Za spajanje ovih razvoja u vašu trenutnu radnu granu, pokrenite git merge origin/serverfix. Ako želite da vaša vlastita serverfix grana radi, možete izgraditi iz udaljene grane:

$ git checkout -b serverfix origin/serverfix Branch serverfix postavljen za praćenje udaljenih grana refs/remotes/origin/serverfix. Prebačeno na novu granu "serverfix"

Ovo će vam dati lokalni ogranak na kojem možete raditi. Počet će tamo gdje je origin/serverfix.

Praćenje podružnica

Odjava lokalne podružnice pomoću git checkout iz udaljene podružnice automatski stvara nešto što se zove praćena grana. Praćene podružnice su lokalne podružnice koje su izravno povezane s udaljenom podružnicom. Ako upišete git push dok ste na praćenoj grani, Git će već znati na koji poslužitelj i granu poslati promjene. Slično, pokretanje git pull-a na jednoj od ovih grana prvo će dohvatiti sve udaljene reference i zatim se automatski spojiti u odgovarajuću udaljenu granu.

Prilikom kloniranja repozitorija, obično će automatski stvoriti glavnu granu koja prati origin/master , tako da git push i git pull rade za tu granu izvan okvira i ne zahtijevaju nikakve dodatne argumente. Međutim, možete konfigurirati praćenje drugih grana udaljenog repozitorija. Jednostavan primjer kako to učiniti, upravo ste vidjeli - git checkout -b [branch] [delete. poslužitelj]/[ogranak] . Ako koristite Git verzije 1.6.2 ili noviji, također možete koristiti prečac --track:

$ git checkout --track origin/serverfix Branch serverfix postavljen za praćenje udaljenih grana refs/remotes/origin/serverfix. Prebačeno na novu granu "serverfix"

Kako biste postavili lokalnu podružnicu s nazivom koji se razlikuje od naziva udaljene podružnice, možete jednostavno koristiti prvu verziju s drugim nazivom lokalne podružnice:

$ git checkout -b sf origin/serverfix Grana sf postavljena za praćenje udaljenih grana refs/remotes/origin/serverfix. Prebačeno na novu granu "sf"

Sada će vaš lokalni sf ogranak automatski gurati i povlačiti promjene iz origin/serverfix-a.

Brisanje ogranaka na udaljenom poslužitelju

Recimo da ste vi i vaši koautori završili značajku i spojili je u glavnu granu na udaljenom poslužitelju (ili neku drugu granu gdje je pohranjen stabilni kod). Možete izbrisati granu na udaljenom poslužitelju koristeći pomalo tupu sintaksu git push [delete. poslužitelj] :[grana] . Da biste uklonili granu serverfix na poslužitelju, učinite sljedeće:

$ git push origin:serverfix To [e-mail zaštićen]:schacon/simplegit.git - popravak servera

Pljesnuti. Na vašem poslužitelju više nema podružnice. Možda biste željeli označiti trenutnu stranicu jer će vam trebati ova naredba i vjerojatno ćete zaboraviti sintaksu. Možete zapamtiti ovu naredbu vraćanjem na sintaksu git push [delete. poslužitelj] [lokalni. nit]:[izbrisano grana], koju smo pogledali malo ranije. Izostavljanje dijela [loc. thread] , vi u biti kažete „uzmite ništa u mom spremištu i učinite to tako da u [izbrisano. grana] bilo je isto.”



reci prijateljima