segunda-feira, 13 de junho de 2016

3.3 Git branĉantaj - Branĉa Administro (Management)

3.3 Git branĉantaj - Branĉa Administro (Management)

Nun ke vi kreis, kunfalis kaj forigita iuj branĉoj, ni rigardu iuj branĉo-mastrumado iloj kiu eniros oportunan kiam vi komencas uzanta branĉoj ĉiam.
La git branch ordono faras pli ol nur krei kaj forigi branĉoj. Se vi kuri ĝin sen argumentoj, vi ricevos simplan liston de viaj nunaj branĉoj:
  $ Git branĉo
 iss53
* master
 testing 
Rimarki la * karakteron kiu Prefiksoj la master branĉo: ĝi indikas la branĉo kiu vi nun kontrolis eksteren (te, la branĉo kiu HEAD punktoj). Tio signifas ke se vi faras en tiu punkto, la master branĉo estos movita antaŭen kun via nova laboro. Vidi la lasta faras en ĉiu branĉo, vi povas kuri git branch -v :
  $ Git branĉo -v
 iss53 93b412c fix javascript issue
* master 7a98805 Merge branch 'iss53'
 testing 782fd34 add scott to the author list in the readmes 
La utila --merged kaj --no-merged opcioj povas filtri tiun liston al branĉoj ke vi havas aŭ ankoraŭ ne kunfalis en la branĉo vi aktuale plu. Vidi kiun branĉoj jam kunfandita en la branĉo vi estas sur, Vi povas kuri git branch --merged :
  $ Git branĉo --merged
 iss53
* master 
Ĉar vi jam kunfalis en iss53 antaŭe, vi vidos ĝin en via listo. Branĉoj en tiu listo sen la * antaŭ ili ĝenerale bone forigi kun git branch -d ; vi jam korpigis ilia laboro en alia branĉo, do vi ne tuj perdi nenion.
Vidi ĉiujn branĉojn kiuj enhavas laboron vi ankoraŭ ne kunfalis en, vi povas kuri git branch --no-merged :
  $ Git branĉo --no-kunfalis
 testing 
Tio montras vian alia branĉo. Ĉar ĝi enhavas laboro kiu ne kunfalis en ankoraŭ, klopodante forigi ĝin kun git branch -d malsukcesos:
  $ Git branĉo -d testado
error: The branch 'testing' is not fully merged.
If you are sure you want to delete it, run 'git branch -D testing'. 
Se vi vere volas forigi la branĉo kaj perdi tiun laboron, vi povas devigi gxin per -D , kiel la helpema mesaĝo atentigas.

3.2 Git branĉantaj - Bazaj branĉantaj kaj kunfando

3.2 Git branĉantaj - Bazaj branĉantaj kaj kunfando

Ni iru tra simpla ekzemplo de branĉantaj kaj kunfalado kun laborfluo ke vi povus uzi en la reala mondo. Vi sekvu tiujn paŝojn:
  1. Ĉu labori sur retejo.
  2. Krei branĉon por nova rakonto vi laboras plu.
  3. Fari iun laboron en tiu branĉo.
En tiu stadio, Vi ricevos alvokon ke alia afero estas maltrankviliga kaj vi bezonas hotfix. Vi faros la sekvajn:
  1. Ŝanĝi viajn produktado branĉo.
  2. Krei branĉon aldoni la hotfix.
  3. Post ĝi estas provita, kunfandi la hotfix branĉo kaj frapas al produktado.
  4. Ŝanĝi reen al via originala rakonto kaj daŭre labori.

baza branĉantaj

Unue, diru vi laboras en via projekto kaj havas paron de interna jam.
Simpla fari historion.
Figuro 3-10. Simpla commit historio
Vi decidis ke vi estas iranta labori sur temo numero 53 en ajna temo-sekvado sistemo via kompanio uzas. Krei branĉon kaj ŝanĝi al ĝi samtempe, vi povas kuri la git checkout komando kun la -b ŝaltilo:
  $ Git kaso -b iss53
Switched to a new branch "iss53" 
Tio estas stenografio por:
  $ Git branĉo iss53
 $ Git kaso iss53 
Kreante nova branĉo montrilo.
Figuro 3-11. Krei novan branĉon montrilon
Vi laboras en via retejo kaj fari iu interna. Farante tiel movas la iss53 branĉo antaŭen, ĉar vi havas ĝin Taksis (te viajn HEAD notas al tio):
  $ Vim index.html
 $ Git commit -a -m 'added a new footer [issue 53]' 
La iss53 branĉo movis antaŭen kun via laboro.
Figuro 3-12. La iss53 branĉo movis antaŭen kun via laboro
Nun vi ricevas la alvokon kiu estas temo kun la retejo, kaj necesas korekti ĝin tuj. Kun Git, vi ne devas disfaldi vian solvon kune kun la iss53 ŝanĝojn vi faris, kaj vi ne devas meti multe da penado en revertir tiuj ŝanĝoj antaux vi povas labori sur apliki solvon al kio estas en produktado. Ĉiuj vi devas fari estas reiri al via master branĉo.
Tamen, antaŭ ol fari tion, rimarku ke se via labordosierujon aŭ enscenigante areo havas uncommitted ŝanĝoj kiuj konfliktas kun la branĉo vi ekiras, Git ne permesos vin ŝanĝi branĉoj. Ĝi estas bona havi puran laborista stato kiam vi ŝanĝos branĉoj. Ekzistas manieroj por preni ĉirkaŭ ĉi (nome stashing farante amendi) kiu kovros poste, en Stashing kaj Pureco . Nuntempe, ni supozu vi faris ĉiujn viajn ŝanĝojn, do vi povas reiri al via master branĉo:
  $ Git kaso mastro
Switched to branch 'master' 
Ĉe tiu punkto, via projekto laboranta dosierujo estas ĝuste la vojo ĝi estis antaŭ vi komencis labori pri temo numero 53, kaj povas koncentri sur via hotfix. Tio estas grava punkto memori: kiam vi ŝanĝos branĉoj, Git restarigas vian labordosierujon rigardi kiel ĝi faris la lastan fojon vi faris en tiu branĉo. Ĝi aldonas, forigas, kaj modifas dosierojn aŭtomate certigi via laboranta kopio estas kion la branĉo rigardis kiel en via lasta faras al ĝi.
Sekva, Vi havas hotfix fari. Ni kreos hotfix branĉo sur kiu labori ĝis ĝi estas finita:
  $ Git kaso -b hotfix
