Jei norite sužinoti daugiau apie „git“ dalis, apie kurias anksčiau bijojote paklausti, tada šis sąrašas skirtas jums. Čia yra surinktos tipiškiausios situacijos ir būdai, kaip jas abi išspręsti asmeninė patirtis autorius ir surinktas visame internete.

Įvykdžius komentarą įvyko klaida

Jei įsipareigojimas dar nebuvo išsiųstas į serverį („push“), galite naudoti paprastą komandą, leidžiančią redaguoti pranešimo tekstą iki paskutinio įsipareigojimo.

git įsipareigoti - pakeisti

Kaip atšaukti paskutinį įsipareigojimą?

Galite naudoti „git“ atstatymą taip:

„git“ atstatymas - kieta GALVA ~ 1

HEAD ~ 1 reiškia vieną įsipareigojimą prieš HEAD, t.y. į dabartinę padėtį. Verta paminėti, kad tai yra „branduolinis“ metodas, kuris panaikins visus pokyčius. Jei jums reikia išsaugoti viską, ką padarėte, bet dar nespėjote įsipareigoti, naudokite:

„git“ atstatymas - minkšta GALVA ~ 1

Ištrinti šaką serveryje

„git push origin“ - ištrinti filialo pavadinimą

Kuo skiriasi „git pull“ ir „git fetch“?

git traukti iš esmės yra „git“ gavimas, po kurio iškart seka „git“ susijungimas. „git fetch“ atneša pakeitimus iš serverio ir saugo juos nuorodose / pulteliuose /. Tai jokiu būdu neturi įtakos vietiniams filialams ir dabartiniams pokyčiams. Ir git pull jau visus šiuos pokyčius išstumia į vietinę kopiją.

Kaip anuliuoti „git add“ prieš įsipareigojant?

„Git add“ failo pavadinimą paleidote netyčia ir norite anuliuoti šio failo pridėjimą. Jei įsipareigojimas dar nebuvo padarytas, tai padės:

iš naujo nustatyti failo pavadinimą

Kaip išspręsti susijungimo konfliktus?

Naudokite „git mergetool“, kuris suteikia patogią sąsają konfliktams išspręsti.

Pašalinkite visus vietinius failus ir katalogus, kurių „git“ nestebi, iš dabartinės kopijos

Atsargiai! Geriau pasidarykite atsarginę kopiją prieš tai atlikdami.

Klonuokite visas šakas iš serverio

Tikėtina, kad tai jau padarėte, o šakos tiesiog paslėptos. Štai komanda jiems visiems parodyti:

Norėdami peržiūrėti norimą šaką, galite naudoti „git checkout“ kilmę / filialo pavadinimą. Arba git checkout -b šakos_pavadinimas kilmė / šakos_vardas, kad sukurtumėte vietinį filialą, atitinkantį nuotolinį.

Pervardykite vietinį skyrių

git filialas -m senavardis vardas

Grįžkite prie bet kokio įsipareigojimo

Galite naudoti atstatymą, kaip parodyta anksčiau, tačiau tai reikš, kad norite visam laikui grįžti į būseną, kurioje buvote, o ne tik į tai žiūrėti (jums reikia atsiskaityti). Įsipareigojimo ID turi būti toks pat, koks rodomas komandos „git log“ išvestyje.

„git reset“ - sunkus įsipareigojimo_ID

Vėlgi, tai panaikins visus dabartinius pakeitimus, todėl įsitikinkite, kad tai yra tai, ko iš tikrųjų norite. Arba naudokite --soft vietoj --hard.

Pašalinkite submodulį

Submodulių kūrimas naudojamas retai, tačiau kartais jų vis tiek reikia. Taigi štai ko jums reikia:

git submodule deinit submodulename
git rm submodulename
git rm - talpyklos submodulinis vardas
rm -rf .git / modules / submodulename

Perrašyti vietinius failus „git“ traukimo metu

„Git“ nustatymas iš naujo padės jums dar kartą:

git fetch - visi
„git reset“ - sunki kilmė / pagrindinis

Kaip pridėti tuščią katalogą į saugyklą?

Negali būti! Tai paprasčiausiai nepalaikoma ir laikoma nereikalinga jums. Tačiau yra vienas triukas. Norimame kataloge galite sukurti .gitignore failą su tokiu turiniu:

# Nepaisykite visko šiame kataloge
*
# Išskyrus patį failą.gitignore
! .gitignore

Šaltinių eksportavimas, panašus į „svn export“

Naudokitės tokiu „git“ archyvu:

„git“ archyvas --format zip --output /path/to/file/file.zip master

Anuliuokite visus pakeitimus, išskyrus tuos, kurie jau pridėti prie planuoto įsipareigojimo

git kasa -.

Sukurkite naują filialą serveryje iš dabartinio vietinio filialo

„git config“ - „global push“. numatytoji srovė
git stumti -u

Atkurti ištrintą failą

Pirmiausia turite rasti paskutinį įsipareigojimą ten, kur failas vis dar egzistavo.

Nuotoliniai filialai yra nuorodos į jūsų nuotolinių saugyklų filialų būseną. Tai yra vietiniai filialai ir jų negalima perkelti; jie juda automatiškai, kai bendraujate tinklu. Nuotoliniai filialai veikia kaip žymės, kad primintų, kur nuotolinių saugyklų šakos buvo paskutinį kartą, kai prie jų prisijungėte.

Jie atrodo kaip (nuotolinio atpirkimo pavadinimas) / (filialas). Pavyzdžiui, jei norite pamatyti, kaip pagrindinis serveris atrodė kilmės serveryje, kai paskutinį kartą prisijungėte prie jo, patikrinkite kilmės / pagrindinį šaką. Jei jūs ir partneris dirbote su ta pačia problema ir jie įkėlė „iss53“ filialą, galite turėti savo vietinį „iss53“ filialą; bet tas filialas serveryje nurodys įsipareigojimą orig / iss53.

Visa tai tikriausiai glumina, todėl pažvelkime į pavyzdį. Tarkime, kad turite savo „Git“ serverį internete adresu git.ourcompany.com. Jei klonuosite ką nors iš jo, „Git“ automatiškai pavadins jo kilmę, paims iš ten visus duomenis, sukurs rodyklę į tai, į ką nurodo pagrindinis filialas, ir pavadinsite ją vietine kilme / magistru (bet jūs negalite jos perkelti) ... „Git“ taip pat padarys jus apie savo pagrindinę šaką, kuri prasideda toje pačioje vietoje kaip ir pradinė šakos šakutė, taigi jūs turite su kuo dirbti (žr. 3-22 pav.).

3-22 pav. „Git“ projekto klonavimas suteikia jums savo pagrindinę šaką ir kilmę / meistrą, nukreipiantį į pagrindinę šaką iš pradžių.

Jei ką nors darote savo pagrindiniame filiale ir tuo tarpu kažkas kitas perkelia git.ourcompany.com pakeitimus ir atnaujina pagrindinį filialą, jūsų istorijos tęsis kitaip. Be to, kol neprisijungsite prie kilmės serverio, jūsų kilmės / pagrindinis rodyklė nejudės (žr. 3-23 pav.).



3-23 pav. Kai dirbate vietinį darbą ir kažkas perkelia į nuotolinį serverį, kiekviena istorija tęsiasi skirtingai.

Norėdami sinchronizuoti savo darbą, paleiskite komandą „git fetch origin“. Ši komanda ieško, kuri serverio kilmė atitinka (mūsų atveju git.ourcompany.com); iš ten gauna visus duomenis, kurių dar neturite, ir atnaujina savo vietinę duomenų saugyklą; perkelia pradžios / pagrindinį rodyklę į naują vietą (žr. 3-24 pav.).


3-24 pav. „Git fetch“ komanda atnaujins jūsų nuotolines nuorodas.

