Git

From Dolphin Emulator Wiki
Jump to navigation Jump to search

Introduction

If you have never used Git before, here is a quick intro to get you started. For Dolphin-specific workflows, read the Contributor's Guide.

First, set up Git:

sudo apt-get install git                 # install Git (assuming you are using some Debian-based Linux like Ubuntu)
git config --global user.name "John Doe" # commits will be attributed to this identity
git config --global user.email johndoe@example.com

Now go to https://github.com/dolphin-emu/dolphin and fork the repository.

git clone git@github.com:YourUserName/dolphin.git # download your fork locally
cd dolphin                       # change into the newly cloned repository (the complete history is inside .git/)
git checkout -b cool_new_feature # create a branch for what you are working on
$EDITOR some/file.cpp            # serious hacking
git status                       # show changed, new or deleted files
git add some/file.cpp            # mark changes to be committed (adds them to the "staging area")
git status                       # show what is staged
git commit                       # editor pops up, edit the commit message, save, close
git push origin cool_new_feature # publish the branch at GitHub

Now you can create a pull request on GitHub.

Your pull requests are tied to your branches. GitHub automatically adds new commits to existing pull requests. To work on something new, always create and checkout a new branch. Otherwise you might accidentally push unrelated commits into one of your previous pull requests. Try to base each pull request on upstream/master so they can be merged independently.

To keep up-to-date:

git remote add upstream https://github.com/dolphin-emu/dolphin.git # add a separate remote for the main repository
git remote -v               # show remotes, you have two now (origin and upstream)
git checkout master         # make sure you are on the master branch
git pull --ff-only upstream # pull in new commits from upstream

If you messed up and want to delete all uncommitted changes (be careful!):

git reset --hard

Useful Git Commands

git show                       # show last commit
git diff                       # diff current working directory to last commit
git log --graph                # draw ASCII graph of Git history
git commit --amend             # add changes in staging area to previous commit
git rebase -i upstream/master  # rebase current branch onto master and interactively select order of commits, meld commits together, or delete some
git reflog                     # show list of recent hashes (even commits outside of the history, would be garbage-collected when left alone)

It may be useful to know that Git branches are actually just labelled pointers into the commit graph.