]> git.ipfire.org Git - thirdparty/git.git/blob - Documentation/RelNotes/2.43.0.txt
rebase: rewrite --(no-)autosquash documentation
[thirdparty/git.git] / Documentation / RelNotes / 2.43.0.txt
1 Git v2.43 Release Notes
2 =======================
3
4 Backward Compatibility Notes
5
6 * The "--rfc" option of "git format-patch" used to be a valid way to
7 override an earlier "--subject-prefix=<something>" on the command
8 line and replace it with "[RFC PATCH]", but from this release, it
9 merely prefixes the string "RFC " in front of the given subject
10 prefix. If you are negatively affected by this change, please use
11 "--subject-prefix=PATCH --rfc" as a replacement.
12
13 * "git rev-list --stdin" learned to take non-revisions (like "--not")
14 recently from the standard input, but the way such a "--not" was
15 handled was quite confusing, which has been rethought. The updated
16 rule is that "--not" given from the command line only affects revs
17 given from the command line that comes but not revs read from the
18 standard input, and "--not" read from the standard input affects
19 revs given from the standard input and not revs given from the
20 command line.
21
22 UI, Workflows & Features
23
24 * A message written in olden time prevented a branch from getting
25 checked out saying it is already checked out elsewhere, but these
26 days, we treat a branch that is being bisected or rebased just like
27 a branch that is checked out and protect it. Rephrase the message
28 to say that the branch is in use.
29
30 * Hourly and other schedules of "git maintenance" jobs are randomly
31 distributed now.
32
33 * "git cmd -h" learned to signal which options can be negated by
34 listing such options like "--[no-]opt".
35
36 * The way authentication related data other than passwords (e.g.,
37 oauth token and password expiration data) are stored in libsecret
38 keyrings has been rethought.
39
40 * Update the libsecret and wincred credential helpers to correctly
41 match which credential to erase; they erased the wrong entry in
42 some cases.
43
44 * Git GUI updates.
45
46 * "git format-patch" learns a way to feed cover letter description,
47 that (1) can be used on detached HEAD where there is no branch
48 description available, and (2) also can override the branch
49 description if there is one.
50
51 * Use of --max-pack-size to allow multiple packfiles to be created is
52 now supported even when we are sending unreachable objects to cruft
53 packs.
54
55 * "git format-patch --rfc --subject-prefix=<foo>" used to ignore the
56 "--subject-prefix" option and used "[RFC PATCH]"; now we will add
57 "RFC" prefix to whatever subject prefix is specified.
58
59 * "git log --format" has been taught the %(decorate) placeholder.
60
61 * The default log message created by "git revert", when reverting a
62 commit that records a revert, has been tweaked, to encourage people
63 to describe complex "revert of revert of revert" situations better in
64 their own words.
65
66 * The command-line completion support (in contrib/) learned to
67 complete "git commit --trailer=" for possible trailer keys.
68
69 * "git update-index" learns "--show-index-version" to inspect
70 the index format version used by the on-disk index file.
71
72 * "git diff" learned diff.statNameWidth configuration variable, to
73 give the default width for the name part in the "--stat" output.
74
75 * "git range-diff --notes=foo" compared "log --notes=foo --notes" of
76 the two ranges, instead of using just the specified notes tree.
77
78 * The command line completion script (in contrib/) can be told to
79 complete aliases by including ": git <cmd> ;" in the alias to tell
80 it that the alias should be completed in a similar way to how "git <cmd>" is
81 completed. The parsing code for the alias has been loosened to
82 allow ';' without an extra space before it.
83
84 * "git for-each-ref" and friends learned to apply mailmap to
85 authorname and other fields.
86
87 * "git repack" machinery learns to pay attention to the "--filter="
88 option.
89
90 * "git repack" learned "--max-cruft-size" to prevent cruft packs from
91 growing without bounds.
92
93 * "git merge-tree" learned to take strategy backend specific options
94 via the "-X" option, like "git merge" does.
95
96 * "git log" and friends learned "--dd" that is a short-hand for
97 "--diff-merges=first-parent -p".
98
99 * The attribute subsystem learned to honor `attr.tree` configuration
100 that specifies which tree to read the .gitattributes files from.
101
102 * "git merge-file" learns a mode to read three contents to be merged
103 from blob objects.
104
105
106 Performance, Internal Implementation, Development Support etc.
107
108 * "git check-attr" has been taught to work better with sparse-index.
109
110 * It may be tempting to leave the help text NULL for a command line
111 option that is either hidden or too obvious, but "git subcmd -h"
112 and "git subcmd --help-all" would have segfaulted if done so. Now
113 the help text is optional.
114
115 * Tests that are known to pass with LSan are now marked as such.
116
117 * Flaky "git p4" tests, as well as "git svn" tests, are now skipped
118 in the (rather expensive) sanitizer CI job.
119
120 * Tests with LSan from time to time seem to emit harmless messages
121 that make our tests unnecessarily flaky; we work around it by
122 filtering the uninteresting output.
123
124 * Unused parameters to functions are marked as such, and/or removed,
125 in order to bring us closer to -Wunused-parameter clean.
126
127 * The code to keep track of existing packs in the repository while
128 repacking has been refactored.
129
130 * The "streaming" interface used for bulk-checkin codepath has been
131 narrowed to take only blob objects for now, with no real loss of
132 functionality.
133
134 * GitHub CI workflow has learned to trigger Coverity check.
135
136 * Test coverage for trailers has been improved.
137
138 * The code to iterate over loose references has been optimized to
139 reduce the number of lstat() system calls.
140
141 * The codepaths that read "chunk" formatted files have been corrected
142 to pay attention to the chunk size and notice broken files.
143
144 * Replace macos-12 used at GitHub CI with macos-13.
145 (merge 682a868f67 js/ci-use-macos-13 later to maint).
146
147
148 Fixes since v2.42
149 -----------------
150
151 * Overly long label names used in the sequencer machinery are now
152 chopped to fit under filesystem limitation.
153
154 * Scalar updates.
155
156 * Tweak GitHub Actions CI so that pushing the same commit to multiple
157 branch tips at the same time will not waste building and testing
158 the same thing twice.
159
160 * The commit-graph verification code that detects a mixture of zero and
161 non-zero generation numbers has been updated.
162
163 * "git diff -w --exit-code" with various options did not work
164 correctly, which is being addressed.
165
166 * transfer.unpackLimit ought to be used as a fallback, but overrode
167 fetch.unpackLimit and receive.unpackLimit instead.
168
169 * The use of API between two calls to require_clean_work_tree() from
170 the sequencer code has been cleaned up for consistency.
171
172 * "git diff --no-such-option" and other corner cases around the exit
173 status of the "diff" command have been corrected.
174
175 * "git for-each-ref --sort='contents:size'" sorts the refs according
176 to size numerically, giving a ref that points at a blob twelve-byte
177 (12) long before showing a blob hundred-byte (100) long.
178
179 * We now limit the depth of the tree objects and maximum length of
180 pathnames recorded in tree objects.
181 (merge 4d5693ba05 jk/tree-name-and-depth-limit later to maint).
182
183 * Various fixes to the behavior of "rebase -i" when the command got
184 interrupted by conflicting changes.
185
186 * References from a description of the `--patch` option in various
187 manual pages have been simplified and improved.
188
189 * "git grep -e A --no-or -e B" is accepted, even though the negation
190 of "or" did not mean anything, which has been tightened.
191
192 * The completion script (in contrib/) has been taught to treat the
193 "-t" option to "git checkout" and "git switch" just like the
194 "--track" option, to complete remote-tracking branches.
195
196 * "git diff --no-index -R <(one) <(two)" did not work correctly,
197 which has been corrected.
198
199 * Update "git maintenance" timers' implementation based on systemd
200 timers to work with WSL.
201
202 * "git diff --cached" codepath did not fill the necessary stat
203 information for a file when fsmonitor knows it is clean and ended
204 up behaving as if it is not clean, which has been corrected.
205
206 * Clarify how "alias.foo = : git cmd ; aliased-command-string" should be
207 spelled with necessary whitespace around punctuation marks to
208 work.
209
210 * HTTP Header redaction code has been adjusted for a newer version of
211 cURL library that shows its traces differently from earlier
212 versions.
213
214 * An error message given by "git send-email" when given a malformed
215 address did not give correct information, which has been corrected.
216
217 * UBSan options were not propagated through the test framework to git
218 run via the httpd, unlike ASan options, which has been corrected.
219
220 * "checkout --merge -- path" and "update-index --unresolve path" did
221 not resurrect conflicted state that was resolved to remove path,
222 but now they do.
223 (merge 5bdedac3c7 jc/unresolve-removal later to maint).
224
225 * The display width table for unicode characters has been updated for
226 Unicode 15.1
227 (merge 872976c37e bb/unicode-width-table-15 later to maint).
228
229 * Update mailmap entry for Derrick.
230 (merge 6e5457d8c7 ds/mailmap-entry-update later to maint).
231
232 * In .gitmodules files, submodules are keyed by their names, and the
233 path to the submodule whose name is $name is specified by the
234 submodule.$name.path variable. There were a few codepaths that
235 mixed the name and path up when consulting the submodule database,
236 which have been corrected. It took long for these bugs to be found
237 as the name of a submodule initially is the same as its path, and
238 the problem does not surface until it is moved to a different path,
239 which apparently happens very rarely.
240
241 * "git diff --merge-base X other args..." insisted that X must be a
242 commit and errored out when given an annotated tag that peels to a
243 commit, but we only need it to be a committish. This has been
244 corrected.
245 (merge 4adceb5a29 ar/diff-index-merge-base-fix later to maint).
246
247 * Fix "git merge-tree" to stop segfaulting when the --attr-source
248 option is used.
249 (merge e95bafc52f jc/merge-ort-attr-index-fix later to maint).
250
251 * Unlike "git log --pretty=%D", "git log --pretty="%(decorate)" did
252 not auto-initialize the decoration subsystem, which has been
253 corrected.
254
255 * Feeding "git stash store" with a random commit that was not created
256 by "git stash create" now errors out.
257 (merge d9b6634589 jc/fail-stash-to-store-non-stash later to maint).
258
259 * The index file has room only for the lower 32-bit of the file size in
260 the cached stat information, which means cached stat information
261 will have 0 in its sd_size member for a file whose size is a multiple
262 of 4GiB. This is mistaken for a racily clean path. Avoid it by
263 storing a bogus sd_size value instead for such files.
264 (merge 5143ac07b1 bc/racy-4gb-files later to maint).
265
266 * "git p4" tried to store symlinks to LFS when told, but has been
267 fixed not to do so, because it does not make sense.
268 (merge 10c89a02b0 mm/p4-symlink-with-lfs later to maint).
269
270 * The codepath to handle recipient addresses `git send-email
271 --compose` learns from the user was completely broken, which has
272 been corrected.
273 (merge 3ec6167567 jk/send-email-fix-addresses-from-composed-messages later to maint).
274
275 * "cd sub && git grep -f patterns" tried to read "patterns" file at
276 the top level of the working tree; it has been corrected to read
277 "sub/patterns" instead.
278
279
280 * "git reflog expire --single-worktree" has been broken for the past
281 20 months or so, which has been corrected.
282
283 * "git send-email" did not have certain pieces of data computed yet
284 when it tried to validate the outgoing messages and its recipient
285 addresses, which has been sorted out.
286
287 * "git bugreport" learned to complain when it received a command line
288 argument that it will not use.
289
290 * The codepath to traverse the commit-graph learned to notice that a
291 commit is missing (e.g., corrupt repository lost an object), even
292 though it knows something about the commit (like its parents) from
293 what is in commit-graph.
294 (merge 7a5d604443 ps/do-not-trust-commit-graph-blindly-for-existence later to maint).
295
296 * "git rev-list --missing" did not work for missing commit objects,
297 which has been corrected.
298
299 * "git rev-list --unpacked --objects" failed to exclude packed
300 non-commit objects, which has been corrected.
301 (merge 7b3c8e9f38 tb/rev-list-unpacked-fix later to maint).
302
303 * Other code cleanup, docfix, build fix, etc.
304 (merge c2c349a15c xz/commit-title-soft-limit-doc later to maint).
305 (merge 1bd809938a tb/format-pack-doc-update later to maint).
306 (merge 8f81532599 an/clang-format-typofix later to maint).
307 (merge 3ca86adc2d la/strvec-header-fix later to maint).
308 (merge 6789275d37 jc/test-i18ngrep later to maint).
309 (merge 9972cd6004 ps/leakfixes later to maint).