socialgekon.com
  • Tärkein
  • Projektinhallinta
  • Trendit
  • Työkalut Ja Oppaat
  • Web-Käyttöliittymä
Taustaa

Advanced Git Guide: Git Stash, Reset, Rebase ja paljon muuta

Jokaisella kehittäjällä tulisi olla hyvä käsitys versionhallinnasta, ja Gitistä on tullut de facto standardi ohjelmistokehityksen versionhallinnalle.

Usein kehittäjät kuitenkin oppivat vain muutaman yksinkertaisen komennon ja jättävät huomiotta Git-historian voiman ja muut asiat, joita Git voi tehdä tehostaakseen sinua paljon. Esimerkiksi julkaisujen hallinta on erittäin helppoa Gitin kanssa git tag

Suoritin jatkokurssin Gitissä verkossa (Githubin kanssa) ja jatkoin Githubin kanssa aloittelijan Git-luokan opettamista. Kun huomasin, että suosikkini Git-ominaisuuksista ei ollut olemassa paljon teknisiä artikkeleita, halusin jakaa tilaisuuden muiden kehittäjien kanssa. Tässä viestissä opit käyttämään seuraavia Git-lisätoimintoja:



  • git stash, joka tallentaa koodisi väliaikaisesti, paikallisesti
  • git reset, jonka avulla voit siivota koodisi ennen sitoutumista
  • git bisect, toiminto, jonka avulla voit etsiä huonoja tekoja
  • git squash, jonka avulla voit yhdistää sitoumuksesi
  • git rebase, joka mahdollistaa muutokset haarasta toiseen

Git Stash

Git stashin avulla voit tallentaa koodisi tekemättä sitoumuksia. Kuinka tämä on hyödyllistä? Kuvaa seuraava skenaario:

Olet jo tehnyt kolme siistiä ja siistiä tekemistä, mutta sinulla on myös joitain sitomatonta koodia; et halua sitoutua siihen poistamatta ensin virheenkorjauskoodia. Sitten jostain syystä joudut yhtäkkiä osallistumaan toiseen tehtävään ja vaihtamaan haaraa. Tämä voi usein tapahtua, jos olet main -sivustollasi haara, ja olet unohtanut luoda uuden haaran ominaisuudellesi. Tällä hetkellä koodisi näyttää tältä:

