Git
Git je distribuovaný systém správy verzí, který vytvořil Linus Torvalds pro Linuxové jádro.
Příkazy
Add
přidá soubory, které se commitnou
git add <soubor>
přidá všechny hlídané změněné soubory
git add -u
Branch
zobrazí existující větve
git branch
zobrazí vzdálené i lokální větve
git branch -a
zobrazí pouze vzdálené větve
git branch -r
smaže lokální větev
git branch -D <větev>
přejmenuje aktuální větev
git branch -m <nový_název>
nastaví upstream k větvi devel na origin/devel
git branch --set-upstream-to=origin/devel devel
zobrazí podrobné informace o větvích včetně upstream
git branch -vv
Clone
naklonuje vzdálený repozitář
git clone <repozitář>
Commit
oprava posledního commitu
git commit -m 'initial commit'
git add forgotten_file
git commit --amend
Config
nastaví jméno uživatele
git config --global user.name "<Jméno Příjmení>"
nastaví e-mail uživatele
git config --global user.email <emailová@adresa>
nastaví defaultní editor na nano
git config --global core.editor nano
nastaví defaultní chování git push
nothing- nic nepushnematching- pushne všechny větve, které mají stejné názvy na obou stranáchupstream- pushne aktuální větev do její upstream větvesimple- jakoupstream, ale pushne jen v případě, že se větve jmenují stejněcurrent- pushne aktuální větev do vzdálené větve se stejným jménem
git config --global push.default <typ např. simple>
nastaví diff tool a merge tool na kdiff3
git config --global diff.tool kdiff3
git config --global merge.tool kdiff3
vypíše URL vzdáleného repozitáře
git config --get remote.origin.url
nastaví vlastní certifikační autoritu
git config --global http.sslCAInfo /cesta/k/cert.pem
Diff
zobrazí soubory, které se změnily od posledního commitu
git diff --name-only
vynechá řádky, které se liší bílými znaky na konci a zobrazuje pouze změněné řádky bez okolních
git diff --ignore-space-at-eol -U0
Difftool
zobrazí rozdíly v souboru mezi lokální verzí a vzdálenou verzí ve větvi master
git difftool master origin/master <soubor>
Format-patch
na stdout vytiskne patch z předchozího commitu do aktuálního
git format-patch HEAD~1 --stdout
Grep
hledá <výraz> ve všech souborech ve všech verzích
git rev-list --all | xargs git grep <výraz>
Checkout
přepnutí na existující větev
git checkout <větev>
přepnutí na větev, která se vytvoří
git checkout -b <nová větev>
vytvoří novou větev se sledování vzdálené větve
git checkout --track <vzdálený server>/<větev>
zruší necommitlé změny v souboru
git checkout -- <soubor>
přidá soubor z jiné větve do větve aktuální
git checkout <větev> <soubor>
Init
Vytvoří prázdný repozitář gitu
git init
vytvoří prázdný repozitář bez bez pracovního adresáře (pro serverovou část)
git init --bare
Log
zobrazí historii projektu
git log
zobrazí poslední dva commity i s rozdílama
git log -p -2
zobrazí pro každý commit jednoduchou statistiku
git log --stat
zobrazí každý commit na jeden řádek
git log --pretty=oneline
zobrazí historii větví formou ASCII grafu
git log --graph
zobrazí commity a změněné soubory
git log --name-status --oneline
zobrazí přehledný obarvený graf s relativním stářím commitů
git log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all
zobrazí historii souboru i s rozdílama
git log -p <soubor>
zobrazí commity, kde se nachází výraz ve změnách
git log -S <výraz>
Ls-files
vypíše soubory v gitu
git ls-files
vypíše počet řádků v souborech kontrolovaných gitem
git ls-files | xargs wc -l
Merge
do stávající větve připojí <větev>
git merge <větev>
Pull
začlení vzdálenou větev do větve lokální
git pull
Push
odešle data na server
git push
pokud na serveru ještě neexistuje větev, tak ji tam pošle
git push <jméno serveru> <větev>
nastaví aktuální větvi jako korespondující vzdálenou větev master
git push --set-upstream origin master
smaže vzdálenou větev
git push origin --delete <větev>
Reset
odebere soubory, které se mají commitnout
git reset <soubor>
zruší poslední commit
git reset --soft HEAD^
vrátí všechny soubory do posledního commitlého stavu
git reset --hard
Remote
přidá vzdálený repozitář na github
git remote add origin git@github.com:<uživatel>/<repozitář>
nastaví url adresu vzdáleného repozitáře
git remote set-url origin git@github.com:<uživatel>/<repozitář>
vytvoření vzdáleného repozitáře z lokálního přes ssh
# na serveru
mkdir /<cesta>/project.git
cd /<cesta>`/project.git
git init --bare
# na klientovi
git remote add origin ssh://<uživatel>@<server>/<cesta>/project.git
git push origin master
# nastaví upstream větev(vhodne pro push.default upstream nebo simple)
git push --set-upstream origin master
zobrazí informace o vzdáleném adresáři
git remote show origin
zobrazí url vzdáleného repozitáře
git remote get-url origin
přejmenuje origin na mainstream
git remote rename origin mainstream
Rm
odebere soubor ze sledovaných gitem
git rm --cached <soubor>
odebere všechny adresáře
git rm --cached -r --ignore-unmatch adresar/**
Rev-list
vypíše hashe pro verze od 1. 6. 2016
git rev-list --all --after=2016-06-01
Show
zobrazí soubor z předposledního commitu
git show HEAD~1:<soubor>
vypíše text souboru z daného commitu se zalomenými řádky
GIT_PAGER='' git show <hash>:<soubor>
Stash
pokud existují necommitlé změny, které chceme uchovat přesto chceme zavolat pull je možné zavolat příkaz stash, který sková aktuální změny
git stash
git pull
git stash pop
pokud chceme zavolat commit v jiné větvi (třeba devel) než aktuální, je možné využít stash
git stash
git checkout devel
git stash pop
Status
Zobrazí co se bude commitovat co ne a další informace
git status
zobrazí soubory, které nejsou přidané
git status -u
zobrazí soubory, které se ignorují
git status --ignored
Tag
zobrazí všechny tagy
git tag
vytvoří tag v1.1 s popisem verze 1.1
git tag -a v1.1 -m 'verze 1.1'
smaže tag v1.1
git tag -d v1.1
pokud tag v1.1 existuje, tak ho přesune
git tag -fa v1.1
.gitignore
soubor, který určuje, které soubory git ignoruje
ignoruje všechny soubory kromě *.py (nevztahuje se na ui_*.py) *.ui
Makefile, *.png soubory v adresáři images a přidá adresář src se všema
podadresářema
!*.py
!*.ui
!Makefile
!images/
!images/*.png
!src/
!src/**/
# komentar
ui_*.py