Switched to a new branch 'hotfix'
 $ Vim index.html
 $ Git commit -a -m 'fixed the broken email address'
[hotfix 1fb7853] fixed the broken email address
 1 file changed, 2 insertions(+) 
Hotfix branĉo bazita sur `master`.
Figuro 3-13. Hotfix branĉo surbaze master
Vi povas kuri vian provoj, certigi la hotfix estas kion vi deziras, kaj kunfandi ĝin en vian master branĉo deploji al produktado. Vi faras tion per la git merge komando:
  $ Git kaso mastro
 $ Git merge hotfix
Updating f42c576..3a0874c
Fast-forward
 index.html | 2 ++
 1 file changed, 2 insertions(+) 
Vi rimarkos la frazo "rapida antaŭen" en tiu merge. Ĉar la commit C4 almontras la branĉo hotfix vi kunfalis en estis rekte antaŭ la commit C2 vi estas sur, Git simple movas la montrilon antaŭen. Al frazo kiu alia vojo, kiam vi provas kunfandi unu faras kun fari ke povas esti atingita sekvante la unua fari la historion, Git simpligas aferojn movante la montrilon antaŭen ĉar ne ekzistas diferencaj laboro por kunfandi kune - tio nomiĝas " rapida antaŭen. "
Via ŝanĝo estas nun en la instantánea de la commit pintaj al la master branĉo, kaj vi povas disfaldi la solvon.
`Master` estas rapida plusendita al` hotfix`.
Figuro 3-14. master estas rapida plusendita al hotfix
Post via super- grava fix estas deplojitaj, vi pretas reiri al la laboro vi faris antaux vi interrompis. Tamen, unue vi devos forigi la hotfix branĉo, ĉar vi ne plu bezonas ĝin - la master branĉo punktoj al la sama loko. Vi povas forigi ĝin per la -d elekto git branch :
  $ Git branĉo -d hotfix
Deleted branch hotfix (3a0874c). 
Nun vi povas reiri al via agado-en-progreso branĉo sur temo numero 53 kaj daŭre labori sur ĝi.
  $ Git kaso iss53
Switched to branch "iss53"
 $ Vim index.html
 $ Git commit -a -m 'finished the new footer [issue 53]'
[iss53 ad82d7a] finished the new footer [issue 53]
1 file changed, 1 insertion(+) 
Laboro daŭras sur `iss53`.
Kalkuli 3-15. Laboro daŭras sur iss53
Ĝi valoras notanta tie ke la laboro vi faris en via hotfix branĉo ne enhavita en la dosierojn en via iss53 branĉo. Se vi bezonas tiri ĝin, vi povas kunfandi viajn master branĉo en vian iss53 branĉo de kuranta git merge master , aŭ vi povas atendi integri tiujn ŝanĝojn ĝis vi decidas tiri la iss53 branĉo reen en master poste.

baza kunfando

Supozi vi decidis, ke via temo numero 53 laboro estas kompleta kaj preta esti kunfandita en via master branĉo. Por fari tion, vi kunfandi viajn iss53 branĉo en master , multe kiel vi kunfalis via hotfix branĉo antaŭe. Ĉiuj vi devi fari estas kontroli la branĉo vi volas kunfandi en kaj poste ekzekuti la git merge komando:
  $ Git kaso mastro
Switched to branch 'master'
 $ Git merge iss53
Merge made by the 'recursive' strategy.
index.html | 1 +
1 file changed, 1 insertion(+) 
Tio aspektas iom malsama ol la hotfix kunfandi vi faris antaŭe. Tiukaze, via evoluo historio diverĝis el kelkaj malnovaj punkto. Ĉar la commit de la branĉo vi estas sur ne estas rekta prapatro de la branĉo vi kunfalado en, Git devas fari iun laboron. Tiukaze, Git faras simplan tridirekta merge, uzante la du instantáneas almontras la branĉo konsiletoj kaj la komuna prapatro de la du.
Tri instantáneas uzita en tipa merge.
Kalkuli 3-16. Tri instantáneas uzita en tipa merge
Anstataŭ simple kopii la branĉo montrilon antaŭen, Git kreas novan instantánea kiu rezultas de tiu triopa merge kaj aŭtomate kreas novan fari ke punktoj al ĝi. Tio estas referita kiel merge fari, kaj estas speciala ĉar ĝi havas pli ol unu gepatro.
A merge fari.
Kalkuli 3-17. A merge commit
Ĝi valoras markante ke Git determinas la plej komuna praulo uzi por lia merge bazo; tiu estas malsama ol malnovaj iloj kiel CVS aŭ Subversion (antaŭ versio 1.5), kie la desarrollador faras la merge devis diveni la plej merge bazo por si. Tio igas kunfalado heck de multe pli facila en Git ol en tiuj aliaj sistemoj.
Nun ke via verko estas kunfanditaj en, vi ne plu bezonas la iss53 branĉo. Vi povas fermi la bileto en via bileto-sekvado sistemo kaj forigi la branĉo:
  $ Git branĉo -d iss53 

Baza Merge Konfliktoj

Foje, tiu procezo ne iras glate. Se vi ŝanĝis la sama parto de la sama dosiero malsame en la du branĉoj vi kunfandante kune, Git ne povos kunfandi ilin pure. Se via fix por temo numero 53 modifis la sama parto de dosiero la hotfix , vi ricevos merge konflikto kiu aspektas io tiamaniere:
  $ Git merge iss53
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result. 
Git ne aŭtomate kreita nova merge fari. Ĝi paŭzis la procezo dum vi solvas la konflikton. Se vi volas vidi kio dosieroj unmerged ĉe ajna punkto post merge konflikto, vi povas kuri git status :
  $ Git statuso
On branch master
You have unmerged paths.
 (fix conflicts and run "git commit")

Unmerged paths:
 (use "git add <file>..." to mark resolution)

 both modified: index.html

no changes added to commit (use "git add" and/or "git commit -a") 
Io ajn kiu havas kunfandi konfliktoj kaj ne estis solvita estas listigita kiel unmerged. Git aldonas normo konfliktosolvado markiloj al la dosieroj, kiuj havas konfliktojn, do vi povas malfermi ilin permane kaj solvi tiujn konfliktojn. Via dosiero enhavas sekcion, kiu aspektas io tiamaniere:
  <<<<<<< KAPO: index.html
 < Div id = "footer" > kontakto: email.support@github.com < / div >
 =======
 < Div id = "footer" >
  bonvolu kontakti nin ĉe support@github.com
 < / Div >
 >>>>>>> Iss53: index.html 
