Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
5913fd2
t5550: add netrc tests for http 401/403
agawande Jan 7, 2026
c8e1706
Merge branch 'ps/read-object-info-improvements' into ps/odb-for-each-…
gitster Jan 15, 2026
ec16dde
Merge branch 'ps/packfile-store-in-odb-source' into ps/odb-for-each-o…
gitster Jan 15, 2026
bd1855b
odb: rename `FOR_EACH_OBJECT_*` flags
pks-t Jan 26, 2026
6358da2
odb: fix flags parameter to be unsigned
pks-t Jan 26, 2026
6ecab3c
object-file: extract function to read object info from path
pks-t Jan 26, 2026
cde615b
object-file: introduce function to iterate through objects
pks-t Jan 26, 2026
3735311
packfile: extract function to iterate through objects of a store
pks-t Jan 26, 2026
736464b
packfile: introduce function to iterate through objects
pks-t Jan 26, 2026
df2fbdf
odb: introduce `odb_for_each_object()`
pks-t Jan 26, 2026
cc47e3d
builtin/fsck: refactor to use `odb_for_each_object()`
pks-t Jan 26, 2026
2813c97
treewide: enumerate promisor objects via `odb_for_each_object()`
pks-t Jan 26, 2026
317ea9a
treewide: drop uses of `for_each_{loose,packed}_object()`
pks-t Jan 26, 2026
7b7cbae
odb: introduce mtime fields for object info requests
pks-t Jan 26, 2026
dd097bb
builtin/pack-objects: use `packfile_store_for_each_object()`
pks-t Jan 26, 2026
7a8582c
reachable: convert to use `odb_for_each_object()`
pks-t Jan 26, 2026
3565faf
odb: drop unused `for_each_{loose,packed}_object()` functions
pks-t Jan 26, 2026
a606fcd
subtree: validate --prefix against commit in split
pushkarscripts Feb 3, 2026
90695bb
gpg-interface: signatures by expired keys are fine
Feb 4, 2026
1e3962c
meson: wire up gitk and git-gui
pks-t Feb 4, 2026
58e4eee
meson: fix building mergetool docs
phillipwood Feb 9, 2026
b679ee0
doc: am: normalize git(1) command links
LemmingAvalanche Feb 9, 2026
3c18135
doc: am: say that --message-id adds a trailer
LemmingAvalanche Feb 9, 2026
c2f700a
doc: am: add missing config am.messageId
LemmingAvalanche Feb 9, 2026
b10e0cb
doc: am: fill out hook discussion
LemmingAvalanche Feb 9, 2026
048357d
builtin/backfill: fix flags passed to `odb_has_object()`
pks-t Feb 12, 2026
6cf965c
builtin/fsck: fix flags passed to `odb_has_object()`
pks-t Feb 12, 2026
ae77afc
odb: drop gaps in object info flag values
pks-t Feb 12, 2026
f6516a5
odb: convert object info flags into an enum
pks-t Feb 12, 2026
732ec9b
odb: convert `odb_has_object()` flags into an enum
pks-t Feb 12, 2026
bfd125f
doc: patch-id: emphasize multi-patch processing
LemmingAvalanche Feb 14, 2026
795d41d
doc: patch-id: add script example
LemmingAvalanche Feb 14, 2026
ed84bc1
doc: patch-id: see also git-cherry(1)
LemmingAvalanche Feb 14, 2026
f23ac77
commit: avoid parsing non-commits in `lookup_commit_reference_gently()`
pks-t Feb 16, 2026
024b4c9
commit: make `repo_parse_commit_no_graph()` more robust
pks-t Feb 16, 2026
bb5da75
commit: use commit graph in `lookup_commit_reference_gently()`
pks-t Feb 16, 2026
20daad2
object-file: use `container_of()` to convert from base types
jltobler Feb 18, 2026
96286f1
symlinks: use unsigned int for flags
malon7782 Feb 16, 2026
8e06f96
object-file.c: avoid container_of() of a NULL container
gitster Feb 22, 2026
9eb5b3b
Merge branch 'ps/odb-for-each-object'
gitster Mar 3, 2026
dbae219
Merge branch 'uk/signature-is-good-after-key-expires'
gitster Mar 3, 2026
1464873
Merge branch 'ps/validate-prefix-in-subtree-split'
gitster Mar 3, 2026
664bd4e
Merge branch 'ty/symlinks-use-unsigned-for-bitset'
gitster Mar 3, 2026
02c31a8
Merge branch 'ag/http-netrc-tests'
gitster Mar 3, 2026
10dd04a
Merge branch 'ps/object-info-bits-cleanup'
gitster Mar 3, 2026
05c4af5
Merge branch 'kh/doc-am-xref'
gitster Mar 3, 2026
112252c
Merge branch 'pw/meson-doc-mergetool'
gitster Mar 3, 2026
427d39c
Merge branch 'ps/meson-gitk-git-gui'
gitster Mar 3, 2026
3411314
Merge branch 'kh/doc-patch-id-4'
gitster Mar 3, 2026
13763ec
Merge branch 'ps/receive-pack-shallow-optim'
gitster Mar 3, 2026
9db3644
Merge branch 'jt/object-file-use-container-of'
gitster Mar 3, 2026
4805bb9
The 9th batch
gitster Mar 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions Documentation/RelNotes/2.54.0.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,14 @@ UI, Workflows & Features
* Extend the alias configuration syntax to allow aliases using
characters outside ASCII alphanumeric (plus '-').

