Teknologian jakaminen

[Git Study Notes] Luku 4 git rebase rebase -toiminto ja siihen liittyvät esimerkit (Osa 1)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Luku 4 Rebase-toiminnot ja niihin liittyvät tapaukset

【aiheeseen liittyvä】

  • Tahtoa commit Palauta versio toiseen haaraan
  • Suorita rebase, jos versio on ristiriidassa
  • Suorita interaktiivinen uudelleenperustelu määritetylle versiolle
  • Vuorovaikutteisen uudelleenpohjauksen käyttäminen versioiden yhdistämiseen
  • Sitojien vaihtaminen interaktiivisella rebasingilla
  • Automaattinen koontiversio

4.0 Johdatus pohjamaalaukseen

Rebase (Rebasing ) on erittäin tehokas Gitin ominaisuus.Uudelleenpohjaus on eräänlainen toimenpide: jos acommit A Varhaisin perustuicommit B sitten;A Palauta arvoonCeli tahtoa A perustuaC operaatio.

Seuraavassa esittelytapauksessa huomaat, että emästys ei useinkaan ole niin helppoa kuin miltä näyttää.

4.1 tulee commit Palauta versio toiseen haaraan

Tarkastellaan ensin yksinkertaisinta rebase-toimintoa. Aiheeseen liittyvä valmistelutyö: esittele uusi tiedosto, lähetä, muuta sisältöä ja lähetä uudelleen.Tällä tavalla on kaksinkertainen paikallinencommit Versio.

Edelleen kanssa jgit Kirjasto esimerkiksi:

# Clone jgit repo into chapter4
$ git clone https://git.eclipse.org/r/jgit/jgit chapter4
$ cd chapter4
# Checkout a new branch
$ git checkout -b rebaseExample --track origin/stable-3.1
# Create the 1st commit
$ echo "My Fishtank
    
Gravel, water, plants
Fish, pump, skeleton" > fishtank.txt
$ git add fishtank.txt
$ git commit -m "My brand new fishtank"
# Create the 2nd commit
$ echo "mosquitos" >> fishtank.txt
$ git add fishtank.txt
$ git commit -m "Feeding my fish"
# Rabase to stable-3.2
$ git rebase origin/stable-3.2
Successfully rebased and updated refs/heads/rebaseExample.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

Ennen pohjamaalausta:

Lisää kuvan kuvaus tähän

Uudelleenpoiston jälkeen:

Lisää kuvan kuvaus tähän

git rebase Toteutusprosessi:

  1. nousta ylös HEAD Uudelleenkantauksen osoittaman kohdehaaran yhteinen versio (merge-base);
  2. perustuen merge-base, etsi kaikki puuttuvat versiot kohdehaaralta;
  3. Yritä soveltaa puuttuvat versiot yksitellen kohdehaaraan.

4.2 Uudelleenpohjauksen suorittaminen versioristiriitojen varalta

Jos commit versio tai abranch Määritä haara uudelleen toiseksiHEAD , versioristiriitoja saattaa ilmetä.Tässä vaiheessa ristiriita on ratkaistava ja komento suoritettavagit rebase --continue, uudelleenpohja voidaan suorittaa loppuun.

Tämän osion esimerkit osoittavat, kuinka uudelleenpohjaa voidaan suorittaa ristiriitojen esiintyessä.Tällä kertaa kohdassa 4.1 esitetyn lopputuloksen jälkeenrebaseExample Haara on perustettu uudelleenstable-3.2 haara.Esimerkki tarkistaa uuden haaran vakaasta-3.1:stä ja lisää jarebaseExample Tekstitiedostot, joilla on sama haaranimi, mutta yhteensopimaton sisältöfishtank.txt

