Your SlideShare is downloading. ×
Git in action
Upcoming SlideShare
Loading in...5

Thanks for flagging this SlideShare!

Oops! An error has occurred.


Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

No notes for slide


  • 1. Git in Action
  • 2. Agenda● Introduction● Action● Q&A
  • 3. Introduction
  • 4. Distributed Version Control Remote Repository Repository Repository(public or privat) push pull Workspace Workspace Workspace Local Repository Repository Repository Alice Bob Charlie
  • 5. Git repositoryrepository = object database .git/objects
  • 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. Git repositorycontent is stored in blob objects => File 4afd 57aa 34da 45f5 90ff aabc 3daa 9873 78dd 12df 8810 675b aacc 456c ddaa
  • 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. 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. Git repository
  • 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. 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. Action
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Cherry-pick● Sometimes you only want to merge specific commits into another branch● Git allows this cherry picking git cherry-pick <commit>
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. Q&A