* A signature on a commit that was GPG signed long time ago ought to
be still valid after the key that was used to sign it has expired,
but we showed them in alarming red.

* "git subtree split --prefix=P <commit>" now checks the prefix P
against the tree of the (potentially quite different from the
current working tree) given commit.


Performance, Internal Implementation, Development Support etc.
--------------------------------------------------------------
Expand Down Expand Up @@ -86,6 +94,19 @@ Performance, Internal Implementation, Development Support etc.
* Some tests assumed "iconv" is available without honoring ICONV
prerequisite, which has been corrected.

* Revamp object enumeration API around odb.

* Additional tests were introduced to see the interaction with netrc
auth with auth failure on the http transport.

* A couple of bugs in use of flag bits around odb API has been
corrected, and the flag bits reordered.

* Plumb gitk/git-gui build and install procedure in meson based
builds.

* The code to accept shallow "git push" has been optimized.


Fixes since v2.53
-----------------
Expand Down Expand Up @@ -155,6 +176,9 @@ Fixes since v2.53
* "git format-patch --from=<me>" did not honor the command line
option when writing out the cover letter, which has been corrected.

* Update build precedure for mergetool documentation in meson-based builds.
(merge 58e4eeeeb5 pw/meson-doc-mergetool later to maint).

* Other code cleanup, docfix, build fix, etc.
(merge d79fff4a11 jk/remote-tracking-ref-leakfix later to maint).
(merge 7a747f972d dd/t5403-modernise later to maint).
Expand All @@ -180,3 +204,6 @@ Fixes since v2.53
(merge 5133837392 ps/ci-gitlab-msvc-updates later to maint).
(merge 143e84958c db/doc-fetch-jobs-auto later to maint).
(merge 0678e01f02 ap/use-test-seq-f-more later to maint).
(merge 96286f14b0 ty/symlinks-use-unsigned-for-bitset later to maint).
(merge b10e0cb1f3 kh/doc-am-xref later to maint).
(merge ed84bc1c0d kh/doc-patch-id-4 later to maint).
24 changes: 15 additions & 9 deletions Documentation/config/am.adoc
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
am.keepcr::
If true, git-am will call git-mailsplit for patches in mbox format
with parameter `--keep-cr`. In this case git-mailsplit will
If true, linkgit:git-am[1] will call linkgit:git-mailsplit[1]
for patches in mbox format with parameter `--keep-cr`. In this
case linkgit:git-mailsplit[1] will
not remove `\r` from lines ending with `\r\n`. Can be overridden
by giving `--no-keep-cr` from the command line.
See linkgit:git-am[1], linkgit:git-mailsplit[1].

am.threeWay::
By default, `git am` will fail if the patch does not apply cleanly. When
set to true, this setting tells `git am` to fall back on 3-way merge if
the patch records the identity of blobs it is supposed to apply to and
we have those blobs available locally (equivalent to giving the `--3way`
option from the command line). Defaults to `false`.
See linkgit:git-am[1].
By default, linkgit:git-am[1] will fail if the patch does not
apply cleanly. When set to true, this setting tells
linkgit:git-am[1] to fall back on 3-way merge if the patch
records the identity of blobs it is supposed to apply to and we
have those blobs available locally (equivalent to giving the
`--3way` option from the command line). Defaults to `false`.

am.messageId::
Add a `Message-ID` trailer based on the email header to the
commit when using linkgit:git-am[1] (see
linkgit:git-interpret-trailers[1]). See also the `--message-id`
and `--no-message-id` options.
58 changes: 32 additions & 26 deletions Documentation/git-am.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ git-am - Apply a series of patches from a mailbox
SYNOPSIS
--------
[verse]
'git am' [--signoff] [--keep] [--[no-]keep-cr] [--[no-]utf8] [--no-verify]
'git am' [--signoff] [--keep] [--[no-]keep-cr] [--[no-]utf8] [--[no-]verify]
[--[no-]3way] [--interactive] [--committer-date-is-author-date]
[--ignore-date] [--ignore-space-change | --ignore-whitespace]
[--whitespace=<action>] [-C<n>] [-p<n>] [--directory=<dir>]
Expand Down Expand Up @@ -37,20 +37,21 @@ OPTIONS

