- Git rebase
- voordat
- rebase
- regelmatige rebase
- interactieve rebase
- Force-push
- Merge conflicten
Deze gids helpt je om begonnen met Rebasen, forceer-pushen, en het oplossen van Merge conflicten lokaal.
voordat u in dit document duikt, moet u ervoor zorgen dat u bekend bent met het gebruik van git via de opdrachtregel.
Git rebase
Rebasen is een veel voorkomende operatie inGit., Er zijn de volgende rebase opties:
- reguliere rebase.
- interactieve rebase.
voor het rebasen
git rebase
herschrijft de commit geschiedenis. Het kan schadelijk zijn om het te doen in gedeelde takken. Het kan leiden tot complexe en moeilijk op te lossen merge conflicten. In deze gevallen, in plaats van je branch te rebasen tegen de standaard branch,overweeg je het in plaats daarvan te Pullen (git pull origin master
). Het heeft een vergelijkbaar effect zonder afbreuk te doen aan het werk van uw bijdragers.,Het is veiliger om een back-up te maken van je branch voordat je rebast om er zeker van te zijn dat je geen wijzigingen verliest. Bijvoorbeeld, overweeg dan een functie branchcalled my-feature-branch
:
-
Open uw functie filiaal in de terminal:
git checkout my-feature-branch
-
de Checkout van een nieuwe tak van het:
git checkout -b my-feature-branch-backup
-
Ga terug naar je oorspronkelijke tak:
git checkout my-feature-branch
Nu kan je veilig het rebase., Als er iets misgaat, kunt u uw wijzigingen herstellen door my-feature-branch
te resetten tegen my-feature-branch-backup
:
merk op dat als u wijzigingen hebt toegevoegd aan my-feature-branch
na het maken van de back-uptak,u ze verliest bij het resetten.
reguliere rebase
met een reguliere rebase kunt u uw feature branch bijwerken met de defaultbranch (of een andere branch).Dit is een belangrijke stap voor Git-gebaseerde ontwikkelingsstrategieën., Je kunt ervoor zorgen dat de wijzigingen die je toevoegt aan de codebase geen bestaande wijzigingen verbreken die zijn toegevoegd aan de doel branch nadat je je featurebranch hebt aangemaakt.,
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.,
wanneer je rebase:
- Git importeert alle commits die naar
master
na het moment dat je je feature branch hebt aangemaakt tot het huidige moment. - Git plaatst de commits die je in je feature branch hebt bovenop alle commits geïmporteerd uit
master
:
je kunt master
vervangen door elke andere branch waartegen je wilt rebasen, bijvoorbeeld release-10-3
., U kunt ook origin
vervangen door andere remoterepositories, bijvoorbeeld upstream
. Om te controleren welke afstandsbedieningen u hebt gekoppeld aan uw localrepository, kunt u git remote -v
uitvoeren.
als er merge conflicten zijn, vraagt Git je om ze te fixeren voordat je verder gaat met de rebase.
voor meer informatie, controleer Git ‘ s documentatie over rebasingand rebasing strategieën.
interactieve rebase
u kunt interactieve rebase gebruiken om commits te wijzigen. Bijvoorbeeld, wijzig een commitmessage, squash (Voeg meerdere commits samen in één), edit, of deletecommits., Gebruik een rebase voor het veranderen van eerdere commit berichten,en het organiseren van de commit historie van je branch om het schoon te houden.
als je iets wilt veranderen in recente commits, gebruik dan interactiverebase door de vlag --interactive
(of -i
) door te geven aan het rebase Commando.,
bijvoorbeeld, als je de laatste drie commits in je branch wilt bewerken(HEAD~3
), voer dan:
git rebase -i HEAD~3
Git opent de laatste drie commits in je terminal teksteditor en beschrijft alle interactieve rebase opties die je kunt gebruiken. De standaard optie is pick
,die de commit ongewijzigd houdt. Vervang het trefwoord pick
volgens de operatie die u wilt uitvoeren in elke commit. Om dit te doen, moet je de commits bewerken in de teksteditor van je terminal.,
bijvoorbeeld, als je Vim gebruikt als teksteditor in een macOS ‘ s ZSH
shell, en je wilt alle drie commits squashen(voeg ze samen in één):
- druk op je toetsenbord om naar Vim ‘ s bewerkingsmodus te schakelen.
- navigeer met je toetsenbordpijlen om het tweede commit sleutelwoord te bewerken van
pick
naarsquash
(ofs
). Doe hetzelfde met de derde commit.De eerste commit moet ongewijzigd blijven (pick
) omdat we de tweede en derde in de eerste willen squashen., - druk op Escape om de bewerkingsmodus te verlaten.
- typ
:wq
om te” schrijven “(opslaan) en”afsluiten”. - Git voert het commit bericht uit zodat je een kans hebt om het te bewerken:
- alle regels die beginnen met
#
worden genegeerd en niet opgenomen in de commitmessage. Al het andere is inbegrepen. - om het te laten zoals het is, typ
:wq
. Om het commit bericht te bewerken: schakel naar de editing mode, bewerk het commit bericht, en sla het op zoals je net deed.,
- alle regels die beginnen met
- als je je commits nog niet naar de remote branch hebt gepusht voordat je rebased,push je wijzigingen normaal. Als je deze commits al gepusht had,forceer dan in plaats daarvan.
merk op dat de stappen voor het bewerken via de commandoregel enigszins verschillend kunnen zijn afhankelijk van uw besturingssysteem en de shell die u gebruikt.
zie talrijke ongedaan maken mogelijkheden in Gitvoor een dieper inzicht in interactieve rebase.,
Force-push
wanneer je complexere operaties uitvoert, bijvoorbeeld commits squash, je branch reset of rebase, moet je een update forceren naar de remote branch.Deze operaties impliceren het herschrijven van de commit geschiedenis van de branch.To forceer een update, geef de vlag --force
of -f
door aan de opdracht push
. Voorbeeld:
git push --force origin my-feature-branch
het forceren van een update wordt niet aanbevolen wanneer u werkt met gedeelde branches.
U kunt ook de vlag --force-with-lease
doorgeven., Het is veiliger, omdat het geen werk op de remotebranch overschrijft als er meer commits zijn toegevoegd aan de remote branch door iemand anders:
git push --force-with-lease origin my-feature-branch
als de branch die je wilt forceren beveiligd is,kun je niet forceren-push ernaar tenzij je de beveiliging eerst ongedaan maakt. Dan kun je het forceren en opnieuw beschermen.,
Merge conflicten
omdat Git is gebaseerd op het vergelijken van versies van een fileline-by-line, wanneer een regel die in je branch is gewijzigd samenvalt met de sameline die in de doel branch is gewijzigd (na het moment dat je er je feature branch van hebt gemaakt), identificeert Gitid deze wijzigingen als een merge conflict. Om het op te lossen, moet je kiezen welke versie van die lijn je wilt houden.
De meeste conflicten kunnen worden opgelost via de GitLab UI.
voor complexere gevallen zijn er verschillende methoden om ze op te lossen. Er zijn ook Git GUI apps die kunnen helpen door de verschillen te visualiseren.,
om conflicten lokaal op te lossen, kunt u de volgende methode gebruiken:
-
Open de terminal en checkout uw feature branch, bijvoorbeeld
my-feature-branch
:git checkout my-feature-branch
Rebase uw branch tegen de doel branch zodat gitprompt u met de conflicten:
git rebase origin/master
- Het begint met de marker:
<<<<<<< HEAD
., - hieronder staat de inhoud van uw wijzigingen.
- de marker:
=======
geeft het einde van uw wijzigingen aan. - hieronder staat de inhoud van de laatste wijzigingen in de doel branch.
- de marker
>>>>>>>
geeft het einde van het conflict aan.
=======
) u wilt behouden, en verwijder vervolgens het gedeelte van de inhoud dat u niet wilt in het bestand.uw wijzigingen aan:
git add .
je wijzigingen vastlegt:
git commit -m "Fix merge conflicts"
Verder rebasen:
git rebase --continue
git rebase --abort
om het proces te stoppen.Git verbreekt de rebase en rolt de branch terug naar de staat die je had beforerunning git rebase
.,Nadat u git rebase --continue
hebt uitgevoerd, kan de rebase niet worden afgebroken.
Leave a Reply