Tio signifas la versio en HEAD (via master branĉo, ĉar tio estis kion vi Taksis kiam vi kuris via merge komando) estas la supera parto de tiu bloko (ĉio super la ======= ), dum la versio en via iss53 branĉo aspektas kiel ĉiu en la malsupran parton. Por solvi la konflikton, vi devas aŭ elektu unu flanko aŭ la alia aŭ kunfandi la enhavon mem. Ekzemple, vi povus solvi tiun konflikton anstataŭigante la tutan blokon kun ĉi:
  < Div id = "footer" >
 bonvolu kontakti nin ĉe email.support@github.com
 < / Div > 
Tiu rezolucio havas iom de ĉiu sekcio, kaj la <<<<<<< , ======= kaj >>>>>>> linioj estis tute forigita. Post vi malkomponita ĉiu de tiuj sekcioj en ĉiu konfliktis dosiero, kuri git add sur ĉiu dosiero por marki ĝin kiel solvitaj. Enscenigante la dosiero markas ĝin kiel malkomponita en Git.
Se vi volas uzi grafikan ilon por solvi tiujn problemojn, vi povas kuri git mergetool , kiu pafas supren taŭga vida merge ilo kaj piediras vin tra la konfliktoj:
  $ Git mergetool

This message is displayed because 'merge.tool' is not configured.
See 'git mergetool --tool-help' or 'git help config' for more details.
'git mergetool' will now attempt to use one of the following tools:
opendiff kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse diffmerge ecmerge p4merge araxis bc3 codecompare vimdiff emerge
Merging:
index.html

Normal merge conflict for 'index.html':
 {local}: modified file
 {remote}: modified file
Hit return to start merge resolution tool (opendiff): 
Se vi volas uzi merge ilo alia ol la defaŭlta (Git elektis opendiff en tiu kazo ĉar la komando estis prizorgita sur Mac), vi povas vidi ĉiujn apogis iloj listigitaj ĉe la supro post "unu el la sekvaj iloj." Ĝuste tajpi la nomon de la ilo vi preferus uzi.
noto
Se vi bezonas pli progresintaj iloj por solvi malfacila merge konfliktoj, ni kovras pli sur kunfalado en Altnivela kunfalado .
Post vi eliras la merge ilo, Git demandas vin se la merge sukcesis. Se vi diros la skripto kiu estis, ĝi enscenigas la dosieron por marki ĝin kiel decidis por vi. Vi povas kuri git status denove por kontroli ke ĉiuj konfliktoj estis solvitaj:
  $ Git statuso
On branch master
All conflicts fixed but you are still merging.
 (use "git commit" to conclude merge)

Changes to be committed:

 modified: index.html 
Se vi estas feliĉa kun tio, kaj vi kontrolos ke ĉiu kiu havis konfliktojn estis enscenigita, vi povas tajpi git commit fini la merge fari. La commit mesaĝon defaŭlte aspektas io tiamaniere:
 Merge branch 'iss53'

Conflicts:
 index.html
#
 # Aspektas kiel vi povas fari la merge.
 # Se tio ne ĝustas, bonvolu forigi la dosieron
 # .git / MERGE_HEAD
 # Kaj reprovu.


 # Bonvolu eniri la commit mesaĝon for viaj ŝanĝoj.  linioj komencante
 # Per '#' estos ignorata kaj malplenan mesaĝon abortas la commit.
 # La branĉo mastro
 # Ĉiuj konfliktoj fiksita sed vi ankoraŭ kunfalado.
#
 # Ŝanĝoj esti farita:
 # Modifita: index.html
# 
Vi povas modifi tiun mesaĝon kun detaloj pri kiel vi solvis la merge se vi pensas ke estus helpema al aliaj rigardi ĉi merge en la estonteco - kial vi faris kion vi faris, se ĝi ne estas evidenta.

3.1 Git branĉantaj - Branĉoj Unuvorte

3.1 Git branĉantaj - Branĉoj Unuvorte

Preskaŭ ĉiu VCS havas iun formon de branĉantaj subteno. Disbranĉadon signifas vin diverĝas de la ĉefa linio de disvolviĝo kaj daŭre faros laboron sen rompado kun tiu ĉeftendenca. En multaj VCS iloj, ĉi tiu estas iom peniga procezo, ofte postulanta vin krei novan kopion de via fontkodo dosierujo, kiu povas preni longan tempon por grandaj projektoj.
Iuj homoj aludas al Git la disbranĉadon modelo kiel lia "murdisto karakterizaĵo," kaj certe aroj Git dise en la VCS komunumo. Kial tiom speciala? La vojo Git branĉoj estas nekredeble malpeza, farante branĉantaj operacioj preskaŭ instantáneo, kaj ŝaltanta-reen inter branĉoj ĝenerale tiom rapide. Malkiel multaj aliaj VCSs, Git instigas fluoj de laboro ke branĉo kaj kunfandi ofte, eĉ plurfoje en tago. Komprenon kaj majstranta tiu karakterizaĵo donas potencan kaj sola ilo kaj povas tute ŝanĝi la maniero kiun vi disvolvi.

Branĉoj Unuvorte

Por vere kompreni la manieron Git does branĉantaj, ni bezonas preni retropaŝon kaj ekzameni kiel Git stokas liajn datumojn.
Kiel vi eble memoras de ekuzi , Git ne stokas datumojn kiel serio de changesets aŭ diferencoj, sed anstataŭe kiel serion de instantáneas.
Kiam vi faras fari, Git vendejoj oni faras objekto kiu enhavas puntero al la instantánea de la enhavo vi enscenigita. Tiu celo ankaŭ enhavas la aŭtora nomo kaj retpoŝto, la mesaĝo kiu vi tajpas, kaj punteros al la commit aŭ faras ke rekte venis antaux tiu faras (lia patro aŭ gepatroj): nul gepatroj por la komenca farante per unu gepatro por normala fari, kaj multnombraj gepatroj por fari ke rezultoj de merge de du aŭ pli branĉojn.
Bildigi tion, ni supozu ke vi havas dosierujo enhavanta tri dosierojn, kaj vi enscenigi ilin ĉiujn kaj fari. Enscenigante la dosierojn checksums ĉiu (la SHA-1 hash ni menciis en ekuzi ), tendencas ke versio de la dosiero en la Git-deponejo (Git raportas ilin kiel blobs), kaj aldonas ke checksum al la surscenigo areo:
 $ Git aldonu README test.rb LICENCO $ git commit -m 'The initial commit of my project' 
