A Git Merge és a Git Rebase végső útmutatója

Üdvözöljük a git mergeés git rebaseparancsok végső útmutatójában . Ez az oktatóanyag megtanít mindent, amit tudnia kell a több ág és a Git kombinálásáról.

Git Merge

A git mergeparancs egyesíti azokat a változtatásokat, amelyeket a jelenlegi bázis külön ágában a kódbázis új végrehajtásként végrehajtott.

A parancs szintaxisa a következő:

git merge BRANCH-NAME

Például, ha jelenleg egy elnevezett fiókban dolgozik, devés egyesíteni szeretné az új nevű fiókban végrehajtott új módosításokat new-features, akkor a következő parancsot adja ki:

git merge new-features

Megjegyzés: Ha az aktuális ágon vannak nem végrehajtott változtatások, a Git csak akkor engedélyezi az egyesülést, ha az aktuális fiók minden változását végrehajtják. A változások kezeléséhez a következőket teheti:

Hozzon létre egy új fiókot, és hajtsa végre a módosításokat

git checkout -b new-branch-name git add . git commit -m ""

Tedd őket

git stash # add them to the stash git merge new-features # do your merge git stash pop # get the changes back into your working tree

Hagyjon el minden változást

git reset --hard # removes all pending changes

Git Rebase

Az ág újbóli átértékelése a Gitben az ág teljes egészének áthelyezését jelenti a fa egy másik pontjára. A legegyszerűbb példa egy ág feljebb mozgatása a fában. Tegyük fel, hogy van egy águnk, amely eltér az A pontban található főágtól:

 /o-----o---o--o-----o--------- branch --o-o--A--o---o---o---o----o--o-o-o--- master

Amikor újrabázol, akkor így mozgathatja:

 /o-----o---o--o-----o------ branch --o-o--A--o---o---o---o----o--o-o-o master

Az újbóli alapozáshoz győződjön meg arról, hogy a főág újrabázisában minden kívánt elkötelezettséggel rendelkezik. Nézze meg az újrabázolni kívánt fiókot és írja be git rebase master(ahol a master az az ág, amelyen újra szeretne alapozni).

Az is lehetséges, hogy egy másik ágon újrabázisozzon, így például egy olyan ág, amely egy másik ágon alapult (nevezzük funkciónak), a masterre alapozzon:

 /---o-o branch /---o-o-o-o---o--o------ feature ----o--o-o-A----o---o--o-o-o--o--o- master

Miután git rebase master branchvagy git rebase masteramikor megnézte a fiókot, a következőket kapja:

 /---o-o-o-o---o--o------ feature ----o--o-o-A----o---o--o-o-o--o--o- master \---o-o branch

Git újraindítás interaktív a konzolon

Ha azt szeretné, hogy git rebasea konzolban szerepeljen az elkövetések listája, kiválaszthatja, szerkesztheti vagy belehelyezheti az újraindítást:

  • Írja be úgy git rebase -i HEAD~5, hogy az utolsó szám tetszőleges számú elkötelezettség legyen a legutóbbi, visszanézni kívánt visszafelé.
  • Vimben nyomja meg az esc, majd ia teszt szerkesztésének megkezdéséhez.
  • A bal oldalon felülírhatja az pickegyiket az alábbi parancsokkal. Ha el akarja szedni az elkötelezettséget egy előzőbe, és elveti az elkötelezettség üzenetét, írja be az elkövetés fhelyét pick.
  • Mentse el és lépjen ki a szövegszerkesztőből.
  • Ha az újbázisbázis leállt, hajtsa végre a szükséges beállításokat, majd git rebase --continueaddig használja, amíg az újrabázis sikeres lesz.
  • Ha sikeresen újraindul, akkor kényszerítenie kell a változtatásokat git push -faz újbázisú verzió hozzáadásához a távoli adattárba.
  • Összeolvadási konfliktus esetén ennek megoldására számos módon van lehetőség, ideértve az ebben az útmutatóban szereplő javaslatokat is. Az egyik mód az, hogy megnyitja a fájlokat egy szövegszerkesztőben, és törli a kód nem kívánt részeit. Ezután használja, git add majd git rebase --continue. Átugorhatja az ütköző kötelezettségvállalást a belépéssel git rebase --skip, git rebase --aborta konzolon történő futtatással leállíthatja az újrabázist .
pick 452b159  pick 7fd4192  pick c1af3e5  pick 5f5e8d3  pick 5186a9f  # Rebase 0617e63..5186a9f onto 0617e63 (30 commands) # # Commands: # p, pick = use commit # r, reword = use commit, but stop to edit the commit message. # e, edit = use commit, but stop to amend or add commit. # s, squash = use commit, meld into previous commit and stop to edit the commit message. # f, fixup = like "squash", but discard this commit's log message thus doesn't stop. # x, exec = run command (the rest of the line) using shell # d, drop = remove commit # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted. # # Note that empty commits are commented out

Konfliktusok egyesítése

Összeolvadási konfliktus az, amikor külön ágakon hajt végre olyan műveleteket, amelyek ellentmondásos módon változtatják meg ugyanazt a sort. Ha ez megtörténik, a Git nem fogja tudni, hogy a fájl melyik verzióját kell megőriznie az alábbihoz hasonló hibaüzenetben:

CONFLICT (content): Merge conflict in resumé.txt Automatic merge failed; fix conflicts and then commit the result.

Ha megnézi a resumé.txtfájlt a kódszerkesztőben, láthatja, hogy hol történt az ütközés:

<<<<<<>>>>>> updated_address

Git hozzáadott néhány további sort a fájlhoz:

  • <<<<<<< HEAD
  • =======
  • >>>>>>> updated_address

Gondoljunk csak   =======a konfliktus választóvonalára. Minden az aktuális ág között <<<<<<< HEADés =======annak tartalma, amelyre a HEAD ref mutat. Másrészt, minden között   =======, és >>>>>>> updated_addressa tartalom az ág összevonták, updated_address.

Git Merge vs Git Rebase

Mindkét git mergeés git rebasenagyon hasznos parancsokat, és az egyik nem jobb, mint a másik. Van azonban néhány nagyon fontos különbség a két parancs között, amelyeket Önnek és csapatának figyelembe kell vennie.

Amikor git mergefut, extra egyesítés véglegesítés létre. Valahányszor a helyi adattárban dolgozik, a túl sok összevonási végrehajtás zavarossá teheti az elkötelezettség előzményeit. Az egyesítés elkerülésének egyik módja a git rebasehelyette történő használat .

git rebase is a very powerful feature. That being said, it is risky as well if it is not used in the right way. git rebase alters the commit history, so use it with care. If rebasing is done in the remote repository, then it can create a lot of issues when other developers try to pull the latest code changes from the remote repository. Remember to only run git rebase in a local repository.

That's all you need to know to merge and rebase with the best of 'em.