7 UI, Workflows & Features
9 * "git help log" has been enhanced by sharing more material from the
10 documentation for the underlying "git rev-list" command.
12 * "git for-each-ref --format=<>" learned %(contents:size).
14 * "git merge" learned to selectively omit " into <branch>" at the end
15 of the title of default merge message with merge.suppressDest
18 * The component to respond to "git fetch" request is made more
19 configurable to selectively allow or reject object filtering
20 specification used for partial cloning.
22 * Stop when "sendmail.*" configuration variables are defined, which
23 could be a mistaken attempt to define "sendemail.*" variables.
25 * The existing backends for "git mergetool" based on variants of vim
26 have been refactored and then support for "nvim" has been added.
28 * "git bisect" learns the "--first-parent" option to find the first
29 breakage along the first-parent chain.
31 * "git log --first-parent -p" showed patches only for single-parent
32 commits on the first-parent chain; the "--first-parent" option has
33 been made to imply "-m". Use "--no-diff-merges" to restore the
34 previous behaviour to omit patches for merge commits.
36 * The commit labels used to explain each side of conflicted hunks
37 placed by the sequencer machinery have been made more readable by
40 * The "--batch-size" option of "git multi-pack-index repack" command
41 is now used to specify that very small packfiles are collected into
42 one until the total size roughly exceeds it.
44 * The recent addition of SHA-256 support is marked as experimental in
47 * "git fetch" learned --no-write-fetch-head option to avoid writing
50 * Command line completion (in contrib/) usually omits redundant,
51 deprecated and/or dangerous options from its output; it learned to
52 optionally include all of them.
54 * The output from the "diff" family of the commands had abbreviated
55 object names of blobs involved in the patch, but its length was not
56 affected by the --abbrev option. Now it is.
59 Performance, Internal Implementation, Development Support etc.
61 * The changed-path Bloom filter is improved using ideas from an
62 independent implementation.
64 * Updates to the changed-paths bloom filter.
66 * The test framework has been updated so that most tests will run
67 with predictable (artificial) timestamps.
69 * Preliminary clean-up of the refs API in preparation for adding a
70 new refs backend "reftable".
72 * Dev support to limit the use of test_must_fail to only git commands.
74 * While packing many objects in a repository with a promissor remote,
75 lazily fetching missing objects from the promissor remote one by
76 one may be inefficient---the code now attempts to fetch all the
77 missing objects in batch (obviously this won't work for a lazy
78 clone that lazily fetches tree objects as you cannot even enumerate
79 what blobs are missing until you learn which trees are missing).
81 * The pretend-object mechanism checks if the given object already
82 exists in the object store before deciding to keep the data
83 in-core, but the check would have triggered lazy fetching of such
84 an object from a promissor remote.
86 * The argv_array API is useful for not just managing argv but any
87 "vector" (NULL-terminated array) of strings, and has seen adoption
88 to a certain degree. It has been renamed to "strvec" to reduce the
91 * The final leg of SHA-256 transition plus doc updates. Note that
92 there is no inter-operability between SHA-1 and SHA-256
95 * CMake support to build with MSVC for Windows bypassing the Makefile.
97 * A new helper function has_object() has been introduced to make it
98 easier to mark object existence checks that do and don't want to
99 trigger lazy fetches, and a few such checks are converted using it.
101 * A no-op replacement function implemented as a C preprocessor macro
102 does not perform as good a job as one implemented as a "static
103 inline" function in catching errors in parameters; replace the
104 former with the latter in <git-compat-util.h> header.
106 * Test framework update.
107 (merge d572f52a64 es/test-cmp-typocatcher later to maint).
109 * Updates to "git merge" tests, in preparation for a new merge
112 * midx and commit-graph files now use the byte defined in their file
113 format specification for identifying the hash function used for
116 * The FETCH_HEAD is now always read from the filesystem regardless of
117 the ref backend in use, as its format is much richer than the
118 normal refs, and written directly by "git fetch" as a plain file..
120 * A handful of places in in-tree code still relied on being able to
121 execute the git subcommands, especially built-ins, in "git-foo"
122 form, which have been corrected.
128 * "git clone --separate-git-dir=$elsewhere" used to stomp on the
129 contents of the existing directory $elsewhere, which has been
130 taught to fail when $elsewhere is not an empty directory.
131 (merge dfaa209a79 bw/fail-cloning-into-non-empty later to maint).
133 * With the base fix to 2.27 regresion, any new extensions in a v0
134 repository would still be silently honored, which is not quite
135 right. Instead, complain and die loudly.
136 (merge ec91ffca04 jk/reject-newer-extensions-in-v0 later to maint).
138 * Fetching from a lazily cloned repository resulted at the server
139 side in attempts to lazy fetch objects that the client side has,
140 many of which will not be available from the third-party anyway.
141 (merge 77aa0941ce jt/avoid-lazy-fetching-upon-have-check later to maint).
143 * Fix to an ancient bug caused by an over-eager attempt for
145 (merge a98f7fb366 rs/add-index-entry-optim-fix later to maint).
147 * Pushing a ref whose name contains non-ASCII character with the
148 "--force-with-lease" option did not work over smart HTTP protocol,
149 which has been corrected.
150 (merge cd85b447bf bc/push-cas-cquoted-refname later to maint).
152 * "git mv src dst", when src is an unmerged path, errored out
153 correctly but with an incorrect error message to claim that src is
154 not tracked, which has been clarified.
155 (merge 9b906af657 ct/mv-unmerged-path-error later to maint).
157 * Fix to a regression introduced during 2.27 cycle.
158 (merge cada7308ad en/fill-directory-exponential later to maint).
160 * Command line completion (in contrib/) update.
161 (merge 688b87c81b mp/complete-show-color-moved later to maint).
163 * All "mergy" operations that internally use the merge-recursive
164 machinery should honor the merge.renormalize configuration, but
167 * Doc cleanup around "worktree".
168 (merge dc9c144be5 es/worktree-doc-cleanups later to maint).
170 * The "git blame --first-parent" option was not documented, but now
172 (merge 11bc12ae1e rp/blame-first-parent-doc later to maint).
174 * The logic to find the ref transaction hook script attempted to
175 cache the path to the found hook without realizing that it needed
176 to keep a copied value, as the API it used returned a transitory
177 buffer space. This has been corrected.
178 (merge 09b2aa30c9 ps/ref-transaction-hook later to maint).
180 * Recent versions of "git diff-files" shows a diff between the index
181 and the working tree for "intent-to-add" paths as a "new file"
182 patch; "git apply --cached" should be able to take "git diff-files"
183 and should act as an equivalent to "git add" for the path, but the
184 command failed to do so for such a path.
185 (merge 4c025c667e rp/apply-cached-with-i-t-a later to maint).
187 * "git diff [<tree-ish>] $path" for a $path that is marked with i-t-a
188 bit was not showing the mode bits from the working tree.
189 (merge cb0dd22b82 rp/ita-diff-modefix later to maint).
191 * Ring buffer with size 4 used for bin-hex translation resulted in a
192 wrong object name in the sequencer's todo output, which has been
194 (merge 5da69c0dac ak/sequencer-fix-find-uniq-abbrev later to maint).
196 * When given more than one target line ranges, "git blame -La,b
197 -Lc,d" was over-eager to coalesce groups of original lines and
198 showed incorrect results, which has been corrected.
199 (merge c2ebaa27d6 jk/blame-coalesce-fix later to maint).
201 * The regexp to identify the function boundary for FORTRAN programs
203 (merge 75c3b6b2e8 pb/userdiff-fortran-update later to maint).
205 * A few end-user facing messages have been updated to be
206 hash-algorithm agnostic.
207 (merge 4279000d3e jc/object-names-are-not-sha-1 later to maint).
209 * "unlink" emulation on MinGW has been optimized.
210 (merge 680e0b4524 jh/mingw-unlink later to maint).
212 * The purpose of "git init --separate-git-dir" is to initialize a
213 new project with the repository separate from the working tree,
214 or, in the case of an existing project, to move the repository
215 (the .git/ directory) out of the working tree. It does not make
216 sense to use --separate-git-dir with a bare repository for which
217 there is no working tree, so disallow its use with bare
219 (merge ccf236a23a es/init-no-separate-git-dir-in-bare later to maint).
221 * "ls-files -o" mishandled the top-level directory of another git
222 working tree that hangs in the current git working tree.
223 (merge ab282aa548 en/dir-nonbare-embedded later to maint).
225 * Fix some incorrect UNLEAK() annotations.
226 (merge 3e19816dc0 jk/unleak-fixes later to maint).
228 * Use more buffered I/O where we used to call many small write(2)s.
229 (merge a698d67b08 rs/more-buffered-io later to maint).
231 * The patch-id computation did not ignore the "incomplete last line"
232 marker like whitespaces.
233 (merge 82a62015a7 rs/patch-id-with-incomplete-line later to maint).
235 * Updates into a lazy/partial clone with a submodule did not work
236 well with transfer.fsckobjects set.
238 * The parser for "git for-each-ref --format=..." was too loose when
239 parsing the "%(trailers...)" atom, and forgot that "trailers" and
240 "trailers:<modifiers>" are the only two allowed forms, which has
242 (merge 2c22e102f8 hv/ref-filter-trailers-atom-parsing-fix later to maint).
244 * Long ago, we decided to use 3 threads by default when running the
245 index-pack task in parallel, which has been adjusted a bit upwards.
246 (merge fbff95b67f jk/index-pack-w-more-threads later to maint).
248 * "git restore/checkout --no-overlay" with wildcarded pathspec
249 mistakenly removed matching paths in subdirectories, which has been
251 (merge bfda204ade rs/checkout-no-overlay-pathspec-fix later to maint).
253 * The description of --cached/--index options in "git apply --help"
255 (merge d064702be3 rp/apply-cached-doc later to maint).
257 * Feeding "$ZERO_OID" to "git log --ignore-missing --stdin", and
258 running "git log --ignore-missing $ZERO_OID" fell back to start
259 digging from HEAD; it has been corrected to become a no-op, like
260 "git log --tags=no-tag-matches-this-pattern" does.
261 (merge 04a0e98515 jk/rev-input-given-fix later to maint).
263 * Various callers of run_command API has been modernized.
264 (merge afbdba391e jc/run-command-use-embedded-args later to maint).
266 * Other code cleanup, docfix, build fix, etc.
267 (merge 84544f2ea3 sk/typofixes later to maint).
268 (merge b17f411ab5 ar/help-guides-doc later to maint).
269 (merge 98c6871fad rs/grep-simpler-parse-object-or-die-call later to maint).
270 (merge 861c4ce141 en/typofixes later to maint).
271 (merge 60e47f6773 sg/ci-git-path-fix-with-pyenv later to maint).
272 (merge e2bfa50ac3 jb/doc-packfile-name later to maint).
273 (merge 918d8ff780 es/worktree-cleanup later to maint).
274 (merge dc156bc31f ma/t1450-quotefix later to maint).
275 (merge 56e743426b en/merge-recursive-comment-fixes later to maint).
276 (merge 7d23ff818f rs/bisect-oid-to-hex-fix later to maint).
277 (merge de20baf2c9 ny/notes-doc-sample-update later to maint).
278 (merge f649aaaf82 so/rev-parser-errormessage-fix later to maint).
279 (merge 6103d58b7f bc/sha-256-cvs-svn-updates later to maint).
280 (merge ac900fddb7 ma/stop-progress-null-fix later to maint).
281 (merge e767963ab6 rs/upload-pack-sigchain-fix later to maint).
282 (merge a831908599 rs/preserve-merges-unused-code-removal later to maint).
283 (merge 6dfefe70a9 jb/commit-graph-doc-fix later to maint).
284 (merge 847b37271e pb/set-url-docfix later to maint).
285 (merge 748f733d54 mt/checkout-entry-dead-code-removal later to maint).
286 (merge ce820cbd58 dl/subtree-docs later to maint).
287 (merge 55fe225dde jk/leakfix later to maint).