- Git rebazare
- Inainte de rebasing
- Regulate rebazare
- Interactive rebazare
- Forța de apăsare
- Fuziona conflictelor
Acest ghid vă ajută să vă pentru a obține a început cu rebasing, forța de împingere, și fixingmerge conflicte la nivel local.înainte de a vă scufunda în acest document, asigurați-vă că sunteți familiarizat cu utilizareagit prin linia de comandă.
Git rebazare
Rebasing este o operație foarte frecvente inGit., Există următoarele opțiuni de rebase:
- rebase regulat.
- rebase interactiv.
Înainte de rebasing
git rebase
rescrie comite istorie. Poate fi dăunător să o facețiramuri comune. Poate provoca conflicte complexe și greu de rezolvat. În aceste cazuri,în loc să rebasezi ramura împotriva ramurii implicite, ia în considerare să o tragi în schimb (git pull origin master
). Are un efect similar fără a compromite activitatea contribuitorilor dvs.,e mai sigur să-ți susțină ramură înainte rebasing să asigurați-vă că nu loseany modificări. De exemplu, ia în considerare o caracteristică branchcalled my-feature-branch
:
-
Deschide-ti caracteristică ramură în terminal:
git checkout my-feature-branch
-
Checkout o nouă ramură de la ea:
git checkout -b my-feature-branch-backup
-
Du-te înapoi la original ramură:
git checkout my-feature-branch
Acum puteți în condiții de siguranță rebazare ea., Dacă ceva nu merge bine, puteți recupera yourchanges prin resetarea my-feature-branch
împotriva my-feature-branch-backup
:
Rețineți că, dacă ați adăugat modificările my-feature-branch
după crearea de backup de ramură,le pierde atunci când resetare.
Regulate rebazare
Cu un regular rebazare puteți actualiza caracteristică ramură cu defaultbranch (sau orice altă ramură).Acesta este un pas important pentru strategiile de dezvoltare bazate pe Git., Ai canensure că modificările pe care le adăugați la codebase nu se rupe anyexisting modificări adăugat la țintă ramură după ce ați creat featurebranch.,
For example, to update your branch my-feature-branch
with master
:
-
Fetch the latest changes from
master
:git fetch origin master
-
Checkout your feature branch:
git checkout my-feature-branch
-
Rebase it against
master
:git rebase origin/master
-
Force-push to your branch.,
atunci Când rebazare:
- Git importurile toate comite prezentat
master
după themoment ați creat caracteristică ramură până în prezent. - Git pune comite o ai în funcție de ramură pe partea de sus de toate se angajează importate din
master
:
puteți înlocui master
cu orice altă ramură doriți să rebazare împotriva, de exemplu, release-10-3
., Puteți înlocui, de asemenea, origin
cu alte remoterepositories, de exemplu, upstream
. Pentru a verifica ce telecomenzi ați conectat la localrepository, puteți rula git remote -v
.
dacă există conflicte de îmbinare, Git vă solicită să remediațiînainte de a continua rebazarea.pentru a afla mai multe, verificați documentația Git privind strategiile de rebasing și rebasing.
rebase interactivă
puteți utiliza rebase interactivă pentru a modifica comiterile. De exemplu, să modifice o commitmessage, squash (alăturați-vă mai multe se angajează într-o singură), edita, sau deletecommits., Folosește o rebază pentru a schimba mesajele anterioare de comitere și pentru a organiza Istoricul comiterii sucursalei tale pentru a o păstra curată.notădacă doriți să păstrați curat istoricul de comitere a sucursalei implicite, nu trebuie să strângeți manual toate comiterile înainte de a fuziona fiecare cerere de îmbinare.Cu Squash și Merge, GitLab o face automat.
atunci Când vrei să schimbi ceva în ultimii comite, utilizarea interactiverebase prin trecerea pavilionul --interactive
(sau -i
) pentru rebazare comanda.,
De exemplu, dacă doriți să editați ultimele trei se angajează în ramură(HEAD~3
), a alerga:
git rebase -i HEAD~3
Git deschide ultimele trei se angajează în terminalul editor de text și describesall interactive rebazare opțiuni pe care le puteți folosi. Opțiunea implicită este pick
, care menține comiterea neschimbată. Înlocuiți cuvântul cheie pick
în funcție deoperațiunea pe care doriți să o efectuați în fiecare comitere. Pentru a face acest lucru, trebuie să editațiangajările din editorul de text al terminalului.,
de exemplu, dacă utilizați Vim ca editor de text în shell-ul iv id=”9d9ece47c7″al MacOS și doriți să striviți toate cele trei comiteri(alăturați-le într-unul singur):
- apăsați ion tastatura pentru a comuta la modul de editare al Vim.
- Navigați cu săgețile de la tastatură pentru a edita cel de-al doilea comis keywordfrom
pick
șisquash
(saus
). Faceți același lucru la a treia comitere.Prima comitere trebuie lăsată neschimbată (pick
) așa cum vrem să zdrobimal doilea și al treilea în primul., - apăsați Escape pentru a părăsi modul de editare.
- Type
:wq
to” write „(save) and”quit”. - Git ieșiri comite mesaj astfel încât să aveți o șansă de a edita:
- Toate liniile care încep cu
#
sunt ignorate și nu sunt incluse în commitmessage. Orice altceva este inclus. - pentru a-l lăsa așa cum este, tastați
:wq
. Pentru a edita mesajul de comitere: treceți la modul de editare, Editați mesajul de comitere și salvați-l așa cum tocmai ați făcut-o.,
- Toate liniile care încep cu
- dacă nu ți-ai împins comiterile către ramura de la distanță înainte de rebasing,Apasă modificările în mod normal. Dacă ați fi împins aceste comiteri deja,forța-împinge în loc.
rețineți că pașii pentru editare prin linia de comandă pot fi ușordiferite în funcție de sistemul de operare și de shell-ul pe care îl utilizați.
vedeți numeroase posibilități de anulare în Gitpentru o privire mai profundă în rebase interactiv.,când efectuați operații mai complexe, de exemplu, squash comite, resetați sauîntrebați sucursala dvs., trebuie să forțați o actualizare la sucursala la distanță.Aceste operațiuni implică rescrierea comite istorie de ramură.Pentru a forța o actualizare, trece steagul --force
sau -f
la push
comandă. Forexample:
git push --force origin my-feature-branch
forțarea unei actualizări nu este recomandată atunci când lucrați la sharedbranches.
alternativ, puteți trece steagul --force-with-lease
în schimb., Este mai sigur, deoarece nu suprascrie orice lucru pe remotebranch dacă mai comite au fost adăugate la distanță ramură de altcineva:
git push --force-with-lease origin my-feature-branch
Dacă ramura pe care doriți pentru a forța de apăsare este protejat,nu poate forță împinge la ea, dacă nu deprotejare primul. Apoi poțiforță-împinge și re-proteja.,
Fuziona conflictelor
Git se bazează pe compararea versiuni ale unui fileline-de-linie, ori de câte ori o linie schimbat în ramură coincide cu sameline schimbat în ținta de ramură (după momentul în care ți-ai creat caracteristică filiala de la ea), Gitidentifies aceste schimbări ca o îmbinare de conflict. Pentru ao rezolva, trebuie să alegețicare versiune a liniei pe care doriți să o păstrați.majoritatea conflictelor pot fi rezolvate prin interfața GitLab.pentru cazuri mai complexe, există diferite metode de rezolvare a acestora. Există, de asemenea, aplicații Git GUI care vă pot ajutavizualizarea diferențelor.,
Pentru a rezolva conflictele de la nivel local, puteți utiliza metoda următoare:
-
Deschideți terminal și de verificare caracteristica de ramură, de exemplu,
my-feature-branch
:git checkout my-feature-branch
-
Rebazare filiala împotriva țintei ramură atât de Gitprompts cu conflicte:
git rebase origin/master
- Deschide contradictorii fișier într-un editor de cod de preferințele dumneavoastră.
- căutați blocul de conflict:
- începe cu markerul:
<<<<<<< HEAD
., - mai jos, există conținutul cu modificările.
- marcatorul:
=======
indică sfârșitul modificărilor. - mai jos, există conținutul celor mai recente modificări în ramura țintă.
- markerul
>>>>>>>
indică sfârșitul conflictului.
- începe cu markerul:
- Editarea fișierului: alege ce versiune (înainte sau după
=======
) vrei sa pastram, și apoi ștergeți porțiune de conținut nu vrei în dosar. - ștergeți marcatorii.
- salvați fișierul.,
- repetați procesul dacă există alte fișiere conflictuale.
-
Etapa modificările:
git add .
-
Comite modificările:
git commit -m "Fix merge conflicts"
-
Continua rebasing:
git rebase --continue
cautionUp la acest punct, puteți rulagit rebase --abort
pentru a opri procesul.Git intrerupe rebazare și role înapoi la ramura de stat ai avut beforerunninggit rebase
.,După ce executațigit rebase --continue
rebase nu poate fi anulată. - forța-împinge la sucursala de la distanță.
Leave a Reply