Pademonstruoti, kaip jie atrodys atokios šakos tarkime, kad turite kelis nuotolinius serverius, tarkime, kad turite kitą vidinį „Git“ serverį, kurį kūrimui naudoja tik viena iš jūsų kūrėjų komandų. Šis serveris yra git.team1.ourcompany.com. Galite pridėti jį kaip naują nuotolinę nuorodą į projektą, kurį šiuo metu dirbate, naudodami komandą „git remote add“, kaip aprašyta 2 skyriuje. Pavadinkite šį nuotolinio serverio komandą, kuri bus viso URL stenografas (žr. Pav.) . 3–25).



3-25 pav. Papildomo nuotolinio serverio pridėjimas.

Dabar galite paleisti „git fetch teamone“, kad gautumėte viską iš serverio, ko neturite. Kadangi šiuo serveriu šiuo metu yra tik duomenų, kurių kilmės šalis yra, pogrupis, „Git“ negauna jokių duomenų, bet išstumia nuotolinį filialą, pavadintą „teamone / master“, kuris nurodo tą patį įsipareigojimą kaip pagrindinis „teamone“ filialas ( žr. 3-26 pav.).



3-26 pav. Dabar turite vietinę nuorodą į „teamone“ pagrindinį filialą.

Pateikti pakeitimus

Jei turite serverio pataisų filialą, kurį norite dirbti su kuo nors kitu, galite jį stumti taip pat, kaip ir pirmąjį filialą. Paleisti „git push“ (nuotolinis serveris) (filialas):

$ git push origin serverfix Objektų skaičiavimas: 20, atlikta. Suspausti objektai: 100% (14/14), padaryta. Rašyti objektus: 100% (15/15), 1,74 KiB, atlikta. Iš viso 15 (delta 5), \u200b\u200bpakartotinai panaudota 0 (delta 0) [apsaugotas el. paštu]: schacon / simplegit.git * serverfix -\u003e serverfix

Tai savotiškas susitraukimas. „Git“ automatiškai išplečia serverio pataisos šakos pavadinimą į „refs / heads / serverfix: refs / heads / serverfix“, o tai reiškia „paimk mano vietinį serverio pataisos filialą ir atnaujink iš ten nuotolinį serverio pataisos filialą“. Refs / heads / part išsamiai aptarsime 9 skyriuje, tačiau jų paprastai galima praleisti. Taip pat galite paleisti „git push origin serverfix: serverfix“ - tas pats nutiks - sakoma „paimk mano serverio pataisą ir padaryk tai nuotolinę serverio pataisą“. Galite naudoti šį formatą norėdami perkelti vietinį filialą į nuotolinį filialą kitu vardu. Jei nenorite, kad nuotoliniame serveryje filialas būtų vadinamas serverfix, tada vietoj ankstesnės komandos vykdykite „git push origin serverfix: awesomebranch“. Tai nustums jūsų vietinį serverio pataisų filialą į nuotolinio projekto awesomebranch filialą.

Nuotolinis „$ git“ paieškos šaltinis: objektų skaičiavimas: 20, atlikta. nuotolinis: objektų suspaudimas: 100% (14/14), padaryta. nuotolinis: Iš viso 15 (delta 5), \u200b\u200bpakartotinai panaudotas 0 (delta 0) Išpakuoti objektai: 100% (15/15), padaryta. Nuo [apsaugotas el. paštu]: schacon / simplegit * serverfix -\u003e origin / serverfix

Svarbu pažymėti, kad gavę duomenis turite naujų nuotolinių filialų, automatiškai negaunate jiems vietinių redaguojamų kopijų. Kitaip tariant, mūsų atveju jūs negausite naujo serverfix filialo - tik pradžios / serverfix žymeklio, kurio negalėsite pakeisti.

Norėdami sujungti šį darbą su dabartine darbo šaka, paleiskite „git merge origin / serverfix“. Jei jums reikia savo serverio pataisų filialo, kuriame galėtumėte dirbti, galite jį sukurti pagal nuotolinį filialą:

$ git checkout -b serverfix origin / serverfix Filialo serverio pataisymas sukurtas stebėti nuotolinio filialo nuorodas / nuotolinio valdymo pultus / kilmės / serverio pataisas. Perjungta į naują filialo „serverfix“

