Function: magit-patch-create

magit-patch-create is an autoloaded, interactive and byte-compiled function defined in magit-patch.el.

Signature

(magit-patch-create ARG1 ARG2 ARG3)

Documentation

Create patches for the commits in RANGE.

When a single commit is given for RANGE, create a patch for the changes introduced by that commit (unlike 'git format-patch' which creates patches for all commits that are reachable from HEAD but not from the specified commit).

Key Bindings

Source Code

;; Defined in ~/.emacs.d/elpa/magit-20260411.1452/magit-patch.el
;;;###autoload(autoload 'magit-patch-create "magit-patch" nil t)
(transient-define-prefix magit-patch-create (range args files)
  "Create patches for the commits in RANGE.
When a single commit is given for RANGE, create a patch for the
changes introduced by that commit (unlike 'git format-patch'
which creates patches for all commits that are reachable from
`HEAD' but not from the specified commit)."
  :man-page "git-format-patch"
  :incompatible '(("--subject-prefix=" "--rfc"))
  ["Mail arguments"
   (6 magit-format-patch:--in-reply-to)
   (6 magit-format-patch:--thread)
   (6 magit-format-patch:--from)
   (6 magit-format-patch:--to)
   (6 magit-format-patch:--cc)]
  ["Patch arguments"
   (magit-format-patch:--base)
   (magit-format-patch:--reroll-count)
   (5 magit-format-patch:--interdiff)
   (magit-format-patch:--range-diff)
   (magit-format-patch:--subject-prefix)
   ("C-m r  " "RFC subject prefix" "--rfc")
   ("C-m l  " "Add cover letter" "--cover-letter")
   (5 magit-format-patch:--cover-from-description)
   (5 magit-format-patch:--notes)
   (magit-format-patch:--output-directory)]
  ["Diff arguments"
   (magit-diff:-U)
   (magit-diff:-M)
   (magit-diff:-C)
   (magit-diff:--diff-algorithm)
   (magit:--)
   (7 "-b" "Ignore whitespace changes" ("-b" "--ignore-space-change"))
   (7 "-w" "Ignore all whitespace"     ("-w" "--ignore-all-space"))]
  ["Actions"
   ("c" "Create patches" magit-patch-create)]
  (interactive
    (if (not (eq transient-current-command 'magit-patch-create))
        (list nil nil nil)
      (cons (if-let ((revs (magit-region-values 'commit t)))
                (concat (car (last revs)) "^.." (car revs))
              (let ((range (magit-read-range-or-commit
                            "Create patches for range or commit")))
                (if (string-search ".." range)
                    range
                  (format "%s~..%s" range range))))
            (let ((args (transient-args 'magit-patch-create)))
              (list (seq-filter #'stringp args)
                    (cdr (assoc "--" args)))))))
  (if (not range)
      (transient-setup 'magit-patch-create)
    (magit-run-git "format-patch" range args "--" files)
    (when (member "--cover-letter" args)
      (save-match-data
        (find-file
         (expand-file-name
          (concat (and$ (transient-arg-value "--reroll-count=" args)
                        (format "v%s-" $))
                  "0000-cover-letter.patch")
          (let ((topdir (magit-toplevel)))
            (if-let ((dir (transient-arg-value "--output-directory=" args)))
                (expand-file-name dir topdir)
              topdir))))))))