SlideShare a Scribd company logo
Git
Victor Wong
Outline
Install and Configure Git (x)

Git Concepts

Git Commands

Git Workflow

Git Hosting (GitHub, Bitbucket)

Case Studies
Installation

Git for OS X

http://code.google.com/p/git-osx-installer/



Git for Windows

http://code.google.com/p/msysgit/
Setting user's name and
  email globally in git

 $ git config --global user.name "Victor Wong"

 $ git config --global user.email
 "victorwkm@gmail.com"

 $ git config user.name

 bonus: $ cat ~/.gitconfig
Add color to status and
        branch


 $ git config --global color.status auto

 $ git config --global color.branch auto
Git Concepts
Git Concepts
remote repo <-> local repo <-> staging area <-> working directory


# On branch master

# Changes to be committed:

#   (use "git reset HEAD <file>..." to unstage)



# Changed but not updated:

#   (use "git add <file>..." to update what will be committed)

#   (use "git checkout -- <file>..." to discard changes in working directory)



# Untracked files:

#   (use "git add <file>..." to include in what will be committed)
Git   Distributed Version Control System
Git   Distributed Version Control System
Basic Git Commands
Creating & Getting   Branching        Inspection
  init                 branch           log
  clone                checkout         show
                       merge

Basic                Remote Sharing
  status               remote
  add                  push
  commit               pull
  mv, rm               fetch
  tag
Advanced Git Commands
 git-stash git-pop git-apply

 git-blame git-diff git-reflog

 git-reset git-revert

 git-clean

 git-rebase

 git-fetch
Branch
$ git branch testing
$ git checkout testing
new commit on testing branch
$ git checkout master
$ git commit -m 'Change the master!'
Merge
$ git checkout master
$ git merge iss53
Merge made by recursive.
README | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
Conflict
$   git status
$   vim index.html
$   git add index.html
$   git commit
.git/



config

hooks (pre-commit, post-commit, ...)
Git Workflow
Git   Distributed Version Control System
Distributed Workflows
Centralized Workflow
         (us)
Integration-Manager
 Workflow (GitHub)
Dictator and Lieutenants
    Workflow (Linux)
github.com
GitHub

Code Review

Commit Comments

Analyze Branches

Compare View

Pull request
Case Studies
Can I change the commit
message before or after push?
Can I change the commit
message before or after push?


  $ git commit --amend

  bonus: $ git rebase -i

  Note: Never change your commit history
  after push to a public repository!
How do I ignore files in a project? Some files
such as .log which shouldn't be include in every
   project, can I ignore it in every projects?
How do I ignore files in a project? Some files
such as .log which shouldn't be include in every
   project, can I ignore it in every projects?

    $ vim .gitignore

    ... add the file and folder path that you don't want git to
    track ...



    $ vim ~/.gitignore_global

    $ git config --global core.excludesfile ~/.gitignore_global

    Bonus: git config --global --list

    Remind: Don't add too much files in the globa excludesfile
Search commit message
Search commit message
 git log -g --grep=<pattern>



 -g, --walk-reflogs

 Instead of walking the commit ancestry chain, walk
 reflog entries from the most recent one to older ones.

 --grep=<pattern>

 Limit the commits output to ones with log message that
 matches the specified pattern (regular expression).
Can I change the filename case in Git?
       fatal: destination exists,
  source=font.ttf, destination=Font.ttf
Can I change the filename case in Git?
       fatal: destination exists,
  source=font.ttf, destination=Font.ttf




   git mv -f font.ttf Font.ttf
You have pushed a WordPress folder in the Github and pull it from
the server.
But you make a mistake, you want to
- keep the wp-config.php in the server
- remove it on the GitHub, so your colleagues won't get a copy of
the wp-config.php
You have pushed a WordPress folder in the Github and pull it from
the server.
But you make a mistake, you want to
- keep the wp-config.php in the server
- remove it on the GitHub, so your colleagues won't get a copy of
the wp-config.php


     [On the server]

     $ vim .gitignore

     $ git commit -am 'ignore wp-config.php file'

     $ git rm --cached wp-config.php

     $ git commit -m 'remove wp-config.php'

     $ git push
Clients: This feature worked well in the past.
Why does it not work properly today?
We: How do we use Git to quickly identify the
issue?
Clients: This feature worked well in the past.
Why does it not work properly today?
We: How do we use Git to quickly identify the
issue?


    Use GitHub to:

      search

      history

      blame

    $ git checkout <commit-sha>