Kiam vi kreas la commit de kuranta git commit , Git checksums ĉiu subdosierujo (en tiu kazo, nur la radiko projekto dosierujo) kaj tendencas tiuj arbo objektoj en la Git-deponejo. Git tiam kreas commit objekto kiu havas la metadatenoj kaj montrilo al la radika projekto arbo do ĝi povas re-krei tiun instantánea kiam devita.
Vian Git-deponejo nun enhavas kvin objektojn: unu blob pri la enhavo de ĉiu de viaj tri dosierojn, unu arbon kiu listigas la enhavon de la dosierujo kaj specifas kiun dosiero nomoj estas stokitaj kiel kiu blobs, kaj oni faras kun la puntero al tiu radika arbo kaj ĉiuj faras pridatumon.

Al fari kaj lia arbo.
Figuro 3-1. A commit kaj lia arbo
Se vi faras iujn ŝanĝojn kaj fari denove la proksima commit tendencas puntero al la commit kiu venis tuj antaŭ ĝi.

Kompromitas kaj iliaj gepatroj.
Figuro 3-2. Kompromitas kaj iliaj gepatroj
Branĉo en Git estas simple malpeza meblo puntero al unu el tiuj interna. La defaŭlta branĉo nomon en Git estas master . Kiel vi komenci farante interna, vi ricevis master branĉo kiu notas al la lasta commit vi faris. Ĉiufoje vi faras, ĝi moviĝas antaŭen aŭtomate.
noto
La "mastro" branĉo en Git ne speciala branĉo. Estas ĝuste kiel ajna alia branĉo. La sola kialo preskaŭ ĉiu deponejo havas estas ke la git init komando kreas defaŭlte kaj plej homoj ne ĝenas ŝanĝi ĝin.

Branĉo kaj lia fari historion.
Figuro 3-3. Branĉo kaj lia commit historio

Kreante Nova Branĉo

Kio okazas se vi kreas novan branĉon? Nu, farante tiel kreas novan montrilon por vi movi ĉirkaŭe. Imagu ke vi kreas novan filion nomita testado. Vi faras tion per la git branch komando:
  $ Git branĉo testado 
Ĉi kreas novan sagon al la sama commit vi aktuale plu.
Du branĉoj montrante en la sama serio de interna.
Figuro 3-4. Du branĉoj montrante en la sama serio de interna
Kiel Git scias kion branĉo vi aktuale sur? Ĝi tenas specialan puntero nomis HEAD . Notu ke ĉi tiu estas multe malsama ol la koncepto de HEAD en aliaj VCSs vi povas uzi por, ekzemple Subversion aŭ CVS. En Git, ĉi estas puntero al la loka branĉo vi aktuale plu. En tiu kazo, vi ankoraŭ sur master . La git branch komandon nur kreis novan branĉon - ne ŝanĝi al tiu branĉo.
HEAD indikante branĉo.
Figuro 3-5. KAPO indikus branĉo
Vi povas facile vidi tion kurante simpla git log komando kiu montras vin kie la branĉo punteros notas. Opcio estas nomita --decorate .
  $ Git log --oneline --decorate
f30ab (HEAD -> master, testing) add feature #32 - ability to add new formats to the central interface
34ac2 Fixed bug #1328 - stack overflow under certain conditions
98ca9 The initial commit of my project 
Vi povas vidi la "majstro" kaj "testado" branĉoj kiuj estas ĝuste tie apud la f30ab fari.

ŝaltanta Branĉoj

Alti al ekzistanta branĉo, vi kuras la git checkout komando. Ni ŝanĝos al la nova testing branĉo:
  $ Git kaso testado 
Ĉi movas HEAD atentigi al la testing branĉo.
HEAD punktoj al la aktuala branĉo.
Figuro 3-6. KAPO punktoj al la aktuala branĉo
Kio estas la signifo de tio? Nu, ni faru alian fari:
  $ Vim test.rb
 $ Git commit -a -m 'made a change' 
La KAPO branĉo movas antaŭen kiam faras estas farita.
Figuro 3-7. La KAPO branĉo movas antaŭen kiam faras estas farita
Tio estas interesa, ĉar nun via testing branĉo movis antaŭen, sed via master branĉo ankoraŭ montras al la commit vi estis kiam vi kuris git checkout alti branĉoj. Ni ŝanĝi reen al la master branĉo:
  $ Git kaso mastro 
HEAD movas kiam checkout.
Figuro 3-8. KAPO movas kiam checkout
Ke komando faris du aferojn. Ĝi kopiis la KAPO montrilon al punkto al la master branĉo, kaj ĝi revenis la dosierojn en via labordosierujon reen al la instantánea ke master punktoj. Ĉi tio ankaŭ signifas la ŝanĝoj kiujn vi faras el tiu punkto antaŭen estos diverĝas de malnova versio de la projekto. Ĝi esence rebobina la laboro vi faris en via testing branĉo do vi povas iri en malsama direkto.
noto

Ŝaltanta branĉoj ŝanĝas dosierojn en via laboranta dosierujo

Estas grave noti, ke kiam vi ŝanĝos branĉoj en Git, dosierojn en via labordosierujon ŝanĝos. Se vi ŝanĝos al malnova branĉo, via labordosierujon estos reverted rigardi kiel ĝi faris la lastan fojon vi faris en tiu branĉo. Se Git ne povas fari ĝin pure, ĝi ne permesas vin ŝanĝi tute.
Ni faru kelkajn ŝanĝojn kaj fari denove:
  $ Vim test.rb
 $ Git commit -a -m 'made other changes' 
Nun via projekto historio diverĝis (vidu Figuro 3-9 ). Vi kreis kaj interŝanĝita al branĉo, faris iun laboron sur ĝi kaj poste interŝanĝita reen al via ĉefa branĉo kaj faris alian laboron. Ambaŭ de tiuj ŝanĝoj estas izolita en apartajn branĉojn: vi povas ŝanĝi tien kaj reen inter la branĉoj kaj kunfandi ilin kune kiam vi estas preta. Kaj vi faris cxion, kio kun simpla branch , checkout , kaj commit ordonojn.
Diferenca historio.
Figuro 3-9. Diferenca historio
Vi povas ankaŭ vidi ĉi facile kun la git log komando. Se vi kuras git log --oneline --decorate --graph --all ĝi presos la historio de via interna, montrante kie via branĉo punteros estas kaj kiom via historio diverĝis.
  $ Git log --oneline --decorate --graph --all
