* It's Magit! A Git Porcelain inside Emacs Magit is a text-based Git user interface that puts an unmatched focus on streamlining workflows. Commands are invoked using short mnemonic key sequences that take the cursor’s position in the highly actionable interface into account to provide context-sensitive behavior. With Magit you can do nearly everything that you can do when using Git on the command-line, but at greater speed and while taking advantage of advanced features that previously seemed too daunting to use on a daily basis. Many users will find that by using Magit they can become more effective Git user. For more information about Magit, see https://magit.vc. * Magit v2.90.0 Release Notes Released 8th November 2018 by Jonas Bernoulli. I am pleased to announce the release of Magit version 2.90.0, representing 395 commits by 18 contributors over five months. Also see https://emacsair.me/2018/11/08/magit-2.90. ** Breaking changes - Dropped support for Emacs 24.4. At least Emacs 25.1 is required now. - Dropped support for Git 1. At least Git 2.0.0 is required now. The reason 2.0.0 is the new minimal version isn't its roundness but the discovery that some parts of Magit already depended on that release for two years. Since we will soon drop support for versions before (probably) 2.4.0 anyway, we don't add a backward compatibility kludge for the feature that already requires 2.0.0 but instead bump the minimal version a first time. - Many commands were renamed, making their names longer. The old names are defined as aliases for now. This is part one of a two part change. In this release we rename, for example, ~magit-tag~ to ~magit-tag-create~ and in a later release ~magit-tag-popup~ will be renamed to ~magit-tag~. #3619 - Removed many obsolete variable and function aliases. - Removed many obsolete variables that are not mere aliases. - Removed ~magit-section~ accessor functions. Use the ~oref~ and ~oset~ functions instead. - The function ~magit-section-when~ has been deprecated in favor of ~magit-section-match~ or the new ~magit-section-value-if~. The signatures of some related low-level functions have changed. #3590 - The ~submodule~ section type has been renamed to ~module~, same for the plural variant and the related section-specific keymaps. 35f803c9c, 59e3891fd - Added a new function ~magit-completing-read-multiple*~, which is more like ~magit-completing-read~ than ~magit-completing-read-multiple~. Authors of extension should use the new function, which eventually will replace the old one. cb4d59190 ** Changes since v2.13.0 - Added a new mode ~magit-wip-mode~, which enables automatic committing to work-in-progress refs whenever that makes sense. Previously multiple ~magit-wip-*~ modes had to be enabled to accomplish the same. These modes still exist, the new mode is implemented on top of them, but their explicit use by the user is discouraged. #3534 - Added a new option ~magit-wip-merge-branch~, which causes the current branch to be merged into its wip refs after creating a new commit on the current branch. This isn't enabled by default yet because some additional tooling is required to deal with the fact that this prevents the wip refs from ever being garbage collected, and results in unwieldy commit graphs when history manipulation is involved. #3534 - Added new commands ~magit-wip-log-index~ and ~magit-wip-log-worktree~. #3534 - It is now possible to specify the major-mode used to edit commit messages on a per-repository basis. The same major-mode is also used to prettify commit messages when displaying existing commit messages in ~magit-revision-mode~ buffers. To set the major-mode to be used for commit messages add an entry to the appropriate ~.dir-locals.el~ file using ~git-commit-mode~ as the key, as if that mode were a major-mode. This can also be used to set other variables in the buffers used to /edit/ commit messages. If ~$GIT_WORK_TREE/.git~ is a file, then ~$GIT_WORK_TREE/.dir-locals.el~ would normally not apply when editing a file inside ~$GIT_DIR~. Magit uses it anyway unless ~$GIT_DIR/.dir-locals.el~ exists. 55ba0534c, d7412da32, c5269547a - Added a new major-mode ~git-commit-elisp-text-mode~ intended to be used when editing commit messages for Elisp projects. It derives from ~text-mode~ and additionally highlights ~`symbols'~ and "strings". d7fa6632b - Changed the order and the initial visibility of log sections in the status buffer to optimize for "usefulness". Previously the focus was on making it more likely that the user did not ignore the less frequently useful logs, but that was quite annoying because it got in the way of the more frequently performed tasks. #3518 - Added new option ~magit-status-initial-section~, which controls which section point is placed on when a status buffer is created. The new default is to place point on the section that follows the headers, i.e., the second section. This is quite flexible, you might want to read the doc-string. 87de83da8, #3562, #3518 - Added new commands ~magit-commit-absorb~ and ~magit-commit-absorb-popup~. These commands depend on the ~git-autofixup~ script, which is available from https://github.com/torbiak/git-autofixup. #3053 - Began migrating from using section "types" to using section classes that can inherit from other classes. #3590 - Removed many backward compatibility hacks, which are no longer necessary. - Began to use features and many convenience functions that we couldn't use before because we still supported Emacs 24.4. - ~magit-file-rename~ now reads the target from the same directory as the source. This is more convenient because removing parts of the path is easier than adding them again. - Added new ~magit-gitignore-popup~ and bound ~I~ to it, making it possible to use ~i~ for the ~magit-imerge-popup~ from the ~magit-imerge~ package. - Renamed the existing command ~magit-describe-section~ to ~magit-describe-section-briefly~ and added a new command ~magit-describe-section~, which pops up a ~*Help*~ buffer, which contains information about the function and hook used to insert the section. #3539 - Added new ~magit-refname-pullreq~ face and a corresponding entry to ~magit-ref-namespaces~. - Added new option ~magit-log-trace-definition-function~, which allows specifying the function that ~magit-log-trace-definition~ should use to determine the function at point. The default is ~which-function~. Previously the less complete ~add-log-current-defun~ was used. #3483, 9ff266358 - fixup! and squash! are now highlighted like [keywords] in logs. 426773040 - Added new stub commands ~magit-browse-thing~ and ~magit-edit-thing~. Like other ~magit-*-thing~ functions they are intend to be replaced in section-specific keymaps. The ~forge~ package will use do so for these commands. 56fccaca6, 0fa3092eb - In case they are bound when Magit is loaded then ~$GIT_DIR~ and ~$GIT_WORK_TREE~ are unset now. Magit breaks if these variables are set and the most likely cause for them to be set is a user error. 2d7d5d840 - ~magit-merge-into~ now only offers local branches for completion and defaults to the upstream. If the upstream is a remote branch then it defaults to the respective local branch. a52d70198 - It is now possible to set the face used to highlight the headings of certain sections using the new ~heading-highlight-face~ slot. 2319a1e0e - The summary line of a commit message and the first line of notes are now emphasized more to make it more obvious what text is part of the commit message and what text was added by a note. fda4b936c - Detection of the branch at point was improved. #3530 - Added new shortstat margin style for logs. Performance isn't good yet, so you might want to avoid this for long logs. #3035 - Added new variable ~magit-perl-executable~ for platforms that put ~perl~ in unusual places. We use ~perl~ for some one-liners that are embedded in lisp because we known that it is available because ~git~ depends on it. #3538 - Added new command ~magit-reset-worktree~. The existing ~magit-reset-*~ commands already implemented the variants supported by ~git reset~, now Magit also implements the variant missing from that. b4d5c2bee - Improved ~magit-process-password-auth-source~'s entry matching. 60a335e5c - Added new hook ~magit-create-buffer~ hook. 2113dfc3d - When the user "discards" a file with conflicts then they are asked which side of the conflict they want to keep. When multiple files are selected, then it is now possible to decide for all of them at once. #3553 - Added option ~--ignore-submodules~ to diff popups. This option does not only affect diffs but also the dedicated module sections and can therefore be used to temporarily hide all information about modules, which can be expensive to calculate. #3555, #3568 - Added ~--graph~ to the default value of ~magit-log-select-arguments~ instead of hard-coding this argument for some of the users of the log-select machinery. #3559 - The upstream of the current branch is no emphasized in logs, by default by making it italic. #3573 - Added new command ~magit-submodule-remove~ and the new related option ~magit-submodule-remove-trash-gitdirs~. The default is to not trash the gitdirs. ~magit-submodule-add~ now offers to reuse an existing gitdir when re-adding a submodule. #3585 - ~magit-submodule-add~ is run asynchronously now. #3585 - Information about the running Git process is now also shown in the mode-line of buffers that were created after the process was started. 43264c873 - Rebase commands that continue a rebase sequence can now use ~git rbr~ instead of ~git rebase~. To initiate a rebase sequence using ~git rbr~ you may use https://github.com/fanatoly/magit-rbr. c2cd780b2 - The manual is now also available in epub format, but it isn't very pretty. #3579 - Added new hooks ~magit-stage-hook~ and ~magit-unstage-hook~. #3496 - Added new hook ~git-commit-post-finish-hook~, a hook that has been requested many times but which I did not implement before because it is impossible to make 100% reliable. When the ~emacsclient~ returns, then that does not mean that the calling process is done too. We avoid a race condition by waiting for ~HEAD~ to point to a different commit than it used to point to, before running the hook. If it takes longer than a second for this to happen, then the hook is not run. A few unsafe commands are also blacklisted because they perform other things after creating the commit and that would lead to another race condition. #3615, d445a3d30, af4bf8df8 This hook is used instead of ~with-editor-post-finish-hook~ (on which the former is build) to merge the current branch into its wip refs when ~magit-wip-merge-branch~ is non-nil. - Added new hook ~magit-post-commit-hook~, which is only run after running a ~magit-commit-*~ command that does not require the user to edit the commit message. #3615 - ~magit-format-patch~ can now be told to only include the changes to certain files in the patch. It now also refreshes Magit buffers. #3601 - The list of related refs in ~magit-revision-mode~ buffers is no longer truncate when it doesn't fit on a single line. Instead users can now specify the kinds of refs that should be inserted in such buffers using the option ~magit-revision-insert-related-refs~. #3487 - Added new function ~magit-gitdir~ scheduled to replace ~magit-git-dir~ eventually because the latter has a really strange signature. 5f407a29a - Created new libraries from existing code. 9efcb1e8b ff - The option ~magit-revision-show-gravatar~ is now easier to customize. Customizing it to only show one of the two images actually works now. f4b8fee66, b82228bc6 - The option ~magit-repository-directories~ has a non-nil default value now. f77d1158b - The list of stashes in the status buffer is initially collapsed now. 4dc1d0593 - The commands ~magit-previous-line~ and ~magit-next-line~ are used by default now. 3ae75c865 - Added support for ~--left-right~ output in logs. #3627 - Added new option ~magit-with-editor-envvar~. Changing its value from ~GIT_EDITOR~ to ~GIT_SEQUENCE_EDITOR~ allows users to continue to use Magit (~git-rebase.el~ actually) to edit rebase sequence but to use another editor to edit commit messages and such. #3629 - Added new option ~magit-clone-default-directory~. #3635 - ~magit-ref-namespaces~ is now taken into account when colorizing branch names in buffers listing refs. #3645 - Added new option ~magit-revision-fill-summary-line~. #3610 ** Fixes since v2.13.0 - A confirmation prompt during rebase was wrong. 37d76f409 - ~magit-rebase-autosquash~ asked for confirmation when the user already confirmed earlier. 02e6c75b6 - ~magit-commit-add-log~ inserted after the diff that gets inserted if ~commit.verbose~ is ~true~. #3480 - ~magit-log-wash-rev~ errored in ~magit-cherry-mode~, starting with Emacs 26.1. - ~magit-dired-jump~ failed, starting with Emacs 26.1. #3469 - Magit used a completion function to make the built-in completion respect the collection's order. Even though that wasn't necessary for Ivy and Helm it did the same here, which became a problem when a change in Helm caused fuzzy completion to break in combination with a completion function. Likewise a change in Ivy caused Magit's sort order to be ignored, which we work around now. #3476, #3477 - In some edge cases ~magit-branch-pull-request~ used to set Git variables to invalid values. #3417 - The section visibility cache used ~eq~ when it should have used ~equal~. It also briefly used ~alist-get~, which we cannot do because that did not take a ~testfn~ argument in Emacs 25. #3495, #3499 - Detecting whether a commit has already been pushed to a "publishing" branch was much slower than it had to be. #3519 - ~magit-gitignore-popup~'s autoload definition was broken. - When using cygwin, then ~git-commit-setup-font-lock~ could end up trying to run git in a non-existent directory. #3505 - ~magit-completing-read~ did not protect the value of ~this-command~ even though there is code that assumes it does. #3529 - ~magit-read-file-trace~ in some cases claimed that valid user input was invalid even though it was valid. Now we don't try to validate it anymore. #3531 - We didn't account for the surprising fact that asking whether the value of a local variable is risky can change point. #3541 - ~magit-merge-into~ signaled an error if the upstream of the current branch isn't configured instead of letting the user pick a target. #3550 - Some of the more complex ~magit-cherry-*~ variants did not abort if the first step failed. #3556 - Trying to visit a commit of a submodule directly from the status buffer of the super-projects resulted in an error. #3563 - ~magit-file-rename~ failed to rename a file that is located at the top-level of the working tree. #3569 - Magit didn't account for ~git rebase -i --root~ corrupting the root commit's author date field, resulting in its output being corrupted too. #3574 - If given one invalid rev, then ~magit-rev-eq~ returned ~nil~, but when both revs are invalid, then it returned ~t~. Now it returns ~nil~ in both cases. - In an edge case ~magit-diff-type~ falsely concluded that the uncommitted changes in a diff buffer already are committed. #2627 - ~magit--github-url-p~ failed to return ~t~ for an url for Github Enterprise instances. #3572 - Trying to insert Gravatar images resulted in an error if the service is not reachable. #3597 - ~magit-display-buffer~ always selected the appropriate frame even if that was already selected. That is undesirable because selecting a frame has side-effects. f07eb85c6 - A key binding was not updated when ~magit-submodule-deinit~ was renamed to ~magit-submodule-unpopulate~. b06845208 - ~magit-submodule-visit~ could end up re-populating the visited module. 3d794cd01 - The third-party ~git-annex~ program converts submodule gitdirs to symlinks, which we did not account for. #3599 - ~magit-bisect-start~ did fail silently when invalid user input, which flipped the good and bad revisions, instead of providing an informative error message. #3604 - ~magit-bisect-start~ did fail silently when there are uncommitted changes instead of providing an informative error message. In some cases it actually is possible to bisect with uncommitted changes but that would be dangerous and we do not try to detect whether that is the case and just always error out. #3604 - When applying changes, then the ~--unidiff-zero~ and ~-C0~ arguments were not automatically used when needed. The former wasn't used because of a bug, the latter because I was not aware that there was an edge case that makes that necessary. #3608 - Backported a fix (from Emacs 27) for an Emacs bug that sometimes caused ~git rebase~ to fail to acquire the ~index.lock~. #2708, https://debbugs.gnu.org/cgi/bugreport.cgi?bug=21559 - Autoloading ~magit-submodules~ didn't work. #3618 - Reverting files failed if the selection contained only binary files. c7bbe3e9a - ~magit-read-repository~ failed when ~magit-repository-directories~ is non-nil but no repository can be found in those directories. #3636 - Attempting to reverse changes to binary files failed with an error that wasn't informative enough. #3625 - When a local branch is being renamed, then ~magit-branch-rename~ used to also rename the (remote) push-target, which is unsafe in some cases. Now it always asks the user before doing so. 14c7b1381 * Authors 333 Jonas Bernoulli 31 Kyle Meyer 13 Noam Postavsky 2 Phil Sainty 1 Alex Branham 1 Aria Edmonds 1 Arialdo Martini 1 Basil L. Contovounesios 1 Benjamin Motz 1 Bob Uhl 1 Eric Prud'hommeaux 1 Felix Yan 1 John Morris 1 Jordan Galby 1 Louis Roché 1 Mak Kolybabi 1 Miciah Masters 1 N. Troy de Freitas 1 Pierre Neidhardt 1 Raimon Grau