Configuration
identify yourself to git: email and your name
git config --global user.name "John Smith"git config --global user.email "abc@mail.com"To view all options:
git config --listOR
cat .git/configSet up aliases
git config --global alias.co checkoutView your configuration
cat .gitconfigTo ignore whitespace (Ruby is whitespace insensitive)
git config --global apply.whitespace nowarnSome nice aliases:
gb = git branch
gba = git branch -a
gc = git commit -v
gd = git diff | mate
gl = git pull
gp = git push
gst = git status
Start using git
git initIgnoring files
Add a file in the root directory called
.gitignore and add some files to it: (comments begin with hash)*.log db/schema.rb db/schema.sql
Git automatically ignores empty directories. If you want to have a
log/ directory, but want to ignore all the files in it, add the following lines to the root .gitignore: (lines beginning with ‘!’ are exceptions)log/*!.gitignoreThen add an empty
.gitignore in the empty directory:touch log/.gitignoreScheduling the addition of all files to the next commit
git add .Checking the status of your repository
git statusCommitting files
git commit -m "First import"Seeing what files have been committed
git ls-filesScheduling deletion of a file
git rm [file name]Committing all changes in a repository
git commit -aScheduling the addition of an individual file to the next commit
git add [file name]Viewing the difference as you commit
git commit -vCommit and type the message on the command line
git commit -m "This is the message describing the commit"Commit and automatically get any other changes
git commit -aA “normal” commit command
git commit -a -vViewing a log of your commits
git logViewing a log of your commits with a graph to show the changes
git log --statViewing a log with pagination
git log -vVisualizing git changes
gitk --allCreating a new tag and pushing it to the remote branch
git tag "v1.3"git push --tagsCreating a new branch
git branch [name of your new branch]Pushing the branch to a remote repository
git push origin [new-remote]Pulling a new branch from a remote repository
git fetch origin [remote-branch]:[new-local-branch]Viewing branches
git branchViewing a list of all existing branches
git branch -aSwitching to another branch
The state of your file system will change after executing this command.
git checkout [name of the branch you want to switch to]OR
git co [name of the branch you want to switch to]Making sure changes on master appear in your branch
git rebase masterMerging a branch back into the master branch
First, switch back to the master branch:
git co masterCheck to see what changes you’re about to merge together, compare the two branches:
git diff master xyzIf you’re in a branch that’s not the
xyz branch and want to merge the xyz branch into it:git merge xyzReverting changes to before said merge
git reset --hard ORIG_HEADResolving conflicts
Remove the markings, add the file, then commit.
Creating a branch (and switching to the new branch) in one line
git checkout -b [name of new branch]Creating a stash (like a clipboard) of changes to allow you to switch branches without committing
git stash save "Put a message here to remind you of what you're saving to the clipboard"Switching from the current branch to another
git co [branch you want to switch to]Do whatever
Then switch back to the stashed branch
git co [the stashed branch]Viewing a list of stashes
git stash listLoading back the stash
git stash applyNow you can continue to work where you were previously.
Deleting a branch (that has been merged back at some point)
git branch -d [name of branch you want to delete]Deleting an unmerged branch
git branch -D [name of branch you want to delete]Deleting a stash
git stash clearSetting up a repository for use on a remote server
Copy up your repository. e.g.:
scp -r my_project deploy@yourbox.com:my_projectMove your files on the remote server to
/var/git/my_projectFor security make the owner of this project git
On the repository server:
sudo chown -R git:git my_projectThen (for security) restrict the “deploy” user to doing git-related things in
/etc/passwd with a git-shell.Checking out a git repository from a remote to your local storage
git clone git@yourbox.com:/var/git/my_projectViewing extra info about a remote repository
cat .git/configBy virtue of having cloned the remote repository, your local repository becomes the slave and will track and synchronize with the remote master branch.
Updating a local branch from the remote server
git pullDownloading a copy of an entire repository (e.g. laptop) without merging into your local branch
git fetch laptopMerging two local branches (ie. your local xyz branch with your local master branch)USE MERGE
git merge laptop/xyzThis merged the (already copied laptop repository’s xyz branch) with the current branch you’re sitting in.
Viewing metadata about a remote repository
git remote show laptopPushing a committed local change from one local branch to another remote branch
git push laptop xyzCreating a tracking branch (i.e. to link a local branch to a remote branch)
git branch --track local_branch remote_branchYou do not need to specify the local branch if you are already sitting in it.
git pullNote: You can track(link) different local branches to different remote machines. For example, you can track your friend’s “upgrade” branch with your “bobs_upgrade” branch, and simultaneously you can track the origin’s “master” branch (of your main webserver) with your local “master” branch.
By convention, ‘origin’ is the local name given to the remote centralized server which is the waySVN is usually set up on a remote server.
Seeing which local branches are tracking a remote branch
git remote show originWorking with a remote Subversion repository (but with git locally)
git-svn clone [http location of an svn repository]Now you can work with the checked out directory as though it was a git repository. (cuz it is)
Pushing (committing) changes to a remote Subversion repository
git-svn dcommitUpdating a local git repository from a remote Subversion repository
git-svn rebaseNOTE: make sure you have your perl bindings to your local svn installation.
I screwed up, how do I reset my checkout?
git checkout -f