Skip to content

Applying ​

Magit provides several "apply variants": stage, unstage, discard, reverse, and "regular apply". At least when operating on a hunk they are all implemented using git apply, which is why they are called "apply variants".

  • Stage. Apply a change from the working tree to the index. The change also remains in the working tree.
  • Unstage. Remove a change from the index. The change remains in the working tree.
  • Discard. On a staged change, remove it from the working tree and the index. On an unstaged change, remove it from the working tree only.
  • Reverse. Reverse a change in the working tree. Both committed and staged changes can be reversed. Unstaged changes cannot be reversed. Discard them instead.
  • Apply. Apply a change to the working tree. Both committed and staged changes can be applied. Unstaged changes cannot be applied - as they already have been applied.

The previous section described the staging and unstaging commands. What follows are the commands which implement the remaining apply variants.

a (magit-apply) ​

Apply the change at point to the working tree.

With a prefix argument fallback to a 3-way merge. Doing so causes the change to be applied to the index as well.

k (magit-discard) ​

Remove the change at point from the working tree.

On a hunk or file with unresolved conflicts prompt which side to keep (while discarding the other). If point is within the text of a side, then keep that side without prompting.

v (magit-reverse) ​

Reverse the change at point in the working tree.

With a prefix argument fallback to a 3-way merge. Doing so causes the change to be applied to the index as well.

With a prefix argument all apply variants attempt a 3-way merge when appropriate (i.e., when git apply is used internally).

Command: magit-copy-diff-as-kill ​

This command saves the diff at point to the kill ring.

It can be used on staged and unstaged changes, and anywhere magit-apply can be used. Additionally, if there is no diff at point but magit-buffer-revision is non-nil, or there is a commit at point, the diff for that commit is saved.

This is useful if you need to copy some diff elsewhere, e.g., to a mail client or browser text area.