aboutsummaryrefslogtreecommitdiff
path: root/Documentation
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2026-02-25 11:54:16 -0800
committerJunio C Hamano <gitster@pobox.com>2026-02-25 11:54:16 -0800
commitbf3c3603fdda0b608a438d566db5f845ef3ed438 (patch)
tree386061b6cd8aa9cf9146cd7795e672de0ab896d6 /Documentation
parent7c02d39fc2ed2702223c7674f73150d9a7e61ba4 (diff)
parenta454cdca42fda0afaade73d7e90010289d1e7ba8 (diff)
downloadgit-bf3c3603fdda0b608a438d566db5f845ef3ed438.tar.xz
Merge branch 'kh/doc-am-format-sendmail'
Doc update. * kh/doc-am-format-sendmail: doc: add caveat about round-tripping format-patch
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/format-patch-caveats.adoc33
-rw-r--r--Documentation/format-patch-end-of-commit-message.adoc8
-rw-r--r--Documentation/git-am.adoc19
-rw-r--r--Documentation/git-format-patch.adoc4
-rw-r--r--Documentation/git-send-email.adoc5
5 files changed, 62 insertions, 7 deletions
diff --git a/Documentation/format-patch-caveats.adoc b/Documentation/format-patch-caveats.adoc
new file mode 100644
index 0000000000..807a65b885
--- /dev/null
+++ b/Documentation/format-patch-caveats.adoc
@@ -0,0 +1,33 @@
+The output from linkgit:git-format-patch[1] can lead to a different
+commit message when applied with linkgit:git-am[1]. The patch that is
+applied may also be different from the one that was generated, or patch
+application may fail outright.
+ifdef::git-am[]
+See the <<discussion,DISCUSSION>> section above for the syntactic rules.
+endif::git-am[]
+
+ifndef::git-am[]
+include::format-patch-end-of-commit-message.adoc[]
+endif::git-am[]
+
+Note that this is especially problematic for unindented diffs that occur
+in the commit message; the diff in the commit message might get applied
+along with the patch section, or the patch application machinery might
+trip up because the patch target doesn't apply. This could for example
+be caused by a diff in a Markdown code block.
+
+The solution for this is to indent the diff or other text that could
+cause problems.
+
+This loss of fidelity might be simple to notice if you are applying
+patches directly from a mailbox. However, changes originating from Git
+could be applied in bulk, in which case this would be much harder to
+notice. This could for example be a Linux distribution which uses patch
+files to apply changes on top of the commits from the upstream
+repositories. This goes to show that this behavior does not only impact
+email workflows.
+
+Given these limitations, one might be tempted to use a general-purpose
+utility like patch(1) instead. However, patch(1) will not only look for
+unindented diffs (like linkgit:git-am[1]) but will try to apply indented
+diffs as well.
diff --git a/Documentation/format-patch-end-of-commit-message.adoc b/Documentation/format-patch-end-of-commit-message.adoc
new file mode 100644
index 0000000000..ec1ef79f5e
--- /dev/null
+++ b/Documentation/format-patch-end-of-commit-message.adoc
@@ -0,0 +1,8 @@
+Any line that is of the form:
+
+* three-dashes and end-of-line, or
+* a line that begins with "diff -", or
+* a line that begins with "Index: "
+
+is taken as the beginning of a patch, and the commit log message
+is terminated before the first occurrence of such a line.
diff --git a/Documentation/git-am.adoc b/Documentation/git-am.adoc
index 0c94776e29..972398d457 100644
--- a/Documentation/git-am.adoc
+++ b/Documentation/git-am.adoc
@@ -233,6 +233,7 @@ applying.
create an empty commit with the contents of the e-mail message
as its log message.
+[[discussion]]
DISCUSSION
----------
@@ -252,14 +253,11 @@ where the patch begins. Excess whitespace at the end of each
line is automatically stripped.
The patch is expected to be inline, directly following the
-message. Any line that is of the form:
+message.
+include::format-patch-end-of-commit-message.adoc[]
-* three-dashes and end-of-line, or
-* a line that begins with "diff -", or
-* a line that begins with "Index: "
-
-is taken as the beginning of a patch, and the commit log message
-is terminated before the first occurrence of such a line.
+This means that the contents of the commit message can inadvertently
+interrupt the processing (see the <<caveats,CAVEATS>> section below).
When initially invoking `git am`, you give it the names of the mailboxes
to process. Upon seeing the first patch that does not apply, it
@@ -283,6 +281,13 @@ commits, like running 'git am' on the wrong branch or an error in the
commits that is more easily fixed by changing the mailbox (e.g.
errors in the "From:" lines).
+[[caveats]]
+CAVEATS
+-------
+
+:git-am: 1
+include::format-patch-caveats.adoc[]
+
HOOKS
-----
This command can run `applypatch-msg`, `pre-applypatch`,
diff --git a/Documentation/git-format-patch.adoc b/Documentation/git-format-patch.adoc
index 9a7807ca71..bac9b818f3 100644
--- a/Documentation/git-format-patch.adoc
+++ b/Documentation/git-format-patch.adoc
@@ -798,6 +798,10 @@ if they are part of the requested range. A simple "patch" does not
include enough information for the receiving end to reproduce the same
merge commit.
+=== PATCH APPLICATION
+
+include::format-patch-caveats.adoc[]
+
SEE ALSO
--------
linkgit:git-am[1], linkgit:git-send-email[1]
diff --git a/Documentation/git-send-email.adoc b/Documentation/git-send-email.adoc
index 44ae2ed5bf..741f748614 100644
--- a/Documentation/git-send-email.adoc
+++ b/Documentation/git-send-email.adoc
@@ -692,6 +692,11 @@ Links of a few such community maintained helpers are:
- https://github.com/AdityaGarg8/git-credential-email[git-msgraph]
(cross platform client that can send emails using the Microsoft Graph API)
+CAVEATS
+-------
+
+include::format-patch-caveats.adoc[]
+
SEE ALSO
--------
linkgit:git-format-patch[1], linkgit:git-imap-send[1], mbox(5)