Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
6a41481
whitespace: symbolic links usually lack LF at the end
gitster Feb 4, 2026
2096948
checkout: pass program-readable token to unified "main"
gitster Jan 29, 2026
12fee11
checkout: tell "parse_remote_branch" which command is calling it
gitster Jan 29, 2026
ebb667a
repo: rename the output format "keyvalue" to "lines"
lucasoshiro Feb 14, 2026
173c43b
repo: add new flag --keys to git-repo-info
lucasoshiro Feb 14, 2026
76a3f28
builtin/history: perform revwalk checks before asking for user input
pks-t Feb 16, 2026
0f2a0c5
builtin/history: check for merges before asking for user input
pks-t Feb 16, 2026
1073fa1
builtin/history: replace "--ref-action=print" with "--dry-run"
pks-t Feb 16, 2026
060e602
builtin/history: rename "--ref-action=" to "--update-refs="
pks-t Feb 16, 2026
1278a26
Documentation/git-history: document default for "--update-refs="
pks-t Feb 16, 2026
5ec4c22
ref-filter: factor out refname component counting
peff Feb 15, 2026
87cb6dc
ref-filter: simplify lstrip_ref_components() memory handling
peff Feb 15, 2026
2ec30e7
ref-filter: simplify rstrip_ref_components() memory handling
peff Feb 15, 2026
fe732a8
ref-filter: avoid strrchr() in rstrip_ref_components()
peff Feb 15, 2026
a8e8934
format-patch: fix From header in cover letter
Mroik Feb 17, 2026
0678e01
t: use test_seq -f and pipes in a few more places
aaronp24 Feb 18, 2026
143e849
doc: fetch: document `--jobs=0` behavior
ddbeck Feb 18, 2026
3f0cdfa
help: use list_aliases() for alias listing
jonatan-holmgren Feb 18, 2026
2ad33ea
alias: prepare for subsection aliases
jonatan-holmgren Feb 18, 2026
ac1f12a
alias: support non-alphanumeric names via subsection syntax
jonatan-holmgren Feb 18, 2026
edd8ad1
completion: fix zsh alias listing for subsection aliases
jonatan-holmgren Feb 18, 2026
4a631fe
ci: handle failures of test-slice helper
pks-t Feb 19, 2026
3141df7
ci: don't skip smallest test slice in GitLab
pks-t Feb 19, 2026
01b7be0
meson: fix MERGE_TOOL_DIR with "--no-bin-wrappers"
pks-t Feb 19, 2026
420b4ca
github: fix Meson tests not executing at all
pks-t Feb 19, 2026
2cca4ef
ci: make test slicing consistent across Meson/Make
pks-t Feb 19, 2026
055f0b9
gitlab-ci: use "run-test-slice-meson.sh"
pks-t Feb 19, 2026
5133837
gitlab-ci: handle failed tests on MSVC+Meson job
pks-t Feb 19, 2026
ed69307
pack-bitmap: deduplicate logic to iterate over preferred bitmap tips
pks-t Feb 19, 2026
7174098
pack-bitmap: fix bug with exact ref match in "pack.preferBitmapTips"
pks-t Feb 19, 2026
9e86e1a
bisect: fix misuse of `refs_for_each_ref_in()`
pks-t Feb 19, 2026
6375a00
bisect: simplify string_list memory handling
peff Feb 19, 2026
68ac70b
t: don't set ICONV prereq when iconv(1) is missing
pks-t Feb 20, 2026
9ce639c
t40xx: don't use iconv(1) without ICONV prereq
pks-t Feb 20, 2026
effb0aa
t4205: improve handling of ICONV prerequisite
pks-t Feb 20, 2026
c70bea2
t5550: add ICONV prereq to tests that use "$HTTPD_URL/error"
pks-t Feb 20, 2026
eb49c6e
t6006: don't use iconv(1) without ICONV prereq
pks-t Feb 20, 2026
8b0061b
ref-filter: clarify lstrip/rstrip component counting
peff Feb 20, 2026
341be27
Merge branch 'lo/repo-info-keys'
gitster Feb 27, 2026
aa95f87
Merge branch 'ps/for-each-ref-in-fixes'
gitster Feb 27, 2026
bb9c781
Merge branch 'ps/history-ergonomics-updates'
gitster Feb 27, 2026
ce4530a
Merge branch 'jk/ref-filter-lrstrip-optim'
gitster Feb 27, 2026
c33b464
Merge branch 'jc/checkout-switch-restore'
gitster Feb 27, 2026
0f0a57e
Merge branch 'jc/whitespace-incomplete-line'
gitster Feb 27, 2026
a62d0da
Merge branch 'ps/ci-gitlab-msvc-updates'
gitster Feb 27, 2026
ac78c58
Merge branch 'ps/tests-wo-iconv-fixes'
gitster Feb 27, 2026
c0d0b8d
Merge branch 'jh/alias-i18n'
gitster Feb 27, 2026
d64a20a
Merge branch 'mf/format-patch-honor-from-for-cover-letter'
gitster Feb 27, 2026
4416ec1
Merge branch 'db/doc-fetch-jobs-auto'
gitster Feb 27, 2026
e417bf2
Merge branch 'ap/use-test-seq-f-more'
gitster Feb 27, 2026
2cc7191
The 8th batch
gitster Feb 27, 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
8 changes: 4 additions & 4 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ jobs:
- uses: git-for-windows/setup-git-for-windows-sdk@v1
- name: test
shell: bash
run: . /etc/profile && ci/run-test-slice.sh ${{matrix.nr}} 10
run: . /etc/profile && ci/run-test-slice.sh $((${{matrix.nr}} + 1)) 10
- name: print test failures
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
shell: bash
Expand Down Expand Up @@ -237,7 +237,7 @@ jobs:
shell: bash
env:
NO_SVN_TESTS: 1
run: . /etc/profile && ci/run-test-slice.sh ${{matrix.nr}} 10
run: . /etc/profile && ci/run-test-slice.sh $((${{matrix.nr}} + 1)) 10
- name: print test failures
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
shell: bash
Expand Down Expand Up @@ -297,8 +297,8 @@ jobs:
name: windows-meson-artifacts
path: build
- name: Test
shell: pwsh
run: ci/run-test-slice-meson.sh build ${{matrix.nr}} 10
shell: bash
run: ci/run-test-slice-meson.sh build $((${{matrix.nr}} + 1)) 10
- name: print test failures
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
shell: bash
Expand Down
17 changes: 15 additions & 2 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -157,19 +157,22 @@ test:mingw64:
parallel: 10