# Checkout rebaseExample2
$ git checkout -b rebaseExample2 --track origin/stable-3.1
# Add a new commit
$ echo "My Fishtank
Pirateship, Oister shell
Coconut shell
">fishtank.txt
$ git add fishtank.txt
$ git commit -m "My brand new fishtank"
# Rebase conflicting branches
$ git rebase rebaseExample
Auto-merging fishtank.txt
CONFLICT (add/add): Merge conflict in fishtank.txt
error: could not apply 24f9bf1ef... My brand new fishtank2
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 24f9bf1ef... My brand new fishtank2
$ subl fishtank.txt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

Konfliktitilanne on seuraava:

Lisää kuvan kuvaus tähän

Vaihda seuraavaan sisältöön, tallenna ja sulje:

Lisää kuvan kuvaus tähän

Lisää yhdistetyt tiedostot ja jatka perustamista:

$ git add fishtank.txt
$ git rebase --continue
hint: Waiting for your editor to close the file...
  • 1
  • 2
  • 3

Avautuva editori näkyy kuvassa:

Lisää kuvan kuvaus tähän

Vahvista, tallenna ja sulje, niin näet kehotteen, jonka mukaan uudelleenperustelu onnistui:

$ git rebase --continue
[detached HEAD 9911772b3] My brand new fishtank2
 1 file changed, 2 insertions(+), 3 deletions(-)
Successfully rebased and updated refs/heads/rebaseExample2.
# Check new status via gitk
$ gitk
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Yksityiskohdat ovat seuraavat:

Lisää kuvan kuvaus tähän

Voidaan nähdä, että tässä uudelleenpohjassa vain ne versiot, jotka ovat olemassa vanhassa haarassa, mutta eivät uudessa haarassa, perustetaan uudelleen (eli uusia versioita lisätään) commit)。

Ensimmäisen uudelleenrakentamisen keskeytyksen git-kehotetiedoissa näet myös kaksi vaihtoehtoa:

  1. git rebase --abort: Kirjaimellisena merkityksenä keskeytä rebase

  2. git rebase --skip: Ohita ristiriidat ja rebase suoraan, mikä johtaa rebaseExample2 Hävitä uusicommit, yhdistetty suoraan osaan rebaseExample, vanhempi osoitti uudelleenpohjauksen jälkeen, ja rebaseExample Johdonmukainen:

    Lisää kuvan kuvaus tähän


4.3 Suorita vuorovaikutteinen uudelleenperustelu määritetylle versiolle

Tässä esimerkissä käytämme rebaseExample Haarojen perusteella, osoita, kuinka käyttää--interactive Mark, aseta nämä kaksi uudelleen kohtaan 4.1commit Palauta etäseurantahaarastable-3.1 ylivoimainen:

$ git checkout rebaseExample
Switched to branch 'rebaseExample'
Your branch is ahead of 'origin/stable-3.1' by 109 commits.
  (use "git push" to publish your local commits)
$ git rebase origin/stable-3.1
  • 1
  • 2
  • 3
  • 4
  • 5

Tällä hetkellä uudessa ponnahdusikkunassa näkyy toimitusluettelo alueen kanssa rebaseExample jastable-3.1 välillä, kaikki voidaan perustaa uudelleenstable-3.1 /commit Ennätys.Säilytä kaksi uutta esimerkkiäcommit, poista kaikki loput (eli sisältö riviltä 89 ja ennen):

Lisää kuvan kuvaus tähän

Kun olet tallentanut, poistu editorista ja näet seuraavan tulosteen:

$ git rebase --interactive origin/stable-3.1
Successfully rebased and updated refs/heads/rebaseExample.
# Check in gitk view:
  • 1
  • 2
  • 3

Tulos on seuraava:

Lisää kuvan kuvaus tähän

Esimerkki laajennus

Tässä esimerkissä voit myös nopeasti saavuttaa halutun vaikutuksen komennolla:

$ git rebase --onto origin/stable-3.1 origin/stable-3.2 rebaseExample
Successfully rebased and updated refs/heads/rebaseExample.
  • 1
  • 2

Kaavio ennen ja jälkeen pohjamaalauksen on seuraava:

Lisää kuvan kuvaus tähän