* c2b9e (HEAD, master) made other changes
| * 87ab2 (testing) made a change
|/
* f30ab add feature #32 - ability to add new formats to the
* 34ac2 fixed bug #1328 - stack overflow under certain conditions
* 98ca9 initial commit of my project 
Ĉar branĉo en Git estas en realeco simplan dosieron kiu enhavas la 40 karaktero SHA-1 checksum de la commit notas al, branĉoj estas malkaraj por krei kaj detrui. Kreante novan branĉon kiel rapida kaj simpla kiel skribanta 41 bajtoj al dosiero (40 karakteroj kaj lino).
Tio estas en akra kontrasto al la maniero plej malnovaj VCS iloj branĉo, kiu engaĝas kopiante ĉiuj projekto dosierojn en sekundo dosierujo. Tio povas preni plurajn sekundojn aŭ eĉ minutojn, depende de la grandeco de la projekto, dum kiu en Git la procezo estas ĉiam instantánea. Ankaŭ, ĉar ni gravuras la gepatroj kiam ni faras, trovanta konvenan merge bazo por fandado estas aŭtomate farita por ni kaj estas ĝenerale tre facile fari. Tiuj trajtoj helpos kuraĝigi desarrolladores krei kaj uzi branĉoj ofte.
Vidu kial vi devus tion fari.

2.8 Bazoj de Git - Resumo

2.8 Bazoj de Git - Resumo

Ĉe tiu punkto, vi povas fari ĉiujn bazajn loka Git operacioj - krei aŭ klonado deponejo, farante ŝanĝojn, enscenigante kaj fari tiujn ŝanĝojn, kaj vidanta la historio de ĉiuj ŝanĝoj la deponejo estis tra. Tuj, ni kovros Git murdisto trajto: lia branĉantaj modelo.

2.7 Bazoj de Git - Konsiletoj kaj Ruzoj

2.7 Bazoj de Git - Konsiletoj kaj Ruzoj

Konsiletoj kaj Ruzoj

Antaŭ ni finos tiun ĉapitron sur baza Git, kelkaj malgrandaj konsiletoj kaj ruzoj povas fari vian Git sperti iom pli simpla, facila, aŭ pli familiara. Multaj homoj uzas Git sen uzi iun ajn de ĉi tiuj konsiloj, kaj ni ne rilatas al ili aŭ supozi vi uzis ilin poste en la libro; sed vi supozeble scias kiel fari ilin.

Auto-Finaĵo

Se vi uzas la Bash ŝelo, Git venas kun bela aŭtomata plenigo skripto vi povas ebligi. Elŝuti ĝin rekte de la Git fontkodo ĉe https://github.com/git/git/blob/master/contrib/completion/git-completion.bash. Kopiu tiun dosieron al via hejma dosierujo, kaj aldoni tiun al via .bashrc dosiero:
 source ~/git-completion.bash 
Se vi volas agordi Git aŭtomate havas Bash ŝelo kompletigo por ĉiuj uzantoj, kopii tiun skripton al la /opt/local/etc/bash_completion.d dosierujo sur Mac sistemoj aŭ al la /etc/bash_completion.d/ dosierujo en Linukso sistemoj . Tio estas adresaro de skriptoj kiuj Bash aŭtomate ŝarĝi disponigi ŝelon finaĵoj.
Se vi uzas Windows kun Git Bash, kiu estas la defaŭlta kiam instali Git sur Vindozo kun msysGit, aŭto- kompletiĝo estu preconfigured.
Premu la Tab ŝlosilo kiam vi skribas Git komando, kaj ĝi devus reveni aro de sugestoj por vi elekti de:
 $ git co<tab><tab> commit config 
Tiukaze, tajpante git co kaj tiam premas la Tab ŝlosilo dufoje sugestas fari kaj config. Aldonante m<tab> kompletigas git commit aŭtomate.
Tio funkcias ankaŭ kun ebloj, kiu estas probable pli utila. Ekzemple, se vi uzas la git log komando kaj ne povas memori unu el la ebloj, vi povas ektajpu ĝi kaj premu Tab vidi kio egalas:
 $ git log --s<tab> --shortstat --since= --src-prefix= --stat --summary 
Tio estas sufiĉe bela truko kaj savi vin iu tempo kaj dokumentado legado.

git alias

Git ne konkludi vian komandon se vi tajpas ĝin parte. Se vi ne volas tajpi la tutan tekston de ĉiu de la Git komandojn, vi povas facile agordi alias por ĉiu komando uzante git config . Jen kelkaj ekzemploj vi eble volos starigi:
 $ git config --global alias.co checkout $ git config --global alias.br branch $ git config --global alias.ci commit $ git config --global alias.st status 
Tiu signifas ke, ekzemple, anstataŭ tajpi git commit , vi nur bezonas tajpi git ci . Kiel vi iras pri uzado Git, vi probable uzas aliajn komandojn ofte tiel; en tiu kazo, ne hezitu krei novan kaŝnomoj.
Tiu tekniko povas ankaŭ esti tre utila en kreado komandoj ke vi pensas devus ekzisti. Ekzemple, por korekti la usabilidad problemon vi renkontis kun unstaging dosiero, vi povas aldoni vian propran unstage alias al Git:
 $ git config --global alias.unstage 'reset HEAD --' 
Tio igas la sekvajn du komandojn ekvivalentaj:
 $ git unstage fileA $ git reset HEAD fileA 
Tio ŝajnas iom pli klara. Estas ankaŭ komuna por aldoni last komando, tiel:
 $ git config --global alias.last 'log -1 HEAD' 
Tiel, vi povas vidi la lastan fari facile:
 $ git last commit 66938dae3329c7aebe598c2246a8e6af90d04646 Author: Josh Goebel <dreamer3@example.com> Date: Tue Aug 26 19:48:51 2008 +0800 test for current head Signed-off-by: Scott Chacon <schacon@example.com> 
