###### tags : `tutorial` # Git Cheat Sheet ## A. Basic Command ### 1. Initialization, Status, Log - Initialize git command : `git init` - Check status command : `git status` - Show log command : `git log` - Show log with graph, in oneline, and all branch command : `git log --graph --all --oneline --decorate` ### 2. Add, Commit - stage changes a specific file command : `git add <file_name>` - stage chages all file command : `git add .` - Commit changes command : `git commit -m "a message"` - Rename last commit command : `git commit --amend "do awesome stuff"` - Add changes but not create new commit command : `git commit --amend` ### 3. Checkout - Back to specific commit command : `git checkout <commit_id>` - Back to Last commit / remove modification command : `git checkout .` - Move to Another branch command : `git checkout <branch_name>` ### 4. Branch - Show branch list command : `git branch` - Create a New Branch command : `git branch dev` - Move to "dev" branch command : `git checkout dev` - Delete "dev" branch command : `git branch -d dev` ### 5. Merge - Merge a branch to "master" branch. - step 0 : Make sure you are in master branch. - step 1 : Merge "dev" branch to master with type `git merge dev` - step 2 : If there is a conflict, resolve the conflict manually - Resolve Conflict - step 1 : Resolve conflict manually - step 2 : `git add .` - step 3 : `git commit -m "resolve conflict"` ### 6. Working with Remote Repo - Add remote repo command : `git remote add <alias> <remote_url>` - Update log changes command : `git fetch` - Update local branch command : `git pull <alias> <branch>` - Update all branch command : `git push <remote> --all` - Update remote branch command : `git push <alias> <branch>` - Clone a repo command : `git clone <repo_url>` ### 7. Reset - reset staging files to unstage command : `git reset` - back to desire commit, but keep changes on staging area command : `git reset <commit_destination_id> --soft` - back to desire commit but keep changes on the working area: command : `git reset <commit_destination_id>` - back to desire commit and remove changes: `git reset <commit_destination_id> --hard` ## B. Problem Solving #### 1. Git work flow Work flow 1 (Solo): - step 1 : create "feature" branch for development. - step 2 : do awesome development on branch "feature" - step 3 : debugging / unit testing - step 4 : commit development - step 5 : merge to master branch - step 6 : push to remote repo Workflow 2 (simple-collab) - step 1 : create feature-1 branch - step 2 : do awesome development on feature-1 branch - step 3 : before pushing to remote repo: - checkout to master branch and pull - checkout to feature-1 branch, use rebase : `git rebase master` - resolve conflict - on branch master rebase again : `git reabse feature-1` - step 4 : push master to remote - Workflow 3 (collab) Developer : - step 1 : create feature-1 branch - step 2 : do awesome development on feature-1 branch - step 3 : before pushing to remote repo: - checkout to master branch and pull - checkout to feature-1 branch, merge master - resolve conflict - push branch to repo - step 4 : create pull request on github Manager : - step 5 : review by manager - step 6 : merge branch Developer : - step 7 : in master branch, pull - step 8 : do another development #### 2. I can't move to another branch because i still working on branch "dev". Git asks me to commit or stash it, before checking out. Solution 1: - step 1 : stash changes `git stash` - step 2 : you can move to the desire branch - step 3 : back to previous branch : `git checkout dev` - step 4 : show stash list : `git stash list` - step 5 : apply changes : `git stash apply <stash_id>` - step 6 : delete stash_id : `git stash drop <stash_id>` > note you can do apply and delete stash_id in one command : `git stash pop` Solution 2: - step 1 : add to staging area and commit it. - step 2 : go to desire branch - step 3 : back to previous branch - step 4 : when you want to commit, you can use git commit --amend to overwrite the previous commit <!-- # # case 2: remove commit, commit history still exists got revert <commit_id> Note: appear vim text editor, quit :wq #case 6 : paste commit git cherry-pick <commit_id> --> ## C. Awesome Links 1. Git tutorial : https://www.atlassian.com/git/tutorials/learn-git-with-bitbucket-cloud 2. Git visualization : https://git-school.github.io/