logo

Git Rebase

Rebazarea este un proces de reaplicare a comiterilor pe lângă o altă călătorie de bază. Este folosit pentru a aplica o secvență de comitere din ramuri distincte într-un commit final. Este o alternativă la comanda git merge. Este un proces liniar de fuziune.

În Git, termenul rebase este denumit procesul de mutare sau combinare a unei secvențe de comiteri la un nou commit de bază. Rebazarea este foarte benefică și a vizualizat procesul în mediul unui flux de lucru de ramificare a caracteristicilor.

Este bine să vă rebazați ramura înainte de a o îmbina.

Git Rebase

În general, este o alternativă la comanda git merge. Merge este întotdeauna o înregistrare care se schimbă înainte. Comparativ, rebase este un instrument convingător de rescriere a istoriei în git. Îmbină diferitele comite unul câte unul.

Să presupunem că ai făcut trei comitări în ramura ta principală și trei în cealaltă ramură numită test. Dacă îmbinați acest lucru, atunci va îmbina toate comiterile într-un timp. Dar dacă o rebazați, atunci va fi îmbinată într-o manieră liniară. Luați în considerare imaginea de mai jos:

Git Rebase

Imaginea de mai sus descrie cum funcționează git rebase. Cele trei comite-uri ale ramului principal sunt îmbinate liniar cu comite-urile ramului de testare.

Fuzionarea este cea mai simplă modalitate de a integra ramurile. Efectuează o îmbinare în trei căi între cele mai recente două comiteri de ramuri.

Cum să rebazezi

Când ați făcut unele comite pe o ramură caracteristică (ramură de testare) și unele în ramura principală. Puteți rebaza oricare dintre aceste ramuri. Utilizați comanda git log pentru a urmări modificările (istoricul comiterii). Căutați la filiala dorită pe care doriți să o rebazați. Acum executați comanda rebase după cum urmează:

Sintaxă:

 $git rebase 

Dacă există unele conflicte în ramură, rezolvați-le și efectuați comenzile de mai jos pentru a continua modificările:

 $ git status 

Este folosit pentru a verifica starea,

 $git rebase --continue 

Comanda de mai sus este folosită pentru a continua cu modificările pe care le-ați făcut. Dacă doriți să săriți peste modificare, puteți săriți după cum urmează:

tăiere șiruri java
 $ git rebase --skip 

Când rebazarea este finalizată. Împingeți depozitul la origine. Luați în considerare exemplul de mai jos pentru a înțelege comanda git merge.

Să presupunem că aveți o ramură de spus test2 la care lucrezi. Acum sunteți în ramura test2 și ați făcut câteva modificări în fișierul proiectului newfile1.txt .

Adăugați acest fișier în depozit:

 $ git add newfile1.txt 

Acum, comite modificările. Utilizați comanda de mai jos:

 $ git commit -m 'new commit for test2 branch.' 

Ieșirea va arăta astfel:

 [test2 a835504] new commitfor test2 branch 1 file changed, 1 insertion(+) 

Comutați ramura în master:

 $ git checkout master 

Ieșire:

 Switched to branch 'master.' Your branch is up to date with 'origin/master.' 

Acum ești pe ramura principală. Am adăugat modificările în fișierul meu, spune fişier nou.txt . Comanda de mai jos este folosită pentru a adăuga fișierul în depozit.

comanda Linux Run
 $ git add newfile.txt 

Acum comite fișierul pentru modificări:

 $ git commit -m ' new commit made on the master branch.' 

Ieșire:

 [master 7fe5e7a] new commit made on master 1 file changed, 1 insertion(+) HiMaNshU@HiMaNshU-PC MINGW64 ~/Desktop/GitExample2 (master) 

Pentru a verifica istoricul jurnalului, executați comanda de mai jos.

 $ git log --oneline 

Ieșire:

Git Rebase

După cum putem vedea în istoricul jurnalului, există un nou commit în ramura master. Dacă vreau să-mi rebazez ramura test2, ce ar trebui să fac? Vedeți scenariul de ramură de rebazare de mai jos:

Rebase Branch

Dacă avem multe comite din ramuri distincte și vrem să le îmbinam într-una singură. Pentru a face acest lucru, avem două opțiuni, fie să îl îmbinam, fie să îl rebazăm. Este bine să vă refaceți ramura.

Din exemplul de mai sus, ne-am angajat în ramura principală și dorim să o rebazăm pe ramura test2. Să vedem comenzile de mai jos:

 $ git checkout test2 

Această comandă vă va comuta pe ramura test2 de la master.

Ieșire:

 Switched to branch 'test2.' 

Acum sunteți în ramura test2. Prin urmare, puteți rebaza ramura test2 cu ramura principală. Vezi comanda de mai jos:

 $ git rebase master 

Această comandă va rebaza ramura test2 și va afișa ca Aplicare: nou commit pe ramura test2 . Luați în considerare rezultatul de mai jos:

Ieșire:

Git Rebase

Git Interactive Rebase

