Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Version Control System - Git

Version Control System - Git

2011 CCSP

Andrew Liu

March 26, 2012

More Decks by Andrew Liu

Other Decks in Programming


  1. What Is Version Control? Manage data by systematically keeping previous

    version Used in word processing, wiki system, software development Popular solutions: CVS Subversion (SVN) Git
  2. Why Use Version Control? To collaborate with others Orderly vs.

    chaotic To keep track of history Easy to debug Easy to rollback
  3. Terminology Repository The repository is where files' current and historical

    data are stored Commit A commit is the action of writing or merging the changes made in the working copy back to the repository. The terms commit can also used in noun form to describe the new revision that is created as a result of committing.
  4. Terminology Branch A set of files under version control may

    be branched or forked at a point in time so that, from that time forward, two copies of those files may develop at different speeds or in different ways independently of each other.
  5. Terminology Conflict A conflict occurs when different parties make changes

    to the same document, and the system is unable to reconcile the changes. A user must resolve the conflict by combining the changes, or by selecting one change in favor of the other.
  6. Terminology Merge A merge is an operation in which two

    sets of changes are applied to a file or set of files. Tag A tag refers to an important snapshot in time. Head The most recent commit.
  7. Create From existing data cd ~/my_project_dir git init git add

    . From existing repo git clone ~/existing/repo ~/new/repo git clone [email protected]:dir/project.git default protocol is ssh Browse Files changed in working directory git status Changes to tracked files git diff Changes between ID1 and ID2 git diff <ID1> <ID2> History of changes git log Who changed what and when in a file git blame <file> A commit identified by ID git show <ID> A specific file from a specific ID git diff <ID>:<FILE> Search for patterns git grep <pattern> [path] Change Using your favorite editor / IDE Revert Return to the last committed state git checkout -f | git reset --hard you cannot undo a hard reset Revert the last commit git revert HEAD Creates a new commit Revert specific commit git revert $id Creates a new commit Fix the last commit git commit -a --amend after editing the broken files Checkout the ID version of a file git checkout <ID> <file> Update Fetch latest changes from origin git fetch this does not merge them Pull latest changes from origin git pull does a fetch followed by a merge Apply a patch that someone sent you git am -3 patch.mbox In case of conflict, resolve the conflict and git am --resolve Commit Commit all local changes git commit -a Branch List all branches git branch Switch to the BRANCH branch git checkout <BRANCH> Merge branch B1 into branch B2 git checkout <B2> git merge <B1> Create branch based on HEAD git branch <BRANCH> Create branch based on another git checkout <new> <base> Delete a branch git branch -d <branch> Publish Prepare a patch for other developers git format-patch origin Push changes to origin git push [origin] [branch] Make a version or milestone git tag <version_name> Cheat Sheet This work is licensed under a Creative Commons Attribution‐Share Alike 3.0 Unported License Useful tips Get help git help [command] Create empty branch git symbolic-ref HEAD refs/heads/newbranch rm .git/index git clean -fdx <do work> git add your files git commit -m 'Initial commit' Graphical log git log --graph git log --graph --pretty=oneline -- abbrev-commit Push branch to remote git push <origin> <branch> Delete remote branch and locally git push <origin> :<branch> git branch -d <branch> Resolve merge conflicts View merge conflicts git diff View merge conflicts against base file git diff --base <FILE> View merge conflicts against other changes git diff --theirs <FILE> View merge conflicts against your changes git diff --ours <FILE> After resolving conflicts, merge with git add <CONFLICTING_FILE> git rebase --continue Configuration git config [--global] global is stored in ~/.gitconfig user user.name $name user.email $email color color.ui auto github github.user $user github.token $token optimisation pack.threads 0 diff.renamelimit 0 do not use on low memory p windows core.autocrlf true http://github.com/AlexZeitler/gitcheatsheet
  8. Get started Clone a repository git clone <git‐repository> Check current

    branch git branch Showing current status git status
  9. Clean to Dirty Editing files Creating new files Deleting files

    Use git to remove a file git rm git mv Files to ignore Account/password, log … etc .gitignore
  10. Dirty to staged Add particular changed file or new file

    git add <filename> Add all changed or new files git add . Add interactively git add –i Pick particular changes git add ‐p
  11. Staged to clean Commit a version and open a text

    editor for commit message git commit Specify commit message git commit –m “<message>” Commit all changes git commit ‐a
  12. Dirty to Clean Remove the changes Note: this is not

    revertible git checkout <filename> Reset all if messed up git reset ‐‐hard HARD
  13. Log Showing all logs: git log Commits since a version:

    git log <version>.. Commits from a version to another: git log <version‐a>..<version‐b> Commits to a certain file git log <filename>
  14. Diff and Show Difference between HEAD and HEAD^ git diff

    Difference between HEAD and staged file git diff ‐‐cached Difference between versions git diff <version‐a>..<version‐b> Showing most current commit git show Show a file at a certain version git show <version>:<filename>
  15. Bisect Find by binary search the change that introduced a

    bug git bisect start git bisect good <good‐version> git bisect bad <bad‐version> HEAD is now point to the commit which is reachable from <bad-version> but not from <good-versoin>
  16. Bisect If it does crash, then: git bisect bad If

    it is working, then: git bisect good Finally find the guilty commit: git bisect reset
  17. A Clean Tree Some operations must be applied on a

    clean tree (i.e. no dirty or staged file) Git provides a stack for unclean files git stash git stash pop
  18. More on Branches Switching to another branch Note: the tree

    should be clean git checkout <branch> Create a new branch git branch <new‐branch> git branch <new‐branch> <start‐point> Create and switch to the new branch git checkout –b <new‐branch> git checkout –b <new‐branch> <start‐ point>
  19. A B C D E A B C D E

    F A B C D E D’ F’ Original Merge Rebase Possible Conflict
  20. Merge Merge the current branch with <another-branch> git merge <another‐branch>

    Conflicts may occurred if modifications of a same file are in both branches
  21. Helpers Showing common ancestor git show :1:<filename> Showing the version

    of HEAD git show :2:<filename> Showing the version of MERGE_HEAD git show :3:<filename> Give up a merge git reset ‐‐hard HEAD
  22. Rebase Start rebase procedure git rebase <another‐branch> Rebase would stop

    if conflicts occurred To continue the rebase process: git rebase ‐‐continue Stop the rebase procedure git rebase ‐‐abort
  23. Resolve Conflicts 1. Use git diff to find out the

    conflicted files 2. Resolve the conflict by your favorite editor 3. git add <resolved‐file> 4. git commit (not needed for rebase)
  24. Setup remote Listing all remotes git remote Adding new remote

    git remote add <git‐path> <remote> git clone will automatically setup remote “origin”
  25. Working with remote Get information from remote git fetch Pulling

    a branch git pull <remote> <branch> git pull <remote> <local>:<target> git pull <remote> <branch> is equal to: git fetch git merge <remote>/<branch>
  26. Pushing to remote The push command git push <remote> <branch>

    git push <remote> <local>:<target> Push command may fail if conflicts occurred on remote To solve the problem: Pull down and merge then push
  27. Get a Repository Set a server Possible, but it requires

    lots of efforts Use provided service Github: http://github.com/ The most popular solution Free for public projects Codaset: http://codaset.com/ Provides a single free private project for each account
  28. Tips Each commit includes a single logical change The code

    should be tested before commit (NOT RECOMMEND) Mark “untested” if the commit is not tested Rebase rather than merge when dealing with local branches
  29. For Web Application Development Two branches: master Mapped to the

    production site dev Mapped to the test site Workflow Develop in dev or other branches except master Push to dev for testing Push to master for production