7 UI, Workflows & Features
9 * "git diff" compares the index and the working tree. For paths
10 added with intent-to-add bit, the command shows the full contents
11 of them as added, but the paths themselves were not marked as new
12 files. They are now shown as new by default.
14 "git apply" learned the "--intent-to-add" option so that an
15 otherwise working-tree-only application of a patch will add new
16 paths to the index marked with the "intent-to-add" bit.
18 * "git grep" learned the "--column" option that gives not just the
19 line number but the column number of the hit.
21 * The "-l" option in "git branch -l" is an unfortunate short-hand for
22 "--create-reflog", but many users, both old and new, somehow expect
23 it to be something else, perhaps "--list". This step warns when "-l"
24 is used as a short-hand for "--create-reflog" and warns about the
25 future repurposing of the it when it is used.
27 * The userdiff pattern for .php has been updated.
29 * The content-transfer-encoding of the message "git send-email" sends
30 out by default was 8bit, which can cause trouble when there is an
31 overlong line to bust RFC 5322/2822 limit. A new option 'auto' to
32 automatically switch to quoted-printable when there is such a line
33 in the payload has been introduced and is made the default.
35 * "git checkout" and "git worktree add" learned to honor
36 checkout.defaultRemote when auto-vivifying a local branch out of a
37 remote tracking branch in a repository with multiple remotes that
38 have tracking branches that share the same names.
39 (merge 8d7b558bae ab/checkout-default-remote later to maint).
41 * "git grep" learned the "--only-matching" option.
43 * "git rebase --rebase-merges" mode now handles octopus merges as
46 * Add a server-side knob to skip commits in exponential/fibbonacci
47 stride in an attempt to cover wider swath of history with a smaller
48 number of iterations, potentially accepting a larger packfile
49 transfer, instead of going back one commit a time during common
50 ancestor discovery during the "git fetch" transaction.
51 (merge 42cc7485a2 jt/fetch-negotiator-skipping later to maint).
53 * A new configuration variable core.usereplacerefs has been added,
54 primarily to help server installations that want to ignore the
55 replace mechanism altogether.
57 * Teach "git tag -s" etc. a few configuration variables (gpg.format
58 that can be set to "openpgp" or "x509", and gpg.<format>.program
59 that is used to specify what program to use to deal with the format)
60 to allow x.509 certs with CMS via "gpgsm" to be used instead of
63 * Many more strings are prepared for l10n.
65 * "git p4 submit" learns to ask its own pre-submit hook if it should
66 continue with submitting.
68 * The test performed at the receiving end of "git push" to prevent
69 bad objects from entering repository can be customized via
70 receive.fsck.* configuration variables; we now have gained a
71 counterpart to do the same on the "git fetch" side, with
72 fetch.fsck.* configuration variables.
74 * "git pull --rebase=interactive" learned "i" as a short-hand for
77 * "git instaweb" has been adjusted to run better with newer Apache on
80 * "git range-diff" is a reimplementation of "git tbdiff" that lets us
81 compare individual patches in two iterations of a topic.
83 * The sideband code learned to optionally paint selected keywords at
84 the beginning of incoming lines on the receiving end.
87 Performance, Internal Implementation, Development Support etc.
89 * The bulk of "git submodule foreach" has been rewritten in C.
91 * The in-core "commit" object had an all-purpose "void *util" field,
92 which was tricky to use especially in library-ish part of the
93 code. All of the existing uses of the field has been migrated to a
94 more dedicated "commit-slab" mechanism and the field is eliminated.
96 * A less often used command "git show-index" has been modernized.
97 (merge fb3010c31f jk/show-index later to maint).
99 * The conversion to pass "the_repository" and then "a_repository"
100 throughout the object access API continues.
102 * Continuing with the idea to programatically enumerate various
103 pieces of data required for command line completion, teach the
104 codebase to report the list of configuration variables
105 subcommands care about to help complete them.
107 * Separate "rebase -p" codepath out of "rebase -i" implementation to
108 slim down the latter and make it easier to manage.
110 * Make refspec parsing codepath more robust.
112 * Some flaky tests have been fixed.
114 * Continuing with the idea to programmatically enumerate various
115 pieces of data required for command line completion, the codebase
116 has been taught to enumerate options prefixed with "--no-" to
119 * Build and test procedure for netrc credential helper (in contrib/)
122 * The conversion to pass "the_repository" and then "a_repository"
123 throughout the object access API continues.
125 * Remove unused function definitions and declarations from ewah
128 * Code preparation to make "git p4" closer to be usable with Python 3.
130 * Tighten the API to make it harder to misuse in-tree .gitmodules
131 file, even though it shares the same syntax with configuration
132 files, to read random configuration items from it.
134 * "git fast-import" has been updated to avoid attempting to create
135 delta against a zero-byte-long string, which is pointless.
137 * The codebase has been updated to compile cleanly with -pedantic
139 (merge 2b647a05d7 bb/pedantic later to maint).
141 * The character display width table has been updated to match the
142 latest Unicode standard.
143 (merge 570951eea2 bb/unicode-11-width later to maint).
145 * test-lint now looks for broken use of "VAR=VAL shell_func" in test
148 * Conversion from uchar[40] to struct object_id continues.
150 * Recent "security fix" to pay attention to contents of ".gitmodules"
151 while accepting "git push" was a bit overly strict than necessary,
152 which has been adjusted.
154 * "git fsck" learns to make sure the optional commit-graph file is in
157 * "git diff --color-moved" feature has further been tweaked.
159 * Code restructuring and a small fix to transport protocol v2 during
162 * Parsing of -L[<N>][,[<M>]] parameters "git blame" and "git log"
163 take has been tweaked.
165 * lookup_commit_reference() and friends have been updated to find
166 in-core object for a specific in-core repository instance.
168 * Various glitches in the heuristics of merge-recursive strategy have
169 been documented in new tests.
171 * "git fetch" learned a new option "--negotiation-tip" to limit the
172 set of commits it tells the other end as "have", to reduce wasted
173 bandwidth and cycles, which would be helpful when the receiving
174 repository has a lot of refs that have little to do with the
175 history at the remote it is fetching from.
177 * For a large tree, the index needs to hold many cache entries
178 allocated on heap. These cache entries are now allocated out of a
179 dedicated memory pool to amortize malloc(3) overhead.
181 * Tests to cover various conflicting cases have been added for
184 * Tests to cover conflict cases that involve submodules have been
185 added for merge-recursive.
187 * Look for broken "&&" chains that are hidden in subshell, many of
188 which have been found and corrected.
190 * The singleton commit-graph in-core instance is made per in-core
193 * "make DEVELOPER=1 DEVOPTS=pedantic" allows developers to compile
194 with -pedantic option, which may catch more problematic program
195 constructs and potential bugs.
197 * Preparatory code to later add json output for telemetry data has
200 * Update the way we use Coccinelle to find out-of-style code that
201 need to be modernised.
203 * It is too easy to misuse system API functions such as strcat();
204 these selected functions are now forbidden in this codebase and
205 will cause a compilation failure.
207 * Add a script (in contrib/) to help users of VSCode work better with
210 * The Travis CI scripts were taught to ship back the test data from
212 (merge aea8879a6a sg/travis-retrieve-trash-upon-failure later to maint).
214 * The parse-options machinery learned to refrain from enclosing
215 placeholder string inside a "<bra" and "ket>" pair automatically
216 without PARSE_OPT_LITERAL_ARGHELP. Existing help text for option
217 arguments that are not formatted correctly have been identified and
219 (merge 5f0df44cd7 rs/parse-opt-lithelp later to maint).
221 * Noiseword "extern" has been removed from function decls in the
224 * A few atoms like %(objecttype) and %(objectsize) in the format
225 specifier of "for-each-ref --format=<format>" can be filled without
226 getting the full contents of the object, but just with the object
227 header. These cases have been optimized by calling
228 oid_object_info() API (instead of reading and inspecting the data).
230 * The end result of documentation update has been made to be
231 inspected more easily to help developers.
233 * The API to iterate over all objects learned to optionally list
234 objects in the order they appear in packfiles, which helps locality
235 of access if the caller accesses these objects while as objects are
238 * Improve built-in facility to catch broken &&-chain in the tests.
240 * The more library-ish parts of the codebase learned to work on the
241 in-core index-state instance that is passed in by their callers,
242 instead of always working on the singleton "the_index" instance.
244 * A test prerequisite defined by various test scripts with slightly
245 different semantics has been consolidated into a single copy and
246 made into a lazily defined one.
247 (merge 6ec633059a wc/make-funnynames-shared-lazy-prereq later to maint).
249 * After a partial clone, repeated fetches from promisor remote would
250 have accumulated many packfiles marked with .promisor bit without
251 getting them coalesced into fewer packfiles, hurting performance.
252 "git repack" now learned to repack them.
258 * "git remote update" can take both a single remote nickname and a
259 nickname for remote groups, and the completion script (in contrib/)
260 has been taught about it.
261 (merge 9cd4382ad5 ls/complete-remote-update-names later to maint).
263 * "git fetch --shallow-since=<cutoff>" that specifies the cut-off
264 point that is newer than the existing history used to end up
265 grabbing the entire history. Such a request now errors out.
266 (merge e34de73c56 nd/reject-empty-shallow-request later to maint).
268 * Fix for 2.17-era regression around `core.safecrlf`.
269 (merge 6cb09125be as/safecrlf-quiet-fix later to maint).
271 * The recent addition of "partial clone" experimental feature kicked
272 in when it shouldn't, namely, when there is no partial-clone filter
273 defined even if extensions.partialclone is set.
274 (merge cac1137dc4 jh/partial-clone later to maint).
276 * "git send-pack --signed" (hence "git push --signed" over the http
277 transport) did not read user ident from the config mechanism to
278 determine whom to sign the push certificate as, which has been
280 (merge d067d98887 ms/send-pack-honor-config later to maint).
282 * "git fetch-pack --all" used to unnecessarily fail upon seeing an
283 annotated tag that points at an object other than a commit.
284 (merge c12c9df527 jk/fetch-all-peeled-fix later to maint).
286 * When user edits the patch in "git add -p" and the user's editor is
287 set to strip trailing whitespaces indiscriminately, an empty line
288 that is unchanged in the patch would become completely empty
289 (instead of a line with a sole SP on it). The code introduced in
290 Git 2.17 timeframe failed to parse such a patch, but now it learned
291 to notice the situation and cope with it.
292 (merge f4d35a6b49 pw/add-p-recount later to maint).
294 * The code to try seeing if a fetch is necessary in a submodule
295 during a fetch with --recurse-submodules got confused when the path
296 to the submodule was changed in the range of commits in the
297 superproject, sometimes showing "(null)". This has been corrected.
299 * "git submodule" did not correctly adjust core.worktree setting that
300 indicates whether/where a submodule repository has its associated
301 working tree across various state transitions, which has been
303 (merge 984cd77ddb sb/submodule-core-worktree later to maint).
305 * Bugfix for "rebase -i" corner case regression.
306 (merge a9279c6785 pw/rebase-i-keep-reword-after-conflict later to maint).
308 * Recently added "--base" option to "git format-patch" command did
309 not correctly generate prereq patch ids.
310 (merge 15b76c1fb3 xy/format-patch-prereq-patch-id-fix later to maint).
312 * POSIX portability fix in Makefile to fix a glitch introduced a few
314 (merge 6600054e9b dj/runtime-prefix later to maint).
316 * "git filter-branch" when used with the "--state-branch" option
317 still attempted to rewrite the commits whose filtered result is
318 known from the previous attempt (which is recorded on the state
319 branch); the command has been corrected not to waste cycles doing
321 (merge 709cfe848a mb/filter-branch-optim later to maint).
323 * Clarify that setting core.ignoreCase to deviate from reality would
324 not turn a case-incapable filesystem into a case-capable one.
325 (merge 48294b512a ms/core-icase-doc later to maint).
327 * "fsck.skipList" did not prevent a blob object listed there from
328 being inspected for is contents (e.g. we recently started to
329 inspect the contents of ".gitmodules" for certain malicious
330 patterns), which has been corrected.
331 (merge fb16287719 rj/submodule-fsck-skip later to maint).
333 * "git checkout --recurse-submodules another-branch" did not report
334 in which submodule it failed to update the working tree, which
335 resulted in an unhelpful error message.
336 (merge ba95d4e4bd sb/submodule-move-head-error-msg later to maint).
338 * "git rebase" behaved slightly differently depending on which one of
339 the three backends gets used; this has been documented and an
340 effort to make them more uniform has begun.
341 (merge b00bf1c9a8 en/rebase-consistency later to maint).
343 * The "--ignore-case" option of "git for-each-ref" (and its friends)
344 did not work correctly, which has been fixed.
345 (merge e674eb2528 jk/for-each-ref-icase later to maint).
347 * "git fetch" failed to correctly validate the set of objects it
348 received when making a shallow history deeper, which has been
350 (merge cf1e7c0770 jt/connectivity-check-after-unshallow later to maint).
352 * Partial clone support of "git clone" has been updated to correctly
353 validate the objects it receives from the other side. The server
354 side has been corrected to send objects that are directly
355 requested, even if they may match the filtering criteria (e.g. when
356 doing a "lazy blob" partial clone).
357 (merge a7e67c11b8 jt/partial-clone-fsck-connectivity later to maint).
359 * Handling of an empty range by "git cherry-pick" was inconsistent
360 depending on how the range ended up to be empty, which has been
362 (merge c5e358d073 jk/empty-pick-fix later to maint).
364 * "git reset --merge" (hence "git merge ---abort") and "git reset --hard"
365 had trouble working correctly in a sparsely checked out working
366 tree after a conflict, which has been corrected.
367 (merge b33fdfc34c mk/merge-in-sparse-checkout later to maint).
369 * Correct a broken use of "VAR=VAL shell_func" in a test.
370 (merge 650161a277 jc/t3404-one-shot-export-fix later to maint).
372 * "git rev-parse ':/substring'" did not consider the history leading
373 only to HEAD when looking for a commit with the given substring,
374 when the HEAD is detached. This has been fixed.
375 (merge 6b3351e799 wc/find-commit-with-pattern-on-detached-head later to maint).
377 * Build doc update for Windows.
378 (merge ede8d89bb1 nd/command-list later to maint).
380 * core.commentchar is now honored when preparing the list of commits
381 to replay in "rebase -i".
383 * "git pull --rebase" on a corrupt HEAD caused a segfault. In
384 general we substitute an empty tree object when running the in-core
385 equivalent of the diff-index command, and the codepath has been
386 corrected to do so as well to fix this issue.
387 (merge 3506dc9445 jk/has-uncommitted-changes-fix later to maint).
389 * httpd tests saw occasional breakage due to the way its access log
390 gets inspected by the tests, which has been updated to make them
392 (merge e8b3b2e275 sg/httpd-test-unflake later to maint).
394 * Tests to cover more D/F conflict cases have been added for
397 * "git gc --auto" opens file descriptors for the packfiles before
398 spawning "git repack/prune", which would upset Windows that does
399 not want a process to work on a file that is open by another
400 process. The issue has been worked around.
401 (merge 12e73a3ce4 kg/gc-auto-windows-workaround later to maint).
403 * The recursive merge strategy did not properly ensure there was no
404 change between HEAD and the index before performing its operation,
405 which has been corrected.
406 (merge 55f39cf755 en/dirty-merge-fixes later to maint).
408 * "git rebase" started exporting GIT_DIR environment variable and
409 exposing it to hook scripts when part of it got rewritten in C.
410 Instead of matching the old scripted Porcelains' behaviour,
411 compensate by also exporting GIT_WORK_TREE environment as well to
412 lessen the damage. This can harm existing hooks that want to
413 operate on different repository, but the current behaviour is
414 already broken for them anyway.
415 (merge ab5e67d751 bc/sequencer-export-work-tree-as-well later to maint).
417 * "git send-email" when using in a batched mode that limits the
418 number of messages sent in a single SMTP session lost the contents
419 of the variable used to choose between tls/ssl, unable to send the
420 second and later batches, which has been fixed.
421 (merge 636f3d7ac5 jm/send-email-tls-auth-on-batch later to maint).
423 * The lazy clone support had a few places where missing but promised
424 objects were not correctly tolerated, which have been fixed.
426 * One of the "diff --color-moved" mode "dimmed_zebra" that was named
427 in an unusual way has been deprecated and replaced by
429 (merge e3f2f5f9cd es/diff-color-moved-fix later to maint).
431 * The wire-protocol v2 relies on the client to send "ref prefixes" to
432 limit the bandwidth spent on the initial ref advertisement. "git
433 clone" when learned to speak v2 forgot to do so, which has been
435 (merge 402c47d939 bw/clone-ref-prefixes later to maint).
437 * "git diff --histogram" had a bad memory usage pattern, which has
438 been rearranged to reduce the peak usage.
439 (merge 79cb2ebb92 sb/histogram-less-memory later to maint).
441 * Code clean-up to use size_t/ssize_t when they are the right type.
442 (merge 7726d360b5 jk/size-t later to maint).
444 * The wire-protocol v2 relies on the client to send "ref prefixes" to
445 limit the bandwidth spent on the initial ref advertisement. "git
446 fetch $remote branch:branch" that asks tags that point into the
447 history leading to the "branch" automatically followed sent to
448 narrow prefix and broke the tag following, which has been fixed.
449 (merge 2b554353a5 jt/tag-following-with-proto-v2-fix later to maint).
451 * When the sparse checkout feature is in use, "git cherry-pick" and
452 other mergy operations lost the skip_worktree bit when a path that
453 is excluded from checkout requires content level merge, which is
454 resolved as the same as the HEAD version, without materializing the
455 merge result in the working tree, which made the path appear as
456 deleted. This has been corrected by preserving the skip_worktree
457 bit (and not materializing the file in the working tree).
458 (merge 2b75fb601c en/merge-recursive-skip-fix later to maint).
460 * The "author-script" file "git rebase -i" creates got broken when
461 we started to move the command away from shell script, which is
463 (merge 5522bbac20 es/rebase-i-author-script-fix later to maint).
465 * The automatic tree-matching in "git merge -s subtree" was broken 5
466 years ago and nobody has noticed since then, which is now fixed.
467 (merge 2ec4150713 jk/merge-subtree-heuristics later to maint).
469 * "git fetch $there refs/heads/s" ought to fetch the tip of the
470 branch 's', but when "refs/heads/refs/heads/s", i.e. a branch whose
471 name is "refs/heads/s" exists at the same time, fetched that one
472 instead by mistake. This has been corrected to honor the usual
473 disambiguation rules for abbreviated refnames.
474 (merge 60650a48c0 jt/refspec-dwim-precedence-fix later to maint).
476 * Futureproofing a helper function that can easily be misused.
477 (merge 65bb21e77e es/want-color-fd-defensive later to maint).
479 * The http-backend (used for smart-http transport) used to slurp the
480 whole input until EOF, without paying attention to CONTENT_LENGTH
481 that is supplied in the environment and instead expecting the Web
482 server to close the input stream. This has been fixed.
483 (merge eebfe40962 mk/http-backend-content-length later to maint).
485 * "git merge --abort" etc. did not clean things up properly when
486 there were conflicted entries in the index in certain order that
487 are involved in D/F conflicts. This has been corrected.
488 (merge ad3762042a en/abort-df-conflict-fixes later to maint).
490 * "git diff --indent-heuristic" had a bad corner case performance.
491 (merge 301ef85401 sb/indent-heuristic-optim later to maint).
493 * The "--exec" option to "git rebase --rebase-merges" placed the exec
494 commands at wrong places, which has been corrected.
496 * "git verify-tag" and "git verify-commit" have been taught to use
497 the exit status of underlying "gpg --verify" to signal bad or
498 untrusted signature they found.
499 (merge 4e5dc9ca17 jc/gpg-status later to maint).
501 * "git mergetool" stopped and gave an extra prompt to continue after
502 the last path has been handled, which did not make much sense.
503 (merge d651a54b8a ng/mergetool-lose-final-prompt later to maint).
505 * Among the three codepaths we use O_APPEND to open a file for
506 appending, one used for writing GIT_TRACE output requires O_APPEND
507 implementation that behaves sensibly when multiple processes are
508 writing to the same file. POSIX emulation used in the Windows port
509 has been updated to improve in this area.
510 (merge d641097589 js/mingw-o-append later to maint).
512 * "git pull --rebase -v" in a repository with a submodule barfed as
513 an intermediate process did not understand what "-v(erbose)" flag
514 meant, which has been fixed.
515 (merge e84c3cf3dc sb/pull-rebase-submodule later to maint).
517 * Recent update to "git config" broke updating variable in a
518 subsection, which has been corrected.
519 (merge bff7df7a87 sb/config-write-fix later to maint).
521 * When "git rebase -i" is told to squash two or more commits into
522 one, it labeled the log message for each commit with its number.
523 It correctly called the first one "1st commit", but the next one
524 was "commit #1", which was off-by-one. This has been corrected.
525 (merge dd2e36ebac pw/rebase-i-squash-number-fix later to maint).
527 * "git rebase -i", when a 'merge <branch>' insn in its todo list
528 fails, segfaulted, which has been (minimally) corrected.
529 (merge bc9238bb09 pw/rebase-i-merge-segv-fix later to maint).
531 * "git cherry-pick --quit" failed to remove CHERRY_PICK_HEAD even
532 though we won't be in a cherry-pick session after it returns, which
534 (merge 3e7dd99208 nd/cherry-pick-quit-fix later to maint).
536 * Code cleanup, docfix, build fix, etc.
537 (merge aee9be2ebe sg/update-ref-stdin-cleanup later to maint).
538 (merge 037714252f jc/clean-after-sanity-tests later to maint).
539 (merge 5b26c3c941 en/merge-recursive-cleanup later to maint).
540 (merge 0dcbc0392e bw/config-refer-to-gitsubmodules-doc later to maint).
541 (merge bb4d000e87 bw/protocol-v2 later to maint).
542 (merge 928f0ab4ba vs/typofixes later to maint).
543 (merge d7f590be84 en/rebase-i-microfixes later to maint).
544 (merge 81d395cc85 js/rebase-recreate-merge later to maint).
545 (merge 51d1863168 tz/exclude-doc-smallfixes later to maint).
546 (merge a9aa3c0927 ds/commit-graph later to maint).
547 (merge 5cf8e06474 js/enhanced-version-info later to maint).
548 (merge 6aaded5509 tb/config-default later to maint).
549 (merge 022d2ac1f3 sb/blame-color later to maint).
550 (merge 5a06a20e0c bp/test-drop-caches-for-windows later to maint).
551 (merge dd61cc1c2e jk/ui-color-always-to-auto later to maint).
552 (merge 1e83b9bfdd sb/trailers-docfix later to maint).
553 (merge ab29f1b329 sg/fast-import-dump-refs-on-checkpoint-fix later to maint).
554 (merge 6a8ad880f0 jn/subtree-test-fixes later to maint).
555 (merge ffbd51cc60 nd/pack-objects-threading-doc later to maint).
556 (merge e9dac7be60 es/mw-to-git-chain-fix later to maint).
557 (merge fe583c6c7a rs/remote-mv-leakfix later to maint).
558 (merge 69885ab015 en/t3031-title-fix later to maint).
559 (merge 8578037bed nd/config-blame-sort later to maint).
560 (merge 8ad169c4ba hn/config-in-code-comment later to maint).
561 (merge b7446fcfdf ar/t4150-am-scissors-test-fix later to maint).
562 (merge a8132410ee js/typofixes later to maint).
563 (merge 388d0ff6e5 en/update-index-doc later to maint).
564 (merge e05aa688dd jc/update-index-doc later to maint).
565 (merge 10c600172c sg/t5310-empty-input-fix later to maint).
566 (merge 5641eb9465 jh/partial-clone-doc later to maint).
567 (merge 2711b1ad5e ab/submodule-relative-url-tests later to maint).