Git Merge'i ja Git Rebase'i ülim juhend

Tere tulemast meie git mergeja git rebasekäskude ülimale juhendile . See õpetus õpetab teile kõike, mida peate teadma mitme haru ühendamise kohta Gitiga.

Git Merge

git mergeKäsk ühendab kõik muudatused, mis tehti koodi baasi eraldi haru oma praeguse filiaali uue toime.

Käsu süntaks on järgmine:

git merge BRANCH-NAME

Näiteks kui töötate praegu filiaalis nimega devja soovite ühendada kõik uued muudatused, mis tehti filiaalis nimega new-features, väljastate järgmise käsu:

git merge new-features

Märkus. Kui teie praeguses harus on mingeid muudatusi, ei luba Git teil ühineda enne, kui kõik muudatused teie praeguses harus on tehtud. Nende muudatuste käsitlemiseks võite teha järgmist.

Looge uus haru ja tehke muudatused

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

Kätke need

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

Loobu kõigist muudatustest

git reset --hard # removes all pending changes

Git Rebase

Giti haru uuesti hindamine on viis, kuidas viia kogu haru puu teise punkti. Lihtsaim näide on oksa liigutamine puul ülespoole. Oletame, et meil on haru, mis lahkus põhiharust punktis A:

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

Kui te uuesti alustate, saate seda järgmiselt liigutada:

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

Taasalustamiseks veenduge, et teil oleksid kõik põhiteose taaskäivitamise soovid. Vaadake haru, mille soovite uuesti baasida ja tippida git rebase master(kus kapten on haru, millele soovite uuesti baasida).

Võimalik on ka teise haru taaskäivitamine, nii et näiteks haru, mis põhines mõnel teisel harul (nimetagem seda funktsiooniks), baseerub masteril:

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

Pärast git rebase master branchvõi git rebase masterkui olete möllitud filiaal, saad:

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

Git taasesitage interaktiivselt konsoolis

Kasutada git rebaseka konsooli nimekirja commits saate valida, muuta või languse Rebase:

  • Sisestage git rebase -i HEAD~5nii, et viimane number oleks ükskõik milline arv viimastest tagurpidi tehtud toimingutest, mida soovite vaadata.
  • Testi redigeerimise alustamiseks vajutage in vim, escseejärel i.
  • Vasakul küljel saate pickühe alloleva käsuga üle kirjutada . Kui soovite siduda kohustuse eelmisega ja loobuda pühendumissõnumist, sisestage fkohustuse tegemise asemele pick.
  • Salvestage ja lõpetage tekstiredaktor.
  • Kui taaskäivitamine on peatatud, tehke vajalikud kohandused ja kasutage seda git rebase --continueseni, kuni taaskäivitamine õnnestub.
  • Kui see taaskäivitub edukalt, peate sundima muudatusi vajutama, et taaskäivitatud git push -fversioon kaughoidlasse lisada.
  • Ühenduskonflikti korral on selle lahendamiseks mitmeid viise, sealhulgas järgige selles juhendis olevaid soovitusi. Üks võimalus on avada failid tekstiredaktoris ja kustutada koodiosad, mida te ei soovi. Seejärel kasutage, git add millele järgneb git rebase --continue. Saate konfliktsest kohustusest üle astuda git rebase --skip, sisestades , lõpetage uuesti käivitamine git rebase --abortkonsoolis käivitades .
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

Konfliktide ühendamine

Ühenduskonflikt on see, kui teete kohustusi eraldi harudes, mis muudavad sama joont vastuolulistel viisidel. Sel juhul ei tea Git, millist failiversiooni säilitada järgmises tõrketeates:

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

Kui vaatate resumé.txtfaili oma koodiredaktoris, näete konflikti aset:

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

Git lisas faili mõned täiendavad read:

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

Mõelge   =======kui konflikti eraldusjoonele. Kõik praeguse haru vahel <<<<<<< HEADja =======on selle sisu, millele HEAD ref osutab. Teisalt on kõik   ühendatava haru sisu =======ja >>>>>>> updated_addresssisu updated_address.

Git Merge vs Git Rebase

Mõlemad git mergeja git rebaseon väga kasulikud käsud ning üks pole parem kui teine. Kahe käsu vahel on siiski mõned väga olulised erinevused, mida teie ja teie meeskond peaksid arvestama.

Kui git mergekäivitatakse, luuakse täiendav ühendamise kohustus. Alati, kui töötate oma kohalikus hoidlas, võib liitmiskomiteede liiga palju tegemine lubada, et pühenduste ajalugu näib segane. Üks võimalus ühendamise kohustuse vältimiseks on selle kasutamine git rebase.

git rebaseon väga võimas funktsioon. Nagu öeldud, on see ka riskantne , kui seda ei kasutata õigesti. git rebasemuudab pühendumiste ajalugu, nii et kasutage seda ettevaatlikult. Kui uuesti hoidmine toimub kaughoidlas, võib see tekitada palju probleeme, kui teised arendajad üritavad kaughoidlast viimaseid koodimuudatusi tõmmata. Ärge unustage, et töötate ainult git rebasekohalikus hoidlas.

See on kõik, mida peate teadma parimate ühendamiseks ja uuesti alustamiseks.