-s::
--signoff::
Add a `Signed-off-by` trailer to the commit message, using
the committer identity of yourself.
See the signoff option in linkgit:git-commit[1] for more information.
Add a `Signed-off-by` trailer to the commit message (see
linkgit:git-interpret-trailers[1]), using the committer identity
of yourself. See the signoff option in linkgit:git-commit[1]
for more information.

-k::
--keep::
Pass `-k` flag to 'git mailinfo' (see linkgit:git-mailinfo[1]).
Pass `-k` flag to linkgit:git-mailinfo[1].

--keep-non-patch::
Pass `-b` flag to 'git mailinfo' (see linkgit:git-mailinfo[1]).
Pass `-b` flag to linkgit:git-mailinfo[1].

--keep-cr::
--no-keep-cr::
With `--keep-cr`, call 'git mailsplit' (see linkgit:git-mailsplit[1])
With `--keep-cr`, call linkgit:git-mailsplit[1]
with the same option, to prevent it from stripping CR at the end of
lines. `am.keepcr` configuration variable can be used to specify the
default behaviour. `--no-keep-cr` is useful to override `am.keepcr`.
Expand All @@ -65,7 +66,7 @@ OPTIONS
Ignore scissors lines (see linkgit:git-mailinfo[1]).

--quoted-cr=<action>::
This flag will be passed down to 'git mailinfo' (see linkgit:git-mailinfo[1]).
This flag will be passed down to linkgit:git-mailinfo[1].

--empty=(drop|keep|stop)::
How to handle an e-mail message lacking a patch:
Expand All @@ -83,10 +84,11 @@ OPTIONS

-m::
--message-id::
Pass the `-m` flag to 'git mailinfo' (see linkgit:git-mailinfo[1]),
so that the Message-ID header is added to the commit message.
The `am.messageid` configuration variable can be used to specify
the default behaviour.
Pass the `-m` flag to linkgit:git-mailinfo[1], so that the
`Message-ID` header is added as a trailer (see
linkgit:git-interpret-trailers[1]). The `am.messageid`
configuration variable can be used to specify the default
behaviour.

--no-message-id::
Do not add the Message-ID header to the commit message.
Expand All @@ -98,7 +100,7 @@ OPTIONS

-u::
--utf8::
Pass `-u` flag to 'git mailinfo' (see linkgit:git-mailinfo[1]).
Pass `-u` flag to linkgit:git-mailinfo[1].
The proposed commit log message taken from the e-mail
is re-coded into UTF-8 encoding (configuration variable
`i18n.commitEncoding` can be used to specify the project's
Expand All @@ -108,8 +110,7 @@ This was optional in prior versions of git, but now it is the
default. You can use `--no-utf8` to override this.

--no-utf8::
Pass `-n` flag to 'git mailinfo' (see
linkgit:git-mailinfo[1]).
Pass `-n` flag to linkgit:git-mailinfo[1].

-3::
--3way::
Expand All @@ -132,9 +133,8 @@ include::rerere-options.adoc[]
--exclude=<path>::
--include=<path>::
--reject::
These flags are passed to the 'git apply' (see linkgit:git-apply[1])
program that applies
the patch.
These flags are passed to the linkgit:git-apply[1] program that
applies the patch.
+
Valid <action> for the `--whitespace` option are:
`nowarn`, `warn`, `fix`, `error`, and `error-all`.
Expand All @@ -150,11 +150,14 @@ Valid <action> for the `--whitespace` option are:
--interactive::
Run interactively.

--verify::
-n::
--no-verify::
By default, the pre-applypatch and applypatch-msg hooks are run.
When any of `--no-verify` or `-n` is given, these are bypassed.
See also linkgit:githooks[5].
Run the `pre-applypatch` and `applypatch-msg` hooks. This is the
default. Skip these hooks with `-n` or `--no-verify`. See also
linkgit:githooks[5].
+
Note that `post-applypatch` cannot be skipped.

--committer-date-is-author-date::
By default the command records the date from the e-mail
Expand Down Expand Up @@ -205,7 +208,8 @@ applying.
to the screen before exiting. This overrides the
standard message informing you to use `--continue`
or `--skip` to handle the failure. This is solely
for internal use between 'git rebase' and 'git am'.
for internal use between linkgit:git-rebase[1] and
linkgit:git-am[1].

--abort::
Restore the original branch and abort the patching operation.
Expand All @@ -223,7 +227,7 @@ applying.
failure again.

--show-current-patch[=(diff|raw)]::
Show the message at which `git am` has stopped due to
Show the message at which linkgit:git-am[1] has stopped due to
conflicts. If `raw` is specified, show the raw contents of
the e-mail message; if `diff`, show the diff portion only.
Defaults to `raw`.
Expand Down Expand Up @@ -259,7 +263,7 @@ include::format-patch-end-of-commit-message.adoc[]
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
When initially invoking linkgit:git-am[1], you give it the names of the mailboxes
to process. Upon seeing the first patch that does not apply, it
aborts in the middle. You can recover from this in one of two ways:

Expand All @@ -277,8 +281,8 @@ names.

Before any patches are applied, ORIG_HEAD is set to the tip of the
current branch. This is useful if you have problems with multiple
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.
commits, like running linkgit:git-am[1] 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]]
Expand All @@ -294,6 +298,8 @@ This command can run `applypatch-msg`, `pre-applypatch`,
and `post-applypatch` hooks. See linkgit:githooks[5] for more
information.