Kiel vi povas diri, Git simple anstataŭas la nova komando kun kiom vi alias al. Tamen, eble vi volas kuri ekstera komando, anstataŭ Git subcommand. En tiu kazo, vi komencas la komandon kun ! Karaktero. Tio estas utila se vi skribas viajn proprajn ilojn kiuj laboras kun Git-deponejo. Ni povas pruvi per aliasing git visual kuri gitk :
 $ git config --global alias.visual '!gitk' 

2.6 Bazoj de Git - Kiel uzi tagging

2.6 Bazoj de Git - Kiel uzi tagging

tagging

Kiel plej VCSs, Git havas la kapablon marki specifajn punktojn en la historio kiel esti gravaj. Ĝenerale, homoj uzas tiu funcionalidad marki liberigo punktoj ( v1.0 , kaj tiel plu). En tiu ĉi parto vi lernos kiel listo la disponeblaj etikedoj, kiel krei novajn etikedoj, kaj kion la malsamaj tipoj de etikedoj estas.

Listing Via Etikedoj

Listigante la disponeblaj etikedoj en Git estas simpla. Simple tajpu git tag :
 $ git tag v0.1 v1.3 
Tiu komando montras la etikedojn en alfabeta ordo; la ordo en kiu aperas ne havas veran gravecon.
Vi povas ankaŭ serĉi etikedoj kun aparta ŝablono. La Git fonto repo, ekzemple, enhavas pli ol 240 etikedoj. Se vi estas nur interesita en rigardante la 1.4.2 serio, vi povas kuri ĉi:
 $ git tag -l 'v1.4.2.*' v1.4.2.1 v1.4.2.2 v1.4.2.3 v1.4.2.4 

kreado Etikedoj

Git uzas du ĉefaj tipoj de etikedoj: malpeza kaj komentita. Malpeza etikedo aspektas kiel branĉo kiu ne ŝanĝas - ĝi estas nur montrilo al specifa fari. Annotated etikedoj tamen estas stokitaj kiel plena objektoj en la Git datumbazo. Ili checksummed; enhavas la tagger nomo, retpoŝto kaj dato; havas tagging mesaĝo; kaj povas esti subskribita kaj konfirmita kun GNU Privacy Guard (GPG). Ĝi ĝenerale rekomendas ke vi kreas annotated etikedoj tiel vi povas havi ĉiu ĉi tiu informo; sed se vi volas portempa etikedo aŭ ial ne volas konservi la aliajn informojn, malpeza etikedoj estas disponeblaj ankaŭ.

annotated Etikedoj

Kreante annotated etikedo en Git estas simpla. La plej facila maniero estas specifi -a kiam vi kuros la tag komando:
 $ git tag -a v1.4 -m 'my version 1.4' $ git tag v0.1 v1.3 v1.4 
La -m specifas tagging mesaĝo, kiu estas stokita kun la etikedo. Se vi ne specifas mesaĝon por acotado etikedo, Git ĵetas via redaktoro tiel vi povas entajpi ĝin en.
Vi povas vidi la etikedo datumoj kune kun la commit kiu etikeditaj uzante la git show komando:
 $ git show v1.4 tag v1.4 Tagger: Scott Chacon <schacon@gee-mail.com> Date: Mon Feb 9 14:45:11 2009 -0800 my version 1.4 commit 15027957951b64cf874c3557a0f3547bd83b3ff6 Merge: 4a447f7... a6b4c97... Author: Scott Chacon <schacon@gee-mail.com> Date: Sun Feb 8 19:02:46 2009 -0800 Merge branch 'experiment' 
Kiu montras la tagger informo, la dato la commit estis etikeditaj kaj komentario mesaĝon antaŭ montri la commit informo.

subskribita Etikedoj

Vi povas ankaŭ subskribi vian etikedoj kun GPG, supozante vi havas privatan ŝlosilon. Ĉiuj vi devas fari estas uzi -s anstataŭ -a :
 $ git tag -s v1.5 -m 'my signed 1.5 tag' You need a passphrase to unlock the secret key for user: "Scott Chacon <schacon@gee-mail.com>" 1024-bit DSA key, ID F721C45A, created 2009-02-09 
Se vi kuras git show sur tiu etikedo, vi povas vidi vian GPG signature alkroĉita al ĝi:
 $ git show v1.5 tag v1.5 Tagger: Scott Chacon <schacon@gee-mail.com> Date: Mon Feb 9 15:22:20 2009 -0800 my signed 1.5 tag -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.8 (Darwin) iEYEABECAAYFAkmQurIACgkQON3DxfchxFr5cACeIMN+ZxLKggJQf0QYiQBwgySN Ki0An2JeAVUCAiJ7Ox6ZEtK+NvZAj82/ =WryJ -----END PGP SIGNATURE----- commit 15027957951b64cf874c3557a0f3547bd83b3ff6 Merge: 4a447f7... a6b4c97... Author: Scott Chacon <schacon@gee-mail.com> Date: Sun Feb 8 19:02:46 2009 -0800 Merge branch 'experiment' 
Iom poste, vi lernos kiel kontroli subskribis etikedoj.

malpeza Etikedoj

Alia maniero etikedi interna estas kun malpeza etikedo. Tio estas esence la commit checksum stokitaj en dosiero - neniu alia informo restos. Krei malpeza etikedo, ne provizi la -a , -s , aŭ -m eblo:
 $ git tag v1.4-lw $ git tag v0.1 v1.3 v1.4 v1.4-lw v1.5 
Tiu tempo, se vi kuros git show sur la etikedo, vi ne vidas la ekstra etikedo informo. La komando nur montras la commit:
 $ git show v1.4-lw commit 15027957951b64cf874c3557a0f3547bd83b3ff6 Merge: 4a447f7... a6b4c97... Author: Scott Chacon <schacon@gee-mail.com> Date: Sun Feb 8 19:02:46 2009 -0800 Merge branch 'experiment' 

kontrolante Etikedoj

Kontroli subskribita etikedo, vi uzas git tag -v [tag-name] . Tiu komando uzas GPG kontroli la subskribon. Vi bezonas la firmante la publika ŝlosilo en via Keyring por ĉi labori konvene:
 $ git tag -v v1.4.2.1 object 883653babd8ee7ea23e6a5c392bb739348b1eb61 type commit tag v1.4.2.1 tagger Junio C Hamano <junkio@cox.net> 1158138501 -0700 GIT 1.4.2.1 Minor fixes since 1.4.2, including git-mv and git-http with alternates. gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A gpg: Good signature from "Junio C Hamano <junkio@cox.net>" gpg: aka "[jpeg image of size 1513]" Primary key fingerprint: 3565 2A26 2040 E066 C9A7 4A7D C0C6 D9A4 F311 9B9A 
