Git in action


Published on

  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Git in action

  1. 1. Git in Action
  2. 2. Agenda● Introduction● Action● Q&A
  3. 3. Introduction
  4. 4. Distributed Version Control Remote Repository Repository Repository(public or privat) push pull Workspace Workspace Workspace Local Repository Repository Repository Alice Bob Charlie
  5. 5. Git repositoryrepository = object database .git/objects
  6. 6. Git repositoryid(object) = SHA1(object content) 4afd 57aa 34da 45f5 90ff aabc 3daa 9873 78dd 12df 8810 675b aacc 456c ddaa.git/objects/45/6c...
  7. 7. Git repositorycontent is stored in blob objects => File 4afd 57aa 34da 45f5 90ff aabc 3daa 9873 78dd 12df 8810 675b aacc 456c ddaa
  8. 8. Git repositorystructure is stored in tree objects => Directory 4afd 57aa 34da 45f5 90ff aabc 3daa 9873 78dd 12df 8810 675b aacc 456c ddaa
  9. 9. Git repositoryHistory is stored in commit objects => Authenticated hierarchical snapshots 4afd 57aa 90ff 34da 45f5 78dd 9873 aabc 8810 3daa ddaa 12df aacc 456c 675b
  10. 10. Git repository
  11. 11. Git repositoryreferences are stored as tag objects => (Signed)symbolic link 4afd 57aa 90ff 34da 45f5 78dd 9873 aabc 8810 3daa ddaa 12df aacc 456c 675b
  12. 12. Git repository repository entry point => symbolic link branches master 4afd 57aa 90ff 34da 45f5 78ddtags aabc 8810 9873 3daa ddaa 12df aacc 456c 675b
  13. 13. Action
  14. 14. The most important commands● add ● fetch ● rebase● bisec ● grep ● remote● branch ● init ● reset● checkout ● log ● rm● clone ● merge ● show● commit ● mv ● stash● config ● pull ● status● diff ● push ● tag
  15. 15. Configuration in $HOME/.gitconfiggit config --global "Some name"git config --global some@emailgit config --global color.branch autogit config --global color.diff autogit config --global color.interactive autogit config --global color.status autogit config --global merge.tool meldgit config --global core.editor vim
  16. 16. Initializing a repository● Create a new repository git init● Clone an existing repository git clone <url>● Possible URLs: ● local directory, ssh://, git://, rsync://, ftp:// etc.
  17. 17. Show the status● Simply call git status● This will show the lifecycle of the files➔ A file which is indexed and modified afterwards, must be added explicitly to the index again!
  18. 18. The IndexWorking Copy Index Repository git add, git commit rm, mv● Buffer between working copy and repository● Describes whats commited next● Shortcut: git commit -a
  19. 19. Commit● Changes stored in the index are written into the repository and get a new SHA1 checksum● The HEAD-reference points to the new commit● The last commit can be changed and re-committed using the --amend parameter, e.G. typos in the comment, missed changes to be commited etc. git commit --amend
  20. 20. Show differences● Between workspace and index git diff● Between index and the last commit git diff --staged● Between the workspace and the last commit git diff HEAD● Between two commits git diff $commit $commit● Between current branch and another one git diff branch_name
  21. 21. Object references● SHA1: d37f32a8058b2c4b5d1b1c55c4cab41611899cb3● Short SHA1: d37f32a● Tags: v1.5.1● Local branch: master● Remote branch: origin/master● Checkout: HEAD● Last Fetch: LAST_FETCH● Previous Head: ORIG_HEAD
  22. 22. Object references● Parents: Name^, Name^^^, Name~10, Name^2, …● What was yesterday? Name@{yesterday}● What was on ...? Name@{1 June}● What was … days before?Name@{3}● What happened since...? --since=“2 weeks ago“● What was until ...? --until=“1 week ago“● Who has...? --committer=pattern● What was between...? name1..name2
  23. 23. Show me the commit● Prints the diffs in a commit● Shows diffs as well as statistics ● git show ● git show --stat● Can be used with all object references
  24. 24. Reset● git reset modifies different elements: ● Variant 1: --hard The HEAD, the index and all local modifications in the workspace will be erased! ● Variant 2: --soft The HEAD will be overwritten. Previous commits will change to „changes to be committed“ ● Variante 3: --mixed (default) The HEAD and the index are overwritten● The HEAD is just a reference to a specific commit
  25. 25. Logs● Shows the commit logs ● git log ● git log -10● Can be used with all object references ● git log -3 master@{15 July} ● git log --author=Max Mustermann ● git log --grep=pattern
  26. 26. Search in files● git provides a grep integration● MUCH faster than standard grep git grep -e pattern -- some/file git grep -e pattern branch -- some/file
  27. 27. Tags● Tags are named references to commits● There are annotated and lightweight tags● Creation of a tag ● Lightweight: git tag <name> ● Annotated: git tag -a <name> -m „message“● Show all tags: git tag
  28. 28. Create and change branches● Branches are references to commits● The default-branch is called master● Create: git branch name [commit]● Change: git checkout name● Create and change: git checkout -b name● The HEAD will be adapted accordingly
  29. 29. Delete branches● Branches can be deleted every time● To delete a merged branch git branch -d branch_name● To delete a non-merged branch git branch -D branch_name
  30. 30. Show all branches● Local ones git branch● Remote ones git branch -r● All branches git branch -a● All non-merged branches git branch --no-merged
  31. 31. Conflicts and merging● Merge as many branches as you want at the same time git merge branch_a branch_b● Merged branches can also be deleted● Conflict markers indicates auto-merge problems ● Show with git status or git mergetool ● Use editor or mergetool to fix the conflict ● Stash the resolved conflict on the index ● Do a commit
  32. 32. Cherry-pick● Sometimes you only want to merge specific commits into another branch● Git allows this cherry picking git cherry-pick <commit>
  33. 33. Rebase● Alternative to git merge● Simple rebase pushes the branch onto the HEADgit merge master test git rebase master test f e e d e d d master c master c b b a a
  34. 34. Interactive rebase● git rebase -i master● Handles multiple commits: f t(e+f) master ● delete e ● ignore d s(d) ● edit c ● squash together b b● You can squash multiple commits a into one to have a clean history
  35. 35. Remote Branches● Clone creates a new local branch within a namespace: remotes/origin/<branch name>● Default-name for remote server is origin ● Can be changed using git remote● Checkout a remote branch using git checkout -b <remote_name>/<branch>● Remote branches are Tracking Branches
  36. 36. Adding remotes● Unlimited number of remotes● Modifications with git remote● Typing git remote will list all remotes➔ Team members can add other team members remotes for easy code exchange
  37. 37. Pull the changes● Tracking-branches know the SHA1 from the remote since the last pull● Changes are fetched using git fetch remote:branch ➔ Note, these changes are not merged yet!● Shortcut: Do a pull git pull remote:branch = git fetch + git merge
  38. 38. Provide your changes● Store the commits on a central repository server● Not all local branches must be pushed → private stuff keeps private! git push remote:branch➔ NEVER change the history of distributed changes using rebase!
  39. 39. Stashing● Common problem: ● Current work must be pushed asside but the changes shouldnt be commited yet ● Changes in the workspace/index must be transfered in another branch● Solution: The index and changed files are cached and the workspace and index is resetted git stash save „description“ git stash apply git stash pop # apply and drop
  40. 40. Stashing episode II● Advantage: Stashing indexes the files and write them into the reflog● Even if these changes are never commited, you can get them back git stash list git log stash@{10} git show stash@{26} git checkout -b old_work stash@{32}● Use stashes simply like branches➔ The reflog exists independent from the commits
  41. 41. Blame● Problem: You dont know who implemented the code snippet● Solution: git blame -- file shows a list of changes for a file and when and who modified it
  42. 42. Q&A