A recap of some core concepts we have already covered
Saving changes is a two-step process in Git:
# Stages changes to the staging area git add <files> # Commits a snapshot of changes to the local repo git commit
# Add just these file(s) git add app.js # Add all changed files in this directory and sub-dirs git add . # Glob and stage a pattern of files git add **/*.js # Unstage the changes to app.js git reset app.js
# Commits the staged snapshot - will open editor for a message git commit # Commits with a message git commit -m "Make a meaningful change"
Twofer - commit and add in one command:
# Stage & commit all changed files with a message git commit -am "FH-12345 - My files on disk are perfect"
A branch in git is simply a reference to a commit
# List all local branches git branch # Create a new branch locally git branch mynewbranch [myoptionalbasebranch] # What commit is a branch pointing at? git rev-parse mynewbranch # What commits are on a branch? git log mynewbranch [--pretty --graph --oneline --decorate] # What branches point at a particular commit? git branch --points-at e29b7ee # Delete a branch git branch -d mynewbranch # Really delete a branch, even if it has changes that aren't on any other branches git branch -D mynewbranch
There are also "remote-tracking" branches These are read-only copies of what is on a "remote", at the time that we last "fetched" (updated the information we store locally about branches on the remote).
# Get new information from all remotes git remote update [--prune] # or: git fetch --all [--prune] # List all remote-tracking branches git branch -r # List all branches (local and remote-tracking) git branch -a # Track a remote branch git branch [branchname] -u origin/anybranch # Now status will show the relationship with git status [-sb] stdout: "Your branch is ahead of 'origin/anybranch' by 3 commits" # Delete a branch from a remote git push origin --delete mybranchname