Se vi ne havas la firmante la publika ŝlosilo, vi ricevas ion kiel ĉi anstataŭe:
 gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A gpg: Can't check signature: public key not found error: could not verify the tag 'v1.4.2.1' 

tagging Poste

Vi ankaŭ povas marki interna post vi kopiis preter ili. Supozu via commit historio aspektas jene:
 $ git log --pretty=oneline 15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment' a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support 0d52aaab4479697da7686c15f77a3d64d9165190 one more thing 6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment' 0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function 4682c3261057305bdd616e23b64b0857d832627b added a todo file 166ae0c4d3f420721acbb115cc33848dfcc2121a started write support 9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile 964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo 8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme 
Nun, supozu ke vi forgesis etikedi la projekto ĉe v1.2 , kiu estis ĉe la "ĝisdatigita rakefile" commit. Vi povas aldoni ĝin post la fakto. Al etikedo kiu devigas, vi specifas la commit checksum (aŭ parto de ĝi) fine de la komando:
 $ git tag -a v1.2 -m 'version 1.2' 9fceb02 
Vi povas vidi ke vi etikedis la commit:
 $ git tag v0.1 v1.2 v1.3 v1.4 v1.4-lw v1.5 $ git show v1.2 tag v1.2 Tagger: Scott Chacon <schacon@gee-mail.com> Date: Mon Feb 9 15:32:16 2009 -0800 version 1.2 commit 9fceb02d0ae598e95dc970b74767f19372d61af8 Author: Magnus Chacon <mchacon@gee-mail.com> Date: Sun Apr 27 20:43:35 2008 -0700 updated rakefile ... 

sharing Etikedoj

Defaŭlte, la git push komando ne translokigi etikedoj al foraj serviloj. Vi devos eksplicite puŝi etikedoj al dividis servilo post vi kreis ilin. Tiu procezo estas ĝuste kiel dividanta foraj branĉoj - vi povas kuri git push origin [tagname] .
 $ git push origin v1.5 Counting objects: 50, done. Compressing objects: 100% (38/38), done. Writing objects: 100% (44/44), 4.56 KiB, done. Total 44 (delta 18), reused 8 (delta 1) To git@github.com:schacon/simplegit.git * [new tag] v1.5 -> v1.5 
Se vi havas multajn etikedoj ke vi volas puŝi supren tuj, vi povas uzi ankaŭ la --tags eblo la git push komando. Ĉi kopios ĉiujn viajn etikedojn por la fora servilo, kiuj ne jam ekzistas.
 $ git push origin --tags Counting objects: 50, done. Compressing objects: 100% (38/38), done. Writing objects: 100% (44/44), 4.56 KiB, done. Total 44 (delta 18), reused 8 (delta 1) To git@github.com:schacon/simplegit.git * [new tag] v0.1 -> v0.1 * [new tag] v1.2 -> v1.2 * [new tag] v1.4 -> v1.4 * [new tag] v1.4-lw -> v1.4-lw * [new tag] v1.5 -> v1.5 
Nun, kiam iu alia klonas aŭ tiras el via deponejo, ili ricevos vian tutan etikedoj ankaŭ.

2.5 Bazoj de Git - Laborante kun Remotes

2.5 Bazoj de Git - Laborante kun Remotes

Por povi kunlabori en ajna Git projekto, vi devas scii kiel administri vian fora deponejoj. Fora deponejoj estas versioj de via projekto kiu estas loĝigitaj en Interreto aŭ reto ie. Vi povas havi plurajn el ili, ĉiu el kiu ĝenerale estas aŭ nur legado aŭ legado / skribo por vi. Kunlabori kun aliaj implikas administri tiujn fora deponejoj kaj puŝante kaj tirante datumojn al kaj de ili, kiam vi bezonas kunhavigi laboro. Administranta fora deponejoj inkludas scii aldoni fora deponejoj, forigi Remotes ke ne plu estas valida, administri diversaj foraj branĉoj kaj difini ilin kiel estanta spurita aŭ ne, kaj pli. En tiu sekcio, ni kovri tiujn fora-administrado kapabloj.

Montrante Via Remotes

Vidi kiun foraj serviloj vi agordis, vi povas kuri la git remote komando. Ĝi listigas la shortnames de ĉiu fora tenilo vi specifitaj. Se vi klonita via deponejo, vi devus almenaŭ vidi origino - kiu estas la defaŭlta nomo Git donas la servilo vi klonita de:
 $ git clone git://github.com/schacon/ticgit.git Initialized empty Git repository in /private/tmp/ticgit/.git/ remote: Counting objects: 595, done. remote: Compressing objects: 100% (269/269), done. remote: Total 595 (delta 255), reused 589 (delta 253) Receiving objects: 100% (595/595), 73.31 KiB | 1 KiB/s, done. Resolving deltas: 100% (255/255), done. $ cd ticgit $ git remote origin 
Vi povas ankaŭ specifi -v , kiu montras vin la URL kiu Git estas stokita por la shortname esti vastigita al:
 $ git remote -v origin git://github.com/schacon/ticgit.git (fetch) origin git://github.com/schacon/ticgit.git (push) 
Se vi havas pli ol unu fora, la komando listigas ĉiujn. Ekzemple, mia Grit enciklopedio aspektas io tiamaniere.
 $ cd grit $ git remote -v bakkdoor git://github.com/bakkdoor/grit.git cho45 git://github.com/cho45/grit.git defunkt git://github.com/defunkt/grit.git koke git://github.com/koke/grit.git origin git@github.com:mojombo/grit.git 
Do oni povas tiri kontribuoj de iuj da tiuj uzantoj bela facile. Sed rimarkas ke nur la origino fora estas SSH URL, do ĝi estas la nura unu mi povas puŝi al (ni kovras kial tiu estas en Ĉapitro 4).

Aldonante Izolita Deponejoj

Mi menciis kaj donitaj iuj manifestacioj de aldoni fora deponejoj en antaŭaj alineoj, sed jen kiel fari ĝin eksplicite. Por aldoni novan fora Git-deponejo kiel shortname vi povas referenci facile, kuri git remote add [shortname] [url] :
 $ git remote origin $ git remote add pb git://github.com/paulboone/ticgit.git $ git remote -v origin git://github.com/schacon/ticgit.git pb git://github.com/paulboone/ticgit.git 
