git-training
More git training for TLC 3 - some exercises set which the tutors can then review
There are more exercises than this, but these should take you through everything you need to be able to use Git effectively in your day to day life.
- Basic Commits
- Basic Staging
- Basic Branching
- Fast Forward Merge
- 3 way Merge
- Rebase Branch
- Basic Revert
- Reset
- Basic Cleaning
- Amend
- Reorder the History
- Advanced Rebase Interactive
- Squash commits
- Basic Stashing
Cheatsheet
A collection of useful commands to use throughout the exercises:
# Initializing an empty git repository.
git init # Initialize an empty git repository under current directory.
# Cloning a repository
git clone https://github.com/turntabl/git-training.git # Clone this repository to your current working directory
# Git (user and repo level) configurations
git config --local user.name "Repo-level Username" # For setting a local git repo level user name.
git config --local user.email "Repo-level.Email@Example.com" # For setting a local git repo level user email.
# --global -> User level git config stored in <user-home>/.gitconfig for e.g. ~/.gitconfig
# --local -> repo level config stored in repo's main dir under .git/config
# See local changes
git status # Show the working tree status
git diff # Show changes current working directory (not yet staged)
git diff --cached # Show changes currently staged for commit
# Add files to staging (before a commit)
git add myfile.txt # Add myfile.txt to stage
git add . # Add entire working directory to stage
# Make a commit
git commit # Make a new commit with the changes in your staging area. This will open an editor for a commit message.
git commit -m "I love documentation" # Make a new commit with a commit message from the command line
git commit -a # Make a new commit and automatically "add" changes from all known files
git commit -am "I still do!" # A combination of the above
git commit --amend # Re-do the commit message of the previous commit (don't do this after pushing!)
# We _never_ change "public history"
git reset <file> # Unstage a staged file leaving in working directory without losing any changes.
git reset --soft [commit_hash] # resets the current branch to <commit>. Does not touch the staging area or the working tree at all.
# --hard mode would discard all changes.
# See history
git log # Show commit logs
git log --oneline # Formats commits to a single line (shorthand for --pretty=oneline --abbrev-commit )
git log --graph # Show a graph commits and branches
git log --pretty=fuller # To see commit log details with author and committer details, if any different.
git log --follow <file> # List the history of a file beyond renames
git log branch2..branch1 # Show commits reachable from branch1 but not from branch2
# Deferring
git stash # Stash (store temporarily) changes in working branch and enable checkingout a new branch
git stash list # List stored stashes.
git stash apply <stash> # Apply given <stash>, or if none given the latest from stash list.
# Working with Branches
git branch my-branch # Create a new branch called my-branch
git checkout my-branch # Checkout ("Switch" to work on) my-branch
git checkout -b my-branch # Create a new branch called my-branch AND switch to it
git branch -d my-branch # Delete branch my-branch that has been merged with master
git branch -D my-branch # Forcefully delete a branch my-branch that hasn't been merged to master
# Merging
git merge master # Merge the master branch into your currently checked out branch.
git rebase master # Rebase current branch on top of master branch
# Working with Remotes
git remote # Show your current remotes
git remote -v # Show your current remotes and their URLs
git push # Publish your commits to the upstream master of your currently checked out branch
git push -u origin my-branch # Push newly created branch to remote repo setting up to track remote branch from origin.
# No need to specify remote branch name, for e.g., when doing a 'git pull' on that branch.
git pull # Pull changes from the remote to your currently checked out branch
# Re/moving files under version control
git rm <path/to/the/file> # remove file and stage the change to be committed.
git mv <source/file> <destination/file> # move/rename file and stage the change to be committed.
## Logging
git log --graph --oneline --all # Show a nice graph of the previous commits