Can I undo a git
    commit?
Can I undo a git
         commit?
Preserve all changes as unstaged changes

$ git reset HEAD^



Preserve all changes

$ git reset --soft HEAD^



Discard all changes

$ git reset --hard HEAD^
You are on a branch called "development", and you received
an email from the client said this bug needs to be fixed
now! Hence, you tried to switch your branch to "hotfix" or
"master" to do a quick fix, but your working dirctory is
"dirty", what should you do?
You are on a branch called "development", and you received
an email from the client said this bug needs to be fixed
now! Hence, you tried to switch your branch to "hotfix" or
"master" to do a quick fix, but your working dirctory is
"dirty", what should you do?

     $ git stash

     $ git checkout master

     ... fix issue ...

     $ git commit -am "fix issue #100"

     $ git checkout development

     $ git stash list

     $ git stash pop

     bonus: $ git stash apply stash@{0} $ git stash drop stash@{0}
The same code can also applied to the
following scenario.

After finishing the development, you suddenly
realized the you are developing a feature on
the WRONG branch. Can I save those
changes and apply those changes in the
correct branch?
Recommendations

Read the git ERROR message

Commit or lose it

Do one thing at a time (the smaller the
better)

Don’t modify any history after pushing to live

Practice together
References



Git Reference http://gitref.org/

Pro Git http://git-scm.com/book
Git   Distributed Version Control System
Ad

Recommended

KEY
Gittalk
prtinsley
 
PDF
Recovering From Git Mistakes - Nina Zakharenko
Nina Zakharenko
 
PPTX
Introduction To Git Workshop
themystic_ca
 
PDF
git fail --force (make it up with your pull requests)
Carlos Duarte do Nascimento
 
PDF
Advanced Git
Sergiu-Ioan Ungur
 
PDF
Nicola Iarocci - Git stories from the front line - Codemotion Milan 2017
Codemotion
 
PDF
Git - Get Ready To Use It
Daniel Kummer
 
PPTX
Git and git workflow best practice
Majid Hosseini
 
PDF
Git advanced
Peter Vandenabeele
 
PDF
Collaborative Development: The Only CD That Matters - Brent Beer - Codemotion...
Codemotion
 
PDF
沒有 GUI 的 Git
Chia Wei Tsai
 
PDF
Git Tricks — git utilities that make life git easier
Christoph Matthies
 
PPTX
Git
Shinu Suresh
 
PPT
Open Source Collaboration With Git And Git Hub
Nick Quaranto
 
PDF
Git 101 Workshop
Joy Seng
 
PDF
How to become a Git power user
Deveo
 
PDF
Undoing Things in Git
gittower
 
KEY
Git Basics - RubyFest 2009
Ariejan de Vroom
 
PDF
My Notes from https://www.codeschool.com/courses/git-real
Eneldo Serrata
 
PPT
Learn Git Basics
Prakash Dantuluri
 
KEY
Git Magic: Versioning Files like a Boss
tmacwilliam
 
PDF
Git SCM
Stefan Prutianu
 
PDF
Git real slides
Lucas Couto
 
PDF
Enjoy privacy on Gitlab
Maxis Kao
 
PDF
Git: basic to advanced
Yodalee
 
PDF
Introduction to Git
Rick Umali
 
PPTX
Git workshop
Ray Toal
 
PDF
Git and git flow
Fran García
 
PDF
Git Started With Git
Nick Quaranto
 
PDF
Wokshop de Git
Alberto Leal
 

More Related Content

What's hot (20)

PDF
Git advanced
Peter Vandenabeele
 
PDF
Collaborative Development: The Only CD That Matters - Brent Beer - Codemotion...
Codemotion
 
PDF
沒有 GUI 的 Git
Chia Wei Tsai
 
PDF
Git Tricks — git utilities that make life git easier
Christoph Matthies
 
PPTX
Git
Shinu Suresh
 
PPT
Open Source Collaboration With Git And Git Hub
Nick Quaranto
 
PDF
Git 101 Workshop
Joy Seng
 
PDF
How to become a Git power user
Deveo
 
PDF
Undoing Things in Git
gittower
 
KEY
Git Basics - RubyFest 2009
Ariejan de Vroom
 
PDF
My Notes from https://www.codeschool.com/courses/git-real
Eneldo Serrata
 
PPT
Learn Git Basics
Prakash Dantuluri
 