$ git status On branch my-feature Changes not staged for commit: (use 'git add ...' to update what will be committed) (use 'git checkout -- ...' to discard changes in working directory) modified: css/common.scss no changes added to commit (use 'git add' and/or 'git commit -a') $ git diff diff --git a/css/common.scss b/css/common.scss index 2090cc4..90fd457 100644 --- a/css/common.scss +++ b/css/common.scss @@ -13,6 +13,6 @@ body { font-family: 'Proxima Nova', Arial, sans-serif; font-size: 13px; - color: #333; + color: red; background-color: #f00; }

Kun suoritat git stash, sitomaton koodi häviää sitoutumatta. Stashing on kuin väliaikaisen paikallisen sitoutumisen tallentaminen sivuliikkeeseen. Jätettä ei ole mahdollista siirtää etätietovarastoon, joten se on vain omaan henkilökohtaiseen käyttöön.

$ git stash Saved working directory and index state WIP on my-feature: 49ee696 Change text color

Haarasi näkyy nyt sellaisena kuin se oli, kun teit viimeisen sitoumuksesi. Nyt voit vaihtaa haaroja turvallisesti menettämättä koodiasi tai tekemättä sotkua. Kun vaihdat takaisin sivuliikkeeseen ja suoritat git stash list näet luettelon varastoja, jotka näyttävät tältä:

$ git stash list [email protected] {0}: WIP on my-feature: 49ee696 Change text color

Voit helposti lisätä kätketyn sisällön uudelleen suorittamalla git stash apply. Voit myös käyttää tiettyä säilytystä (jos olet säilyttänyt useita kertoja) suorittamalla git stash apply [email protected] {1} ('1' tarkoittaa toista ennen viimeistä piilotusta). Tässä on esimerkki useamman kuin yhden sitoutumisen pyyhkimisestä ja toisen jemman käyttämisestä:

$ git diff diff --git a/css/common.scss b/css/common.scss index 2090cc4..90fd457 100644 --- a/css/common.scss +++ b/css/common.scss @@ -13,6 +13,6 @@ body { font-family: 'Proxima Nova', Arial, sans-serif; font-size: 13px; - color: #333; + color: red; background-color: #f00; } $ git stash Saved working directory and index state WIP on my-feature: 49ee696 Change text color $ git diff diff --git a/css/common.scss b/css/common.scss index 2090cc4..b63c664 100644 --- a/css/common.scss +++ b/css/common.scss @@ -13,6 +13,6 @@ body { font-family: 'Proxima Nova', Arial, sans-serif; font-size: 13px; - color: #333; + color: red; background-color: #f00; } $ git stash Saved working directory and index state WIP on my-feature: 49ee696 Change text color $ git stash list [email protected] {0}: WIP on my-feature: 49ee696 Change text color [email protected] {1}: WIP on my-feature: 49ee696 Change text color [email protected] {2}: WIP on my-feature: 49ee696 Change text color $ git stash apply [email protected] {2} On branch my-feature Changes not staged for commit: (use 'git add ...' to update what will be committed) (use 'git checkout -- ...' to discard changes in working directory) modified: css/common.scss no changes added to commit (use 'git add' and/or 'git commit -a')

git stash apply [email protected] {2} on käyttänyt vanhinta varastettua koodia, kun muutimme tekstin värin punaiseksi.

$ git diff diff --git a/css/common.scss b/css/common.scss index 2090cc4..90fd457 100644 --- a/css/common.scss +++ b/css/common.scss @@ -13,6 +13,6 @@ body { font-family: 'Proxima Nova', Arial, sans-serif; font-size: 13px; - color: #333; + color: red; background-color: #f00; }

Jos päätät olla tekemättä työtäsi palauttamisen jälkeen, voit suorittaa git checkout ., joka nollaa kaikki sitomaton koodi.

Toisena esimerkkinä siitä, miten Git stash -ohjelmaa käytetään, sanotaan, että sinulla on uusia tiedostoja, joista yhdessä on vika. Jätä kaikki paitsi epäilty virhetiedosto vaiheistamattomaksi (koodi on oltava vaiheitettu varastoitavaksi), niin voit kätkeä kyseisen tiedoston ja tehdä vianmäärityksen. Jos varastettu tiedosto ei ollut ongelma, voit palauttaa sen.

$ git status On branch my-feature Untracked files: (use 'git add ...' to include in what will be committed) css/colors.scss nothing added to commit but untracked files present (use 'git add' to track) $ git add css/colors.scss $ git stash Saved working directory and index state WIP on my-feature: 0d8deef delete colors $ git status On branch my-feature nothing to commit, working tree clean $ git stash apply [email protected] {0} On branch my-feature Changes to be committed: (use 'git reset HEAD ...' to unstage) new file: css/colors.scss

Voit myös siirtää säilötyt sitoumuksesi uudelle ominaisuushaaralle tai virheenkorjaushaaralle käyttämällä git stash branch:

$ git status On branch my-feature Changes not staged for commit: (use 'git add ...' to update what will be committed) (use 'git checkout -- ...' to discard changes in working directory) modified: css/common.scss no changes added to commit (use 'git add' and/or 'git commit -a') $ git stash Saved working directory and index state WIP on my-feature: 66f3f3b Add colors file $ git stash branch debugging-branch M css/common.scss Switched to a new branch 'debugging-branch' Unstaged changes after reset: M css/common.scss On branch debugging-branch Changes not staged for commit: (use 'git add ...' to update what will be committed) (use 'git checkout -- ...' to discard changes in working directory) modified: css/common.scss Dropped refs/ [email protected] {0} (d140624f60d8deef7bceb0d11fc80ed4fd47e0a1)

Huomaa, että kun olet lisännyt lipun, sitä ei poisteta. Voit poistaa liput yksitellen käyttämällä git drop tai poistaa kaikki liput käyttämällä git stash clear:

$ git stash list [email protected] {0}: WIP on my-feature: 66f3f3b Add colors file [email protected] {1}: WIP on my-feature: 0d8deef delete colors [email protected] {2}: WIP on my-feature: 49ee696 Change text color $ git stash drop [email protected] {2} Dropped [email protected] {2} (8ed6d2ce101aa2e28c8ccdc94cb12df8e5c468d6) $ git stash list [email protected] {0}: WIP on my-feature: 66f3f3b Add colors file [email protected] {1}: WIP on my-feature: 0d8deef delete colors $ git stash clear $ git stash list $

Git Reset

Jos löydät itsesi tilanteesta, jossa olet vahingossa suorittanut jonkin sotkuisen koodin, voit tehdä 'pehmeän' kuittauksen. Tämä tarkoittaa, että koodi näyttää siltä, ​​että sitä ei ole vielä sidottu. Sitten voit siivota IDE-koodisi ennen puhtaampaa sitoutumista. Voit tehdä tämän suorittamalla git reset --soft HEAD~1. Tämä nollaa viimeisimmän sitoutumisen. Voit nollata useamman kuin yhden sitoutumisen muuttamalla numeroa ~: n jälkeen esim. git reset --soft HEAD~2.

$ git reset --soft HEAD~1 $ git status On branch debugging-branch Changes to be committed: (use 'git reset HEAD ...' to unstage) modified: css/common.scss Changes not staged for commit: (use 'git add ...' to update what will be committed) (use 'git checkout -- ...' to discard changes in working directory) modified: css/common.scss $ git diff diff --git a/css/common.scss b/css/common.scss index 2090cc4..90fd457 100644 --- a/css/common.scss +++ b/css/common.scss @@ -13,6 +13,6 @@ body { font-family: 'Proxima Nova', Arial, sans-serif; font-size: 13px; - color: $grey; + color: red; background-color: #f00; }

Git-nollaus on hieman hämmentävämpi, varsinkin kun opetetaan uusia Git-käyttäjiä. Pehmeä nollaus tulisi varata todelliselle virheelle, kun taas varastointia voidaan käyttää koodin vaihtamiseen sisään ja ulos.

Voit myös suorittaa kovan palautuksen (git reset --hard HEAD~1). Tämäntyyppinen nollaus olennaisesti pyyhkii viimeisen sitoutumisen. Sinun tulisi olla hyvin varovainen kovien palautusten suorittamisessa, varsinkin jos työnnät haaraa, koska sitoutumistasi ei voida palauttaa.

Git Bisect

Suosikkini Git-työkaluni on git bisect. Olen tarvinnut sitä vain muutaman kerran, mutta kun tarvitsin, se oli korvaamatonta! Käytin sitä ensisijaisesti suurissa koodikannoissa, joissa oli ongelma, jonka kukaan ei löytänyt syy edes voimakkaan virheenkorjauksen jälkeen.

git bisect suorittaa olennaisesti binäärisen haun kahden annetun suorituksen välillä ja esittelee sitten tietyn sitoutumisen yksityiskohdat. Sinun on ensin annettava Gitille hyvä sitoutuminen, jos tiedät, että toiminnallisuutesi toimi, ja huono sitoutuminen. Huomaa, että niin kauan kuin sinulla on yksi hyvä sitoutuminen ja yksi huono, sitoutuminen voi olla vuosien välein (vaikka mitä kauemmas ajassa taaksepäin menet, sitä vaikeammaksi siitä tulee!).

Hauskin asia git bisect on, että et yleensä tiedä kuka kirjoitti bugisen sitoumuksen aloittaessasi. Innostus siitä, mistä vika esitettiin, on saanut muutaman työtoverin käymään useammin kuin tietokoneessani!

Aloita tutustumalla bugiseen haaraan ja etsimällä hyvät sitoumukset. Sinun on käytävä läpi sitoutumishistoriasi ja löydettävä sitoutumis hash, sitten tarkistettava kyseinen sitoutuminen ja testattava haarasi. Kun löydät hyvän ja huonon paikan työskennellä, voit suorittaa git bisect.

Tässä skenaariossa teksti on punaisella tällä tekemällämme verkkosivustolla (vaikka se voisi käyttää käyttöliittymäsuunnittelijaa) mutta emme tiedä miten tai milloin se tehtiin punaiseksi. Tämä on hyvin yksinkertainen esimerkki, tosielämän skenaariossa sinulla todennäköisesti on paljon vähemmän ilmeinen ongelma, esim. lomake ei lähetetä / toimi.

Kun suoritamme git log, voimme nähdä luettelon sitoumuksista, joista valita.

$ git log commit a3cfe7f935c8ad2a2c371147b4e6dcd1a3479a22 (HEAD -> main) Author: Ursula Clarke < [email protected] > Date: Tue Jan 11 10:52:57 2021 +0100 Update .gitignore file for .DS_Store commit 246e90977790967f54e878a8553332f48fae6edc Author: Ursula Clarke < [email protected] > Date: Tue Jan 11 10:51:23 2021 +0100 Change styling of page commit d647ac489ad43b3c6eaea5aceb02b0a7d7e5cf8e Author: Ursula Clarke < [email protected] > Date: Tue Jan 11 10:50:48 2021 +0100 Change text color commit 032a41136b6653fb9f7d81aef573aed0dac3dfe9 Author: Ursula Clarke < [email protected] > Date: Tue Jan 11 10:42:57 2021 +0100 Change text color commit 246e90977790967f54e878a8553332f48fae6edc Author: Ursula Clarke < [email protected] > Date: Tue Jan 11 10:41:23 2021 +0100 delete colors commit d647ac489ad43b3c6eaea5aceb02b0a7d7e5cf8e Author: Ursula Clarke < [email protected] > Date: Tue Jan 11 10:50:48 2021 +0100 Change text color commit ce861e4c6989a118aade031020fd936bd28d535b Author: Ursula Clarke < [email protected] > Date: Tue Jan 11 10:07:36 2021 +0100 ...

Jos avaan verkkosivuni viimeisimmällä hashilla, teksti on punainen, joten tiedän, että minulla on ongelma.

Git bisect, vaihe 1: Web-sivu punaisella tekstillä.

Aloitamme nyt puolikkaan ja sanomme Gitille, että meillä on huono sitoutuminen.

$ git bisect start $ git bisect bad 8d4615b9a963ef235c2a7eef9103d3b3544f4ee1

Nyt palataan ajassa taaksepäin yrittää löytää sitoutuminen, jossa teksti ei ollut punainen. Tässä yritän tarkistaa ensimmäisen sitoutumiseni…

$ git checkout ce861e4c6989a118aade031020fd936bd28d535b Note: checking out 'ce861e4c6989a118aade031020fd936bd28d535b'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b HEAD is now at ce861e4 Add CSS styles

… Ja päivitetään verkkosivua…

Git bisect, vaihe 2: verkkosivu mustalla tekstillä.

Teksti ei ole enää punainen, joten tämä on hyvä sitoutuminen! Mitä uudempi sitoutuu sitoutumaan, ts. Mitä lähempänä huonoa sitoutumista, sitä parempi:

$ git checkout d647ac489ad43b3c6eaea5aceb02b0a7d7e5cf8e Previous HEAD position was ce861e4c6989a118aade031020fd936bd28d535b Add CSS styles HEAD is now at d647ac4 Change text color

Git kertoo nyt, kuinka monta sitoutumista sen on etsittävä ennen oikean löytämistä. Sitoumusten lukumäärä, jonka Git kulkee, riippuu siitä, kuinka monta tekemistä on hyvän ja huonon sitoumuksen välillä (mitä pidempi aika, sitä enemmän kertoja Gitin täytyy toistaa).

Nyt sinun on testattava haarasi uudelleen ja katsottava, onko ongelmasi kadonnut. Joskus tämä voi olla hieman hankalaa, jos päivität moduuleja säännöllisesti, koska sinun on ehkä asennettava solmumoduulit uudelleen käyttöliittymän tietovarastoon. Jos tietokantapäivityksiä on ollut, saatat joutua päivittämään ne myös.

git bisect tarkistaa automaattisesti sitoumuksen keskellä hyviä ja huonoja sitoumuksiasi. Tässä se arvioi yhden askeleen huonon sitoutumisen löytämiseksi.

$ git bisect good 1cdbd113cad2f452290731e202d6a22a175af7f5 Bisecting: 1 revision left to test after this (roughly 1 step) [ce861e4c6989a118aade031020fd936bd28d535b] Add CSS styles $ git status HEAD detached at ce861e4 You are currently bisecting, started from branch '8d4615b'. (use 'git bisect reset' to get back to the original branch)

Päivitä sivu ja tarkista, onko ongelmasi poissa. Asia on edelleen olemassa, joten kerromme Gitille, että tämä on edelleen huono sitoutuminen. Tällä kertaa ei tarvitse viitata sitoutumis hashiin, koska Git käyttää tarkistamaasi sitoutumista. Meidän on toistettava tämä prosessi, kunnes Git on käynyt läpi kaikki mahdolliset vaiheet.

$ git bisect bad Bisecting: 0 revisions left to test after this (roughly 0 steps) [cbf1b9a1be984a9f61b79ae5f23b19f66d533537] Add second paragraph to page

Päivitä sivu, ja ongelma on jälleen poissa, joten tämä on hyvä sitoutuminen:

Git bisect, vaihe 3: sama verkkosivu, jossa on ylimääräistä mustaa tekstiä.

Tässä vaiheessa Git on löytänyt ensimmäisen huonon sitoutumisen:

$ git bisect good ce861e4c6989a118aade031020fd936bd28d535b is the first bad commit commit ce861e4c6989a118aade031020fd936bd28d535b Author: Ursula Clarke < [email protected] > Date: Tue Jan 11 10:52:57 2021 +0100 Add CSS styles :000000 100644 0000000000000000000000000000000000000000 092bfb9bdf74dd8cfd22e812151281ee9aa6f01a M css

Nyt voimme käyttää git show näyttää sitoutumisen ja tunnistaa ongelman:

$ git show ce861e4c6989a118aade031020fd936bd28d535b commit ce861e4c6989a118aade031020fd936bd28d535b Author: Ursula Clarke < [email protected] > Date: Tue Jan 11 10:52:57 2021 +0100 Add CSS styles diff --git a/css/base.scss b/css/base.scss index e69de29..26abf0f 100644 --- a/css/base.scss +++ b/css/base.scss @@ -1,7 +1,7 @@ body { background-color: $white; margin: 0px; line-height: 20px; - color: $grey; + color: red; }

Kun olet valmis, voit suorittaa git bisect reset palauttaa haarasi normaaliin toimintatilaan.

Mitä lähempänä sitoumukset ovat yhdessä, sitä helpommin Git pystyy löytämään ongelman, mutta olen saanut sen ottamaan 10 vaihetta aikaisemmin ja silti löydän huonon sitoumuksen helposti. Sen ei voida taata toimivan, mutta se on löytänyt ongelman suurimman osan ajasta minulle. Onnittelut, nyt olet koodiarkeologi!

Murskaa sitoumuksesi

Olen aiemmin työskennellyt kokopäiväisesti avoimen lähdekoodin projektissa globaalissa organisaatiossa ja opin nopeasti, kuinka tärkeää on sitoa - tai yhdistää - sitoumuksesi. Mielestäni on erinomainen tapa päästä, vaikka työnantajasi ei vaadi sitä. Se on erityisen huomaavainen muille kehittäjille, joiden on tarkistettava ja muokattava luomiasi ominaisuuksia myöhemmin.

Miksi murskata sitoumuksesi?

  • Tietovarastosi avustajien on helpompi lukea. Kuvittele, jos sinulla on tällainen sitoutumisluettelo:
    • Toteuta karuselliliukusäädin
    • Lisää muotoilu karuselliin
    • Lisää painikkeita karuselliin
    • Korjaa outo ongelma IE: ssä karusellilla
    • Säädä karusellin marginaalit

    On paljon helpompaa koota nämä yhdeksi sitoumukseksi, jossa lukee 'Lisää karuselli kotisivulle'.

  • Se kannustaa sinua pitämään sitoutumisviestisi ymmärrettävänä ja merkityksellisenä, jos sinun on aina koottava sitoumuksesi yhdeksi, kun teet vetopyynnön. Kuinka monta kertaa olet nähnyt sitoutumisen otsikolla 'WIP', 'bugikorjaus kirjautumissivulle' tai 'korjaa kirjoitusvirhe'? On tärkeää, että sinulla on asianmukaiset sitoutumisnimet, esim. 'Virhekorjaus # 444-kirjautumissivulle - korjaa välkyntä puuttuvan $ scope -toiminnon vuoksi'.

Syy, miksi et halua ryöstää sitoumuksiasi, voi johtua siitä, että työskentelet hyvin yksityiskohtaisen ja pitkän ominaisuuden parissa, ja haluat pitää itsellesi päivittäisen historian, jos kohtaat virheitä myöhemmin. Sitten ominaisuus on helpompi virheenkorjaus. Kuitenkin, kun tarkistat ominaisuutesi päähaarallesi ja olet varma, että se on virheetön, on silti järkevää kurkistaa.

Tässä skenaariossa olen tehnyt viisi sitoutumista, mutta ne kaikki liittyvät yhteen ominaisuuteen. Sitoumusviestini liittyvät myös liian läheisesti siihen, että ansaitsen olla erillisiä - kaikki tekemäni viestit koskevat sivun muotoilua tätä uutta ominaisuutta varten:

$ git log commit a8fbb81d984a11adc3f72ce27dd0c39ad24403b7 (HEAD -> main) Author: Ursula Clarke < [email protected] > Date: Tue Jan 11 11:16:10 2021 +0100 Import colors commit e2b3ddd5e8b2cb1e61f88350d8571df51d43bee6 Author: Ursula Clarke < [email protected] > Date: Tue Jan 11 11:15:32 2021 +0100 Add new color commit d647ac489ad43b3c6eaea5aceb02b0a7d7e5cf8e Author: Ursula Clarke < [email protected] > Date: Tue Jan 11 10:50:48 2021 +0100 Change text color commit c005d9ceeefd4a8d4e553e825fa40aaafdac446e Author: Ursula Clarke < [email protected] > Date: Tue Jan 11 09:59:57 2021 +0100 Add CSS styles commit 9e046b7df59cef07820cc90f694fabc666731bd2 Author: Ursula Clarke < [email protected] > Date: Tue Jan 11 09:56:28 2021 +0100 Add second paragraph to page commit 5aff973577d67393d914834e8af4c5d07248d628 Author: Ursula Clarke < [email protected] > Date: Mon Jan 10 16:04:22 2021 +0100 Add colors CSS file and edit background color

Voit myös käyttää git merge --squash, mutta mielestäni on selvempää käyttää rebase koska kun valitset kirsikkasi tekemäsi sitoumukset, on helpompi nähdä sitoumuksen kuvaus. Jos suoritat git merge --squash -tunnistetta, sinun on ensin palautettava tekemäsi sitoumukset (git reset --hard HEAD~1 ) ja on helppo sekoittaa siihen, kuinka monella sitoumuksella sinun on tehtävä tämä. Minusta git rebase ollakseen visuaalinen.

Aloita suorittamalla git rebase -i --root ja komentorivillä oletustekstieditori avautuu ja sisältää luettelon sitoutumisista:

pick eb1eb3c Update homepage pick 5aff973 Add colors CSS file and edit background color pick 9e046b7 Add second paragraph to page pick c005d9c Add CSS styles pick d647ac4 Change text color pick e2b3ddd Add new color pick a8fbb81 Import colors # Rebase a8fbb81 onto b862ff2 (7 commands) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like 'squash', but discard this commit's log message # 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

Haluat vain koota viimeiset sitoumuksesi, jolloin voit suorittaa git rebase -i HEAD~3 ja esitetään kolmen viimeisen sitoumuksesi kanssa:

pick eb1eb3c Update homepage pick 5aff973 Add colors CSS file and edit background color pick 9e046b7 Add second paragraph to page # Rebase b862ff2..9e046b7 onto b862ff2 (3 commands) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like 'squash', but discard this commit's log message # 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

Nyt voimme kaataa kaikki sitoumukset ensimmäiseen sitoutumiseen alla olevan kuvan mukaisesti.

pick eb1eb3c Update homepage squash 5aff973 Add colors CSS file and edit background color squash 9e046b7 Add second paragraph to page # Rebase b862ff2..9e046b7 onto b862ff2 (3 commands) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like 'squash', but discard this commit's log message # 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

Kun tallennat tiedoston, Git avaa sitoutumisviestin muokattavaksi.

# This is a combination of 3 commits. # This is the 1st commit message: Update homepage # This is the commit message #2: Add colors CSS file and edit background color # This is the commit message #3: Add second paragraph to page # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # Date: Wed Jan 13 18:31:28 2021 +0100 # # interactive rebase in progress; onto b862ff2 # Last commands done (3 commands done): # squash 5aff973 Add colors CSS file and edit background color # squash 9e046b7 Add second paragraph to page # No commands remaining. # You are currently rebasing branch 'main' on 'b862ff2'. # # Changes to be committed: # new file: .gitignore # new file: css/base.css # new file: css/base.scss # new file: css/colors.css # new file: css/colors.css.map # new file: css/colors.scss # new file: css/common.css # new file: css/common.scss # new file: index.html #

Kun teemme uudelleenkäynnistystä, voimme myös muokata sitoutumisen kuvausta siten, että sitä on helpompi lukea.

Implement new design for homepage. Add .gitignore file for Sass folder. # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. #

Tallenna tämä tiedosto uudelleen ja olet valmis! Kun katsomme uudelleen Git-lokia, voimme nähdä, että on vain yksi puhdas sitoutuminen.

[detached HEAD 574ec7e] Implement new design for homepage. Add .gitignore file for Sass folder. Date: Wed Jan 13 18:31:28 2021 +0100 10 files changed, 215 insertions(+) create mode 100644 .gitignore create mode 100644 css/base.css create mode 100644 css/base.scss create mode 100644 css/colors.css create mode 100644 css/colors.css.map create mode 100644 css/colors.scss create mode 100644 css/common.css create mode 100644 css/common.scss create mode 100644 index.html create mode 100644 verylargefile.txt Successfully rebased and updated refs/heads/main. $ git log commit 574ec7e5d7d7a96427e049cad9806cdef724aedd (HEAD -> main) Author: Ursula Clarke < [email protected] > Date: Wed Jan 13 18:31:28 2021 +0100 Implement new design for homepage. Add .gitignore file for Sass folder.

Git Rebase

Kehittäjät ovat yleensä epäröivät käyttää git rebase koska he tietävät, että uudelleentallennusasemaa voidaan käyttää tiedostojen pysyvään poistamiseen koodikannastasi.

Kuten näimme yllä, git rebase voidaan käyttää koodisi pitämiseen ja siistimiseen sekä poistamiseen - mutta entä jos haluat todella poistaa tiedoston pysyvästi historiasta?

Olen kerran nähnyt tilanteen, jossa kehitystiimimme jäsen oli vahingossa sitoutanut erittäin suuren tiedoston koodipohjaan. Se oli osa paljon isompaa haaraa, joten suuri tiedosto jäi huomaamatta koodin tarkistuksessa ja tarkistettiin virheellisesti päähaaraan. Tästä tuli ongelma aina, kun joku halusi kloonata arkiston uudelleen - lataaminen kesti kauan! Ja tietysti kyseinen tiedosto oli tarpeeton. Se ei olisi ollut ongelma, jos tiedosto olisi viimeinen sitoutuminen päähaaraan - siinä tapauksessa voit suorittaa vain kovan palautuksen (git reset --hard HEAD~1) ja pakottaa haaran työntämisen.

Vastaavasti, jos tiedosto oli ainoa muutos tietyssä sitoutumisessa, voit vain poistaa koko sitoutumisen suorittamalla git reset --hard . Skenaariossamme suuri tiedosto oli kuitenkin sitoutunut muiden koodien rinnalle, jotka halusimme pitää historiassa, secon-to-last-sitoutumisena.

Kun löydät ongelmallisen sitoutumisen, tarkista se käyttämällä git checkout ja tee hash:

$ git checkout ce861e4c6989a118aade031020fd936bd28d535b Note: checking out 'ce861e4c6989a118aade031020fd936bd28d535b'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b HEAD is now at ce861e4 Add CSS styles

Poista tiedosto tai muokkaa koodiasi ja jätä koodi (tai tiedostot) ennalleen.

$ rm verylargefile.txt $ git status HEAD detached at ce861e4 Changes not staged for commit: (use 'git add/rm ...' to update what will be committed) (use 'git checkout -- ...' to discard changes in working directory) deleted: verylargefile.txt no changes added to commit (use 'git add' and/or 'git commit -a')

Varmista, että suoritat git add -A niin, että poistamasi tiedosto on lavalla ja Git tietää poistavan sen. Suorita nyt git commit --amend -v ja Git pyytää sinua muokkaamaan sitoutumisviestiäsi.

Suorita tämän jälkeen git rebase --onto HEAD main. Täällä saatat kohdata joitain yhdistämiskonflikteja, mikä tarkoittaa, että uuden sitoutumisen ja vanhan koodin välillä on ristiriita. Git pyytää sinua ratkaisemaan konfliktin:

$ git add -A $ git status HEAD detached at ce861e4 Changes to be committed: (use 'git reset HEAD ...' to unstage) deleted: verylargefile.txt $ git commit --amend -v [detached HEAD 7c9516a] Add CSS styles Date: Thu Jan 14 14:43:54 2021 +0100 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 css/common.css.map delete mode 100644 verylargefile.txt $ git status HEAD detached from ce861e4 nothing to commit, working tree clean $ git rebase --onto HEAD ce861e4 First, rewinding head to replay your work on top of it... Fast-forwarded HEAD to HEAD.

Jos avaat tiedoston tekstieditorissa, näet, että Git on merkinnyt kaksi hakemistotiedostoa. Sinun tarvitsee vain poistaa yksi tai muokata sitä, jotta pidät haluamasi muutokset.

ApeeScape was created by engineers. We are entrepreneurs, all passionate about working with top tech talent and exciting companies from all over the world.

<<<<<<< HEAD

ApeeScape connects the top 3% of freelance talent all over the world.

======= >>>>>>> Add index file

Koodi <<<<<<< HEAD ja yhtälömerkkien rivi on yksi versio, ja yhtälömerkkien ja >>>>>>> Add index file välinen koodi on versio 'Lisää hakemistotiedosto' -sitoumuksesta. Joten voit nähdä, että yhdessä versiossa on ylimääräinen kappale 'ApeeScape yhdistää 3% freelance-lahjakkuuksista kaikkialla maailmassa', kun taas toisessa ei.

Tallenna muokattu tiedosto ja suorita git add filename jota seuraa git rebase --continue. Jos muutoksia ei ole, voit suorittaa myös git rebase --skip. Uudelleenlaskennan suorittaminen voi viedä jonkin aikaa, jos 'suuren tiedoston' sitoutumisen ja viimeisimmän pääkäyttäjän välillä oli paljon tekemistä.

Ole kärsivällinen, ja jos olet suuressa joukkueessa, muista saada toinen mielipide! On erityisen tärkeää kuulla sulautettavan sitoumuksen kirjoittaneiden henkilöiden kanssa, jos mahdollista.

Muista, että yhdistämismuutokset ovat merkityksellisiä historian tietylle sitoumukselle, eivätkä viimeisimmät muutokset. Eli. Jos muokkaat sitoumusta siitä lähtien, kun sivustosi teksti oli Arial, ja se on nyt Verdana, sinun on silti pidettävä tämä sitoutuminen Arialin historian kanssa kirjasimen kasvona.

Huomaa myös, että jos Git näkee välilyönnin tai rivin loppumerkin, se voi aiheuttaa yhdistämiskonfliktien, joten ole varovainen!

Enemmän kuin vain sitoutu ja vedä

Git on tehokkaampi kuin monet kehittäjät ajattelevat. Jos satut esittelemään aloittelijaa, muista antaa heille vinkkejä näistä korvaamattomista ominaisuuksista. Se tehostaa työnkulkua.

Etsitkö lisätietoja Gitistä? Katso ApeeScape's Git-vinkit ja käytännöt -sivu .

Sivunopeus 101: Säätiö mobiilikäyttöliittymäsuunnittelijoille

Mobiilisuunnittelu

Sivunopeus 101: Säätiö mobiilikäyttöliittymäsuunnittelijoille
Suunnittelu ihmisen käyttäytymiseen: Aineettoman määritteleminen

Suunnittelu ihmisen käyttäytymiseen: Aineettoman määritteleminen

Ux-Suunnittelu

Suosittu Viestiä
Onko Yhdysvaltain oman pääoman joukkorahoitusmarkkinat eläneet odotuksia?
Onko Yhdysvaltain oman pääoman joukkorahoitusmarkkinat eläneet odotuksia?
Fintech-teollisuuden tila (infografiikan kanssa)
Fintech-teollisuuden tila (infografiikan kanssa)
10 Yleisimmät verkkoturvan haavoittuvuudet
10 Yleisimmät verkkoturvan haavoittuvuudet
Kuka tiesi Adobe CC: n voivan kehystää?
Kuka tiesi Adobe CC: n voivan kehystää?
Opas UTF-8-koodaukseen PHP: ssä ja MySQL: ssä
Opas UTF-8-koodaukseen PHP: ssä ja MySQL: ssä
 
Fintech ja pankit: Kuinka pankkisektori voi reagoida häiriöiden uhkaan?
Fintech ja pankit: Kuinka pankkisektori voi reagoida häiriöiden uhkaan?
Shopify-suunnitteluvinkit ja UX: n parhaat käytännöt
Shopify-suunnitteluvinkit ja UX: n parhaat käytännöt
Suorita matematiikka: Mikropalvelusovellusten skaalaus orkesterin kanssa
Suorita matematiikka: Mikropalvelusovellusten skaalaus orkesterin kanssa
Aloittelijan opas vedenalaiseen valokuvaukseen iPhonella
Aloittelijan opas vedenalaiseen valokuvaukseen iPhonella
Motivaation säännöt: Tarina epäonnistuneiden myyntikannustinjärjestelmien korjaamisesta
Motivaation säännöt: Tarina epäonnistuneiden myyntikannustinjärjestelmien korjaamisesta
Luokat
Tuotemerkin SuunnitteluWeb-KäyttöliittymäVarastointiKetterä KykyLähettäminenIhmiset Ja JoukkueetSijoittajat Ja RahoitusTuotteen ElinkaariProsessi Ja TyökalutLiikevaihdon Kasvu

© 2023 | Kaikki Oikeudet Pidätetään

socialgekon.com