.msvc-meson:
variables:
TEST_OUTPUT_DIRECTORY: "C:/Git-Test"
tags:
- saas-windows-medium-amd64
before_script:
- *windows_before_script
- choco install -y git meson ninja rust-ms
- Import-Module $env:ChocolateyInstall\helpers\chocolateyProfile.psm1
- refreshenv
- New-Item -Path $env:TEST_OUTPUT_DIRECTORY -ItemType Directory

build:msvc-meson:
extends: .msvc-meson
stage: build
script:
- meson setup build --vsenv -Dperl=disabled -Dbackend_max_links=1 -Dcredential_helpers=wincred
- meson setup build --vsenv -Dperl=disabled -Dbackend_max_links=1 -Dcredential_helpers=wincred -Dtest_output_directory="$TEST_OUTPUT_DIRECTORY"
- meson compile -C build
artifacts:
paths:
Expand All @@ -183,11 +186,21 @@ test:msvc-meson:
- job: "build:msvc-meson"
artifacts: true
script:
- meson test -C build --no-rebuild --print-errorlogs --slice $Env:CI_NODE_INDEX/$Env:CI_NODE_TOTAL
- |
& "C:/Program Files/Git/usr/bin/bash.exe" -l -c 'ci/run-test-slice-meson.sh build $CI_NODE_INDEX $CI_NODE_TOTAL'
after_script:
- |
if ($env:CI_JOB_STATUS -ne "success") {
& "C:/Program Files/Git/usr/bin/bash.exe" -l -c 'ci/print-test-failures.sh'
Move-Item -Path "$env:TEST_OUTPUT_DIRECTORY/failed-test-artifacts" -Destination t/
}
parallel: 10
artifacts:
paths:
- t/failed-test-artifacts
reports:
junit: build/meson-logs/testlog.junit.xml
when: on_failure

test:fuzz-smoke-tests:
image: ubuntu:latest
Expand Down
31 changes: 30 additions & 1 deletion Documentation/RelNotes/2.54.0.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ UI, Workflows & Features
* "git history" history rewriting (experimental) command has been
added.


* "git replay" is taught to drop commits that become empty (not the
ones that are empty in the original).

Expand All @@ -32,6 +31,11 @@ UI, Workflows & Features
* Command line completion (in contrib/) update for
"stash import/export".

* "git repo info" learns "--keys" action to list known keys.

* Extend the alias configuration syntax to allow aliases using
characters outside ASCII alphanumeric (plus '-').


Performance, Internal Implementation, Development Support etc.
--------------------------------------------------------------
Expand Down Expand Up @@ -76,6 +80,12 @@ Performance, Internal Implementation, Development Support etc.
already do on Linux and Windows. Also adjust the way Windows
implementation reports this information to match the other two.

* A handful of places used refs_for_each_ref_in() API incorrectly,
which has been corrected.

* Some tests assumed "iconv" is available without honoring ICONV
prerequisite, which has been corrected.


