Martin Havel Software engineer HAVIT s r o

  • Slides: 128
Download presentation
Martin Havel Software engineer, HAVIT, s. r. o. havel@havit. cz GIT skrz naskrz 1

Martin Havel Software engineer, HAVIT, s. r. o. havel@havit. cz GIT skrz naskrz 1

Motto Kdo říká, že umí s gitem, tak kecá. 2

Motto Kdo říká, že umí s gitem, tak kecá. 2

Co nás dnes čeká? • • • Filozofie a ovládání GITu Základní příkazy GITu

Co nás dnes čeká? • • • Filozofie a ovládání GITu Základní příkazy GITu Jak GIT funguje Pokročilejší techniky Řešení problémů Co se nevešlo 3

Co je to GIT? 4

Co je to GIT? 4

git je populární verzovací systém • https: //insights. stackoverflow. com/survey/2018/ 5

git je populární verzovací systém • https: //insights. stackoverflow. com/survey/2018/ 5

Co je to GIT? • „The stupid content tracker“ • Vytvořený Linusem Torvaldsem pro

Co je to GIT? • „The stupid content tracker“ • Vytvořený Linusem Torvaldsem pro vývoj jádra Linuxu – Po odchodu od Bit. Keeperu • Vyvíjen od roku 2005 dodnes – V poslední době se přidal i Microsoft • Základní vlastnosti – – Rychlý Bezpečný Jednoduché větvení Jednoduché slučování 6

Hlavně distribuovaný • Každý má lokálně svoji kopii repozitáře 7

Hlavně distribuovaný • Každý má lokálně svoji kopii repozitáře 7

Git přímo neřeší oprávnění Oprávnění se řeší na úrovni protokolu. 8

Git přímo neřeší oprávnění Oprávnění se řeší na úrovni protokolu. 8

Ovládání GITu 9

Ovládání GITu 9

Příkazový řádek • Windows – Cmd – Linuxový bash • Linux – bash 10

Příkazový řádek • Windows – Cmd – Linuxový bash • Linux – bash 10

Rozdíly Linux (Unix like) vs Windows Linux Windows Seznam souborů ls dir Mazání rm

Rozdíly Linux (Unix like) vs Windows Linux Windows Seznam souborů ls dir Mazání rm del Obsah souboru cat type Linux Windows Oddělovač adresářů / Řetězce “, ', escape " • Rozdílné chování klávesy TAB – (git bash) 11

