El canvi de base és un procés per tornar a aplicar commits a sobre d'un altre viatge base. S'utilitza per aplicar una seqüència de commits de diferents branques en un commit final. És una alternativa a l'ordre git merge. És un procés lineal de fusió.
A Git, el terme rebase es coneix com el procés de moure o combinar una seqüència de commits a un nou commit base. El canvi de base és molt beneficiós i va visualitzar el procés en l'entorn d'un flux de treball de ramificació de funcions.
És bo canviar la base de la vostra branca abans de fusionar-la.
En general, és una alternativa a l'ordre git merge. La fusió sempre és un registre que canvia cap endavant. En comparació, rebase és una eina convincent de reescriptura de la història a git. Fusiona els diferents commits un per un.
Suposem que heu fet tres commits a la vostra branca mestra i tres a la vostra altra branca anomenada prova. Si fusioneu això, fusionarà totes les confirmacions en un temps. Però si el rebaseu, es fusionarà de manera lineal. Considereu la imatge següent:
La imatge de dalt descriu com funciona git rebase. Els tres commits de la branca mestra es fusionen linealment amb els commits de la branca de prova.
La fusió és la forma més senzilla d'integrar les branques. Realitza una fusió a tres direccions entre les dues últimes confirmacions de branca.
Com canviar la base
Quan heu fet algunes confirmacions en una branca de funcions (branca de prova) i algunes a la branca mestra. Podeu canviar la base de qualsevol d'aquestes branques. Utilitzeu l'ordre git log per fer un seguiment dels canvis (historial de confirmació). Fes la compra a la branca desitjada que vulguis canviar de base. Ara executeu l'ordre rebase de la següent manera:
Sintaxi:
$git rebase
Si hi ha alguns conflictes a la branca, resol-los i realitza les ordres següents per continuar amb els canvis:
$ git status
S'utilitza per comprovar l'estat,
$git rebase --continue
L'ordre anterior s'utilitza per continuar amb els canvis que heu fet. Si voleu ometre el canvi, podeu ometre el següent:
quantes setmanes al mes
$ git rebase --skip
Quan s'hagi completat el rebasament. Empènyer el repositori a l'origen. Considereu l'exemple següent per entendre l'ordre git merge.
Suposem que tens una branca per dir prova 2 en què esteu treballant. Ara esteu a la branca test2 i heu fet alguns canvis al fitxer del projecte noufitxer1.txt .
Afegiu aquest fitxer al repositori:
$ git add newfile1.txt
Ara, compromeu els canvis. Utilitzeu l'ordre següent:
$ git commit -m 'new commit for test2 branch.'
La sortida es veurà així:
sistema de fitxers a linux
[test2 a835504] new commitfor test2 branch 1 file changed, 1 insertion(+)
Canvia la branca a mestre:
$ git checkout master
Sortida:
Switched to branch 'master.' Your branch is up to date with 'origin/master.'
Ara ets a la branca mestra. He afegit els canvis al meu fitxer, diu nou fitxer.txt . L'ordre següent s'utilitza per afegir el fitxer al repositori.
$ git add newfile.txt
Ara envieu el fitxer per als canvis:
$ git commit -m ' new commit made on the master branch.'
Sortida:
[master 7fe5e7a] new commit made on master 1 file changed, 1 insertion(+) HiMaNshU@HiMaNshU-PC MINGW64 ~/Desktop/GitExample2 (master)
Per comprovar l'historial de registre, executeu l'ordre següent.
$ git log --oneline
Sortida:
Com podem veure a l'historial de registre, hi ha una nova confirmació a la branca mestra. Si vull canviar la base de la meva branca test2, què he de fer? Vegeu l'escenari de la branca de rebase següent:
Rebase Branch
Si tenim molts commits de diferents branques i volem combinar-los en un. Per fer-ho, tenim dues opcions: podem combinar-lo o canviar-lo de base. És bo canviar la base de la seva branca.
A partir de l'exemple anterior, ens hem compromès amb la branca mestra i volem canviar-la de base a la branca test2. Vegem les ordres següents:
$ git checkout test2
Aquesta ordre us activarà la branca test2 des del mestre.
Sortida:
Switched to branch 'test2.'
Ara ets a la branca de test2. Per tant, podeu canviar la base de la branca test2 amb la branca mestra. Vegeu l'ordre següent:
$ git rebase master
Aquesta ordre canviarà la base de la branca test2 i es mostrarà com Aplicació: nova confirmació a la branca test2 . Considereu la sortida següent:
Sortida:
Git Interactive Rebase
Git facilita amb Interactive Rebase; és una eina potent que permet diverses operacions com editar, reescriure, reordenar, i més sobre commits existents. Interactive Rebase només es pot operar a la sucursal que es troba actualment. Per tant, configureu la vostra sucursal HEAD local a la barra lateral.
La rebase interactiva de Git es pot invocar amb l'ordre rebase, només cal que escriviu -i juntament amb l'ordre rebase. Aquí ' i ' significa interactiu. La sintaxi d'aquesta comanda es mostra a continuació:
Sintaxi:
imatges de reducció
$ git rebase -i
Enumerarà totes les opcions interactives disponibles.
Sortida:
Després de la sortida donada, s'obrirà un editor amb les opcions disponibles. Considereu la sortida següent:
Sortida:
Quan realitzem l'ordre git interactive rebase, obrirà el vostre editor de text predeterminat amb la sortida anterior.
Les opcions que conté s'enumeren a continuació:
- Collir
- Reformulació
- Edita
- Carabasseta
- Arreglar
- Exec
- Trencar
- Tirar
- Etiqueta
- Restableix
- Fusionar
Les opcions anteriors realitzen les seves tasques específiques amb git-rebase. Entendrem breument cadascuna d'aquestes opcions.
Tria (-p):
Pick es troba aquí que s'inclou el compromís. L'ordre de les confirmacions depèn de l'ordre de les ordres de selecció durant la rebase. Si no voleu afegir una confirmació, heu de suprimir tota la línia.
Reformulació (-r):
La reformulació és bastant semblant a l'ordre de selecció. L'opció de reformulació va aturar el procés de rebase i ofereix l'oportunitat d'alterar el missatge de confirmació. No afecta cap canvi realitzat pel commit.
Edita(s):
L'opció d'edició permet modificar el commit. Els mitjans de modificació, els compromisos es poden afegir o canviar completament. També podem fer commits addicionals abans de l'ordre rebase continue. Ens permet dividir un commit gran en el commit més petit; a més, podem eliminar els canvis erronis fets en una confirmació.
Esquaix (-s):
L'opció d'esquaix us permet combinar dos o més commits en un sol commit. També ens permet escriure un missatge de confirmació nou per descriure els canvis.
Correcció (-f):
És bastant semblant a l'ordre d'esquaix. Va descartar el missatge del compromís de fusionar-se. El missatge de confirmació anterior s'utilitza per descriure els dos canvis.
Exec (-x):
L'opció exec us permet executar ordres arbitràries d'intèrpret d'ordres contra una confirmació.
Pausa (-b):
L'opció de ruptura atura la rebase a la posició justa. Continuarà canviant de base més tard amb ' git rebase --continue ' comandament.
Gota (-d):
L'opció drop s'utilitza per eliminar el commit.
Etiqueta (-l):
L'opció d'etiqueta s'utilitza per marcar la posició actual del cap amb un nom.
Restableix (-t):
L'opció de restabliment s'utilitza per restablir el capçal a una etiqueta.
exemple de subcadena java
GitMerge vs. Rebase
És una pregunta desconcertant més comuna per a l'usuari de git que quan s'ha d'utilitzar l'ordre de combinació i quan s'ha d'utilitzar rebase. Les dues ordres són similars, i totes dues s'utilitzen per combinar les confirmacions fetes per les diferents branques d'un dipòsit.
No es recomana canviar la base en una branca compartida perquè el procés de rebase crearà repositoris inconsistents. Per als individus, la rebase pot ser més útil que la fusió. Si voleu veure l'historial complet, hauríeu d'utilitzar la combinació. Merge fa un seguiment de tot l'historial de commits, mentre que rebase en reescriu un de nou.
Les ordres de rebase de Git es diuen com una alternativa de git merge. Tanmateix, tenen algunes diferències clau:
Git Merge | Git Rebase |
---|---|
La fusió crea un compromís final en la fusió. | Git rebase no crea cap commit en rebasar. |
Combina tots els commits com un sol commit. | Crea una pista lineal de commits. |
Crea una història gràfica que pot ser una mica complexa d'entendre. | Crea una història lineal que es pot entendre fàcilment. |
És segur fusionar dues branques. | Git 'rebase' s'ocupa de l'operació severa. |
La fusió es pot realitzar tant en sucursals públiques com privades. | És una opció equivocada utilitzar el rebasament en sucursals públiques. |
La fusió integra el contingut de la branca de funcions amb la branca mestra. Per tant, la branca mestra es canvia i l'historial de la branca de característiques continua sent coherent. | El canvi de base de la branca mestra pot afectar la branca de la característica. |
La fusió preserva la història. | La rebase reescriu la història. |
Git merge presenta tots els conflictes alhora. | Git rebase presenta els conflictes un per un. |