Fixes since v2.53
-----------------
Expand Down Expand Up @@ -130,6 +140,21 @@ Fixes since v2.53
been fixed.
(merge f4eff7116d ps/pack-concat-wo-backfill later to maint).

* "git switch <name>", in an attempt to create a local branch <name>
after a remote tracking branch of the same name gave an advise
message to disambiguate using "git checkout", which has been
updated to use "git switch".
(merge 12fee11f21 jc/checkout-switch-restore later to maint).

* It does not make much sense to apply the "incomplete-line"
whitespace rule to symbolic links, whose contents almost always
lack the final newline. "git apply" and "git diff" are now taught
to exclude them for a change to symbolic links.
(merge 6a41481c6d jc/whitespace-incomplete-line later to maint).

* "git format-patch --from=<me>" did not honor the command line
option when writing out the cover letter, which has been corrected.

* 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 @@ -151,3 +176,7 @@ Fixes since v2.53
(merge 2668b6bdc4 jc/doc-rerere-update later to maint).
(merge 2f99f50f2d jc/doc-cg-c-comment later to maint).
(merge a454cdca42 kh/doc-am-format-sendmail later to maint).
(merge 8b0061b5c5 jk/ref-filter-lrstrip-optim later to maint).
(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).
50 changes: 42 additions & 8 deletions Documentation/config/alias.adoc
Original file line number Diff line number Diff line change
@@ -1,12 +1,46 @@
alias.*::
Command aliases for the linkgit:git[1] command wrapper - e.g.
after defining `alias.last = cat-file commit HEAD`, the invocation
`git last` is equivalent to `git cat-file commit HEAD`. To avoid
confusion and troubles with script usage, aliases that
hide existing Git commands are ignored except for deprecated
commands. Arguments are split by
spaces, the usual shell quoting and escaping are supported.
A quote pair or a backslash can be used to quote them.
alias.*.command::
Command aliases for the linkgit:git[1] command wrapper. Aliases
can be defined using two syntaxes:
+
--
1. Without a subsection, e.g., `[alias] co = checkout`. The alias
name ("co" in this example) is
limited to ASCII alphanumeric characters and `-`,
and is matched case-insensitively.
2. With a subsection, e.g., `[alias "co"] command = checkout`. The
alias name can contain any characters (except for newlines and NUL bytes),
including UTF-8, and is matched case-sensitively as raw bytes.
You define the action of the alias in the `command`.
--
+
Examples:
+
----
# Without subsection (ASCII alphanumeric and dash only)
[alias]
co = checkout
st = status

# With subsection (allows any characters, including UTF-8)
[alias "hämta"]
command = fetch
[alias "rätta till"]
command = commit --amend
----
+
With a Git alias defined, e.g.,

$ git config --global alias.last "cat-file commit HEAD"
# Which is equivalent to
$ git config --global alias.last.command "cat-file commit HEAD"

`git last` is equivalent to `git cat-file commit HEAD`. To avoid
confusion and troubles with script usage, aliases that
hide existing Git commands are ignored except for deprecated
commands. Arguments are split by
spaces, the usual shell quoting and escaping are supported.
A quote pair or a backslash can be used to quote them.
+
Note that the first word of an alias does not necessarily have to be a
command. It can be a command-line option that will be passed into the
Expand Down
9 changes: 5 additions & 4 deletions Documentation/config/pack.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -160,12 +160,13 @@ pack.usePathWalk::
processes. See linkgit:git-pack-objects[1] for full details.

pack.preferBitmapTips::
Specifies a ref hierarchy (e.g., "refs/heads/"); can be
given multiple times to specify more than one hierarchies.
When selecting which commits will receive bitmaps, prefer a
commit at the tip of any reference that is a suffix of any value
of this configuration over any other commits in the "selection
window".
commit at the tip of a reference that is contained in any of
the configured hierarchies.
+
Note that setting this configuration to `refs/foo` does not mean that
Note that setting this configuration to `refs/foo/` does not mean that
the commits at the tips of `refs/foo/bar` and `refs/foo/baz` will
necessarily be selected. This is because commits are selected for
bitmaps from within a series of windows of variable length.
Expand Down
2 changes: 2 additions & 0 deletions Documentation/fetch-options.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,8 @@ endif::git-pull[]
`--jobs=<n>`::
Parallelize all forms of fetching up to _<n>_ jobs at a time.
+
A value of 0 will use some reasonable default.
+
If the `--multiple` option was specified, the different remotes will be fetched
in parallel. If multiple submodules are fetched, they will be fetched in
parallel. To control them independently, use the config settings
Expand Down
11 changes: 6 additions & 5 deletions Documentation/git-format-patch.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -282,11 +282,12 @@ e.g., `--rfc='-(WIP)'` results in "PATCH (WIP)".