Nun vi povas uzi la kordo pb la komandlinio anstataŭ la tutaj URL. Ekzemple, se vi volas venigi ĉiujn informojn kiuj Paul havas sed ke vi ankoraŭ ne havas en via deponejo, vi povas kuri git fetch pb :
 $ git fetch pb remote: Counting objects: 58, done. remote: Compressing objects: 100% (41/41), done. remote: Total 44 (delta 24), reused 1 (delta 0) Unpacking objects: 100% (44/44), done. From git://github.com/paulboone/ticgit * [new branch] master -> pb/master * [new branch] ticgit -> pb/ticgit 
Paŭlo mastro branĉo estas atingebla loke kiel pb/master - vi povas kunfandi ĝin en unu el viaj branĉoj, aŭ vi povas kontroli loka branĉo ĉe tiu punkto se vi volas inspekti ĝin.

Ricevado kaj Pulling de Via Remotes

Kiel vi ĵus vidis, ricevi datumojn el via fora projektoj, vi povas kuri:
 $ git fetch [remote-name] 
La komando eliras al tiu fora projekto kaj tiras malsupren ĉiujn datumojn de tiu fora projekto kiu ne havas ankoraŭ. Post kiam vi faros tion, vi devas havi referencojn al ĉiuj branĉoj de tiu fora, kiun vi povas kunfandi en aŭ inspekti iam. (Ni transiru kion brancxoj estas kaj kiel uzi ilin en multe pli detale en ĉapitro 3.)
Se vi kloni deponejo, la komando aŭtomate aldonas ke foraj deponejo sub la nomo origino. Do, git fetch origin akiras neniun novan verkon kiu estis puŝita al tiu servilo ekde vi klonita (aŭ lasta prenis de) i. Estas grave noti, ke la fetch komando tiras la datumojn al via loka deponejo - ĝi ne aŭtomate kunfandi ŝin kun iu el via laboro aŭ redakti kion vi aktuale prilaboras. Vi devas mem kunfandi ĝin permane en via laboro kiam vi estas preta.
Se vi havas branĉon instalita spuri fora branĉo (vidu la sekvan sekcion kaj Ĉapitro 3 por pli informo), vi povas uzi la git pull komando aŭtomate fetch kaj tiam kunfalas fora branĉo en vian nuna branĉo. Tio povas esti facila aŭ pli komforta laborfluo por vi; kaj defaŭlte, la git clone komando aŭtomate instalas via loka mastro branĉo spuri la fora mastro branĉo sur la servilo vi klonita de (supozante la fora havas mastron branĉo). Kurante git pull ĝenerale akiras datumojn de la servilo vi originale klonita de kaj aŭtomate provas kunfandi ĝin en la kodo kiun vi aktuale prilaboras.

Puŝanta al Via Remotes

Kiam vi havas vian projekton ĉe punkto kiun vi volas dividi, vi devas puŝi ŝin kontraŭflue. La komando por tio estas simpla: git push [remote-name] [branch-name] . Se vi volas puŝi via mastro branĉo al via origin servilo (denove, klonado ĝenerale starigas ambaŭ el tiuj nomoj por vi aŭtomate), tiam vi povas kuri ĉi puŝi vian laboron reen ĝis la servilo:
 $ git push origin master 
Ĉi komando funkcias nur se vi klonita de servilo al kiu vi havas skribpermeson kaj se neniu puŝis dume. Se vi kaj alia clon samtempe kaj ili puŝi kontraŭflue kaj tiam vi puŝi kontraŭflue, vian puŝo estos prave esti rifuzita. Vi devos disbatos ilian laboron unua kaj korpigi ĝin en via antaux vi esti permesita puŝi. Vidu ĉapitron 3 por pli detala informo pri kiel puŝi al foraj serviloj.

Inspekti Izolita

Se vi volas vidi pli da informoj pri aparta fora, vi povas uzi la git remote show [remote-name] komando. Se vi kuri ĉi komando kun aparta shortname, kiel origin , vi ricevas ion kiel jene:
 $ git remote show origin * remote origin URL: git://github.com/schacon/ticgit.git Remote branch merged with 'git pull' while on branch master master Tracked remote branches master ticgit 
Ĝi listigas la URL por la malproksima deponejo krom la sekvado branĉo informo. La komando helpfully informas vin ke se vi estas sur la mastro branĉo kaj vi kuros git pull , ĝi aŭtomate kunfandi en la mastro branĉo sur la fora post ĝi akiras ĉiuj la fora referencoj. Ĝi ankaŭ listigas ĉiujn fora referencoj ĝi tiris malsupren.
Tio estas simpla ekzemplo vi supozeble trovos. Kiam vi uzas Git pli peze tamen vi vidu multe pli informo de git remote show :
 $ git remote show origin * remote origin URL: git@github.com:defunkt/github.git Remote branch merged with 'git pull' while on branch issues issues Remote branch merged with 'git pull' while on branch master master New remote branches (next fetch will store in remotes/origin) caching Stale tracking branches (use 'git remote prune') libwalker walker2 Tracked remote branches acl apiv2 dashboard2 issues master postgres Local branch pushed with 'git push' master:master 
Admono spektakloj kiujn branĉo aŭtomate puŝis kiam vi kuros git push sur certaj branĉoj. Ĝi ankaŭ montras al vi kiujn foraj branĉoj sur la servilo vi ankoraŭ ne havas, kion foraj branĉoj vi havas kiuj estis forigitaj de la servilo, kaj multoblaj branĉoj kiuj estas aŭtomate kunfanditaj kiam vi kuros git pull .

Forigado kaj Renomado Remotes

Se vi volas renomi referenco, en pli novaj versioj de Git vi povas kuri git remote rename ŝanĝi fora la shortname. Ekzemple, se vi volas renomi pb al paul , vi povas fari tion kun git remote rename :
 $ git remote rename pb paul $ git remote origin paul 
Menciindas ke tiu ŝanĝas vian fora branĉo nomojn ankaŭ. Kio kutimis esti referencataj en pb/master estas nun ĉe paul/master .
Se vi volas forigi referenco ial - vi kopiis la servilo aŭ jam ne uzas apartan spegulo, aŭ eble kontribuanto ne kontribuante plu - vi povas uzi git remote rm :
 $ git remote rm paul $ git remote origin