Commits (10189)
(bug-reference-bug-regexp . "#\\(?2:[0-9]+\\)")
(bug-reference-url-format . "https://github.com/magit/magit/issues/%s"))
(eval . (bug-reference-mode 1))
(indent-tabs-mode . nil))
(outline-regexp . "##"))
(git-commit-major-mode . git-commit-elisp-text-mode)))
Reporting issues and suggesting features
To report bugs and suggest new feature use the [issue tracker][issues].
Code contributions
If you have some code which you would like to be merged, then open a
[pull request][pulls]. Please create atomic commits with descriptive
commit messages and use a dedicated feature branch (`b s` might help
with the latter).
Documentation contributions
Improving the documentation is always a good way to get started
contributing to some project.
In the case of Magit this is somewhat complicated by the fact that
we use some custom extensions. Some meta documentation can be found
TL;DR — Edit `magit.org`. Do not edit `magit.texi`. And don't touch
the version numbers. The maintainers will then update `magit.texi`
and the version numbers in `magit.org` and amend those changes to your
Please also consider to contribute by making a
[monetary donation][donations].
[donations]: https://magit.vc/donate/
[issues]: https://github.com/magit/magit/issues
[metadocs]: https://github.com/magit/magit/wiki/Documentation-tools-and-conventions
[pulls]: https://github.com/magit/magit/pulls
name: Bug report
about: Report a defect
Please explain
(1) what behavior you expected
(2) what behavior you observed
(3) and how we can reproduce the issue.
Also post the output of
M-x magit-version RET
Before reporting a defect please try to reproduce it using an Emacs instance in which only Magit and its dependencies have been loaded. Other packages or your configuration should not be loaded. This makes it easier to determine whether the issue lays with Magit or something else.
If you run Magit from its Git repository, then you can do so using:
$ cd /path/to/magit
$ make emacs-Q
Alternatively, run `M-x magit-emacs-Q-command RET` to save a shell command to the `kill-ring` and the system's clip-board, which you can then copy into a shell to run.
Finally, if that didn't work and you have installed Magit from Melpa, then run commands similar to the ones below, but use tab completion to replace the various Ns with the correct versions:
$ cd ~/.emacs.d/elpa/magit-N
$ emacs -Q --debug-init --eval '(setq debug-on-error t)' -L ../dash-N -L ../git-commit-N -L ../magit-popup-N -L ../with-editor-N -L ../ghub-N -L . -l magit
More debugging tools are described in the manual [6].
[6]: https://magit.vc/manual/magit/Debugging-Tools.html
---- now delete this line and everything above ----
name: Feature request
about: Suggest a new feature
Before you ask for a new feature to be added to Magit or for an existing feature to be improved, please make sure that what are asking for does not already exist by consulting the documentation [1].
Before you ask for a new argument to be added to some popup, see this [2] page.
Then describe the feature you would like to see in Magit and why it would be useful to you. You might also want to describe any alternative solutions or features you've considered.
[1]: https://magit.vc/manual/magit/#Top
[2]: https://github.com/magit/magit/wiki/Additional-proposed-infix-arguments-and-suffix-commands
---- now delete this line and everything above ----
name: Support request
about: Do NOT open support requests here
DO NOT use this issue tracker for support requests.
Please use the Emacs StackExchange site [1] or Emacs subreddit [2] for support requests.
But before you do that please read the list of frequently asked questions [3] and consult the manual [4] and a search engine.
We only use this issue tracker for feature requests and bug reports.
[1]: https://emacs.stackexchange.com
[2]: https://www.reddit.com/r/emacs
[3]: https://magit.vc/manual/magit/FAQ.html
[4]: https://magit.vc/manual/magit/#Top
Use a dedicated feature branch
Please use a dedicated feature branch for your feature request, instead of asking us to merge "your-fork/master" into the "origin/master". The use of dedicated branches makes it much more convenient to deal with pull-requests, especially when using Magit to do so.
If you were about to open a pull-request asking us to merge your version of "master", then see [1] for instructions on how to quickly fix that and some information on why we ask you to do so.
Additionally we ask you to allow us to push to the branch you want us to merge. We might want to push additional commits and/or make minor changes. Please make sure the box next to "Allow edits from maintainers" is checked before creating the pull-request.
[1]: https://github.com/magit/magit/wiki/Dedicated-pull-request-branches
Do NOT use Github to edit files and create commit messages
Unless you are aware of all the pitfalls and take great care to avoid them, the use of Github results in many small defects, including but not limited to trailing whitespace, commit messages containing overlong lines and no newline at the very end, and "GitHub <noreply@github.com>" being used as the committer. The last one cannot even be avoided, which I consider as an affront.
Github is an insufficient interface for editing files and creating commits. Please don't do it when contributing to Magit.
What you should write here
Please summarize the changes made in the commits. Explain why you are making these changes, not just what changes you are making. This also applies to the commit messages.
How to update the manual
If you make changes to the manual, then edit only "magit.org". Do not manually edit "magit.texi". The latter has to be generated from the former. If you want to do that yourself, then follow the instructions at [2]. Otherwise a maintainer will do it and amend that to your commit.
[2]: https://github.com/magit/magit/wiki/Documentation-tools-and-conventions
Alex Dunn <adunn@ucsb.edu> <dunn.alex@gmail.com>
Alex Ott <alexott@gmail.com> <ott@flash.lan>
Andriy Kmit' <dev@madand.net>
Bar Magal <bmagamb@gmail.com>
Benjamin Motz <benjamin.motz@mailbox.org> <Benjamin.Motz@3ds.com>
Bradley Wright <brad@intranation.com> <bradley.wright@digital.cabinet-office.gov.uk>
Buster Copley <buster@buster.me.uk>
Chillar Anand <anand21nanda@gmail.com>
Christophe Junke <junke.christophe@gmail.com> <christophe.junke@parrot.com>
Damien Cassou <damien@cassou.me> <damien.cassou@gmail.com>
David Abrahams <dave@boostpro.com>
Dean Kariniemi <8913263+d3k4r@users.noreply.github.com>
Dennis Paskorz <dennis@walltowall.com>
Evgkeni Sampelnikof <esabof@gmail.com> <faceoffuture@yahoo.gr>
Evgkeni Sampelnikof <esabof@gmail.com> <sabof@example.com>
Fabian Wiget <fabacino@gmail.com>
Fritz Stelzer <brotzeitmacher@gmail.com>
Graham Clark <grclark@gmail.com> <gcla@moria.(none)>
Ivan Brennan <ivan.brennan@gmail.com>
Jesse Alama <jesse.alama@gmail.com> <alama@stanford.edu>
Joakim Jalap <JOJA@stoneridge.com>
Jon Vanderwijk <jonathn@github.com>
Jonas Bernoulli <jonas@bernoul.li>
Jonas Bernoulli <jonas@bernoul.li> <jonasbernoulli@gmail.com>
Kan-Ru Chen <kanru@kanru.info> <koster@debian.org>
Leo Liu <sdl.web@gmail.com>
Luís Oliveira <luismbo@gmail.com> <loliveira@common-lisp.net>
Luís Oliveira <luismbo@gmail.com> Luís Borges de Oliveira <lbo@siscog.pt>
Marc Herbert <marc.herbert@gmail.com> <Marc.Herbert+git@gmail.com>
Marc Herbert <marc.herbert@gmail.com> <marc.herbert+git@gmail.com>
Marcel Wolf <mwolf@ml1.net> marcel-wolf
Marian Schubert <marian.schubert@gmail.com> <marian.schubert@gooddata.com>
Marius Vollmer <marius.vollmer@gmail.com> <marius.vollmer@nokia.com>
Marius Vollmer <marius.vollmer@gmail.com> <marius.vollmer@uni-dortmund.de>
Marius Vollmer <marius.vollmer@gmail.com> <mvo@bright.(none)>
Marius Vollmer <marius.vollmer@gmail.com> <mvo@esdhcp03984.research.nokia.com>
Marius Vollmer <marius.vollmer@gmail.com> <mvo@manamana.(none)>
Mark Karpov <markkarpov@opmbx.org>
N. Troy de Freitas <me@ntdef.com> <9503857+ntdef@users.noreply.github.com>
Natalie Weizenbaum <nex342@gmail.com> Nathan Weizenbaum
Noam Postavsky <npostavs@users.sourceforge.net>
Noam Postavsky <npostavs@users.sourceforge.net> <github.10.npostavs@spamgourmet.com>
Peter J. Weisberg <pj@irregularexpressions.net>
Peter Vasil <mail@petervasil.net>
Phil Sainty <phil@catalyst.net.nz> <phil-s@users.noreply.github.com>
Philippe Vaucher <philippe.vaucher@gmail.com> <philippe@stvs.ch>
Raimon Grau <raimon@3scale.net> <raimonster@gmail.com>
Rémi Vanicat <vanicat@debian.org> <github.20.vanicat@mamber.net>
Rüdiger Sonderfeld <ruediger@c-plusplus.net> <ruediger@c-plusplus.de>
Seong-Kook Shin <cinsky@gmail.com>
Silent Sphere <silentsphere110@gmail.com>
Sylvain Rousseau <thisirs@gmail.com>
Syohei Yoshida <syohex@gmail.com>
Sébastien Gross <seb@chezwam.org> <seb•ɑƬ•chezwam•ɖɵʈ•org>
Tunc Uzlu <bb2020@users.noreply.github.com>
Wei Huang <weih@opera.com>
Wilfred Hughes <me@wilfred.me.uk> <whughes@ahl.com>
Wouter Bolsterlee <wouter@bolsterl.ee>
Yann Hodique <yann.hodique@gmail.com> <hodiquey@vmware.com>
Yann Hodique <yann.hodique@gmail.com> <yann.hodique@bromium.com>
Yann Hodique <yann.hodique@gmail.com> <yhodique@vmware.com>
Yuichi Higashi <aaa707b@gmail.com>
Óscar Fuentes <ofv@wanadoo.es> <ofv@wanadoo.es>
Óscar Fuentes <ofv@wanadoo.es> <oscar@nc10>
Óscar Fuentes <ofv@wanadoo.es> <oscar@qcore>
sudo: false
language: generic
- CURL="curl -fsSkL --retry 9 --retry-delay 9"
- GHRAW="https://raw.githubusercontent.com"
# 25.2 is identical to 25.3 except for a critical security bug in
# enriched text mode (see Emacs Bug#28350).
- EMACS_VERSION=26 # 26.1.50, emacs-26 branch, built daily
- EMACS_VERSION=master # 27.0.50, master branch, built daily
- env: EMACS_VERSION=master
- $CURL -O https://github.com/npostavs/emacs-travis/releases/download/bins/emacs-bin-${EMACS_VERSION}.tar.gz
- tar -xaf emacs-bin-${EMACS_VERSION}.tar.gz -C /
- export EMACS=/tmp/emacs/bin/emacs
- $CURL -O ${GHRAW}/magnars/dash.el/master/dash.el
- $CURL -O ${GHRAW}/magit/ghub/master/ghub.el
- $CURL -O ${GHRAW}/magit/ghub/master/ghub-graphql.el
- $CURL -O ${GHRAW}/vermiculus/graphql.el/master/graphql.el
- $CURL -O ${GHRAW}/magit/magit-popup/master/magit-popup.el
- $CURL -O ${GHRAW}/volrath/treepy.el/master/treepy.el
- $CURL -O ${GHRAW}/magit/with-editor/master/with-editor.el
- $EMACS -Q --batch -L . -f batch-byte-compile dash.el ghub.el ghub-graphql.el graphql.el magit-popup.el treepy.el with-editor.el
- $EMACS --version
- git config --global user.name "A U Thor"
- git config --global user.email a.u.thor@example.com
- git tag 0
# Default is change, but that includes a new branch's 1st success.
on_success: never
on_failure: always # The default.
This diff is collapsed.
This diff is collapsed.
-include ../config.mk
include ../default.mk
## ###################################################################
.PHONY: texi install clean AUTHORS.md stats
all: info
## Build #############################################################
info: $(INFOPAGES) dir
html: $(HTMLFILES)
pdf: $(PDFFILES)
epub: $(EPUBFILES)
%.info: %.texi
@printf "Generating $@\n"
@$(MAKEINFO) --no-split $< -o $@
dir: magit.info
@printf "Generating dir\n"
@echo $^ | xargs -n 1 $(INSTALL_INFO) --dir=$@
HTML_FIXUP_CSS = '/<link rel="stylesheet" type="text\/css" href="\/assets\/page.css">/a\
<link class="s-css-s--style" rel="stylesheet" title="Default" href="/assets/themes/default.css">\
\n<link class="s-css-s--style" rel="stylesheet alternate" title="Default high contrast" href="/assets/themes/default-high-contrast.css">\
\n<link class="s-css-s--style" rel="stylesheet alternate" title="Solarized dark xterm" href="/assets/themes/solarized-dark-xterm.css">\
\n<link class="s-css-s--style" rel="stylesheet alternate" title="Black on white" href="/assets/themes/black-on-white.css">\
\n<script src="/assets/js/simple-css-switch.js"></script>'
HTML_FIXUP_ONLOAD = 's/<body lang="en">/<body lang="en" onload="simpleCssSwitch()">/'
HTML_FIXUP_MENU = '/<\/body>/i<div id="s-css-s--menu"><\/div>'
%.html: %.texi
@printf "Generating $@\n"
@$(MAKEINFO) --html --no-split $(MANUAL_HTML_ARGS) $<
html-dir: $(TEXIFILES)
@printf "Generating magit/*.html\n"
@$(MAKEINFO) --html $(MANUAL_HTML_ARGS) magit.texi
@for f in $$(find magit -name '*.html') ; do \
sed -i -e $(HTML_FIXUP_CSS) -e $(HTML_FIXUP_ONLOAD) -e $(HTML_FIXUP_MENU) $$f ; \
%.pdf: %.texi
@printf "Generating $@\n"
@texi2pdf --clean $< > /dev/null
%.epub: %.texi
@printf "Generating $@\n"
@makeinfo --docbook $< -o epub.xml
@xsltproc $(DOCBOOK_XSL) epub.xml 2> /dev/null
@echo "application/epub+zip" > mimetype
@zip -X --quiet --recurse-paths -0 $@ mimetype
@zip -X --quiet --recurse-paths -9 --no-dir-entries $@ META-INF OEBPS
## Install ###########################################################
install: install-info install-docs
install-docs: install-info
@$(MKDIR) $(DESTDIR)$(docdir)
$(CP) AUTHORS.md $(DESTDIR)$(docdir)
install-info: info
@$(MKDIR) $(DESTDIR)$(infodir)
$(CP) $(INFOPAGES) $(DESTDIR)$(infodir)
## Clean #############################################################
@printf "Cleaning Documentation/*...\n"
## Release management ################################################
ORG_ARGS = --batch -Q $(ORG_LOAD_PATH)
ORG_ARGS += -l magit-utils.el -l org-man -l ox-extra -l ox-texinfo+.el
ORG_EVAL = --eval "(ox-extras-activate '(ignore-headlines))"
ORG_EVAL += --eval "(setq indent-tabs-mode nil)"
ORG_EVAL += --eval "(setq org-src-preserve-indentation nil)"
ORG_EVAL += --funcall org-texinfo-export-to-texinfo
# This target first bumps version strings in the Org source. The
# necessary tools might be missing so other targets do not depend
# on this target and it has to be run explicitly when appropriate.
# AMEND=t make texi Update manual to be amended to HEAD.
# VERSION=N make texi Update manual for release.
@printf "\n" >> $(PKG).texi
@rm -f $(PKG).texi~
@printf "Generating statistics\n"
@gitstats -c style=/assets/stats.css -c max_authors=999 $(TOP) $(statsdir)
authors: AUTHORS.md
@printf "Generating AUTHORS.md..."
@test -e $(TOP).git \
&& (printf "$$AUTHORS_HEADER\n" > $@ \
&& git log --pretty=format:'- %aN <%aE>' | sort -u >> $@ \
&& printf "done\n" ; ) \
|| printf "FAILED (non-fatal)\n"
DOMAIN ?= magit.vc
PUBLISH_PATH ?= /manual/
S3_BUCKET ?= s3://$(DOMAIN)
CFRONT_PATHS = $(PKG).html $(PKG).pdf $(PKG)/*
comma := ,
empty :=
space := $(empty) $(empty)
publish-stats: stats
@printf "Uploading statistics...\n"
@aws s3 sync $(statsdir) $(S3_BUCKET)/stats/
@printf "Uploaded to $(PUBLISH_URL)/stats/\n"
@printf "Generating CDN invalidation\n"
@aws cloudfront create-invalidation \
--distribution-id $(CFRONT_DIST) --paths "/stats/*" > /dev/null
publish-manuals: $(PUBLISH_TARGETS)
@printf "Uploading manuals... $(PUBLISH_TARGETS)\n"
@aws s3 cp $(PKG).html $(PUBLISH_TARGET)
@aws s3 cp $(PKG).pdf $(PUBLISH_TARGET)
@aws s3 cp $(PKG).epub $(PUBLISH_TARGET)
@printf "upload: ./$(PKG)/* to $(PUBLISH_TARGET)*\n"
@aws s3 sync --delete $(PKG) $(PUBLISH_TARGET)$(PKG)/ > /dev/null
@printf "Generating CDN invalidation\n"
@aws cloudfront create-invalidation --distribution-id $(CFRONT_DIST) --paths \
"$(subst $(space),$(comma),$(addprefix $(PUBLISH_PATH),$(CFRONT_PATHS)))" > /dev/null
release-manuals: $(PUBLISH_TARGETS)
@printf "Uploading release manuals...\n"
@aws s3 cp $(PKG).html $(RELEASE_TARGET)
@aws s3 cp $(PKG).pdf $(RELEASE_TARGET)
@aws s3 cp $(PKG).epub $(RELEASE_TARGET)
@printf "upload: ./$(PKG)/* to $(RELEASE_TARGET)*\n"
@aws s3 sync --delete $(PKG) $(RELEASE_TARGET)$(PKG)/ > /dev/null
@printf "Generating CDN invalidation\n"
@aws cloudfront create-invalidation --distribution-id $(CFRONT_DIST) --paths \
"$(subst $(space),$(comma),$(addprefix $(RELEASE_PATH),$(CFRONT_PATHS)))" > /dev/null
# Templates ##########################################################
The following people have contributed to Magit, including the
libraries `git-commit.el`, `magit-popup.el`, and `with-editor.el`
which are distributed as separate Elpa packages.
For statistics see https://magit.vc/stats/authors.html.
Names below are sorted alphabetically.
- Marius Vollmer <marius.vollmer@gmail.com>
- Jonas Bernoulli <jonas@bernoul.li>
- Kyle Meyer <kyle@kyleam.com>
- Noam Postavsky <npostavs@users.sourceforge.net>
Retired Maintainers and Developers
- Nicolas Dudebout <nicolas.dudebout@gatech.edu>
- Peter J. Weisberg <pj@irregularexpressions.net>
- Pieter Praet <pieter@praet.org>
- Phil Jackson <phil@shellarchive.co.uk>
- Rémi Vanicat <vanicat@debian.org>
- Yann Hodique <yann.hodique@gmail.com>
Magit v0.5.1 Release Notes
This is the first release of Magit. Enjoy!
Released 14 August 2008 by Marius Vollmer.
157 Marius Vollmer
Magit v0.6.1 Release Notes
Released 16 October 2008 by Marius Vollmer.
Changes since v0.5.1
Almost everything has changed. Some highlights:
* Magit now works with Git 1.6.0. (John Wiegley)
* Support for interactive rewriting.
* Sections can be shown and hidden.
* Staging, unstaging, applying, reverting and discarding changes can
now be done line-by-line, not only hunk-by-hunk.
212 Marius Vollmer
- John Wiegley
Magit v0.7.0 Release Notes
Released 8 March 2009 by Marius Vollmer.
Changes since v0.6.1
* Tagging, on 't' and 'T'.
* Stashing, on 'z' and 'Z'.
* Wazzup, on 'w'. Wazzup gives you an overview over how other
branches relate to the current one.
* There is more control over pushing. 'P' now takes a prefix argument
and pushing a branch without a default remote will ask for one.
* Logs have changed a bit: 'l' shows the traditional brief log, and
'L' shows a more verbose log. Use the prefix arg to specify the
range of the log.
* M-x magit-status doesn't prompt anymore for a directory when invoked
from within a Git repository. Use C-u to force a prompt.
* When you have nothing staged, 'c' will now explicitly ask whether to
commit everything instead of just going ahead and do it. This can
be customized.
* The digit keys '1', '2', '3', and '4' now show sections on the
respective level and hide everything below. With Meta, they work on
all sections; without, they work only on sections that are a parent
or child of the current section.
* Typing '+' and '-' will change the size of hunks, via the "-U"
option to git diff. '0' resets hunks to their default size.
* Typing 'k' on the "Untracked files" section title will offer to
delete all untracked files.
* Magit understands a bit of git-svn: the status buffer shows unpushed
and unpulled commits, 'N r' runs git svn rebase, and 'N c' runs git
svn dcommit.
* Magit now also works when the direcory is accessed via tramp.
* M-x magit-status can also create new repositories when given a
directory that is not a Git repository.
* Magit works better with oldish Gits that don't understand "--graph",
for example.
* The name of the Git program and common options for it can be
107 Marius Vollmer
18 John Wiegley
9 Alexey Voinov
5 Marcin Bachry
3 Rémi Vanicat
2 Alex Ott
2 René Stadler
2 Steve Purcell
1 Daniel Farina
1 David Wallin
1 Ian Eure
1 Jesse Alama
Magit v0.8.0 Release Notes
Released 7 May 2010 by Phil Jackson.
Changes since v0.7.0
* By setting magit-repo-dirs, you can get better repo completion.
Magit will offer all subdirectories (upto magit-repo-dirs level
deep) of the listed directories when magit-status asks for a
directory to work on. You can get the old behavior with a double
prefix to magit-status.
* Hitting 'c' or 'C' while resolving a conflict in the middle of a
rebase will offer to continue the rebase instead of trying to commit
your changes.
* Pulling will ask which branch to pull from when you don't have a
default branch configured.
* Switching to a remote branch will offer to create a local tracking
branch for it.
* Hitting C-c C-s while editing a commit message will toggle the
"--signoff" option.
* Hitting 's' on the "Untracked files" section title will stage all
untracked files.
* Hitting 'C-u S' will stage all untracked and tracked files.
* Performance improvements in the status buffer.
* Bug fixes to make Magit work better with newer Gits.
66 Phil Jackson
53 Marius Vollmer
27 Rémi Vanicat
7 Alexey Voinov
5 Hannu Koivisto
5 Roger Crew
4 John Wiegley
4 Moritz Bunkus
3 Ben Walton
2 Marcin Bachry
2 Óscar Fuentes
1 David Abrahams
1 Leo Liu
1 Pavel Holejsovsky
1 Ramkumar Ramachandra
1 Steve Purcell
Magit v0.8.1 Release Notes
Released 10 June 2010 by Phil Jackson.
Changes since v0.8.0
* New library `rebase-mode.el'. Edit Git rebase files.
* New commands `magit-log-all' and `magit-log-first-parent'.
* New command `magit-git-command'. Run any Git command.
* `magit-remote-update' learned to fetch just the current remote.
* `magit-tag' learned to place the tag on something other than HEAD.
55 Phil Jackson
7 Rémi Vanicat
7 Ævar Arnfjörð Bjarmason
4 Natalie Weizenbaum
2 Ramkumar Ramachandra
1 Mark Hepburn
1 Moritz Bunkus
Magit v0.8.2 Release Notes
Released 10 July 2010 by Phil Jackson.
Changes since v0.8.1
* Use shorter more human readable representations for refs.
* Optionally show refs for remote branches the way Git would.
* Tell VC to update the mode-line for us.
21 Phil Jackson
18 Natalie Weizenbaum
2 Alan Falloon
2 Moritz Bunkus
2 Rémi Vanicat
1 Alex Ott
1 Leo Liu
1 Sean Bryant
1 Ævar Arnfjörð Bjarmason
1 Óscar Fuentes
Magit v1.0.0 Release Notes
Released 23 March 2011 by Phil Jackson.
Changes since v0.8.2
* New library `magit-key-mode.el'. From a popup buffer dispatch
Magit/Emacs commands which wrap Git commands and select the
arguments passed to Git. Group various sets of related commands
in new menus and adjust them accordingly.
* New library `magit-svn.el' based on code previously in `magit.el'.
Improve the implementation. Control `git svn' from Magit.
* New library `magit-topgit.el' based on code previously in
`magit.el'. Improve the implementation. Control TopGit from Magit.
* Provide a wrapper for `completing-read'. Support using iswitchb to
do completion.
* Fixed and improved information shown during a rebase.
* New macro `magit-define-inserter' to define functions which insert
* New macro `magit-add-action'. A hook-like extension mechanism for
commands that behave differently based on the type of the section
at point.
* New macro `magit-define-command'. Like `defun' but also define
a hook in addition to the function/command. If a hook function
succeeds do not run the function body as passed to this macro.
* New commands `magit-add-change-log-entry'
and `magit-add-change-log-entry-other-window'.
* New command `magit-change-what-branch-tracks'.
* New commands `magit-run-git-gui' and `magit-run-gitk'.
* Various new submodule commands.
* Various new branch commands.
* Various new log commands. Remove some old log commands.
* Make reflog commands more like the log commands.
* Numerous bugfixes and tweaks.
197 Phil Jackson
27 Natalie Weizenbaum
25 Óscar Fuentes
22 Moritz Bunkus
20 Rémi Vanicat
17 Aaron Culich
10 Timo Juhani Lindfors
8 Ramkumar Ramachandra
8 Ævar Arnfjörð Bjarmason
6 Yann Hodique
5 Hannu Koivisto
5 Julien Danjou
5 Peter J. Weisberg
4 Leo Liu
3 Robin Green
2 Brian Warner
2 Christian Kluge
2 Marc Herbert
1 Andreas Fuchs
1 Chris Bernard
1 David Abrahams
1 Dominique Quatravaux
1 John Wiegley
1 Paul Stadig
1 Philip Weaver
1 Remco van 't Veer
1 Robert Boone
1 Rüdiger Sonderfeld
1 Tom Feist
Magit v1.1.0 Release Notes
Released 23 December 2011 by Yann Hodique.
Changes since v1.0.0
* Added distinct faces for various different kinds of refs.
* Completely redesigned existing faces.
* Added library `magit-classic-theme.el' for users who like the old
faces better.
* Share many more key bindings between all Magit modes. Previously
many commands were only available in certain buffers, even though
they are useful in all Magit buffers.
* Added library `magit-simple-keys.el' for users who don't like the
* Added support for using Ido to do completion.
* Added support for Ediff.
* Added shell script `magit'.
* Added library `magit-bisect.el'.
* Added library `magit-stgit.el'.
* Added mode `magit-svn-mode'.
* Added mode `magit-topgit-mode'.
* Added mode `magit-rebase-mode'.
* Added buttons to commit buffer to cylce to commits which were
previously shown. The commands are `magit-show-commit-backward'
and `magit-show-commit-forward.
* Defined backward compatibility implementations of some Emacs
* Type changes are now shown in diffs.
* Added option `magit-set-upstream-on-push'.
* Added option `magit-default-tracking-name-function'.
* Added option `magit-log-auto-more'.
* Added option `magit-create-branch-behaviour'.
* Added option `magit-status-buffer-switch-function'.
* Added option `magit-rewrite-inclusive'.
* Added options `magit-highlight-trailing-whitespace' and
* Added command `magit-show'. Visit REVISION:FILE.
* Added command `magit-delete-branch-forced'.
* Added command `magit-log-edit-toggle-author'.
* `magit-reset-working-tree' learned to remove untracked files.
* `magit-push' learned to set the upstream branch.
152 Peter J. Weisberg
55 Yann Hodique
18 Phil Jackson
18 Pieter Praet
18 Rémi Vanicat
12 Moritz Bunkus
10 Lluís Vilanova
8 Eli Barzilay
7 Nicolas Dudebout
6 Roger Crew
5 Štěpán Němec
3 David Abrahams
3 Hannu Koivisto
3 Jeff Bellegarde
3 Rüdiger Sonderfeld
2 Alan Falloon
2 Andreas Rottmann
2 Andrew Kirkpatrick
2 Craig Andera
2 Jasper St. Pierre
1 Andrey Smirnov
1 Bastian Beischer
1 Chris Moore
1 Daniel Brockman
1 Eric Davis
1 George Kadianakis
1 Kimberly Wolk
1 Luke Amdor
1 Luís Borges de Oliveira
1 Marc Herbert
1 Marco Craveiro
1 Ramkumar Ramachandra
1 Steve Purcell
1 Thomas Jost
1 Tibor Simko
1 Tom Feist
1 Ævar Arnfjörð Bjarmason
Magit v1.1.1 Release Notes
Released 14 January 2012 by Yann Hodique.
Changes since v1.1.0
* `magit-svn-get-local-ref' learned to expand branch specs containing
* `magit-log-edit' learned to amend and create commits with no message.
* Several other fixes and improvements.
6 Nicolas Dudebout
6 Yann Hodique
1 Graham Clark
1 Justin Caratzas
1 Peter J. Weisberg
1 Ryan C. Thompson
1 Timo Juhani Lindfors
Magit v1.1.2 Release Notes
Released 23 September 2012 by Yann Hodique.
Changes since v1.1.1
* Modes now have proper mode-line lighters.
* Hook variables are now defined semi-explicitly.
* Uninteresting refs are no longer shown in logs.
* The deprecated `assoc' libary is no longer used.
* Several other fixes and improvements.
13 Yann Hodique
9 Peter J. Weisberg
2 Jonas Bernoulli
2 Ramkumar Ramachandra
1 Bradley Wright
1 Bryan Shell
1 Damien Cassou
1 Eric Davis
1 John Wiegley
1 Nic Ferier
1 Nick Alcock
1 Rémi Vanicat
Magit v1.2.0 Release Notes
Released 23 September 2012 by Yann Hodique.
Changes since v1.1.2
* Rewrote the branch manager.
* Diffs are optionally refined using `diff-refine-hunk'.
* Added library `magit-blame.el' defining new mode
* Added library `magit-wip.el' defining new modes
`magit-wip-save-mode' and `magit-wip-mode'.
* New section movement commands; `magit-goto-next-sibling-section'
and `magit-goto-previous-sibling-section'.
* Added command `magit-file-log'.
* Added command `magit-manual-merge'.
* `magit-delete-branch-force' was merged into `magit-delete-branch'.
* `magit-move-branch' learned to force the rename.
* `magit-reset-working-tree' learned to remove ignored files.
* `magit-pull' learned to set `branch.BRANCH.merge'.
* `magit-log-edit' learned to respect GIT_AUTHOR_EMAIL,
* `magit-visit-item' learned to visit untracked files, diffs and
* Added option `magit-sha1-abbrev-length'.
157 Yann Hodique
61 Nicolas Dudebout
14 Peter J. Weisberg
12 Jonas Bernoulli
10 Ryan C. Thompson
7 Miles Bader
6 Damien Cassou
5 Samuel Bronson
4 Dale Hagglund
4 Eli Barzilay
4 Takafumi Arakaki
4 rabio
3 Leonardo Etcheverry
3 Nick Alcock
3 Rémi Vanicat
3 Rüdiger Sonderfeld
2 Graham Clark
2 Hans-Peter Deifel
2 Moritz Bunkus
1 Andreas Liljeqvist
1 Christian Dietrich
1 Christopher Monsanto
1 Daniel Hackney
1 Hannu Koivisto
1 John Wiegley
1 Jonathan Roes
1 Ole Arndt
1 Ron Parker
1 Suhail Shergill
Magit v1.2.1 Release Notes
Released 23 May 2014 by Jonas Bernoulli.
Changes since v1.2.0
* `magit-delete-directory' was rewritten to deal with an incompatible
change in `delete-directory' in Emacs v24.4.
1 Jonas Bernoulli
Magit v1.2.2 Release Notes
Released 23 October 2014 by Jonas Bernoulli.
Changes since v1.2.1
* `magit-delete-directory' uses itself when deleting recursively,
instead of `org-delete-directory' which it was copied from.
* Many byte-compile warnings were addressed.
5 Jonas Bernoulli
Magit v1.4.0 Release Notes
Released 1 April 2015 by Jonas Bernoulli.
This release sits in the middle of a commit marathon that lasted for
more than 4700 commits.
When I became Magit's new maintainer during the summer of 2013 Magit
was already a big success, but underneath its shiny surface it was
having some serious problems. Over the years the source had gotten
very disorganized and many old abstractions were no longer sufficient.
Unfortunately existing code had almost never been adjusted when new
features had been added, leading to a lot of new code that worked
around limitations of existing code.
This was clearly not sustainable in the long run, and so I started
cleaning up and replacing the existing abstractions with simpler, yet
often more powerful implementations. Unfortunately his had to happen
incrementally as it was seldom possible to cleanup one area without
making substantial changes elsewhere. Along the way I also addressed
many of the hundreds of feature requests, but that was more of a bonus
- the focus was on getting the codebase ready for future improvements.
At the beginning of 2014 I moved development to the new next branch.
Working on a branch which was not used by thousands of Melpa users
allowed me to move faster and users were no longer affected by the
occasional regression. But it also meant that I now had to maintain
two branches. In hindsight I should have released the master branch
as 1.3.0 at that time, despite all the known defects it had.
Since then I have finished the cleanup on the next branch and then
moved on to implement many new features. On the master branch the
focus was on bugfixes and the occasional backport. This release is
based on the master branch. Later this spring 2.1.0 will be released
based on the next branch.
Compiling a list of all changes in 1.4.0 would by a major amount of
work in itself, so instead the below list is for the most part limited
to major changes, which enabled the user visible changes. Many users
don't have to be told about the new features anyway - they have been
using them for more than a year now.
Changes since v1.2.2
* The libraries `magit-topgit.el', `magit-stgit.el', and
`magit-svn.el' all reincarnated as separate repository.
* The libraries `magit-classic-theme.el' and `magit-simple-keys.el',
which allowed users to undo some of the changes in older releases,
were removed.
* The library `rebase-mode.el' was renamed to `git-rebase-mode.el'
and moved to the `magit/git-modes' repository.
* The library `magit-log-edit-mode.el' was removed and replaced with
`git-commit-mode.el' from the `magit/git-modes' repository.
* The functionality provided by the library `magit-bisect.el' was
replaced with a new implementation in `magit.el'.
* The package `cl-lib` is now used instead of the obsolete `cl'.
* The library `magit.el' no longer lacks any recognizable structure.
* The macro `magit-define-command' was removed.
The hook that was defined in addition to the command only served
to make things more complicated and the generated doc-string was
* The use of "section actions" has been reduced to a minimum.
Commands that behave differently depending on the type of the
current section still use `magit-section-case' or in some cases
even `magit-section-action', but the preferred way for users to
add new variants now is to add a new command to the type-specific
section keymap, instead of the hooks defined by
* More work is done directly in `magit-with-section'.
Most of the helper functions were removed. These functions
were not intended to be used directly, but that did not keep
contributors from doing so, leading to many inconsistencies.
* The mode machinery was massively refactored.
Most importantly the new macro `magit-mode-setup' was added,
replacing the old `magit-mode-init' which forgoes most of the
things each and every of its callers has to do, which let to many
* The refresh machinery was massively refactored.
A refresh now has to be requested more explicitly by either calling
`magit-refresh' or one of the functions that call Git and then the
former. Also, refreshing now more often correctly preserves point.
* Washing diffs now takes less cycles.
Previously the code used to wash diffs was very complicated. It
passed around state using many dynamically bound variables, and
called `git diff' many times. Now we call `git diff' once and then
wash its output in one go.
* Commits and stashes are now washed using the regular diffwasher.
* Low-level functions for running Git were massively refactored, and
many new variants were added. Previously many callers had to deal
with the gory details themselves (and usually did it badly).
* The output from processes is now logged in a dedicated buffer.
From this buffer it's also possible to kill a running process.
* The Wazzup buffer was massively refactored.
All options to optionally make it faster were removed, as it is now
faster out-of-the-box without sacrificing any functionality at all.
* Many more competing abstractions were unified.
It was common to have one no longer sufficient core abstraction, and
several competing wrapper abstractions. In most cases this has been
replaced with a single, less complex implementation, which serves all
of the current use cases.
* Refreshing "after a asynchronous process has run" now happens after
the process has actually finished. That was always the intention,
but not what actually used to happen.
* The commit message is no longer provided when calling `git commit'.
Instead Git populates a file with a template and then uses $EDITOR
to have the user edit that. This did not work so well for a while
but now we succeed in having the emacsclient being used as $EDITOR.
* A new Branch Manager was added.
* Log learned to show optionally show author information in the
* Terminology with regards to what a tracking branch is, was fixed.
* When creating a new branch the default choice is what Git would
default to, instead of some silly name.
* Tools used to test whether Git supports certain features was removed.
Instead we now require a non-ancient version of Git.
* The shell script `magit' reincarnated as a separate repository.
1838 Jonas Bernoulli
171 Yann Hodique
121 Pieter Praet
59 Rémi Vanicat
24 Nicolas Dudebout
21 Takafumi Arakaki
16 acple
14 Phil Jackson
13 Rüdiger Sonderfeld
12 Mitchel Humpherys
8 Servilio Afre Puentes
7 Ramkumar Ramachandra
7 Teruki Shigitani
6 Lluís Vilanova
6 Sergey Vinokurov
5 Thierry Volpiatto
4 Moritz Bunkus
4 Noam Postavsky
4 Seong-Kook Shin
3 Laurent Laffont
3 Leonardo Etcheverry
3 Loic Dachary
3 Raimon Grau
3 Sébastien Gross
2 Bastian Beischer
2 Damien Cassou
2 Evgkeni Sampelnikof
2 Greg A. Woods
2 Greg Sexton
2 Jesse Alama
2 Leandro Facchinetti
2 Nguyễn Tuấn Anh
2 Nick Alexander
2 Pekka Pessi
2 Philippe Vaucher
2 Rafael Laboissiere
2 Sebastian Wiesner
1 Abdo Roig-Maranges
1 Adam Spiers
1 Andrei Chițu
1 Andrew Schwartzmeyer
1 Brandon W Maister
1 Chris Done
1 Chris Ring
1 Christopher Monsanto
1 Cornelius Mika
1 Dan LaManna
1 David Hull
1 Dennis Paskorz
1 Divye Kapoor
1 Eric Schulte
1 Felix Geller
1 Feng Li
1 Geoff Shannon
1 Jan Tatarik
1 Jeff Dairiki
1 John Wiegley
1 Jordan Greenberg
1 Kyle Meyer
1 Lele Gaifax
1 Manuel Vázquez Acosta
1 Marcel Wolf
1 Marian Schubert
1 Matus Goljer
1 Nick Dimiduk
1 Nicolas Richard
1 Peter J. Weisberg
1 Philipp Haselwarter
1 Prathamesh Sonpatki
1 Romain Francoise
1 Roy Crihfield
1 Sanjoy Das
1 Sergey Pashinin
1 Steve Purcell
1 Steven Chow
1 Steven Thomas
1 Thomas Frössman
1 Thomas Riccardi
1 Ting-Yu Lin
1 Wilfred Hughes
1 Win Treese
1 York Zhao
1 aaa707
1 Ævar Arnfjörð Bjarmason
Magit v1.4.1 Release Notes
Released 12 April 2015 by Jonas Bernoulli.
This is a bugfix release.
Changes since v1.4.0
* The external library `magit-log-edit.el' is no longer supported.
If it is still installed, then instruct the user to remove it.
* The function `magit-maybe-show-setup-instructions' is now run even
when `magit' has not been loaded by the time `after-init-hook' ran.
* Invalid `:package-version' keywords in option definitions were
fixed. In some cases the value was "2.1.0" instead of "1.4.0".
* Some unnecessary obsolete-variable definitions were removed.
* Running tests on Travis CI was fixed.
* The Makefile, README.md, and release notes received minor fixes
and cleanup.
9 Jonas Bernoulli
1 Noam Postavsky
Magit v1.4.2 Release Notes
Released 8 June 2015 by Jonas Bernoulli.
This is a bugfix release.
Changes since v1.4.1
* Automatic revers of file-visiting buffers now works again in Emacs
version 24.5. It was broken due to an incompatible change in that
Emacs release.
* Git's reflogs sometimes end with bogus entries. We now work around
that when listing stashes.
11 Jonas Bernoulli
1 Peter Vasil
1 Steven E. Harris
This diff is collapsed.
It's Magit! A Git Porcelain inside Emacs
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.
For more information about Magit, see https://magit.vc.
If Magit helps you be more productive, then please consider donating
at https://magit.vc/donate/.
Magit v2.10.0 Release Notes
Released 4 January 2017 by Jonas Bernoulli.
We are pleased to announce the release of Magit version 2.10.0,
representing 85 commits by six people over one month.
Also see https://emacsair.me/2017/01/04/magit-2.10.
Changes since v2.9.0
* Many new, well organized, libraries were added, consisting of code
that was previously located inside a messier "magit.el". #2908
* The function `magit-display-buffer' now sets the focus on the frame
used to display the selected window. #2865
* The Custom groups are better organized now. New groups were added,
but many options also moved between groups that already existed
before. 422d776e, 33c5c1ca
* Many Custom groups and options now link to the relevant Info nodes
and to other relevant groups. 810d7fb4
* Many doc-strings were improved, added, and fixed. 47aae617
* Added the function `magit-repolist-column-dirty', which can be added
to `magit-repolist-columns' and `magit-submodule-list-columns'. #2907
* The obsolete variable `magit-repository-directory-depth' is no
longer defined as an option. 09993c39
* The obsolete hook variable `magit-status-refresh-hook' is no longer
defined explicitly. 7e96e831
Fixes since v2.9.0
* Customizations of hooks were ignored, if the `custom-set-variables'
form was evaluated before the Magit libraries were loaded. #2902
* When rebase stopped at a commit, point was no longer placed on that
commit. #2884
* When creating a commit, `magit-display-buffer-fullcolumn-most-v1'
filled the entire frame, hiding the commit message buffer. #2891
* The commands `magit-reflog' and `magit-reflog-current' reported
a revision's reflog as empty when the name of a file in the
repository, relative to the top-level directory, matched the
revision name. 5264ffcb
* The function `magit-repolist-column-upstream' returned the current
branch instead of its upstream. 46acbd6d
* The functions `magit-repolist-column-unpulled-from-upstream' and
`magit-repolist-column-unpushed-to-upstream' raised a type error
if the upstream was configured but did not exist. #2904
* The default values of the options `magit-submodule-list-columns'
and `magit-repolist-columns' didn't match the documentation and the
Custom type. But the code that that uses these values is resilient
against that defect and so the only effect was that the values were
reported as mismatched in the Custom interface. 79f6af23
* The Custom type of option `magit-update-other-window-delay' didn't
match the default value. eb6d8bde
* The shell command generated by `magit-emacs-Q-command' could end
up trying to load a directory as a library, due to a bug in Emacs.
83980c66, debbugs#16406
This release also contains documentation updates and typo fixes.
68 Jonas Bernoulli
13 Kyle Meyer
1 Aleksey Uimanov
1 Alexander Gramiak
1 Noam Postavsky
1 Wouter Bolsterlee
Magit v2.10.1 Release Notes
Changes since v2.10.0
* The command `ido-enter-magit-status' is now being autoloaded. #2918
* The minor-mode `bug-reference-mode' is now being suggested when
customizing `magit-revision-mode-hook' and `git-commit-setup-hook'.
* The function `magit-version' can now deal with the Magit libraries
being symlinked to, which is required for the new `straight' package
manager. #2967
Fixes since v2.10.0
* When multiple stashes were selected by the region, responding "no"
when asked to confirm the deletion of these stashes resulted in a
type error. #2917
* The function `magit-split-range' choked on ranges if one of the
revisions was omitted, breaking a diff variant and potentially
other uses as well. #2928
* The function `magit-commit-setup' called without an argument, which
causes the option `enable-local-variables' to be ignored. #2946
* When committing inside a repository that was created using `git
init --separate-git-dir', the diff buffer was empty, instead of
showing the changes about to be committed. For some reason that
git command, unlike other commands that do essentially the same
thing, does not set `core.worktree', which confused Magit. #2955
* In the repository list buffer, the columns that are supposed to list
unpushed and unpulled commit counts, were blank. #2960
* The command `magit-reflog-head' did not properly format reflog lines
for branch renaming events. 2a268e20
* The commands `magit-diff-show-or-scroll-down' and
`magit-diff-or-scroll-up' scrolled instead of updated the revision
or stash buffer, when that already showed the requested reference
but that reference no longer pointed at the same revision. #2966
This release also contains typo fixes and other documentation fixes.
16 Jonas Bernoulli
4 Kyle Meyer
2 Alex Kost
1 Kévin Le Gouguec
1 Radon Rosborough
Magit v2.10.2 Release Notes
Changes since v2.10.1
* The new command `git-rebase-noop' adds a noop action during a
rebase. It can be used to make git perform a rebase even if none
of the commits are selected. #2991
Fixes since v2.10.1
* Cherry-picking a commit with multiple parents was not possible,
because "--mainline" was treated as a switch rather than an option,
and because of a too-strict assertion that only single-parent commits
can be cherry-picked. #2978
* `magit-abbrev-length' mishandled two edge cases, returning 0 when
called within an empty repository or outside of a repository.
* A bug fix in the last release broke the visit-file functionality in
diff buffers displayed while committing. #2988
* Diff buffers did not recognize "rev^-n" as a short-hand for
"rev^n..rev" (new in Git v2.11), resulting in the buffer header
incorrectly indicating that the diff was between "rev^-n" and the