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, paikallisestigit reset
, jonka avulla voit siivota koodisi ennen sitoutumistagit bisect
, toiminto, jonka avulla voit etsiä huonoja tekojagit squash
, jonka avulla voit yhdistää sitoumuksesigit rebase
, joka mahdollistaa muutokset haarasta toiseenGit 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 $
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.
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.
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…
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:
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!
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?
On paljon helpompaa koota nämä yhdeksi sitoumukseksi, jossa lukee 'Lisää karuselli kotisivulle'.
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.
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!
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 .