branch: sort detached HEAD based on a flag
[git] / Documentation / RelNotes / 2.30.0.txt
1 Git 2.30 Release Notes
2 ======================
3
4 Updates since v2.29
5 -------------------
6
7 UI, Workflows & Features
8
9  * Userdiff for PHP update.
10
11  * Userdiff for Rust update.
12
13  * Userdiff for CSS update.
14
15  * The command line completion script (in contrib/) learned that "git
16    stash show" takes the options "git diff" takes.
17
18  * "git worktree list" now shows if each worktree is locked.  This
19    possibly may open us to show other kinds of states in the future.
20
21  * "git maintenance", an extended big brother of "git gc", continues
22    to evolve.
23
24  * "git push --force-with-lease[=<ref>]" can easily be misused to lose
25    commits unless the user takes good care of their own "git fetch".
26    A new option "--force-if-includes" attempts to ensure that what is
27    being force-pushed was created after examining the commit at the
28    tip of the remote ref that is about to be force-replaced.
29
30  * "git clone" learned clone.defaultremotename configuration variable
31    to customize what nickname to use to call the remote the repository
32    was cloned from.
33
34  * "git checkout" learned to use checkout.guess configuration variable
35    and enable/disable its "--[no-]guess" option accordingly.
36
37  * "git resurrect" script (in contrib/) learned that the object names
38    may be longer than 40-hex depending on the hash function in use.
39
40  * "git diff A...B" learned "git diff --merge-base A B", which is a
41    longer short-hand to say the same thing.
42
43  * A sample 'push-to-checkout' hook, that performs the same as
44    what the built-in default action does, has been added.
45
46  * "git diff" family of commands learned the "-I<regex>" option to
47    ignore hunks whose changed lines all match the given pattern.
48
49  * The userdiff pattern learned to identify the function definition in
50    POSIX shells and bash.
51
52  * "git checkout-index" did not consistently signal an error with its
53    exit status, but now it does.
54
55  * A commit and tag object may have CR at the end of each and
56    every line (you can create such an object with hash-object or
57    using --cleanup=verbatim to decline the default clean-up
58    action), but it would make it impossible to have a blank line
59    to separate the title from the body of the message.  We are now
60    more lenient and accept a line with lone CR on it as a blank line,
61    too.
62
63  * Exit codes from "git remote add" etc. were not usable by scripted
64    callers, but now they are.
65
66  * "git archive" now allows compression level higher than "-9"
67    when generating tar.gz output.
68
69  * Zsh autocompletion (in contrib/) update.
70
71  * The maximum length of output filenames "git format-patch" creates
72    has become configurable (used to be capped at 64).
73
74  * "git rev-parse" learned the "--end-of-options" to help scripts to
75    safely take a parameter that is supposed to be a revision, e.g.
76    "git rev-parse --verify -q --end-of-options $rev".
77
78  * The command line completion script (in contrib/) learned to expand
79    commands that are alias of alias.
80
81  * "git update-ref --stdin" learns to take multiple transactions in a
82    single session.
83
84  * Various subcommands of "git config" that take value_regex
85    learned the "--literal-value" option to take the value_regex option
86    as a literal string.
87
88  * The transport layer was taught to optionally exchange the session
89    ID assigned by the trace2 subsystem during fetch/push transactions.
90
91  * "git imap-send" used to ignore configuration variables like
92    core.askpass; this has been corrected.
93
94  * "git $cmd $args", when $cmd is not a recognised subcommand, by
95    default tries to see if $cmd is a typo of an existing subcommand
96    and optionally executes the corrected command if there is only one
97    possibility, depending on the setting of help.autocorrect; the
98    users can now disable the whole thing, including the cycles spent
99    to find a likely typo, by setting the configuration variable to
100    'never'.
101
102  * "@" sometimes worked (e.g. "git push origin @:there") as a part of
103    a refspec element, but "git push origin @" did not work, which has
104    been corrected.
105
106
107 Performance, Internal Implementation, Development Support etc.
108
109  * Use "git archive" more to produce the release tarball.
110
111  * GitHub Actions automated test improvement to skip tests on a tree
112    identical to what has already been tested.
113
114  * Test-coverage for running commit-graph task "git maintenance" has
115    been extended.
116
117  * Our test scripts can be told to run only individual pieces while
118    skipping others with the "--run=..." option; they were taught to
119    take a substring of test title, in addition to numbers, to name the
120    test pieces to run.
121
122  * Adjust tests so that they won't scream when the default initial
123    branch name is different from 'master'.
124
125  * Rewriting "git bisect" in C continues.
126
127  * More preliminary tests have been added to document desired outcomes
128    of various "directory rename" situations.
129
130  * Micro clean-up of a couple of test scripts.
131
132  * "git diff" and other commands that share the same machinery to
133    compare with working tree files have been taught to take advantage
134    of the fsmonitor data when available.
135
136  * The code to detect premature EOF in the sideband demultiplexer has
137    been cleaned up.
138
139  * "git fetch --depth=<n>" over the stateless RPC / smart HTTP
140    transport handled EOF from the client poorly at the server end.
141
142  * A specialization of hashmap that uses a string as key has been
143    introduced.  Hopefully it will see wider use over time.
144
145  * "git bisect start/next" in a large span of history spends a lot of
146    time trying to come up with exactly the half-way point; this can be
147    optimized by stopping when we see a commit that is close enough to
148    the half-way point.
149
150  * A lazily defined test prerequisite can now be defined in terms of
151    another lazily defined test prerequisite.
152
153  * Expectation for the original contributor after responding to a
154    review comment to use the explanation in a patch update has been
155    described.
156
157  * Multiple "credential-store" backends can race to lock the same
158    file, causing everybody else but one to fail---reattempt locking
159    with some timeout to reduce the rate of the failure.
160
161  * "git-parse-remote" shell script library outlived its usefulness.
162
163  * Like die() and error(), a call to warning() will also trigger a
164    trace2 event.
165
166  * Use of non-reentrant localtime() has been removed.
167
168  * Non-reentrant time-related library functions and ctime/asctime with
169    awkward calling interfaces are banned from the codebase.
170
171
172 Fixes since v2.29
173 -----------------
174
175  * In 2.29, "--committer-date-is-author-date" option of "rebase" and
176    "am" subcommands lost the e-mail address by mistake, which has been
177    corrected.
178    (merge 5f35edd9d7 jk/committer-date-is-author-date-fix later to maint).
179
180  * "git checkout -p A...B [-- <path>]" did not work, even though the
181    same command without "-p" correctly used the merge-base between
182    commits A and B.
183    (merge 35166b1fb5 dl/checkout-p-merge-base later to maint).
184
185  * The side-band status report can be sent at the same time as the
186    primary payload multiplexed, but the demultiplexer on the receiving
187    end incorrectly split a single status report into two, which has
188    been corrected.
189    (merge 712b0377db js/avoid-split-sideband-message later to maint).
190
191  * "git fast-import" wasted a lot of memory when many marks were in use.
192    (merge 3f018ec716 jk/fast-import-marks-alloc-fix later to maint).
193
194  * A test helper "test_cmp A B" was taught to diagnose missing files A
195    or B as a bug in test, but some tests legitimately wanted to notice
196    a failure to even create file B as an error, in addition to leaving
197    the expected result in it, and were misdiagnosed as a bug.  This
198    has been corrected.
199    (merge 262d5ad5a5 es/test-cmp-typocatcher later to maint).
200
201  * When "git commit-graph" detects the same commit recorded more than
202    once while it is merging the layers, it used to die.  The code now
203    ignores all but one of them and continues.
204    (merge 85102ac71b ds/commit-graph-merging-fix later to maint).
205
206  * The meaning of a Signed-off-by trailer can vary from project to
207    project; this and also what it means to this project has been
208    clarified in the documentation.
209    (merge 3abd4a67d9 bk/sob-dco later to maint).
210
211  * "git credential' didn't honor the core.askPass configuration
212    variable (among other things), which has been corrected.
213    (merge 567ad2c0f9 tk/credential-config later to maint).
214
215  * Dev support to catch a tentative definition of a variable in our C
216    code as an error.
217    (merge 5539183622 jk/no-common later to maint).
218
219  * "git rebase --rebase-merges" did not correctly pass --gpg-sign
220    command line option to underlying "git merge" when replaying a merge
221    using non-default merge strategy or when replaying an octopus merge
222    (because replaying a two-head merge with the default strategy was
223    done in a separate codepath, the problem did not trigger for most
224    users), which has been corrected.
225    (merge 43ad4f2eca sc/sequencer-gpg-octopus later to maint).
226
227  * "git apply -R" did not handle patches that touch the same path
228    twice correctly, which has been corrected.  This is most relevant
229    in a patch that changes a path from a regular file to a symbolic
230    link (and vice versa).
231    (merge b0f266de11 jt/apply-reverse-twice later to maint).
232
233  * A recent oid->hash conversion missed one spot, breaking "git svn".
234    (merge 03bb366de4 bc/svn-hash-oid-fix later to maint).
235
236  * The documentation on the "--abbrev=<n>" option did not say the
237    output may be longer than "<n>" hexdigits, which has been
238    clarified.
239    (merge cda34e0d0c jc/abbrev-doc later to maint).
240
241  * "git p4" now honors init.defaultBranch configuration.
242    (merge 1b09d1917f js/p4-default-branch later to maint).
243
244  * Recently the format of an internal state file "rebase -i" uses has
245    been tightened up for consistency, which would hurt those who start
246    "rebase -i" with old git and then continue with new git.  Loosen
247    the reader side a bit (which we may want to tighten again in a year
248    or so).
249    (merge c779386182 jc/sequencer-stopped-sha-simplify later to maint).
250
251  * The code to see if "git stash drop" can safely remove refs/stash
252    has been made more careful.
253    (merge 4f44c5659b rs/empty-reflog-check-fix later to maint).
254
255  * "git log -L<range>:<path>" is documented to take no pathspec, but
256    this was not enforced by the command line option parser, which has
257    been corrected.
258    (merge 39664cb0ac jc/line-log-takes-no-pathspec later to maint).
259
260  * "git format-patch --output=there" did not work as expected and
261    instead crashed.  The option is now supported.
262    (merge dc1672dd10 jk/format-patch-output later to maint).
263
264  * Define ARM64 compiled with MSVC to be little-endian.
265    (merge 0c038fc65a dg/bswap-msvc later to maint).
266
267  * "git rebase -i" did not store ORIG_HEAD correctly.
268    (merge 8843302307 pw/rebase-i-orig-head later to maint).
269
270  * "git blame -L :funcname -- path" did not work well for a path for
271    which a userdiff driver is defined.
272
273  * "make DEVELOPER=1 sparse" used to run sparse and let it emit
274    warnings; now such warnings will cause an error.
275    (merge 521dc56270 jc/sparse-error-for-developer-build later to maint).
276
277  * "git blame --ignore-revs-file=<file>" learned to ignore a
278    non-existent object name in the input, instead of complaining.
279    (merge c714d05875 jc/blame-ignore-fix later to maint).
280
281  * Running "git diff" while allowing external diff in a state with
282    unmerged paths used to segfault, which has been corrected.
283    (merge d66851806f jk/diff-release-filespec-fix later to maint).
284
285  * Build configuration cleanup.
286    (merge b990f02fd8 ab/config-mak-uname-simplify later to maint).
287
288  * Fix regression introduced when nvimdiff support in mergetool was added.
289    (merge 12026f46e7 pd/mergetool-nvimdiff later to maint).
290
291  * The exchange between receive-pack and proc-receive hook did not
292    carefully check for errors.
293
294  * The code was not prepared to deal with pack .idx file that is
295    larger than 4GB.
296    (merge 81c4c5cf2e jk/4gb-idx later to maint).
297
298  * Since jgit does not yet work with SHA-256 repositories, mark the
299    tests that use it not to run unless we are testing with ShA-1
300    repositories.
301    (merge ea699b4adc sg/t5310-jgit-wants-sha1 later to maint).
302
303  * Config parser fix for "git notes".
304    (merge 45fef1599a na/notes-displayref-is-not-boolean later to maint).
305
306  * Move a definition of compatibility wrapper from cache.h to
307    git-compat-util.h
308    (merge a76b138daa hn/sleep-millisec-decl later to maint).
309
310  * Error message fix.
311    (merge eaf5341538 km/stash-error-message-fix later to maint).
312
313  * "git pull --rebase --recurse-submodules" checked for local changes
314    in a wrong range and failed to run correctly when it should.
315    (merge 5176f20ffe pb/pull-rebase-recurse-submodules later to maint).
316
317  * "git push" that is killed may leave a pack-objects process behind,
318    still computing to find a good compression, wasting cycles.  This
319    has been corrected.
320    (merge 8b59935114 jk/stop-pack-objects-when-push-is-killed later to maint).
321
322  * "git fetch" that is killed may leave a pack-objects process behind,
323    still computing to find a good compression, wasting cycles.  This
324    has been corrected.
325    (merge 309a4028e7 jk/stop-pack-objects-when-fetch-is-killed later to maint).
326
327  * "git add -i" failed to honor custom colors configured to show
328    patches, which has been corrected.
329    (merge 96386faa03 js/add-i-color-fix later to maint).
330
331  * Processes that access packdata while the .idx file gets removed
332    (e.g. while repacking) did not fail or fall back gracefully as they
333    could.
334    (merge 506ec2fbda tb/idx-midx-race-fix later to maint).
335
336  * "git apply" adjusted the permission bits of working-tree files and
337    directories according to core.sharedRepository setting by mistake and
338    for a long time, which has been corrected.
339    (merge eb3c027e17 mt/do-not-use-scld-in-working-tree later to maint).
340
341  * "fetch-pack" could pass NULL pointer to unlink(2) when it sees an
342    invalid filename; the error checking has been tightened to make
343    this impossible.
344    (merge 6031af387e rs/fetch-pack-invalid-lockfile later to maint).
345
346  * "git maintenance run/start/stop" needed to be run in a repository
347    to hold the lockfile they use, but didn't make sure they are
348    actually in a repository, which has been corrected.
349
350  * The glossary described a branch as an "active" line of development,
351    which is misleading---a stale and non-moving branch is still a
352    branch.
353    (merge eef1ceabd8 so/glossary-branch-is-not-necessarily-active later to maint).
354
355  * Newer versions of xsltproc can assign IDs in HTML documents it
356    generates in a consistent manner.  Use the feature to help format
357    HTML version of the user manual reproducibly.
358    (merge 3569e11d69 ae/doc-reproducible-html later to maint).
359
360  * Tighten error checking in the codepath that responds to "git fetch".
361    (merge d43a21bdbb jk/check-config-parsing-error-in-upload-pack later to maint).
362
363  * "git pack-redundant" when there is only one packfile used to crash,
364    which has been corrected.
365    (merge 0696232390 jx/pack-redundant-on-single-pack later to maint).
366
367  * Other code cleanup, docfix, build fix, etc.
368    (merge 3e0a5dc9af cc/doc-filter-branch-typofix later to maint).
369    (merge 32c83afc2c cw/ci-ghwf-check-ws-errors later to maint).
370    (merge 5eb2ed691b rs/tighten-callers-of-deref-tag later to maint).
371    (merge 6db29ab213 jk/fast-import-marks-cleanup later to maint).
372    (merge e5cf6d3df4 nk/dir-c-comment-update later to maint).
373    (merge 5710dcce74 jk/report-fn-typedef later to maint).
374    (merge 9a82db1056 en/sequencer-rollback-lock-cleanup later to maint).
375    (merge 4e1bee9a99 js/t7006-cleanup later to maint).
376    (merge f5bcde6c58 es/tutorial-mention-asciidoc-early later to maint).
377    (merge 714d491af0 so/format-patch-doc-on-default-diff-format later to maint).
378    (merge 0795df4b9b rs/clear-commit-marks-in-repo later to maint).
379    (merge 9542d56379 sd/prompt-local-variable later to maint).
380    (merge 06d43fad18 rs/pack-write-hashwrite-simplify later to maint).
381    (merge b7e20b4373 mc/typofix later to maint).
382    (merge f6bcd9a8a4 js/test-whitespace-fixes later to maint).
383    (merge 53b67a801b js/test-file-size later to maint).
384    (merge 970909c2a7 rs/hashwrite-be64 later to maint).
385    (merge 5a923bb1f0 ma/list-object-filter-opt-msgfix later to maint).
386    (merge 1c3e412916 rs/archive-plug-leak-refname later to maint).
387    (merge d44e5267ea rs/plug-diff-cache-leak later to maint).
388    (merge 793c1464d3 ab/gc-keep-base-option later to maint).
389    (merge b86339b12b mt/worktree-error-message-fix later to maint).
390    (merge e01ae2a4a7 js/pull-rebase-use-advise later to maint).
391    (merge e63d774242 sn/config-doc-typofix later to maint).
392    (merge 08e9df2395 jk/multi-line-indent-style-fix later to maint).
393    (merge e66590348a da/vs-build-iconv-fix later to maint).
394    (merge 7fe07275be js/cmake-extra-built-ins-fix later to maint).
395    (merge 633eebe142 jb/midx-doc-update later to maint).
396    (merge 5885367e8f jh/index-v2-doc-on-fsmn later to maint).
397    (merge 14639a4779 jc/compat-util-setitimer-fix later to maint).
398    (merge 56f56ac50b ab/unreachable-break later to maint).
399    (merge 731d578b4f rb/nonstop-config-mak-uname-update later to maint).
400    (merge f4698738f9 es/perf-export-fix later to maint).
401    (merge 773c694142 nk/refspecs-negative-fix later to maint).