{"id":13452307,"url":"https://github.com/gaui/git","last_synced_at":"2026-01-21T20:47:02.369Z","repository":{"id":30286601,"uuid":"33838187","full_name":"gaui/git","owner":"gaui","description":"Git guide in Icelandic","archived":false,"fork":false,"pushed_at":"2015-04-16T23:35:47.000Z","size":124,"stargazers_count":36,"open_issues_count":15,"forks_count":6,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-07-02T15:41:04.473Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gaui.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-04-12T23:29:55.000Z","updated_at":"2024-01-14T00:40:17.000Z","dependencies_parsed_at":"2022-08-26T07:21:00.735Z","dependency_job_id":null,"html_url":"https://github.com/gaui/git","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaui%2Fgit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaui%2Fgit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaui%2Fgit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaui%2Fgit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gaui","download_url":"https://codeload.github.com/gaui/git/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":213325167,"owners_count":15570244,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T07:01:20.138Z","updated_at":"2026-01-21T20:47:02.363Z","avatar_url":"https://github.com/gaui.png","language":null,"funding_links":[],"categories":["Others"],"sub_categories":[],"readme":"# Git leiðbeiningar á íslensku\n\nÞessar leiðbeiningar eru miðaðar fyrir byrjendur sem vilja læra á Git. Ef þið sjáið villur eða viljið bæta einhverju við, endilega sendið PR *(Pull Request)*.\n\nÉg er búinn að vera að halda utan um Git leiðbeiningar í PDF-formi [hér](http://gaui.is/stuff/Git.pdf) en ákvað að deila þessu og leyfa fólki að bæta við og breyta - og hvað er betra til þess en Git, GitHub og Markdown?\n\n## Sækja Git\n\nHægt er að sækja Git fyrir öll helstu stýrikerfin á [http://git-scm.com](http://git-scm.com).\n\n### Mac OS X\n\nÞægilegasta leiðin til að setja upp Git á Mac (og halda utan um uppfærslur) er í gegnum [Homebrew](http://brew.sh), en það er tól sem gerir manni kleift að halda utan um pakka/tól fyrir Mac. Eftir að brew hefur verið sett upp þarf einfaldlega að keyra `brew install git`. Til að sækja uppfærslur keyrir maður `brew upgrade git`\n\n## Hvað er Git?\n\nGit er kerfi fyrir dreifða útgáfustjórn *(e. distributed revision control system)*. Ólíkt öðrum kerfum getur Git séð um útgáfustjórn án viðkomu servers. Önnur kerfi eins og SVN, TFS (TFVC), o.s.frv. eru miðstýrð *(e. centralized)* sem þýðir að útgáfustýringin er á miðlægum server.\n\nGit er hugbúnaður sem búinn til var af Linus Torvalds, höfundi Linux stýrikerfisins. Linus bjó til Git til að sjá um útgáfustjórn fyrir Linux kernelinn, en gaf það svo út á endanum til almennings. Git er í dag vinsælasta kerfið til að sjá um útgáfustjórnun.\n\nFyrir þá sem vilja kynna sér Git undir húddinu geta lesið nánar [hér](http://wildlyinaccurate.com/a-hackers-guide-to-git/).\n\n## Uppsetning\n\nEftir uppsetningu á Git fyrir Windows er opnað *Git Bash*, sem er skel fyrir Git. Ef Git er sett upp fyrir Linux/Mac er ekki þörf á *Git Bash*, þar sem notuð er skelin sem fylgir stýrikerfinu.\n\nÁður en við byrjum er gott að setja inn nafn og netfang, sem fest verður við allar breytingar sem þú gerir.\n\nSkipanirnar eru eftirfarandi:\n\n    git config --global user.name \"John Doe\"\n    git config --global user.email johndoe@example.com\n\n\n## Nýtt repository\n\nTil að byrja útgáfustjórn með Git er búin til svokölluð geymsla *(e. repository)*. Þetta er mappan sem inniheldur t.d. allan kóðann þinn sem þú vilt útgáfustýra.\n\nTil að búa til nýtt repository ferðu í möppu sem þú vilt útgáfustýra og skrifar inn eftirfarandi skipun:\n\n    git init\n\nÞá er mappan orðin að Git repository. Flóknara er það ekki.\n\n### .gitignore\n\nÞegar kóði er útgáfustýrður og repository er deilt með öðrum forriturum, vill maður oft sleppa ákveðnum skrám. Dæmi um slíkar skrár eru t.d. binary og auto-generated skrár:\n\n- IDE config fyrir notandann\n- Loggar\n- Compiled binary (bin, obj, o.s.frv.)\n- o.s.frv.\n\nÞá kemur `.gitignore` skráin að góðum notum. Git hunsar allar skrár í þessari skrá, nema þeim hafi verið bætt við áður en `.gitignore` skráin var búin til (þar sem Git er byrjað að tracka skránna). En þá er hægt að keyra `git rm --cached \u003cfile\u003e` til að eyða skránni úr Git, en sleppa því að eyða skránni úr Working Directory.\n\nBest er að búa til `.gitignore` skránna í rótinni á repository'inu (þar sem `.git` mappan er staðsett).\n\nGitHub heldur úti sér repository fyrir `.gitignore` template sem má finna [hér](https://github.com/github/gitignore).\n\n## Git högun\n\n### Local vs. Remote\n\n- Commit eru breytingar sem þú gerir *local* á þinni tölvu\n - *\"Ég er búinn að committa breytingunum\"*\n- Push eru *local* breytingarnar þínar, færðar yfir á server/remote\n - *\"Ég er búinn að pusha breytingunum\"*\n\n### Flæði\n\nFlæðið er í stuttu máli eftirfarandi:\n\n- Working Directory (Untracked)\n- Staging Area (Index)\n- Local Repository\n- Remote Repository (origin)\n\n![Git diagram](http://i.imgur.com/QZ8qeoZ.png)\n\nTil að líkja Git saman við eitthvað í raunveruleikanum þá má líkja því saman við skrif á bók:\n\n- **Working Directory (Untracked)**\n - Þú byrjar að skrifa á fullu og býrð til drög/uppköst sem þú ýmist vistar eða hendir.\n- **Staging Area (Index)** - `git add`\n - Þú tekur saman það sem þú vilt gefa út og setur í umslag.\n- **Local Repository** - `git commit`\n - Þú setur umslagið í kassa með einkvæmum merkimiða ásamt lýsingu, dagsetningu og höfundi verksins.\n- **Remote Repository** - `git push`\n - Þú sendir kassann til ritstjórnar/útgefanda.\n\n### SSH\n\nÞegar átt eru samskipti við server (remote) er oft notað SSH. SSH samskipti eru dulkóðuð og mjög örugg.\n\nTil þess að geta átt örugg samskipti við servera eins og t.d. GitHub þarf maður að auðkenna sig gagnvart honum. Gengið er í gegnum ferlið einu sinni (fyrir hverja tölvu) og er það eftirfarandi:\n\n- [Búa til GitHub aðgang](https://github.com/join)\n- [Búa til SSH lykla par](https://help.github.com/articles/generating-ssh-keys/#step-2-generate-a-new-ssh-key)\n- [Tengja SSH public lykil við GitHub aðganginn þinn](https://help.github.com/articles/generating-ssh-keys/#step-4-add-your-ssh-key-to-your-account)\n\n### Commit\n\nHvert commit í Git er með upplýsingar um hvernig repository'ið (Working Directory) lítur út á þeim tíma. Í hverju committi eru upplýsingar um höfund þess og dagsetningu. Hvert commit fær einkvæmt SHA1 hash gildi, eins konar kennimerki *(e. identifier)* fyrir committið.\n\nCommit í Git eru með pointer á committið þar á undan *(parent commit*). Þannig er sagan uppbyggð í Git. Eins og sjá má á neðangreindri mynd.\n\n![git commit](http://i.imgur.com/zJoIbzH.png)\n\n### Branch\n\nBrönch í Git eru bendar *(e. pointer)* á tiltekin commit. Git er allt byggt á pointerum.\n\n![Pointers](http://i.imgur.com/SG1oyOQ.png)\n\nÁ myndinni hér fyrir ofan má sjá eftirfarandi:\n\n- HEAD pointerinn bendir á master pointerinn\n- master pointerinn bendir svo á C2 committið\n- test pointerinn bendir á T1 committið\n- C1 er fyrsta committið\n- T1 committið var búið til út frá C2 (C2 er parent T1)\n- C2 comittið var búið til út frá C1 (C1 er parent C2)\n- Þegar þú gerir `checkout master` ertu á C2 committinu\n- Þegar þú gerir `checkout test` ertu á T1 committinu\n\n#### HEAD\n\nÍ Git er bendir *(e. pointer)* sem ber heitið *HEAD*. Þessi pointer færist í hvert skipti sem þú ferð á nýjan stað í repository'inu (notar `git checkout` skipunina). Þetta er því í raun bendir á þann stað sem þú ert staddur á núna.\n\n#### Detached HEAD\n\nÞetta er þegar *HEAD* pointerinn bendir ekki á tiltekið branch, heldur á tiltekið commit í Git.\n\nSegjum að þú farir á committið á undan `master`, þá ertu kominn með detached HEAD.\n\n## Skipanir\n\nHér fyrir neðan er yfirlit yfir helstu skipanir í Git.\n\n### git init\n\nÞetta býr til nýtt repository og er upphafið á öllu.\n\n    Initialized empty Git repository in c:/Users/gaui/Desktop/test/.git/\n\n### git status\n\nÞetta er mest notaðasta skipunin í Git. Hún sýnir á hvaða branchi þú ert ásamt öllum breytingum sem hafa verið gerðar frá síðasta committi. Sýnir hvaða skrá eru untracked (ekki verið að fylgjast með), hvaða skrám hefur verið breytt/eytt ásamt því hvaða breytingar hafa verið *staged* (gerðar tilbúnar fyrir commit).\n\n![git status](http://i.imgur.com/rWCZZMb.png)\n\nÁ myndinni hér fyrir ofan er:\n\n- *baz.txt* breytt og sú breyting hefur verið staged (tilbúin fyrir commit).\n- *bar.txt* eytt en sú breyting hefur ekki verið staged.\n- *foo.txt* breytt sú breyting hefur ekki verið staged.\n- *smuu.txt* bætt við, en Git er ekki að fylgjast með henni (untracked).\n\n### git checkout\n\nÍ Git er bendir *(e. pointer)* sem ber heitið *HEAD*. Þessi pointer færist í hvert skipti sem þú ferð á nýjan stað í repository'inu - og til þess notaru þessa skipun.\n\n#### git checkout `\u003cbranch\u003e`\n\nFærir þig yfir á branch og færir um leið *HEAD* pointerinn.\n\n#### git checkout -b `\u003cbranch\u003e`\n\nBýr til nýtt branch og færir þig yfir á það.\n\n### git add\n\nBæta við skrá/möppu í Staging Area (Index) þannig breytingin verði tilbúin fyrir commit. Eins og á myndinni hér fyrir ofan var *baz.txt* bætt við í Staging Area.\n\n#### git add `\u003cfile\u003e`\n\nTiltekinni skrá bætt við í Staging Area.\n\n#### git add `.`\n\nÖllum skrám/breytingum bætt við í Staging Area.\n\n#### git add `-u`\n\nBæta við öllum eyddum skrám í Staging Area.\n\n#### git add `-p`\n\nLeyfir þér að velja hvaða breytingar þú vilt setja í Staging Area. Segjum að þú gerir þrjár breytingar í sömu skránni. Þú getur stage'að tveimur af þessum þremur breytingum í skránni.\n\n### git reset\n\nÞessi skipun skiptist í þrjá parta; mixed, soft og hard. Default er `--mixed`\n\n#### git reset `--mixed`\n\nÞessi skipun er defaultið þegar þú skrifar bara `git reset`. Þetta endurstillir Staging Area (Index) og breytir ekki Working Directory.\n\nÞetta er t.d. gagnlegt þegar þú vilt taka skrár úr Staging Area (Index).\n\n#### git reset `--soft`\n\nÞessi skipun endurstillir ekki Staging Area (Index) og breytir ekki Working Directory.\n\nÞetta er t.d. gagnlegt þegar þú vilt setja mörg local commit í eitt, þar sem þetta hreyfir hvorki við Staging Area (Index) né Working Directory.\n\n**Dæmi:**\n\n    * da883dc (HEAD, master) Three\n    * 92d3eb7 Two\n    * c6e82d3 One\n    * e1e8042 Start here\n    \n    git reset --soft e1e8042\n    git log --oneline\n    \n    * e1e8042 Start here\n    git commit\n\nÞarna er öllum breytingunum komið fyrir í `e1e8042` *(Start here)* committinu, og þú getur pushað því sem einu committi og sleppt þessum þremur auka.\n\n#### git reset `--hard \u003ccommit\u003e`\n\nÞetta breytir Working Directory alveg eins og í committinu sem þú tilgreinir.\n\nÞetta er notað mest til að bakka með allar breytingar sem þú hefur gert síðan síðasta commit.\n\nÞetta er hættuleg aðgerð og getur haft alvarlegar afleiðingar í för með sér.\n\nEkki nota þetta ef þú ert búinn að pusha á server.\n\n### git revert `\u003ccommit\u003e`\n\nÞessi skipun er notuð til þess að bakka með breytingar sem búið er að pusha á server. Hún býr til nýtt commit þar sem öllum breytingunum í committinu er snúið við. + verður - og - verður +\n\n### git commit\n\nBýr til nýtt commit í local repository með staged breytingum.\n\n#### git commit `-m \"Commit Message\"`\n\nBýr til nýtt commit í local repository með staged breytingum ásamt skilaboðunum `\"Commit Message\"`.\n\n    $ git commit -m \"Commit Message\"\n    [master f4b8f86] Commit Message\n    2 files changed, 2 insertions(+), 2 deletions(-)\n\n### git remote\n\nRemote er vísun í eitthvað repository uppstreymi, til dæmis GitHub. Þetta gæti alveg eins verið vísun í aðra möppu á tölvunni þinni með sama repository. Git er alveg sama, svo framarlega sem það er Git repository.\n\n#### git remote `add origin git@github.com:user/repo.git`\n\nBætir við nýrri remote vísun sem ber heitið `origin` og vísar á repository á GitHub.\n\nÞetta þarf ekki að heita `origin`, gæti þess vegna verið `github`. `origin` er bara venja í Git og stendur fyrir uppruna repository'sins.\n\n#### git remote `-v`\n\nSýnir öll remote í núverandi repository.\n\n### git clone `\u003crepository\u003e`\n\nKlónar Git repository í nýja möppu.\n\n![git clone](http://i.imgur.com/TQJ5CHu.png)\n\nÁ myndinni hér fyrir ofan klónaði ég repository undir slóðinni *C:\\Users\\gaui\\Desktop\\test* yfir í nýja möppu, sem ber heitið *test_clone*. `ls` skipunin sýnir bara hvaða skrár urðu til.\n\nEf *test* repositoryið væri með langa sögu af breytingum, myndi klónaða repository'ið innihalda alla þá sögu. Þannig ef þú klónar repository á GitHub færðu alla breytingasöguna yfir til þín.\n\n### git push\n\n#### git push `origin \u003cbranch\u003e`\n\nPushar local branchi yfir á `origin` remote repository'ið.\n\nEins og í dæminu hér að ofan vísar `origin` á `git@github.com:user/repo.git` þannig við myndum senda allar breytingarnar þangað.\n\n#### git push `origin :\u003cbranch\u003e`\n\nEyðir branchi á `origin` remote repository'inu. Taktu eftir tvípunktinum á undan branch nafninu.\n\n### git pull `origin \u003cbranch\u003e`\n\nSækir allar breytingar frá `origin` remote repository'inu.\n\nEins og í dæminu hér að ofan vísar `origin` á `git@github.com:user/repo.git` þannig við myndum sækja allar nýjustu breytingarnar þaðan.\n\n### git log\n\nSýnir lista yfir öll commit á núverandi branchi.\n\n#### git log `\u003cbranch\u003e`\n\nSýnir lista yfir öll commit á ákveðnu branchi.\n\n#### git log `\u003cbranch1\u003e..\u003cbranch2\u003e`\n\nSýnir lista yfir öll commit sem eru í *branch2* en ekki í *branch1*.\n\n#### git log `\u003cbranch1\u003e...\u003cbranch2\u003e`\n\nSýnir lista yfir commit sem eru annað hvort í *branch1* eða *branch2*.\n\nHér fyrir neðan má sjá mynd sem útskýrir þetta betur:\n\n![git log](http://i.imgur.com/vM7PtCn.png)\n\n### git diff\n\nSýnir breytingar frá síðasta committi (þær breytingar sem þú ert að vinna í).\n\n#### git diff `...\u003cbranch\u003e`\n\nSýnir mun/diff á committum á branchi, sem eru ekki á branchinu sem þú ert á núna *(HEAD)*.\n\n#### git diff `\u003cbranch1\u003e...\u003cbranch2\u003e`\n\nSýnir mun/diff á tveimur local brönchum. Sýnir þær breytingar sem eru í *branch2* en ekki *branch1*.\n\nSýnir þér mun milli *\"merge base\"* þessara tveggja brancha og endans á *branch2*.\n\nHér fyrir neðan má sjá mynd sem útskýrir þetta betur:\n\n![git diff](http://i.imgur.com/1PfbKPU.png)\n\n#### git diff `--staged`\n\nSýnir allar breytingar sem eru í Staging Area (Index).\n\n### git branch\n\nSýnir lista yfir öll local brönch.\n\n#### git branch `--remote`\n\nSýnir lista yfir öll remote brönch.\n\n#### git branch `--all`\n\nSýnir lista yfir öll brönch (local og remote)\n\n#### git branch `\u003cbranch\u003e`\n\nBýr til nýtt local branch.\n\n#### git branch `-d \u003cbranch\u003e`\n\nEyðir local branchi sem hefur verið merge'að inn í master.\n\n#### git branch `-D \u003cbranch\u003e`\n\nEyðir local branchi sem hefur *EKKI* verið merge'að inn í master.\n\n### git rm\n\n#### git rm `\u003cfile\u003e`\n\nEyðir skrá úr Git. Eyðir bæði úr Working Directory og stage'ar breytingunni. Þú þarft svo að committa breytingunni.\n\n#### git rm `--cached \u003cfile\u003e`\n\nEyðir skrá úr Git. Stage'ar breytingunni en eyðir skránni ekki úr Working Directory.\n\n### git clean `-f -d`\n\nEyðir untracked skrám úr Working Directory.\n\n`-f` = Force `-d` = Directories\n\n### git merge `\u003cbranch\u003e`\n\nMerge'ar branch inn í *current branch* sem þú ert á.\n\nTil að sjá hvaða branch þú ert á skaltu nota `git status` skipunina.\n\n### git prune `origin --dry-run`\n\nSýnir öll local brönch sem passa ekki við remote brönch.\n\n`--dry-run` = Bara sýna, ekki breyta neinu.\n\n### git tag\n\nBýr til pointer á tiltekið commit. Þetta er svipað og branch.\n\n#### git tag v1.0\n\nBýr til pointerinn `v1.0` á committið sem þú ert staddur á.\n\n## Aliases\n\nHér fyrir neðan eru gagnlegir aliasar (sérsniðnar skipanir) sem hægt er að nota.\n\n### git unpushed\n\nSýnir öll commit sem ekki er búið að pusha.\n\n    git config --global alias.unpushed \"log --branches --not --remotes\"\n\n### git lg\n\nSýnir öll commit á fallegu formi (með branch grafi).\n\n    git config --global alias.lg \"log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)\u003c%an\u003e%Creset' --abbrev-commit\"\n\n### git tags\n\nSýnir öll tög og hvenær þau voru búin til.\n\n    git config --global alias.tags \"log --tags --simplify-by-decoration --pretty='format:%ai %d'\"\n\n### git branches\n\nSýnir öll brönch í röð eftir því hvenær var síðast committað á þau.\n\n    git config --global alias.branches \"for-each-ref --sort=-committerdate refs/heads/ --format='%(committerdate:short) %(authorname) %(refname:short)'\"\n\n### git recent\n\nSýnir brönch sem nýbúið er að vinna á.\n\n    git config --global alias.recent \"for-each-ref --count=10 --sort=-committerdate refs/heads/ --format='%(refname:short) %(committerdate:relative)'\"\n\n### git stats\n\nSýnir yfirlit yfir fjölda committa og nöfn höfunda.\n\n    git config --global alias.stats \"shortlog -s -n\"\n\n### git conflicts\n\nSýnir skrár sem eru í *conflicted state*.\n\n    git config --global alias.conflicts \"diff --name-only --diff-filter=U\"\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgaui%2Fgit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgaui%2Fgit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgaui%2Fgit/lists"}