Bohatá dokumentace • • • „Man“ pages (git help <příkaz>) Stručný návod (git <příkaz>

Bohatá dokumentace • • • „Man“ pages (git help <příkaz>) Stručný návod (git <příkaz> -h) Návody na https: //git-scm. com Návodné texty u příkazů Hledat „git-příkaz“ A když selžou všechny možnosti, je tu vždy https: //stackoverflow. com/ 12

Git dělí příkazy na dvě úrovně 13

Git dělí příkazy na dvě úrovně 13

Low-level commands (plumbing) git-apply git-hash-object git-mailinfo git-read-tree git-update-ref git-update-servergit-cat-file git-http-backend git-mailsplit git-receive-pack info git-column

Low-level commands (plumbing) git-apply git-hash-object git-mailinfo git-read-tree git-update-ref git-update-servergit-cat-file git-http-backend git-mailsplit git-receive-pack info git-column git-http-fetch git-merge-base git-rev-list git-commit-tree git-http-push git-merge-file git-send-pack git-upload-archive git-upload-pack git-credential git-check-attr git-merge-index git-shell git-var git-credential-cache git-check-ignore git-merge-one-file git-sh-i 18 n git-credential-store git-check-mailmap git-mktag git-show-index git-verify-pack git-daemon git-checkout-index git-mktree git-show-ref git-write-tree git-diff-files git-check-ref-format git-name-rev git-sh-setup git-diff-index git-index-pack git-pack-objects git-stripspace git-diff-tree git-interpret-trailers git-pack-redundant git-symbolic-ref git-fetch-pack git-ls-files git-parse-remote git-unpack-file git-fmt-merge-msg git-ls-remote git-patch-id git-unpack-objects git-for-each-ref git-ls-tree git-prune-packed git-update-index 14

Low-level commands (plumbing) git-apply git-hash-object git-mailinfo git-read-tree git-update-ref git-update-servergit-cat-file git-http-backend git-mailsplit git-receive-pack info git-column

Low-level commands (plumbing) git-apply git-hash-object git-mailinfo git-read-tree git-update-ref git-update-servergit-cat-file git-http-backend git-mailsplit git-receive-pack info git-column git-http-fetch git-merge-base git-rev-list git-commit-tree git-http-push git-merge-file git-send-pack git-upload-archive git-upload-pack git-credential git-check-attr git-merge-index git-shell git-var git-credential-cache git-check-ignore git-merge-one-file git-sh-i 18 n git-credential-store git-check-mailmap git-mktag git-show-index git-verify-pack git-daemon git-checkout-index git-mktree git-show-ref git-write-tree git-diff-files git-check-ref-format git-name-rev git-sh-setup git-diff-index git-index-pack git-pack-objects git-stripspace git-diff-tree git-interpret-trailers git-pack-redundant git-symbolic-ref git-fetch-pack git-ls-files git-parse-remote git-unpack-file git-fmt-merge-msg git-ls-remote git-patch-id git-unpack-objects git-for-each-ref git-ls-tree git-prune-packed git-update-index 15

High-level commands (porcelain) git-add git-am git-annotate git-archimport git-archive git-bisect git-blame git-branch git-bundle git-citool git-clean

High-level commands (porcelain) git-add git-am git-annotate git-archimport git-archive git-bisect git-blame git-branch git-bundle git-citool git-clean git-clone git-commit git-config git-count-objects git-cvsexportcommit git-cvsimport git-cvsserver git-describe git-difftool git-fast-export git-fast-import git-fetch git-filter-branch git-format-patch git-fsck git-gc git-get-tar-commit-id git-grep git-gui git-help git-checkout git-cherry-pick git-imap-send git-init git-instaweb gitk git-log git-mergetool git-merge-tree git-mv git-notes git-p 4 git-pack-refs git-prune git-pull git-push git-quiltimport git-rebase git-reflog git-relink git-remote git-repack git-replace git-request-pull git-rerere git-reset git-revert git-rev-parse git-rm git-send-email git-shortlog git-show-branch git-stash git-status git-submodule git-svn git-tag git-verify-commit git-verify-tag gitweb git-whatchanged git-worktree 16

High-level commands (porcelain) git-add git-am git-annotate git-archimport git-archive git-bisect git-blame git-branch git-bundle git-citool git-clean

High-level commands (porcelain) git-add git-am git-annotate git-archimport git-archive git-bisect git-blame git-branch git-bundle git-citool git-clean git-clone git-commit git-config git-count-objects git-cvsexportcommit git-cvsimport git-cvsserver git-describe git-difftool git-fast-export git-fast-import git-fetch git-filter-branch git-format-patch git-fsck git-gc git-get-tar-commit-id git-grep git-gui git-help git-checkout git-cherry-pick git-imap-send git-init git-instaweb gitk git-log git-mergetool git-merge-tree git-mv git-notes git-p 4 git-pack-refs git-prune git-pull git-push git-quiltimport git-rebase git-reflog git-relink git-remote git-repack git-replace git-request-pull git-rerere git-reset git-revert git-rev-parse git-rm git-send-email git-shortlog git-show-branch git-stash git-status git-submodule git-svn git-tag git-verify-commit git-verify-tag gitweb git-whatchanged git-worktree 17

High-level commands (porcelain) – běžné workflow git-add git-am git-annotate git-archimport git-archive git-bisect git-blame git-branch

High-level commands (porcelain) – běžné workflow git-add git-am git-annotate git-archimport git-archive git-bisect git-blame git-branch git-bundle git-citool git-clean git-clone git-commit git-config git-count-objects git-cvsexportcommit git-cvsimport git-cvsserver git-describe git-difftool git-fast-export git-fast-import git-fetch git-filter-branch git-format-patch git-fsck git-gc git-get-tar-commit-id git-grep git-gui git-help git-checkout git-cherry-pick git-imap-send git-init git-instaweb gitk git-log git-mergetool git-merge-tree git-mv git-notes git-p 4 git-pack-refs git-prune git-pull git-push git-quiltimport git-rebase git-reflog git-relink git-remote git-repack git-replace git-request-pull git-rerere git-reset git-revert git-rev-parse git-rm git-send-email git-shortlog git-show-branch git-stash git-status git-submodule git-svn git-tag git-verify-commit git-verify-tag gitweb git-whatchanged git-worktree 18

High-level commands (porcelain) – běžné workflow git-add git-am git-annotate git-archimport git-archive git-bisect git-blame git-branch

High-level commands (porcelain) – běžné workflow git-add git-am git-annotate git-archimport git-archive git-bisect git-blame git-branch git-bundle git-citool git-clean git-clone git-commit git-config git-count-objects git-cvsexportcommit git-cvsimport git-cvsserver git-describe git-difftool git-fast-export git-fast-import git-fetch git-filter-branch git-format-patch git-fsck git-gc git-get-tar-commit-id git-grep git-gui git-help git-checkout git-cherry-pick git-imap-send git-init git-instaweb gitk git-log git-mergetool git-merge-tree git-mv git-notes git-p 4 git-pack-refs git-prune git-pull git-push git-quiltimport git-rebase git-reflog git-relink git-remote git-repack git-replace git-request-pull git-rerere git-reset git-revert git-rev-parse git-rm git-send-email git-shortlog git-show-branch git-stash git-status git-submodule git-svn git-tag git-verify-commit git-verify-tag gitweb git-whatchanged git-worktree 19

GUI pro Windows 20

GUI pro Windows 20

GUI pro Windows 21

GUI pro Windows 21

Základní příkazy 22

Základní příkazy 22

Inicializace lokálního repozitáře • Inicializace prázdného repozitáře – git init • Napojení na vzdálený

Inicializace lokálního repozitáře • Inicializace prázdného repozitáře – git init • Napojení na vzdálený server – git clone <url> 23

Inicializace lokálního repozitáře • Inicializace prázdného repozitáře – git init • Napojení na vzdálený

Inicializace lokálního repozitáře • Inicializace prázdného repozitáře – git init • Napojení na vzdálený server – git clone <url> • Napojení exitujícího repozitáře – git remote add <shortname> <url> 24

stash workspace stash list status Local repository Stage / index Remote repository log commit

stash workspace stash list status Local repository Stage / index Remote repository log commit -a * add commit push stash pop pull stash apply <s> checkout HEAD fetch stash drop <s> checkout reset HEAD stash reset (--hard | --merge) diff --staged diff (HEAD | <složka>) 25

Poznámky • • • Přejmenování se projeví až při vložení do stage/indexu Větve se

Poznámky • • • Přejmenování se projeví až při vložení do stage/indexu Větve se obnovují do stejného adresáře (standardně) Pull standardně provádí merge (lze přenastavit) GIT porovnává soubory po řádcích GIT je case sensitive 26

Parametry příkazů • Buď – git commit --all --message "text commitu" • nebo –

Parametry příkazů • Buď – git commit --all --message "text commitu" • nebo – git commit -a -m "text commitu" • lze také zadat – git commit -am "text commitu" • ale ne – git commit -ma "text commitu" • Proč? 27

Jak GIT funguje 28

Jak GIT funguje 28

4 úrovně • • Distributed revision control system Revision control system Simple Content tracker

4 úrovně • • Distributed revision control system Revision control system Simple Content tracker Persistent map - dictionary 29

Persistent map SHA 1 - object 30

Persistent map SHA 1 - object 30

d 918213016973 bb 72 bc 3716239 ea 73445291208 Hash SHA 1 „A“ d 35

d 918213016973 bb 72 bc 3716239 ea 73445291208 Hash SHA 1 „A“ d 35 a 7 fdf 2328 b 06500 f 59616 f 2 af 47 f 1 f 1302 a 4 f 4 fb 40 e 328277 c 9032117 b 9 d 838 b 621 f 60054 a 0 e 5 • vytváří otisk dlouhý 160 bitů – 40 hexadecimálních čísel či 40 znaků (0123456789 abcdef) 1 461 501 637 330 902 918 203 684 832 716 283 019 655 932 542 976 (1048) možností 31

git bash DEMO 32

git bash DEMO 32

Simple Content tracker 33

Simple Content tracker 33

Interní ukládání • Všechno v souborovém systému, hlavně v textové podobě – Adresář. git

Interní ukládání • Všechno v souborovém systému, hlavně v textové podobě – Adresář. git • Pouze 4 typy objektů – – Blob Tree Commit Tag 34

DEMO 35

DEMO 35

Struktura Tag Commit Tree Blob d 918213 git happens c 9 baa 33 tree

Struktura Tag Commit Tree Blob d 918213 git happens c 9 baa 33 tree d 2837 a 1 author Havel… committer Havel… First commit d 2837 a 1 100644 blob d 918213 slogan. txt * Všechny SHA-1 byly zkráceny 36

Revision control system 37

Revision control system 37

Ostatní systémy – ukládání změn 38

Ostatní systémy – ukládání změn 38

GIT – ukládání snímků v čase 39

GIT – ukládání snímků v čase 39

DEMO 40

DEMO 40

Struktura Tag tag 2 2354 dad object 650987 b type commit tag 2 tagger

Struktura Tag tag 2 2354 dad object 650987 b type commit tag 2 tagger Havel… message for tag 2 Commit 650987 b tree 576 d 2360 parent 47 e 12 a 0 author Havel… committer Havel… Blob 576 d 2360 100644 blob d 918213 040000 tree d 10 dfea 93 cc 36 d 10 dfea 100644 blob 93 cc 36 new slogan. txt 100644 blob d 918213 old slogan. txt 47 e 12 a 0 tree 8 f 16200 parent c 9 baa 33 author Havel… committer Havel… slogan. txt texty git is the best Third commit Second commit tag 1 Tree 8 f 16200 040000 tree d 10 dfea texty d 918213 git happens c 9 baa 33 tree d 2837 a 1 author Havel… committer Havel… First commit d 2837 a 1 100644 blob d 918213 slogan. txt * Všechny SHA-1 byly zkráceny 41

Distributed revision control system 42

Distributed revision control system 42

Reference • • HEAD – stav workspace master (<branch>) – hlavní větev origin/master (<remote>/<branch>)

Reference • • HEAD – stav workspace master (<branch>) – hlavní větev origin/master (<remote>/<branch>) – vzdálená větev Kromě HEAD jsou to všechno jen konvence 43

Reference https: //learngitbranching. js. org/ DEMO 44

Reference https: //learngitbranching. js. org/ DEMO 44

git tag • Reference jako ostatní • Nemění se s komity TA G 45

git tag • Reference jako ostatní • Nemění se s komity TA G 45

Práce s tagem • Přidání tagu – git tag <tagname> - jednoduchý tag –

Práce s tagem • Přidání tagu – git tag <tagname> - jednoduchý tag – git tag -a -m <message> <tagname> - anotovaný tag • Smazání tagu – git tag -d <tagname> • Zobrazení seznamu tagů – git tag -l 46

tag https: //learngitbranching. js. org/ DEMO 47

tag https: //learngitbranching. js. org/ DEMO 47

Konfigurace a nastavení 48

Konfigurace a nastavení 48

Nastavení • 3 úrovně – System (/etc/gitconfig) – pro všechny uživatele společný – Global

Nastavení • 3 úrovně – System (/etc/gitconfig) – pro všechny uživatele společný – Global (~/. gitconfig) – uživatelské nastavení – Local (. git/config) – nastavení repozitáře 49

Úvodní nastavení git config [--global] user. name "Martin Havel" git config [--global] user. email

Úvodní nastavení git config [--global] user. name "Martin Havel" git config [--global] user. email havel@havit. cz Obsah souboru. gitconfig [user] name = Havel, Martin email = havel@havit. cz 50

Nastavení git config --global core. editor notepad git config --global alias. logf "git log

Nastavení git config --global core. editor notepad git config --global alias. logf "git log --oneline --graph" set LC_ALL=C. UTF-8 51

Nastavení konců řádků Windows vs Linux CRLF vs LF • Nastavení core. autocrlf –

Nastavení konců řádků Windows vs Linux CRLF vs LF • Nastavení core. autocrlf – (true, false, input) Autor: Nightflyer, CC BY-SA 3. 0, https: //commons. wikimedia. org/w/index. php? curid=8923219 52

Soubor. gitattributes • • • text=auto *. bmp binary *. cs text diff=csharp *.

Soubor. gitattributes • • • text=auto *. bmp binary *. cs text diff=csharp *. csproj text merge=union *. sln text eol=crlf merge=union 53

Merge git merge <zdroj> -Xrenormalize git merge <zdroj> -Xignore-space-at-eol 54

Merge git merge <zdroj> -Xrenormalize git merge <zdroj> -Xignore-space-at-eol 54

Soubor. gitignore • Složky bin/ obj/ • Typy souborů *. 7 z *. log

Soubor. gitignore • Složky bin/ obj/ • Typy souborů *. 7 z *. log • Case sensitive [Bb]in [Oo]bj [Tt]est[Rr]esults • Všechny soubory v adresáři rekurzivně. vs/**/* 55

(Mírně) Pokročilejší techniky 56

(Mírně) Pokročilejší techniky 56

Větvení • Vytvoření větve (název musí být bez mezer) – git branch <větev> –

Větvení • Vytvoření větve (název musí být bez mezer) – git branch <větev> – git checkout <větev> • Alternativa – git checkout -b <větev> • Commit jako obvykle • Smazání – git branch –d <větev> 57

Větvení https: //learngitbranching. js. org/ DEMO 58

Větvení https: //learngitbranching. js. org/ DEMO 58

git merge (výchozí stav) Převzato z https: //git-scm. com/book 59

git merge (výchozí stav) Převzato z https: //git-scm. com/book 59

git merge (průběh) Převzato z https: //git-scm. com/book 60

git merge (průběh) Převzato z https: //git-scm. com/book 60

git merge (konečný stav) Převzato z https: //git-scm. com/book 61

git merge (konečný stav) Převzato z https: //git-scm. com/book 61

3 cestné slučování Společný komit master feature Výsledek 62

3 cestné slučování Společný komit master feature Výsledek 62

3 cestné slučování Společný komit master feature Jedna Výsledek 63

3 cestné slučování Společný komit master feature Jedna Výsledek 63

3 cestné slučování Společný komit master feature Jedna Výsledek 64

3 cestné slučování Společný komit master feature Jedna Výsledek 64

3 cestné slučování Společný komit master feature Výsledek Jedna 65

3 cestné slučování Společný komit master feature Výsledek Jedna 65

3 cestné slučování Společný komit master feature Výsledek Jedna Dva Dva a půl 66

3 cestné slučování Společný komit master feature Výsledek Jedna Dva Dva a půl 66

3 cestné slučování Společný komit master feature Výsledek Jedna Dva Dva a půl 67

3 cestné slučování Společný komit master feature Výsledek Jedna Dva Dva a půl 67

3 cestné slučování Společný komit master feature Výsledek Jedna Dva Dva a půl 68

3 cestné slučování Společný komit master feature Výsledek Jedna Dva Dva a půl 68

3 cestné slučování Společný komit master feature Výsledek Jedna Dva Dva a půl 69

3 cestné slučování Společný komit master feature Výsledek Jedna Dva Dva a půl 69

3 cestné slučování Společný komit master feature Výsledek Jedna Dva Dva a půl Tři

3 cestné slučování Společný komit master feature Výsledek Jedna Dva Dva a půl Tři a tři čtvrtě Tři 70

3 cestné slučování Společný komit master feature Výsledek Jedna Dva Dva a půl Tři

3 cestné slučování Společný komit master feature Výsledek Jedna Dva Dva a půl Tři a tři čtvrtě Tři 71

3 cestné slučování Společný komit master feature Výsledek Jedna Dva Dva a půl Tři

3 cestné slučování Společný komit master feature Výsledek Jedna Dva Dva a půl Tři Tři a tři čtvrtě 72

3 cestné slučování Společný komit master feature Výsledek Jedna Dva Dva a půl Tři

3 cestné slučování Společný komit master feature Výsledek Jedna Dva Dva a půl Tři Tři a tři čtvrtě Čtyřicet jedna Čtyřicet dva 73

3 cestné slučování Společný komit master feature Výsledek Jedna Dva Dva a půl Tři

3 cestné slučování Společný komit master feature Výsledek Jedna Dva Dva a půl Tři Tři a tři čtvrtě Čtyřicet jedna Čtyřicet dva 74

3 cestné slučování Společný komit master feature Výsledek Jedna Dva Dva a půl Tři

3 cestné slučování Společný komit master feature Výsledek Jedna Dva Dva a půl Tři Tři a tři čtvrtě Čtyřicet jedna Čtyřicet dva Konflikt 75

https: //learngitbranching. js. org/ DEMO 76

https: //learngitbranching. js. org/ DEMO 76

Vyřešení konfliktů • Ručně – Upravit soubor – Přijmout příkazem add • git nehlídá

Vyřešení konfliktů • Ručně – Upravit soubor – Přijmout příkazem add • git nehlídá obsah souboru • Nástrojem 77

git mergetool • git mergetool --tool-help • git mergetool --tool=p 4 merge 78

git mergetool • git mergetool --tool-help • git mergetool --tool=p 4 merge 78

CMD DEMO 79

CMD DEMO 79

Další příklad git merge Převzato z https: //git-scm. com/book 80

Další příklad git merge Převzato z https: //git-scm. com/book 80

git merge --ff (fast-forward) Převzato z https: //git-scm. com/book 81

git merge --ff (fast-forward) Převzato z https: //git-scm. com/book 81

git merge --no-ff (no fast-forward) Převzato z https: //git-scm. com/book 82

git merge --no-ff (no fast-forward) Převzato z https: //git-scm. com/book 82

git merge fast forward https: //learngitbranching. js. org DEMO 83

git merge fast forward https: //learngitbranching. js. org DEMO 83

git merge vs rebase Převzato z https: //git-scm. com/book 84

git merge vs rebase Převzato z https: //git-scm. com/book 84

git merge vs rebase merge rebase Převzato z https: //git-scm. com/book 85

git merge vs rebase merge rebase Převzato z https: //git-scm. com/book 85

git rebase x git merge x git cherry-pick https: //learngitbranching. js. org DEMO 86

git rebase x git merge x git cherry-pick https: //learngitbranching. js. org DEMO 86

adresace komitů • Absolutně – Identifikátory (SHA 1) – reference – tagy • Relativně

adresace komitů • Absolutně – Identifikátory (SHA 1) – reference – tagy • Relativně – kommity nadřazené absolutnímu 87

Rozdíl mezi ~ a ^ HEAD~2 ~ ^ HEAD^^ HEAD~ HEAD^^2 HEAD^ * HEAD^2^

Rozdíl mezi ~ a ^ HEAD~2 ~ ^ HEAD^^ HEAD~ HEAD^^2 HEAD^ * HEAD^2^ HEAD^2 HEAD * Nefunguje pod Windows, použít „HEAD^“ 88

git log a git diff 89

git log a git diff 89

git add - -patch • Vybírá se, jaká část souboru se vloží do stashe

git add - -patch • Vybírá se, jaká část souboru se vloží do stashe / indexu 90

git add patch, log, diff DEMO 91

git add patch, log, diff DEMO 91

Adresace intervalu Nejdříve pro git log (výběr více komitů) 92

Adresace intervalu Nejdříve pro git log (výběr více komitů) 92

Výběr komitů F A B G H I C D E F J K

Výběr komitů F A B G H I C D E F J K L M 93

Výběr více komitů F I A B G H I C D E F

Výběr více komitů F I A B G H I C D E F J K L M 94

Vyloučení komitů ^D F A B G H I C D E F J

Vyloučení komitů ^D F A B G H I C D E F J K L M 95

Vyloučení komitů ^I F A B G H I C D E F J

Vyloučení komitů ^I F A B G H I C D E F J K L M 96

Lze libovolně kombinovat ^F H L A B G H I C D E

Lze libovolně kombinovat ^F H L A B G H I C D E F J K L M 97

Interval B. . F = ^B F A B G H I C D

Interval B. . F = ^B F A B G H I C D E F J K L M 98

Interval M. . F=^M F A B G H I C D E F

Interval M. . F=^M F A B G H I C D E F J K L M 99

Když to napíšu opačně F. . M = ^F M A B G H

Když to napíšu opačně F. . M = ^F M A B G H I C D E F J K L M 100

Tři tečky F…I = I…F A B G H I C D E F

Tři tečky F…I = I…F A B G H I C D E F J K L M 101

Adresace intervalu A nyní pro diff (výběr dvou komitů) 102

Adresace intervalu A nyní pro diff (výběr dvou komitů) 102

Jednoduchý výběr F I = F. . I A B G H I C

Jednoduchý výběr F I = F. . I A B G H I C D E F J K L M 103

Tři tečky pro diff F…I A B G H I C D E F

Tři tečky pro diff F…I A B G H I C D E F J K L M 104

Tři tečky pro diff I…F A B G H I C D E F

Tři tečky pro diff I…F A B G H I C D E F J K L M 105

Další pokročilé techniky Řešení problémů 106

Další pokročilé techniky Řešení problémů 106

git push --force 107

git push --force 107

git push --force http: //git-school. github. io/visualizing-git/ DEMO 108

git push --force http: //git-school. github. io/visualizing-git/ DEMO 108

git commit - -amend • Přepíše poslední komit – Mění popis – Přidává, nebo

git commit - -amend • Přepíše poslední komit – Mění popis – Přidává, nebo mění soubor • Pomocí git add – Odebírání souboru • git rm --cached <soubor> 109

git commit --amend DEMO 110

git commit --amend DEMO 110

git reset x git checkout x git revert • Reset – Vrátí zpět referenci

git reset x git checkout x git revert • Reset – Vrátí zpět referenci • Checkout – Přesune HEAD • Revert – Vytvoří opačný komit 111

reset x checkout x revert DEMO 112

reset x checkout x revert DEMO 112

git reset / checkout na komitu HEAD Index Workdir reset --soft move with reference

git reset / checkout na komitu HEAD Index Workdir reset --soft move with reference reset [--mixed] move with reference reset --hard move with reference reset checkout move only reset if not changed 113

git reset / checkout na souboru HEAD Index reset file checkout reset file Workdir

git reset / checkout na souboru HEAD Index reset file checkout reset file Workdir reset file 114

Detached HEAD • Změní se příkazem – git checkout <komit> • A vrátíme se

Detached HEAD • Změní se příkazem – git checkout <komit> • A vrátíme se příkazem – git checkout [master|HEAD|<branch>] 115

Detached head https: //learngitbranching. js. org/ DEMO 116

Detached head https: //learngitbranching. js. org/ DEMO 116

git rebase interactive • • • Slučování komitů Rozdělování komitů Přehazování pořadí Změna popisu

git rebase interactive • • • Slučování komitů Rozdělování komitů Přehazování pořadí Změna popisu Úpravu komitů 117

Rebase interactive DEMO 118

Rebase interactive DEMO 118

git clean • git clean – f –d –x force remove whole directories remove

git clean • git clean – f –d –x force remove whole directories remove ignored files, too 119

Co je pouze lokálně • • hooks reflog Branches – standardně se neposílají na

Co je pouze lokálně • • hooks reflog Branches – standardně se neposílají na server tags – standardně se neposílají na server unreferenced commits – časem se ztratí stashed work – je pouze lokálně git notes – poznámky ke komitům 120

Čestná zmínka 121

Čestná zmínka 121

git blame [-M|-C] • Kdo změnil (přesunul/zkopíroval) jaký řádek – C – dohledává zkopírované

git blame [-M|-C] • Kdo změnil (přesunul/zkopíroval) jaký řádek – C – dohledává zkopírované řádky – M – dohledává přesunuté řádky Image courtesy of Ambro/Free. Digital. Photos. net 122

Submodules • Přidání submodulu – git submodule add <repository> • Inicializace submodulu (potřebná před

Submodules • Přidání submodulu – git submodule add <repository> • Inicializace submodulu (potřebná před aktualizací) – git submodule init • Aktualizace submodulu – git submodule update 123

git rerere • Reuse recorded resolution of conflicted merges 124

git rerere • Reuse recorded resolution of conflicted merges 124

git bisect • Hledání chyby metodou půlení intervalu 125

git bisect • Hledání chyby metodou půlení intervalu 125

git filter-branch • • Švýcarský nůž Ohromně mocný Ohromně nebezpečný Příklady – git filter-branch

git filter-branch • • Švýcarský nůž Ohromně mocný Ohromně nebezpečný Příklady – git filter-branch --tree-filter 'rm <filename>' HEAD – git filter-branch -f --msg-filter "sed 's/^git-tfs-id: . *; C([0 -9]*)$/Changeset: 1/g'" -- --all 126

Pull request • Práce se odešle ke schválení • Po schválení se integruje do

Pull request • Práce se odešle ke schválení • Po schválení se integruje do vývojové větve 127

Slovo na závěr? Používejte GIT. 128

Slovo na závěr? Používejte GIT. 128