Dale's Git Command Notes
Note: These are my online notes and a work in progress. They're public so I can grab them anywhere, if others find them useful all the better. Caveat emptor, I'm just learning this stuff.
Configuration
git config --list | List all your configuration |
Creating Repositories
git init | Make a Git repository that manages the existing working directory. |
git --bare init | Make a "bare" Git repository. It does not manage the directory it resides in. Used for creating remote repositories to push updates to. |
Managing Files in a Branch
git status | Displays the current branch and the status of the files in the current working directory. Files can be in one of three states: untracked, modified, commit-candidate (changes to be committed). |
git diff | Produces a diff of the files that have changed but haven't been add to the next commit. |
git diff --cached git diff --staged (> v1.6.1) |
Produces a diff of the files that have been added to the next commit. |
git add {filename/wildcard} | Tell Git that an untracked or modified file is now a candidate for the next commit. In the jargon, move the file(s) to "staging area". |
git rm {filename/wildcard} | Remove file(s) from current branch. Will also delete the physical file. |
git rm --cached {filename/wildcard} | Remove file(s) from revision control but doesn't delete the physical file. Handy if a file was accidentially added to revision control. |
git mv {current-file-name/path} {new-file-name/path} | Move or rename a file. |
git commit -m 'Hopefully useful message' | Commit the candidate files -- files added to the staging area with git add -- to the current repository branch. |
git commit -a -m 'Hopefully useful message' | Commits staged files and automatically git adds all other modified files to the commit. Untracked files remain excluded from the commit. |
Managing Branches
git branch | Show the branches in this repository with a star ("*") beside the current branch. |
git branch {new branch name} | Creates a branch of the specified name. Note: It does not automatically switch you to that branch. You must use checkout the new branch if you want to use it right away. |
git checkout {existing branch name} | Switches you to the specified branch. |
git checkout -b {new branch name} | Creates a new branch and automatically switches to that branch. It is the equivilent of: git branch {name} git checkout {name} |
git branch -d {branch} | Delete the specified branch. |
git branch -r | Show remote branches. Branches available for checkout won't show automatically after a clone. |
git log | Show the list of commits on the branch |
git log --name-status git log --name-only git log --stat |
List the commits and include a list of files that have changed. The 3 options give slightly different kinds of information. |
Merging Branches
git merge {branch} | Merges the specified branch into the currently checked out branch. |
Remote Repositories
git clone {url} | Create a local copy of the repository at {url} and automatically link the two. With git clone Git will automatically give the remote repository the name 'origin'. |
git remote [-v] | List the remote repositories the local repository knows about. |
git remote show [{remote-name}] git remote show origin |
Shows information about the remote such as URL, branches, and how remote/local branches are mapped. |
git fetch [{remote-name}] | Grabs the remote updates for the current branch but does not merge them. You must do a manual merge. |
git pull [{remote-name}] | Grabs the remote updates for the current branch and merges them into the current branch. |
git push {remote-repo-name} {remote-branch-name} | Pushes the current branch to the specified git remote giving it the specified name. |
How-To's
Multiple Remote Masters | Written from the persective of a specific host but generally applicable anywhere. |