See the `--verify`/`-n`/`--no-verify` options.

CONFIGURATION
-------------

Expand Down
51 changes: 48 additions & 3 deletions Documentation/git-patch-id.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ git-patch-id(1)

NAME
----
git-patch-id - Compute unique ID for a patch
git-patch-id - Compute unique IDs for patches

SYNOPSIS
--------
Expand All @@ -12,7 +12,7 @@ git patch-id [--stable | --unstable | --verbatim]

DESCRIPTION
-----------
Read a patch from the standard input and compute the patch ID for it.
Read patches from standard input and compute the patch IDs.

A "patch ID" is nothing but a sum of SHA-1 of the file diffs associated with a
patch, with line numbers ignored. As such, it's "reasonably stable", but at
Expand All @@ -25,7 +25,8 @@ When dealing with `git diff-tree --patch` output, it takes advantage of
the fact that the patch is prefixed with the object name of the
commit, and outputs two 40-byte hexadecimal strings. The first
string is the patch ID, and the second string is the commit ID.
This can be used to make a mapping from patch ID to commit ID.
This can be used to make a mapping from patch ID to commit ID for a
set or range of commits.

OPTIONS
-------
Expand Down Expand Up @@ -67,6 +68,50 @@ This is the default if `patchid.stable` is set to `true`.
+
This is the default.

EXAMPLES
--------

linkgit:git-cherry[1] shows what commits from a branch have patch ID
equivalent commits in some upstream branch. But it only tells you
whether such a commit exists or not. What if you wanted to know the
relevant commits in the upstream? We can use this command to make a
mapping between your branch and the upstream branch:

----
#!/bin/sh

upstream="$1"
branch="$2"
test -z "$branch" && branch=HEAD
limit="$3"
if test -n "$limit"
then
tail_opts="$limit".."$upstream"
else
since=$(git log --format=%aI "$upstream".."$branch" | tail -1)
tail_opts=--since="$since"' '"$upstream"
fi
for_branch=$(mktemp)
for_upstream=$(mktemp)

git rev-list --no-merges "$upstream".."$branch" |
git diff-tree --patch --stdin |
git patch-id --stable | sort >"$for_branch"
git rev-list --no-merges $tail_opts |
git diff-tree --patch --stdin |
git patch-id --stable | sort >"$for_upstream"
join -a1 "$for_branch" "$for_upstream" | cut -d' ' -f2,3
rm "$for_branch"
rm "$for_upstream"
----

Now the first column shows the commit from your branch and the second
column shows the patch ID equivalent commit, if it exists.

SEE ALSO
--------
linkgit:git-cherry[1]

GIT
---
Part of the linkgit:git[1] suite
5 changes: 1 addition & 4 deletions Documentation/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -354,13 +354,10 @@ foreach mode : [ 'diff', 'merge' ]
command: [
shell,
'@INPUT@',
'..',
meson.project_source_root(),
mode,
'@OUTPUT@'
],
env: [
'MERGE_TOOLS_DIR=' + meson.project_source_root() / 'mergetools',
],
input: 'generate-mergetool-list.sh',
output: 'mergetools-' + mode + '.adoc',
)
Expand Down
3 changes: 1 addition & 2 deletions builtin/backfill.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,7 @@ static int fill_missing_blobs(const char *path UNUSED,
return 0;

for (size_t i = 0; i < list->nr; i++) {
if (!odb_has_object(ctx->repo->objects, &list->oid[i],
OBJECT_INFO_FOR_PREFETCH))
if (!odb_has_object(ctx->repo->objects, &list->oid[i], 0))
oid_array_append(&ctx->current_batch, &list->oid[i]);
}

Expand Down
Loading