KEY
Git Magic: Versioning Files like a Boss
tmacwilliam
 
PDF
Git SCM
Stefan Prutianu
 
PDF
Git real slides
Lucas Couto
 
PDF
Enjoy privacy on Gitlab
Maxis Kao
 
PDF
Git: basic to advanced
Yodalee
 
PDF
Introduction to Git
Rick Umali
 
PPTX
Git workshop
Ray Toal
 
PDF
Git and git flow
Fran García
 
Git advanced
Peter Vandenabeele
 
Collaborative Development: The Only CD That Matters - Brent Beer - Codemotion...
Codemotion
 
沒有 GUI 的 Git
Chia Wei Tsai
 
Git Tricks — git utilities that make life git easier
Christoph Matthies
 
Open Source Collaboration With Git And Git Hub
Nick Quaranto
 
Git 101 Workshop
Joy Seng
 
How to become a Git power user
Deveo
 
Undoing Things in Git
gittower
 
Git Basics - RubyFest 2009
Ariejan de Vroom
 
My Notes from https://www.codeschool.com/courses/git-real
Eneldo Serrata
 
Learn Git Basics
Prakash Dantuluri
 
Git Magic: Versioning Files like a Boss
tmacwilliam
 
Git real slides
Lucas Couto
 
Enjoy privacy on Gitlab
Maxis Kao
 
Git: basic to advanced
Yodalee
 
Introduction to Git
Rick Umali
 
Git workshop
Ray Toal
 
Git and git flow
Fran García
 

Similar to Git Distributed Version Control System (20)

PDF
Git Started With Git
Nick Quaranto
 
PDF
Wokshop de Git
Alberto Leal
 
PDF
.Git for WordPress Developers
mpvanwinkle
 
PDF
Git basics
Amit Sawhney
 
PDF
Introduction to Git for Artists
David Newbury
 
DOCX
Git github
Anurag Deb
 
PDF
Becoming a Git Master
Nicola Paolucci
 
PDF
Loading...git
Rafael García
 
KEY
Git Tech Talk
Chris Johnson
 
KEY
The everyday developer's guide to version control with Git
E Carter
 
PDF
How to Really Get Git
Susan Tan
 
KEY
Working with Git
Pete Nicholls
 
PPTX
Git session Dropsolid.com
dropsolid
 
PPTX
Jedi Mind Tricks for Git
Jan Krag
 
PDF
Improving your workflow with git
Dídac Ríos
 
PDF
Git and github 101
Senthilkumar Gopal
 
PPT
Github By Nyros Developer
Nyros Technologies
 
PDF
Jedi Mind Tricks in Git
Johan Abildskov
 
PPTX
Working in Team using Git in Unity
Rifauddin Tsalitsy
 
PPTX
Git: Why And How to
lanhuonga3
 
Git Started With Git
Nick Quaranto
 
Wokshop de Git
Alberto Leal
 
.Git for WordPress Developers
mpvanwinkle
 
Git basics
Amit Sawhney
 
Introduction to Git for Artists
David Newbury
 
Git github
Anurag Deb
 
Becoming a Git Master
Nicola Paolucci
 
Loading...git
Rafael García
 
Git Tech Talk
Chris Johnson
 
The everyday developer's guide to version control with Git
E Carter
 
How to Really Get Git
Susan Tan
 
Working with Git
Pete Nicholls
 
Git session Dropsolid.com
dropsolid
 
Jedi Mind Tricks for Git
Jan Krag
 
Improving your workflow with git
Dídac Ríos
 
Git and github 101
Senthilkumar Gopal
 
Github By Nyros Developer
Nyros Technologies
 
Jedi Mind Tricks in Git
Johan Abildskov
 
Working in Team using Git in Unity
Rifauddin Tsalitsy
 
Git: Why And How to
lanhuonga3
 
Ad