--from::
--from=<ident>::
Use `ident` in the `From:` header of each commit email. If the
author ident of the commit is not textually identical to the
provided `ident`, place a `From:` header in the body of the
message with the original author. If no `ident` is given, use
the committer ident.
Use `ident` in the `From:` header of each email. In case of a
commit email, if the author ident of the commit is not textually
identical to the provided `ident`, place a `From:` header in the
body of the message with the original author. If no `ident` is
given, or if the option is not passed at all, use the ident of
the current committer.
+
Note that this option is only useful if you are actually sending the
emails and want to identify yourself as the sender, but retain the
Expand Down
14 changes: 9 additions & 5 deletions Documentation/git-history.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ git-history - EXPERIMENTAL: Rewrite history
SYNOPSIS
--------
[synopsis]
git history reword <commit> [--ref-action=(branches|head|print)]
git history reword <commit> [--dry-run] [--update-refs=(branches|head)]

DESCRIPTION
-----------
Expand Down Expand Up @@ -60,13 +60,17 @@ The following commands are available to rewrite history in different ways:
OPTIONS
-------

`--ref-action=(branches|head|print)`::
`--dry-run`::
Do not update any references, but instead print any ref updates in a
format that can be consumed by linkgit:git-update-ref[1]. Necessary new
objects will be written into the repository, so applying these printed
ref updates is generally safe.

`--update-refs=(branches|head)`::
Control which references will be updated by the command, if any. With
`branches`, all local branches that point to commits which are
descendants of the original commit will be rewritten. With `head`, only
the current `HEAD` reference will be rewritten. With `print`, all
updates as they would be performed with `branches` are printed in a
format that can be consumed by linkgit:git-update-ref[1].
the current `HEAD` reference will be rewritten. Defaults to `branches`.

GIT
---
Expand Down
32 changes: 22 additions & 10 deletions Documentation/git-repo.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ git-repo - Retrieve information about the repository
SYNOPSIS
--------
[synopsis]
git repo info [--format=(keyvalue|nul) | -z] [--all | <key>...]
git repo structure [--format=(table|keyvalue|nul) | -z]
git repo info [--format=(lines|nul) | -z] [--all | <key>...]
git repo info --keys [--format=(lines|nul) | -z]
git repo structure [--format=(table|lines|nul) | -z]

DESCRIPTION
-----------
Expand All @@ -19,7 +20,7 @@ THIS COMMAND IS EXPERIMENTAL. THE BEHAVIOR MAY CHANGE.

COMMANDS
--------
`info [--format=(keyvalue|nul) | -z] [--all | <key>...]`::
`info [--format=(lines|nul) | -z] [--all | <key>...]`::
Retrieve metadata-related information about the current repository. Only
the requested data will be returned based on their keys (see "INFO KEYS"
section below).
Expand All @@ -30,21 +31,32 @@ requested. The `--all` flag requests the values for all the available keys.
The output format can be chosen through the flag `--format`. Two formats are
supported:
+
`keyvalue`:::

`lines`:::
output key-value pairs one per line using the `=` character as
the delimiter between the key and the value. Values containing "unusual"
characters are quoted as explained for the configuration variable
`core.quotePath` (see linkgit:git-config[1]). This is the default.

`nul`:::
similar to `keyvalue`, but using a newline character as the delimiter
similar to `lines`, but using a newline character as the delimiter
between the key and the value and using a NUL character after each value.
This format is better suited for being parsed by another applications than
`keyvalue`. Unlike in the `keyvalue` format, the values are never quoted.
`lines`. Unlike in the `lines` format, the values are never quoted.
+
`-z` is an alias for `--format=nul`.

`structure [--format=(table|keyvalue|nul) | -z]`::
`info --keys [--format=(lines|nul) | -z]`::
List all the available keys, one per line. The output format can be chosen
through the flag `--format`. The following formats are supported:
+
`lines`:::
Output the keys one per line. This is the default.

`nul`:::
Similar to `lines`, but using a _NUL_ character after each value.

`structure [--format=(table|lines|nul) | -z]`::
Retrieve statistics about the current repository structure. The
following kinds of information are reported:
+
Expand All @@ -61,17 +73,17 @@ supported:
change and is not intended for machine parsing. This is the default
format.

`keyvalue`:::
`lines`:::
Each line of output contains a key-value pair for a repository stat.
The '=' character is used to delimit between the key and the value.
Values containing "unusual" characters are quoted as explained for the
configuration variable `core.quotePath` (see linkgit:git-config[1]).

`nul`:::
Similar to `keyvalue`, but uses a NUL character to delimit between
Similar to `lines`, but uses a NUL character to delimit between
key-value pairs instead of a newline. Also uses a newline character as
the delimiter between the key and value instead of '='. Unlike the
`keyvalue` format, values containing "unusual" characters are never
`lines` format, values containing "unusual" characters are never
quoted.
+
`-z` is an alias for `--format=nul`.
Expand Down
Loading