Velkommen til vores ultimative guide til git merge
og git rebase
kommandoer. Denne tutorial vil lære dig alt hvad du behøver at vide om at kombinere flere grene med Git.
Git Merge
kommandoengit merge
vil flette alle ændringer, der blev foretaget i kodebasen på en separat gren til din nuværende gren som en ny commit.,
kommando syntaks som følger:
git merge BRANCH-NAME
For eksempel, hvis du arbejder i en filial med navnet dev
og vil gerne fusionere de nye ændringer, der blev foretaget i en gren ved navn new-features
, ville du udføre følgende kommando:
git merge new-features
Bemærk: Hvis der er nogen uforpligtede ændringer på dit nuværende gren, Git vil ikke tillade dig at fusionere, indtil alle ændringer i din nuværende filial er blevet begået., Til at håndtere disse ændringer, kan du enten:
Opret en ny filial, og commit ændringerne
git checkout -b new-branch-namegit add .git commit -m "<your commit message>"
Stash dem
git stash # add them to the stashgit merge new-features # do your mergegit stash pop # get the changes back into your working tree
Opgive alle de ændringer
git reset --hard # removes all pending changes
Git Rebase
Rebasing en filial i Git er en måde at flytte den helhed af en gren af virksomheden til et andet punkt i træet. Det enkleste eksempel er at flytte en gren længere op i træet., Siger, at vi har en filial, der afviger fra master-branch ved punkt Et:
/o-----o---o--o-----o--------- branch--o-o--A--o---o---o---o----o--o-o-o--- master
Når du rebase du kan flytte det ud som dette:
/o-----o---o--o-----o------ branch--o-o--A--o---o---o---o----o--o-o-o master
for At rebase, sørg for at du har alle de begår du ønsker i rebase i din master-branch. Tjek den gren, du vil rebase, og skriv git rebase master
(hvor master er den gren, du vil rebase på)., som for eksempel en gren, der var baseret på en anden gren (lad os kalde det-funktion) omgjort på master:
/---o-o branch /---o-o-o-o---o--o------ feature----o--o-o-A----o---o--o-o-o--o--o- master
Efter git rebase master branch
eller git rebase master
, når du har tjekket ud den gren, du vil få:
/---o-o-o-o---o--o------ feature----o--o-o-A----o---o--o-o-o--o--o- master \---o-o branch
Git rebase interaktive i konsollen
for At bruge git rebase
i konsollen med en liste over begår du kan vælge, redigere eller fald i rebase:
- Enter
git rebase -i HEAD~5
med det sidste nummer, der helst antal commits fra den seneste baglæns, du ønsker at gennemgå., - i vim skal du trykke på
esc
, derefteri
for at begynde at redigere testen. - i venstre side kan du overskrive
pick
med en af kommandoerne nedenfor. Hvis du ønsker, at squash en commit i en tidligere og kassere commit-besked, skal du indtastef
i stedet forpick
commit. - Gem og afslut din teksteditor.
- når rebase stoppes, skal du foretage de nødvendige justeringer og derefter bruge
git rebase --continue
, indtil rebase er vellykket., - Hvis det rebases held så er du nødt til at tvinge skubbe dine ændringer med
git push -f
for at tilføje omgjort version til din remote repository. - hvis der er en fusionskonflikt, er der en række måder at løse dette på, herunder at følge forslagene i denne vejledning. En måde er at åbne filerne i en teksteditor og slette de dele af koden, du ikke ønsker. Brug derefter
git add <file name>
efterfulgt afgit rebase --continue
., Du kan springe over i strid begå ved at indtastegit rebase --skip
, stop rebasing ved at køregit rebase --abort
i din konsol.
Flet konflikter
en flet konflikt er, når du foretager forpligtelser på separate grene, der ændrer den samme linje på modstridende måder.,hvilken version af filen, til at holde en fejlmeddelelse, der ligner følgende:
CONFLICT (content): Merge conflict in resumé.txt Automatic merge failed; fix conflicts and then commit the result.
Hvis du ser på det resumé.txt
fil i din kode-editor, kan du se, hvor konflikten fandt sted:
<<<<<<< HEADAddress: 808 South Street=======Address: 505 North Street>>>>>>> updated_address
Git tilføjet nogle ekstra linjer til filen:
<<<<<<< HEAD
=======
>>>>>>> updated_address
Git-Merge vs Git Rebase
Både git merge
og git rebase
, som er meget nyttige kommandoer, og den ene er ikke bedre end den anden., Der er dog nogle meget vigtige forskelle mellem de to kommandoer, som du og dit team skal tage i betragtning.
Når git merge
køres, oprettes en ekstra merge commit. Hver gang du arbejder i dit lokale lager, kan det at have for mange sammenfletningsforpligtelser få commithistorikken til at se forvirrende ud. En måde at undgå fusionsforpligtelsen er at bruge git rebase
i stedet.
git rebase
er en meget kraftfuld funktion. Når det er sagt, er det også risikabelt, hvis det ikke bruges på den rigtige måde., git rebase
ændrer commit-historien, så brug den med omhu. Hvis rebasing sker i fjernarkivet, kan det skabe mange problemer, når andre udviklere forsøger at trække de seneste kodeændringer fra fjernarkivet. Husk kun at køre git rebase
i et lokalt arkiv.
det er alt hvad du behøver at vide for at fusionere og rebase med det bedste af dem.