Tai suteiks jums vietos filialą, kuriame galėsite dirbti. Jis prasidės ten, kur yra kilmė / serverio pataisymas.

Šakų sekimas

Patikrinus vietinį filialą su „git“ kasa iš nuotolinio filialo, automatiškai sukuriamas vadinamasis skyrius vikšrinė šaka... Stebimi filialai yra vietiniai filialai, tiesiogiai susieti su nuotoliniu filialu. Jei būdami stebimoje šakoje įvesite „git push“, „Git“ jau žinos, į kurį serverį ir filialą reikia pakeisti. Lygiai taip pat, paleidus „git“ traukimą vienoje iš šių šakų, pirmiausia gaunamos visos nuotolinės nuorodos, o tada automatiškai susilieja su atitinkamu nuotoliniu filialu.

Klonuojant saugyklą, paprastai automatiškai sukuriamas pagrindinis filialas, kuris seka kilmę / pagrindinį, todėl „git push“ ir „git pull“ darbai šiai šakai iš langelio ir nereikalauja papildomų argumentų. Tačiau galite nustatyti kitų filialų stebėjimą. nuotolinė saugykla... Jūs ką tik pamatėte paprastą pavyzdį, kaip tai padaryti - „git checkout“ -b [filialas] [ištrintas. serveris] / [filialas]. Jei naudojate „Git“ 1.6.2 ar naujesnę versiją, taip pat galite naudoti --track spartųjį klavišą:

$ git checkout --track origin / serverfix Filialo serverio pataisymas sukurtas stebėti nuotolinio filialo nuorodas / nuotolinio valdymo pultus / origin / serverfix. Perjungta į naują filialo „serverfix“

Norėdami nustatyti vietinį filialą kitu pavadinimu nei nuotolinis filialas, galite lengvai naudoti pirmąją versiją su kitu vietinio filialo pavadinimu:

$ git checkout -b sf origin / serverfix Filialas sf įsteigtas stebėti nuotolinio filialo nuorodas / nuotolinio valdymo pultus / origin / serverfix. Perėjo į naują filialą „sf“

Dabar jūsų vietinis sf filialas automatiškai stumia ir traukia pakeitimus iš kilmės / serverio pataisos.

Šakų pašalinimas nuotoliniame serveryje

Tarkime, jūs ir jūsų bendradarbiai baigėte diegti naujoves ir sujungėte ją į nuotolinio serverio pagrindinį filialą (arba kokį kitą filialą, kuriame saugomas stabilus kodas). Šaką galite stumti nuotoliniame serveryje naudodami šiek tiek nesąžiningą sintaksės git push [remote. serveris]: [filialas]. Norėdami pašalinti serverio pataisos šaką serveryje, atlikite šiuos veiksmus:

$ git push origin: serverfix To [apsaugotas el. paštu]: schacon / simplegit.git - serverfix

Ploti. Jūsų serveryje nebėra filialo. Galbūt norėsite pažymėti esamą puslapį, nes jums reikės šios komandos ir greičiausiai pamiršite sintaksę. Šią komandą galite prisiminti grįžę į sintaksę „git push“ [ištrinti. serveris] [lok. filialas]: [ištrinti. filialas], į kurį mes pažvelgėme šiek tiek anksčiau. Praleidžiant [lok. filialas], jūs iš esmės sakote „nieko neimk į mano saugyklą ir padaryk taip, kad [nuotol. filialas] buvo tas pats ".

Jei naudojate slaptažodžio autentifikavimą:

  1. $ git klonas https: // vartotojo vardas: [apsaugotas el. paštu]/opt/git/repository.git

Darbas su šakomis

Rodyti visus filialus:
  1. $ git filialas
Sukurkite naują filialą:
  1. $ git filialas
Perjungti į naują filialą:
  1. $ git kasa
Sukurkite naują filialą ir pereikite prie jo:
  1. $ git kasa -b
Ištrinti vietinį skyrių:
  1. $ git filialas -d
Pašalinti filialą iš nuotolinės saugyklos:
  1. $ git push origin - ištrinti

Darbas su įsipareigojimais

