Want to take your software engineering career to the next level? Join the mailing list for career tips & advice Click here


It's Magit! A Git porcelain inside Emacs.

Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402 (1 ratings)
Rated 5.0 out of 5
Subscribe to updates I use magit

Statistics on magit

Number of watchers on Github 4581
Number of open issues 39
Average time to close an issue 2 days
Main language Emacs Lisp
Average time to merge a PR 2 days
Open pull requests 46+
Closed pull requests 124+
Last commit 22 days ago
Repo Created about 10 years ago
Repo Last Updated 16 days ago
Size 24.8 MB
Homepage https://magit.vc
Organization / Authormagit
Latest Releasev2.90.1
Page Updated
Do you use magit? Leave a review!
View open issues (39)
View magit activity
View on github
Fresh, new opensource launches πŸš€πŸš€πŸš€
Software engineers: It's time to get promoted. Starting NOW! Subscribe to my mailing list and I will equip you with tools, tips and actionable advice to grow in your career.
Evaluating magit for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)

A Git Porcelain inside Emacs

homepage | manual | faq | wiki | mailing list | forum | news

Magit is an interface to the version control system Git, implemented as an Emacs package. Magit aspires to be a complete Git porcelain. While we cannot (yet) claim that Magit wraps and improves upon each and every Git command, it is complete enough to allow even experienced Git users to perform almost all of their daily version control tasks directly from within Emacs. While many fine Git clients exist, only Magit and Git itself deserve to be called porcelains.

Keeping its users this excited is a lot of work . If Magit makes you
more productive too, then please consider making a donation.
Thank you! β€” Jonas Bernoulli

Donate using Github Sponsors Β Β  Donate using IBAN Β Β  Donate using Zelle (USA bank transfer) Β Β  Donate using PayPal

Some alternative donation methods are available.

Getting Started

If you are new to Magit, then either one of the following two articles should help understanding how it differs from other Git clients.

If you are completely new to Magit, then this article is a good visual introduction.

Almost everything that you see in Magit can be acted on by pressing some key, but that's not obvious from just seeing how Magit looks. The screenshots and accompanying text of this article explain how to perform a variety of actions on Magit's output.

Magit differs significantly from other Git interfaces, and its advantages are not immediately obvious simply from looking at a few screenshots as presented in the preceding article.

This article discusses Magit's properties in somewhat more abstract terms.


When something doesn't work as expected then please first see the FAQ. Then also try the list of open issues and use the search box at the top of that page to find older related issues. You should also consult the manual and ask a general-purpose search engine.

If that doesn't answer your question, then ask for help on the Emacs Stackexchange site or the mailing list. We only use the GitHub issue tracker for feature requests and bug reports, so please don't ask for help there.


To report bugs and suggest new feature use the issue tracker. If you have some code which you would like to be merged, then open a pull request. Please also see CONTRIBUTING.md.


Magit was started by Marius Vollmer, and is now maintained by Jonas Bernoulli, Kyle Meyer, and Noam Postavsky. Other former maintainers are Nicolas Dudebout, Peter J. Weisberg, Phil Jackson, Rmi Vanicat, and Yann Hodique. Many more people have contributed code and suggested features.

Over the years a lot of people supported development financially, including the 1987 backers of the 2017 crowdfunding campaign.

Thanks to all of you, may (the history of) the source be with you!

Paren Xkcb GPL v3 Build Status Melpa Melpa Stable Git Xkcd Eierlegende Wollmilchsau Swiss Made Netscape

magit open issues Ask a question     (View All Issues)
  • over 3 years magit-log does not seem to read notes.displayRef
  • over 3 years Provide a function for launching β€œbarebones Emacs” with Magit
  • over 3 years Cleanup push-remote related variables after deletes and renames
  • over 3 years Support all git porcelain commands
  • almost 4 years Implement magit-diff-buffer-with-file similar to diff-buffer-with-file
  • almost 4 years Consider using asterisks at both ends of magit buffer names
  • almost 4 years Emacs occasionally freezes after exiting from ediff mode...
  • almost 4 years Make SPC scroll blob/file buffer while point is on diff
  • almost 4 years Can't discard hunk for long diff - (wrong-type-argument stringp nil)
  • almost 4 years Allow hunk-internal region to span multiple hunks
  • almost 4 years Separate Configure section for magit-branch-popup?
  • almost 4 years magit-log: ability to change commit timestamp format
  • almost 4 years Generalize section visibility cache
  • almost 4 years Support optional positional arguments in magit-popup
  • almost 4 years git-commit font-lock improvements
  • almost 4 years Compute the contents of more collapsed sections lazily
  • almost 4 years undo-tree like interface to navigate in git history
  • almost 4 years Improve Git config variable interface
  • about 4 years Let me edit the patch before staging or otherwise applying
  • about 4 years Side by side blame
  • about 4 years Support manually editing Git commands generated by popups
  • about 4 years vc-refresh-state on emacs 25
  • over 4 years Set initial values of popup arguments based on Git variables
  • over 4 years Show Log For A Line While Diffing
  • over 4 years Allow performing many actions using the mouse
  • over 4 years Use libgit2 in addition to git plumbing and porcelain
