In Part I, we saw how to open up the Magit status buffer, view unstaged changes and untracked files, stage changes and commit them. The next thing you should learn is how to view the git log.
The Magit Log
To view a terse history of your repository (à la
git log --graph --oneline --abbrev-commit, which I've aliased to
git pretty), press
l l in any magit buffer. To view the log in verbose form, use
l L instead. Initially, only the last 100 commits are shown (to see 100 more, press
e, and to see all commits, press
Operations on commits in the Magit log
RET to view any commit in the log.
Applying and reverting commits
a on a commit will apply it to your current branch (a "cherry pick", in git-speak), although the changes won't be automatically committed (use
A instead to apply and commit in one go).
On the other hand,
v will revert the commit at point (again, you need to commit the changes yourself).
You can compare any 2 commits or the working tree and a commit right from Magit. Let's see how.
With the commit log
Let's say you want to compare 2 commits in the log. Mark the first commit by navigating to it and pressing
.. Then go to the second and press
=, and your diff will come up in a new buffer. Similar to the previous section, you can selectively apply parts of the diff to your current branch by using
A, and reverse-apply them using
Without the commit log
To compare your working directory with a specific commit, use
d. To compare any 2 arbitrary commits, use
D. As usual, you can use
v to apply and reverse diffs / chunks of diffs.
Resetting and discarding changes to the working tree
You can reset to a previous commit in the branch by typing
x and entering a commit name (this will not affect your working tree or staging area in any way). This does a soft reset, meaning that the changes from the discarded commits are put back in your working tree, and you can commit them again. Be forewarned that rewriting history in this way is not preferable if you have already published it (instead do a normal revert using
v on the defective commits from the log).
To discard only the changes in your working tree and staging area (i.e., to reset to the state of the most recent commit), press
X. This will get rid of all uncommited changes, but will not affect the commit log.
Pushing and Pulling
Remember the Magit status buffer we talked about in Part I, which you get by running
M-x magit-status? After you've made your commit with
C-c C-c, Magit will thoughtfully display an Unpushed Commits section in the status buffer, meaning that you haven't yet published those commits to a remote repository. There's not much point in committing from Magit if you can't do your
git push from it too. So, to push the current branch to a remote, type
P P. If you have no default
origin repository configured, you will be prompted for it. If you want to push to a different remote, give a prefix argument to
If you want to run a
git pull, press
F F. If the current branch is not configured to pull from some remote branch, you will be prompted for one. Magit, again very thoughfully, displays an Unpulled Changes section in the status buffer.
I hope you've found these posts on Magit useful. Questions? Feel free to ask in the comments below.