7 Backward compatibility notes
9 * The "--preserve-merges" option of "git rebase" has been removed.
12 UI, Workflows & Features
14 * Pathname expansion (like "~username/") learned a way to specify a
15 location relative to Git installation (e.g. its $sharedir which is
16 $(prefix)/share), with "%(prefix)".
18 * Use `ort` instead of `recursive` as the default merge strategy.
20 * The userdiff pattern for "java" language has been updated.
22 * "git rebase" by default skips changes that are equivalent to
23 commits that are already in the history the branch is rebased onto;
24 give messages when this happens to let the users be aware of
25 skipped commits, and also teach them how to tell "rebase" to keep
28 * The advice message that "git cherry-pick" gives when it asks
29 conflicted replay of a commit to be resolved by the end user has
32 * After "git clone --recurse-submodules", all submodules are cloned
33 but they are not by default recursed into by other commands. With
34 submodule.stickyRecursiveClone configuration set, submodule.recurse
35 configuration is set to true in a repository created by "clone"
36 with "--recurse-submodules" option.
38 * The logic for auto-correction of misspelt subcommands learned to go
39 interactive when the help.autocorrect configuration variable is set
42 * "git maintenance" scheduler learned to use systemd timers as a
45 * "git diff --submodule=diff" showed failure from run_command() when
46 trying to run diff inside a submodule, when the user manually
47 removes the submodule directory.
49 * "git bundle unbundle" learned to show progress display.
51 * In cone mode, the sparse-index code path learned to remove ignored
52 files (like build artifacts) outside the sparse cone, allowing the
53 entire directory outside the sparse cone to be removed, which is
54 especially useful when the sparse patterns change.
56 * Taking advantage of the CGI interface, http-backend has been
57 updated to enable protocol v2 automatically when the other side
60 * The credential-cache helper has been adjusted to Windows.
62 * The error in "git help no-such-git-command" is handled better.
64 * The unicode character width table (used for output alignment) has
67 * The ref iteration code used to optionally allow dangling refs to be
68 shown, which has been tightened up.
70 * "git add", "git mv", and "git rm" have been adjusted to avoid
71 updating paths outside of the sparse-checkout definition unless
72 the user specifies a "--sparse" option.
74 * "git repack" has been taught to generate multi-pack reachability
78 Performance, Internal Implementation, Development Support etc.
80 * "git bisect" spawned "git show-branch" only to pretty-print the
81 title of the commit after checking out the next version to be
82 tested; this has been rewritten in C.
84 * "git add" can work better with the sparse index.
86 * Support for ancient versions of cURL library (pre 7.19.4) has been
89 * A handful of tests that assumed implementation details of files
90 backend for refs have been cleaned up.
92 * trace2 logs learned to show parent process name to see in what
93 context Git was invoked.
95 * Loading of ref tips to prepare for common ancestry negotiation in
96 "git fetch-pack" has been optimized by taking advantage of the
97 commit graph when available.
99 * Remind developers that the userdiff patterns should be kept simple
100 and permissive, assuming that the contents they apply are always
101 syntactically correct.
103 * The current implementation of GIT_TEST_FAIL_PREREQS is broken in
104 that checking for the lack of a prerequisite would not work. Avoid
105 the use of "if ! test_have_prereq X" in a test script.
107 * The revision traversal API has been optimized by taking advantage
108 of the commit-graph, when available, to determine if a commit is
109 reachable from any of the existing refs.
111 * "git fetch --quiet" optimization to avoid useless computation of
112 info that will never be displayed.
114 * Callers from older advice_config[] based API has been updated to
115 use the newer advice_if_enabled() and advice_enabled() API.
117 * Teach "test_pause" and "debug" helpers to allow using the HOME and
118 TERM environment variables the user usually uses.
120 * "make INSTALL_STRIP=-s install" allows the installation step to use
121 "install -s" to strip the binaries as they get installed.
123 * Code that handles large number of refs in the "git fetch" code
124 path has been optimized.
126 * The reachability bitmap file used to be generated only for a single
127 pack, but now we've learned to generate bitmaps for history that
128 span across multiple packfiles.
130 * The code to make "git grep" recurse into submodules has been
131 updated to migrate away from the "add submodule's object store as
132 an alternate object store" mechanism (which is suboptimal).
134 * The tracing of process ancestry information has been enhanced.
136 * Reduce number of write(2) system calls while sending the
139 * Update the build procedure to use the "-pedantic" build when
140 DEVELOPER makefile macro is in effect.
142 * Large part of "git submodule add" gets rewritten in C.
144 * The run-command API has been updated so that the callers can easily
145 ask the file descriptors open for packfiles to be closed immediately
146 before spawning commands that may trigger auto-gc.
148 * An oddball OPTION_ARGUMENT feature has been removed from the
151 * The mergesort implementation used to sort linked list has been
154 * Remove external declaration of functions that no longer exist.
156 * "git multi-pack-index write --bitmap" learns to propagate the
157 hashcache from original bitmap to resulting bitmap.
159 * CI learns to run the leak sanitizer builds.
161 * "git grep --recurse-submodules" takes trees and blobs from the
162 submodule repository, but the textconv settings when processing a
163 blob from the submodule is not taken from the submodule repository.
164 A test is added to demonstrate the issue, without fixing it.
166 * Teach "git help -c" into helping the command line completion of
167 configuration variables.
169 * When "git cmd -h" shows more than one line of usage text (e.g.
170 the cmd subcommand may take sub-sub-command), parse-options API
171 learned to align these lines, even across i18n/l10n.
173 * Prevent "make sparse" from running for the source files that
174 haven't been modified.
180 * Input validation of "git pack-objects --stdin-packs" has been
183 * Bugfix for common ancestor negotiation recently introduced in "git
186 * "git pull" had various corner cases that were not well thought out
187 around its --rebase backend, e.g. "git pull --ff-only" did not stop
188 but went ahead and rebased when the history on other side is not a
189 descendant of our history. The series tries to fix them up.
191 * "git apply" miscounted the bytes and failed to read to the end of
194 * "git range-diff" code clean-up.
196 * "git commit --fixup" now works with "--edit" again, after it was
199 * Use upload-artifacts v1 (instead of v2) for 32-bit linux, as the
200 new version has a blocker bug for that architecture.
202 * Checking out all the paths from HEAD during the last conflicted
203 step in "git rebase" and continuing would cause the step to be
204 skipped (which is expected), but leaves MERGE_MSG file behind in
205 $GIT_DIR and confuses the next "git commit", which has been
208 * Various bugs in "git rebase -r" have been fixed.
210 * mmap() imitation used to call xmalloc() that dies upon malloc()
211 failure, which has been corrected to just return an error to the
212 caller to be handled.
214 * "git diff --relative" segfaulted and/or produced incorrect result
215 when there are unmerged paths.
217 * The delayed checkout code path in "git checkout" etc. were chatty
218 even when --quiet and/or --no-progress options were given.
220 * "git branch -D <branch>" used to refuse to remove a broken branch
221 ref that points at a missing commit, which has been corrected.
223 * Build update for Apple clang.
225 * The parser for the "--nl" option of "git column" has been
228 * "git upload-pack" which runs on the other side of "git fetch"
229 forgot to take the ref namespaces into account when handling
232 * The sparse-index support can corrupt the index structure by storing
233 a stale and/or uninitialized data, which has been corrected.
235 * Buggy tests could damage repositories outside the throw-away test
236 area we created. We now by default export GIT_CEILING_DIRECTORIES
237 to limit the damage from such a stray test.
239 * Even when running "git send-email" without its own threaded
240 discussion support, a threading related header in one message is
241 carried over to the subsequent message to result in an unwanted
242 threading, which has been corrected.
244 * The output from "git fast-export", when its anonymization feature
245 is in use, showed an annotated tag incorrectly.
247 * Doc update plus improved error reporting.
249 * Recent "diff -m" changes broke "gitk", which has been corrected.
253 * The "git apply -3" code path learned not to bother the lower level
254 merge machinery when the three-way merge can be trivially resolved
255 without the content level merge. This fixes a regression caused by
256 recent "-3way first and fall back to direct application" change.
258 * The code that optionally creates the *.rev reverse index file has
259 been optimized to avoid needless computation when it is not writing
262 * "git range-diff -I... <range> <range>" segfaulted, which has been
265 * The order in which various files that make up a single (conceptual)
266 packfile has been reevaluated and straightened up. This matters in
267 correctness, as an incomplete set of files must not be shown to a
270 * The "mode" word is useless in a call to open(2) that does not
271 create a new file. Such a call in the files backend of the ref
272 subsystem has been cleaned up.
274 * "git update-ref --stdin" failed to flush its output as needed,
275 which potentially led the conversation to a deadlock.
277 * When "git am --abort" fails to abort correctly, it still exited
278 with exit status of 0, which has been corrected.
280 * Correct nr and alloc members of strvec struct to be of type size_t.
282 * "git stash", where the tentative change involves changing a
283 directory to a file (or vice versa), was confused, which has been
286 * "git clone" from a repository whose HEAD is unborn into a bare
287 repository didn't follow the branch name the other side used, which
290 * "git cvsserver" had a long-standing bug in its authentication code,
291 which has finally been corrected (it is unclear and is a separate
292 question if anybody is seriously using it, though).
294 * "git difftool --dir-diff" mishandled symbolic links.
296 * Sensitive data in the HTTP trace were supposed to be redacted, but
297 we failed to do so in HTTP/2 requests.
299 * "make clean" has been updated to remove leftover .depend/
300 directories, even when it is not told to use them to compute header
303 * Protocol v0 clients can get stuck parsing a malformed feature line.
305 * A few kinds of changes "git status" can show were not documented.
306 (merge d2a534c515 ja/doc-status-types-and-copies later to maint).
308 * The mergesort implementation used to sort linked list has been
310 (merge c90cfc225b rs/mergesort later to maint).
312 * An editor session launched during a Git operation (e.g. during 'git
313 commit') can leave the terminal in a funny state. The code path
314 has updated to save the terminal state before, and restore it
315 after, it spawns an editor.
316 (merge 3d411afabc cm/save-restore-terminal later to maint).
318 * "git cat-file --batch" with the "--batch-all-objects" option is
319 supposed to iterate over all the objects found in a repository, but
320 it used to translate these object names using the replace mechanism,
321 which defeats the point of enumerating all objects in the repository.
322 This has been corrected.
323 (merge bf972896d7 jk/cat-file-batch-all-wo-replace later to maint).
325 * Recent sparse-index work broke safety against attempts to add paths
326 with trailing slashes to the index, which has been corrected.
327 (merge c8ad9d04c6 rs/make-verify-path-really-verify-again later to maint).
329 * The "--color-lines" and "--color-by-age" options of "git blame"
330 have been missing, which are now documented.
331 (merge 8c32856133 bs/doc-blame-color-lines later to maint).
333 * The PATH used in CI job may be too wide and let incompatible dlls
334 to be grabbed, which can cause the build&test to fail. Tighten it.
335 (merge 7491ef6198 js/windows-ci-path-fix later to maint).
337 * Other code cleanup, docfix, build fix, etc.
338 (merge f188160be9 ab/bundle-remove-verbose-option later to maint).
339 (merge 8c6b4332b4 rs/close-pack-leakfix later to maint).
340 (merge 51b04c05b7 bs/difftool-msg-tweak later to maint).
341 (merge dd20e4a6db ab/make-compdb-fix later to maint).
342 (merge 6ffb990dc4 os/status-docfix later to maint).
343 (merge 100c2da2d3 rs/p3400-lose-tac later to maint).
344 (merge 76f3b69896 tb/aggregate-ignore-leading-whitespaces later to maint).
345 (merge 6e4fd8bfcd tz/doc-link-to-bundle-format-fix later to maint).