2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
【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
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ää.
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.
Ennen pohjamaalausta:
Uudelleenpoiston jälkeen:
git rebase
Toteutusprosessi:
HEAD
Uudelleenkantauksen osoittaman kohdehaaran yhteinen versio (merge-base
);merge-base
, etsi kaikki puuttuvat versiot kohdehaaralta;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
Konfliktitilanne on seuraava:
Vaihda seuraavaan sisältöön, tallenna ja sulje:
Lisää yhdistetyt tiedostot ja jatka perustamista:
$ git add fishtank.txt
$ git rebase --continue
hint: Waiting for your editor to close the file...
Avautuva editori näkyy kuvassa:
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
Yksityiskohdat ovat seuraavat:
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:
git rebase --abort
: Kirjaimellisena merkityksenä keskeytä rebase
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:
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
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):
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:
Tulos on seuraava:
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.
Kaavio ennen ja jälkeen pohjamaalauksen on seuraava: