Quick Use Guide[edit | edit source]

As someone who used SVN for the last decade, switching over to git was slightly confusing since the terminology is different. Hopefully, this usage guide will help.

Committing Files[edit | edit source]

A commit is like a snapshot of the code at a particular time in the repository. It is possible to recover code to a previous commit if something were to happen to the code (such as accidental bugs being introduced, or accidentally deleting or modifying some file).

Similar to SVN where files are included/excluded to a commit, git allows you to stage/unstage files to commit. A file that is staged will be added to the next commit that is made.

Typically, you will want to stage all files for commit which can be done by running:

$ git add -A .

Run git status to see all files that are staged as well as any changed but unstaged files.

$ git status

To commit all the staged files with a message:

$ git commit -m 'message'

Reverting Changes[edit | edit source]

To revert all changes in the current repository, use:

## Fetch latest from remote
$ git fetch --all
## Reset all changes fetched previously.
$ git reset --hard HEAD

To revert a specific file from a specific revision, use git checkout.

$ git checkout <revision> <filename>

Remote Origins[edit | edit source]

Git allows you to push/pull changes from other remote git repositories. Remote repositories can be in another path or hosted somewhere on the internet.

To see your repository's remotes:

$ git remote -v

To add a new remote:

$ git remote add origin git@gitlab-blah:user/repo.git

To remove a remote:

$ git remote rm origin

If your remote uses SSH, you will most likely need to configure SSH in order to make use of SSH key based authentication. You can read more about this at SSH Configuration File, but the basic idea is to create a SSH configuration file at ~/.ssh/config defining the remote's host.

Host gitlab-remote
    User git
    HostName git.example.com
    IdentityFile ~/.ssh/gitlab-remote

Pushing / Pulling[edit | edit source]

After making a new change in your repository, you may want to push your changes out to other repositories. Do so by running:

$ git push

You may also specify a specific remote and branch as well. Eg: git push remote-name branch-name.

Conversely, to retrieve changes from another repository, run

$ git pull

Merging[edit | edit source]

After creating a new branch development and making changes to this branch, you may want to merge the changes on the development branch back into master.

development$ git merge master
## Resolve any conflicts
development$ git checkout master
master$ git merge --no-ff development

The --no-ff flag prevents the merge from executing a fast-forward. This ensures that a new node will be constructed that records the merge event instead of a fast-forwarding on the branch.

Restore Deleted File[edit | edit source]

If you notice files are missing somewhere and aren't sure which commit triggered its deletion, run the following to determine the last commit that altered this path.

## Missing 'scripts' directory. Find the commit that deleted it.
$ git rev-list -n 1 HEAD -- scripts

## To restore 'scripts', checkout that path from the previous (^) commit.
$ git checkout 2709b067bfc836c471ffa02ba569537e459e5e01^ -- scripts

See also: https://stackoverflow.com/questions/953481/find-and-restore-a-deleted-file-in-a-git-repository

Branches[edit | edit source]

Create a new branch[edit | edit source]

To create a new branch from the master branch

$ git checkout -b new-branch-name

To create a branch from an existing branch

$ git checkout -b  new-branch-name  existing-branch

Delete a branch[edit | edit source]

To delete a branch

$ git branch -d  existing-branch

Pulling & Merging[edit | edit source]

When implementing a feature, it's ideal to separate each feature into its own branch. To test multiple features together, you will need to merge these branches together. Do this using the git pull command.

## Work on a feature
$ git checkout -b  feature-A  master
## Do your work and commit
$ git commit -a
$ git push origin feature-A

## Work on another feature
$ git checkout -b  feature-B  master
$ git commit -a
$ git push origin feature-B

## Then, to test both feature-A and feature-B together:
$ git checkout -b  testing  master
## Pull one, or multiple branches at once with the pull command.
## You will be asked to merge these commits to your branch.
$ git pull origin feature-A
$ git pull origin feature-B

## At this point, your code now should have the changes from both branches.

Identities[edit | edit source]

Users typically use the global identity when using Git. This is great if you use the same identity across all repos.

In order to use different identities, unset the global identity and require that identities are specified from each repository's configuration. Without specifying any identities, git commits will use the system's hostname and username which is not desired.

# git config --global --unset user.name
# git config --global --unset user.email
# git config --global --unset user.signingkey
# git config --global user.useConfigOnly true

Create each new identity.


  • www.micah.soy/posts/setting-up-git-identities/

Examples[edit | edit source]