Git Distributed Version Control System

  • 2. Outline Install and Configure Git (x) Git Concepts Git Commands Git Workflow Git Hosting (GitHub, Bitbucket) Case Studies
  • 3. Installation Git for OS X http://code.google.com/p/git-osx-installer/ Git for Windows http://code.google.com/p/msysgit/
  • 4. Setting user's name and email globally in git $ git config --global user.name "Victor Wong" $ git config --global user.email "[email protected]" $ git config user.name bonus: $ cat ~/.gitconfig
  • 5. Add color to status and branch $ git config --global color.status auto $ git config --global color.branch auto
  • 7. Git Concepts remote repo <-> local repo <-> staging area <-> working directory # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # Untracked files: # (use "git add <file>..." to include in what will be committed)
  • 10. Basic Git Commands Creating & Getting Branching Inspection init branch log clone checkout show merge Basic Remote Sharing status remote add push commit pull mv, rm fetch tag
  • 11. Advanced Git Commands git-stash git-pop git-apply git-blame git-diff git-reflog git-reset git-revert git-clean git-rebase git-fetch
  • 13. $ git branch testing
  • 14. $ git checkout testing
  • 15. new commit on testing branch
  • 16. $ git checkout master
  • 17. $ git commit -m 'Change the master!'
  • 18. Merge
  • 19. $ git checkout master $ git merge iss53 Merge made by recursive. README | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
  • 21. $ git status $ vim index.html $ git add index.html $ git commit
  • 28. Dictator and Lieutenants Workflow (Linux)
  • 30. GitHub Code Review Commit Comments Analyze Branches Compare View Pull request
  • 32. Can I change the commit message before or after push?
  • 33. Can I change the commit message before or after push? $ git commit --amend bonus: $ git rebase -i Note: Never change your commit history after push to a public repository!
  • 34. How do I ignore files in a project? Some files such as .log which shouldn't be include in every project, can I ignore it in every projects?
  • 35. How do I ignore files in a project? Some files such as .log which shouldn't be include in every project, can I ignore it in every projects? $ vim .gitignore ... add the file and folder path that you don't want git to track ... $ vim ~/.gitignore_global $ git config --global core.excludesfile ~/.gitignore_global Bonus: git config --global --list Remind: Don't add too much files in the globa excludesfile
  • 37. Search commit message git log -g --grep=<pattern> -g, --walk-reflogs Instead of walking the commit ancestry chain, walk reflog entries from the most recent one to older ones. --grep=<pattern> Limit the commits output to ones with log message that matches the specified pattern (regular expression).
  • 38. Can I change the filename case in Git? fatal: destination exists, source=font.ttf, destination=Font.ttf
  • 39. Can I change the filename case in Git? fatal: destination exists, source=font.ttf, destination=Font.ttf git mv -f font.ttf Font.ttf
  • 40. You have pushed a WordPress folder in the Github and pull it from the server. But you make a mistake, you want to - keep the wp-config.php in the server - remove it on the GitHub, so your colleagues won't get a copy of the wp-config.php
  • 41. You have pushed a WordPress folder in the Github and pull it from the server. But you make a mistake, you want to - keep the wp-config.php in the server - remove it on the GitHub, so your colleagues won't get a copy of the wp-config.php [On the server] $ vim .gitignore $ git commit -am 'ignore wp-config.php file' $ git rm --cached wp-config.php $ git commit -m 'remove wp-config.php' $ git push
  • 42. Clients: This feature worked well in the past. Why does it not work properly today? We: How do we use Git to quickly identify the issue?
  • 43. Clients: This feature worked well in the past. Why does it not work properly today? We: How do we use Git to quickly identify the issue? Use GitHub to: search history blame $ git checkout <commit-sha>
  • 44. Can I undo a git commit?
  • 45. Can I undo a git commit? Preserve all changes as unstaged changes $ git reset HEAD^ Preserve all changes $ git reset --soft HEAD^ Discard all changes $ git reset --hard HEAD^
  • 46. You are on a branch called "development", and you received an email from the client said this bug needs to be fixed now! Hence, you tried to switch your branch to "hotfix" or "master" to do a quick fix, but your working dirctory is "dirty", what should you do?
  • 47. You are on a branch called "development", and you received an email from the client said this bug needs to be fixed now! Hence, you tried to switch your branch to "hotfix" or "master" to do a quick fix, but your working dirctory is "dirty", what should you do? $ git stash $ git checkout master ... fix issue ... $ git commit -am "fix issue #100" $ git checkout development $ git stash list $ git stash pop bonus: $ git stash apply stash@{0} $ git stash drop stash@{0}
  • 48. The same code can also applied to the following scenario. After finishing the development, you suddenly realized the you are developing a feature on the WRONG branch. Can I save those changes and apply those changes in the correct branch?
  • 49. Recommendations Read the git ERROR message Commit or lose it Do one thing at a time (the smaller the better) Don’t modify any history after pushing to live Practice together
  • 50. References Git Reference http://gitref.org/ Pro Git http://git-scm.com/book

Editor's Notes