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)
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
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

Git Distributed Version Control System

  • 1.
  • 2.
    Outline Install and ConfigureGit (x) Git Concepts Git Commands Git Workflow Git Hosting (GitHub, Bitbucket) Case Studies
  • 3.
    Installation Git for OSX http://code.google.com/p/git-osx-installer/ Git for Windows http://code.google.com/p/msysgit/
  • 4.
    Setting user's nameand 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
  • 5.
    Add color tostatus and branch $ git config --global color.status auto $ git config --global color.branch auto
  • 6.
  • 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
  • 12.
  • 13.
    $ git branchtesting
  • 14.
  • 15.
    new commit ontesting branch
  • 16.
  • 17.
    $ git commit-m 'Change the master!'
  • 18.
  • 19.
    $ git checkoutmaster $ git merge iss53 Merge made by recursive. README | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
  • 20.
  • 21.
    $ git status $ vim index.html $ git add index.html $ git commit
  • 22.
  • 23.
  • 25.
  • 26.
  • 27.
  • 28.
    Dictator and Lieutenants Workflow (Linux)
  • 29.
  • 30.
    GitHub Code Review Commit Comments AnalyzeBranches Compare View Pull request
  • 31.
  • 32.
    Can I changethe commit message before or after push?
  • 33.
    Can I changethe 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 Iignore 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 Iignore 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
  • 36.
  • 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 changethe filename case in Git? fatal: destination exists, source=font.ttf, destination=Font.ttf
  • 39.
    Can I changethe filename case in Git? fatal: destination exists, source=font.ttf, destination=Font.ttf git mv -f font.ttf Font.ttf
  • 40.
    You have pusheda 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 pusheda 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 featureworked 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 featureworked 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 undoa git commit?
  • 45.
    Can I undoa 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 ona 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 ona 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 codecan 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 gitERROR 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.