4 Backward compatibility notes
5 ----------------------------
7 * ".gitattributes", ".gitignore", and ".mailmap" files that are
8 symbolic links are ignored.
10 * "git apply --3way" used to first attempt a straight application,
11 and only fell back to the 3-way merge algorithm when the stright
12 application failed. Starting with this version, the command will
13 first try the 3-way merge algorithm and only when it fails (either
14 resulting with conflict or the base versions of blobs are missing),
15 falls back to the usual patch application.
21 UI, Workflows & Features
23 * It does not make sense to make ".gitattributes", ".gitignore" and
24 ".mailmap" symlinks, as they are supposed to be usable from the
25 object store (think: bare repositories where HEAD:.mailmap etc. are
26 used). When these files are symbolic links, we used to read the
27 contents of the files pointed by them by mistake, which has been
30 * "git stash show" learned to optionally show untracked part of the
33 * "git log --format='...'" learned "%(describe)" placeholder.
35 * "git repack" so far has been only capable of repacking everything
36 under the sun into a single pack (or split by size). A cleverer
37 strategy to reduce the cost of repacking a repository has been
40 * The http codepath learned to let the credential layer to cache the
41 password used to unlock a certificate that has successfully been
44 * "git commit --fixup=<commit>", which was to tweak the changes made
45 to the contents while keeping the original log message intact,
46 learned "--fixup=(amend|reword):<commit>", that can be used to
47 tweak both the message and the contents, and only the message,
50 * When accessing a server with a URL like https://user:pass@site/, we
51 did not to fall back to the basic authentication with the
52 credential material embedded in the URL after the "Negotiate"
53 authentication failed. Now we do.
55 * "git send-email" learned to honor the core.hooksPath configuration.
57 * "git format-patch -v<n>" learned to allow a reroll count that is
60 * "git commit" learned "--trailer <key>[=<value>]" option; together
61 with the interpret-trailers command, this will make it easier to
62 support custom trailers.
64 * "git clone --reject-shallow" option fails the clone as soon as we
65 notice that we are cloning from a shallow repository.
67 * A configuration variable has been added to force tips of certain
68 refs to be given a reachability bitmap.
70 * "gitweb" learned "e-mail privacy" feature to redact strings that
71 look like e-mail addresses on various pages.
73 * "git apply --3way" has always been "to fall back to 3-way merge
74 only when straight application fails". Swap the order of falling
75 back so that 3-way is always attempted first (only when the option
76 is given, of course) and then straight patch application is used as
77 a fallback when it fails.
79 * "git apply" now takes "--3way" and "--cached" at the same time, and
80 work and record results only in the index.
82 * The command line completion (in contrib/) has learned that
83 CHERRY_PICK_HEAD is a possible pseudo-ref.
85 * Userdiff patterns for "Scheme" has been added.
87 * "git log" learned "--diff-merges=<style>" option, with an
88 associated configuration variable log.diffMerges.
90 * "git log --format=..." placeholders learned %ah/%ch placeholders to
91 request the --date=human output.
93 * Replace GIT_CONFIG_NOSYSTEM mechanism to decline from reading the
94 system-wide configuration file with GIT_CONFIG_SYSTEM that lets
95 users specify from which file to read the system-wide configuration
96 (setting it to an empty file would essentially be the same as
97 setting NOSYSTEM), and introduce GIT_CONFIG_GLOBAL to override the
98 per-user configuration in $HOME/.gitconfig.
100 * "git add" and "git rm" learned not to touch those paths that are
101 outside of sparse checkout.
103 * "git rev-list" learns the "--filter=object:type=<type>" option,
104 which can be used to exclude objects of the given kind from the
105 packfile generated by pack-objects.
107 * The command line completion (in contrib/) for "git stash" has been
110 * "git subtree" updates.
113 Performance, Internal Implementation, Development Support etc.
115 * Rename detection rework continues.
117 * GIT_TEST_FAIL_PREREQS is a mechanism to skip test pieces with
118 prerequisites to catch broken tests that depend on the side effects
119 of optional pieces, but did not work at all when negative
120 prerequisites were involved.
121 (merge 27d578d904 jk/fail-prereq-testfix later to maint).
123 * "git diff-index" codepath has been taught to trust fsmonitor status
124 to reduce number of lstat() calls.
125 (merge 7e5aa13d2c nk/diff-index-fsmonitor later to maint).
127 * Reorganize Makefile to allow building git.o and other essential
128 objects without extra stuff needed only for testing.
130 * Preparatory API changes for parallel checkout.
132 * A simple IPC interface gets introduced to build services like
137 * SECURITY.md that is facing individual contributors and end users
138 has been introduced. Also a procedure to follow when preparing
139 embargoed releases has been spelled out.
140 (merge 09420b7648 js/security-md later to maint).
142 * Optimize "rev-list --use-bitmap-index --objects" corner case that
143 uses negative tags as the stopping points.
145 * CMake update for vsbuild.
147 * An on-disk reverse-index to map the in-pack location of an object
148 back to its object name across multiple packfiles is introduced.
150 * Generate [ec]tags under $(QUIET_GEN).
152 * Clean-up codepaths that implements "git send-email --validate"
153 option and improves the message from it.
155 * The last remnant of gettext-poison has been removed.
157 * The test framework has been taught to optionally turn the default
158 merge strategy to "ort" throughout the system where we use
159 three-way merges internally, like cherry-pick, rebase etc.,
160 primarily to enhance its test coverage (the strategy has been
161 available as an explicit "-s ort" choice).
163 * A bit of code clean-up and a lot of test clean-up around userdiff
166 * Handling of "promisor packs" that allows certain objects to be
167 missing and lazily retrievable has been optimized (a bit).
169 * When packet_write() fails, we gave an extra error message
170 unnecessarily, which has been corrected.
172 * The checkout machinery has been taught to perform the actual
173 write-out of the files in parallel when able.
175 * Show errno in the trace output in the error codepath that calls
178 * Effort to make the command line completion (in contrib/) safe with
181 * Tweak a few tests for "log --format=..." that show timestamps in
184 * The reflog expiry machinery has been taught to emit trace events.
190 * The fsmonitor interface read from its input without making sure
191 there is something to read from. This bug is new in 2.31
194 * The data structure used by fsmonitor interface was not properly
195 duplicated during an in-core merge, leading to use-after-free etc.
197 * "git bisect" reimplemented more in C during 2.30 timeframe did not
198 take an annotated tag as a good/bad endpoint well. This regression
201 * Fix macros that can silently inject unintended null-statements.
203 * CALLOC_ARRAY() macro replaces many uses of xcalloc().
205 * Update insn in Makefile comments to run fuzz-all target.
207 * Fix a corner case bug in "git mv" on case insensitive systems,
208 which was introduced in 2.29 timeframe.
210 * We had a code to diagnose and die cleanly when a required
211 clean/smudge filter is missing, but an assert before that
212 unnecessarily fired, hiding the end-user facing die() message.
213 (merge 6fab35f748 mt/cleanly-die-upon-missing-required-filter later to maint).
215 * Update C code that sets a few configuration variables when a remote
216 is configured so that it spells configuration variable names in the
218 (merge 0f1da600e6 ab/remote-write-config-in-camel-case later to maint).
220 * A new configuration variable has been introduced to allow choosing
221 which version of the generation number gets used in the
223 (merge 702110aac6 ds/commit-graph-generation-config later to maint).
225 * Perf test update to work better in secondary worktrees.
226 (merge 36e834abc1 jk/perf-in-worktrees later to maint).
228 * Updates to memory allocation code around the use of pcre2 library.
229 (merge c1760352e0 ab/grep-pcre2-allocfix later to maint).
231 * "git -c core.bare=false clone --bare ..." would have segfaulted,
232 which has been corrected.
233 (merge 75555676ad bc/clone-bare-with-conflicting-config later to maint).
235 * When "git checkout" removes a path that does not exist in the
236 commit it is checking out, it wasn't careful enough not to follow
237 symbolic links, which has been corrected.
238 (merge fab78a0c3d mt/checkout-remove-nofollow later to maint).
240 * A few option description strings started with capital letters,
241 which were corrected.
242 (merge 5ee90326dc cc/downcase-opt-help later to maint).
244 * Plug or annotate remaining leaks that trigger while running the
245 very basic set of tests.
246 (merge 68ffe095a2 ah/plugleaks later to maint).
248 * The hashwrite() API uses a buffering mechanism to avoid calling
249 write(2) too frequently. This logic has been refactored to be
250 easier to understand.
251 (merge ddaf1f62e3 ds/clarify-hashwrite later to maint).
253 * "git cherry-pick/revert" with or without "--[no-]edit" did not spawn
254 the editor as expected (e.g. "revert --no-edit" after a conflict
255 still asked to edit the message), which has been corrected.
256 (merge 39edfd5cbc en/sequencer-edit-upon-conflict-fix later to maint).
258 * "git daemon" has been tightened against systems that take backslash
259 as directory separator.
260 (merge 9a7f1ce8b7 rs/daemon-sanitize-dir-sep later to maint).
262 * A NULL-dereference bug has been corrected in an error codepath in
263 "git for-each-ref", "git branch --list" etc.
264 (merge c685450880 jk/ref-filter-segfault-fix later to maint).
266 * Streamline the codepath to fix the UTF-8 encoding issues in the
267 argv[] and the prefix on macOS.
268 (merge c7d0e61016 tb/precompose-prefix-simplify later to maint).
270 * The command-line completion script (in contrib/) had a couple of
271 references that would have given a warning under the "-u" (nounset)
273 (merge c5c0548d79 vs/completion-with-set-u later to maint).
275 * When "git pack-objects" makes a literal copy of a part of existing
276 packfile using the reachability bitmaps, its update to the progress
278 (merge 8e118e8490 jk/pack-objects-bitmap-progress-fix later to maint).
280 * The dependencies for config-list.h and command-list.h were broken
281 when the former was split out of the latter, which has been
283 (merge 56550ea718 sg/bugreport-fixes later to maint).
285 * "git push --quiet --set-upstream" was not quiet when setting the
286 upstream branch configuration, which has been corrected.
287 (merge f3cce896a8 ow/push-quiet-set-upstream later to maint).
289 * The prefetch task in "git maintenance" assumed that "git fetch"
290 from any remote would fetch all its local branches, which would
291 fetch too much if the user is interested in only a subset of
293 (merge 32f67888d8 ds/maintenance-prefetch-fix later to maint).
295 * Clarify that pathnames recorded in Git trees are most often (but
296 not necessarily) encoded in UTF-8.
297 (merge 9364bf465d ab/pathname-encoding-doc later to maint).
299 * "git --config-env var=val cmd" weren't accepted (only
300 --config-env=var=val was).
301 (merge c331551ccf ps/config-env-option-with-separate-value later to maint).
303 * When the reachability bitmap is in effect, the "do not lose
304 recently created objects and those that are reachable from them"
305 safety to protect us from races were disabled by mistake, which has
307 (merge 2ba582ba4c jk/prune-with-bitmap-fix later to maint).
309 * Cygwin pathname handling fix.
310 (merge bccc37fdc7 ad/cygwin-no-backslashes-in-paths later to maint).
312 * "git rebase --[no-]reschedule-failed-exec" did not work well with
313 its configuration variable, which has been corrected.
314 (merge e5b32bffd1 ab/rebase-no-reschedule-failed-exec later to maint).
316 * Portability fix for command line completion script (in contrib/).
317 (merge f2acf763e2 si/zsh-complete-comment-fix later to maint).
319 * "git repack -A -d" in a partial clone unnecessarily loosened
320 objects in promisor pack.
322 * Other code cleanup, docfix, build fix, etc.
323 (merge f451960708 dl/cat-file-doc-cleanup later to maint).
324 (merge 12604a8d0c sv/t9801-test-path-is-file-cleanup later to maint).
325 (merge ea7e63921c jr/doc-ignore-typofix later to maint).
326 (merge 23c781f173 ps/update-ref-trans-hook-doc later to maint).
327 (merge 42efa1231a jk/filter-branch-sha256 later to maint).
328 (merge 4c8e3dca6e tb/push-simple-uses-branch-merge-config later to maint).
329 (merge 6534d436a2 bs/asciidoctor-installation-hints later to maint).
330 (merge 47957485b3 ab/read-tree later to maint).
331 (merge 2be927f3d1 ab/diff-no-index-tests later to maint).
332 (merge 76593c09bb ab/detox-gettext-tests later to maint).
333 (merge 28e29ee38b jc/doc-format-patch-clarify later to maint).
334 (merge fc12b6fdde fm/user-manual-use-preface later to maint).
335 (merge dba94e3a85 cc/test-helper-bloom-usage-fix later to maint).
336 (merge 61a7660516 hn/reftable-tables-doc-update later to maint).
337 (merge 81ed96a9b2 jt/fetch-pack-request-fix later to maint).
338 (merge 151b6c2dd7 jc/doc-do-not-capitalize-clarification later to maint).
339 (merge 9160068ac6 js/access-nul-emulation-on-windows later to maint).
340 (merge 7a14acdbe6 po/diff-patch-doc later to maint).