Git facilitează cu Interactive Rebase; este un instrument puternic care permite diverse operațiuni precum edita, rescrie, reordonează, și mai multe despre comiterile existente. Rebase interactivă poate fi operată numai în filiala înregistrată în prezent. Prin urmare, setați filiala locală HEAD în bara laterală.

Rebase interactiv Git poate fi invocat cu comanda rebase, trebuie doar să tastați -i împreună cu comanda rebase. Aici ' i ' înseamnă interactiv. Sintaxa acestei comenzi este prezentată mai jos:

Sintaxă:

 $ git rebase -i 

Acesta va lista toate opțiunile interactive disponibile.

Ieșire:

Git Rebase

După rezultatul dat, se va deschide un editor cu opțiunile disponibile. Luați în considerare rezultatul de mai jos:

șir în java

Ieșire:

Git Rebase

Când executăm comanda git interactive rebase, se va deschide editorul de text implicit cu rezultatul de mai sus.

Opțiunile pe care le conține sunt enumerate mai jos:

  • Alege
  • Reformulare
  • Editați | ×
  • Suc de fructe
  • Repară
  • Exec
  • Pauză
  • cădere brusca
  • Eticheta
  • Resetați
  • Combina

Opțiunile de mai sus își îndeplinesc sarcinile specifice cu git-rebase. Să înțelegem pe scurt fiecare dintre aceste opțiuni.

Alegeți (-p):

Pick indică aici că commit-ul este inclus. Ordinea comenzilor depinde de ordinea comenzilor de alegere în timpul rebazei. Dacă nu doriți să adăugați un commit, trebuie să ștergeți întreaga linie.

Reformulare (-r):

Reformularea este destul de asemănătoare cu comanda de alegere. Opțiunea de reformulare a întrerupt procesul de rebazare și oferă șansa de a modifica mesajul de confirmare. Nu afectează nicio modificare făcută de commit.

Editare(e):

Opțiunea de editare permite modificarea comenzii. Mijloacele de modificare, commit-urile pot fi adăugate sau modificate în întregime. De asemenea, putem face comite suplimentare înainte de comanda rebase continue. Ne permite să împărțim un commit mare în commit mai mic; în plus, putem elimina modificările eronate făcute într-un commit.

Dovleac (-s):

Opțiunea squash vă permite să combinați două sau mai multe comiteri într-un singur comit. De asemenea, ne permite să scriem un nou mesaj de confirmare pentru a descrie modificările.

Remediere (-f):

Este destul de asemănător cu comanda squash. A renunțat la mesajul commit-ului care urmează să fie fuzionat. Mesajul de comitere mai vechi este folosit pentru a descrie ambele modificări.

Exec (-x):

Opțiunea exec vă permite să rulați comenzi shell arbitrare împotriva unui commit.

Pauza (-b):

Opțiunea de pauză oprește rebazarea la poziția exactă. Va continua să se rebazeze mai târziu cu „ git rebase --continuare 'comandă.

Drop (-d):

Opțiunea drop este folosită pentru a elimina commit-ul.

Etichetă (-l):

Opțiunea de etichetă este utilizată pentru a marca poziția curentă a capului cu un nume.

Resetare (-t):

Opțiunea de resetare este folosită pentru a reseta capul la o etichetă.

negație matematică discretă

GitMerge vs. Rebase

Este cea mai obișnuită întrebare nedumerită pentru utilizatorul git că când să folosești comanda merge și când să folosești rebase. Ambele comenzi sunt similare și ambele sunt folosite pentru a fuziona commit-urile făcute de diferitele ramuri ale unui depozit.

Rebazarea nu este recomandată într-o ramură partajată, deoarece procesul de rebazare va crea depozite inconsecvente. Pentru indivizi, rebazarea poate fi mai utilă decât fuzionarea. Dacă doriți să vedeți istoricul complet, ar trebui să utilizați îmbinarea. Merge urmărește întregul istoric al comiterilor, în timp ce rebase rescrie unul nou.

Comenzile Git rebase spuse ca o alternativă la git merge. Cu toate acestea, au câteva diferențe cheie:

Git Merge Git Rebase
Fuzionarea creează un commit final la fuziune. Git rebase nu creează niciun commit la rebazare.
Îmbină toate comiterile ca un singur comit. Acesta creează o urmărire liniară a comiterilor.
Creează o istorie grafică care ar putea fi puțin complex de înțeles. Creează o istorie liniară care poate fi ușor de înțeles.
Este sigur să fuzionați două ramuri. Git 'rebase' se ocupă de operația severă.
Fuziunea poate fi efectuată atât pe sucursale publice, cât și pe cele private. Este o alegere greșită să folosești rebazarea pe ramuri publice.
Fuzionarea integrează conținutul ramurii caracteristice cu ramura principală. Deci, ramura principală este schimbată, iar istoricul ramurilor caracteristice rămâne coerență. Rebazarea ramurii master poate afecta ramura caracteristică.
Fuziunea păstrează istoria. Rebazarea rescrie istoria.
Git merge prezintă toate conflictele simultan. Git rebase prezintă conflictele unul câte unul.