magit open pull requests (View All Pulls)
  • Added function magit-diff-buffer-file.
  • fetch-popup: Add magit-fetch-branch
  • magit-apply: add literal CR chars if necessary
  • git-commit-propertize-diff fixes
  • magit-branch-config-popup: new popup
  • magit-rebase-continue: with prefix argument reuse old message as-is
  • Add subtree popup
  • magit-stage: support --intent-to-add
  • Make magit-get setf'able
  • Make sure the right default-directory value is set to avoid the "Not …
  • Improve submodule commands
  • magit-list-repositories: new command
  • add magit-log-move-to-parent command
  • support globbing in diff and log file arguments
  • magit-bisect-visualize-log: new command
  • magit-ediff-stage: use same encoding for all texts
  • Use higher contrast for magit-blame with dark themes.
  • magit-get: return all lines of config value
  • add feature: stage hunk in magit-diff buffer
  • Recenter hunk after movement/refresh
  • List submodules using a tabulated-list-mode buffer
  • cache git config more aggressively (v2)
  • Adjust upstream when branching from remote branch
  • Add more fontification to git-commit.el
  • Document improved hunk-refining performance in release notes
  • Displace obsolete decoding function
  • display 'k' rather than 'C-k' for rebase-kill-line
  • Use nbutlast instead of butlast
  • Sort tags according to semver
  • Raise not just window but frame also
  • In the manual, add dummy subsection, wrapping initial section content
  • Update documentation about the prefixes used to show in-progress rebases
  • Make Shift-selection less surprising
  • Add more commands to the submodule popup
  • Remember arguments used in refs buffer and allow updating them without prefix arg
  • Remove org-export-ignore-headlines advice
  • magit-show-commit: when in a log buffer, use log's file restriction
  • fix show signature
  • More imenu support
  • magit-log-buffer-file: fix `-L` arg when region is active
  • Don't apply w32 env hacks for remote repositories
  • magit-git: always use caller's process-environment when invoking git
  • Add magit-patch-apply-buffer
  • Ensure that isearch can see through overlays added by magit-section
  • Add libgit2 implementation for magit-get-current-branch
  • Use Emacs 27 ChangeLog generating function if available
magit questions on Stackoverflow (View All Questions)
  • view a file's history in magit?
  • show HEAD in magit log
  • Magit Can't Find Git
  • magit-version in Emacs 24.4 on Windows returns Wrong argument type: stringp, nill
  • Emacs + magit - vertical blame
  • emacs magit: git-dir is not in the default place
  • In magit, can I interactively rebase onto another branch?
  • how do I undo rebase in magit?
  • Spacemacs Magit mode magit-refresh
  • Magit is very slow when committing on Windows
  • make magit display file size
  • Most developed magit/github extension for emacs for pull requests
  • How can I remove trailing whitespace from a hunk in Magit?
  • Emacs crashing when opening ediff merge window with Magit
  • Magit - rename last commit
  • Using emacs (and magit?) to visit a file in given commit/branch/etc
  • magit 2 equivalent of . command to mark commit
  • emacs daemon and magit
  • Emacs: Update git-gutter annotations when staging or unstaging changes in magit-status buffer
  • Launch magit directly from ido in Emacs
  • emacs magit switch to quick mode
  • how to set magit commit author?
  • emacs magit diff highlighting
  • How do you list tracked files (git ls-files) in magit?
  • How to make magit pull to have rebase option by default?
  • How can I diff a single file with magit?
  • emacs magit doesn't have remote repo straight
  • How can I unstage multiple hunks using magit?
  • magit for `pull --rebase upstream` (not origin)
  • magit merge conflict `checkout --theirs/--ours`
magit list of languages used
magit latest release notes

Note to distributors: The v in the name of the tarball and its top-level directory was added by mistake. The next release won't have it.

(Github orders this wrong. This release came before v2.90.0 (by every messure: graph, commit date, tag date, and creating this thing here date).

More projects by magit View all
Other projects in Emacs Lisp