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

More Related Content

KEY
Gittalk
PDF
Recovering From Git Mistakes - Nina Zakharenko
PPTX
Introduction To Git Workshop
PDF
git fail --force (make it up with your pull requests)
PDF
Advanced Git
PDF
Nicola Iarocci - Git stories from the front line - Codemotion Milan 2017
PDF
Git - Get Ready To Use It
PPTX
Git and git workflow best practice
Gittalk
Recovering From Git Mistakes - Nina Zakharenko
Introduction To Git Workshop
git fail --force (make it up with your pull requests)
Advanced Git
Nicola Iarocci - Git stories from the front line - Codemotion Milan 2017
Git - Get Ready To Use It
Git and git workflow best practice

What's hot (20)

PDF
Git advanced
PDF
Collaborative Development: The Only CD That Matters - Brent Beer - Codemotion...
PDF
沒有 GUI 的 Git
PDF
Git Tricks — git utilities that make life git easier
PPTX
PPT
Open Source Collaboration With Git And Git Hub
PDF
Git 101 Workshop
PDF
How to become a Git power user
PDF
Undoing Things in Git
KEY
Git Basics - RubyFest 2009
PDF
My Notes from https://www.codeschool.com/courses/git-real
PPT
Learn Git Basics
KEY
Git Magic: Versioning Files like a Boss
PDF
PDF
Git real slides
PDF
Enjoy privacy on Gitlab
PDF
Git: basic to advanced
PDF
Introduction to Git
PPTX
Git workshop
PDF
Git and git flow
Git advanced
Collaborative Development: The Only CD That Matters - Brent Beer - Codemotion...
沒有 GUI 的 Git
Git Tricks — git utilities that make life git easier
Open Source Collaboration With Git And Git Hub
Git 101 Workshop
How to become a Git power user
Undoing Things in Git
Git Basics - RubyFest 2009
My Notes from https://www.codeschool.com/courses/git-real
Learn Git Basics
Git Magic: Versioning Files like a Boss
Git real slides
Enjoy privacy on Gitlab
Git: basic to advanced
Introduction to Git
Git workshop
Git and git flow
Ad

Similar to Git Distributed Version Control System (20)

PPTX
Git Memento of basic commands
PPTX
Git walkthrough
PPTX
github ppt git ppt on git hub to know ab
PPTX
sample.pptx
PPTX
GIT.pptx
PPTX
Git session Dropsolid.com
PDF
Git and github 101
PDF
Advanced Git Tutorial
PDF
KEY
Let's Git this Party Started: An Introduction to Git and GitHub
PPT
390a gitintro 12au
PPTX
PPTX
An introduction to Git
PPTX
Git 101 - An introduction to Version Control using Git
PPTX
Hacktoberfest intro to Git and GitHub
ODP
Git presentation
PDF
Git training v10
PPTX
git.ppt.pptx power point presentation got Google internet
PPT
Fundamentals and basics of Git and commands
PDF
Github git-cheat-sheet
Git Memento of basic commands
Git walkthrough
github ppt git ppt on git hub to know ab
sample.pptx
GIT.pptx
Git session Dropsolid.com
Git and github 101
Advanced Git Tutorial
Let's Git this Party Started: An Introduction to Git and GitHub
390a gitintro 12au
An introduction to Git
Git 101 - An introduction to Version Control using Git
Hacktoberfest intro to Git and GitHub
Git presentation
Git training v10
git.ppt.pptx power point presentation got Google internet
Fundamentals and basics of Git and commands
Github git-cheat-sheet
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