Kaip pašalinti paskutinį įsipareigojimą?

  1. $ git reset - soft HEAD ^
Git Kaip. 16 skyrius. Įsipareigojimų atsisakymas
Git Kaip. 17 skyrius. Pašalinti įsipareigojimus iš filialo
Oficiali „Git“ dokumentacija. „Git“ pagrindai - pakeisti pokyčius

Kaip pakeisti paskutinį įsipareigojimą?

  1. $ git pridėti new_file.txt
  2. $ git įsipareigoti - pakeisti

Kaip pakeisti paskutinio įsipareigojimo komentarą?

  1. $ git įsipareigoti - pakeisti
  2. $ git įsipareigoti - pakeisti -m „Naujas komentaras“

Kaip sujungti kelis įsipareigojimus?

  1. $ git rebase -i GALVA ~ 3
Vietoj HEAD ~ 3 galite naudoti vykdymo maišos variantą. Jums reikia perduoti įsipareigojimo maišos, kurią norite viską sujungti (suploti).
Bus atidarytas redaktorius su įsipareigojimų sąrašu, o viršuje - seniausias įsipareigojimas.
  1. pasirinkti 1111111 Atlikite 1 komentarą
  2. pasirinkti 2222222 Įvykdykite 2 komentarą
  3. pasirinkti 3333333 Atlikite 3 komentarus
Mes turime pakeisti „pick“ su moliūgais, kad gautume jį taip:
  1. pasirinkti 1111111 Atlikite 1 komentarą
  2. skvošas 2222222 Įveskite 2 komentarą
  3. skvošas 3333333 Įvykdykite 3 komentarus
Tada turite išsaugoti failą ir išeiti. Vėl veiks teksto redaktorius su visais komentarais apie įsipareigojimus. Turite redaguoti, išsaugoti ir išeiti. Atlikę šiuos veiksmus, įsipareigojimai bus sujungti.

Kaip anuliuoti konkretaus failo pakeitimus ir grąžinti jį į būseną, kurioje jis buvo po paskutinio įsipareigojimo?

  1. $ git patikra - file.txt

Kaip grąžinti visus neįpareigotus (neįpareigotus) pakeitimus?

  1. $ git kasa

Kaip laikyti keletą failų kitam įsipareigojimui?

Tarkime, kad norite atlikti pakeitimus kai kuriuose rinkmenose, o kitame faile - atlikti kitus įsipareigojimus. Tada galite juos laikinai pašalinti iš saugyklos („unstage“ failus) ir tada vėl pridėti.
  1. $ git reset HEAD file.txt
Ši komanda pašalins failą iš saugyklos, ji išliks senuose įsipareigojimuose. Galva rodo į paskutinį įsipareigojimą dabartiniame filiale.

Jei negalite perkelti į nuotolinę saugyklą dėl to, kad dabartinė saugyklos versija yra mažesnė nei nuotolinės saugyklos versija

Tokiu atveju galite priverstinai stumti.
  1. $ git push -f kilmės meistras

Susiliejančios šakos

Kaip galiu paimti tik kai kuriuos failus iš kito filialo?

  1. $ git patikros šakos pavadinimas - kelias / į / file.file

Nuotolinės saugyklos

Informacijos apie nuotolinę saugyklą rodymas

  1. Nuotolinio šou „$ git“ kilmė
Tai parodys maždaug taip:
  1. * nuotolinė kilmė
  2. Gauti URL: [apsaugotas el. paštu]: /opt/git/test-project.git
  3. Push URL: [apsaugotas el. paštu]: /opt/git/test-project.git
  4. GALVA filialas: meistras
  5. Nuotolinis filialas:
  6. pagrindinis naujas (kitas atėmimas bus saugomas nuotolinio valdymo pultuose / kilmės vietoje)
  7. „Git push“ sukonfigūruotas vietinis nuoroda:
  8. meistras stumia į meistrą (vietinis pasenęs)

Nuotolinės saugyklos pridėjimas

  1. Nuotolinis „$ git“ pridėkite kilmę [apsaugotas el. paštu]: /opt/git/test-project.git