Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WTF is GIT?

WTF is GIT?

My humble talk about GIT for MERA people

Sergey Arkhipov

November 15, 2011
Tweet

More Decks by Sergey Arkhipov

Other Decks in Programming

Transcript

  1. WTF is GIT? a humble talk by Sergey Arkhipov in

    MERA on 15 Nov 2011 11 Jan 2013
  2. WTF is GIT? Agenda 1. What is GIT? 2. GIT

    vs ClearCase 3. Fully distributed 4. GIT workflow 5. Musthave commands 6. Some tools 7. Credits
  3. What is GIT? Git is an open source, distributed version

    control system designed for speed and efficiency.
  4. What is GIT? Came from Linux world 1991-2002 No source

    code management (tarballs and patches) 2002-2005 Bitkeeper 2005- Git
  5. What is GIT? Git is an open source, distributed version

    control system designed for speed and efficiency.
  6. What is GIT? Snapshots, not patches! Delta storage C1 C2

    spam.py eggs.py build.xml Δ 1 Δ 1 Snapshot storage
  7. What is GIT? Snapshots, not patches! Delta storage C1 C2

    C3 spam.py eggs.py build.xml Δ 1 Δ 1 Δ 2 Δ 2 Snapshot storage
  8. What is GIT? Snapshots, not patches! Delta storage C1 C2

    C3 C4 spam.py eggs.py build.xml Δ 1 Δ 1 Δ 2 Δ 2 Δ 3 Snapshot storage
  9. What is GIT? Snapshots, not patches! Delta storage C1 spam.py

    eggs.py build.xml Snapshot storage C1 A B C
  10. What is GIT? Snapshots, not patches! Delta storage C1 C2

    spam.py eggs.py build.xml Δ 1 Δ 1 Snapshot storage C1 C2 A B C A1 C1 B1
  11. What is GIT? Snapshots, not patches! Delta storage C1 C2

    spam.py eggs.py build.xml Δ 1 Δ 1 Snapshot storage C1 C2 A B C A1 C1 B1
  12. What is GIT? Snapshots, not patches! Delta storage C1 C2

    C3 spam.py eggs.py build.xml Δ 1 Δ 1 Δ 2 Δ 2 Snapshot storage C1 C2 C3 A B C A1 C1 A2 B2 B1 C2
  13. What is GIT? Snapshots, not patches! Delta storage C1 C2

    C3 spam.py eggs.py build.xml Δ 1 Δ 1 Δ 2 Δ 2 Snapshot storage C1 C2 C3 A B C A1 C1 A2 B2 B1 C2
  14. What is GIT? Snapshots, not patches! Delta storage C1 C2

    C3 C4 spam.py eggs.py build.xml Δ 1 Δ 1 Δ 2 Δ 2 Δ 3 Snapshot storage C1 C2 C3 C4 A B C A1 C1 A2 B2 C3 B1 C2 A3 B3
  15. What is GIT? Snapshots, not patches! Delta storage C1 C2

    C3 C4 spam.py eggs.py build.xml Δ 1 Δ 1 Δ 2 Δ 2 Δ 3 Snapshot storage C1 C2 C3 C4 A B C A1 C1 A2 B2 C3 B1 C2 A3 B3
  16. What is GIT? Snapshots, not patches! Delta storage C1 C2

    C3 C4 spam.py eggs.py build.xml Δ 1 Δ 1 Δ 2 Δ 2 Δ 3 Snapshot storage C1 C2 C3 C4 A B C A1 C1 A2 B2 C3 B1 C2 A3 B3
  17. What is GIT? Snapshots, not patches! Delta storage C1 C2

    C3 C4 spam.py eggs.py build.xml Δ 1 Δ 1 Δ 2 Δ 2 Δ 3 Snapshot storage C1 C2 C3 C4 A B C A1 C1 A2 B2 C3 B1 C2 A3 B3
  18. What is GIT? Snapshots, not patches! Delta storage C1 C2

    C3 C4 spam.py eggs.py build.xml Δ 1 Δ 1 Δ 2 Δ 2 Δ 3 Snapshot storage C1 C2 C3 C4 A B C A1 C1 A2 B2 C3 B1 C2 A3 B3
  19. ?

  20. GIT vs ClearCase D1_XXYX_MERA D3_XAYX_MERA D4_XAYX_MERA D3_ZZZ_MERA D1_MAIN_MERA D1_LULZ_MERA D2_LULZ_MERA

    D3_LULZ_MERA D5_MAIN_MERA D1_WOOT_MERA D16_SUPA_MERA D1_ARGH_MERA D1_FEAT_MERA D1_KILL_MERA D3_MAIN_MERA
  21. GIT vs ClearCase D1_XXYX_MERA D3_XAYX_MERA D4_XAYX_MERA D3_ZZZ_MERA D1_MAIN_MERA D1_LULZ_MERA D2_LULZ_MERA

    D3_LULZ_MERA D5_MAIN_MERA D1_WOOT_MERA D16_SUPA_MERA D1_ARGH_MERA D1_FEAT_MERA D1_KILL_MERA D3_MAIN_MERA D34_LOLD_MERA D8_EVERYTHING D1_15L5_MERA D8_PHHH_MERA D46_LBL1_MERA D4_1l1l_MERA NBC_SO_NBC SIMPLE_LABEL
  22. GIT vs ClearCase D1_XXYX_MERA D3_XAYX_MERA D4_XAYX_MERA D3_ZZZ_MERA D1_MAIN_MERA D1_LULZ_MERA D2_LULZ_MERA

    D3_LULZ_MERA D5_MAIN_MERA D1_WOOT_MERA D16_SUPA_MERA D1_ARGH_MERA D1_FEAT_MERA D1_KILL_MERA D3_MAIN_MERA D34_LOLD_MERA D8_EVERYTHING D1_15L5_MERA D8_PHHH_MERA D46_LBL1_MERA D4_1l1l_MERA NBC_SO_NBC SIMPLE_LABEL D46_XYZ_MERA D15_XYZ_MERA D18_XYZ_MERA D46_666_MERA TIRED_TO_COPYPASTE D46_HMM_MERA D46_XYZ_MERA D1_WRONG_MERA
  23. GIT vs ClearCase D1_XXYX_MERA D3_XAYX_MERA D4_XAYX_MERA D3_ZZZ_MERA D1_MAIN_MERA D1_LULZ_MERA D2_LULZ_MERA

    D3_LULZ_MERA D5_MAIN_MERA D1_WOOT_MERA D16_SUPA_MERA D1_ARGH_MERA D1_FEAT_MERA D1_KILL_MERA D3_MAIN_MERA D34_LOLD_MERA D8_EVERYTHING D1_15L5_MERA D8_PHHH_MERA D46_LBL1_MERA D4_1l1l_MERA NBC_SO_NBC SIMPLE_LABEL D1_GUYS_ARE_YOU_HAPPY_MERA
  24. GIT vs ClearCase A3 A1 A2 B1 C2 C1 C3

    B2 B3 sum.c subtract.c multiply.c
  25. GIT vs ClearCase A1 B1 C1 A2 B2 C2 A3

    B3 C3 Snapshot 1 Snapshot 2 Snapshot 3
  26. GIT vs ClearCase A1 B1 C1 A2 B2 C2 A3

    B3 C3 Snapshot 1 Snapshot 2 Snapshot 3
  27. GIT vs ClearCase • 'Baseline' means 'snapshot' in GIT terms.

    • But to deliver you correct snapshots there is the team of masterminds Tieto SWDI who supports label system and makes centralized system redundant. • Each config spec includes over 9000 different labels to create 1 snapshot.
  28. GIT vs ClearCase • And if you want to extend

    your snapshot, you need to add much more additional rules prettifying Frankensteinish settings. • Each rule defines how your local copy of ClearCase will have to request information about certain file or diff by network. • Each operation is performed over the network which causes mortal delays. Everything is very slow. • Without network you cannot even open file or build something. • You need to explain your ClearCase by unreadable labels and awkward rules time after time which snapshot you need instead of straight using it.
  29. GIT vs ClearCase GIT have no such restrictions by design

    • GIT initialy operates snapshots, there is no need in any explicit determining which set of labels you need. • Everything is local. You may pull changes from master repository and continue your work even in aircraft, with branches and whole development story. You may check earliest version even you lost in Tundra without any internet signs. • Your repository is your own game. You can develop in any way you want. Just send your changes into central repository at time. • Operations are really rapid and easy. If you want to select LSV or branch, you do not need to ask central repository for proper set of rules. Just use it!
  30. GIT vs ClearCase Choosing baseline ClearCase way Git way $

    git checkout BASELINE work $ select_config CPP_DESIGN wait for 2 minutes select latest baseline have a cup of tea exclude components push 'Set' button wait for 2 minutes close application wait for 1 minute work
  31. GIT vs ClearCase Branching ClearCase way Git way $ git

    checkout -b hardcore_branch work $ ct mkbrtype hardcore_branch $ ctedcs Type something like element * CHECKEDOUT element <path> …/hardcore_branch/LATEST element <path> /main/cppdev/LATEST -mkbranch hardcore_branch $ ct co -nc <path>/<file> Work if noone checkedout a file
  32. GIT vs ClearCase Building your software ClearCase GIT $ cat

    ./git_build.sh git checkout BASELINE cd <path to one our famed component> <build command> $ cat ./cc_build.sh ct_set_needed_cs -version <LSV> -baseline <BASELINE> cd <path to one our famed component> <build command>
  33. GIT vs ClearCase Building your software ClearCase GIT $ time

    -p ./git_build.sh > /dev/null real 58.28 user 21.20 sys 35.14 $ time -p ./cc_build.sh > /dev/null real 1053 user 266 sys 78.72
  34. GIT vs ClearCase Building your software ClearCase GIT $ time

    -p ./git_build.sh > /dev/null real 58.28 user 21.20 sys 35.14 $ time -p ./cc_build.sh > /dev/null real 1053 user 266 sys 78.72 17.5 minutes vs 1 minute!
  35. GIT vs ClearCase • GIT support your actual way of

    developing software by design. You do not need to juggle tons of labels being in a jail of ClearCase ancient restrictions. • ClearCase does not allow to use modern convenient ways of developing 'out of box'. It provides you with hardcore methods for hacking it only. • Everytime you need something from ClearCase, you need to modify your config spec which already contains text with size around a two volumes of 'War and Peace' book instead of telling it what you really want to get. You do not use ClearCase to simplify your job, everytime you appeal to it to get anything.
  36. Switcher vocabulary • Repository — the copy of project •

    Commit — fixed snapshot of code base in repository • Checking out — about populating working tree with the content of a commit: • Fetch info from repository what files that should be checked out • Populating working tree with those files • There is no locking going on anywhere • git checkout file does not imply any locking • Checking in – in git you do two things instead: • Create commit of your change set, store in local repository (git commit) • Pushing from your local repository to remote repository (git push)
  37. What is GIT? Git is an open source, distributed version

    control system designed for speed and efficiency.
  38. Fully distributed (almost) everything is local which means ― everything

    is fast; ― every clone is backup; ― work offline; ― every known remote repo is branch;
  39. Fully distributed Ivan's repository Nikolay's repository Natasha's repository Integration repository

    Trunk repository Central network repositories Designer Designer QA
  40. Fully distributed Ivan's repository Nikolay's repository Natasha's repository Integration repository

    Trunk repository Central network repositories master master master master master
  41. Fully distributed Ivan's repository Nikolay's repository Natasha's repository Integration repository

    Trunk repository Central network repositories master master master master master
  42. Fully distributed Ivan's repository Nikolay's repository Natasha's repository Integration repository

    Trunk repository Central network repositories master master master master master
  43. Fully distributed Ivan's repository Nikolay's repository Natasha's repository Integration repository

    Trunk repository Central network repositories master master master master master feature_x feature_x
  44. Fully distributed Ivan's repository Nikolay's repository Natasha's repository Integration repository

    Trunk repository Central network repositories master master master master master feature_x feature_x test_y
  45. Fully distributed Ivan's repository Nikolay's repository Natasha's repository Integration repository

    Trunk repository Central network repositories master master master master master feature_x feature_x test_y
  46. Fully distributed Ivan's repository Nikolay's repository Natasha's repository Integration repository

    Trunk repository Central network repositories master master master master master feature_x feature_x test_y BUG!!!
  47. Fully distributed Ivan's repository Nikolay's repository Natasha's repository Integration repository

    Trunk repository Central network repositories master master master master master feature_x feature_x test_y BUG!!! I take it.
  48. Fully distributed Ivan's repository Nikolay's repository Natasha's repository Integration repository

    Trunk repository Central network repositories master master master master master feature_x feature_x test_y bug_y
  49. Fully distributed Ivan's repository Nikolay's repository Natasha's repository Integration repository

    Trunk repository Central network repositories master master master master master feature_x feature_x test_y Ready! bug_y
  50. Fully distributed Ivan's repository Nikolay's repository Natasha's repository Integration repository

    Trunk repository Central network repositories master master master master master feature_x feature_x test_y bug_y
  51. Fully distributed Ivan's repository Nikolay's repository Natasha's repository Integration repository

    Trunk repository Central network repositories master master master master master feature_x feature_x test_y maintenence Ivan, I've done my part
  52. Fully distributed Ivan's repository Nikolay's repository Natasha's repository Integration repository

    Trunk repository Central network repositories master master master master master feature_x feature_x test_y maintenence
  53. Fully distributed Ivan's repository Nikolay's repository Natasha's repository Integration repository

    Trunk repository Central network repositories master master master master master feature_x feature_x maintenence Looks OK!
  54. Fully distributed Ivan's repository Nikolay's repository Natasha's repository Integration repository

    Trunk repository Central network repositories master master master master master feature_x feature_x maintenence test_z
  55. Fully distributed Network down Ivan's repository Nikolay's repository Natasha's repository

    master master master feature_x feature_x test_z BUG!!! I take it.
  56. Fully distributed Network down Ivan's repository Nikolay's repository Natasha's repository

    master master master feature_x feature_x test_z bugfix_z Ready
  57. Fully distributed Network down Ivan's repository Nikolay's repository Natasha's repository

    master master master feature_x feature_x bugfix_z Looks OK! bugfix_z
  58. Fully distributed Ivan's repository Nikolay's repository Natasha's repository master master

    master feature_x feature_x bugfix_z Integration repository Trunk repository Central network repositories master master maintenence
  59. Fully distributed Ivan's repository Nikolay's repository Natasha's repository master master

    master feature_x feature_x Integration repository Trunk repository Central network repositories master master maintenence
  60. Fully distributed Ivan's repository Nikolay's repository Natasha's repository master master

    master feature_x feature_x Integration repository Trunk repository Central network repositories master master maintenence Ready. Need to rebase.
  61. Fully distributed Ivan's repository Nikolay's repository Natasha's repository master master

    master feature_x feature_x Integration repository Trunk repository Central network repositories master master maintenence
  62. Fully distributed Ivan's repository Nikolay's repository Natasha's repository master master

    master feature_x feature_x Integration repository Trunk repository Central network repositories master master maintenence
  63. Fully distributed Ivan's repository Nikolay's repository Natasha's repository master master

    master Integration repository Trunk repository Central network repositories master master maintenence New feature is ready! New feature is ready!
  64. Fully distributed Ivan's repository Nikolay's repository Natasha's repository master master

    master Integration repository Trunk repository Central network repositories master master maintenence regressions
  65. Fully distributed Ivan's repository Nikolay's repository Natasha's repository master master

    master Integration repository Trunk repository Central network repositories master master maintenence Old feature looks done regressions
  66. Fully distributed Ivan's repository Nikolay's repository Natasha's repository master master

    master Integration repository Trunk repository Central network repositories master master maintenence
  67. Fully distributed Ivan's repository Nikolay's repository Natasha's repository Integration repository

    Trunk repository Central network repositories master master master master master
  68. GIT workflow • Create your branch • Edit files •

    Stage your changes • Commit the changes • Rebase your branch from master • Merge to master • Push to central repository
  69. GIT workflow Branching in details A1 A2 A3 master A4

    A5 git checkout master HEAD newbranch
  70. What's up, folks? This presentation contains 262 slides and looks

    like that you have reached the midway. Congrats!
  71. GIT workflow Branching in details • Branch pointer always points

    on the head of a branch; • Creating branch = creating pointer to commit. 41 bytes on your disk; • Removing branch is removing pointer. • Obsolete commits is removed by GIT's GC; • HEAD meta-tag points to a current active branch; • One task = one branch.
  72. GIT workflow Branching in details • Branch pointer always points

    on the head of a branch; • Creating branch = creating pointer to commit. 41 bytes on your disk; • Removing branch is removing pointer. • Obsolete commits is removed by GIT's GC; • HEAD meta-tag points to a current active branch; • One task = one branch.
  73. GIT workflow • Create your branch • Edit files •

    Stage your changes • Commit the changes • Rebase your branch from master • Merge to master • Push to central repository
  74. GIT workflow Staging and commiting A working copy of your

    project Working directory Index Repository
  75. GIT workflow Staging and commiting $ git status # On

    branch master # # Initial commit # nothing to commit (create/copy files and use "git add" to track)
  76. GIT workflow Staging and commiting $ git status # On

    branch master # # Initial commit # nothing to commit (create/copy files and use "git add" to track)
  77. GIT workflow Staging and commiting $ emacs helloworld.c $ cat

    helloworld.c /* This is a classic 'hello world' app */ int main (int argc, char** argv) { puts("Hello, brave new world!"); return 0; }
  78. GIT workflow Staging and commiting $ emacs helloworld.c $ cat

    helloworld.c /* This is a classic 'hello world' app */ int main (int argc, char** argv) { puts("Hello, brave new world!"); return 0; }
  79. GIT workflow Staging and commiting $ git status # On

    branch master # # Initial commit # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # helloworld.c nothing added to commit but untracked files present (use "git add" to track)
  80. GIT workflow Staging and commiting $ git status # On

    branch master # # Initial commit # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # helloworld.c nothing added to commit but untracked files present (use "git add" to track)
  81. GIT workflow Staging and commiting $ git add helloworld.c $

    git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: helloworld.c #
  82. GIT workflow Staging and commiting $ git add helloworld.c $

    git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: helloworld.c #
  83. GIT workflow Staging and commiting $ git commit -m "Useful

    comment" [master (root-commit) 23409d6] Useful comment 1 files changed, 7 insertions(+), 0 deletions(-) create mode 100644 helloworld.c
  84. GIT workflow Staging and commiting $ emacs helloworld.c $ cat

    helloworld.c /* This is a classic 'hello world' app */ #include <stdio.h> int main (int argc, char** argv) { puts("Hello, brave new world!"); return 0; }
  85. GIT workflow Staging and commiting $ git status # On

    branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: helloworld.c # no changes added to commit (use "git add" and/or "git commit -a")
  86. GIT workflow Staging and commiting $ git status # On

    branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: helloworld.c # no changes added to commit (use "git add" and/or "git commit -a")
  87. GIT workflow Staging and commiting $ git status # On

    branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: helloworld.c # no changes added to commit (use "git add" and/or "git commit -a")
  88. GIT workflow Staging and commiting $ git diff --- a/helloworld.c

    +++ b/helloworld.c @@ -1,5 +1,7 @@ /* This is a classic 'hello world' app */ +#include <stdio.h> + int main (int argc, char** argv) { puts("Hello, brave new world!");
  89. GIT workflow Staging and commiting $ git diff --- a/helloworld.c

    +++ b/helloworld.c @@ -1,5 +1,7 @@ /* This is a classic 'hello world' app */ +#include <stdio.h> + int main (int argc, char** argv) { puts("Hello, brave new world!");
  90. GIT workflow Staging and commiting $ git add helloworld.c $

    git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: helloworld.c #
  91. GIT workflow Staging and commiting $ emacs helloworld.c $ cat

    helloworld.c /* This is a classic 'hello world' app */ #include <stdio.h> int main (int argc, char** argv) { printf("Hello, brave new world!\n"); return 0; }
  92. GIT workflow Staging and commiting $ git status # On

    branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: helloworld.c # # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: helloworld.c #
  93. GIT workflow Staging and commiting $ git status # On

    branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: helloworld.c # # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: helloworld.c #
  94. GIT workflow Staging and commiting $ git diff --- a/helloworld.c

    +++ b/helloworld.c @@ -4,6 +4,6 @@ int main (int argc, char** argv) { - puts("Hello, brave new world!"); + printf("Hello, brave new world!\n"); return 0; }
  95. GIT workflow Staging and commiting $ git diff --- a/helloworld.c

    +++ b/helloworld.c @@ -4,6 +4,6 @@ int main (int argc, char** argv) { - puts("Hello, brave new world!"); + printf("Hello, brave new world!\n"); return 0; }
  96. GIT workflow Staging and commiting $ git status # On

    branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: helloworld.c # # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: helloworld.c #
  97. GIT workflow Staging and commiting $ git status # On

    branch master # Changes that are staged: # (use "git reset HEAD <file>..." to unstage) # # modified: helloworld.c # # Changes that are not staged: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: helloworld.c #
  98. GIT workflow Staging and commiting Staged $ git status #

    On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: helloworld.c # # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: helloworld.c #
  99. GIT workflow Staging and commiting Not staged $ git status

    # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: helloworld.c # # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: helloworld.c #
  100. GIT workflow Staging and commiting $ git commit -a Hello

    world of a new generation. # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: helloworld.c #
  101. GIT workflow Staging and commiting [master 4bbbef9] Hello world of

    a new generation. 1 files changed, 3 insertions(+), 1 deletions(-)
  102. GIT workflow Staging and commiting [master 4bbbef9] Hello world of

    a new generation. 1 files changed, 3 insertions(+), 1 deletions(-)
  103. GIT workflow Staging and commiting $ tree -a . ├──

    .git │ ├── branches │ ├── COMMIT_EDITMSG │ ├── config │ ├── description │ ├── HEAD │ ├── hooks │ │ ├── applypatch-msg.sample │ │ ├── ... │ ├── index │ ├── info │ │ └── exclude │ ├── logs │ │ ├── HEAD │ │ └── refs │ │ └── heads │ │ └── master │ ├── objects │ │ ├── 23 │ │ │ └── 409d6895e7cb65306d4ed7d0c558ced6c82753 │ │ ├── ... │ │ ├── info │ │ └── pack │ └── refs │ ├── heads │ │ └── master │ └── tags └── helloworld.c
  104. GIT workflow Staging and commiting 4bbbef94bbbef9b703c8197ec34cb90382c7b8fd5046a9a commit Size Tree Parent

    Author Commiter c4ec5 d8a16 Ivan Petr Hello world of a new generation.
  105. GIT workflow Staging and commiting 4bbbef94bbbef9b703c8197ec34cb90382c7b8fd5046a9a commit Size Tree Parent

    Author Commiter c4ec5 d8a16 Ivan Petr Hello world of a new generation. ./ c4ec5 helloworld.c c4ec5
  106. GIT workflow Staging and commiting 4bbbef94bbbef9b703c8197ec34cb90382c7b8fd5046a9a commit Size Tree Parent

    Author Commiter cfbb1 cae87 Ivan Petr Initial commit. commit Size Tree Parent Author Commiter c4ec5 d8a16 Ivan Petr Hello world of a new generation.
  107. GIT workflow Staging and commiting Repository c1e fa8 135 47b

    aba a5b ccc cfe c0d 0aa 17f ffe 9b4 400 813
  108. GIT workflow Staging and commiting Repository git checkout 47b c1e

    fa8 135 47b aba a5b ccc cfe c0d 0aa 17f ffe 9b4 400 813
  109. GIT workflow Staging and commiting Repository git checkout 47b c1e

    fa8 135 47b aba a5b ccc cfe c0d 0aa 17f ffe 9b4 400 813
  110. GIT workflow Staging and commiting Repository git checkout 47b c1e

    fa8 135 47b aba a5b ccc cfe c0d 0aa 17f ffe 9b4 400 813
  111. GIT workflow Staging and commiting Repository Index ./ helloworld.c farewell.c

    ccc cfe aba c1e fa8 135 47b aba a5b ccc cfe c0d 0aa 17f ffe 9b4 400 813
  112. GIT workflow Staging and commiting Repository Index Working directory ./

    helloworld.c farewell.c ccc cfe aba ./ helloworld.c farewell.c c1e fa8 135 47b aba a5b ccc cfe c0d 0aa 17f ffe 9b4 400 813
  113. GIT workflow Staging and commiting Repository Index Working directory ./

    helloworld.c farewell.c ccc cfe aba ./ helloworld.c farewell.c c1e fa8 135 47b aba a5b ccc cfe c0d 0aa 17f ffe 9b4 400 813
  114. GIT workflow Staging and commiting Repository Index Working directory ./

    helloworld.c farewell.c ccc cfe aba ./ helloworld.c farewell.c c1e fa8 135 47b aba a5b ccc cfe c0d 0aa 17f ffe 9b4 400 813
  115. GIT workflow Staging and commiting Repository Index Working directory ./

    helloworld.c farewell.c ccc cfe aba ./ helloworld.c farewell.c git add c1e fa8 135 47b aba a5b ccc cfe c0d 0aa 17f ffe 9b4 400 813
  116. GIT workflow Staging and commiting Repository Index Working directory ./

    helloworld.c farewell.c ccc cfe aba ./ helloworld.c farewell.c c1e fa8 135 47b aba a5b ccc cfe c0d 0aa 17f ffe 9b4 400 813
  117. GIT workflow Staging and commiting Repository Index Working directory ./

    helloworld.c farewell.c ccc cfe aba ./ helloworld.c farewell.c afa 13a c1e fa8 135 47b aba a5b ccc cfe c0d 0aa 17f ffe 9b4 400 813
  118. GIT workflow Staging and commiting Repository Index Working directory ./

    helloworld.c farewell.c ccc cfe aba ./ helloworld.c farewell.c afa 13a git commit c1e fa8 135 47b aba a5b ccc cfe c0d 0aa 17f ffe 9b4 400 813
  119. GIT workflow Staging and commiting Repository Index Working directory ./

    helloworld.c farewell.c ccc cfe aba ./ helloworld.c farewell.c afa 13a c1e fa8 135 47b aba a5b ccc cfe c0d 0aa 17f ffe 9b4 400 13a 813 afa ae7
  120. GIT workflow Staging and commiting Repository Index Working directory c1e

    fa8 135 47b aba a5b ccc cfe c0d 0aa 17f ffe 9b4 400 13a 813 afa ae7 ./ helloworld.c farewell.c 13a afa aba ./ helloworld.c farewell.c
  121. GIT workflow Staging and commiting Repository Index Working directory c1e

    fa8 135 47b aba a5b ccc cfe c0d 0aa 17f ffe 9b4 400 13a 813 afa ae7 ./ helloworld.c farewell.c 13a afa aba ./ helloworld.c farewell.c
  122. GIT workflow • Create your branch • Edit files •

    Stage your changes • Commit the changes • Rebase your branch from master • Merge to master • Push to central repository
  123. GIT workflow Rebasing A1 A2 A3 master HEAD branch A4

    A5 A6 A7 A8 A8 = A7 with A4 patch
  124. GIT workflow Rebasing A1 A2 A3 master HEAD branch A4

    A5 A6 A7 A8 A9 = A8 with A5 patch A9
  125. GIT workflow Rebasing A1 A2 A3 master HEAD branch A4

    A5 A6 A7 A8 A8 = A5 with A6 patch
  126. GIT workflow Rebasing A1 A2 A3 master HEAD branch A4

    A5 A6 A7 A8 A9 = A8 with A7 patch A9
  127. GIT workflow Rebasing A1 A2 A3 master HEAD branch A4

    A5 A6 A7 A8 Now A6 and A7 commits will be deleted. Forever. A9
  128. GIT workflow Rebasing A1 A2 A3 master HEAD branch A4

    A5 A8 You have broken common branch. If you push it somewhere, it will break other's ones. A9
  129. GIT workflow • Create your branch • Edit files •

    Stage your changes • Commit the changes • Rebase your branch from master • Merge to master • Push to central repository
  130. GIT workflow • Create your branch • Edit files •

    Stage your changes • Commit the changes • Rebase your branch from master • Merge to master • Push to central repository
  131. GIT workflow Push and pull Remote repository Local repository A1

    A2 A3 A4 A5 A6 A7 A8 A9 A10 A1 A2 A3 A4 A11 A13 master master hotfix feature HEAD
  132. GIT workflow Push and pull Remote repository Local repository A1

    A2 A3 A4 A5 A6 A7 A8 A9 A10 A1 A2 A3 A4 A11 A13 master master hotfix feature HEAD git fetch remote
  133. GIT workflow Push and pull Remote repository Local repository A1

    A2 A3 A4 A5 A6 A7 A8 A9 A10 A1 A2 A3 A4 A11 A13 master master hotfix feature HEAD A5 A6 A7 A8 A9 A10 A10
  134. GIT workflow Push and pull Remote repository Local repository A1

    A2 A3 A4 A5 A6 A7 A8 A9 A10 A1 A2 A3 A4 A11 A13 master master hotfix feature HEAD A5 A6 A7 A8 A9 A10 A10
  135. GIT workflow Push and pull Remote repository Local repository A1

    A2 A3 A4 A5 A6 A7 A8 A9 A10 A1 A2 A3 A4 A11 A13 master master hotfix feature HEAD A5 A6 A7 A8 A9 A10 A10 remote/master remote/hotfix
  136. GIT workflow Push and pull Remote repository Local repository A1

    A2 A3 A4 A5 A6 A7 A8 A9 A10 A1 A2 A3 A4 A11 A13 master master hotfix feature HEAD
  137. GIT workflow Push and pull Remote repository Local repository A1

    A2 A3 A4 A5 A6 A7 A8 A9 A10 A1 A2 A3 A4 A11 A13 master master hotfix feature HEAD git push remote feature
  138. GIT workflow Push and pull Remote repository Local repository A1

    A2 A3 A4 A5 A6 A7 A8 A9 A10 A1 A2 A3 A4 A11 A13 master master hotfix feature HEAD A11 A13
  139. GIT workflow Push and pull Remote repository Local repository A1

    A2 A3 A4 A5 A6 A7 A8 A9 A10 A1 A2 A3 A4 A11 A13 master master hotfix feature HEAD A11 A13
  140. GIT workflow Push and pull Remote repository Local repository A1

    A2 A3 A4 A5 A6 A7 A8 A9 A10 A1 A2 A3 A4 A11 A13 master master hotfix feature HEAD A11 A13 feature
  141. GIT workflow Push and pull Remote repository Local repository A1

    A2 A3 A4 A5 A6 A7 A8 A9 A10 A1 A2 A3 A4 A11 A13 master master hotfix feature HEAD A11 A13 feature git push remote master
  142. GIT workflow Push and pull Remote repository Local repository A1

    A2 A3 A4 A5 A6 A7 A8 A9 A10 A1 A2 A3 A4 A11 A13 master master hotfix feature HEAD A11 A13 feature To <url> ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to '<url>' To prevent you from losing history, Non-fast-forward updates were rejected Merge the remote changes (e.g. 'git pull') before pushing again. See the 'Note about fast-forwards' section of 'git push —help' for details.
  143. GIT workflow Push and pull Remote repository Local repository A1

    A2 A3 A4 A5 A6 A7 A8 A9 A10 A1 A2 A3 A4 A11 A13 master master hotfix feature HEAD A11 A13 feature To <url> ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to '<url>' To prevent you from losing history, Non-fast-forward updates were rejected Merge the remote changes (e.g. 'git pull') before pushing again. See the 'Note about fast-forwards' section of 'git push —help' for details.
  144. GIT workflow • Create your branch • Edit files •

    Stage your changes • Commit the changes • Rebase your branch from master • Merge to master • Push to central repository
  145. Must-have commands git diff git status git clone git merge

    git add git log git commit git push git branch git pull git blame git fetch 12 commands
  146. Credits • Git Community Book • ProGit • Help on

    GitHub • Linus Torvalds on GIT • StackOverflow GIT tag • GIT Magic • GIT Immersion • GITCasts • GIT Wizardry • GIT Manual • GIT official site • GIT Reference