Git 2.24.3

This merges up the security fix from v2.17.5.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
diff --git a/.gitignore b/.gitignore
index 521d8f4..89b3b79 100644
--- a/.gitignore
+++ b/.gitignore
@@ -216,6 +216,7 @@
 /tags
 /TAGS
 /cscope*
+*.hcc
 *.obj
 *.lib
 *.res
@@ -231,7 +232,6 @@
 *.ipdb
 *.dll
 .vs/
-*.manifest
 Debug/
 Release/
 /UpgradeLog*.htm
diff --git a/.mailmap b/.mailmap
index 9a5ff04..14fa041 100644
--- a/.mailmap
+++ b/.mailmap
@@ -18,6 +18,7 @@
 Alexey Shumkin <alex.crezoff@gmail.com> <Alex.Crezoff@gmail.com>
 Anders Kaseorg <andersk@MIT.EDU> <andersk@ksplice.com>
 Anders Kaseorg <andersk@MIT.EDU> <andersk@mit.edu>
+Andrey Mazo <ahippo@yandex.com> Mazo, Andrey <amazo@checkvideo.com>
 Aneesh Kumar K.V <aneesh.kumar@gmail.com>
 Amos Waterland <apw@debian.org> <apw@rossby.metr.ou.edu>
 Amos Waterland <apw@debian.org> <apw@us.ibm.com>
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..fc4645d
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,93 @@
+# Git Code of Conduct
+
+This code of conduct outlines our expectations for participants within
+the Git community, as well as steps for reporting unacceptable behavior.
+We are committed to providing a welcoming and inspiring community for
+all and expect our code of conduct to be honored. Anyone who violates
+this code of conduct may be banned from the community.
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as
+contributors and maintainers pledge to make participation in our project and
+our community a harassment-free experience for everyone, regardless of age,
+body size, disability, ethnicity, sex characteristics, gender identity and
+expression, level of experience, education, socio-economic status,
+nationality, personal appearance, race, religion, or sexual identity and
+orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment
+include:
+
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery and unwelcome sexual attention or
+  advances
+* Trolling, insulting/derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or electronic
+  address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a
+  professional setting
+
+## Our Responsibilities
+
+Project maintainers are responsible for clarifying the standards of acceptable
+behavior and are expected to take appropriate and fair corrective action in
+response to any instances of unacceptable behavior.
+
+Project maintainers have the right and responsibility to remove, edit, or
+reject comments, commits, code, wiki edits, issues, and other contributions
+that are not aligned to this Code of Conduct, or to ban temporarily or
+permanently any contributor for other behaviors that they deem inappropriate,
+threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies within all project spaces, and it also applies
+when an individual is representing the project or its community in public
+spaces. Examples of representing a project or community include using an
+official project e-mail address, posting via an official social media account,
+or acting as an appointed representative at an online or offline event.
+Representation of a project may be further defined and clarified by project
+maintainers.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported by contacting the project team at git@sfconservancy.org. All
+complaints will be reviewed and investigated and will result in a response
+that is deemed necessary and appropriate to the circumstances. The project
+team is obligated to maintain confidentiality with regard to the reporter of
+an incident. Further details of specific enforcement policies may be posted
+separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct in good
+faith may face temporary or permanent repercussions as determined by other
+members of the project's leadership.
+
+The project leadership team can be contacted by email as a whole at
+git@sfconservancy.org, or individually:
+
+  - Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+  - Christian Couder <christian.couder@gmail.com>
+  - Jeff King <peff@peff.net>
+  - Junio C Hamano <gitster@pobox.com>
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage],
+version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
+
+[homepage]: https://www.contributor-covenant.org
+
+For answers to common questions about this code of conduct, see
+https://www.contributor-covenant.org/faq
diff --git a/Documentation/Makefile b/Documentation/Makefile
index 76f2ecf..06d85ad 100644
--- a/Documentation/Makefile
+++ b/Documentation/Makefile
@@ -123,7 +123,8 @@
 ASCIIDOC_DOCBOOK = docbook
 ASCIIDOC_CONF = -f asciidoc.conf
 ASCIIDOC_COMMON = $(ASCIIDOC) $(ASCIIDOC_EXTRA) $(ASCIIDOC_CONF) \
-		-agit_version=$(GIT_VERSION)
+		-amanversion=$(GIT_VERSION) \
+		-amanmanual='Git Manual' -amansource='Git'
 TXT_TO_HTML = $(ASCIIDOC_COMMON) -b $(ASCIIDOC_HTML)
 TXT_TO_XML = $(ASCIIDOC_COMMON) -b $(ASCIIDOC_DOCBOOK)
 MANPAGE_XSL = manpage-normal.xsl
@@ -197,11 +198,13 @@
 ASCIIDOC = asciidoctor
 ASCIIDOC_CONF =
 ASCIIDOC_HTML = xhtml5
-ASCIIDOC_DOCBOOK = docbook45
+ASCIIDOC_DOCBOOK = docbook5
 ASCIIDOC_EXTRA += -acompat-mode -atabsize=8
 ASCIIDOC_EXTRA += -I. -rasciidoctor-extensions
 ASCIIDOC_EXTRA += -alitdd='&\#x2d;&\#x2d;'
 DBLATEX_COMMON =
+XMLTO_EXTRA += --skip-validation
+XMLTO_EXTRA += -x manpage.xsl
 endif
 
 SHELL_PATH ?= $(SHELL)
diff --git a/Documentation/MyFirstContribution.txt b/Documentation/MyFirstContribution.txt
index f867037..5e9b808 100644
--- a/Documentation/MyFirstContribution.txt
+++ b/Documentation/MyFirstContribution.txt
@@ -97,8 +97,8 @@
 ----
 
 We'll also need to add the declaration of psuh; open up `builtin.h`, find the
-declaration for `cmd_push`, and add a new line for `psuh` immediately before it,
-in order to keep the declarations sorted:
+declaration for `cmd_pull`, and add a new line for `psuh` immediately before it,
+in order to keep the declarations alphabetically sorted:
 
 ----
 int cmd_psuh(int argc, const char **argv, const char *prefix);
@@ -123,7 +123,7 @@
 }
 ----
 
-Let's try to build it.  Open `Makefile`, find where `builtin/push.o` is added
+Let's try to build it.  Open `Makefile`, find where `builtin/pull.o` is added
 to `BUILTIN_OBJS`, and add `builtin/psuh.o` in the same way next to it in
 alphabetical order. Once you've done so, move to the top-level directory and
 build simply with `make`. Also add the `DEVELOPER=1` variable to turn on
@@ -149,7 +149,7 @@
 with the command name, a function pointer to the command implementation, and a
 setup option flag. For now, let's keep mimicking `push`. Find the line where
 `cmd_push` is registered, copy it, and modify it for `cmd_psuh`, placing the new
-line in alphabetical order.
+line in alphabetical order (immediately before `cmd_pull`).
 
 The options are documented in `builtin.h` under "Adding a new built-in." Since
 we hope to print some data about the user's current workspace context later,
@@ -167,7 +167,7 @@
 
 `git status` reveals modified `Makefile`, `builtin.h`, and `git.c` as well as
 untracked `builtin/psuh.c` and `git-psuh`. First, let's take care of the binary,
-which should be ignored. Open `.gitignore` in your editor, find `/git-push`, and
+which should be ignored. Open `.gitignore` in your editor, find `/git-pull`, and
 add an entry for your new command in alphabetical order:
 
 ----
diff --git a/Documentation/RelNotes/2.24.0.txt b/Documentation/RelNotes/2.24.0.txt
new file mode 100644
index 0000000..bde1541
--- /dev/null
+++ b/Documentation/RelNotes/2.24.0.txt
@@ -0,0 +1,398 @@
+Git 2.24 Release Notes
+======================
+
+Updates since v2.23
+-------------------
+
+Backward compatibility note
+
+ * "filter-branch" is showing its age and alternatives are available.
+   From this release, we started to discourage its use and hint
+   people about filter-repo.
+
+UI, Workflows & Features
+
+ * We now have an active interim maintainer for the Git-Gui part of
+   the system.  Praise and thank Pratyush Yadav for volunteering.
+
+ * The command line parser learned "--end-of-options" notation; the
+   standard convention for scripters to have hardcoded set of options
+   first on the command line, and force the command to treat end-user
+   input as non-options, has been to use "--" as the delimiter, but
+   that would not work for commands that use "--" as a delimiter
+   between revs and pathspec.
+
+ * A mechanism to affect the default setting for a (related) group of
+   configuration variables is introduced.
+
+ * "git fetch" learned "--set-upstream" option to help those who first
+   clone from their private fork they intend to push to, add the true
+   upstream via "git remote add" and then "git fetch" from it.
+
+ * Device-tree files learned their own userdiff patterns.
+   (merge 3c81760bc6 sb/userdiff-dts later to maint).
+
+ * "git rebase --rebase-merges" learned to drive different merge
+   strategies and pass strategy specific options to them.
+
+ * A new "pre-merge-commit" hook has been introduced.
+
+ * Command line completion updates for "git -c var.name=val" have been
+   added.
+
+ * The lazy clone machinery has been taught that there can be more
+   than one promisor remote and consult them in order when downloading
+   missing objects on demand.
+
+ * The list-objects-filter API (used to create a sparse/lazy clone)
+   learned to take a combined filter specification.
+
+ * The documentation and tests for "git format-patch" have been
+   cleaned up.
+
+ * On Windows, the root level of UNC share is now allowed to be used
+   just like any other directory.
+
+ * The command line completion support (in contrib/) learned about the
+   "--skip" option of "git revert" and "git cherry-pick".
+
+ * "git rebase --keep-base <upstream>" tries to find the original base
+   of the topic being rebased and rebase on top of that same base,
+   which is useful when running the "git rebase -i" (and its limited
+   variant "git rebase -x").
+
+   The command also has learned to fast-forward in more cases where it
+   can instead of replaying to recreate identical commits.
+
+ * A configuration variable tells "git fetch" to write the commit
+   graph after finishing.
+
+ * "git add -i" has been taught to show the total number of hunks and
+   the hunks that has been processed so far when showing prompts.
+
+ * "git fetch --jobs=<n>" allowed <n> parallel jobs when fetching
+   submodules, but this did not apply to "git fetch --multiple" that
+   fetches from multiple remote repositories.  It now does.
+
+ * The installation instruction for zsh completion script (in
+   contrib/) has been a bit improved.
+
+
+Performance, Internal Implementation, Development Support etc.
+
+ * The code to write commit-graph over given commit object names has
+   been made a bit more robust.
+
+ * The first line of verbose output from each test piece now carries
+   the test name and number to help scanning with eyeballs.
+
+ * Further clean-up of the initialization code.
+
+ * xmalloc() used to have a mechanism to ditch memory and address
+   space resources as the last resort upon seeing an allocation
+   failure from the underlying malloc(), which made the code complex
+   and thread-unsafe with dubious benefit, as major memory resource
+   users already do limit their uses with various other mechanisms.
+   It has been simplified away.
+
+ * Unnecessary full-tree diff in "git log -L" machinery has been
+   optimized away.
+
+ * The http transport lacked some optimization the native transports
+   learned to avoid unnecessary ref advertisement, which has been
+   corrected.
+
+ * Preparation for SHA-256 upgrade continues in the test department.
+   (merge 0c37c41d13 bc/hash-independent-tests-part-5 later to maint).
+
+ * The memory ownership model of the "git fast-import" got
+   straightened out.
+
+ * Output from trace2 subsystem is formatted more prettily now.
+
+ * The internal code originally invented for ".gitignore" processing
+   got reshuffled and renamed to make it less tied to "excluding" and
+   stress more that it is about "matching", as it has been reused for
+   things like sparse checkout specification that want to check if a
+   path is "included".
+
+ * "git stash" learned to write refreshed index back to disk.
+
+ * Coccinelle checks are done on more source files than before now.
+
+ * The cache-tree code has been taught to be less aggressive in
+   attempting to see if a tree object it computed already exists in
+   the repository.
+
+ * The code to parse and use the commit-graph file has been made more
+   robust against corrupted input.
+
+ * The hg-to-git script (in contrib/) has been updated to work with
+   Python 3.
+
+ * Update the way build artifacts in t/helper/ directory are ignored.
+
+ * Preparation for SHA-256 upgrade continues.
+
+ * "git log --graph" for an octopus merge is sometimes colored
+   incorrectly, which is demonstrated and documented but not yet
+   fixed.
+
+ * The trace2 output, when sending them to files in a designated
+   directory, can populate the directory with too many files; a
+   mechanism is introduced to set the maximum number of files and
+   discard further logs when the maximum is reached.
+
+ * We have adopted a Code-of-conduct document.
+   (merge 3f9ef874a7 jk/coc later to maint).
+
+
+Fixes since v2.23
+-----------------
+
+ * "git grep --recurse-submodules" that looks at the working tree
+   files looked at the contents in the index in submodules, instead of
+   files in the working tree.
+   (merge 6a289d45c0 mt/grep-submodules-working-tree later to maint).
+
+ * Codepaths to walk tree objects have been audited for integer
+   overflows and hardened.
+   (merge 5aa02f9868 jk/tree-walk-overflow later to maint).
+
+ * "git pack-refs" can lose refs that are created while running, which
+   is getting corrected.
+   (merge a613d4f817 sc/pack-refs-deletion-racefix later to maint).
+
+ * "git checkout" and "git restore" to re-populate the index from a
+   tree-ish (typically HEAD) did not work correctly for a path that
+   was removed and then added again with the intent-to-add bit, when
+   the corresponding working tree file was empty.  This has been
+   corrected.
+
+ * Compilation fix.
+   (merge 70597e8386 rs/nedalloc-fixlets later to maint).
+
+ * "git gui" learned to call the clean-up procedure before exiting.
+   (merge 0d88f3d2c5 py/git-gui-do-quit later to maint).
+
+ * We promoted the "indent heuristics" that decides where to split
+   diff hunks from experimental to the default a few years ago, but
+   some stale documentation still marked it as experimental, which has
+   been corrected.
+   (merge 64e5e1fba1 sg/diff-indent-heuristic-non-experimental later to maint).
+
+ * Fix a mismerge that happened in 2.22 timeframe.
+   (merge acb7da05ac en/checkout-mismerge-fix later to maint).
+
+ * "git archive" recorded incorrect length in extended pax header in
+   some corner cases, which has been corrected.
+   (merge 71d41ff651 rs/pax-extended-header-length-fix later to maint).
+
+ * On-demand object fetching in lazy clone incorrectly tried to fetch
+   commits from submodule projects, while still working in the
+   superproject, which has been corrected.
+   (merge a63694f523 jt/diff-lazy-fetch-submodule-fix later to maint).
+
+ * Prepare get_short_oid() codepath to be thread-safe.
+   (merge 7cfcb16b0e rs/sort-oid-array-thread-safe later to maint).
+
+ * "for-each-ref" and friends that show refs did not protect themselves
+   against ancient tags that did not record tagger names when asked to
+   show "%(taggername)", which have been corrected.
+   (merge 8b3f33ef11 mp/for-each-ref-missing-name-or-email later to maint).
+
+ * The "git am" based backend of "git rebase" ignored the result of
+   updating ".gitattributes" done in one step when replaying
+   subsequent steps.
+   (merge 2c65d90f75 bc/reread-attributes-during-rebase later to maint).
+
+ * Tell cURL library to use the same malloc() implementation, with the
+   xmalloc() wrapper, as the rest of the system, for consistency.
+   (merge 93b980e58f cb/curl-use-xmalloc later to maint).
+
+ * Build fix to adjust .gitignore to unignore a path that we started to track.
+   (merge aac6ff7b5b js/visual-studio later to maint).
+
+ * A few implementation fixes in the notes API.
+   (merge 60fe477a0b mh/notes-duplicate-entries later to maint).
+
+ * Fix an earlier regression to "git push --all" which should have
+   been forbidden when the target remote repository is set to be a
+   mirror.
+   (merge 8e4c8af058 tg/push-all-in-mirror-forbidden later to maint).
+
+ * Fix an earlier regression in the test suite, which mistakenly
+   stopped running HTTPD tests.
+   (merge 3960290675 sg/git-test-boolean later to maint).
+
+ * "git rebase --autostash <upstream> <branch>", when <branch> is
+   different from the current branch, incorrectly moved the tip of the
+   current branch, which has been corrected.
+   (merge bf1e28e0ad bw/rebase-autostash-keep-current-branch later to maint).
+
+ * Update support for Asciidoctor documentation toolchain.
+   (merge 83b0b8953e ma/asciidoctor-refmiscinfo later to maint).
+
+ * Start using DocBook 5 (instead of DocBook 4.5) as Asciidoctor 2.0
+   no longer works with the older one.
+   (merge f6461b82b9 bc/doc-use-docbook-5 later to maint).
+
+ * The markup used in user-manual has been updated to work better with
+   asciidoctor.
+   (merge c4d2f6143a ma/user-manual-markup-update later to maint).
+
+ * Make sure the grep machinery does not abort when seeing a payload
+   that is not UTF-8 even when JIT is not in use with PCRE1.
+   (merge ad7c543e3b cb/skip-utf8-check-with-pcre1 later to maint).
+
+ * The name of the blob object that stores the filter specification
+   for sparse cloning/fetching was interpreted in a wrong place in the
+   code, causing Git to abort.
+
+ * "git log --decorate-refs-exclude=<pattern>" was incorrectly
+   overruled when the "--simplify-by-decoration" option is used, which
+   has been corrected.
+   (merge 0cc7380d88 rs/simplify-by-deco-with-deco-refs-exclude later to maint).
+
+ * The "upload-pack" (the counterpart of "git fetch") needs to disable
+   commit-graph when responding to a shallow clone/fetch request, but
+   the way this was done made Git panic, which has been corrected.
+
+ * The object traversal machinery has been optimized not to load tree
+   objects when we are only interested in commit history.
+   (merge 72ed80c784 jk/list-objects-optim-wo-trees later to maint).
+
+ * The object name parser for "Nth parent" syntax has been made more
+   robust against integer overflows.
+   (merge 59fa5f5a25 rs/nth-parent-parse later to maint).
+
+ * The code used in following tags in "git fetch" has been optimized.
+   (merge b7e2d8bca5 ms/fetch-follow-tag-optim later to maint).
+
+ * Regression fix for progress output.
+   (merge 2bb74b53a4 sg/progress-fix later to maint).
+
+ * A bug in merge-recursive code that triggers when a branch with a
+   symbolic link is merged with a branch that replaces it with a
+   directory has been fixed.
+   (merge 83e3ad3b12 jt/merge-recursive-symlink-is-not-a-dir-in-way later to maint).
+
+ * The rename detection logic sorts a list of rename source candidates
+   by similarity to pick the best candidate, which means that a tie
+   between sources with the same similarity is broken by the original
+   location in the original candidate list (which is sorted by path).
+   Force the sorting by similarity done with a stable sort, which is
+   not promised by system supplied qsort(3), to ensure consistent
+   results across platforms.
+   (merge 2049b8dc65 js/diff-rename-force-stable-sort later to maint).
+
+ * The code to skip "UTF" and "UTF-" prefix, when computing an advice
+   message, did not work correctly when the prefix was "UTF", which
+   has been fixed.
+   (merge b181676ce9 rs/convert-fix-utf-without-dash later to maint).
+
+ * The author names taken from SVN repositories may have extra leading
+   or trailing whitespaces, which are now munged away.
+   (merge 4ddd4bddb1 tk/git-svn-trim-author-name later to maint).
+
+ * "git rebase -i" showed a wrong HEAD while "reword" open the editor.
+   (merge b0a3186140 pw/rebase-i-show-HEAD-to-reword later to maint).
+
+ * A few simplification and bugfixes to PCRE interface.
+   (merge c581e4a749 ab/pcre-jit-fixes later to maint).
+
+ * PCRE fixes.
+   (merge ff61681b46 cb/pcre1-cleanup later to maint).
+
+ * "git range-diff" segfaulted when diff.noprefix configuration was
+   used, as it blindly expected the patch it internally generates to
+   have the standard a/ and b/ prefixes.  The command now forces the
+   internal patch to be built without any prefix, not to be affected
+   by any end-user configuration.
+   (merge 937b76ed49 js/range-diff-noprefix later to maint).
+
+ * "git stash apply" in a subdirectory of a secondary worktree failed
+   to access the worktree correctly, which has been corrected.
+   (merge dfd557c978 js/stash-apply-in-secondary-worktree later to maint).
+
+ * The merge-recursive machinery is one of the most complex parts of
+   the system that accumulated cruft over time.  This large series
+   cleans up the implementation quite a bit.
+   (merge b657047719 en/merge-recursive-cleanup later to maint).
+
+ * Pretty-printed command line formatter (used in e.g. reporting the
+   command being run by the tracing API) had a bug that lost an
+   argument that is an empty string, which has been corrected.
+   (merge ce2d7ed2fd gs/sq-quote-buf-pretty later to maint).
+
+ * "git range-diff" failed to handle mode-only change, which has been
+   corrected.
+   (merge 2b6a9b13ca tg/range-diff-output-update later to maint).
+
+ * Dev support update.
+   (merge 4f3c1dc5d6 dl/allow-running-cocci-verbosely later to maint).
+
+ * "git format-patch -o <outdir>" did an equivalent of "mkdir <outdir>"
+   not "mkdir -p <outdir>", which was corrected.
+
+ * "git stash save" lost local changes to submodules, which has been
+   corrected.
+   (merge 556895d0c8 jj/stash-reset-only-toplevel later to maint).
+
+ * The atomic push over smart HTTP transport did not work, which has
+   been corrected.
+   (merge 6f1194246a bc/smart-http-atomic-push later to maint).
+
+ * Other code cleanup, docfix, build fix, etc.
+   (merge d1387d3895 en/fast-import-merge-doc later to maint).
+   (merge 1c24a54ea4 bm/repository-layout-typofix later to maint).
+   (merge 415b770b88 ds/midx-expire-repack later to maint).
+   (merge 19800bdc3f nd/diff-parseopt later to maint).
+   (merge 58166c2e9d tg/t0021-racefix later to maint).
+   (merge 7027f508c7 dl/compat-cleanup later to maint).
+   (merge e770fbfeff jc/test-cleanup later to maint).
+   (merge 1fd881d404 rs/trace2-dst-warning later to maint).
+   (merge 7e92756751 mh/http-urlmatch-cleanup later to maint).
+   (merge 9784f97321 mh/release-commit-memory-fix later to maint).
+   (merge 60d198d022 tb/banned-vsprintf-namefix later to maint).
+   (merge 80e3658647 rs/help-unknown-ref-does-not-return later to maint).
+   (merge 0a8bc7068f dt/remote-helper-doc-re-lock-option later to maint).
+   (merge 27fd1e4ea7 en/merge-options-ff-and-friends later to maint).
+   (merge 502c386ff9 sg/clean-nested-repo-with-ignored later to maint).
+   (merge 26e3d1cbea am/mailmap-andrey-mazo later to maint).
+   (merge 47b27c96fa ss/get-time-cleanup later to maint).
+   (merge dd2e50a84e jk/commit-graph-cleanup later to maint).
+   (merge 4fd39c76e6 cs/pretty-formats-doc-typofix later to maint).
+   (merge 40e747e89d dl/submodule-set-branch later to maint).
+   (merge 689a146c91 rs/commit-graph-use-list-count later to maint).
+   (merge 0eb7c37a8a js/doc-patch-text later to maint).
+   (merge 4b3aa170d1 rs/nth-switch-code-simplification later to maint).
+   (merge 0d4304c124 ah/doc-submodule-ignore-submodules later to maint).
+   (merge af78249463 cc/svn-fe-py-shebang later to maint).
+   (merge 7bd97d6dff rs/alias-use-copy-array later to maint).
+   (merge c46ebc2496 sg/travis-help-debug later to maint).
+   (merge 24c681794f ps/my-first-contribution-alphasort later to maint).
+   (merge 75b2c15435 cb/do-not-use-test-cmp-with-a later to maint).
+   (merge cda0d497e3 bw/submodule-helper-usage-fix later to maint).
+   (merge fe0ed5d5e9 am/visual-studio-config-fix later to maint).
+   (merge 2e09c01232 sg/name-rev-cutoff-underflow-fix later to maint).
+   (merge ddb3c856f3 as/shallow-slab-use-fix later to maint).
+   (merge 71f4960b91 js/mingw-spawn-with-spaces-in-path later to maint).
+   (merge 53d687bf5f ah/cleanups later to maint).
+   (merge f537485fa5 rs/test-remove-useless-debugging-cat later to maint).
+   (merge 11a3d3aadd dl/rev-list-doc-cleanup later to maint).
+   (merge d928a8388a am/t0028-utf16-tests later to maint).
+   (merge b05b40930e dl/t0000-skip-test-test later to maint).
+   (merge 03d3b1297c js/xdiffi-comment-updates later to maint).
+   (merge 57d8f4b4c7 js/doc-stash-save later to maint).
+   (merge 8c1cfd58e3 ta/t1308-typofix later to maint).
+   (merge fa364ad790 bb/utf8-wcwidth-cleanup later to maint).
+   (merge 68b69211b2 bb/compat-util-comment-fix later to maint).
+   (merge 5cc6a4be11 rs/http-push-simplify later to maint).
+   (merge a81e42d235 rs/column-use-utf8-strnwidth later to maint).
+   (merge 062a309d36 rs/remote-curl-use-argv-array later to maint).
+   (merge 3b3c79f6c9 nr/diff-highlight-indent-fix later to maint).
+   (merge 3444ec2eb2 wb/fsmonitor-bitmap-fix later to maint).
+   (merge 10da030ab7 cb/pcre2-chartables-leakfix later to maint).
+   (merge 60e6569a12 js/mingw-needs-hiding-fix later to maint).
+   (merge 52bd3e4657 rl/gitweb-blame-prev-fix later to maint).
diff --git a/Documentation/RelNotes/2.24.1.txt b/Documentation/RelNotes/2.24.1.txt
new file mode 100644
index 0000000..1810485
--- /dev/null
+++ b/Documentation/RelNotes/2.24.1.txt
@@ -0,0 +1,8 @@
+Git v2.24.1 Release Notes
+=========================
+
+This release merges up the fixes that appear in v2.14.6, v2.15.4,
+v2.17.3, v2.20.2 and in v2.21.1, addressing the security issues
+CVE-2019-1348, CVE-2019-1349, CVE-2019-1350, CVE-2019-1351,
+CVE-2019-1352, CVE-2019-1353, CVE-2019-1354, CVE-2019-1387, and
+CVE-2019-19604; see the release notes for those versions for details.
diff --git a/Documentation/RelNotes/2.24.2.txt b/Documentation/RelNotes/2.24.2.txt
new file mode 100644
index 0000000..0049f65
--- /dev/null
+++ b/Documentation/RelNotes/2.24.2.txt
@@ -0,0 +1,5 @@
+Git v2.24.2 Release Notes
+=========================
+
+This release merges the security fix that appears in v2.17.4; see
+the release notes for that version for details.
diff --git a/Documentation/RelNotes/2.24.3.txt b/Documentation/RelNotes/2.24.3.txt
new file mode 100644
index 0000000..5302e0f
--- /dev/null
+++ b/Documentation/RelNotes/2.24.3.txt
@@ -0,0 +1,5 @@
+Git v2.24.3 Release Notes
+=========================
+
+This release merges the security fix that appears in v2.17.5; see
+the release notes for that version for details.
diff --git a/Documentation/RelNotes/2.7.1.txt b/Documentation/RelNotes/2.7.1.txt
index 6553d69..6323fea 100644
--- a/Documentation/RelNotes/2.7.1.txt
+++ b/Documentation/RelNotes/2.7.1.txt
@@ -10,7 +10,7 @@
    setting GIT_WORK_TREE environment themselves.
 
  * The "exclude_list" structure has the usual "alloc, nr" pair of
-   fields to be used by ALLOC_GROW(), but clear_exclude_list() forgot
+   fields to be used by ALLOC_GROW(), but clear_pattern_list() forgot
    to reset 'alloc' to 0 when it cleared 'nr' to discard the managed
    array.
 
diff --git a/Documentation/RelNotes/2.8.0.txt b/Documentation/RelNotes/2.8.0.txt
index 2507971..5fbe1b8 100644
--- a/Documentation/RelNotes/2.8.0.txt
+++ b/Documentation/RelNotes/2.8.0.txt
@@ -270,7 +270,7 @@
    setting GIT_WORK_TREE environment themselves.
 
  * The "exclude_list" structure has the usual "alloc, nr" pair of
-   fields to be used by ALLOC_GROW(), but clear_exclude_list() forgot
+   fields to be used by ALLOC_GROW(), but clear_pattern_list() forgot
    to reset 'alloc' to 0 when it cleared 'nr' to discard the managed
    array.
 
diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches
index 6d589e1..1a60cc1 100644
--- a/Documentation/SubmittingPatches
+++ b/Documentation/SubmittingPatches
@@ -372,9 +372,9 @@
 Some parts of the system have dedicated maintainers with their own
 repositories.
 
-- `git-gui/` comes from git-gui project, maintained by Pat Thoyts:
+- `git-gui/` comes from git-gui project, maintained by Pratyush Yadav:
 
-	git://repo.or.cz/git-gui.git
+	https://github.com/prati0100/git-gui.git
 
 - `gitk-git/` comes from Paul Mackerras's gitk project:
 
diff --git a/Documentation/asciidoc.conf b/Documentation/asciidoc.conf
index 2c16c53..8fc4b67 100644
--- a/Documentation/asciidoc.conf
+++ b/Documentation/asciidoc.conf
@@ -78,9 +78,9 @@
 <refmeta>
 <refentrytitle>{mantitle}</refentrytitle>
 <manvolnum>{manvolnum}</manvolnum>
-<refmiscinfo class="source">Git</refmiscinfo>
-<refmiscinfo class="version">{git_version}</refmiscinfo>
-<refmiscinfo class="manual">Git Manual</refmiscinfo>
+<refmiscinfo class="source">{mansource}</refmiscinfo>
+<refmiscinfo class="version">{manversion}</refmiscinfo>
+<refmiscinfo class="manual">{manmanual}</refmiscinfo>
 </refmeta>
 <refnamediv>
   <refname>{manname}</refname>
diff --git a/Documentation/asciidoctor-extensions.rb b/Documentation/asciidoctor-extensions.rb
index 0089e0c..d906a00 100644
--- a/Documentation/asciidoctor-extensions.rb
+++ b/Documentation/asciidoctor-extensions.rb
@@ -9,8 +9,11 @@
       named :chrome
 
       def process(parent, target, attrs)
-        if parent.document.basebackend? 'html'
-          prefix = parent.document.attr('git-relative-html-prefix')
+        prefix = parent.document.attr('git-relative-html-prefix')
+        if parent.document.doctype == 'book'
+          "<ulink url=\"#{prefix}#{target}.html\">" \
+          "#{target}(#{attrs[1]})</ulink>"
+        elsif parent.document.basebackend? 'html'
           %(<a href="#{prefix}#{target}.html">#{target}(#{attrs[1]})</a>)
         elsif parent.document.basebackend? 'docbook'
           "<citerefentry>\n" \
@@ -20,9 +23,26 @@
         end
       end
     end
+
+    class DocumentPostProcessor < Asciidoctor::Extensions::Postprocessor
+      def process document, output
+        if document.basebackend? 'docbook'
+          mansource = document.attributes['mansource']
+          manversion = document.attributes['manversion']
+          manmanual = document.attributes['manmanual']
+          new_tags = "" \
+            "<refmiscinfo class=\"source\">#{mansource}</refmiscinfo>\n" \
+            "<refmiscinfo class=\"version\">#{manversion}</refmiscinfo>\n" \
+            "<refmiscinfo class=\"manual\">#{manmanual}</refmiscinfo>\n"
+          output = output.sub(/<\/refmeta>/, new_tags + "</refmeta>")
+        end
+        output
+      end
+    end
   end
 end
 
 Asciidoctor::Extensions.register do
   inline_macro Git::Documentation::LinkGitProcessor, :linkgit
+  postprocessor Git::Documentation::DocumentPostProcessor
 end
diff --git a/Documentation/config.txt b/Documentation/config.txt
index e3f5bc3..f50f1b4 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -178,47 +178,49 @@
 Example
 ~~~~~~~
 
-	# Core variables
-	[core]
-		; Don't trust file modes
-		filemode = false
+----
+# Core variables
+[core]
+	; Don't trust file modes
+	filemode = false
 
-	# Our diff algorithm
-	[diff]
-		external = /usr/local/bin/diff-wrapper
-		renames = true
+# Our diff algorithm
+[diff]
+	external = /usr/local/bin/diff-wrapper
+	renames = true
 
-	[branch "devel"]
-		remote = origin
-		merge = refs/heads/devel
+[branch "devel"]
+	remote = origin
+	merge = refs/heads/devel
 
-	# Proxy settings
-	[core]
-		gitProxy="ssh" for "kernel.org"
-		gitProxy=default-proxy ; for the rest
+# Proxy settings
+[core]
+	gitProxy="ssh" for "kernel.org"
+	gitProxy=default-proxy ; for the rest
 
-	[include]
-		path = /path/to/foo.inc ; include by absolute path
-		path = foo.inc ; find "foo.inc" relative to the current file
-		path = ~/foo.inc ; find "foo.inc" in your `$HOME` directory
+[include]
+	path = /path/to/foo.inc ; include by absolute path
+	path = foo.inc ; find "foo.inc" relative to the current file
+	path = ~/foo.inc ; find "foo.inc" in your `$HOME` directory
 
-	; include if $GIT_DIR is /path/to/foo/.git
-	[includeIf "gitdir:/path/to/foo/.git"]
-		path = /path/to/foo.inc
+; include if $GIT_DIR is /path/to/foo/.git
+[includeIf "gitdir:/path/to/foo/.git"]
+	path = /path/to/foo.inc
 
-	; include for all repositories inside /path/to/group
-	[includeIf "gitdir:/path/to/group/"]
-		path = /path/to/foo.inc
+; include for all repositories inside /path/to/group
+[includeIf "gitdir:/path/to/group/"]
+	path = /path/to/foo.inc
 
-	; include for all repositories inside $HOME/to/group
-	[includeIf "gitdir:~/to/group/"]
-		path = /path/to/foo.inc
+; include for all repositories inside $HOME/to/group
+[includeIf "gitdir:~/to/group/"]
+	path = /path/to/foo.inc
 
-	; relative paths are always relative to the including
-	; file (if the condition is true); their location is not
-	; affected by the condition
-	[includeIf "gitdir:/path/to/group/"]
-		path = foo.inc
+; relative paths are always relative to the including
+; file (if the condition is true); their location is not
+; affected by the condition
+[includeIf "gitdir:/path/to/group/"]
+	path = foo.inc
+----
 
 	; include only if we are in a worktree where foo-branch is
 	; currently checked out
@@ -345,6 +347,8 @@
 
 include::config/fastimport.txt[]
 
+include::config/feature.txt[]
+
 include::config/fetch.txt[]
 
 include::config/format.txt[]
diff --git a/Documentation/config/core.txt b/Documentation/config/core.txt
index 75538d2..852d2ba 100644
--- a/Documentation/config/core.txt
+++ b/Documentation/config/core.txt
@@ -86,7 +86,9 @@
 	it will automatically be removed, if set to `false`. Before
 	setting it to `true`, you should check that mtime is working
 	properly on your system.
-	See linkgit:git-update-index[1]. `keep` by default.
+	See linkgit:git-update-index[1]. `keep` by default, unless
+	`feature.manyFiles` is enabled which sets this setting to
+	`true` by default.
 
 core.checkStat::
 	When missing or is set to `default`, many fields in the stat
@@ -577,7 +579,7 @@
 
 core.commitGraph::
 	If true, then git will read the commit-graph file (if it exists)
-	to parse the graph structure of commits. Defaults to false. See
+	to parse the graph structure of commits. Defaults to true. See
 	linkgit:git-commit-graph[1] for more information.
 
 core.useReplaceRefs::
diff --git a/Documentation/config/diff.txt b/Documentation/config/diff.txt
index 5afb5a2..ff09f1c 100644
--- a/Documentation/config/diff.txt
+++ b/Documentation/config/diff.txt
@@ -189,7 +189,7 @@
 include::../mergetools-diff.txt[]
 
 diff.indentHeuristic::
-	Set this option to `true` to enable experimental heuristics
+	Set this option to `false` to disable the default heuristics
 	that shift diff hunk boundaries to make patches easier to read.
 
 diff.algorithm::
diff --git a/Documentation/config/feature.txt b/Documentation/config/feature.txt
new file mode 100644
index 0000000..875f8c8
--- /dev/null
+++ b/Documentation/config/feature.txt
@@ -0,0 +1,37 @@
+feature.*::
+	The config settings that start with `feature.` modify the defaults of
+	a group of other config settings. These groups are created by the Git
+	developer community as recommended defaults and are subject to change.
+	In particular, new config options may be added with different defaults.
+
+feature.experimental::
+	Enable config options that are new to Git, and are being considered for
+	future defaults. Config settings included here may be added or removed
+	with each release, including minor version updates. These settings may
+	have unintended interactions since they are so new. Please enable this
+	setting if you are interested in providing feedback on experimental
+	features. The new default values are:
++
+* `pack.useSparse=true` uses a new algorithm when constructing a pack-file
+which can improve `git push` performance in repos with many files.
++
+* `fetch.negotiationAlgorithm=skipping` may improve fetch negotiation times by
+skipping more commits at a time, reducing the number of round trips.
++
+* `fetch.writeCommitGraph=true` writes a commit-graph after every `git fetch`
+command that downloads a pack-file from a remote. Using the `--split` option,
+most executions will create a very small commit-graph file on top of the
+existing commit-graph file(s). Occasionally, these files will merge and the
+write may take longer. Having an updated commit-graph file helps performance
+of many Git commands, including `git merge-base`, `git push -f`, and
+`git log --graph`.
+
+feature.manyFiles::
+	Enable config options that optimize for repos with many files in the
+	working directory. With many files, commands such as `git status` and
+	`git checkout` may be slow and these new defaults improve performance:
++
+* `index.version=4` enables path-prefix compression in the index.
++
+* `core.untrackedCache=true` enables the untracked cache. This setting assumes
+that mtime is working on your machine.
diff --git a/Documentation/config/fetch.txt b/Documentation/config/fetch.txt
index ba890b5..f119402 100644
--- a/Documentation/config/fetch.txt
+++ b/Documentation/config/fetch.txt
@@ -59,7 +59,8 @@
 	effort to converge faster, but may result in a larger-than-necessary
 	packfile; The default is "default" which instructs Git to use the default algorithm
 	that never skips commits (unless the server has acknowledged it or one
-	of its descendants).
+	of its descendants). If `feature.experimental` is enabled, then this
+	setting defaults to "skipping".
 	Unknown values will cause 'git fetch' to error out.
 +
 See also the `--negotiation-tip` option for linkgit:git-fetch[1].
@@ -68,3 +69,23 @@
 	Set to false to enable `--no-show-forced-updates` in
 	linkgit:git-fetch[1] and linkgit:git-pull[1] commands.
 	Defaults to true.
+
+fetch.parallel::
+	Specifies the maximal number of fetch operations to be run in parallel
+	at a time (submodules, or remotes when the `--multiple` option of
+	linkgit:git-fetch[1] is in effect).
++
+A value of 0 will give some reasonable default. If unset, it defaults to 1.
++
+For submodules, this setting can be overridden using the `submodule.fetchJobs`
+config setting.
+
+fetch.writeCommitGraph::
+	Set to true to write a commit-graph after every `git fetch` command
+	that downloads a pack-file from a remote. Using the `--split` option,
+	most executions will create a very small commit-graph file on top of
+	the existing commit-graph file(s). Occasionally, these files will
+	merge and the write may take longer. Having an updated commit-graph
+	file helps performance of many Git commands, including `git merge-base`,
+	`git push -f`, and `git log --graph`. Defaults to false, unless
+	`feature.experimental` is true.
diff --git a/Documentation/config/format.txt b/Documentation/config/format.txt
index 414a5a8..40cad92 100644
--- a/Documentation/config/format.txt
+++ b/Documentation/config/format.txt
@@ -77,10 +77,11 @@
 	A boolean that controls whether to generate a cover-letter when
 	format-patch is invoked, but in addition can be set to "auto", to
 	generate a cover-letter only when there's more than one patch.
+	Default is false.
 
 format.outputDirectory::
 	Set a custom directory to store the resulting files instead of the
-	current working directory.
+	current working directory. All directory components will be created.
 
 format.useAutoBase::
 	A boolean value which lets you enable the `--base=auto` option of
diff --git a/Documentation/config/gc.txt b/Documentation/config/gc.txt
index 02b92b1..00ea0a6 100644
--- a/Documentation/config/gc.txt
+++ b/Documentation/config/gc.txt
@@ -63,7 +63,7 @@
 	If true, then gc will rewrite the commit-graph file when
 	linkgit:git-gc[1] is run. When using `git gc --auto`
 	the commit-graph will be updated if housekeeping is
-	required. Default is false. See linkgit:git-commit-graph[1]
+	required. Default is true. See linkgit:git-commit-graph[1]
 	for details.
 
 gc.logExpiry::
diff --git a/Documentation/config/index.txt b/Documentation/config/index.txt
index f181503..7cb50b3 100644
--- a/Documentation/config/index.txt
+++ b/Documentation/config/index.txt
@@ -24,3 +24,4 @@
 index.version::
 	Specify the version with which new index files should be
 	initialized.  This does not affect existing repositories.
+	If `feature.manyFiles` is enabled, then the default is 4.
diff --git a/Documentation/config/pack.txt b/Documentation/config/pack.txt
index 9cdcfa7..1d66f0c 100644
--- a/Documentation/config/pack.txt
+++ b/Documentation/config/pack.txt
@@ -112,7 +112,8 @@
 	objects. This can have significant performance benefits when
 	computing a pack to send a small change. However, it is possible
 	that extra objects are added to the pack-file if the included
-	commits contain certain types of direct renames.
+	commits contain certain types of direct renames. Default is `false`
+	unless `feature.experimental` is enabled.
 
 pack.writeBitmaps (deprecated)::
 	This is a deprecated synonym for `repack.writeBitmaps`.
diff --git a/Documentation/config/remote.txt b/Documentation/config/remote.txt
index 6c4cad8..a8e6437 100644
--- a/Documentation/config/remote.txt
+++ b/Documentation/config/remote.txt
@@ -76,3 +76,11 @@
 +
 See also `remote.<name>.prune` and the PRUNING section of
 linkgit:git-fetch[1].
+
+remote.<name>.promisor::
+	When set to true, this remote will be used to fetch promisor
+	objects.
+
+remote.<name>.partialclonefilter::
+	The filter that will be applied when fetching from this
+	promisor remote.
diff --git a/Documentation/config/trace2.txt b/Documentation/config/trace2.txt
index 2edbfb0..4ce0b9a 100644
--- a/Documentation/config/trace2.txt
+++ b/Documentation/config/trace2.txt
@@ -54,3 +54,9 @@
 	By default, these errors are suppressed and tracing is
 	silently disabled.  May be overridden by the
 	`GIT_TRACE2_DST_DEBUG` environment variable.
+
+trace2.maxFiles::
+	Integer.  When writing trace files to a target directory, do not
+	write additional traces if we would exceed this many files. Instead,
+	write a sentinel file that will block further tracing to this
+	directory. Defaults to 0, which disables this check.
diff --git a/Documentation/diff-generate-patch.txt b/Documentation/diff-generate-patch.txt
index f10ca41..e8ed647 100644
--- a/Documentation/diff-generate-patch.txt
+++ b/Documentation/diff-generate-patch.txt
@@ -1,11 +1,15 @@
-Generating patches with -p
---------------------------
+Generating patch text with -p
+-----------------------------
 
-When "git-diff-index", "git-diff-tree", or "git-diff-files" are run
-with a `-p` option, "git diff" without the `--raw` option, or
-"git log" with the "-p" option, they
-do not produce the output described above; instead they produce a
-patch file.  You can customize the creation of such patches via the
+Running
+linkgit:git-diff[1],
+linkgit:git-log[1],
+linkgit:git-show[1],
+linkgit:git-diff-index[1],
+linkgit:git-diff-tree[1], or
+linkgit:git-diff-files[1]
+with the `-p` option produces patch text.
+You can customize the creation of patch text via the
 `GIT_EXTERNAL_DIFF` and the `GIT_DIFF_OPTS` environment variables.
 
 What the -p option produces is slightly different from the traditional
@@ -49,7 +53,7 @@
 files, while 100% dissimilarity means that no line from the old
 file made it into the new one.
 +
-The index line includes the SHA-1 checksum before and after the change.
+The index line includes the blob object names before and after the change.
 The <mode> is included if the file mode does not change; otherwise,
 separate lines indicate the old and the new mode.
 
@@ -70,7 +74,7 @@
       rename to a
 
 
-combined diff format
+Combined diff format
 --------------------
 
 Any diff-generating command can take the `-c` or `--cc` option to
@@ -80,7 +84,7 @@
 of these commands to force generation of diffs with individual parents
 of a merge.
 
-A 'combined diff' format looks like this:
+A "combined diff" format looks like this:
 
 ------------
 diff --combined describe.c
@@ -113,11 +117,11 @@
 ------------
 
 1.   It is preceded with a "git diff" header, that looks like
-     this (when `-c` option is used):
+     this (when the `-c` option is used):
 
        diff --combined file
 +
-or like this (when `--cc` option is used):
+or like this (when the `--cc` option is used):
 
        diff --cc file
 
@@ -160,7 +164,7 @@
 4.   Chunk header format is modified to prevent people from
      accidentally feeding it to `patch -p1`. Combined diff format
      was created for review of merge commit changes, and was not
-     meant for apply. The change is similar to the change in the
+     meant to be applied. The change is similar to the change in the
      extended 'index' header:
 
        @@@ <from-file-range> <from-file-range> <to-file-range> @@@
diff --git a/Documentation/doc-diff b/Documentation/doc-diff
index 3355be4..88a9b20 100755
--- a/Documentation/doc-diff
+++ b/Documentation/doc-diff
@@ -21,7 +21,7 @@
 to-asciidoc		use asciidoc with the 'to'-commit
 to-asciidoctor		use asciidoctor with the 'to'-commit
 asciidoctor		use asciidoctor with both commits
-cut-header-footer	cut away header and footer
+cut-footer		cut away footer
 "
 SUBDIRECTORY_OK=1
 . "$(git --exec-path)/git-sh-setup"
@@ -31,7 +31,7 @@
 clean=
 from_program=
 to_program=
-cut_header_footer=
+cut_footer=
 while test $# -gt 0
 do
 	case "$1" in
@@ -55,8 +55,8 @@
 	--asciidoc)
 		from_program=-asciidoc
 		to_program=-asciidoc ;;
-	--cut-header-footer)
-		cut_header_footer=-cut-header-footer ;;
+	--cut-footer)
+		cut_footer=-cut-footer ;;
 	--)
 		shift; break ;;
 	*)
@@ -118,8 +118,8 @@
 from_makemanflags=$(construct_makemanflags "$from_program") &&
 to_makemanflags=$(construct_makemanflags "$to_program") &&
 
-from_dir=$from_oid$from_program$cut_header_footer &&
-to_dir=$to_oid$to_program$cut_header_footer &&
+from_dir=$from_oid$from_program$cut_footer &&
+to_dir=$to_oid$to_program$cut_footer &&
 
 # generate_render_makefile <srcdir> <dstdir>
 generate_render_makefile () {
@@ -169,12 +169,11 @@
 		make -j$parallel -f - &&
 		mv "$tmp/rendered/$dname+" "$tmp/rendered/$dname"
 
-		if test "$cut_header_footer" = "-cut-header-footer"
+		if test "$cut_footer" = "-cut-footer"
 		then
 			for f in $(find "$tmp/rendered/$dname" -type f)
 			do
-				tail -n +3 "$f" | head -n -2 |
-				sed -e '1{/^$/d}' -e '${/^$/d}' >"$f+" &&
+				head -n -2 "$f" | sed -e '${/^$/d}' >"$f+" &&
 				mv "$f+" "$f" ||
 				return 1
 			done
diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt
index 3c9b4f9..43b9ff3 100644
--- a/Documentation/fetch-options.txt
+++ b/Documentation/fetch-options.txt
@@ -160,15 +160,27 @@
 
 -j::
 --jobs=<n>::
-	Number of parallel children to be used for fetching submodules.
-	Each will fetch from different submodules, such that fetching many
-	submodules will be faster. By default submodules will be fetched
-	one at a time.
+	Number of parallel children to be used for all forms of fetching.
++
+If the `--multiple` option was specified, the different remotes will be fetched
+in parallel. If multiple submodules are fetched, they will be fetched in
+parallel. To control them independently, use the config settings
+`fetch.parallel` and `submodule.fetchJobs` (see linkgit:git-config[1]).
++
+Typically, parallel recursive and multi-remote fetches will be faster. By
+default fetches are performed sequentially, not in parallel.
 
 --no-recurse-submodules::
 	Disable recursive fetching of submodules (this has the same effect as
 	using the `--recurse-submodules=no` option).
 
+--set-upstream::
+	If the remote is fetched successfully, pull and add upstream
+	(tracking) reference, used by argument-less
+	linkgit:git-pull[1] and other commands. For more information,
+	see `branch.<name>.merge` and `branch.<name>.remote` in
+	linkgit:git-config[1].
+
 --submodule-prefix=<path>::
 	Prepend <path> to paths printed in informative messages
 	such as "Fetching submodule foo".  This option is used
diff --git a/Documentation/git-clean.txt b/Documentation/git-clean.txt
index 0028ff1..a7f309d 100644
--- a/Documentation/git-clean.txt
+++ b/Documentation/git-clean.txt
@@ -26,18 +26,20 @@
 OPTIONS
 -------
 -d::
-	Remove untracked directories in addition to untracked files.
-	If an untracked directory is managed by a different Git
-	repository, it is not removed by default.  Use -f option twice
-	if you really want to remove such a directory.
+	Normally, when no <path> is specified, git clean will not
+	recurse into untracked directories to avoid removing too much.
+	Specify -d to have it recurse into such directories as well.
+	If any paths are specified, -d is irrelevant; all untracked
+	files matching the specified paths (with exceptions for nested
+	git directories mentioned under `--force`) will be removed.
 
 -f::
 --force::
 	If the Git configuration variable clean.requireForce is not set
 	to false, 'git clean' will refuse to delete files or directories
-	unless given -f, -n or -i. Git will refuse to delete directories
-	with .git sub directory or file unless a second -f
-	is given.
+	unless given -f or -i.  Git will refuse to modify untracked
+	nested git repositories (directories with a .git subdirectory)
+	unless a second -f is given.
 
 -i::
 --interactive::
diff --git a/Documentation/git-commit-graph.txt b/Documentation/git-commit-graph.txt
index eb5e786..8c708a7 100644
--- a/Documentation/git-commit-graph.txt
+++ b/Documentation/git-commit-graph.txt
@@ -10,8 +10,8 @@
 --------
 [verse]
 'git commit-graph read' [--object-dir <dir>]
-'git commit-graph verify' [--object-dir <dir>] [--shallow]
-'git commit-graph write' <options> [--object-dir <dir>]
+'git commit-graph verify' [--object-dir <dir>] [--shallow] [--[no-]progress]
+'git commit-graph write' <options> [--object-dir <dir>] [--[no-]progress]
 
 
 DESCRIPTION
@@ -29,6 +29,9 @@
 	commit-graph file is expected to be in the `<dir>/info` directory and
 	the packfiles are expected to be in `<dir>/pack`.
 
+--[no-]progress::
+	Turn progress on/off explicitly. If neither is specified, progress is
+	shown if standard error is connected to a terminal.
 
 COMMANDS
 --------
diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
index 7628193..afa7b75 100644
--- a/Documentation/git-commit.txt
+++ b/Documentation/git-commit.txt
@@ -282,18 +282,20 @@
 --untracked-files[=<mode>]::
 	Show untracked files.
 +
+--
 The mode parameter is optional (defaults to 'all'), and is used to
 specify the handling of untracked files; when -u is not used, the
 default is 'normal', i.e. show untracked files and directories.
-+
+
 The possible options are:
-+
+
 	- 'no'     - Show no untracked files
 	- 'normal' - Shows untracked files and directories
 	- 'all'    - Also shows individual files in untracked directories.
-+
+
 The default can be changed using the status.showUntrackedFiles
 configuration variable documented in linkgit:git-config[1].
+--
 
 -v::
 --verbose::
diff --git a/Documentation/git-config.txt b/Documentation/git-config.txt
index ff9310f..899e92a 100644
--- a/Documentation/git-config.txt
+++ b/Documentation/git-config.txt
@@ -339,33 +339,35 @@
 
 Given a .git/config like this:
 
-	#
-	# This is the config file, and
-	# a '#' or ';' character indicates
-	# a comment
-	#
+------------
+#
+# This is the config file, and
+# a '#' or ';' character indicates
+# a comment
+#
 
-	; core variables
-	[core]
-		; Don't trust file modes
-		filemode = false
+; core variables
+[core]
+	; Don't trust file modes
+	filemode = false
 
-	; Our diff algorithm
-	[diff]
-		external = /usr/local/bin/diff-wrapper
-		renames = true
+; Our diff algorithm
+[diff]
+	external = /usr/local/bin/diff-wrapper
+	renames = true
 
-	; Proxy settings
-	[core]
-		gitproxy=proxy-command for kernel.org
-		gitproxy=default-proxy ; for all the rest
+; Proxy settings
+[core]
+	gitproxy=proxy-command for kernel.org
+	gitproxy=default-proxy ; for all the rest
 
-	; HTTP
-	[http]
-		sslVerify
-	[http "https://weak.example.com"]
-		sslVerify = false
-		cookieFile = /tmp/cookie.txt
+; HTTP
+[http]
+	sslVerify
+[http "https://weak.example.com"]
+	sslVerify = false
+	cookieFile = /tmp/cookie.txt
+------------
 
 you can set the filemode to true with
 
diff --git a/Documentation/git-fast-export.txt b/Documentation/git-fast-export.txt
index cc940eb..37634bf 100644
--- a/Documentation/git-fast-export.txt
+++ b/Documentation/git-fast-export.txt
@@ -17,9 +17,9 @@
 into 'git fast-import'.
 
 You can use it as a human-readable bundle replacement (see
-linkgit:git-bundle[1]), or as a kind of an interactive
-'git filter-branch'.
-
+linkgit:git-bundle[1]), or as a format that can be edited before being
+fed to 'git fast-import' in order to do history rewrites (an ability
+relied on by tools like 'git filter-repo').
 
 OPTIONS
 -------
@@ -75,11 +75,20 @@
 	Before processing any input, load the marks specified in
 	<file>.  The input file must exist, must be readable, and
 	must use the same format as produced by --export-marks.
+
+--mark-tags::
+	In addition to labelling blobs and commits with mark ids, also
+	label tags.  This is useful in conjunction with
+	`--export-marks` and `--import-marks`, and is also useful (and
+	necessary) for exporting of nested tags.  It does not hurt
+	other cases and would be the default, but many fast-import
+	frontends are not prepared to accept tags with mark
+	identifiers.
 +
-Any commits that have already been marked will not be exported again.
-If the backend uses a similar --import-marks file, this allows for
-incremental bidirectional exporting of the repository by keeping the
-marks the same across runs.
+Any commits (or tags) that have already been marked will not be
+exported again.  If the backend uses a similar --import-marks file,
+this allows for incremental bidirectional exporting of the repository
+by keeping the marks the same across runs.
 
 --fake-missing-tagger::
 	Some old repositories have tags without a tagger.  The
diff --git a/Documentation/git-fast-import.txt b/Documentation/git-fast-import.txt
index 916611d..7889f95 100644
--- a/Documentation/git-fast-import.txt
+++ b/Documentation/git-fast-import.txt
@@ -352,6 +352,13 @@
 	`commit` command.  This command is optional and is not
 	needed to perform an import.
 
+`alias`::
+	Record that a mark refers to a given object without first
+	creating any new object.  Using --import-marks and referring
+	to missing marks will cause fast-import to fail, so aliases
+	can provide a way to set otherwise pruned commits to a valid
+	value (e.g. the nearest non-pruned ancestor).
+
 `checkpoint`::
 	Forces fast-import to close the current packfile, generate its
 	unique SHA-1 checksum and index, and start a new packfile.
@@ -406,7 +413,7 @@
 	('encoding' SP <encoding>)?
 	data
 	('from' SP <commit-ish> LF)?
-	('merge' SP <commit-ish> LF)?
+	('merge' SP <commit-ish> LF)*
 	(filemodify | filedelete | filecopy | filerename | filedeleteall | notemodify)*
 	LF?
 ....
@@ -789,6 +796,7 @@
 
 ....
 	'tag' SP <name> LF
+	mark?
 	'from' SP <commit-ish> LF
 	original-oid?
 	'tagger' (SP <name>)? SP LT <email> GT SP <when> LF
@@ -928,6 +936,21 @@
 +
 The `LF` after `<delim> LF` is optional (it used to be required).
 
+`alias`
+~~~~~~~
+Record that a mark refers to a given object without first creating any
+new object.
+
+....
+	'alias' LF
+	mark
+	'to' SP <commit-ish> LF
+	LF?
+....
+
+For a detailed description of `<commit-ish>` see above under `from`.
+
+
 `checkpoint`
 ~~~~~~~~~~~~
 Forces fast-import to close the current packfile, start a new one, and to
diff --git a/Documentation/git-filter-branch.txt b/Documentation/git-filter-branch.txt
index 6b53dd7..5876598 100644
--- a/Documentation/git-filter-branch.txt
+++ b/Documentation/git-filter-branch.txt
@@ -16,6 +16,19 @@
 	[--original <namespace>] [-d <directory>] [-f | --force]
 	[--state-branch <branch>] [--] [<rev-list options>...]
 
+WARNING
+-------
+'git filter-branch' has a plethora of pitfalls that can produce non-obvious
+manglings of the intended history rewrite (and can leave you with little
+time to investigate such problems since it has such abysmal performance).
+These safety and performance issues cannot be backward compatibly fixed and
+as such, its use is not recommended.  Please use an alternative history
+filtering tool such as https://github.com/newren/git-filter-repo/[git
+filter-repo].  If you still need to use 'git filter-branch', please
+carefully read <<SAFETY>> (and <<PERFORMANCE>>) to learn about the land
+mines of filter-branch, and then vigilantly avoid as many of the hazards
+listed there as reasonably possible.
+
 DESCRIPTION
 -----------
 Lets you rewrite Git revision history by rewriting the branches mentioned
@@ -445,36 +458,236 @@
   (or if your git-gc is not new enough to support arguments to
   `--prune`, use `git repack -ad; git prune` instead).
 
-NOTES
------
+[[PERFORMANCE]]
+PERFORMANCE
+-----------
 
-git-filter-branch allows you to make complex shell-scripted rewrites
-of your Git history, but you probably don't need this flexibility if
-you're simply _removing unwanted data_ like large files or passwords.
-For those operations you may want to consider
-http://rtyley.github.io/bfg-repo-cleaner/[The BFG Repo-Cleaner],
-a JVM-based alternative to git-filter-branch, typically at least
-10-50x faster for those use-cases, and with quite different
-characteristics:
+The performance of git-filter-branch is glacially slow; its design makes it
+impossible for a backward-compatible implementation to ever be fast:
 
-* Any particular version of a file is cleaned exactly _once_. The BFG,
-  unlike git-filter-branch, does not give you the opportunity to
-  handle a file differently based on where or when it was committed
-  within your history. This constraint gives the core performance
-  benefit of The BFG, and is well-suited to the task of cleansing bad
-  data - you don't care _where_ the bad data is, you just want it
-  _gone_.
+* In editing files, git-filter-branch by design checks out each and
+every commit as it existed in the original repo.  If your repo has 10\^5
+files and 10\^5 commits, but each commit only modifies 5 files, then
+git-filter-branch will make you do 10\^10 modifications, despite only
+having (at most) 5*10^5 unique blobs.
 
-* By default The BFG takes full advantage of multi-core machines,
-  cleansing commit file-trees in parallel. git-filter-branch cleans
-  commits sequentially (i.e. in a single-threaded manner), though it
-  _is_ possible to write filters that include their own parallelism,
-  in the scripts executed against each commit.
+* If you try and cheat and try to make git-filter-branch only work on
+files modified in a commit, then two things happen
 
-* The http://rtyley.github.io/bfg-repo-cleaner/#examples[command options]
-  are much more restrictive than git-filter branch, and dedicated just
-  to the tasks of removing unwanted data- e.g:
-  `--strip-blobs-bigger-than 1M`.
+  ** you run into problems with deletions whenever the user is simply
+     trying to rename files (because attempting to delete files that
+     don't exist looks like a no-op; it takes some chicanery to remap
+     deletes across file renames when the renames happen via arbitrary
+     user-provided shell)
+
+  ** even if you succeed at the map-deletes-for-renames chicanery, you
+     still technically violate backward compatibility because users are
+     allowed to filter files in ways that depend upon topology of
+     commits instead of filtering solely based on file contents or names
+     (though this has not been observed in the wild).
+
+* Even if you don't need to edit files but only want to e.g. rename or
+remove some and thus can avoid checking out each file (i.e. you can use
+--index-filter), you still are passing shell snippets for your filters.
+This means that for every commit, you have to have a prepared git repo
+where those filters can be run.  That's a significant setup.
+
+* Further, several additional files are created or updated per commit by
+git-filter-branch.  Some of these are for supporting the convenience
+functions provided by git-filter-branch (such as map()), while others
+are for keeping track of internal state (but could have also been
+accessed by user filters; one of git-filter-branch's regression tests
+does so).  This essentially amounts to using the filesystem as an IPC
+mechanism between git-filter-branch and the user-provided filters.
+Disks tend to be a slow IPC mechanism, and writing these files also
+effectively represents a forced synchronization point between separate
+processes that we hit with every commit.
+
+* The user-provided shell commands will likely involve a pipeline of
+commands, resulting in the creation of many processes per commit.
+Creating and running another process takes a widely varying amount of
+time between operating systems, but on any platform it is very slow
+relative to invoking a function.
+
+* git-filter-branch itself is written in shell, which is kind of slow.
+This is the one performance issue that could be backward-compatibly
+fixed, but compared to the above problems that are intrinsic to the
+design of git-filter-branch, the language of the tool itself is a
+relatively minor issue.
+
+  ** Side note: Unfortunately, people tend to fixate on the
+     written-in-shell aspect and periodically ask if git-filter-branch
+     could be rewritten in another language to fix the performance
+     issues.  Not only does that ignore the bigger intrinsic problems
+     with the design, it'd help less than you'd expect: if
+     git-filter-branch itself were not shell, then the convenience
+     functions (map(), skip_commit(), etc) and the `--setup` argument
+     could no longer be executed once at the beginning of the program
+     but would instead need to be prepended to every user filter (and
+     thus re-executed with every commit).
+
+The https://github.com/newren/git-filter-repo/[git filter-repo] tool is
+an alternative to git-filter-branch which does not suffer from these
+performance problems or the safety problems (mentioned below). For those
+with existing tooling which relies upon git-filter-branch, 'git
+repo-filter' also provides
+https://github.com/newren/git-filter-repo/blob/master/contrib/filter-repo-demos/filter-lamely[filter-lamely],
+a drop-in git-filter-branch replacement (with a few caveats).  While
+filter-lamely suffers from all the same safety issues as
+git-filter-branch, it at least ameloriates the performance issues a
+little.
+
+[[SAFETY]]
+SAFETY
+------
+
+git-filter-branch is riddled with gotchas resulting in various ways to
+easily corrupt repos or end up with a mess worse than what you started
+with:
+
+* Someone can have a set of "working and tested filters" which they
+document or provide to a coworker, who then runs them on a different OS
+where the same commands are not working/tested (some examples in the
+git-filter-branch manpage are also affected by this).  BSD vs. GNU
+userland differences can really bite.  If lucky, error messages are
+spewed.  But just as likely, the commands either don't do the filtering
+requested, or silently corrupt by making some unwanted change.  The
+unwanted change may only affect a few commits, so it's not necessarily
+obvious either.  (The fact that problems won't necessarily be obvious
+means they are likely to go unnoticed until the rewritten history is in
+use for quite a while, at which point it's really hard to justify
+another flag-day for another rewrite.)
+
+* Filenames with spaces are often mishandled by shell snippets since
+they cause problems for shell pipelines.  Not everyone is familiar with
+find -print0, xargs -0, git-ls-files -z, etc.  Even people who are
+familiar with these may assume such flags are not relevant because
+someone else renamed any such files in their repo back before the person
+doing the filtering joined the project.  And often, even those familiar
+with handling arguments with spaces may not do so just because they
+aren't in the mindset of thinking about everything that could possibly
+go wrong.
+
+* Non-ascii filenames can be silently removed despite being in a desired
+directory.  Keeping only wanted paths is often done using pipelines like
+`git ls-files | grep -v ^WANTED_DIR/ | xargs git rm`.  ls-files will
+only quote filenames if needed, so folks may not notice that one of the
+files didn't match the regex (at least not until it's much too late).
+Yes, someone who knows about core.quotePath can avoid this (unless they
+have other special characters like \t, \n, or "), and people who use
+ls-files -z with something other than grep can avoid this, but that
+doesn't mean they will.
+
+* Similarly, when moving files around, one can find that filenames with
+non-ascii or special characters end up in a different directory, one
+that includes a double quote character.  (This is technically the same
+issue as above with quoting, but perhaps an interesting different way
+that it can and has manifested as a problem.)
+
+* It's far too easy to accidentally mix up old and new history.  It's
+still possible with any tool, but git-filter-branch almost invites it.
+If lucky, the only downside is users getting frustrated that they don't
+know how to shrink their repo and remove the old stuff.  If unlucky,
+they merge old and new history and end up with multiple "copies" of each
+commit, some of which have unwanted or sensitive files and others which
+don't.  This comes about in multiple different ways:
+
+  ** the default to only doing a partial history rewrite ('--all' is not
+     the default and few examples show it)
+
+  ** the fact that there's no automatic post-run cleanup
+
+  ** the fact that --tag-name-filter (when used to rename tags) doesn't
+     remove the old tags but just adds new ones with the new name
+
+  ** the fact that little educational information is provided to inform
+     users of the ramifications of a rewrite and how to avoid mixing old
+     and new history.  For example, this man page discusses how users
+     need to understand that they need to rebase their changes for all
+     their branches on top of new history (or delete and reclone), but
+     that's only one of multiple concerns to consider.  See the
+     "DISCUSSION" section of the git filter-repo manual page for more
+     details.
+
+* Annotated tags can be accidentally converted to lightweight tags, due
+to either of two issues:
+
+  ** Someone can do a history rewrite, realize they messed up, restore
+     from the backups in refs/original/, and then redo their
+     git-filter-branch command.  (The backup in refs/original/ is not a
+     real backup; it dereferences tags first.)
+
+  ** Running git-filter-branch with either --tags or --all in your
+     <rev-list options>.  In order to retain annotated tags as
+     annotated, you must use --tag-name-filter (and must not have
+     restored from refs/original/ in a previously botched rewrite).
+
+* Any commit messages that specify an encoding will become corrupted
+by the rewrite; git-filter-branch ignores the encoding, takes the original
+bytes, and feeds it to commit-tree without telling it the proper
+encoding.  (This happens whether or not --msg-filter is used.)
+
+* Commit messages (even if they are all UTF-8) by default become
+corrupted due to not being updated -- any references to other commit
+hashes in commit messages will now refer to no-longer-extant commits.
+
+* There are no facilities for helping users find what unwanted crud they
+should delete, which means they are much more likely to have incomplete
+or partial cleanups that sometimes result in confusion and people
+wasting time trying to understand.  (For example, folks tend to just
+look for big files to delete instead of big directories or extensions,
+and once they do so, then sometime later folks using the new repository
+who are going through history will notice a build artifact directory
+that has some files but not others, or a cache of dependencies
+(node_modules or similar) which couldn't have ever been functional since
+it's missing some files.)
+
+* If --prune-empty isn't specified, then the filtering process can
+create hoards of confusing empty commits
+
+* If --prune-empty is specified, then intentionally placed empty
+commits from before the filtering operation are also pruned instead of
+just pruning commits that became empty due to filtering rules.
+
+* If --prune empty is specified, sometimes empty commits are missed
+and left around anyway (a somewhat rare bug, but it happens...)
+
+* A minor issue, but users who have a goal to update all names and
+emails in a repository may be led to --env-filter which will only update
+authors and committers, missing taggers.
+
+* If the user provides a --tag-name-filter that maps multiple tags to
+the same name, no warning or error is provided; git-filter-branch simply
+overwrites each tag in some undocumented pre-defined order resulting in
+only one tag at the end.  (A git-filter-branch regression test requires
+this surprising behavior.)
+
+Also, the poor performance of git-filter-branch often leads to safety
+issues:
+
+* Coming up with the correct shell snippet to do the filtering you want
+is sometimes difficult unless you're just doing a trivial modification
+such as deleting a couple files.  Unfortunately, people often learn if
+the snippet is right or wrong by trying it out, but the rightness or
+wrongness can vary depending on special circumstances (spaces in
+filenames, non-ascii filenames, funny author names or emails, invalid
+timezones, presence of grafts or replace objects, etc.), meaning they
+may have to wait a long time, hit an error, then restart.  The
+performance of git-filter-branch is so bad that this cycle is painful,
+reducing the time available to carefully re-check (to say nothing about
+what it does to the patience of the person doing the rewrite even if
+they do technically have more time available).  This problem is extra
+compounded because errors from broken filters may not be shown for a
+long time and/or get lost in a sea of output.  Even worse, broken
+filters often just result in silent incorrect rewrites.
+
+* To top it all off, even when users finally find working commands, they
+naturally want to share them.  But they may be unaware that their repo
+didn't have some special cases that someone else's does.  So, when
+someone else with a different repository runs the same commands, they
+get hit by the problems above.  Or, the user just runs commands that
+really were vetted for special cases, but they run it on a different OS
+where it doesn't work, as noted above.
 
 GIT
 ---
diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt
index b9b97e6..2035d4d 100644
--- a/Documentation/git-format-patch.txt
+++ b/Documentation/git-format-patch.txt
@@ -17,9 +17,9 @@
 		   [--signature-file=<file>]
 		   [-n | --numbered | -N | --no-numbered]
 		   [--start-number <n>] [--numbered-files]
-		   [--in-reply-to=Message-Id] [--suffix=.<sfx>]
+		   [--in-reply-to=<message id>] [--suffix=.<sfx>]
 		   [--ignore-if-in-upstream]
-		   [--rfc] [--subject-prefix=Subject-Prefix]
+		   [--rfc] [--subject-prefix=<subject prefix>]
 		   [(--reroll-count|-v) <n>]
 		   [--to=<email>] [--cc=<email>]
 		   [--[no-]cover-letter] [--quiet]
@@ -66,7 +66,8 @@
 can be set with the `format.outputDirectory` configuration option.
 The `-o` option takes precedence over `format.outputDirectory`.
 To store patches in the current working directory even when
-`format.outputDirectory` points elsewhere, use `-o .`.
+`format.outputDirectory` points elsewhere, use `-o .`. All directory
+components will be created.
 
 By default, the subject of a single patch is "[PATCH] " followed by
 the concatenation of lines from the commit message up to the first blank
@@ -159,9 +160,9 @@
 itself.  If you want `git format-patch` to take care of threading, you
 will want to ensure that threading is disabled for `git send-email`.
 
---in-reply-to=Message-Id::
+--in-reply-to=<message id>::
 	Make the first mail (or all the mails with `--no-thread`) appear as a
-	reply to the given Message-Id, which avoids breaking threads to
+	reply to the given <message id>, which avoids breaking threads to
 	provide a new patch series.
 
 --ignore-if-in-upstream::
@@ -171,9 +172,9 @@
 	patches being generated, and any patch that matches is
 	ignored.
 
---subject-prefix=<Subject-Prefix>::
+--subject-prefix=<subject prefix>::
 	Instead of the standard '[PATCH]' prefix in the subject
-	line, instead use '[<Subject-Prefix>]'. This
+	line, instead use '[<subject prefix>]'. This
 	allows for useful naming of a patch series, and can be
 	combined with the `--numbered` option.
 
@@ -314,7 +315,8 @@
 --base=<commit>::
 	Record the base tree information to identify the state the
 	patch series applies to.  See the BASE TREE INFORMATION section
-	below for details.
+	below for details. If <commit> is "auto", a base commit is
+	automatically chosen.
 
 --root::
 	Treat the revision argument as a <revision range>, even if it
@@ -330,8 +332,9 @@
 -------------
 You can specify extra mail header lines to be added to each message,
 defaults for the subject prefix and file suffix, number patches when
-outputting more than one patch, add "To" or "Cc:" headers, configure
-attachments, and sign off patches with configuration variables.
+outputting more than one patch, add "To:" or "Cc:" headers, configure
+attachments, change the patch output directory, and sign off patches
+with configuration variables.
 
 ------------
 [format]
@@ -343,7 +346,8 @@
 	cc = <email>
 	attach [ = mime-boundary-string ]
 	signOff = true
-	coverletter = auto
+	outputDirectory = <directory>
+	coverLetter = auto
 ------------
 
 
diff --git a/Documentation/git-gc.txt b/Documentation/git-gc.txt
index 247f765..0c114ad 100644
--- a/Documentation/git-gc.txt
+++ b/Documentation/git-gc.txt
@@ -115,15 +115,14 @@
 -----
 
 'git gc' tries very hard not to delete objects that are referenced
-anywhere in your repository. In
-particular, it will keep not only objects referenced by your current set
-of branches and tags, but also objects referenced by the index,
-remote-tracking branches, refs saved by 'git filter-branch' in
-refs/original/, reflogs (which may reference commits in branches
-that were later amended or rewound), and anything else in the refs/* namespace.
-If you are expecting some objects to be deleted and they aren't, check
-all of those locations and decide whether it makes sense in your case to
-remove those references.
+anywhere in your repository. In particular, it will keep not only
+objects referenced by your current set of branches and tags, but also
+objects referenced by the index, remote-tracking branches, notes saved
+by 'git notes' under refs/notes/, reflogs (which may reference commits
+in branches that were later amended or rewound), and anything else in
+the refs/* namespace.  If you are expecting some objects to be deleted
+and they aren't, check all of those locations and decide whether it
+makes sense in your case to remove those references.
 
 On the other hand, when 'git gc' runs concurrently with another process,
 there is a risk of it deleting an object that the other process is using
diff --git a/Documentation/git-grep.txt b/Documentation/git-grep.txt
index 2d27969..c89fb56 100644
--- a/Documentation/git-grep.txt
+++ b/Documentation/git-grep.txt
@@ -271,6 +271,23 @@
 
 -f <file>::
 	Read patterns from <file>, one per line.
++
+Passing the pattern via <file> allows for providing a search pattern
+containing a \0.
++
+Not all pattern types support patterns containing \0. Git will error
+out if a given pattern type can't support such a pattern. The
+`--perl-regexp` pattern type when compiled against the PCRE v2 backend
+has the widest support for these types of patterns.
++
+In versions of Git before 2.23.0 patterns containing \0 would be
+silently considered fixed. This was never documented, there were also
+odd and undocumented interactions between e.g. non-ASCII patterns
+containing \0 and `--ignore-case`.
++
+In future versions we may learn to support patterns containing \0 for
+more search backends, until then we'll die when the pattern type in
+question doesn't support them.
 
 -e::
 	The next parameter is the pattern. This option has to be
diff --git a/Documentation/git-gui.txt b/Documentation/git-gui.txt
index 5f93f80..c9d7e96 100644
--- a/Documentation/git-gui.txt
+++ b/Documentation/git-gui.txt
@@ -112,15 +112,9 @@
 versions are distributed as part of the Git suite for the convenience
 of end users.
 
-A 'git gui' development repository can be obtained from:
+The official repository of the 'git gui' project can be found at:
 
-  git clone git://repo.or.cz/git-gui.git
-
-or
-
-  git clone http://repo.or.cz/r/git-gui.git
-
-or browsed online at http://repo.or.cz/w/git-gui.git/[].
+  https://github.com/prati0100/git-gui.git/
 
 GIT
 ---
diff --git a/Documentation/git-ls-remote.txt b/Documentation/git-ls-remote.txt
index 0b057cb..a2ea1fd 100644
--- a/Documentation/git-ls-remote.txt
+++ b/Documentation/git-ls-remote.txt
@@ -92,21 +92,23 @@
 EXAMPLES
 --------
 
-	$ git ls-remote --tags ./.
-	d6602ec5194c87b0fc87103ca4d67251c76f233a	refs/tags/v0.99
-	f25a265a342aed6041ab0cc484224d9ca54b6f41	refs/tags/v0.99.1
-	7ceca275d047c90c0c7d5afb13ab97efdf51bd6e	refs/tags/v0.99.3
-	c5db5456ae3b0873fc659c19fafdde22313cc441	refs/tags/v0.99.2
-	0918385dbd9656cab0d1d81ba7453d49bbc16250	refs/tags/junio-gpg-pub
-	$ git ls-remote http://www.kernel.org/pub/scm/git/git.git master pu rc
-	5fe978a5381f1fbad26a80e682ddd2a401966740	refs/heads/master
-	c781a84b5204fb294c9ccc79f8b3baceeb32c061	refs/heads/pu
-	$ git remote add korg http://www.kernel.org/pub/scm/git/git.git
-	$ git ls-remote --tags korg v\*
-	d6602ec5194c87b0fc87103ca4d67251c76f233a	refs/tags/v0.99
-	f25a265a342aed6041ab0cc484224d9ca54b6f41	refs/tags/v0.99.1
-	c5db5456ae3b0873fc659c19fafdde22313cc441	refs/tags/v0.99.2
-	7ceca275d047c90c0c7d5afb13ab97efdf51bd6e	refs/tags/v0.99.3
+----
+$ git ls-remote --tags ./.
+d6602ec5194c87b0fc87103ca4d67251c76f233a	refs/tags/v0.99
+f25a265a342aed6041ab0cc484224d9ca54b6f41	refs/tags/v0.99.1
+7ceca275d047c90c0c7d5afb13ab97efdf51bd6e	refs/tags/v0.99.3
+c5db5456ae3b0873fc659c19fafdde22313cc441	refs/tags/v0.99.2
+0918385dbd9656cab0d1d81ba7453d49bbc16250	refs/tags/junio-gpg-pub
+$ git ls-remote http://www.kernel.org/pub/scm/git/git.git master pu rc
+5fe978a5381f1fbad26a80e682ddd2a401966740	refs/heads/master
+c781a84b5204fb294c9ccc79f8b3baceeb32c061	refs/heads/pu
+$ git remote add korg http://www.kernel.org/pub/scm/git/git.git
+$ git ls-remote --tags korg v\*
+d6602ec5194c87b0fc87103ca4d67251c76f233a	refs/tags/v0.99
+f25a265a342aed6041ab0cc484224d9ca54b6f41	refs/tags/v0.99.1
+c5db5456ae3b0873fc659c19fafdde22313cc441	refs/tags/v0.99.2
+7ceca275d047c90c0c7d5afb13ab97efdf51bd6e	refs/tags/v0.99.3
+----
 
 SEE ALSO
 --------
diff --git a/Documentation/git-merge-base.txt b/Documentation/git-merge-base.txt
index 261d5c1..2d944e0 100644
--- a/Documentation/git-merge-base.txt
+++ b/Documentation/git-merge-base.txt
@@ -80,9 +80,11 @@
 
 For example, with this topology:
 
-	         o---o---o---B
-	        /
-	---o---1---o---o---o---A
+....
+	 o---o---o---B
+	/
+---o---1---o---o---o---A
+....
 
 the merge base between 'A' and 'B' is '1'.
 
@@ -90,21 +92,25 @@
 merge base between 'A' and a hypothetical commit 'M', which is a merge
 between 'B' and 'C'.  For example, with this topology:
 
-	       o---o---o---o---C
-	      /
-	     /   o---o---o---B
-	    /   /
-	---2---1---o---o---o---A
+....
+       o---o---o---o---C
+      /
+     /   o---o---o---B
+    /   /
+---2---1---o---o---o---A
+....
 
 the result of `git merge-base A B C` is '1'.  This is because the
 equivalent topology with a merge commit 'M' between 'B' and 'C' is:
 
 
-	       o---o---o---o---o
-	      /                 \
-	     /   o---o---o---o---M
-	    /   /
-	---2---1---o---o---o---A
+....
+       o---o---o---o---o
+      /                 \
+     /   o---o---o---o---M
+    /   /
+---2---1---o---o---o---A
+....
 
 and the result of `git merge-base A M` is '1'.  Commit '2' is also a
 common ancestor between 'A' and 'M', but '1' is a better common ancestor,
@@ -116,11 +122,13 @@
 When the history involves criss-cross merges, there can be more than one
 'best' common ancestor for two commits.  For example, with this topology:
 
-	---1---o---A
-	    \ /
-	     X
-	    / \
-	---2---o---o---B
+....
+---1---o---A
+    \ /
+     X
+    / \
+---2---o---o---B
+....
 
 both '1' and '2' are merge-bases of A and B.  Neither one is better than
 the other (both are 'best' merge bases).  When the `--all` option is not given,
@@ -131,18 +139,22 @@
 A and B, and check if it is the same as A, in which case, A is an
 ancestor of B.  You will see this idiom used often in older scripts.
 
-	A=$(git rev-parse --verify A)
-	if test "$A" = "$(git merge-base A B)"
-	then
-		... A is an ancestor of B ...
-	fi
+....
+A=$(git rev-parse --verify A)
+if test "$A" = "$(git merge-base A B)"
+then
+	... A is an ancestor of B ...
+fi
+....
 
 In modern git, you can say this in a more direct way:
 
-	if git merge-base --is-ancestor A B
-	then
-		... A is an ancestor of B ...
-	fi
+....
+if git merge-base --is-ancestor A B
+then
+	... A is an ancestor of B ...
+fi
+....
 
 instead.
 
@@ -154,13 +166,15 @@
 `origin/master` may have been rewound and rebuilt, leading to a
 history of this shape:
 
-	                 o---B2
-	                /
-	---o---o---B1--o---o---o---B (origin/master)
-	        \
-	         B0
-	          \
-	           D0---D1---D (topic)
+....
+		 o---B2
+		/
+---o---o---B1--o---o---o---B (origin/master)
+	\
+	 B0
+	  \
+	   D0---D1---D (topic)
+....
 
 where `origin/master` used to point at commits B0, B1, B2 and now it
 points at B, and your `topic` branch was started on top of it back
@@ -193,13 +207,15 @@
 will replay D0, D1 and D on top of B to create a new history of this
 shape:
 
-			 o---B2
-			/
-	---o---o---B1--o---o---o---B (origin/master)
-		\                   \
-		 B0                  D0'--D1'--D' (topic - updated)
-		  \
-		   D0---D1---D (topic - old)
+....
+		 o---B2
+		/
+---o---o---B1--o---o---o---B (origin/master)
+	\                   \
+	 B0                  D0'--D1'--D' (topic - updated)
+	  \
+	   D0---D1---D (topic - old)
+....
 
 A caveat is that older reflog entries in your repository may be
 expired by `git gc`.  If B0 no longer appears in the reflog of the
diff --git a/Documentation/git-merge-index.txt b/Documentation/git-merge-index.txt
index 02676fb..2ab84a9 100644
--- a/Documentation/git-merge-index.txt
+++ b/Documentation/git-merge-index.txt
@@ -54,20 +54,24 @@
 
 Examples:
 
-  torvalds@ppc970:~/merge-test> git merge-index cat MM
-  This is MM from the original tree.			# original
-  This is modified MM in the branch A.			# merge1
-  This is modified MM in the branch B.			# merge2
-  This is modified MM in the branch B.			# current contents
+----
+torvalds@ppc970:~/merge-test> git merge-index cat MM
+This is MM from the original tree.		# original
+This is modified MM in the branch A.		# merge1
+This is modified MM in the branch B.		# merge2
+This is modified MM in the branch B.		# current contents
+----
 
 or
 
-  torvalds@ppc970:~/merge-test> git merge-index cat AA MM
-  cat: : No such file or directory
-  This is added AA in the branch A.
-  This is added AA in the branch B.
-  This is added AA in the branch B.
-  fatal: merge program failed
+----
+torvalds@ppc970:~/merge-test> git merge-index cat AA MM
+cat: : No such file or directory
+This is added AA in the branch A.
+This is added AA in the branch B.
+This is added AA in the branch B.
+fatal: merge program failed
+----
 
 where the latter example shows how 'git merge-index' will stop trying to
 merge once anything has returned an error (i.e., `cat` returned an error
diff --git a/Documentation/git-merge.txt b/Documentation/git-merge.txt
index 01fd52d..092529c 100644
--- a/Documentation/git-merge.txt
+++ b/Documentation/git-merge.txt
@@ -10,7 +10,7 @@
 --------
 [verse]
 'git merge' [-n] [--stat] [--no-commit] [--squash] [--[no-]edit]
-	[-s <strategy>] [-X <strategy-option>] [-S[<keyid>]]
+	[--no-verify] [-s <strategy>] [-X <strategy-option>] [-S[<keyid>]]
 	[--[no-]allow-unrelated-histories]
 	[--[no-]rerere-autoupdate] [-m <msg>] [-F <file>] [<commit>...]
 'git merge' (--continue | --abort | --quit)
diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
index 6156609..639a417 100644
--- a/Documentation/git-rebase.txt
+++ b/Documentation/git-rebase.txt
@@ -8,8 +8,8 @@
 SYNOPSIS
 --------
 [verse]
-'git rebase' [-i | --interactive] [<options>] [--exec <cmd>] [--onto <newbase>]
-	[<upstream> [<branch>]]
+'git rebase' [-i | --interactive] [<options>] [--exec <cmd>]
+	[--onto <newbase> | --keep-base] [<upstream> [<branch>]]
 'git rebase' [-i | --interactive] [<options>] [--exec <cmd>] [--onto <newbase>]
 	--root [<branch>]
 'git rebase' (--continue | --skip | --abort | --quit | --edit-todo | --show-current-patch)
@@ -217,6 +217,24 @@
 merge base of A and B if there is exactly one merge base. You can
 leave out at most one of A and B, in which case it defaults to HEAD.
 
+--keep-base::
+	Set the starting point at which to create the new commits to the
+	merge base of <upstream> <branch>. Running
+	'git rebase --keep-base <upstream> <branch>' is equivalent to
+	running 'git rebase --onto <upstream>... <upstream>'.
++
+This option is useful in the case where one is developing a feature on
+top of an upstream branch. While the feature is being worked on, the
+upstream branch may advance and it may not be the best idea to keep
+rebasing on top of the upstream but to keep the base commit as-is.
++
+Although both this option and --fork-point find the merge base between
+<upstream> and <branch>, this option uses the merge base as the _starting
+point_ on which new commits will be created, whereas --fork-point uses
+the merge base to determine the _set of commits_ which will be rebased.
++
+See also INCOMPATIBLE OPTIONS below.
+
 <upstream>::
 	Upstream branch to compare against.  May be any valid commit,
 	not just an existing branch name. Defaults to the configured
@@ -369,6 +387,10 @@
 +
 If either <upstream> or --root is given on the command line, then the
 default is `--no-fork-point`, otherwise the default is `--fork-point`.
++
+If your branch was based on <upstream> but <upstream> was rewound and
+your branch contains commits which were dropped, this option can be used
+with `--keep-base` in order to drop those commits from your branch.
 
 --ignore-whitespace::
 --whitespace=<option>::
@@ -543,8 +565,8 @@
  * --preserve-merges and --interactive
  * --preserve-merges and --signoff
  * --preserve-merges and --rebase-merges
- * --rebase-merges and --strategy
- * --rebase-merges and --strategy-option
+ * --keep-base and --onto
+ * --keep-base and --root
 
 BEHAVIORAL DIFFERENCES
 -----------------------
@@ -832,7 +854,8 @@
 	This happens if the 'subsystem' rebase had conflicts, or used
 	`--interactive` to omit, edit, squash, or fixup commits; or
 	if the upstream used one of `commit --amend`, `reset`, or
-	`filter-branch`.
+	a full history rewriting command like
+	https://github.com/newren/git-filter-repo[`filter-repo`].
 
 
 The easy case
@@ -870,7 +893,7 @@
       --interactive` will be **resurrected**!
 
 The idea is to manually tell 'git rebase' "where the old 'subsystem'
-ended and your 'topic' began", that is, what the old merge-base
+ended and your 'topic' began", that is, what the old merge base
 between them was.  You will have to find a way to name the last commit
 of the old 'subsystem', for example:
 
diff --git a/Documentation/git-receive-pack.txt b/Documentation/git-receive-pack.txt
index dedf97e..25702ed 100644
--- a/Documentation/git-receive-pack.txt
+++ b/Documentation/git-receive-pack.txt
@@ -165,29 +165,31 @@
 certificates of signed pushes with good signatures to a logger
 service:
 
-	#!/bin/sh
-	# mail out commit update information.
-	while read oval nval ref
-	do
-		if expr "$oval" : '0*$' >/dev/null
-		then
-			echo "Created a new ref, with the following commits:"
-			git rev-list --pretty "$nval"
-		else
-			echo "New commits:"
-			git rev-list --pretty "$nval" "^$oval"
-		fi |
-		mail -s "Changes to ref $ref" commit-list@mydomain
-	done
-	# log signed push certificate, if any
-	if test -n "${GIT_PUSH_CERT-}" && test ${GIT_PUSH_CERT_STATUS} = G
+----
+#!/bin/sh
+# mail out commit update information.
+while read oval nval ref
+do
+	if expr "$oval" : '0*$' >/dev/null
 	then
-		(
-			echo expected nonce is ${GIT_PUSH_NONCE}
-			git cat-file blob ${GIT_PUSH_CERT}
-		) | mail -s "push certificate from $GIT_PUSH_CERT_SIGNER" push-log@mydomain
-	fi
-	exit 0
+		echo "Created a new ref, with the following commits:"
+		git rev-list --pretty "$nval"
+	else
+		echo "New commits:"
+		git rev-list --pretty "$nval" "^$oval"
+	fi |
+	mail -s "Changes to ref $ref" commit-list@mydomain
+done
+# log signed push certificate, if any
+if test -n "${GIT_PUSH_CERT-}" && test ${GIT_PUSH_CERT_STATUS} = G
+then
+	(
+		echo expected nonce is ${GIT_PUSH_NONCE}
+		git cat-file blob ${GIT_PUSH_CERT}
+	) | mail -s "push certificate from $GIT_PUSH_CERT_SIGNER" push-log@mydomain
+fi
+exit 0
+----
 
 The exit code from this hook invocation is ignored, however a
 non-zero exit code will generate an error message.
@@ -212,8 +214,10 @@
 This hook can be used, for example, to run `git update-server-info`
 if the repository is packed and is served via a dumb transport.
 
-	#!/bin/sh
-	exec git update-server-info
+----
+#!/bin/sh
+exec git update-server-info
+----
 
 
 QUARANTINE ENVIRONMENT
diff --git a/Documentation/git-replace.txt b/Documentation/git-replace.txt
index 246dc99..f271d75 100644
--- a/Documentation/git-replace.txt
+++ b/Documentation/git-replace.txt
@@ -123,10 +123,10 @@
 CREATING REPLACEMENT OBJECTS
 ----------------------------
 
-linkgit:git-filter-branch[1], linkgit:git-hash-object[1] and
-linkgit:git-rebase[1], among other git commands, can be used to create
-replacement objects from existing objects. The `--edit` option can
-also be used with 'git replace' to create a replacement object by
+linkgit:git-hash-object[1], linkgit:git-rebase[1], and
+https://github.com/newren/git-filter-repo[git-filter-repo], among other git commands, can be used to
+create replacement objects from existing objects. The `--edit` option
+can also be used with 'git replace' to create a replacement object by
 editing an existing object.
 
 If you want to replace many blobs, trees or commits that are part of a
@@ -148,13 +148,13 @@
 SEE ALSO
 --------
 linkgit:git-hash-object[1]
-linkgit:git-filter-branch[1]
 linkgit:git-rebase[1]
 linkgit:git-tag[1]
 linkgit:git-branch[1]
 linkgit:git-commit[1]
 linkgit:git-var[1]
 linkgit:git[1]
+https://github.com/newren/git-filter-repo[git-filter-repo]
 
 GIT
 ---
diff --git a/Documentation/git-rev-list.txt b/Documentation/git-rev-list.txt
index 9392760..025c911 100644
--- a/Documentation/git-rev-list.txt
+++ b/Documentation/git-rev-list.txt
@@ -9,59 +9,7 @@
 SYNOPSIS
 --------
 [verse]
-'git rev-list' [ --max-count=<number> ]
-	     [ --skip=<number> ]
-	     [ --max-age=<timestamp> ]
-	     [ --min-age=<timestamp> ]
-	     [ --sparse ]
-	     [ --merges ]
-	     [ --no-merges ]
-	     [ --min-parents=<number> ]
-	     [ --no-min-parents ]
-	     [ --max-parents=<number> ]
-	     [ --no-max-parents ]
-	     [ --first-parent ]
-	     [ --remove-empty ]
-	     [ --full-history ]
-	     [ --not ]
-	     [ --all ]
-	     [ --branches[=<pattern>] ]
-	     [ --tags[=<pattern>] ]
-	     [ --remotes[=<pattern>] ]
-	     [ --glob=<glob-pattern> ]
-	     [ --ignore-missing ]
-	     [ --stdin ]
-	     [ --quiet ]
-	     [ --topo-order ]
-	     [ --parents ]
-	     [ --timestamp ]
-	     [ --left-right ]
-	     [ --left-only ]
-	     [ --right-only ]
-	     [ --cherry-mark ]
-	     [ --cherry-pick ]
-	     [ --encoding=<encoding> ]
-	     [ --(author|committer|grep)=<pattern> ]
-	     [ --regexp-ignore-case | -i ]
-	     [ --extended-regexp | -E ]
-	     [ --fixed-strings | -F ]
-	     [ --date=<format>]
-	     [ [ --objects | --objects-edge | --objects-edge-aggressive ]
-	       [ --unpacked ]
-	       [ --object-names | --no-object-names ]
-	       [ --filter=<filter-spec> [ --filter-print-omitted ] ] ]
-	     [ --missing=<missing-action> ]
-	     [ --pretty | --header ]
-	     [ --bisect ]
-	     [ --bisect-vars ]
-	     [ --bisect-all ]
-	     [ --merge ]
-	     [ --reverse ]
-	     [ --walk-reflogs ]
-	     [ --no-walk ] [ --do-walk ]
-	     [ --count ]
-	     [ --use-bitmap-index ]
-	     <commit>... [ \-- <paths>... ]
+'git rev-list' [<options>] <commit>... [[--] <path>...]
 
 DESCRIPTION
 -----------
diff --git a/Documentation/git-send-email.txt b/Documentation/git-send-email.txt
index d93e5d0..0a69810 100644
--- a/Documentation/git-send-email.txt
+++ b/Documentation/git-send-email.txt
@@ -486,11 +486,13 @@
 To use 'git send-email' to send your patches through the GMail SMTP server,
 edit ~/.gitconfig to specify your account settings:
 
-	[sendemail]
-		smtpEncryption = tls
-		smtpServer = smtp.gmail.com
-		smtpUser = yourname@gmail.com
-		smtpServerPort = 587
+----
+[sendemail]
+	smtpEncryption = tls
+	smtpServer = smtp.gmail.com
+	smtpUser = yourname@gmail.com
+	smtpServerPort = 587
+----
 
 If you have multifactor authentication setup on your gmail account, you will
 need to generate an app-specific password for use with 'git send-email'. Visit
diff --git a/Documentation/git-stash.txt b/Documentation/git-stash.txt
index 8fbe12c..53e1a12 100644
--- a/Documentation/git-stash.txt
+++ b/Documentation/git-stash.txt
@@ -87,8 +87,9 @@
 save [-p|--patch] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [<message>]::
 
 	This option is deprecated in favour of 'git stash push'.  It
-	differs from "stash push" in that it cannot take pathspecs,
-	and any non-option arguments form the message.
+	differs from "stash push" in that it cannot take pathspecs.
+	Instead, all non-option arguments are concatenated to form the stash
+	message.
 
 list [<options>]::
 
diff --git a/Documentation/git-status.txt b/Documentation/git-status.txt
index d4e8f24..7731b45 100644
--- a/Documentation/git-status.txt
+++ b/Documentation/git-status.txt
@@ -59,16 +59,17 @@
 --untracked-files[=<mode>]::
 	Show untracked files.
 +
+--
 The mode parameter is used to specify the handling of untracked files.
 It is optional: it defaults to 'all', and if specified, it must be
 stuck to the option (e.g. `-uno`, but not `-u no`).
-+
+
 The possible options are:
-+
+
 	- 'no'     - Show no untracked files.
 	- 'normal' - Shows untracked files and directories.
 	- 'all'    - Also shows individual files in untracked directories.
-+
+
 When `-u` option is not used, untracked files and directories are
 shown (i.e. the same as specifying `normal`), to help you avoid
 forgetting to add newly created files.  Because it takes extra work
@@ -78,9 +79,10 @@
 `git update-index --untracked-cache` and `git update-index
 --split-index`), Otherwise you can use `no` to have `git status`
 return more quickly without showing untracked files.
-+
+
 The default can be changed using the status.showUntrackedFiles
 configuration variable documented in linkgit:git-config[1].
+--
 
 --ignore-submodules[=<when>]::
 	Ignore changes to submodules when looking for changes. <when> can be
@@ -100,11 +102,12 @@
 --ignored[=<mode>]::
 	Show ignored files as well.
 +
+--
 The mode parameter is used to specify the handling of ignored files.
 It is optional: it defaults to 'traditional'.
-+
+
 The possible options are:
-+
+
 	- 'traditional' - Shows ignored files and directories, unless
 			  --untracked-files=all is specified, in which case
 			  individual files in ignored directories are
@@ -112,12 +115,13 @@
 	- 'no'	        - Show no ignored files.
 	- 'matching'    - Shows ignored files and directories matching an
 			  ignore pattern.
-+
+
 When 'matching' mode is specified, paths that explicitly match an
 ignored pattern are shown. If a directory matches an ignore pattern,
 then it is shown, but not paths contained in the ignored directory. If
 a directory does not match an ignore pattern, but all contents are
 ignored, then the directory is not shown, but all contents are shown.
+--
 
 -z::
 	Terminate entries with NUL, instead of LF.  This implies
diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt
index 0ed5c24..1f46380 100644
--- a/Documentation/git-submodule.txt
+++ b/Documentation/git-submodule.txt
@@ -173,7 +173,8 @@
 If `--recursive` is specified, this command will recurse into the
 registered submodules, and update any nested submodules within.
 --
-set-branch ((-d|--default)|(-b|--branch <branch>)) [--] <path>::
+set-branch (-b|--branch) <branch> [--] <path>::
+set-branch (-d|--default) [--] <path>::
 	Sets the default remote tracking branch for the submodule. The
 	`--branch` option allows the remote branch to be specified. The
 	`--default` option removes the submodule.<name>.branch configuration
diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt
index 3071162..53774f5 100644
--- a/Documentation/git-svn.txt
+++ b/Documentation/git-svn.txt
@@ -769,11 +769,11 @@
 +
 This option is NOT recommended as it makes it difficult to track down
 old references to SVN revision numbers in existing documentation, bug
-reports and archives.  If you plan to eventually migrate from SVN to Git
-and are certain about dropping SVN history, consider
-linkgit:git-filter-branch[1] instead.  filter-branch also allows
-reformatting of metadata for ease-of-reading and rewriting authorship
-info for non-"svn.authorsFile" users.
+reports, and archives.  If you plan to eventually migrate from SVN to
+Git and are certain about dropping SVN history, consider
+https://github.com/newren/git-filter-repo[git-filter-repo] instead.
+filter-repo also allows reformatting of metadata for ease-of-reading
+and rewriting authorship info for non-"svn.authorsFile" users.
 
 svn.useSvmProps::
 svn-remote.<name>.useSvmProps::
diff --git a/Documentation/gitattributes.txt b/Documentation/gitattributes.txt
index fb1d188..c5a528c 100644
--- a/Documentation/gitattributes.txt
+++ b/Documentation/gitattributes.txt
@@ -810,6 +810,8 @@
 
 - `css` suitable for cascading style sheets.
 
+- `dts` suitable for devicetree (DTS) files.
+
 - `fortran` suitable for source code in the Fortran language.
 
 - `fountain` suitable for Fountain documents.
diff --git a/Documentation/gitcli.txt b/Documentation/gitcli.txt
index 1ed3ca3..4b32876 100644
--- a/Documentation/gitcli.txt
+++ b/Documentation/gitcli.txt
@@ -37,6 +37,12 @@
    file called HEAD in your work tree, `git diff HEAD` is ambiguous, and
    you have to say either `git diff HEAD --` or `git diff -- HEAD` to
    disambiguate.
+
+ * Because `--` disambiguates revisions and paths in some commands, it
+   cannot be used for those commands to separate options and revisions.
+   You can use `--end-of-options` for this (it also works for commands
+   that do not distinguish between revisions in paths, in which case it
+   is simply an alias for `--`).
 +
 When writing a script that is expected to handle random user-input, it is
 a good practice to make it explicit which arguments are which by placing
diff --git a/Documentation/githooks.txt b/Documentation/githooks.txt
index 82cd573..50365f2 100644
--- a/Documentation/githooks.txt
+++ b/Documentation/githooks.txt
@@ -103,6 +103,28 @@
 `hooks.allownonascii` config option unset or set to false--prevents
 the use of non-ASCII filenames.
 
+pre-merge-commit
+~~~~~~~~~~~~~~~~
+
+This hook is invoked by linkgit:git-merge[1], and can be bypassed
+with the `--no-verify` option.  It takes no parameters, and is
+invoked after the merge has been carried out successfully and before
+obtaining the proposed commit log message to
+make a commit.  Exiting with a non-zero status from this script
+causes the `git merge` command to abort before creating a commit.
+
+The default 'pre-merge-commit' hook, when enabled, runs the
+'pre-commit' hook, if the latter is enabled.
+
+This hook is invoked with the environment variable
+`GIT_EDITOR=:` if the command will not bring up an editor
+to modify the commit message.
+
+If the merge cannot be carried out automatically, the conflicts
+need to be resolved and the result committed separately (see
+linkgit:git-merge[1]). At that point, this hook will not be executed,
+but the 'pre-commit' hook will, if it is enabled.
+
 prepare-commit-msg
 ~~~~~~~~~~~~~~~~~~
 
@@ -425,10 +447,12 @@
 
 This hook is invoked by commands that rewrite commits
 (linkgit:git-commit[1] when called with `--amend` and
-linkgit:git-rebase[1]; currently `git filter-branch` does 'not' call
-it!).  Its first argument denotes the command it was invoked by:
-currently one of `amend` or `rebase`.  Further command-dependent
-arguments may be passed in the future.
+linkgit:git-rebase[1]; however, full-history (re)writing tools like
+linkgit:git-fast-import[1] or
+https://github.com/newren/git-filter-repo[git-filter-repo] typically
+do not call it!).  Its first argument denotes the command it was
+invoked by: currently one of `amend` or `rebase`.  Further
+command-dependent arguments may be passed in the future.
 
 The hook receives a list of the rewritten commits on stdin, in the
 format
diff --git a/Documentation/gitmodules.txt b/Documentation/gitmodules.txt
index f260b55..ba9ec5b 100644
--- a/Documentation/gitmodules.txt
+++ b/Documentation/gitmodules.txt
@@ -89,7 +89,7 @@
 .gitmodules.
 
 Both settings can be overridden on the command line by using the
-"--ignore-submodule" option. The 'git submodule' commands are not
+"--ignore-submodules" option. The 'git submodule' commands are not
 affected by this setting.
 --
 
@@ -104,14 +104,15 @@
 
 Consider the following .gitmodules file:
 
-	[submodule "libfoo"]
-		path = include/foo
-		url = git://foo.com/git/lib.git
+----
+[submodule "libfoo"]
+	path = include/foo
+	url = git://foo.com/git/lib.git
 
-	[submodule "libbar"]
-		path = include/bar
-		url = git://bar.com/git/lib.git
-
+[submodule "libbar"]
+	path = include/bar
+	url = git://bar.com/git/lib.git
+----
 
 This defines two submodules, `libfoo` and `libbar`. These are expected to
 be checked out in the paths `include/foo` and `include/bar`, and for both
diff --git a/Documentation/gitremote-helpers.txt b/Documentation/gitremote-helpers.txt
index 43f80c8..f48a031 100644
--- a/Documentation/gitremote-helpers.txt
+++ b/Documentation/gitremote-helpers.txt
@@ -297,9 +297,13 @@
 	same batch are complete. Only objects which were reported
 	in the output of 'list' with a sha1 may be fetched this way.
 +
-Optionally may output a 'lock <file>' line indicating a file under
-GIT_DIR/objects/pack which is keeping a pack until refs can be
-suitably updated.
+Optionally may output a 'lock <file>' line indicating the full path of
+a file under `$GIT_DIR/objects/pack` which is keeping a pack until
+refs can be suitably updated.  The path must end with `.keep`. This is
+a mechanism to name a <pack,idx,keep> tuple by giving only the keep
+component.  The kept pack will not be deleted by a concurrent repack,
+even though its objects may not be referenced until the fetch completes.
+The `.keep` file will be deleted at the conclusion of the fetch.
 +
 If option 'check-connectivity' is requested, the helper must output
 'connectivity-ok' if the clone is self-contained and connected.
@@ -505,6 +509,11 @@
 	Indicate that only the objects wanted need to be fetched, not
 	their dependents.
 
+'option atomic' {'true'|'false'}::
+	When pushing, request the remote server to update refs in a single atomic
+	transaction.  If successful, all refs will be updated, or none will.  If the
+	remote side does not support this capability, the push will fail.
+
 SEE ALSO
 --------
 linkgit:git-remote[1]
diff --git a/Documentation/gitrepository-layout.txt b/Documentation/gitrepository-layout.txt
index 216b11e..d6388f1 100644
--- a/Documentation/gitrepository-layout.txt
+++ b/Documentation/gitrepository-layout.txt
@@ -59,7 +59,7 @@
 	here are often called 'unpacked' (or 'loose') objects.
 
 objects/pack::
-	Packs (files that store many object in compressed form,
+	Packs (files that store many objects in compressed form,
 	along with index files to allow them to be randomly
 	accessed) are found in this directory.
 
diff --git a/Documentation/gitweb.conf.txt b/Documentation/gitweb.conf.txt
index 35317e7..7963a79 100644
--- a/Documentation/gitweb.conf.txt
+++ b/Documentation/gitweb.conf.txt
@@ -786,9 +786,9 @@
 	subdirectories of project root (basename) to be forks of existing
 	projects.  For each project +$projname.git+, projects in the
 	+$projname/+ directory and its subdirectories will not be
-	shown in the main projects list.  Instead, a \'\+' mark is shown
-	next to +$projname+, which links to a "forks" view that lists all
-	the forks (all projects in +$projname/+ subdirectory).  Additionally
+	shown in the main projects list.  Instead, a \'+' mark is shown
+	next to `$projname`, which links to a "forks" view that lists all
+	the forks (all projects in `$projname/` subdirectory).  Additionally
 	a "forks" view for a project is linked from project summary page.
 +
 If the project list is taken from a file (+$projects_list+ points to a
diff --git a/Documentation/manpage-bold-literal.xsl b/Documentation/manpage-bold-literal.xsl
index 608eb5d..94d6c1b 100644
--- a/Documentation/manpage-bold-literal.xsl
+++ b/Documentation/manpage-bold-literal.xsl
@@ -1,12 +1,13 @@
 <!-- manpage-bold-literal.xsl:
      special formatting for manpages rendered from asciidoc+docbook -->
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+		xmlns:d="http://docbook.org/ns/docbook"
 		version="1.0">
 
 <!-- render literal text as bold (instead of plain or monospace);
      this makes literal text easier to distinguish in manpages
      viewed on a tty -->
-<xsl:template match="literal">
+<xsl:template match="literal|d:literal">
 	<xsl:value-of select="$git.docbook.backslash"/>
 	<xsl:text>fB</xsl:text>
 	<xsl:apply-templates/>
diff --git a/Documentation/manpage.xsl b/Documentation/manpage.xsl
new file mode 100644
index 0000000..ef64bab
--- /dev/null
+++ b/Documentation/manpage.xsl
@@ -0,0 +1,3 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+	<xsl:import href="http://docbook.sourceforge.net/release/xsl-ns/current/manpages/docbook.xsl" />
+</xsl:stylesheet>
diff --git a/Documentation/merge-options.txt b/Documentation/merge-options.txt
index 79a00d2..59b8ff1 100644
--- a/Documentation/merge-options.txt
+++ b/Documentation/merge-options.txt
@@ -40,20 +40,24 @@
 	case of a merge conflict.
 
 --ff::
-	When the merge resolves as a fast-forward, only update the branch
-	pointer, without creating a merge commit.  This is the default
-	behavior.
-
 --no-ff::
-	Create a merge commit even when the merge resolves as a
-	fast-forward.  This is the default behaviour when merging an
-	annotated (and possibly signed) tag that is not stored in
-	its natural place in 'refs/tags/' hierarchy.
-
 --ff-only::
-	Refuse to merge and exit with a non-zero status unless the
-	current `HEAD` is already up to date or the merge can be
-	resolved as a fast-forward.
+	Specifies how a merge is handled when the merged-in history is
+	already a descendant of the current history.  `--ff` is the
+	default unless merging an annotated (and possibly signed) tag
+	that is not stored in its natural place in the `refs/tags/`
+	hierarchy, in which case `--no-ff` is assumed.
++
+With `--ff`, when possible resolve the merge as a fast-forward (only
+update the branch pointer to match the merged branch; do not create a
+merge commit).  When not possible (when the merged-in history is not a
+descendant of the current history), create a merge commit.
++
+With `--no-ff`, create a merge commit in all cases, even when the merge
+could instead be resolved as a fast-forward.
++
+With `--ff-only`, resolve the merge as a fast-forward when possible.
+When not possible, refuse to merge and exit with a non-zero status.
 
 -S[<keyid>]::
 --gpg-sign[=<keyid>]::
@@ -105,6 +109,10 @@
 +
 With --squash, --commit is not allowed, and will fail.
 
+--no-verify::
+	This option bypasses the pre-merge and commit-msg hooks.
+	See also linkgit:githooks[5].
+
 -s <strategy>::
 --strategy=<strategy>::
 	Use the given merge strategy; can be supplied more than
diff --git a/Documentation/pretty-formats.txt b/Documentation/pretty-formats.txt
index 0795983..b87e2e8 100644
--- a/Documentation/pretty-formats.txt
+++ b/Documentation/pretty-formats.txt
@@ -208,7 +208,7 @@
 '%GP':: show the fingerprint of the primary key whose subkey was used
 	to sign a signed commit
 '%gD':: reflog selector, e.g., `refs/stash@{1}` or `refs/stash@{2
-	minutes ago`}; the format follows the rules described for the
+	minutes ago}`; the format follows the rules described for the
 	`-g` option. The portion before the `@` is the refname as
 	given on the command line (so `git log -g refs/heads/master`
 	would yield `refs/heads/master@{0}`).
diff --git a/Documentation/rev-list-options.txt b/Documentation/rev-list-options.txt
index bb1251c..90ff9e2 100644
--- a/Documentation/rev-list-options.txt
+++ b/Documentation/rev-list-options.txt
@@ -756,6 +756,22 @@
 Note that the form '--filter=sparse:path=<path>' that wants to read
 from an arbitrary path on the filesystem has been dropped for security
 reasons.
++
+Multiple '--filter=' flags can be specified to combine filters. Only
+objects which are accepted by every filter are included.
++
+The form '--filter=combine:<filter1>+<filter2>+...<filterN>' can also be
+used to combined several filters, but this is harder than just repeating
+the '--filter' flag and is usually not necessary. Filters are joined by
+'{plus}' and individual filters are %-encoded (i.e. URL-encoded).
+Besides the '{plus}' and '%' characters, the following characters are
+reserved and also must be encoded: `~!@#$^&*()[]{}\;",<>?`+&#39;&#96;+
+as well as all characters with ASCII code &lt;= `0x20`, which includes
+space and newline.
++
+Other arbitrary characters can also be encoded. For instance,
+'combine:tree:3+blob:none' and 'combine:tree%3A3+blob%3Anone' are
+equivalent.
 
 --no-filter::
 	Turn off any previous `--filter=` argument.
diff --git a/Documentation/technical/api-directory-listing.txt b/Documentation/technical/api-directory-listing.txt
index 5abb8e8..76b6e4f 100644
--- a/Documentation/technical/api-directory-listing.txt
+++ b/Documentation/technical/api-directory-listing.txt
@@ -111,11 +111,11 @@
 * Prepare `struct dir_struct dir` and clear it with `memset(&dir, 0,
   sizeof(dir))`.
 
-* To add single exclude pattern, call `add_exclude_list()` and then
-  `add_exclude()`.
+* To add single exclude pattern, call `add_pattern_list()` and then
+  `add_pattern()`.
 
 * To add patterns from a file (e.g. `.git/info/exclude`), call
-  `add_excludes_from_file()` , and/or set `dir.exclude_per_dir`.  A
+  `add_patterns_from_file()` , and/or set `dir.exclude_per_dir`.  A
   short-hand function `setup_standard_excludes()` can be used to set
   up the standard set of exclude settings.
 
diff --git a/Documentation/technical/api-trace2.txt b/Documentation/technical/api-trace2.txt
index 71eb081..a045dbe 100644
--- a/Documentation/technical/api-trace2.txt
+++ b/Documentation/technical/api-trace2.txt
@@ -128,7 +128,7 @@
 
 ------------
 $ cat ~/log.event
-{"event":"version","sid":"sid":"20190408T191610.507018Z-H9b68c35f-P000059a8","thread":"main","time":"2019-01-16T17:28:42.620713Z","file":"common-main.c","line":38,"evt":"1","exe":"2.20.1.155.g426c96fcdb"}
+{"event":"version","sid":"sid":"20190408T191610.507018Z-H9b68c35f-P000059a8","thread":"main","time":"2019-01-16T17:28:42.620713Z","file":"common-main.c","line":38,"evt":"2","exe":"2.20.1.155.g426c96fcdb"}
 {"event":"start","sid":"20190408T191610.507018Z-H9b68c35f-P000059a8","thread":"main","time":"2019-01-16T17:28:42.621027Z","file":"common-main.c","line":39,"t_abs":0.001173,"argv":["git","version"]}
 {"event":"cmd_name","sid":"20190408T191610.507018Z-H9b68c35f-P000059a8","thread":"main","time":"2019-01-16T17:28:42.621122Z","file":"git.c","line":432,"name":"version","hierarchy":"version"}
 {"event":"exit","sid":"20190408T191610.507018Z-H9b68c35f-P000059a8","thread":"main","time":"2019-01-16T17:28:42.621236Z","file":"git.c","line":662,"t_abs":0.001227,"code":0}
@@ -142,10 +142,9 @@
 
 include::../trace2-target-values.txt[]
 
-If the target already exists and is a directory, the traces will be
-written to files (one per process) underneath the given directory. They
-will be named according to the last component of the SID (optionally
-followed by a counter to avoid filename collisions).
+When trace files are written to a target directory, they will be named according
+to the last component of the SID (optionally followed by a counter to avoid
+filename collisions).
 
 == Trace2 API
 
@@ -605,17 +604,35 @@
 ==== Event-Specific Key/Value Pairs
 
 `"version"`::
-	This event gives the version of the executable and the EVENT format.
+	This event gives the version of the executable and the EVENT format. It
+	should always be the first event in a trace session. The EVENT format
+	version will be incremented if new event types are added, if existing
+	fields are removed, or if there are significant changes in
+	interpretation of existing events or fields. Smaller changes, such as
+	adding a new field to an existing event, will not require an increment
+	to the EVENT format version.
 +
 ------------
 {
 	"event":"version",
 	...
-	"evt":"1",		       # EVENT format version
+	"evt":"2",		       # EVENT format version
 	"exe":"2.20.1.155.g426c96fcdb" # git version
 }
 ------------
 
+`"discard"`::
+	This event is written to the git-trace2-discard sentinel file if there
+	are too many files in the target trace directory (see the
+	trace2.maxFiles config option).
++
+------------
+{
+	"event":"discard",
+	...
+}
+------------
+
 `"start"`::
 	This event contains the complete argv received by main().
 +
diff --git a/Documentation/technical/api-tree-walking.txt b/Documentation/technical/api-tree-walking.txt
index bde1862..7962e32 100644
--- a/Documentation/technical/api-tree-walking.txt
+++ b/Documentation/technical/api-tree-walking.txt
@@ -62,9 +62,7 @@
 `setup_traverse_info`::
 
 	Initialize a `traverse_info` given the pathname of the tree to start
-	traversing from. The `base` argument is assumed to be the `path`
-	member of the `name_entry` being recursed into unless the tree is a
-	top-level tree in which case the empty string ("") is used.
+	traversing from.
 
 Walking
 -------
@@ -140,6 +138,10 @@
 	This utilizes the memory structure of a tree entry to avoid the
 	overhead of using a generic strlen().
 
+`strbuf_make_traverse_path`::
+
+	Convenience wrapper to `make_traverse_path` into a strbuf.
+
 Authors
 -------
 
diff --git a/Documentation/technical/partial-clone.txt b/Documentation/technical/partial-clone.txt
index 896c7b3..210373e 100644
--- a/Documentation/technical/partial-clone.txt
+++ b/Documentation/technical/partial-clone.txt
@@ -30,12 +30,20 @@
 times and disk usage.  Missing objects can later be "demand fetched"
 if/when needed.
 
+A remote that can later provide the missing objects is called a
+promisor remote, as it promises to send the objects when
+requested. Initialy Git supported only one promisor remote, the origin
+remote from which the user cloned and that was configured in the
+"extensions.partialClone" config option. Later support for more than
+one promisor remote has been implemented.
+
 Use of partial clone requires that the user be online and the origin
-remote be available for on-demand fetching of missing objects.  This may
-or may not be problematic for the user.  For example, if the user can
-stay within the pre-selected subset of the source tree, they may not
-encounter any missing objects.  Alternatively, the user could try to
-pre-fetch various objects if they know that they are going offline.
+remote or other promisor remotes be available for on-demand fetching
+of missing objects.  This may or may not be problematic for the user.
+For example, if the user can stay within the pre-selected subset of
+the source tree, they may not encounter any missing objects.
+Alternatively, the user could try to pre-fetch various objects if they
+know that they are going offline.
 
 
 Non-Goals
@@ -100,18 +108,18 @@
 Handling Missing Objects
 ------------------------
 
-- An object may be missing due to a partial clone or fetch, or missing due
-  to repository corruption.  To differentiate these cases, the local
-  repository specially indicates such filtered packfiles obtained from the
-  promisor remote as "promisor packfiles".
+- An object may be missing due to a partial clone or fetch, or missing
+  due to repository corruption.  To differentiate these cases, the
+  local repository specially indicates such filtered packfiles
+  obtained from promisor remotes as "promisor packfiles".
 +
 These promisor packfiles consist of a "<name>.promisor" file with
 arbitrary contents (like the "<name>.keep" files), in addition to
 their "<name>.pack" and "<name>.idx" files.
 
 - The local repository considers a "promisor object" to be an object that
-  it knows (to the best of its ability) that the promisor remote has promised
-  that it has, either because the local repository has that object in one of
+  it knows (to the best of its ability) that promisor remotes have promised
+  that they have, either because the local repository has that object in one of
   its promisor packfiles, or because another promisor object refers to it.
 +
 When Git encounters a missing object, Git can see if it is a promisor object
@@ -123,12 +131,12 @@
 - Since almost all Git code currently expects any referenced object to be
   present locally and because we do not want to force every command to do
   a dry-run first, a fallback mechanism is added to allow Git to attempt
-  to dynamically fetch missing objects from the promisor remote.
+  to dynamically fetch missing objects from promisor remotes.
 +
 When the normal object lookup fails to find an object, Git invokes
-fetch-object to try to get the object from the server and then retry
-the object lookup.  This allows objects to be "faulted in" without
-complicated prediction algorithms.
+promisor_remote_get_direct() to try to get the object from a promisor
+remote and then retry the object lookup.  This allows objects to be
+"faulted in" without complicated prediction algorithms.
 +
 For efficiency reasons, no check as to whether the missing object is
 actually a promisor object is performed.
@@ -157,8 +165,7 @@
 +
 We are not happy with this global variable and would like to remove it,
 but that requires significant refactoring of the object code to pass an
-additional flag.  We hope that concurrent efforts to add an ODB API can
-encompass this.
+additional flag.
 
 
 Fetching Missing Objects
@@ -182,21 +189,63 @@
   though they are not necessary.
 
 
+Using many promisor remotes
+---------------------------
+
+Many promisor remotes can be configured and used.
+
+This allows for example a user to have multiple geographically-close
+cache servers for fetching missing blobs while continuing to do
+filtered `git-fetch` commands from the central server.
+
+When fetching objects, promisor remotes are tried one after the other
+until all the objects have been fetched.
+
+Remotes that are considered "promisor" remotes are those specified by
+the following configuration variables:
+
+- `extensions.partialClone = <name>`
+
+- `remote.<name>.promisor = true`
+
+- `remote.<name>.partialCloneFilter = ...`
+
+Only one promisor remote can be configured using the
+`extensions.partialClone` config variable. This promisor remote will
+be the last one tried when fetching objects.
+
+We decided to make it the last one we try, because it is likely that
+someone using many promisor remotes is doing so because the other
+promisor remotes are better for some reason (maybe they are closer or
+faster for some kind of objects) than the origin, and the origin is
+likely to be the remote specified by extensions.partialClone.
+
+This justification is not very strong, but one choice had to be made,
+and anyway the long term plan should be to make the order somehow
+fully configurable.
+
+For now though the other promisor remotes will be tried in the order
+they appear in the config file.
+
 Current Limitations
 -------------------
 
-- The remote used for a partial clone (or the first partial fetch
-  following a regular clone) is marked as the "promisor remote".
+- It is not possible to specify the order in which the promisor
+  remotes are tried in other ways than the order in which they appear
+  in the config file.
 +
-We are currently limited to a single promisor remote and only that
-remote may be used for subsequent partial fetches.
-+
-We accept this limitation because we believe initial users of this
-feature will be using it on repositories with a strong single central
-server.
+It is also not possible to specify an order to be used when fetching
+from one remote and a different order when fetching from another
+remote.
 
-- Dynamic object fetching will only ask the promisor remote for missing
-  objects.  We assume that the promisor remote has a complete view of the
+- It is not possible to push only specific objects to a promisor
+  remote.
++
+It is not possible to push at the same time to multiple promisor
+remote in a specific order.
+
+- Dynamic object fetching will only ask promisor remotes for missing
+  objects.  We assume that promisor remotes have a complete view of the
   repository and can satisfy all such requests.
 
 - Repack essentially treats promisor and non-promisor packfiles as 2
@@ -218,15 +267,17 @@
 Future Work
 -----------
 
-- Allow more than one promisor remote and define a strategy for fetching
-  missing objects from specific promisor remotes or of iterating over the
-  set of promisor remotes until a missing object is found.
+- Improve the way to specify the order in which promisor remotes are
+  tried.
 +
-A user might want to have multiple geographically-close cache servers
-for fetching missing blobs while continuing to do filtered `git-fetch`
-commands from the central server, for example.
+For example this could allow to specify explicitly something like:
+"When fetching from this remote, I want to use these promisor remotes
+in this order, though, when pushing or fetching to that remote, I want
+to use those promisor remotes in that order."
+
+- Allow pushing to promisor remotes.
 +
-Or the user might want to work in a triangular work flow with multiple
+The user might want to work in a triangular work flow with multiple
 promisor remotes that each have an incomplete view of the repository.
 
 - Allow repack to work on promisor packfiles (while keeping them distinct
diff --git a/Documentation/trace2-target-values.txt b/Documentation/trace2-target-values.txt
index 27d3c64..3985b6d 100644
--- a/Documentation/trace2-target-values.txt
+++ b/Documentation/trace2-target-values.txt
@@ -2,7 +2,9 @@
 * `0` or `false` - Disables the target.
 * `1` or `true` - Writes to `STDERR`.
 * `[2-9]` - Writes to the already opened file descriptor.
-* `<absolute-pathname>` - Writes to the file in append mode.
+* `<absolute-pathname>` - Writes to the file in append mode. If the target
+already exists and is a directory, the traces will be written to files (one
+per process) underneath the given directory.
 * `af_unix:[<socket_type>:]<absolute-pathname>` - Write to a
 Unix DomainSocket (on platforms that support them).  Socket
 type can be either `stream` or `dgram`; if omitted Git will
diff --git a/Documentation/user-manual.txt b/Documentation/user-manual.txt
index 8bce75b..06bd899 100644
--- a/Documentation/user-manual.txt
+++ b/Documentation/user-manual.txt
@@ -1,5 +1,4 @@
-Git User Manual
-===============
+= Git User Manual
 
 Git is a fast distributed revision control system.
 
@@ -41,12 +40,10 @@
 
 
 [[repositories-and-branches]]
-Repositories and Branches
-=========================
+== Repositories and Branches
 
 [[how-to-get-a-git-repository]]
-How to get a Git repository
----------------------------
+=== How to get a Git repository
 
 It will be useful to have a Git repository to experiment with as you
 read this manual.
@@ -73,8 +70,7 @@
 about the history of the project.
 
 [[how-to-check-out]]
-How to check out a different version of a project
--------------------------------------------------
+=== How to check out a different version of a project
 
 Git is best thought of as a tool for storing the history of a collection
 of files.  It stores the history as a compressed collection of
@@ -151,8 +147,7 @@
 carefully.
 
 [[understanding-commits]]
-Understanding History: Commits
-------------------------------
+=== Understanding History: Commits
 
 Every change in the history of a project is represented by a commit.
 The linkgit:git-show[1] command shows the most recent commit on the
@@ -202,8 +197,7 @@
 with a name that is a hash of its contents.
 
 [[understanding-reachability]]
-Understanding history: commits, parents, and reachability
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Understanding history: commits, parents, and reachability
 
 Every commit (except the very first commit in a project) also has a
 parent commit which shows what happened before this commit.
@@ -227,8 +221,7 @@
 leading from commit Y to commit X.
 
 [[history-diagrams]]
-Understanding history: History diagrams
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Understanding history: History diagrams
 
 We will sometimes represent Git history using diagrams like the one
 below.  Commits are shown as "o", and the links between them with
@@ -247,8 +240,7 @@
 be replaced with another letter or number.
 
 [[what-is-a-branch]]
-Understanding history: What is a branch?
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Understanding history: What is a branch?
 
 When we need to be precise, we will use the word "branch" to mean a line
 of development, and "branch head" (or just "head") to mean a reference
@@ -261,8 +253,7 @@
 "branch" both for branches and for branch heads.
 
 [[manipulating-branches]]
-Manipulating branches
----------------------
+=== Manipulating branches
 
 Creating, deleting, and modifying branches is quick and easy; here's
 a summary of the commands:
@@ -299,8 +290,7 @@
 ------------------------------------------------
 
 [[detached-head]]
-Examining an old version without creating a new branch
-------------------------------------------------------
+=== Examining an old version without creating a new branch
 
 The `git switch` command normally expects a branch head, but will also
 accept an arbitrary commit when invoked with --detach; for example,
@@ -340,8 +330,7 @@
 (or tag) for this version later if you decide to.
 
 [[examining-remote-branches]]
-Examining branches from a remote repository
--------------------------------------------
+=== Examining branches from a remote repository
 
 The "master" branch that was created at the time you cloned is a copy
 of the HEAD in the repository that you cloned from.  That repository
@@ -383,8 +372,7 @@
 to refer to the repository that you cloned from.
 
 [[how-git-stores-references]]
-Naming branches, tags, and other references
--------------------------------------------
+=== Naming branches, tags, and other references
 
 Branches, remote-tracking branches, and tags are all references to
 commits.  All references are named with a slash-separated path name
@@ -413,8 +401,7 @@
 REVISIONS" section of linkgit:gitrevisions[7].
 
 [[Updating-a-repository-With-git-fetch]]
-Updating a repository with git fetch
-------------------------------------
+=== Updating a repository with git fetch
 
 After you clone a repository and commit a few changes of your own, you
 may wish to check the original repository for updates.
@@ -425,8 +412,7 @@
 "master" branch that was created for you on clone.
 
 [[fetching-branches]]
-Fetching branches from other repositories
------------------------------------------
+=== Fetching branches from other repositories
 
 You can also track branches from repositories other than the one you
 cloned from, using linkgit:git-remote[1]:
@@ -474,8 +460,7 @@
 linkgit:git-config[1] for details.)
 
 [[exploring-git-history]]
-Exploring Git history
-=====================
+== Exploring Git history
 
 Git is best thought of as a tool for storing the history of a
 collection of files.  It does this by storing compressed snapshots of
@@ -489,8 +474,7 @@
 commit that introduced a bug into a project.
 
 [[using-bisect]]
-How to use bisect to find a regression
---------------------------------------
+=== How to use bisect to find a regression
 
 Suppose version 2.6.18 of your project worked, but the version at
 "master" crashes.  Sometimes the best way to find the cause of such a
@@ -572,8 +556,7 @@
 bisect` features.
 
 [[naming-commits]]
-Naming commits
---------------
+=== Naming commits
 
 We have seen several ways of naming commits already:
 
@@ -637,8 +620,7 @@
 -------------------------------------------------
 
 [[creating-tags]]
-Creating tags
--------------
+=== Creating tags
 
 We can also create a tag to refer to a particular commit; after
 running
@@ -655,8 +637,7 @@
 for details.
 
 [[browsing-revisions]]
-Browsing revisions
-------------------
+=== Browsing revisions
 
 The linkgit:git-log[1] command can show lists of commits.  On its
 own, it shows all commits reachable from the parent commit; but you
@@ -697,8 +678,7 @@
 commits are listed in may be somewhat arbitrary.
 
 [[generating-diffs]]
-Generating diffs
-----------------
+=== Generating diffs
 
 You can generate diffs between any two versions using
 linkgit:git-diff[1]:
@@ -726,8 +706,7 @@
 but not from master.
 
 [[viewing-old-file-versions]]
-Viewing old file versions
--------------------------
+=== Viewing old file versions
 
 You can always view an old version of a file by just checking out the
 correct revision first.  But sometimes it is more convenient to be
@@ -742,12 +721,10 @@
 may be any path to a file tracked by Git.
 
 [[history-examples]]
-Examples
---------
+=== Examples
 
 [[counting-commits-on-a-branch]]
-Counting the number of commits on a branch
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Counting the number of commits on a branch
 
 Suppose you want to know how many commits you've made on `mybranch`
 since it diverged from `origin`:
@@ -765,8 +742,7 @@
 -------------------------------------------------
 
 [[checking-for-equal-branches]]
-Check whether two branches point at the same history
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Check whether two branches point at the same history
 
 Suppose you want to check whether two branches point at the same point
 in history.
@@ -798,8 +774,7 @@
 will return no commits when the two branches are equal.
 
 [[finding-tagged-descendants]]
-Find first tagged version including a given fix
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Find first tagged version including a given fix
 
 Suppose you know that the commit e05db0fd fixed a certain problem.
 You'd like to find the earliest tagged release that contains that
@@ -883,8 +858,7 @@
 and from v1.5.0-rc2, and not from v1.5.0-rc0.
 
 [[showing-commits-unique-to-a-branch]]
-Showing commits unique to a given branch
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Showing commits unique to a given branch
 
 Suppose you would like to see all the commits reachable from the branch
 head named `master` but not from any other head in your repository.
@@ -931,8 +905,7 @@
 syntax such as `--not`.)
 
 [[making-a-release]]
-Creating a changelog and tarball for a software release
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Creating a changelog and tarball for a software release
 
 The linkgit:git-archive[1] command can create a tar or zip archive from
 any version of a project; for example:
@@ -983,8 +956,7 @@
 they look OK.
 
 [[Finding-commits-With-given-Content]]
-Finding commits referencing a file with given content
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Finding commits referencing a file with given content
 
 Somebody hands you a copy of a file, and asks which commits modified a
 file such that it contained the given content either before or after the
@@ -1000,12 +972,10 @@
 linkgit:git-hash-object[1] man pages may prove helpful.
 
 [[Developing-With-git]]
-Developing with Git
-===================
+== Developing with Git
 
 [[telling-git-your-name]]
-Telling Git your name
----------------------
+=== Telling Git your name
 
 Before creating any commits, you should introduce yourself to Git.
 The easiest way to do so is to use linkgit:git-config[1]:
@@ -1030,8 +1000,7 @@
 
 
 [[creating-a-new-repository]]
-Creating a new repository
--------------------------
+=== Creating a new repository
 
 Creating a new repository from scratch is very easy:
 
@@ -1052,8 +1021,7 @@
 -------------------------------------------------
 
 [[how-to-make-a-commit]]
-How to make a commit
---------------------
+=== How to make a commit
 
 Creating a new commit takes three steps:
 
@@ -1148,8 +1116,7 @@
 choosing "Stage Hunk For Commit").
 
 [[creating-good-commit-messages]]
-Creating good commit messages
------------------------------
+=== Creating good commit messages
 
 Though not required, it's a good idea to begin the commit message
 with a single short (less than 50 character) line summarizing the
@@ -1162,8 +1129,7 @@
 
 
 [[ignoring-files]]
-Ignoring files
---------------
+=== Ignoring files
 
 A project will often generate files that you do 'not' want to track with Git.
 This typically includes files generated by a build process or temporary
@@ -1205,8 +1171,7 @@
 command line.  See linkgit:gitignore[5] for the details.
 
 [[how-to-merge]]
-How to merge
-------------
+=== How to merge
 
 You can rejoin two diverging branches of development using
 linkgit:git-merge[1]:
@@ -1254,8 +1219,7 @@
 one to the top of the other branch.
 
 [[resolving-a-merge]]
-Resolving a merge
------------------
+=== Resolving a merge
 
 When a merge isn't resolved automatically, Git leaves the index and
 the working tree in a special state that gives you all the
@@ -1297,8 +1261,7 @@
 also provides more information to help resolve conflicts:
 
 [[conflict-resolution]]
-Getting conflict-resolution help during a merge
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Getting conflict-resolution help during a merge
 
 All of the changes that Git was able to merge automatically are
 already added to the index file, so linkgit:git-diff[1] shows only
@@ -1401,8 +1364,7 @@
 `git diff` will (by default) no longer show diffs for that file.
 
 [[undoing-a-merge]]
-Undoing a merge
----------------
+=== Undoing a merge
 
 If you get stuck and decide to just give up and throw the whole mess
 away, you can always return to the pre-merge state with
@@ -1423,8 +1385,7 @@
 further merges.
 
 [[fast-forwards]]
-Fast-forward merges
--------------------
+=== Fast-forward merges
 
 There is one special case not mentioned above, which is treated
 differently.  Normally, a merge results in a merge commit, with two
@@ -1438,8 +1399,7 @@
 created.
 
 [[fixing-mistakes]]
-Fixing mistakes
----------------
+=== Fixing mistakes
 
 If you've messed up the working tree, but haven't yet committed your
 mistake, you can return the entire working tree to the last committed
@@ -1463,8 +1423,7 @@
 	a branch that has had its history changed.
 
 [[reverting-a-commit]]
-Fixing a mistake with a new commit
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Fixing a mistake with a new commit
 
 Creating a new commit that reverts an earlier change is very easy;
 just pass the linkgit:git-revert[1] command a reference to the bad
@@ -1490,8 +1449,7 @@
 resolving a merge>>.
 
 [[fixing-a-mistake-by-rewriting-history]]
-Fixing a mistake by rewriting history
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Fixing a mistake by rewriting history
 
 If the problematic commit is the most recent commit, and you have not
 yet made that commit public, then you may just
@@ -1518,8 +1476,7 @@
 <<cleaning-up-history,another chapter>>.
 
 [[checkout-of-path]]
-Checking out an old version of a file
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Checking out an old version of a file
 
 In the process of undoing a previous bad change, you may find it
 useful to check out an older version of a particular file using
@@ -1543,8 +1500,7 @@
 which will display the given version of the file.
 
 [[interrupted-work]]
-Temporarily setting aside work in progress
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Temporarily setting aside work in progress
 
 While you are in the middle of working on something complicated, you
 find an unrelated but obvious and trivial bug.  You would like to fix it
@@ -1575,8 +1531,7 @@
 
 
 [[ensuring-good-performance]]
-Ensuring good performance
--------------------------
+=== Ensuring good performance
 
 On large repositories, Git depends on compression to keep the history
 information from taking up too much space on disk or in memory.  Some
@@ -1587,12 +1542,10 @@
 
 
 [[ensuring-reliability]]
-Ensuring reliability
---------------------
+=== Ensuring reliability
 
 [[checking-for-corruption]]
-Checking the repository for corruption
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Checking the repository for corruption
 
 The linkgit:git-fsck[1] command runs a number of self-consistency checks
 on the repository, and reports on any problems.  This may take some
@@ -1618,12 +1571,10 @@
 view real errors.
 
 [[recovering-lost-changes]]
-Recovering lost changes
-~~~~~~~~~~~~~~~~~~~~~~~
+==== Recovering lost changes
 
 [[reflogs]]
-Reflogs
-^^^^^^^
+===== Reflogs
 
 Say you modify a branch with <<fixing-mistakes,`git reset --hard`>>,
 and then realize that the branch was the only reference you had to
@@ -1670,8 +1621,7 @@
 how the branches in your local repository have changed over time.
 
 [[dangling-object-recovery]]
-Examining dangling objects
-^^^^^^^^^^^^^^^^^^^^^^^^^^
+===== Examining dangling objects
 
 In some situations the reflog may not be able to save you.  For example,
 suppose you delete a branch, then realize you need the history it
@@ -1715,12 +1665,10 @@
 
 
 [[sharing-development]]
-Sharing development with others
-===============================
+== Sharing development with others
 
 [[getting-updates-With-git-pull]]
-Getting updates with git pull
------------------------------
+=== Getting updates with git pull
 
 After you clone a repository and commit a few changes of your own, you
 may wish to check the original repository for updates and merge them
@@ -1783,8 +1731,7 @@
 are roughly equivalent.
 
 [[submitting-patches]]
-Submitting patches to a project
--------------------------------
+=== Submitting patches to a project
 
 If you just have a few changes, the simplest way to submit them may
 just be to send them as patches in email:
@@ -1812,8 +1759,7 @@
 their requirements for submitting patches.
 
 [[importing-patches]]
-Importing patches to a project
-------------------------------
+=== Importing patches to a project
 
 Git also provides a tool called linkgit:git-am[1] (am stands for
 "apply mailbox"), for importing such an emailed series of patches.
@@ -1845,8 +1791,7 @@
 taken from the message containing each patch.
 
 [[public-repositories]]
-Public Git repositories
------------------------
+=== Public Git repositories
 
 Another way to submit changes to a project is to tell the maintainer
 of that project to pull the changes from your repository using
@@ -1886,21 +1831,22 @@
 where there is one other developer with a public repository, looks
 like this:
 
-                        you push
-  your personal repo ------------------> your public repo
-	^                                     |
-	|                                     |
-	| you pull                            | they pull
-	|                                     |
-	|                                     |
-        |               they push             V
-  their public repo <------------------- their repo
+....
+		      you push
+your personal repo ------------------> your public repo
+      ^                                     |
+      |                                     |
+      | you pull                            | they pull
+      |                                     |
+      |                                     |
+      |               they push             V
+their public repo <------------------- their repo
+....
 
 We explain how to do this in the following sections.
 
 [[setting-up-a-public-repository]]
-Setting up a public repository
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Setting up a public repository
 
 Assume your personal repository is in the directory `~/proj`.  We
 first create a new clone of the repository and tell `git daemon` that it
@@ -1920,8 +1866,7 @@
 convenient.
 
 [[exporting-via-git]]
-Exporting a Git repository via the Git protocol
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Exporting a Git repository via the Git protocol
 
 This is the preferred method.
 
@@ -1942,8 +1887,7 @@
 examples section.)
 
 [[exporting-via-http]]
-Exporting a git repository via HTTP
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Exporting a git repository via HTTP
 
 The Git protocol gives better performance and reliability, but on a
 host with a web server set up, HTTP exports may be simpler to set up.
@@ -1975,8 +1919,7 @@
 allows pushing over HTTP.)
 
 [[pushing-changes-to-a-public-repository]]
-Pushing changes to a public repository
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Pushing changes to a public repository
 
 Note that the two techniques outlined above (exporting via
 <<exporting-via-http,http>> or <<exporting-via-git,git>>) allow other
@@ -2035,8 +1978,7 @@
 linkgit:git-config[1] for details.
 
 [[forcing-push]]
-What to do when a push fails
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== What to do when a push fails
 
 If a push would not result in a <<fast-forwards,fast-forward>> of the
 remote branch, then it will fail with an error like:
@@ -2090,8 +2032,7 @@
 linkgit:gitcvs-migration[7] for more.
 
 [[setting-up-a-shared-repository]]
-Setting up a shared repository
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Setting up a shared repository
 
 Another way to collaborate is by using a model similar to that
 commonly used in CVS, where several developers with special rights
@@ -2121,8 +2062,7 @@
 	  "out".
 
 [[setting-up-gitweb]]
-Allowing web browsing of a repository
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Allowing web browsing of a repository
 
 The gitweb cgi script provides users an easy way to browse your
 project's revisions, file contents and logs without having to install
@@ -2138,8 +2078,7 @@
 installation with a CGI or Perl capable server.
 
 [[how-to-get-a-git-repository-with-minimal-history]]
-How to get a Git repository with minimal history
-------------------------------------------------
+=== How to get a Git repository with minimal history
 
 A <<def_shallow_clone,shallow clone>>, with its truncated
 history, is useful when one is interested only in recent history
@@ -2158,12 +2097,10 @@
 a repository unsuitable to be used in merge based workflows.
 
 [[sharing-development-examples]]
-Examples
---------
+=== Examples
 
 [[maintaining-topic-branches]]
-Maintaining topic branches for a Linux subsystem maintainer
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Maintaining topic branches for a Linux subsystem maintainer
 
 This describes how Tony Luck uses Git in his role as maintainer of the
 IA64 architecture for the Linux kernel.
@@ -2459,8 +2396,7 @@
 
 
 [[cleaning-up-history]]
-Rewriting history and maintaining patch series
-==============================================
+== Rewriting history and maintaining patch series
 
 Normally commits are only added to a project, never taken away or
 replaced.  Git is designed with this assumption, and violating it will
@@ -2470,8 +2406,7 @@
 assumption.
 
 [[patch-series]]
-Creating the perfect patch series
----------------------------------
+=== Creating the perfect patch series
 
 Suppose you are a contributor to a large project, and you want to add a
 complicated feature, and to present it to the other developers in a way
@@ -2503,8 +2438,7 @@
 you are rewriting history.
 
 [[using-git-rebase]]
-Keeping a patch series up to date using git rebase
---------------------------------------------------
+=== Keeping a patch series up to date using git rebase
 
 Suppose that you create a branch `mywork` on a remote-tracking branch
 `origin`, and create some commits on top of it:
@@ -2591,8 +2525,7 @@
 <<reordering-patch-series>> for alternatives.
 
 [[rewriting-one-commit]]
-Rewriting a single commit
--------------------------
+=== Rewriting a single commit
 
 We saw in <<fixing-a-mistake-by-rewriting-history>> that you can replace the
 most recent commit using
@@ -2610,8 +2543,7 @@
 use <<interactive-rebase,interactive rebase's `edit` instruction>>.
 
 [[reordering-patch-series]]
-Reordering or selecting from a patch series
--------------------------------------------
+=== Reordering or selecting from a patch series
 
 Sometimes you want to edit a commit deeper in your history.  One
 approach is to use `git format-patch` to create a series of patches
@@ -2630,8 +2562,7 @@
 -------------------------------------------------
 
 [[interactive-rebase]]
-Using interactive rebases
--------------------------
+=== Using interactive rebases
 
 You can also edit a patch series with an interactive rebase.  This is
 the same as <<reordering-patch-series,reordering a patch series using
@@ -2688,16 +2619,14 @@
 see the "INTERACTIVE MODE" section of linkgit:git-rebase[1].
 
 [[patch-series-tools]]
-Other tools
------------
+=== Other tools
 
 There are numerous other tools, such as StGit, which exist for the
 purpose of maintaining a patch series.  These are outside of the scope of
 this manual.
 
 [[problems-With-rewriting-history]]
-Problems with rewriting history
--------------------------------
+=== Problems with rewriting history
 
 The primary problem with rewriting the history of a branch has to do
 with merging.  Suppose somebody fetches your branch and merges it into
@@ -2745,8 +2674,7 @@
 published branches should never be rewritten.
 
 [[bisect-merges]]
-Why bisecting merge commits can be harder than bisecting linear history
------------------------------------------------------------------------
+=== Why bisecting merge commits can be harder than bisecting linear history
 
 The linkgit:git-bisect[1] command correctly handles history that
 includes merge commits.  However, when the commit that it finds is a
@@ -2811,12 +2739,10 @@
 publishing.
 
 [[advanced-branch-management]]
-Advanced branch management
-==========================
+== Advanced branch management
 
 [[fetching-individual-branches]]
-Fetching individual branches
-----------------------------
+=== Fetching individual branches
 
 Instead of using linkgit:git-remote[1], you can also choose just
 to update one branch at a time, and to store it locally under an
@@ -2844,8 +2770,7 @@
 master branch.  In more detail:
 
 [[fetch-fast-forwards]]
-git fetch and fast-forwards
----------------------------
+=== git fetch and fast-forwards
 
 In the previous example, when updating an existing branch, `git fetch`
 checks to make sure that the most recent commit on the remote
@@ -2882,8 +2807,7 @@
 them.
 
 [[forcing-fetch]]
-Forcing git fetch to do non-fast-forward updates
-------------------------------------------------
+=== Forcing git fetch to do non-fast-forward updates
 
 If git fetch fails because the new head of a branch is not a
 descendant of the old head, you may force the update with:
@@ -2903,8 +2827,7 @@
 may be lost, as we saw in the previous section.
 
 [[remote-branch-configuration]]
-Configuring remote-tracking branches
-------------------------------------
+=== Configuring remote-tracking branches
 
 We saw above that `origin` is just a shortcut to refer to the
 repository that you originally cloned from.  This information is
@@ -2955,8 +2878,7 @@
 
 
 [[git-concepts]]
-Git concepts
-============
+== Git concepts
 
 Git is built on a small number of simple but powerful ideas.  While it
 is possible to get things done without understanding them, you will find
@@ -2966,8 +2888,7 @@
 database>> and the <<def_index,index>>.
 
 [[the-object-database]]
-The Object Database
--------------------
+=== The Object Database
 
 
 We already saw in <<understanding-commits>> that all commits are stored
@@ -3011,8 +2932,7 @@
 The object types in some more detail:
 
 [[commit-object]]
-Commit Object
-~~~~~~~~~~~~~
+==== Commit Object
 
 The "commit" object links a physical state of a tree with a description
 of how we got there and why.  Use the `--pretty=raw` option to
@@ -3064,8 +2984,7 @@
 taken from the content currently stored in the index.
 
 [[tree-object]]
-Tree Object
-~~~~~~~~~~~
+==== Tree Object
 
 The ever-versatile linkgit:git-show[1] command can also be used to
 examine tree objects, but linkgit:git-ls-tree[1] will give you more
@@ -3104,8 +3023,7 @@
 attention to the executable bit.
 
 [[blob-object]]
-Blob Object
-~~~~~~~~~~~
+==== Blob Object
 
 You can use linkgit:git-show[1] to examine the contents of a blob; take,
 for example, the blob in the entry for `COPYING` from the tree above:
@@ -3134,8 +3052,7 @@
 currently checked out.
 
 [[trust]]
-Trust
-~~~~~
+==== Trust
 
 If you receive the SHA-1 name of a blob from one source, and its contents
 from another (possibly untrusted) source, you can still trust that those
@@ -3164,8 +3081,7 @@
 To assist in this, Git also provides the tag object...
 
 [[tag-object]]
-Tag Object
-~~~~~~~~~~
+==== Tag Object
 
 A tag object contains an object, object type, tag name, the name of the
 person ("tagger") who created the tag, and a message, which may contain
@@ -3194,8 +3110,7 @@
 references whose names begin with `refs/tags/`).
 
 [[pack-files]]
-How Git stores objects efficiently: pack files
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== How Git stores objects efficiently: pack files
 
 Newly created objects are initially created in a file named after the
 object's SHA-1 hash (stored in `.git/objects`).
@@ -3253,8 +3168,7 @@
 you, so is normally the only high-level command you need.
 
 [[dangling-objects]]
-Dangling objects
-~~~~~~~~~~~~~~~~
+==== Dangling objects
 
 The linkgit:git-fsck[1] command will sometimes complain about dangling
 objects.  They are not a problem.
@@ -3334,8 +3248,7 @@
 accesses to a repository but you might receive confusing or scary messages.)
 
 [[recovering-from-repository-corruption]]
-Recovering from repository corruption
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== Recovering from repository corruption
 
 By design, Git treats data trusted to it with caution.  However, even in
 the absence of bugs in Git itself, it is still possible that hardware or
@@ -3452,8 +3365,7 @@
 just missing one particular blob version.
 
 [[the-index]]
-The index
----------
+=== The index
 
 The index is a binary file (generally kept in `.git/index`) containing a
 sorted list of path names, each with permissions and the SHA-1 of a blob
@@ -3511,8 +3423,7 @@
 information as long as you have the name of the tree that it described.
 
 [[submodules]]
-Submodules
-==========
+== Submodules
 
 Large projects are often composed of smaller, self-contained modules.  For
 example, an embedded Linux distribution's source tree would include every
@@ -3698,8 +3609,8 @@
 You have to run `git submodule update` after `git pull` if you want to update
 submodules, too.
 
-Pitfalls with submodules
-------------------------
+[[pitfalls-with-submodules]]
+=== Pitfalls with submodules
 
 Always publish the submodule change before publishing the change to the
 superproject that references it. If you forget to publish the submodule change,
@@ -3768,8 +3679,7 @@
 warning about not being able switch from a dirty branch.
 
 [[low-level-operations]]
-Low-level Git operations
-========================
+== Low-level Git operations
 
 Many of the higher-level commands were originally implemented as shell
 scripts using a smaller core of low-level Git commands.  These can still
@@ -3777,8 +3687,7 @@
 understand its inner workings.
 
 [[object-manipulation]]
-Object access and manipulation
-------------------------------
+=== Object access and manipulation
 
 The linkgit:git-cat-file[1] command can show the contents of any object,
 though the higher-level linkgit:git-show[1] is usually more useful.
@@ -3795,8 +3704,7 @@
 use linkgit:git-tag[1] for both.
 
 [[the-workflow]]
-The Workflow
-------------
+=== The Workflow
 
 High-level operations such as linkgit:git-commit[1] and
 linkgit:git-restore[1] work by moving data
@@ -3811,8 +3719,7 @@
 combinations:
 
 [[working-directory-to-index]]
-working directory -> index
-~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== working directory -> index
 
 The linkgit:git-update-index[1] command updates the index with
 information from the working directory.  You generally update the
@@ -3848,8 +3755,7 @@
 linkgit:git-update-index[1].
 
 [[index-to-object-database]]
-index -> object database
-~~~~~~~~~~~~~~~~~~~~~~~~
+==== index -> object database
 
 You write your current index file to a "tree" object with the program
 
@@ -3864,8 +3770,7 @@
 other direction:
 
 [[object-database-to-index]]
-object database -> index
-~~~~~~~~~~~~~~~~~~~~~~~~
+==== object database -> index
 
 You read a "tree" file from the object database, and use that to
 populate (and overwrite--don't do this if your index contains any
@@ -3881,8 +3786,7 @@
 directory contents have not been modified.
 
 [[index-to-working-directory]]
-index -> working directory
-~~~~~~~~~~~~~~~~~~~~~~~~~~
+==== index -> working directory
 
 You update your working directory from the index by "checking out"
 files. This is not a very common operation, since normally you'd just
@@ -3911,8 +3815,7 @@
 from one representation to the other:
 
 [[tying-it-all-together]]
-Tying it all together
-~~~~~~~~~~~~~~~~~~~~~
+==== Tying it all together
 
 To commit a tree you have instantiated with `git write-tree`, you'd
 create a "commit" object that refers to that tree and the history
@@ -3986,8 +3889,7 @@
 
 
 [[examining-the-data]]
-Examining the data
-------------------
+=== Examining the data
 
 You can examine the data represented in the object database and the
 index with various helper tools. For every object, you can use
@@ -4022,8 +3924,7 @@
 to see what the top commit was.
 
 [[merging-multiple-trees]]
-Merging multiple trees
-----------------------
+=== Merging multiple trees
 
 Git can help you perform a three-way merge, which can in turn be
 used for a many-way merge by repeating the merge procedure several
@@ -4073,8 +3974,7 @@
 
 
 [[merging-multiple-trees-2]]
-Merging multiple trees, continued
----------------------------------
+=== Merging multiple trees, continued
 
 Sadly, many merges aren't trivial. If there are files that have
 been added, moved or removed, or if both branches have modified the
@@ -4144,15 +4044,13 @@
 and that is what higher level `git merge -s resolve` is implemented with.
 
 [[hacking-git]]
-Hacking Git
-===========
+== Hacking Git
 
 This chapter covers internal details of the Git implementation which
 probably only Git developers need to understand.
 
 [[object-details]]
-Object storage format
----------------------
+=== Object storage format
 
 All objects have a statically determined "type" which identifies the
 format of the object (i.e. how it is used, and how it can refer to other
@@ -4182,8 +4080,7 @@
 to just verifying their superficial consistency through the hash).
 
 [[birdview-on-the-source-code]]
-A birds-eye view of Git's source code
--------------------------------------
+=== A birds-eye view of Git's source code
 
 It is not always easy for new developers to find their way through Git's
 source code.  This section gives you a little guidance to show where to
@@ -4392,25 +4289,22 @@
 itself!
 
 [[glossary]]
-Git Glossary
-============
+== Git Glossary
 
 [[git-explained]]
-Git explained
--------------
+=== Git explained
 
 include::glossary-content.txt[]
 
 [[git-quick-start]]
-Appendix A: Git Quick Reference
-===============================
+[appendix]
+== Git Quick Reference
 
 This is a quick summary of the major commands; the previous chapters
 explain how these work in more detail.
 
 [[quick-creating-a-new-repository]]
-Creating a new repository
--------------------------
+=== Creating a new repository
 
 From a tarball:
 
@@ -4431,8 +4325,7 @@
 -----------------------------------------------
 
 [[managing-branches]]
-Managing branches
------------------
+=== Managing branches
 
 -----------------------------------------------
 $ git branch			# list all local branches in this repo
@@ -4496,8 +4389,7 @@
 
 
 [[exploring-history]]
-Exploring history
------------------
+=== Exploring history
 
 -----------------------------------------------
 $ gitk			    # visualize and browse history
@@ -4532,8 +4424,7 @@
 -----------------------------------------------
 
 [[making-changes]]
-Making changes
---------------
+=== Making changes
 
 Make sure Git knows who to blame:
 
@@ -4563,8 +4454,7 @@
 -----------------------------------------------
 
 [[merging]]
-Merging
--------
+=== Merging
 
 -----------------------------------------------
 $ git merge test   # merge branch "test" into the current branch
@@ -4574,8 +4464,7 @@
 -----------------------------------------------
 
 [[sharing-your-changes]]
-Sharing your changes
---------------------
+=== Sharing your changes
 
 Importing or exporting patches:
 
@@ -4620,8 +4509,7 @@
 -----------------------------------------------
 
 [[repository-maintenance]]
-Repository maintenance
-----------------------
+=== Repository maintenance
 
 Check for corruption:
 
@@ -4637,12 +4525,11 @@
 
 
 [[todo]]
-Appendix B: Notes and todo list for this manual
-===============================================
+[appendix]
+== Notes and todo list for this manual
 
 [[todo-list]]
-Todo list
----------
+=== Todo list
 
 This is a work in progress.
 
diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
index aec2ca0..9e7b797 100755
--- a/GIT-VERSION-GEN
+++ b/GIT-VERSION-GEN
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 GVF=GIT-VERSION-FILE
-DEF_VER=v2.23.3
+DEF_VER=v2.24.3
 
 LF='
 '
diff --git a/Makefile b/Makefile
index f925534..58b92af 100644
--- a/Makefile
+++ b/Makefile
@@ -34,13 +34,8 @@
 # library. Support for version 1 will likely be removed in some future
 # release of Git, as upstream has all but abandoned it.
 #
-# When using USE_LIBPCRE1, define NO_LIBPCRE1_JIT if the PCRE v1
-# library is compiled without --enable-jit. We will auto-detect
-# whether the version of the PCRE v1 library in use has JIT support at
-# all, but we unfortunately can't auto-detect whether JIT support
-# hasn't been compiled in in an otherwise JIT-supporting version. If
-# you have link-time errors about a missing `pcre_jit_exec` define
-# this, or recompile PCRE v1 with --enable-jit.
+# When using USE_LIBPCRE1, define NO_LIBPCRE1_JIT if you want to
+# disable JIT even if supported by your library.
 #
 # Define LIBPCREDIR=/foo/bar if your PCRE header and library files are
 # in /foo/bar/include and /foo/bar/lib directories. Which version of
@@ -598,6 +593,7 @@
 SCRIPT_LIB =
 TEST_BUILTINS_OBJS =
 TEST_PROGRAMS_NEED_X =
+THIRD_PARTY_SOURCES =
 
 # Having this variable in your environment would break pipelines because
 # you cause "cd" to echo its destination to stdout.  It can also take
@@ -728,6 +724,7 @@
 TEST_BUILTINS_OBJS += test-path-utils.o
 TEST_BUILTINS_OBJS += test-pkt-line.o
 TEST_BUILTINS_OBJS += test-prio-queue.o
+TEST_BUILTINS_OBJS += test-progress.o
 TEST_BUILTINS_OBJS += test-reach.o
 TEST_BUILTINS_OBJS += test-read-cache.o
 TEST_BUILTINS_OBJS += test-read-midx.o
@@ -818,12 +815,12 @@
 
 GENERATED_H += command-list.h
 
-LIB_H := $(sort $(shell git ls-files '*.h' ':!t/' ':!Documentation/' 2>/dev/null || \
+LIB_H := $(sort $(patsubst ./%,%,$(shell git ls-files '*.h' ':!t/' ':!Documentation/' 2>/dev/null || \
 	$(FIND) . \
 	-name .git -prune -o \
 	-name t -prune -o \
 	-name Documentation -prune -o \
-	-name '*.h' -print))
+	-name '*.h' -print)))
 
 LIB_OBJS += abspath.o
 LIB_OBJS += advice.o
@@ -884,7 +881,6 @@
 LIB_OBJS += ewah/ewah_rlw.o
 LIB_OBJS += exec-cmd.o
 LIB_OBJS += fetch-negotiator.o
-LIB_OBJS += fetch-object.o
 LIB_OBJS += fetch-pack.o
 LIB_OBJS += fsck.o
 LIB_OBJS += fsmonitor.o
@@ -948,6 +944,7 @@
 LIB_OBJS += pretty.o
 LIB_OBJS += prio-queue.o
 LIB_OBJS += progress.o
+LIB_OBJS += promisor-remote.o
 LIB_OBJS += prompt.o
 LIB_OBJS += protocol.o
 LIB_OBJS += quote.o
@@ -965,6 +962,7 @@
 LIB_OBJS += ref-filter.o
 LIB_OBJS += remote.o
 LIB_OBJS += replace-object.o
+LIB_OBJS += repo-settings.o
 LIB_OBJS += repository.o
 LIB_OBJS += rerere.o
 LIB_OBJS += resolve-undo.o
@@ -983,6 +981,7 @@
 LIB_OBJS += sideband.o
 LIB_OBJS += sigchain.o
 LIB_OBJS += split-index.o
+LIB_OBJS += stable-qsort.o
 LIB_OBJS += strbuf.o
 LIB_OBJS += streaming.o
 LIB_OBJS += string-list.o
@@ -1145,6 +1144,20 @@
 BUILTIN_OBJS += builtin/worktree.o
 BUILTIN_OBJS += builtin/write-tree.o
 
+# THIRD_PARTY_SOURCES is a list of patterns compatible with the
+# $(filter) and $(filter-out) family of functions. They specify source
+# files which are taken from some third-party source where we want to be
+# less strict about issues such as coding style so we don't diverge from
+# upstream unnecessarily (making merging in future changes easier).
+THIRD_PARTY_SOURCES += compat/inet_ntop.c
+THIRD_PARTY_SOURCES += compat/inet_pton.c
+THIRD_PARTY_SOURCES += compat/nedmalloc/%
+THIRD_PARTY_SOURCES += compat/obstack.%
+THIRD_PARTY_SOURCES += compat/poll/%
+THIRD_PARTY_SOURCES += compat/regex/%
+THIRD_PARTY_SOURCES += sha1collisiondetection/%
+THIRD_PARTY_SOURCES += sha1dc/%
+
 GITLIBS = common-main.o $(LIB_FILE) $(XDIFF_LIB)
 EXTLIBS =
 
@@ -1714,7 +1727,6 @@
 endif
 ifdef INTERNAL_QSORT
 	COMPAT_CFLAGS += -DINTERNAL_QSORT
-	COMPAT_OBJS += compat/qsort.o
 endif
 ifdef HAVE_ISO_QSORT_S
 	COMPAT_CFLAGS += -DHAVE_ISO_QSORT_S
@@ -1871,8 +1883,9 @@
 	QUIET_MSGFMT   = @echo '   ' MSGFMT $@;
 	QUIET_GCOV     = @echo '   ' GCOV $@;
 	QUIET_SP       = @echo '   ' SP $<;
-	QUIET_HDR      = @echo '   ' HDR $<;
+	QUIET_HDR      = @echo '   ' HDR $(<:hcc=h);
 	QUIET_RC       = @echo '   ' RC $@;
+	QUIET_SPATCH   = @echo '   ' SPATCH $<;
 	QUIET_SUBDIR0  = +@subdir=
 	QUIET_SUBDIR1  = ;$(NO_SUBDIR) echo '   ' SUBDIR $$subdir; \
 			 $(MAKE) $(PRINT_DIR) -C $$subdir
@@ -2599,6 +2612,7 @@
 		-o \( -name 'trash*' -type d -prune \) \
 		-o \( -name '*.[hcS]' -type f -print \) \
 		-o \( -name '*.sh' -type f -print \) \
+		| sed -e 's|^\./||' \
 	)
 
 $(ETAGS_TARGET): FORCE
@@ -2768,11 +2782,16 @@
 ifndef GCRYPT_SHA256
 	EXCEPT_HDRS += sha256/gcrypt.h
 endif
-CHK_HDRS = $(filter-out $(EXCEPT_HDRS),$(patsubst ./%,%,$(LIB_H)))
+CHK_HDRS = $(filter-out $(EXCEPT_HDRS),$(LIB_H))
 HCO = $(patsubst %.h,%.hco,$(CHK_HDRS))
+HCC = $(HCO:hco=hcc)
 
-$(HCO): %.hco: %.h FORCE
-	$(QUIET_HDR)$(CC) -include git-compat-util.h -I. -o /dev/null -c -xc $<
+%.hcc: %.h
+	@echo '#include "git-compat-util.h"' >$@
+	@echo '#include "$<"' >>$@
+
+$(HCO): %.hco: %.hcc FORCE
+	$(QUIET_HDR)$(CC) $(ALL_CFLAGS) -o /dev/null -c -xc $<
 
 .PHONY: hdr-check $(HCO)
 hdr-check: $(HCO)
@@ -2791,15 +2810,11 @@
 		exit 1; \
 	fi
 
-C_SOURCES = $(patsubst %.o,%.c,$(C_OBJ))
-ifdef DC_SHA1_SUBMODULE
-COCCI_SOURCES = $(filter-out sha1collisiondetection/%,$(C_SOURCES))
-else
-COCCI_SOURCES = $(filter-out sha1dc/%,$(C_SOURCES))
-endif
+FOUND_C_SOURCES = $(filter %.c,$(shell $(FIND_SOURCE_FILES)))
+COCCI_SOURCES = $(filter-out $(THIRD_PARTY_SOURCES),$(FOUND_C_SOURCES))
 
 %.cocci.patch: %.cocci $(COCCI_SOURCES)
-	@echo '    ' SPATCH $<; \
+	$(QUIET_SPATCH) \
 	if test $(SPATCH_BATCH_SIZE) = 0; then \
 		limit=; \
 	else \
@@ -3028,6 +3043,10 @@
 	@false
 .PHONY: rpm
 
+ifneq ($(INCLUDE_DLLS_IN_ARTIFACTS),)
+OTHER_PROGRAMS += $(shell echo *.dll t/helper/*.dll)
+endif
+
 artifacts-tar:: $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) $(OTHER_PROGRAMS) \
 		GIT-BUILD-OPTIONS $(TEST_PROGRAMS) $(test_bindir_programs) \
 		$(MOFILES)
@@ -3081,6 +3100,7 @@
 	$(RM) $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git$X
 	$(RM) $(TEST_PROGRAMS)
 	$(RM) $(FUZZ_PROGRAMS)
+	$(RM) $(HCC)
 	$(RM) -r bin-wrappers $(dep_dirs)
 	$(RM) -r po/build/
 	$(RM) *.pyc *.pyo */*.pyc */*.pyo command-list.h $(ETAGS_TARGET) tags cscope*
diff --git a/RelNotes b/RelNotes
index b4ed548..0b74eb5 120000
--- a/RelNotes
+++ b/RelNotes
@@ -1 +1 @@
-Documentation/RelNotes/2.23.3.txt
\ No newline at end of file
+Documentation/RelNotes/2.24.3.txt
\ No newline at end of file
diff --git a/apply.c b/apply.c
index cde9536..f8a046a 100644
--- a/apply.c
+++ b/apply.c
@@ -1361,11 +1361,32 @@
 			if (check_header_line(*linenr, patch))
 				return -1;
 			if (res > 0)
-				return offset;
+				goto done;
 			break;
 		}
 	}
 
+done:
+	if (!patch->old_name && !patch->new_name) {
+		if (!patch->def_name) {
+			error(Q_("git diff header lacks filename information when removing "
+				 "%d leading pathname component (line %d)",
+				 "git diff header lacks filename information when removing "
+				 "%d leading pathname components (line %d)",
+				 parse_hdr_state.p_value),
+			      parse_hdr_state.p_value, *linenr);
+			return -128;
+		}
+		patch->old_name = xstrdup(patch->def_name);
+		patch->new_name = xstrdup(patch->def_name);
+	}
+	if ((!patch->new_name && !patch->is_delete) ||
+	    (!patch->old_name && !patch->is_new)) {
+		error(_("git diff header lacks filename information "
+			"(line %d)"), *linenr);
+		return -128;
+	}
+	patch->is_toplevel_relative = 1;
 	return offset;
 }
 
@@ -1546,26 +1567,6 @@
 				return -128;
 			if (git_hdr_len <= len)
 				continue;
-			if (!patch->old_name && !patch->new_name) {
-				if (!patch->def_name) {
-					error(Q_("git diff header lacks filename information when removing "
-							"%d leading pathname component (line %d)",
-							"git diff header lacks filename information when removing "
-							"%d leading pathname components (line %d)",
-							state->p_value),
-						     state->p_value, state->linenr);
-					return -128;
-				}
-				patch->old_name = xstrdup(patch->def_name);
-				patch->new_name = xstrdup(patch->def_name);
-			}
-			if ((!patch->new_name && !patch->is_delete) ||
-			    (!patch->old_name && !patch->is_new)) {
-				error(_("git diff header lacks filename information "
-					     "(line %d)"), state->linenr);
-				return -128;
-			}
-			patch->is_toplevel_relative = 1;
 			*hdrsize = git_hdr_len;
 			return offset;
 		}
@@ -4643,6 +4644,7 @@
 	struct patch *list = NULL, **listp = &list;
 	int skipped_patch = 0;
 	int res = 0;
+	int flush_attributes = 0;
 
 	state->patch_input_file = filename;
 	if (read_patch_file(&buf, fd) < 0)
@@ -4670,6 +4672,14 @@
 			patch_stats(state, patch);
 			*listp = patch;
 			listp = &patch->next;
+
+			if ((patch->new_name &&
+			     ends_with_path_components(patch->new_name,
+						       GITATTRIBUTES_FILE)) ||
+			    (patch->old_name &&
+			     ends_with_path_components(patch->old_name,
+						       GITATTRIBUTES_FILE)))
+				flush_attributes = 1;
 		}
 		else {
 			if (state->apply_verbosity > verbosity_normal)
@@ -4746,6 +4756,8 @@
 	if (state->summary && state->apply_verbosity > verbosity_silent)
 		summary_patch_list(list);
 
+	if (flush_attributes)
+		reset_parsed_attributes();
 end:
 	free_patch_list(list);
 	strbuf_release(&buf);
diff --git a/apply.h b/apply.h
index a795193..da3d95f 100644
--- a/apply.h
+++ b/apply.h
@@ -1,6 +1,7 @@
 #ifndef APPLY_H
 #define APPLY_H
 
+#include "hash.h"
 #include "lockfile.h"
 #include "string-list.h"
 
diff --git a/archive-tar.c b/archive-tar.c
index 3e53aac..e16d3f7 100644
--- a/archive-tar.c
+++ b/archive-tar.c
@@ -142,19 +142,25 @@
  * string and appends it to a struct strbuf.
  */
 static void strbuf_append_ext_header(struct strbuf *sb, const char *keyword,
-				     const char *value, unsigned int valuelen)
+				     const char *value, size_t valuelen)
 {
-	int len, tmp;
+	size_t orig_len = sb->len;
+	size_t len, tmp;
 
 	/* "%u %s=%s\n" */
 	len = 1 + 1 + strlen(keyword) + 1 + valuelen + 1;
-	for (tmp = len; tmp > 9; tmp /= 10)
+	for (tmp = 1; len / 10 >= tmp; tmp *= 10)
 		len++;
 
 	strbuf_grow(sb, len);
-	strbuf_addf(sb, "%u %s=", len, keyword);
+	strbuf_addf(sb, "%"PRIuMAX" %s=", (uintmax_t)len, keyword);
 	strbuf_add(sb, value, valuelen);
 	strbuf_addch(sb, '\n');
+
+	if (len != sb->len - orig_len)
+		BUG("pax extended header length miscalculated as %"PRIuMAX
+		    ", should be %"PRIuMAX,
+		    (uintmax_t)len, (uintmax_t)(sb->len - orig_len));
 }
 
 /*
diff --git a/attr.c b/attr.c
index 93dc16b..11f19b5 100644
--- a/attr.c
+++ b/attr.c
@@ -62,7 +62,7 @@
 
 /* The container for objects stored in "struct attr_hashmap" */
 struct attr_hash_entry {
-	struct hashmap_entry ent; /* must be the first member! */
+	struct hashmap_entry ent;
 	const char *key; /* the key; memory should be owned by value */
 	size_t keylen; /* length of the key */
 	void *value; /* the stored value */
@@ -70,12 +70,14 @@
 
 /* attr_hashmap comparison function */
 static int attr_hash_entry_cmp(const void *unused_cmp_data,
-			       const void *entry,
-			       const void *entry_or_key,
+			       const struct hashmap_entry *eptr,
+			       const struct hashmap_entry *entry_or_key,
 			       const void *unused_keydata)
 {
-	const struct attr_hash_entry *a = entry;
-	const struct attr_hash_entry *b = entry_or_key;
+	const struct attr_hash_entry *a, *b;
+
+	a = container_of(eptr, const struct attr_hash_entry, ent);
+	b = container_of(entry_or_key, const struct attr_hash_entry, ent);
 	return (a->keylen != b->keylen) || strncmp(a->key, b->key, a->keylen);
 }
 
@@ -98,10 +100,10 @@
 	if (!map->map.tablesize)
 		attr_hashmap_init(map);
 
-	hashmap_entry_init(&k, memhash(key, keylen));
+	hashmap_entry_init(&k.ent, memhash(key, keylen));
 	k.key = key;
 	k.keylen = keylen;
-	e = hashmap_get(&map->map, &k, NULL);
+	e = hashmap_get_entry(&map->map, &k, ent, NULL);
 
 	return e ? e->value : NULL;
 }
@@ -117,12 +119,12 @@
 		attr_hashmap_init(map);
 
 	e = xmalloc(sizeof(struct attr_hash_entry));
-	hashmap_entry_init(e, memhash(key, keylen));
+	hashmap_entry_init(&e->ent, memhash(key, keylen));
 	e->key = key;
 	e->keylen = keylen;
 	e->value = value;
 
-	hashmap_add(&map->map, e);
+	hashmap_add(&map->map, &e->ent);
 }
 
 struct all_attrs_item {
@@ -161,12 +163,12 @@
 	if (size != check->all_attrs_nr) {
 		struct attr_hash_entry *e;
 		struct hashmap_iter iter;
-		hashmap_iter_init(&map->map, &iter);
 
 		REALLOC_ARRAY(check->all_attrs, size);
 		check->all_attrs_nr = size;
 
-		while ((e = hashmap_iter_next(&iter))) {
+		hashmap_for_each_entry(&map->map, &iter, e,
+					ent /* member name */) {
 			const struct git_attr *a = e->value;
 			check->all_attrs[a->attr_nr].attr = a;
 		}
@@ -259,7 +261,7 @@
 	const char *pattern;
 	int patternlen;
 	int nowildcardlen;
-	unsigned flags;		/* EXC_FLAG_* */
+	unsigned flags;		/* PATTERN_FLAG_* */
 };
 
 /*
@@ -400,11 +402,11 @@
 		char *p = (char *)&(res->state[num_attr]);
 		memcpy(p, name, namelen);
 		res->u.pat.pattern = p;
-		parse_exclude_pattern(&res->u.pat.pattern,
+		parse_path_pattern(&res->u.pat.pattern,
 				      &res->u.pat.patternlen,
 				      &res->u.pat.flags,
 				      &res->u.pat.nowildcardlen);
-		if (res->u.pat.flags & EXC_FLAG_NEGATIVE) {
+		if (res->u.pat.flags & PATTERN_FLAG_NEGATIVE) {
 			warning(_("Negative patterns are ignored in git attributes\n"
 				  "Use '\\!' for literal leading exclamation."));
 			goto fail_return;
@@ -991,10 +993,10 @@
 	int prefix = pat->nowildcardlen;
 	int isdir = (pathlen && pathname[pathlen - 1] == '/');
 
-	if ((pat->flags & EXC_FLAG_MUSTBEDIR) && !isdir)
+	if ((pat->flags & PATTERN_FLAG_MUSTBEDIR) && !isdir)
 		return 0;
 
-	if (pat->flags & EXC_FLAG_NODIR) {
+	if (pat->flags & PATTERN_FLAG_NODIR) {
 		return match_basename(pathname + basename_offset,
 				      pathlen - basename_offset - isdir,
 				      pattern, prefix,
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index c329b72..af2a5ea 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -1,6 +1,5 @@
-resources:
-- repo: self
-  fetchDepth: 1
+variables:
+  Agent.Source.Git.ShallowFetchDepth: 1
 
 jobs:
 - job: windows_build
@@ -131,6 +130,165 @@
       PathtoPublish: t/failed-test-artifacts
       ArtifactName: failed-test-artifacts
 
+- job: vs_build
+  displayName: Visual Studio Build
+  condition: succeeded()
+  pool: Hosted VS2017
+  timeoutInMinutes: 240
+  steps:
+  - powershell: |
+      if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
+        net use s: \\gitfileshare.file.core.windows.net\test-cache "$GITFILESHAREPWD" /user:AZURE\gitfileshare /persistent:no
+        cmd /c mklink /d "$(Build.SourcesDirectory)\test-cache" S:\
+      }
+    displayName: 'Mount test-cache'
+    env:
+      GITFILESHAREPWD: $(gitfileshare.pwd)
+  - powershell: |
+      $urlbase = "https://dev.azure.com/git-for-windows/git/_apis/build/builds"
+      $id = ((Invoke-WebRequest -UseBasicParsing "${urlbase}?definitions=22&statusFilter=completed&resultFilter=succeeded&`$top=1").content | ConvertFrom-JSON).value[0].id
+      $downloadUrl = ((Invoke-WebRequest -UseBasicParsing "${urlbase}/$id/artifacts").content | ConvertFrom-JSON).value[1].resource.downloadUrl
+      (New-Object Net.WebClient).DownloadFile($downloadUrl,"git-sdk-64-minimal.zip")
+      Expand-Archive git-sdk-64-minimal.zip -DestinationPath . -Force
+      Remove-Item git-sdk-64-minimal.zip
+
+      # Let Git ignore the SDK and the test-cache
+      "/git-sdk-64-minimal/`n/test-cache/`n" | Out-File -NoNewLine -Encoding ascii -Append "$(Build.SourcesDirectory)\.git\info\exclude"
+    displayName: 'Download git-sdk-64-minimal'
+  - powershell: |
+      & git-sdk-64-minimal\usr\bin\bash.exe -lc @"
+        make NDEBUG=1 DEVELOPER=1 vcxproj
+      "@
+      if (!$?) { exit(1) }
+    displayName: Generate Visual Studio Solution
+    env:
+      HOME: $(Build.SourcesDirectory)
+      MSYSTEM: MINGW64
+      DEVELOPER: 1
+      NO_PERL: 1
+      GIT_CONFIG_PARAMETERS: "'user.name=CI' 'user.email=ci@git'"
+  - powershell: |
+      $urlbase = "https://dev.azure.com/git/git/_apis/build/builds"
+      $id = ((Invoke-WebRequest -UseBasicParsing "${urlbase}?definitions=9&statusFilter=completed&resultFilter=succeeded&`$top=1").content | ConvertFrom-JSON).value[0].id
+      $downloadUrl = ((Invoke-WebRequest -UseBasicParsing "${urlbase}/$id/artifacts").content | ConvertFrom-JSON).value[0].resource.downloadUrl
+      (New-Object Net.WebClient).DownloadFile($downloadUrl, "compat.zip")
+      Expand-Archive compat.zip -DestinationPath . -Force
+      Remove-Item compat.zip
+    displayName: 'Download vcpkg artifacts'
+  - task: MSBuild@1
+    inputs:
+      solution: git.sln
+      platform: x64
+      configuration: Release
+      maximumCpuCount: 4
+  - powershell: |
+      & compat\vcbuild\vcpkg_copy_dlls.bat release
+      if (!$?) { exit(1) }
+      & git-sdk-64-minimal\usr\bin\bash.exe -lc @"
+        mkdir -p artifacts &&
+        eval \"`$(make -n artifacts-tar INCLUDE_DLLS_IN_ARTIFACTS=YesPlease ARTIFACTS_DIRECTORY=artifacts | grep ^tar)\"
+      "@
+      if (!$?) { exit(1) }
+    displayName: Bundle artifact tar
+    env:
+      HOME: $(Build.SourcesDirectory)
+      MSYSTEM: MINGW64
+      DEVELOPER: 1
+      NO_PERL: 1
+      MSVC: 1
+      VCPKG_ROOT: $(Build.SourcesDirectory)\compat\vcbuild\vcpkg
+  - powershell: |
+      $tag = (Invoke-WebRequest -UseBasicParsing "https://gitforwindows.org/latest-tag.txt").content
+      $version = (Invoke-WebRequest -UseBasicParsing "https://gitforwindows.org/latest-version.txt").content
+      $url = "https://github.com/git-for-windows/git/releases/download/${tag}/PortableGit-${version}-64-bit.7z.exe"
+      (New-Object Net.WebClient).DownloadFile($url,"PortableGit.exe")
+      & .\PortableGit.exe -y -oartifacts\PortableGit
+      # Wait until it is unpacked
+      while (-not @(Remove-Item -ErrorAction SilentlyContinue PortableGit.exe; $?)) { sleep 1 }
+    displayName: Download & extract portable Git
+  - task: PublishPipelineArtifact@0
+    displayName: 'Publish Pipeline Artifact: MSVC test artifacts'
+    inputs:
+      artifactName: 'vs-artifacts'
+      targetPath: '$(Build.SourcesDirectory)\artifacts'
+  - powershell: |
+      if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
+        cmd /c rmdir "$(Build.SourcesDirectory)\test-cache"
+      }
+    displayName: 'Unmount test-cache'
+    condition: true
+    env:
+      GITFILESHAREPWD: $(gitfileshare.pwd)
+
+- job: vs_test
+  displayName: Visual Studio Test
+  dependsOn: vs_build
+  condition: succeeded()
+  pool: Hosted
+  timeoutInMinutes: 240
+  strategy:
+    parallel: 10
+  steps:
+  - powershell: |
+      if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
+        net use s: \\gitfileshare.file.core.windows.net\test-cache "$GITFILESHAREPWD" /user:AZURE\gitfileshare /persistent:no
+        cmd /c mklink /d "$(Build.SourcesDirectory)\test-cache" S:\
+      }
+    displayName: 'Mount test-cache'
+    env:
+      GITFILESHAREPWD: $(gitfileshare.pwd)
+  - task: DownloadPipelineArtifact@0
+    displayName: 'Download Pipeline Artifact: VS test artifacts'
+    inputs:
+      artifactName: 'vs-artifacts'
+      targetPath: '$(Build.SourcesDirectory)'
+  - powershell: |
+      & PortableGit\git-cmd.exe --command=usr\bin\bash.exe -lc @"
+        test -f artifacts.tar.gz || {
+          echo No test artifacts found\; skipping >&2
+          exit 0
+        }
+        tar xf artifacts.tar.gz || exit 1
+
+        # Let Git ignore the SDK and the test-cache
+        printf '%s\n' /PortableGit/ /test-cache/ >>.git/info/exclude
+
+        cd t &&
+        PATH=\"`$PWD/helper:`$PATH\" &&
+        test-tool.exe run-command testsuite --jobs=10 -V -x --write-junit-xml \
+                `$(test-tool.exe path-utils slice-tests \
+                        `$SYSTEM_JOBPOSITIONINPHASE `$SYSTEM_TOTALJOBSINPHASE t[0-9]*.sh)
+      "@
+      if (!$?) { exit(1) }
+    displayName: 'Test (parallel)'
+    env:
+      HOME: $(Build.SourcesDirectory)
+      MSYSTEM: MINGW64
+      NO_SVN_TESTS: 1
+      GIT_TEST_SKIP_REBASE_P: 1
+  - powershell: |
+      if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
+        cmd /c rmdir "$(Build.SourcesDirectory)\test-cache"
+      }
+    displayName: 'Unmount test-cache'
+    condition: true
+    env:
+      GITFILESHAREPWD: $(gitfileshare.pwd)
+  - task: PublishTestResults@2
+    displayName: 'Publish Test Results **/TEST-*.xml'
+    inputs:
+      mergeTestResults: true
+      testRunTitle: 'vs'
+      platform: Windows
+      publishRunAttachments: false
+    condition: succeededOrFailed()
+  - task: PublishBuildArtifacts@1
+    displayName: 'Publish trash directories of failed tests'
+    condition: failed()
+    inputs:
+      PathtoPublish: t/failed-test-artifacts
+      ArtifactName: failed-vs-test-artifacts
+
 - job: linux_clang
   displayName: linux-clang
   condition: succeeded()
@@ -354,7 +512,7 @@
        test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare "$GITFILESHAREPWD" "$HOME/test-cache" || exit 1
 
        sudo apt-get update &&
-       sudo apt-get install -y coccinelle &&
+       sudo apt-get install -y coccinelle libcurl4-openssl-dev libssl-dev libexpat-dev gettext &&
 
        export jobname=StaticAnalysis &&
 
@@ -374,7 +532,7 @@
        test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare "$GITFILESHAREPWD" "$HOME/test-cache" || exit 1
 
        sudo apt-get update &&
-       sudo apt-get install -y asciidoc xmlto asciidoctor &&
+       sudo apt-get install -y asciidoc xmlto asciidoctor docbook-xsl-ns &&
 
        export ALREADY_HAVE_ASCIIDOCTOR=yes. &&
        export jobname=Documentation &&
diff --git a/banned.h b/banned.h
index 447af24..60a18d4 100644
--- a/banned.h
+++ b/banned.h
@@ -26,7 +26,7 @@
 #define vsprintf(...) BANNED(vsprintf)
 #else
 #define sprintf(buf,fmt,arg) BANNED(sprintf)
-#define vsprintf(buf,fmt,arg) BANNED(sprintf)
+#define vsprintf(buf,fmt,arg) BANNED(vsprintf)
 #endif
 
 #endif /* BANNED_H */
diff --git a/bisect.c b/bisect.c
index e87ac29..e81c91d 100644
--- a/bisect.c
+++ b/bisect.c
@@ -707,7 +707,7 @@
 {
 	char bisect_rev_hex[GIT_MAX_HEXSZ + 1];
 
-	memcpy(bisect_rev_hex, oid_to_hex(bisect_rev), GIT_SHA1_HEXSZ + 1);
+	memcpy(bisect_rev_hex, oid_to_hex(bisect_rev), the_hash_algo->hexsz + 1);
 	update_ref(NULL, "BISECT_EXPECTED_REV", bisect_rev, NULL, 0, UPDATE_REFS_DIE_ON_ERR);
 
 	argv_checkout[2] = bisect_rev_hex;
diff --git a/blame.c b/blame.c
index 36a2e7e..29770e5 100644
--- a/blame.c
+++ b/blame.c
@@ -144,7 +144,7 @@
 
 	while (!strbuf_getwholeline_fd(&line, merge_head, '\n')) {
 		struct object_id oid;
-		if (line.len < GIT_SHA1_HEXSZ || get_oid_hex(line.buf, &oid))
+		if (get_oid_hex(line.buf, &oid))
 			die("unknown line in '%s': %s",
 			    git_path_merge_head(r), line.buf);
 		tail = append_parent(r, tail, &oid);
@@ -417,14 +417,15 @@
 		/* Ignore whitespace pairs */
 		if (hash == 0)
 			continue;
-		hashmap_entry_init(entry, hash);
+		hashmap_entry_init(&entry->entry, hash);
 
-		found_entry = hashmap_get(&result->map, entry, NULL);
+		found_entry = hashmap_get_entry(&result->map, entry,
+						/* member name */ entry, NULL);
 		if (found_entry) {
 			found_entry->count += 1;
 		} else {
 			entry->count = 1;
-			hashmap_add(&result->map, entry);
+			hashmap_add(&result->map, &entry->entry);
 			++entry;
 		}
 	}
@@ -432,7 +433,7 @@
 
 static void free_fingerprint(struct fingerprint *f)
 {
-	hashmap_free(&f->map, 0);
+	hashmap_free(&f->map);
 	free(f->entries);
 }
 
@@ -449,10 +450,10 @@
 	struct hashmap_iter iter;
 	const struct fingerprint_entry *entry_a, *entry_b;
 
-	hashmap_iter_init(&b->map, &iter);
-
-	while ((entry_b = hashmap_iter_next(&iter))) {
-		if ((entry_a = hashmap_get(&a->map, entry_b, NULL))) {
+	hashmap_for_each_entry(&b->map, &iter, entry_b,
+				entry /* member name */) {
+		entry_a = hashmap_get_entry(&a->map, entry_b, entry, NULL);
+		if (entry_a) {
 			intersection += entry_a->count < entry_b->count ?
 					entry_a->count : entry_b->count;
 		}
@@ -470,10 +471,12 @@
 
 	hashmap_iter_init(&b->map, &iter);
 
-	while ((entry_b = hashmap_iter_next(&iter))) {
-		if ((entry_a = hashmap_get(&a->map, entry_b, NULL))) {
+	hashmap_for_each_entry(&b->map, &iter, entry_b,
+				entry /* member name */) {
+		entry_a = hashmap_get_entry(&a->map, entry_b, entry, NULL);
+		if (entry_a) {
 			if (entry_a->count <= entry_b->count)
-				hashmap_remove(&a->map, entry_b, NULL);
+				hashmap_remove(&a->map, &entry_b->entry, NULL);
 			else
 				entry_a->count -= entry_b->count;
 		}
diff --git a/builtin/am.c b/builtin/am.c
index 1aea657..8181c2a 100644
--- a/builtin/am.c
+++ b/builtin/am.c
@@ -24,7 +24,6 @@
 #include "sequencer.h"
 #include "revision.h"
 #include "merge-recursive.h"
-#include "revision.h"
 #include "log-tree.h"
 #include "notes-utils.h"
 #include "rerere.h"
@@ -1072,19 +1071,6 @@
 }
 
 /**
- * Refresh and write index.
- */
-static void refresh_and_write_cache(void)
-{
-	struct lock_file lock_file = LOCK_INIT;
-
-	hold_locked_index(&lock_file, LOCK_DIE_ON_ERROR);
-	refresh_cache(REFRESH_QUIET);
-	if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
-		die(_("unable to write index file"));
-}
-
-/**
  * Dies with a user-friendly message on how to proceed after resolving the
  * problem. This message can be overridden with state->resolvemsg.
  */
@@ -1272,7 +1258,9 @@
 	buffer = logmsg_reencode(commit, NULL, get_commit_output_encoding());
 
 	ident_line = find_commit_header(buffer, "author", &ident_len);
-
+	if (!ident_line)
+		die(_("missing author line in commit %s"),
+		      oid_to_hex(&commit->object.oid));
 	if (split_ident_line(&id, ident_line, ident_len) < 0)
 		die(_("invalid ident line: %.*s"), (int)ident_len, ident_line);
 
@@ -1538,7 +1526,7 @@
 	o.branch1 = "HEAD";
 	their_tree_name = xstrfmt("%.*s", linelen(state->msg), state->msg);
 	o.branch2 = their_tree_name;
-	o.detect_directory_renames = 0;
+	o.detect_directory_renames = MERGE_DIRECTORY_RENAMES_NONE;
 
 	if (state->quiet)
 		o.verbosity = 0;
@@ -1703,7 +1691,8 @@
 
 	unlink(am_path(state, "dirtyindex"));
 
-	refresh_and_write_cache();
+	if (refresh_and_write_cache(REFRESH_QUIET, 0, 0) < 0)
+		die(_("unable to write index file"));
 
 	if (repo_index_has_changes(the_repository, NULL, &sb)) {
 		write_state_bool(state, "dirtyindex", 1);
diff --git a/builtin/blame.c b/builtin/blame.c
index b6534d4..e946ba6 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -26,7 +26,6 @@
 #include "progress.h"
 #include "object-store.h"
 #include "blame.h"
-#include "string-list.h"
 #include "refs.h"
 
 static char blame_usage[] = N_("git blame [<options>] [<rev-opts>] [<rev>] [--] <file>");
@@ -460,7 +459,7 @@
 
 	for (cnt = 0; cnt < ent->num_lines; cnt++) {
 		char ch;
-		int length = (opt & OUTPUT_LONG_OBJECT_NAME) ? GIT_SHA1_HEXSZ : abbrev;
+		int length = (opt & OUTPUT_LONG_OBJECT_NAME) ? the_hash_algo->hexsz : abbrev;
 
 		if (opt & OUTPUT_COLOR_LINE) {
 			if (cnt > 0) {
@@ -885,6 +884,7 @@
 	struct range_set ranges;
 	unsigned int range_i;
 	long anchor;
+	const int hexsz = the_hash_algo->hexsz;
 
 	setup_default_color_by_age();
 	git_config(git_blame_config, &output_option);
@@ -931,11 +931,11 @@
 	} else if (show_progress < 0)
 		show_progress = isatty(2);
 
-	if (0 < abbrev && abbrev < GIT_SHA1_HEXSZ)
+	if (0 < abbrev && abbrev < hexsz)
 		/* one more abbrev length is needed for the boundary commit */
 		abbrev++;
 	else if (!abbrev)
-		abbrev = GIT_SHA1_HEXSZ;
+		abbrev = hexsz;
 
 	if (revs_file && read_ancestry(revs_file))
 		die_errno("reading graft file '%s' failed", revs_file);
diff --git a/builtin/cat-file.c b/builtin/cat-file.c
index 995d47c..d6a1aa7 100644
--- a/builtin/cat-file.c
+++ b/builtin/cat-file.c
@@ -15,6 +15,7 @@
 #include "sha1-array.h"
 #include "packfile.h"
 #include "object-store.h"
+#include "promisor-remote.h"
 
 struct batch_options {
 	int enabled;
@@ -524,8 +525,8 @@
 	if (opt->all_objects) {
 		struct object_cb_data cb;
 
-		if (repository_format_partial_clone)
-			warning("This repository has extensions.partialClone set. Some objects may not be loaded.");
+		if (has_promisor_remote())
+			warning("This repository uses promisor remotes. Some objects may not be loaded.");
 
 		cb.opt = opt;
 		cb.expand = &data;
diff --git a/builtin/check-ignore.c b/builtin/check-ignore.c
index 5990973..5a4f923 100644
--- a/builtin/check-ignore.c
+++ b/builtin/check-ignore.c
@@ -32,19 +32,19 @@
 	OPT_END()
 };
 
-static void output_exclude(const char *path, struct exclude *exclude)
+static void output_pattern(const char *path, struct path_pattern *pattern)
 {
-	char *bang  = (exclude && exclude->flags & EXC_FLAG_NEGATIVE)  ? "!" : "";
-	char *slash = (exclude && exclude->flags & EXC_FLAG_MUSTBEDIR) ? "/" : "";
+	char *bang  = (pattern && pattern->flags & PATTERN_FLAG_NEGATIVE)  ? "!" : "";
+	char *slash = (pattern && pattern->flags & PATTERN_FLAG_MUSTBEDIR) ? "/" : "";
 	if (!nul_term_line) {
 		if (!verbose) {
 			write_name_quoted(path, stdout, '\n');
 		} else {
-			if (exclude) {
-				quote_c_style(exclude->el->src, NULL, stdout, 0);
+			if (pattern) {
+				quote_c_style(pattern->pl->src, NULL, stdout, 0);
 				printf(":%d:%s%s%s\t",
-				       exclude->srcpos,
-				       bang, exclude->pattern, slash);
+				       pattern->srcpos,
+				       bang, pattern->pattern, slash);
 			}
 			else {
 				printf("::\t");
@@ -56,11 +56,11 @@
 		if (!verbose) {
 			printf("%s%c", path, '\0');
 		} else {
-			if (exclude)
+			if (pattern)
 				printf("%s%c%d%c%s%s%s%c%s%c",
-				       exclude->el->src, '\0',
-				       exclude->srcpos, '\0',
-				       bang, exclude->pattern, slash, '\0',
+				       pattern->pl->src, '\0',
+				       pattern->srcpos, '\0',
+				       bang, pattern->pattern, slash, '\0',
 				       path, '\0');
 			else
 				printf("%c%c%c%s%c", '\0', '\0', '\0', path, '\0');
@@ -74,7 +74,7 @@
 	const char *full_path;
 	char *seen;
 	int num_ignored = 0, i;
-	struct exclude *exclude;
+	struct path_pattern *pattern;
 	struct pathspec pathspec;
 
 	if (!argc) {
@@ -103,15 +103,15 @@
 	seen = find_pathspecs_matching_against_index(&pathspec, &the_index);
 	for (i = 0; i < pathspec.nr; i++) {
 		full_path = pathspec.items[i].match;
-		exclude = NULL;
+		pattern = NULL;
 		if (!seen[i]) {
 			int dtype = DT_UNKNOWN;
-			exclude = last_exclude_matching(dir, &the_index,
+			pattern = last_matching_pattern(dir, &the_index,
 							full_path, &dtype);
 		}
-		if (!quiet && (exclude || show_non_matching))
-			output_exclude(pathspec.items[i].original, exclude);
-		if (exclude)
+		if (!quiet && (pattern || show_non_matching))
+			output_pattern(pathspec.items[i].original, pattern);
+		if (pattern)
 			num_ignored++;
 	}
 	free(seen);
diff --git a/builtin/checkout.c b/builtin/checkout.c
index 6123f73..3634a3d 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -126,6 +126,7 @@
 	if (pos >= 0) {
 		struct cache_entry *old = active_cache[pos];
 		if (ce->ce_mode == old->ce_mode &&
+		    !ce_intent_to_add(old) &&
 		    oideq(&ce->oid, &old->oid)) {
 			old->ce_flags |= CE_UPDATE;
 			discard_cache_entry(ce);
@@ -708,11 +709,11 @@
 			 * give up or do a real merge, depending on
 			 * whether the merge flag was used.
 			 */
-			struct tree *result;
 			struct tree *work;
 			struct tree *old_tree;
 			struct merge_options o;
 			struct strbuf sb = STRBUF_INIT;
+			struct strbuf old_commit_shortname = STRBUF_INIT;
 
 			if (!opts->merge)
 				return 1;
@@ -730,13 +731,6 @@
 				      "the following files:\n%s"), sb.buf);
 			strbuf_release(&sb);
 
-			if (repo_index_has_changes(the_repository,
-						   get_commit_tree(old_branch_info->commit),
-						   &sb))
-				warning(_("staged changes in the following files may be lost: %s"),
-					sb.buf);
-			strbuf_release(&sb);
-
 			/* Do more real merge */
 
 			/*
@@ -760,7 +754,7 @@
 			 */
 			init_merge_options(&o, the_repository);
 			o.verbosity = 0;
-			work = write_tree_from_memory(&o);
+			work = write_in_core_index_as_tree(the_repository);
 
 			ret = reset_tree(new_tree,
 					 opts, 1,
@@ -768,19 +762,25 @@
 			if (ret)
 				return ret;
 			o.ancestor = old_branch_info->name;
+			if (old_branch_info->name == NULL) {
+				strbuf_add_unique_abbrev(&old_commit_shortname,
+							 &old_branch_info->commit->object.oid,
+							 DEFAULT_ABBREV);
+				o.ancestor = old_commit_shortname.buf;
+			}
 			o.branch1 = new_branch_info->name;
 			o.branch2 = "local";
 			ret = merge_trees(&o,
 					  new_tree,
 					  work,
-					  old_tree,
-					  &result);
+					  old_tree);
 			if (ret < 0)
 				exit(128);
 			ret = reset_tree(new_tree,
 					 opts, 0,
 					 writeout_error);
 			strbuf_release(&o.obuf);
+			strbuf_release(&old_commit_shortname);
 			if (ret)
 				return ret;
 		}
@@ -1714,6 +1714,15 @@
 	opts.checkout_index = -2;    /* default on */
 	opts.checkout_worktree = -2; /* default on */
 
+	if (argc == 3 && !strcmp(argv[1], "-b")) {
+		/*
+		 * User ran 'git checkout -b <branch>' and expects
+		 * the same behavior as 'git switch -c <branch>'.
+		 */
+		opts.switch_branch_doing_nothing_is_ok = 0;
+		opts.only_merge_on_switching_branches = 1;
+	}
+
 	options = parse_options_dup(checkout_options);
 	options = add_common_options(&opts, options);
 	options = add_common_switch_branch_options(&opts, options);
diff --git a/builtin/clean.c b/builtin/clean.c
index d5579da..5abf087 100644
--- a/builtin/clean.c
+++ b/builtin/clean.c
@@ -158,7 +158,8 @@
 
 	*dir_gone = 1;
 
-	if ((force_flag & REMOVE_DIR_KEEP_NESTED_GIT) && is_nonbare_repository_dir(path)) {
+	if ((force_flag & REMOVE_DIR_KEEP_NESTED_GIT) &&
+	    is_nonbare_repository_dir(path)) {
 		if (!quiet) {
 			quote_path_relative(path->buf, prefix, &quoted);
 			printf(dry_run ?  _(msg_would_skip_git_dir) : _(msg_skip_git_dir),
@@ -648,7 +649,7 @@
 	struct strbuf confirm = STRBUF_INIT;
 	struct strbuf **ignore_list;
 	struct string_list_item *item;
-	struct exclude_list *el;
+	struct pattern_list *pl;
 	int changed = -1, i;
 
 	for (;;) {
@@ -671,7 +672,7 @@
 			break;
 
 		memset(&dir, 0, sizeof(dir));
-		el = add_exclude_list(&dir, EXC_CMDL, "manual exclude");
+		pl = add_pattern_list(&dir, EXC_CMDL, "manual exclude");
 		ignore_list = strbuf_split_max(&confirm, ' ', 0);
 
 		for (i = 0; ignore_list[i]; i++) {
@@ -679,7 +680,7 @@
 			if (!ignore_list[i]->len)
 				continue;
 
-			add_exclude(ignore_list[i]->buf, "", 0, el, -(i+1));
+			add_pattern(ignore_list[i]->buf, "", 0, pl, -(i+1));
 		}
 
 		changed = 0;
@@ -901,7 +902,7 @@
 	struct pathspec pathspec;
 	struct strbuf buf = STRBUF_INIT;
 	struct string_list exclude_list = STRING_LIST_INIT_NODUP;
-	struct exclude_list *el;
+	struct pattern_list *pl;
 	struct string_list_item *item;
 	const char *qname;
 	struct option options[] = {
@@ -946,9 +947,19 @@
 
 	if (force > 1)
 		rm_flags = 0;
+	else
+		dir.flags |= DIR_SKIP_NESTED_GIT;
 
 	dir.flags |= DIR_SHOW_OTHER_DIRECTORIES;
 
+	if (argc) {
+		/*
+		 * Remaining args implies pathspecs specified, and we should
+		 * recurse within those.
+		 */
+		remove_directories = 1;
+	}
+
 	if (remove_directories)
 		dir.flags |= DIR_SHOW_IGNORED_TOO | DIR_KEEP_UNTRACKED_CONTENTS;
 
@@ -958,9 +969,9 @@
 	if (!ignored)
 		setup_standard_excludes(&dir);
 
-	el = add_exclude_list(&dir, EXC_CMDL, "--exclude option");
+	pl = add_pattern_list(&dir, EXC_CMDL, "--exclude option");
 	for (i = 0; i < exclude_list.nr; i++)
-		add_exclude(exclude_list.items[i].string, "", 0, el, -(i+1));
+		add_pattern(exclude_list.items[i].string, "", 0, pl, -(i+1));
 
 	parse_pathspec(&pathspec, 0,
 		       PATHSPEC_PREFER_CWD,
@@ -1007,6 +1018,7 @@
 	for_each_string_list_item(item, &del_list) {
 		struct stat st;
 
+		strbuf_reset(&abs_path);
 		if (prefix)
 			strbuf_addstr(&abs_path, prefix);
 
@@ -1040,7 +1052,6 @@
 				printf(dry_run ? _(msg_would_remove) : _(msg_remove), qname);
 			}
 		}
-		strbuf_reset(&abs_path);
 	}
 
 	strbuf_release(&abs_path);
diff --git a/builtin/clone.c b/builtin/clone.c
index e48476d..53e04b1 100644
--- a/builtin/clone.c
+++ b/builtin/clone.c
@@ -32,7 +32,6 @@
 #include "connected.h"
 #include "packfile.h"
 #include "list-objects-filter-options.h"
-#include "object-store.h"
 
 /*
  * Overall FIXMEs:
@@ -785,7 +784,7 @@
 	if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
 		die(_("unable to write new index file"));
 
-	err |= run_hook_le(NULL, "post-checkout", sha1_to_hex(null_sha1),
+	err |= run_hook_le(NULL, "post-checkout", oid_to_hex(&null_oid),
 			   oid_to_hex(&oid), "1", NULL);
 
 	if (!err && (option_recurse_submodules.nr > 0)) {
@@ -1160,13 +1159,11 @@
 		transport->server_options = &server_options;
 
 	if (filter_options.choice) {
-		struct strbuf expanded_filter_spec = STRBUF_INIT;
-		expand_list_objects_filter_spec(&filter_options,
-						&expanded_filter_spec);
+		const char *spec =
+			expand_list_objects_filter_spec(&filter_options);
 		transport_set_option(transport, TRANS_OPT_LIST_OBJECTS_FILTER,
-				     expanded_filter_spec.buf);
+				     spec);
 		transport_set_option(transport, TRANS_OPT_FROM_PROMISOR, "1");
-		strbuf_release(&expanded_filter_spec);
 	}
 
 	if (transport->smart_options && !deepen && !filter_options.choice)
diff --git a/builtin/commit-graph.c b/builtin/commit-graph.c
index 38027b8..addc8d4 100644
--- a/builtin/commit-graph.c
+++ b/builtin/commit-graph.c
@@ -10,13 +10,13 @@
 static char const * const builtin_commit_graph_usage[] = {
 	N_("git commit-graph [--object-dir <objdir>]"),
 	N_("git commit-graph read [--object-dir <objdir>]"),
-	N_("git commit-graph verify [--object-dir <objdir>] [--shallow]"),
-	N_("git commit-graph write [--object-dir <objdir>] [--append|--split] [--reachable|--stdin-packs|--stdin-commits] <split options>"),
+	N_("git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"),
+	N_("git commit-graph write [--object-dir <objdir>] [--append|--split] [--reachable|--stdin-packs|--stdin-commits] [--[no-]progress] <split options>"),
 	NULL
 };
 
 static const char * const builtin_commit_graph_verify_usage[] = {
-	N_("git commit-graph verify [--object-dir <objdir>] [--shallow]"),
+	N_("git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"),
 	NULL
 };
 
@@ -26,7 +26,7 @@
 };
 
 static const char * const builtin_commit_graph_write_usage[] = {
-	N_("git commit-graph write [--object-dir <objdir>] [--append|--split] [--reachable|--stdin-packs|--stdin-commits] <split options>"),
+	N_("git commit-graph write [--object-dir <objdir>] [--append|--split] [--reachable|--stdin-packs|--stdin-commits] [--[no-]progress] <split options>"),
 	NULL
 };
 
@@ -38,6 +38,7 @@
 	int append;
 	int split;
 	int shallow;
+	int progress;
 } opts;
 
 static int graph_verify(int argc, const char **argv)
@@ -55,9 +56,13 @@
 			   N_("The object directory to store the graph")),
 		OPT_BOOL(0, "shallow", &opts.shallow,
 			 N_("if the commit-graph is split, only verify the tip file")),
+		OPT_BOOL(0, "progress", &opts.progress, N_("force progress reporting")),
 		OPT_END(),
 	};
 
+	trace2_cmd_mode("verify");
+
+	opts.progress = isatty(2);
 	argc = parse_options(argc, argv, NULL,
 			     builtin_commit_graph_verify_options,
 			     builtin_commit_graph_verify_usage, 0);
@@ -66,6 +71,8 @@
 		opts.obj_dir = get_object_directory();
 	if (opts.shallow)
 		flags |= COMMIT_GRAPH_VERIFY_SHALLOW;
+	if (opts.progress)
+		flags |= COMMIT_GRAPH_WRITE_PROGRESS;
 
 	graph_name = get_commit_graph_filename(opts.obj_dir);
 	open_ok = open_commit_graph(graph_name, &fd, &st);
@@ -102,6 +109,8 @@
 		OPT_END(),
 	};
 
+	trace2_cmd_mode("read");
+
 	argc = parse_options(argc, argv, NULL,
 			     builtin_commit_graph_read_options,
 			     builtin_commit_graph_read_usage, 0);
@@ -154,7 +163,7 @@
 	struct string_list *commit_hex = NULL;
 	struct string_list lines;
 	int result = 0;
-	unsigned int flags = COMMIT_GRAPH_PROGRESS;
+	enum commit_graph_write_flags flags = 0;
 
 	static struct option builtin_commit_graph_write_options[] = {
 		OPT_STRING(0, "object-dir", &opts.obj_dir,
@@ -168,6 +177,7 @@
 			N_("start walk at commits listed by stdin")),
 		OPT_BOOL(0, "append", &opts.append,
 			N_("include all commits already in the commit-graph file")),
+		OPT_BOOL(0, "progress", &opts.progress, N_("force progress reporting")),
 		OPT_BOOL(0, "split", &opts.split,
 			N_("allow writing an incremental commit-graph file")),
 		OPT_INTEGER(0, "max-commits", &split_opts.max_commits,
@@ -179,10 +189,13 @@
 		OPT_END(),
 	};
 
+	opts.progress = isatty(2);
 	split_opts.size_multiple = 2;
 	split_opts.max_commits = 0;
 	split_opts.expire_time = 0;
 
+	trace2_cmd_mode("write");
+
 	argc = parse_options(argc, argv, NULL,
 			     builtin_commit_graph_write_options,
 			     builtin_commit_graph_write_usage, 0);
@@ -192,9 +205,11 @@
 	if (!opts.obj_dir)
 		opts.obj_dir = get_object_directory();
 	if (opts.append)
-		flags |= COMMIT_GRAPH_APPEND;
+		flags |= COMMIT_GRAPH_WRITE_APPEND;
 	if (opts.split)
-		flags |= COMMIT_GRAPH_SPLIT;
+		flags |= COMMIT_GRAPH_WRITE_SPLIT;
+	if (opts.progress)
+		flags |= COMMIT_GRAPH_WRITE_PROGRESS;
 
 	read_replace_refs = 0;
 
@@ -213,8 +228,10 @@
 
 		if (opts.stdin_packs)
 			pack_indexes = &lines;
-		if (opts.stdin_commits)
+		if (opts.stdin_commits) {
 			commit_hex = &lines;
+			flags |= COMMIT_GRAPH_WRITE_CHECK_OIDS;
+		}
 
 		UNLEAK(buf);
 	}
@@ -249,6 +266,8 @@
 			     builtin_commit_graph_usage,
 			     PARSE_OPT_STOP_AT_NON_OPTION);
 
+	save_commit_buffer = 0;
+
 	if (argc > 0) {
 		if (!strcmp(argv[0], "read"))
 			return graph_read(argc, argv);
diff --git a/builtin/commit.c b/builtin/commit.c
index ae7aaf6..e588bc6 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -510,7 +510,7 @@
 	s->nowarn = nowarn;
 	s->is_initial = get_oid(s->reference, &oid) ? 1 : 0;
 	if (!s->is_initial)
-		hashcpy(s->sha1_commit, oid.hash);
+		oidcpy(&s->oid_commit, &oid);
 	s->status_format = status_format;
 	s->ignore_submodule_arg = ignore_submodule_arg;
 
@@ -1406,7 +1406,7 @@
 
 	s.is_initial = get_oid(s.reference, &oid) ? 1 : 0;
 	if (!s.is_initial)
-		hashcpy(s.sha1_commit, oid.hash);
+		oidcpy(&s.oid_commit, &oid);
 
 	s.ignore_submodule_arg = ignore_submodule_arg;
 	s.status_format = status_format;
diff --git a/builtin/describe.c b/builtin/describe.c
index 2001542..b6df81d 100644
--- a/builtin/describe.c
+++ b/builtin/describe.c
@@ -15,7 +15,6 @@
 #include "argv-array.h"
 #include "run-command.h"
 #include "object-store.h"
-#include "revision.h"
 #include "list-objects.h"
 #include "commit-slab.h"
 
@@ -64,19 +63,22 @@
 };
 
 static int commit_name_neq(const void *unused_cmp_data,
-			   const void *entry,
-			   const void *entry_or_key,
+			   const struct hashmap_entry *eptr,
+			   const struct hashmap_entry *entry_or_key,
 			   const void *peeled)
 {
-	const struct commit_name *cn1 = entry;
-	const struct commit_name *cn2 = entry_or_key;
+	const struct commit_name *cn1, *cn2;
+
+	cn1 = container_of(eptr, const struct commit_name, entry);
+	cn2 = container_of(entry_or_key, const struct commit_name, entry);
 
 	return !oideq(&cn1->peeled, peeled ? peeled : &cn2->peeled);
 }
 
 static inline struct commit_name *find_commit_name(const struct object_id *peeled)
 {
-	return hashmap_get_from_hash(&names, oidhash(peeled), peeled);
+	return hashmap_get_entry_from_hash(&names, oidhash(peeled), peeled,
+						struct commit_name, entry);
 }
 
 static int replace_name(struct commit_name *e,
@@ -123,8 +125,8 @@
 		if (!e) {
 			e = xmalloc(sizeof(struct commit_name));
 			oidcpy(&e->peeled, peeled);
-			hashmap_entry_init(e, oidhash(peeled));
-			hashmap_add(&names, e);
+			hashmap_entry_init(&e->entry, oidhash(peeled));
+			hashmap_add(&names, &e->entry);
 			e->path = NULL;
 		}
 		e->tag = tag;
@@ -313,7 +315,7 @@
 		 */
 		append_name(n, dst);
 		if (longformat)
-			append_suffix(0, n->tag ? &n->tag->tagged->oid : oid, dst);
+			append_suffix(0, n->tag ? get_tagged_oid(n->tag) : oid, dst);
 		if (suffix)
 			strbuf_addstr(dst, suffix);
 		return;
@@ -330,8 +332,8 @@
 		struct commit_name *n;
 
 		init_commit_names(&commit_names);
-		n = hashmap_iter_first(&names, &iter);
-		for (; n; n = hashmap_iter_next(&iter)) {
+		hashmap_for_each_entry(&names, &iter, n,
+					entry /* member name */) {
 			c = lookup_commit_reference_gently(the_repository,
 							   &n->peeled, 1);
 			if (c)
diff --git a/builtin/difftool.c b/builtin/difftool.c
index 16eb8b7..c280e68 100644
--- a/builtin/difftool.c
+++ b/builtin/difftool.c
@@ -125,12 +125,15 @@
 };
 
 static int working_tree_entry_cmp(const void *unused_cmp_data,
-				  const void *entry,
-				  const void *entry_or_key,
+				  const struct hashmap_entry *eptr,
+				  const struct hashmap_entry *entry_or_key,
 				  const void *unused_keydata)
 {
-	const struct working_tree_entry *a = entry;
-	const struct working_tree_entry *b = entry_or_key;
+	const struct working_tree_entry *a, *b;
+
+	a = container_of(eptr, const struct working_tree_entry, entry);
+	b = container_of(entry_or_key, const struct working_tree_entry, entry);
+
 	return strcmp(a->path, b->path);
 }
 
@@ -145,12 +148,14 @@
 };
 
 static int pair_cmp(const void *unused_cmp_data,
-		    const void *entry,
-		    const void *entry_or_key,
+		    const struct hashmap_entry *eptr,
+		    const struct hashmap_entry *entry_or_key,
 		    const void *unused_keydata)
 {
-	const struct pair_entry *a = entry;
-	const struct pair_entry *b = entry_or_key;
+	const struct pair_entry *a, *b;
+
+	a = container_of(eptr, const struct pair_entry, entry);
+	b = container_of(entry_or_key, const struct pair_entry, entry);
 
 	return strcmp(a->path, b->path);
 }
@@ -161,14 +166,14 @@
 	struct pair_entry *e, *existing;
 
 	FLEX_ALLOC_STR(e, path, path);
-	hashmap_entry_init(e, strhash(path));
-	existing = hashmap_get(map, e, NULL);
+	hashmap_entry_init(&e->entry, strhash(path));
+	existing = hashmap_get_entry(map, e, entry, NULL);
 	if (existing) {
 		free(e);
 		e = existing;
 	} else {
 		e->left[0] = e->right[0] = '\0';
-		hashmap_add(map, e);
+		hashmap_add(map, &e->entry);
 	}
 	strlcpy(is_right ? e->right : e->left, content, PATH_MAX);
 }
@@ -179,12 +184,14 @@
 };
 
 static int path_entry_cmp(const void *unused_cmp_data,
-			  const void *entry,
-			  const void *entry_or_key,
+			  const struct hashmap_entry *eptr,
+			  const struct hashmap_entry *entry_or_key,
 			  const void *key)
 {
-	const struct path_entry *a = entry;
-	const struct path_entry *b = entry_or_key;
+	const struct path_entry *a, *b;
+
+	a = container_of(eptr, const struct path_entry, entry);
+	b = container_of(entry_or_key, const struct path_entry, entry);
 
 	return strcmp(a->path, key ? key : b->path);
 }
@@ -234,8 +241,8 @@
 	while (!strbuf_getline_nul(&buf, fp)) {
 		struct path_entry *entry;
 		FLEX_ALLOC_STR(entry, path, buf.buf);
-		hashmap_entry_init(entry, strhash(buf.buf));
-		hashmap_add(result, entry);
+		hashmap_entry_init(&entry->entry, strhash(buf.buf));
+		hashmap_add(result, &entry->entry);
 	}
 	fclose(fp);
 	if (finish_command(&diff_files))
@@ -461,12 +468,13 @@
 
 			/* Avoid duplicate working_tree entries */
 			FLEX_ALLOC_STR(entry, path, dst_path);
-			hashmap_entry_init(entry, strhash(dst_path));
-			if (hashmap_get(&working_tree_dups, entry, NULL)) {
+			hashmap_entry_init(&entry->entry, strhash(dst_path));
+			if (hashmap_get(&working_tree_dups, &entry->entry,
+					NULL)) {
 				free(entry);
 				continue;
 			}
-			hashmap_add(&working_tree_dups, entry);
+			hashmap_add(&working_tree_dups, &entry->entry);
 
 			if (!use_wt_file(workdir, dst_path, &roid)) {
 				if (checkout_path(rmode, &roid, dst_path,
@@ -530,8 +538,8 @@
 	 * temporary file to both the left and right directories to show the
 	 * change in the recorded SHA1 for the submodule.
 	 */
-	hashmap_iter_init(&submodules, &iter);
-	while ((entry = hashmap_iter_next(&iter))) {
+	hashmap_for_each_entry(&submodules, &iter, entry,
+				entry /* member name */) {
 		if (*entry->left) {
 			add_path(&ldir, ldir_len, entry->path);
 			ensure_leading_directories(ldir.buf);
@@ -549,8 +557,8 @@
 	 * shows only the link itself, not the contents of the link target.
 	 * This loop replicates that behavior.
 	 */
-	hashmap_iter_init(&symlinks2, &iter);
-	while ((entry = hashmap_iter_next(&iter))) {
+	hashmap_for_each_entry(&symlinks2, &iter, entry,
+				entry /* member name */) {
 		if (*entry->left) {
 			add_path(&ldir, ldir_len, entry->path);
 			ensure_leading_directories(ldir.buf);
diff --git a/builtin/fast-export.c b/builtin/fast-export.c
index f541f55..dbec4df 100644
--- a/builtin/fast-export.c
+++ b/builtin/fast-export.c
@@ -40,6 +40,7 @@
 static int full_tree;
 static int reference_excluded_commits;
 static int show_original_ids;
+static int mark_tags;
 static struct string_list extra_refs = STRING_LIST_INIT_NODUP;
 static struct string_list tag_refs = STRING_LIST_INIT_NODUP;
 static struct refspec refspecs = REFSPEC_INIT_FETCH;
@@ -126,10 +127,15 @@
 };
 
 static int anonymized_entry_cmp(const void *unused_cmp_data,
-				const void *va, const void *vb,
+				const struct hashmap_entry *eptr,
+				const struct hashmap_entry *entry_or_key,
 				const void *unused_keydata)
 {
-	const struct anonymized_entry *a = va, *b = vb;
+	const struct anonymized_entry *a, *b;
+
+	a = container_of(eptr, const struct anonymized_entry, hash);
+	b = container_of(entry_or_key, const struct anonymized_entry, hash);
+
 	return a->orig_len != b->orig_len ||
 		memcmp(a->orig, b->orig, a->orig_len);
 }
@@ -148,10 +154,10 @@
 	if (!map->cmpfn)
 		hashmap_init(map, anonymized_entry_cmp, NULL, 0);
 
-	hashmap_entry_init(&key, memhash(orig, *len));
+	hashmap_entry_init(&key.hash, memhash(orig, *len));
 	key.orig = orig;
 	key.orig_len = *len;
-	ret = hashmap_get(map, &key, NULL);
+	ret = hashmap_get_entry(map, &key, hash, NULL);
 
 	if (!ret) {
 		ret = xmalloc(sizeof(*ret));
@@ -160,7 +166,7 @@
 		ret->orig_len = *len;
 		ret->anon = generate(orig, len);
 		ret->anon_len = *len;
-		hashmap_put(map, ret);
+		hashmap_put(map, &ret->hash);
 	}
 
 	*len = ret->anon_len;
@@ -842,25 +848,40 @@
 			free(buf);
 			return;
 		case REWRITE:
-			if (tagged->type != OBJ_COMMIT) {
-				die("tag %s tags unexported %s!",
-				    oid_to_hex(&tag->object.oid),
-				    type_name(tagged->type));
+			if (tagged->type == OBJ_TAG && !mark_tags) {
+				die(_("Error: Cannot export nested tags unless --mark-tags is specified."));
+			} else if (tagged->type == OBJ_COMMIT) {
+				p = rewrite_commit((struct commit *)tagged);
+				if (!p) {
+					printf("reset %s\nfrom %s\n\n",
+					       name, oid_to_hex(&null_oid));
+					free(buf);
+					return;
+				}
+				tagged_mark = get_object_mark(&p->object);
+			} else {
+				/* tagged->type is either OBJ_BLOB or OBJ_TAG */
+				tagged_mark = get_object_mark(tagged);
 			}
-			p = rewrite_commit((struct commit *)tagged);
-			if (!p) {
-				printf("reset %s\nfrom %s\n\n",
-				       name, oid_to_hex(&null_oid));
-				free(buf);
-				return;
-			}
-			tagged_mark = get_object_mark(&p->object);
 		}
 	}
 
+	if (tagged->type == OBJ_TAG) {
+		printf("reset %s\nfrom %s\n\n",
+		       name, oid_to_hex(&null_oid));
+	}
 	if (starts_with(name, "refs/tags/"))
 		name += 10;
-	printf("tag %s\nfrom :%d\n", name, tagged_mark);
+	printf("tag %s\n", name);
+	if (mark_tags) {
+		mark_next_object(&tag->object);
+		printf("mark :%"PRIu32"\n", last_idnum);
+	}
+	if (tagged_mark)
+		printf("from :%d\n", tagged_mark);
+	else
+		printf("from %s\n", oid_to_hex(&tagged->oid));
+
 	if (show_original_ids)
 		printf("original-oid %s\n", oid_to_hex(&tag->object.oid));
 	printf("%.*s%sdata %d\n%.*s\n",
@@ -1047,11 +1068,16 @@
 		error("Unable to write marks file %s.", file);
 }
 
-static void import_marks(char *input_file)
+static void import_marks(char *input_file, int check_exists)
 {
 	char line[512];
-	FILE *f = xfopen(input_file, "r");
+	FILE *f;
+	struct stat sb;
 
+	if (check_exists && stat(input_file, &sb))
+		return;
+
+	f = xfopen(input_file, "r");
 	while (fgets(line, sizeof(line), f)) {
 		uint32_t mark;
 		char *line_end, *mark_end;
@@ -1115,7 +1141,9 @@
 	struct rev_info revs;
 	struct object_array commits = OBJECT_ARRAY_INIT;
 	struct commit *commit;
-	char *export_filename = NULL, *import_filename = NULL;
+	char *export_filename = NULL,
+	     *import_filename = NULL,
+	     *import_filename_if_exists = NULL;
 	uint32_t lastimportid;
 	struct string_list refspecs_list = STRING_LIST_INIT_NODUP;
 	struct string_list paths_of_changed_objects = STRING_LIST_INIT_DUP;
@@ -1135,6 +1163,10 @@
 			     N_("Dump marks to this file")),
 		OPT_STRING(0, "import-marks", &import_filename, N_("file"),
 			     N_("Import marks from this file")),
+		OPT_STRING(0, "import-marks-if-exists",
+			     &import_filename_if_exists,
+			     N_("file"),
+			     N_("Import marks from this file if it exists")),
 		OPT_BOOL(0, "fake-missing-tagger", &fake_missing_tagger,
 			 N_("Fake a tagger when tags lack one")),
 		OPT_BOOL(0, "full-tree", &full_tree,
@@ -1149,6 +1181,8 @@
 			 &reference_excluded_commits, N_("Reference parents which are not in fast-export stream by object id")),
 		OPT_BOOL(0, "show-original-ids", &show_original_ids,
 			    N_("Show original object ids of blobs/commits")),
+		OPT_BOOL(0, "mark-tags", &mark_tags,
+			    N_("Label tags with mark ids")),
 
 		OPT_END()
 	};
@@ -1182,8 +1216,12 @@
 	if (use_done_feature)
 		printf("feature done\n");
 
+	if (import_filename && import_filename_if_exists)
+		die(_("Cannot pass both --import-marks and --import-marks-if-exists"));
 	if (import_filename)
-		import_marks(import_filename);
+		import_marks(import_filename, 0);
+	else if (import_filename_if_exists)
+		import_marks(import_filename_if_exists, 1);
 	lastimportid = last_idnum;
 
 	if (import_filename && revs.prune_data.nr)
diff --git a/builtin/fetch.c b/builtin/fetch.c
index 717dd14..863c858 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -7,6 +7,7 @@
 #include "refs.h"
 #include "refspec.h"
 #include "object-store.h"
+#include "oidset.h"
 #include "commit.h"
 #include "builtin.h"
 #include "string-list.h"
@@ -23,6 +24,9 @@
 #include "packfile.h"
 #include "list-objects-filter-options.h"
 #include "commit-reach.h"
+#include "branch.h"
+#include "promisor-remote.h"
+#include "commit-graph.h"
 
 #define FORCED_UPDATES_DELAY_WARNING_IN_MS (10 * 1000)
 
@@ -50,11 +54,13 @@
 static int prune_tags = -1; /* unspecified */
 #define PRUNE_TAGS_BY_DEFAULT 0 /* do we prune tags by default? */
 
-static int all, append, dry_run, force, keep, multiple, update_head_ok, verbosity, deepen_relative;
+static int all, append, dry_run, force, keep, multiple, update_head_ok;
+static int verbosity, deepen_relative, set_upstream;
 static int progress = -1;
 static int enable_auto_gc = 1;
 static int tags = TAGS_DEFAULT, unshallow, update_shallow, deepen;
-static int max_children = 1;
+static int max_jobs = -1, submodule_fetch_jobs_config = -1;
+static int fetch_parallel_config = 1;
 static enum transport_family family;
 static const char *depth;
 static const char *deepen_since;
@@ -96,13 +102,20 @@
 	}
 
 	if (!strcmp(k, "submodule.fetchjobs")) {
-		max_children = parse_submodule_fetchjobs(k, v);
+		submodule_fetch_jobs_config = parse_submodule_fetchjobs(k, v);
 		return 0;
 	} else if (!strcmp(k, "fetch.recursesubmodules")) {
 		recurse_submodules = parse_fetch_recurse_submodules_arg(k, v);
 		return 0;
 	}
 
+	if (!strcmp(k, "fetch.parallel")) {
+		fetch_parallel_config = git_config_int(k, v);
+		if (fetch_parallel_config < 0)
+			die(_("fetch.parallel cannot be negative"));
+		return 0;
+	}
+
 	return git_default_config(k, v, cb);
 }
 
@@ -123,6 +136,8 @@
 	OPT__VERBOSITY(&verbosity),
 	OPT_BOOL(0, "all", &all,
 		 N_("fetch from all remotes")),
+	OPT_BOOL(0, "set-upstream", &set_upstream,
+		 N_("set upstream for git pull/fetch")),
 	OPT_BOOL('a', "append", &append,
 		 N_("append to .git/FETCH_HEAD instead of overwriting")),
 	OPT_STRING(0, "upload-pack", &upload_pack, N_("path"),
@@ -134,7 +149,7 @@
 		    N_("fetch all tags and associated objects"), TAGS_SET),
 	OPT_SET_INT('n', NULL, &tags,
 		    N_("do not fetch all tags (--no-tags)"), TAGS_UNSET),
-	OPT_INTEGER('j', "jobs", &max_children,
+	OPT_INTEGER('j', "jobs", &max_jobs,
 		    N_("number of submodules fetched in parallel")),
 	OPT_BOOL('p', "prune", &prune,
 		 N_("prune remote-tracking branches no longer on remote")),
@@ -239,32 +254,31 @@
 	}
 }
 
-static int will_fetch(struct ref **head, const unsigned char *sha1)
+static void create_fetch_oidset(struct ref **head, struct oidset *out)
 {
 	struct ref *rm = *head;
 	while (rm) {
-		if (hasheq(rm->old_oid.hash, sha1))
-			return 1;
+		oidset_insert(out, &rm->old_oid);
 		rm = rm->next;
 	}
-	return 0;
 }
 
 struct refname_hash_entry {
-	struct hashmap_entry ent; /* must be the first member */
+	struct hashmap_entry ent;
 	struct object_id oid;
 	int ignore;
 	char refname[FLEX_ARRAY];
 };
 
 static int refname_hash_entry_cmp(const void *hashmap_cmp_fn_data,
-				  const void *e1_,
-				  const void *e2_,
+				  const struct hashmap_entry *eptr,
+				  const struct hashmap_entry *entry_or_key,
 				  const void *keydata)
 {
-	const struct refname_hash_entry *e1 = e1_;
-	const struct refname_hash_entry *e2 = e2_;
+	const struct refname_hash_entry *e1, *e2;
 
+	e1 = container_of(eptr, const struct refname_hash_entry, ent);
+	e2 = container_of(entry_or_key, const struct refname_hash_entry, ent);
 	return strcmp(e1->refname, keydata ? keydata : e2->refname);
 }
 
@@ -276,9 +290,9 @@
 	size_t len = strlen(refname);
 
 	FLEX_ALLOC_MEM(ent, refname, refname, len);
-	hashmap_entry_init(ent, strhash(refname));
+	hashmap_entry_init(&ent->ent, strhash(refname));
 	oidcpy(&ent->oid, oid);
-	hashmap_add(map, ent);
+	hashmap_add(map, &ent->ent);
 	return ent;
 }
 
@@ -313,6 +327,7 @@
 {
 	struct hashmap existing_refs;
 	struct hashmap remote_refs;
+	struct oidset fetch_oids = OIDSET_INIT;
 	struct string_list remote_refs_list = STRING_LIST_INIT_NODUP;
 	struct string_list_item *remote_ref_item;
 	const struct ref *ref;
@@ -320,6 +335,7 @@
 
 	refname_hash_init(&existing_refs);
 	refname_hash_init(&remote_refs);
+	create_fetch_oidset(head, &fetch_oids);
 
 	for_each_ref(add_one_refname, &existing_refs);
 	for (ref = refs; ref; ref = ref->next) {
@@ -336,9 +352,9 @@
 			if (item &&
 			    !has_object_file_with_flags(&ref->old_oid,
 							OBJECT_INFO_QUICK) &&
-			    !will_fetch(head, ref->old_oid.hash) &&
+			    !oidset_contains(&fetch_oids, &ref->old_oid) &&
 			    !has_object_file_with_flags(&item->oid, OBJECT_INFO_QUICK) &&
-			    !will_fetch(head, item->oid.hash))
+			    !oidset_contains(&fetch_oids, &item->oid))
 				clear_item(item);
 			item = NULL;
 			continue;
@@ -352,7 +368,7 @@
 		 */
 		if (item &&
 		    !has_object_file_with_flags(&item->oid, OBJECT_INFO_QUICK) &&
-		    !will_fetch(head, item->oid.hash))
+		    !oidset_contains(&fetch_oids, &item->oid))
 			clear_item(item);
 
 		item = NULL;
@@ -365,7 +381,7 @@
 		item = refname_hash_add(&remote_refs, ref->name, &ref->old_oid);
 		string_list_insert(&remote_refs_list, ref->name);
 	}
-	hashmap_free(&existing_refs, 1);
+	hashmap_free_entries(&existing_refs, struct refname_hash_entry, ent);
 
 	/*
 	 * We may have a final lightweight tag that needs to be
@@ -373,7 +389,7 @@
 	 */
 	if (item &&
 	    !has_object_file_with_flags(&item->oid, OBJECT_INFO_QUICK) &&
-	    !will_fetch(head, item->oid.hash))
+	    !oidset_contains(&fetch_oids, &item->oid))
 		clear_item(item);
 
 	/*
@@ -383,8 +399,10 @@
 	for_each_string_list_item(remote_ref_item, &remote_refs_list) {
 		const char *refname = remote_ref_item->string;
 		struct ref *rm;
+		unsigned int hash = strhash(refname);
 
-		item = hashmap_get_from_hash(&remote_refs, strhash(refname), refname);
+		item = hashmap_get_entry_from_hash(&remote_refs, hash, refname,
+					struct refname_hash_entry, ent);
 		if (!item)
 			BUG("unseen remote ref?");
 
@@ -398,8 +416,9 @@
 		**tail = rm;
 		*tail = &rm->next;
 	}
-	hashmap_free(&remote_refs, 1);
+	hashmap_free_entries(&remote_refs, struct refname_hash_entry, ent);
 	string_list_clear(&remote_refs_list, 0);
+	oidset_clear(&fetch_oids);
 }
 
 static struct ref *get_ref_map(struct remote *remote,
@@ -516,17 +535,18 @@
 		if (rm->peer_ref) {
 			const char *refname = rm->peer_ref->name;
 			struct refname_hash_entry *peer_item;
+			unsigned int hash = strhash(refname);
 
-			peer_item = hashmap_get_from_hash(&existing_refs,
-							  strhash(refname),
-							  refname);
+			peer_item = hashmap_get_entry_from_hash(&existing_refs,
+						hash, refname,
+						struct refname_hash_entry, ent);
 			if (peer_item) {
 				struct object_id *old_oid = &peer_item->oid;
 				oidcpy(&rm->peer_ref->old_oid, old_oid);
 			}
 		}
 	}
-	hashmap_free(&existing_refs, 1);
+	hashmap_free_entries(&existing_refs, struct refname_hash_entry, ent);
 
 	return ref_map;
 }
@@ -1065,8 +1085,11 @@
 static int fetch_refs(struct transport *transport, struct ref *ref_map)
 {
 	int ret = check_exist_and_connected(ref_map);
-	if (ret)
+	if (ret) {
+		trace2_region_enter("fetch", "fetch_refs", the_repository);
 		ret = transport_fetch_refs(transport, ref_map);
+		trace2_region_leave("fetch", "fetch_refs", the_repository);
+	}
 	if (!ret)
 		/*
 		 * Keep the new pack's ".keep" file around to allow the caller
@@ -1082,11 +1105,14 @@
 {
 	int connectivity_checked = transport->smart_options
 		? transport->smart_options->connectivity_checked : 0;
-	int ret = store_updated_refs(transport->url,
-				     transport->remote->name,
-				     connectivity_checked,
-				     ref_map);
+	int ret;
+	trace2_region_enter("fetch", "consume_refs", the_repository);
+	ret = store_updated_refs(transport->url,
+				 transport->remote->name,
+				 connectivity_checked,
+				 ref_map);
 	transport_unlock_pack(transport);
+	trace2_region_leave("fetch", "consume_refs", the_repository);
 	return ret;
 }
 
@@ -1238,13 +1264,10 @@
 	if (update_shallow)
 		set_option(transport, TRANS_OPT_UPDATE_SHALLOW, "yes");
 	if (filter_options.choice) {
-		struct strbuf expanded_filter_spec = STRBUF_INIT;
-		expand_list_objects_filter_spec(&filter_options,
-						&expanded_filter_spec);
-		set_option(transport, TRANS_OPT_LIST_OBJECTS_FILTER,
-			   expanded_filter_spec.buf);
+		const char *spec =
+			expand_list_objects_filter_spec(&filter_options);
+		set_option(transport, TRANS_OPT_LIST_OBJECTS_FILTER, spec);
 		set_option(transport, TRANS_OPT_FROM_PROMISOR, "1");
-		strbuf_release(&expanded_filter_spec);
 	}
 	if (negotiation_tip.nr) {
 		if (transport->smart_options)
@@ -1334,9 +1357,11 @@
 			argv_array_push(&ref_prefixes, "refs/tags/");
 	}
 
-	if (must_list_refs)
+	if (must_list_refs) {
+		trace2_region_enter("fetch", "remote_refs", the_repository);
 		remote_refs = transport_get_remote_refs(transport, &ref_prefixes);
-	else
+		trace2_region_leave("fetch", "remote_refs", the_repository);
+	} else
 		remote_refs = NULL;
 
 	argv_array_clear(&ref_prefixes);
@@ -1367,6 +1392,51 @@
 		retcode = 1;
 		goto cleanup;
 	}
+
+	if (set_upstream) {
+		struct branch *branch = branch_get("HEAD");
+		struct ref *rm;
+		struct ref *source_ref = NULL;
+
+		/*
+		 * We're setting the upstream configuration for the
+		 * current branch. The relevent upstream is the
+		 * fetched branch that is meant to be merged with the
+		 * current one, i.e. the one fetched to FETCH_HEAD.
+		 *
+		 * When there are several such branches, consider the
+		 * request ambiguous and err on the safe side by doing
+		 * nothing and just emit a warning.
+		 */
+		for (rm = ref_map; rm; rm = rm->next) {
+			if (!rm->peer_ref) {
+				if (source_ref) {
+					warning(_("multiple branch detected, incompatible with --set-upstream"));
+					goto skip;
+				} else {
+					source_ref = rm;
+				}
+			}
+		}
+		if (source_ref) {
+			if (!strcmp(source_ref->name, "HEAD") ||
+			    starts_with(source_ref->name, "refs/heads/"))
+				install_branch_config(0,
+						      branch->name,
+						      transport->remote->name,
+						      source_ref->name);
+			else if (starts_with(source_ref->name, "refs/remotes/"))
+				warning(_("not setting upstream for a remote remote-tracking branch"));
+			else if (starts_with(source_ref->name, "refs/tags/"))
+				warning(_("not setting upstream for a remote tag"));
+			else
+				warning(_("unknown branch type"));
+		} else {
+			warning(_("no source branch found.\n"
+				"you need to specify exactly one branch with the --set-upstream option."));
+		}
+	}
+ skip:
 	free_refs(ref_map);
 
 	/* if neither --no-tags nor --tags was specified, do automated tag
@@ -1463,7 +1533,62 @@
 
 }
 
-static int fetch_multiple(struct string_list *list)
+/* Fetch multiple remotes in parallel */
+
+struct parallel_fetch_state {
+	const char **argv;
+	struct string_list *remotes;
+	int next, result;
+};
+
+static int fetch_next_remote(struct child_process *cp, struct strbuf *out,
+			     void *cb, void **task_cb)
+{
+	struct parallel_fetch_state *state = cb;
+	char *remote;
+
+	if (state->next < 0 || state->next >= state->remotes->nr)
+		return 0;
+
+	remote = state->remotes->items[state->next++].string;
+	*task_cb = remote;
+
+	argv_array_pushv(&cp->args, state->argv);
+	argv_array_push(&cp->args, remote);
+	cp->git_cmd = 1;
+
+	if (verbosity >= 0)
+		printf(_("Fetching %s\n"), remote);
+
+	return 1;
+}
+
+static int fetch_failed_to_start(struct strbuf *out, void *cb, void *task_cb)
+{
+	struct parallel_fetch_state *state = cb;
+	const char *remote = task_cb;
+
+	state->result = error(_("Could not fetch %s"), remote);
+
+	return 0;
+}
+
+static int fetch_finished(int result, struct strbuf *out,
+			  void *cb, void *task_cb)
+{
+	struct parallel_fetch_state *state = cb;
+	const char *remote = task_cb;
+
+	if (result) {
+		strbuf_addf(out, _("could not fetch '%s' (exit code: %d)\n"),
+			    remote, result);
+		state->result = -1;
+	}
+
+	return 0;
+}
+
+static int fetch_multiple(struct string_list *list, int max_children)
 {
 	int i, result = 0;
 	struct argv_array argv = ARGV_ARRAY_INIT;
@@ -1477,20 +1602,34 @@
 	argv_array_pushl(&argv, "fetch", "--append", "--no-auto-gc", NULL);
 	add_options_to_argv(&argv);
 
-	for (i = 0; i < list->nr; i++) {
-		const char *name = list->items[i].string;
-		argv_array_push(&argv, name);
-		if (verbosity >= 0)
-			printf(_("Fetching %s\n"), name);
-		if (run_command_v_opt(argv.argv, RUN_GIT_CMD)) {
-			error(_("Could not fetch %s"), name);
-			result = 1;
+	if (max_children != 1 && list->nr != 1) {
+		struct parallel_fetch_state state = { argv.argv, list, 0, 0 };
+
+		argv_array_push(&argv, "--end-of-options");
+		result = run_processes_parallel_tr2(max_children,
+						    &fetch_next_remote,
+						    &fetch_failed_to_start,
+						    &fetch_finished,
+						    &state,
+						    "fetch", "parallel/fetch");
+
+		if (!result)
+			result = state.result;
+	} else
+		for (i = 0; i < list->nr; i++) {
+			const char *name = list->items[i].string;
+			argv_array_push(&argv, name);
+			if (verbosity >= 0)
+				printf(_("Fetching %s\n"), name);
+			if (run_command_v_opt(argv.argv, RUN_GIT_CMD)) {
+				error(_("Could not fetch %s"), name);
+				result = 1;
+			}
+			argv_array_pop(&argv);
 		}
-		argv_array_pop(&argv);
-	}
 
 	argv_array_clear(&argv);
-	return result;
+	return !!result;
 }
 
 /*
@@ -1510,37 +1649,27 @@
 	 * If no prior partial clone/fetch and the current fetch DID NOT
 	 * request a partial-fetch, do a normal fetch.
 	 */
-	if (!repository_format_partial_clone && !filter_options.choice)
+	if (!has_promisor_remote() && !filter_options.choice)
 		return;
 
 	/*
-	 * If this is the FIRST partial-fetch request, we enable partial
-	 * on this repo and remember the given filter-spec as the default
-	 * for subsequent fetches to this remote.
+	 * If this is a partial-fetch request, we enable partial on
+	 * this repo if not already enabled and remember the given
+	 * filter-spec as the default for subsequent fetches to this
+	 * remote.
 	 */
-	if (!repository_format_partial_clone && filter_options.choice) {
+	if (filter_options.choice) {
 		partial_clone_register(remote->name, &filter_options);
 		return;
 	}
 
 	/*
-	 * We are currently limited to only ONE promisor remote and only
-	 * allow partial-fetches from the promisor remote.
-	 */
-	if (strcmp(remote->name, repository_format_partial_clone)) {
-		if (filter_options.choice)
-			die(_("--filter can only be used with the remote "
-			      "configured in extensions.partialClone"));
-		return;
-	}
-
-	/*
 	 * Do a partial-fetch from the promisor remote using either the
 	 * explicitly given filter-spec or inherit the filter-spec from
 	 * the config.
 	 */
 	if (!filter_options.choice)
-		partial_clone_get_default_filter_spec(&filter_options);
+		partial_clone_get_default_filter_spec(&filter_options, remote->name);
 	return;
 }
 
@@ -1626,14 +1755,13 @@
 
 	packet_trace_identity("fetch");
 
-	fetch_if_missing = 0;
-
 	/* Record the command line for the reflog */
 	strbuf_addstr(&default_rla, "fetch");
 	for (i = 1; i < argc; i++)
 		strbuf_addf(&default_rla, " %s", argv[i]);
 
-	fetch_config_from_gitmodules(&max_children, &recurse_submodules);
+	fetch_config_from_gitmodules(&submodule_fetch_jobs_config,
+				     &recurse_submodules);
 	git_config(git_fetch_config, NULL);
 
 	argc = parse_options(argc, argv, prefix,
@@ -1661,7 +1789,7 @@
 	if (depth || deepen_since || deepen_not.nr)
 		deepen = 1;
 
-	if (filter_options.choice && !repository_format_partial_clone)
+	if (filter_options.choice && !has_promisor_remote())
 		die("--filter can only be used when extensions.partialClone is set");
 
 	if (all) {
@@ -1694,20 +1822,34 @@
 		}
 	}
 
+	fetch_if_missing = 0;
+
 	if (remote) {
-		if (filter_options.choice || repository_format_partial_clone)
+		if (filter_options.choice || has_promisor_remote())
 			fetch_one_setup_partial(remote);
 		result = fetch_one(remote, argc, argv, prune_tags_ok);
 	} else {
+		int max_children = max_jobs;
+
 		if (filter_options.choice)
 			die(_("--filter can only be used with the remote "
 			      "configured in extensions.partialclone"));
+
+		if (max_children < 0)
+			max_children = fetch_parallel_config;
+
 		/* TODO should this also die if we have a previous partial-clone? */
-		result = fetch_multiple(&list);
+		result = fetch_multiple(&list, max_children);
 	}
 
 	if (!result && (recurse_submodules != RECURSE_SUBMODULES_OFF)) {
 		struct argv_array options = ARGV_ARRAY_INIT;
+		int max_children = max_jobs;
+
+		if (max_children < 0)
+			max_children = submodule_fetch_jobs_config;
+		if (max_children < 0)
+			max_children = fetch_parallel_config;
 
 		add_options_to_argv(&options);
 		result = fetch_populated_submodules(the_repository,
@@ -1722,6 +1864,20 @@
 
 	string_list_clear(&list, 0);
 
+	prepare_repo_settings(the_repository);
+	if (the_repository->settings.fetch_write_commit_graph) {
+		int commit_graph_flags = COMMIT_GRAPH_WRITE_SPLIT;
+		struct split_commit_graph_opts split_opts;
+		memset(&split_opts, 0, sizeof(struct split_commit_graph_opts));
+
+		if (progress)
+			commit_graph_flags |= COMMIT_GRAPH_WRITE_PROGRESS;
+
+		write_commit_graph_reachable(get_object_directory(),
+					     commit_graph_flags,
+					     &split_opts);
+	}
+
 	close_object_store(the_repository->objects);
 
 	if (enable_auto_gc) {
diff --git a/builtin/gc.c b/builtin/gc.c
index c18efad..fadb454 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -27,6 +27,7 @@
 #include "pack-objects.h"
 #include "blob.h"
 #include "tree.h"
+#include "promisor-remote.h"
 
 #define FAILED_RUN "failed to run %s"
 
@@ -41,7 +42,6 @@
 static int aggressive_window = 250;
 static int gc_auto_threshold = 6700;
 static int gc_auto_pack_limit = 50;
-static int gc_write_commit_graph;
 static int detach_auto = 1;
 static timestamp_t gc_log_expire_time;
 static const char *gc_log_expire = "1.day.ago";
@@ -148,7 +148,6 @@
 	git_config_get_int("gc.aggressivedepth", &aggressive_depth);
 	git_config_get_int("gc.auto", &gc_auto_threshold);
 	git_config_get_int("gc.autopacklimit", &gc_auto_pack_limit);
-	git_config_get_bool("gc.writecommitgraph", &gc_write_commit_graph);
 	git_config_get_bool("gc.autodetach", &detach_auto);
 	git_config_get_expiry("gc.pruneexpire", &prune_expire);
 	git_config_get_expiry("gc.worktreepruneexpire", &prune_worktrees_expire);
@@ -661,7 +660,7 @@
 			argv_array_push(&prune, prune_expire);
 			if (quiet)
 				argv_array_push(&prune, "--no-progress");
-			if (repository_format_partial_clone)
+			if (has_promisor_remote())
 				argv_array_push(&prune,
 						"--exclude-promisor-objects");
 			if (run_command_v_opt(prune.argv, RUN_GIT_CMD))
@@ -685,11 +684,11 @@
 		clean_pack_garbage();
 	}
 
-	if (gc_write_commit_graph &&
-	    write_commit_graph_reachable(get_object_directory(),
-					 !quiet && !daemonized ? COMMIT_GRAPH_PROGRESS : 0,
-					 NULL))
-		return 1;
+	prepare_repo_settings(the_repository);
+	if (the_repository->settings.gc_write_commit_graph == 1)
+		write_commit_graph_reachable(get_object_directory(),
+					     !quiet && !daemonized ? COMMIT_GRAPH_WRITE_PROGRESS : 0,
+					     NULL);
 
 	if (auto_gc && too_many_loose_objects())
 		warning(_("There are too many unreachable loose objects; "
diff --git a/builtin/grep.c b/builtin/grep.c
index 5600517..50ce8d9 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c
@@ -403,7 +403,7 @@
 static int grep_submodule(struct grep_opt *opt,
 			  const struct pathspec *pathspec,
 			  const struct object_id *oid,
-			  const char *filename, const char *path)
+			  const char *filename, const char *path, int cached)
 {
 	struct repository subrepo;
 	struct repository *superproject = opt->repo;
@@ -475,7 +475,7 @@
 		strbuf_release(&base);
 		free(data);
 	} else {
-		hit = grep_cache(&subopt, pathspec, 1);
+		hit = grep_cache(&subopt, pathspec, cached);
 	}
 
 	repo_clear(&subrepo);
@@ -523,7 +523,8 @@
 			}
 		} else if (recurse_submodules && S_ISGITLINK(ce->ce_mode) &&
 			   submodule_path_match(repo->index, pathspec, name.buf, NULL)) {
-			hit |= grep_submodule(opt, pathspec, NULL, ce->name, ce->name);
+			hit |= grep_submodule(opt, pathspec, NULL, ce->name,
+					      ce->name, cached);
 		} else {
 			continue;
 		}
@@ -598,7 +599,8 @@
 			free(data);
 		} else if (recurse_submodules && S_ISGITLINK(entry.mode)) {
 			hit |= grep_submodule(opt, pathspec, &entry.oid,
-					      base->buf, base->buf + tn_len);
+					      base->buf, base->buf + tn_len,
+					      1); /* ignored */
 		}
 
 		strbuf_setlen(base, old_baselen);
@@ -1108,8 +1110,8 @@
 			strbuf_addf(&buf, "+/%s%s",
 					strcmp("less", pager) ? "" : "*",
 					opt.pattern_list->pattern);
-			string_list_append(&path_list, buf.buf);
-			strbuf_detach(&buf, NULL);
+			string_list_append(&path_list,
+					   strbuf_detach(&buf, NULL));
 		}
 	}
 
@@ -1145,5 +1147,6 @@
 		run_pager(&opt, prefix);
 	clear_pathspec(&pathspec);
 	free_grep_patterns(&opt);
+	grep_destroy();
 	return !hit;
 }
diff --git a/builtin/index-pack.c b/builtin/index-pack.c
index 0d55f73..60a5591 100644
--- a/builtin/index-pack.c
+++ b/builtin/index-pack.c
@@ -14,7 +14,7 @@
 #include "thread-utils.h"
 #include "packfile.h"
 #include "object-store.h"
-#include "fetch-object.h"
+#include "promisor-remote.h"
 
 static const char index_pack_usage[] =
 "git index-pack [-v] [-o <index-file>] [--keep | --keep=<msg>] [--verify] [--strict] (<pack-file> | --stdin [--fix-thin] [<pack-file>])";
@@ -1352,7 +1352,7 @@
 		sorted_by_pos[i] = &ref_deltas[i];
 	QSORT(sorted_by_pos, nr_ref_deltas, delta_pos_compare);
 
-	if (repository_format_partial_clone) {
+	if (has_promisor_remote()) {
 		/*
 		 * Prefetch the delta bases.
 		 */
@@ -1366,8 +1366,8 @@
 			oid_array_append(&to_fetch, &d->oid);
 		}
 		if (to_fetch.nr)
-			fetch_objects(repository_format_partial_clone,
-				      to_fetch.oid, to_fetch.nr);
+			promisor_remote_get_direct(the_repository,
+						   to_fetch.oid, to_fetch.nr);
 		oid_array_clear(&to_fetch);
 	}
 
@@ -1490,11 +1490,11 @@
 	}
 
 	if (!from_stdin) {
-		printf("%s\n", sha1_to_hex(hash));
+		printf("%s\n", hash_to_hex(hash));
 	} else {
 		struct strbuf buf = STRBUF_INIT;
 
-		strbuf_addf(&buf, "%s\t%s\n", report, sha1_to_hex(hash));
+		strbuf_addf(&buf, "%s\t%s\n", report, hash_to_hex(hash));
 		write_or_die(1, buf.buf, buf.len);
 		strbuf_release(&buf);
 
diff --git a/builtin/log.c b/builtin/log.c
index 44b10b3..89873d2 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -627,6 +627,7 @@
 			break;
 		case OBJ_TAG: {
 			struct tag *t = (struct tag *)o;
+			struct object_id *oid = get_tagged_oid(t);
 
 			if (rev.shown_one)
 				putchar('\n');
@@ -638,10 +639,10 @@
 			rev.shown_one = 1;
 			if (ret)
 				break;
-			o = parse_object(the_repository, &t->tagged->oid);
+			o = parse_object(the_repository, oid);
 			if (!o)
 				ret = error(_("could not read object %s"),
-					    oid_to_hex(&t->tagged->oid));
+					    oid_to_hex(oid));
 			objects[i].item = o;
 			i--;
 			break;
@@ -1765,10 +1766,26 @@
 		setup_pager();
 
 	if (output_directory) {
+		int saved;
 		if (rev.diffopt.use_color != GIT_COLOR_ALWAYS)
 			rev.diffopt.use_color = GIT_COLOR_NEVER;
 		if (use_stdout)
 			die(_("standard output, or directory, which one?"));
+		/*
+		 * We consider <outdir> as 'outside of gitdir', therefore avoid
+		 * applying adjust_shared_perm in s-c-l-d.
+		 */
+		saved = get_shared_repository();
+		set_shared_repository(0);
+		switch (safe_create_leading_directories_const(output_directory)) {
+		case SCLD_OK:
+		case SCLD_EXISTS:
+			break;
+		default:
+			die(_("could not create leading directories "
+			      "of '%s'"), output_directory);
+		}
+		set_shared_repository(saved);
 		if (mkdir(output_directory, 0777) < 0 && errno != EEXIST)
 			die_errno(_("could not create directory '%s'"),
 				  output_directory);
diff --git a/builtin/ls-files.c b/builtin/ls-files.c
index 670e8fb..f069a02 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c
@@ -492,7 +492,7 @@
 	BUG_ON_OPT_NEG(unset);
 
 	exc_given = 1;
-	add_excludes_from_file(dir, arg);
+	add_patterns_from_file(dir, arg);
 
 	return 0;
 }
@@ -516,7 +516,7 @@
 	int require_work_tree = 0, show_tag = 0, i;
 	const char *max_prefix;
 	struct dir_struct dir;
-	struct exclude_list *el;
+	struct pattern_list *pl;
 	struct string_list exclude_list = STRING_LIST_INIT_NODUP;
 	struct option builtin_ls_files_options[] = {
 		/* Think twice before adding "--nul" synonym to this */
@@ -594,9 +594,9 @@
 
 	argc = parse_options(argc, argv, prefix, builtin_ls_files_options,
 			ls_files_usage, 0);
-	el = add_exclude_list(&dir, EXC_CMDL, "--exclude option");
+	pl = add_pattern_list(&dir, EXC_CMDL, "--exclude option");
 	for (i = 0; i < exclude_list.nr; i++) {
-		add_exclude(exclude_list.items[i].string, "", 0, el, --exclude_args);
+		add_pattern(exclude_list.items[i].string, "", 0, pl, --exclude_args);
 	}
 	if (show_tag || show_valid_bit || show_fsmonitor_bit) {
 		tag_cached = "H ";
diff --git a/builtin/merge-recursive.c b/builtin/merge-recursive.c
index 5b910e3..a4bfd8f 100644
--- a/builtin/merge-recursive.c
+++ b/builtin/merge-recursive.c
@@ -1,3 +1,4 @@
+#include "cache.h"
 #include "builtin.h"
 #include "commit.h"
 #include "tag.h"
@@ -63,6 +64,9 @@
 	if (argc - i != 3) /* "--" "<head>" "<remote>" */
 		die(_("not handling anything other than two heads merge."));
 
+	if (repo_read_index_unmerged(the_repository))
+		die_resolve_conflict("merge");
+
 	o.branch1 = argv[++i];
 	o.branch2 = argv[++i];
 
diff --git a/builtin/merge-tree.c b/builtin/merge-tree.c
index 97b54ca..e72714a 100644
--- a/builtin/merge-tree.c
+++ b/builtin/merge-tree.c
@@ -180,8 +180,9 @@
 
 static char *traverse_path(const struct traverse_info *info, const struct name_entry *n)
 {
-	char *path = xmallocz(traverse_path_len(info, n) + the_hash_algo->rawsz);
-	return make_traverse_path(path, info, n);
+	struct strbuf buf = STRBUF_INIT;
+	strbuf_make_traverse_path(&buf, info, n->path, n->pathlen);
+	return strbuf_detach(&buf, NULL);
 }
 
 static void resolve(const struct traverse_info *info, struct name_entry *ours, struct name_entry *result)
diff --git a/builtin/merge.c b/builtin/merge.c
index e2ccbc4..062e911 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -81,7 +81,7 @@
 static int default_to_upstream = 1;
 static int signoff;
 static const char *sign_commit;
-static int verify_msg = 1;
+static int no_verify;
 
 static struct strategy all_strategy[] = {
 	{ "recursive",  DEFAULT_TWOHEAD | NO_TRIVIAL },
@@ -287,7 +287,7 @@
 	  N_("GPG sign commit"), PARSE_OPT_OPTARG, NULL, (intptr_t) "" },
 	OPT_BOOL(0, "overwrite-ignore", &overwrite_ignore, N_("update ignored files (default)")),
 	OPT_BOOL(0, "signoff", &signoff, N_("add Signed-off-by:")),
-	OPT_BOOL(0, "verify", &verify_msg, N_("verify commit-msg hook")),
+	OPT_BOOL(0, "no-verify", &no_verify, N_("bypass pre-merge-commit and commit-msg hooks")),
 	OPT_END()
 };
 
@@ -688,16 +688,13 @@
 			      struct commit_list *remoteheads,
 			      struct commit *head)
 {
-	struct lock_file lock = LOCK_INIT;
 	const char *head_arg = "HEAD";
 
-	hold_locked_index(&lock, LOCK_DIE_ON_ERROR);
-	refresh_cache(REFRESH_QUIET);
-	if (write_locked_index(&the_index, &lock,
-			       COMMIT_LOCK | SKIP_IF_UNCHANGED))
+	if (refresh_and_write_cache(REFRESH_QUIET, SKIP_IF_UNCHANGED, 0) < 0)
 		return error(_("Unable to write index."));
 
 	if (!strcmp(strategy, "recursive") || !strcmp(strategy, "subtree")) {
+		struct lock_file lock = LOCK_INIT;
 		int clean, x;
 		struct commit *result;
 		struct commit_list *reversed = NULL;
@@ -816,6 +813,18 @@
 static void prepare_to_commit(struct commit_list *remoteheads)
 {
 	struct strbuf msg = STRBUF_INIT;
+	const char *index_file = get_index_file();
+
+	if (!no_verify && run_commit_hook(0 < option_edit, index_file, "pre-merge-commit", NULL))
+		abort_commit(remoteheads, NULL);
+	/*
+	 * Re-read the index as pre-merge-commit hook could have updated it,
+	 * and write it out as a tree.  We must do this before we invoke
+	 * the editor and after we invoke run_status above.
+	 */
+	if (find_hook("pre-merge-commit"))
+		discard_cache();
+	read_cache_from(index_file);
 	strbuf_addbuf(&msg, &merge_msg);
 	if (squash)
 		BUG("the control must not reach here under --squash");
@@ -842,7 +851,7 @@
 			abort_commit(remoteheads, NULL);
 	}
 
-	if (verify_msg && run_commit_hook(0 < option_edit, get_index_file(),
+	if (!no_verify && run_commit_hook(0 < option_edit, get_index_file(),
 					  "commit-msg",
 					  git_path_merge_msg(the_repository), NULL))
 		abort_commit(remoteheads, NULL);
@@ -860,12 +869,8 @@
 {
 	struct object_id result_tree, result_commit;
 	struct commit_list *parents, **pptr = &parents;
-	struct lock_file lock = LOCK_INIT;
 
-	hold_locked_index(&lock, LOCK_DIE_ON_ERROR);
-	refresh_cache(REFRESH_QUIET);
-	if (write_locked_index(&the_index, &lock,
-			       COMMIT_LOCK | SKIP_IF_UNCHANGED))
+	if (refresh_and_write_cache(REFRESH_QUIET, SKIP_IF_UNCHANGED, 0) < 0)
 		return error(_("Unable to write index."));
 
 	write_tree_trivial(&result_tree);
diff --git a/builtin/name-rev.c b/builtin/name-rev.c
index c785fe1..b0f0776 100644
--- a/builtin/name-rev.c
+++ b/builtin/name-rev.c
@@ -9,7 +9,11 @@
 #include "sha1-lookup.h"
 #include "commit-slab.h"
 
-#define CUTOFF_DATE_SLOP 86400 /* one day */
+/*
+ * One day.  See the 'name a rev shortly after epoch' test in t6120 when
+ * changing this value
+ */
+#define CUTOFF_DATE_SLOP 86400
 
 typedef struct rev_name {
 	const char *tip_name;
@@ -481,8 +485,13 @@
 		add_object_array(object, *argv, &revs);
 	}
 
-	if (cutoff)
-		cutoff = cutoff - CUTOFF_DATE_SLOP;
+	if (cutoff) {
+		/* check for undeflow */
+		if (cutoff > TIME_MIN + CUTOFF_DATE_SLOP)
+			cutoff = cutoff - CUTOFF_DATE_SLOP;
+		else
+			cutoff = TIME_MIN;
+	}
 	for_each_ref(name_ref, &data);
 
 	if (transform_stdin) {
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index 76ce906..5876583 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -610,12 +610,12 @@
 		       void *cb_data)
 {
 	struct object_id peeled;
-	struct object_entry *entry = packlist_find(&to_pack, oid, NULL);
+	struct object_entry *entry = packlist_find(&to_pack, oid);
 
 	if (entry)
 		entry->tagged = 1;
 	if (!peel_ref(path, &peeled)) {
-		entry = packlist_find(&to_pack, &peeled, NULL);
+		entry = packlist_find(&to_pack, &peeled);
 		if (entry)
 			entry->tagged = 1;
 	}
@@ -996,12 +996,11 @@
  * few lines later when we want to add the new entry.
  */
 static int have_duplicate_entry(const struct object_id *oid,
-				int exclude,
-				uint32_t *index_pos)
+				int exclude)
 {
 	struct object_entry *entry;
 
-	entry = packlist_find(&to_pack, oid, index_pos);
+	entry = packlist_find(&to_pack, oid);
 	if (!entry)
 		return 0;
 
@@ -1141,13 +1140,12 @@
 				uint32_t hash,
 				int exclude,
 				int no_try_delta,
-				uint32_t index_pos,
 				struct packed_git *found_pack,
 				off_t found_offset)
 {
 	struct object_entry *entry;
 
-	entry = packlist_alloc(&to_pack, oid->hash, index_pos);
+	entry = packlist_alloc(&to_pack, oid);
 	entry->hash = hash;
 	oe_set_type(entry, type);
 	if (exclude)
@@ -1171,11 +1169,10 @@
 {
 	struct packed_git *found_pack = NULL;
 	off_t found_offset = 0;
-	uint32_t index_pos;
 
 	display_progress(progress_state, ++nr_seen);
 
-	if (have_duplicate_entry(oid, exclude, &index_pos))
+	if (have_duplicate_entry(oid, exclude))
 		return 0;
 
 	if (!want_object_in_pack(oid, exclude, &found_pack, &found_offset)) {
@@ -1190,7 +1187,7 @@
 
 	create_object_entry(oid, type, pack_name_hash(name),
 			    exclude, name && no_try_delta(name),
-			    index_pos, found_pack, found_offset);
+			    found_pack, found_offset);
 	return 1;
 }
 
@@ -1199,17 +1196,15 @@
 					int flags, uint32_t name_hash,
 					struct packed_git *pack, off_t offset)
 {
-	uint32_t index_pos;
-
 	display_progress(progress_state, ++nr_seen);
 
-	if (have_duplicate_entry(oid, 0, &index_pos))
+	if (have_duplicate_entry(oid, 0))
 		return 0;
 
 	if (!want_object_in_pack(oid, 0, &pack, &offset))
 		return 0;
 
-	create_object_entry(oid, type, name_hash, 0, 0, index_pos, pack, offset);
+	create_object_entry(oid, type, name_hash, 0, 0, pack, offset);
 	return 1;
 }
 
@@ -1507,7 +1502,7 @@
 	 * First see if we're already sending the base (or it's explicitly in
 	 * our "excluded" list).
 	 */
-	base = packlist_find(&to_pack, &base_oid, NULL);
+	base = packlist_find(&to_pack, &base_oid);
 	if (base) {
 		if (!in_same_island(&delta->idx.oid, &base->idx.oid))
 			return 0;
@@ -2342,15 +2337,6 @@
 	free(array);
 }
 
-static void try_to_free_from_threads(size_t size)
-{
-	packing_data_lock(&to_pack);
-	release_pack_memory(size);
-	packing_data_unlock(&to_pack);
-}
-
-static try_to_free_t old_try_to_free_routine;
-
 /*
  * The main object list is split into smaller lists, each is handed to
  * one worker.
@@ -2391,12 +2377,10 @@
 	pthread_mutex_init(&cache_mutex, NULL);
 	pthread_mutex_init(&progress_mutex, NULL);
 	pthread_cond_init(&progress_cond, NULL);
-	old_try_to_free_routine = set_try_to_free_routine(try_to_free_from_threads);
 }
 
 static void cleanup_threaded_search(void)
 {
-	set_try_to_free_routine(old_try_to_free_routine);
 	pthread_cond_destroy(&progress_cond);
 	pthread_mutex_destroy(&cache_mutex);
 	pthread_mutex_destroy(&progress_mutex);
@@ -2579,7 +2563,7 @@
 	 * it was included via bitmaps, we would not have parsed it
 	 * previously).
 	 */
-	if (packlist_find(&to_pack, oid, NULL))
+	if (packlist_find(&to_pack, oid))
 		return;
 
 	tag = lookup_tag(the_repository, oid);
@@ -2603,7 +2587,7 @@
 
 	if (starts_with(path, "refs/tags/") && /* is a tag? */
 	    !peel_ref(path, &peeled)    && /* peelable? */
-	    packlist_find(&to_pack, &peeled, NULL))      /* object packed? */
+	    packlist_find(&to_pack, &peeled))      /* object packed? */
 		add_tag_chain(oid);
 	return 0;
 }
@@ -2715,10 +2699,6 @@
 		use_bitmap_index_default = git_config_bool(k, v);
 		return 0;
 	}
-	if (!strcmp(k, "pack.usesparse")) {
-		sparse = git_config_bool(k, v);
-		return 0;
-	}
 	if (!strcmp(k, "pack.threads")) {
 		delta_search_threads = git_config_int(k, v);
 		if (delta_search_threads < 0)
@@ -2803,7 +2783,7 @@
 		for (p = strchr(name, '/'); p; p = strchr(p + 1, '/'))
 			depth++;
 
-		ent = packlist_find(&to_pack, &obj->oid, NULL);
+		ent = packlist_find(&to_pack, &obj->oid);
 		if (ent && depth > oe_tree_depth(&to_pack, ent))
 			oe_set_tree_depth(&to_pack, ent, depth);
 	}
@@ -3034,7 +3014,7 @@
 
 		for (i = 0; i < p->num_objects; i++) {
 			nth_packed_object_oid(&oid, p, i);
-			if (!packlist_find(&to_pack, &oid, NULL) &&
+			if (!packlist_find(&to_pack, &oid) &&
 			    !has_sha1_pack_kept_or_nonlocal(&oid) &&
 			    !loosened_object_can_be_discarded(&oid, p->mtime))
 				if (force_object_loose(&oid, p->mtime))
@@ -3343,6 +3323,10 @@
 	read_replace_refs = 0;
 
 	sparse = git_env_bool("GIT_TEST_PACK_SPARSE", 0);
+	prepare_repo_settings(the_repository);
+	if (!sparse && the_repository->settings.pack_use_sparse != -1)
+		sparse = the_repository->settings.pack_use_sparse;
+
 	reset_pack_idx_option(&pack_idx_opts);
 	git_config(git_pack_config, NULL);
 
diff --git a/builtin/patch-id.c b/builtin/patch-id.c
index bd28b80..3059e52 100644
--- a/builtin/patch-id.c
+++ b/builtin/patch-id.c
@@ -1,15 +1,16 @@
+#include "cache.h"
 #include "builtin.h"
 #include "config.h"
 #include "diff.h"
 
 static void flush_current_id(int patchlen, struct object_id *id, struct object_id *result)
 {
-	char name[50];
+	char name[GIT_MAX_HEXSZ + 1];
 
 	if (!patchlen)
 		return;
 
-	memcpy(name, oid_to_hex(id), GIT_SHA1_HEXSZ + 1);
+	memcpy(name, oid_to_hex(id), the_hash_algo->hexsz + 1);
 	printf("%s %s\n", oid_to_hex(result), name);
 }
 
@@ -60,9 +61,9 @@
 {
 	int patchlen = 0, found_next = 0;
 	int before = -1, after = -1;
-	git_SHA_CTX ctx;
+	git_hash_ctx ctx;
 
-	git_SHA1_Init(&ctx);
+	the_hash_algo->init_fn(&ctx);
 	oidclr(result);
 
 	while (strbuf_getwholeline(line_buf, stdin, '\n') != EOF) {
@@ -122,7 +123,7 @@
 		/* Compute the sha without whitespace */
 		len = remove_space(line);
 		patchlen += len;
-		git_SHA1_Update(&ctx, line, len);
+		the_hash_algo->update_fn(&ctx, line, len);
 	}
 
 	if (!found_next)
diff --git a/builtin/pull.c b/builtin/pull.c
index f1eaf6e..d25ff13 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -129,6 +129,7 @@
 static char *opt_ipv4;
 static char *opt_ipv6;
 static int opt_show_forced_updates = -1;
+static char *set_upstream;
 
 static struct option pull_options[] = {
 	/* Shared options */
@@ -243,6 +244,9 @@
 		PARSE_OPT_NOARG),
 	OPT_BOOL(0, "show-forced-updates", &opt_show_forced_updates,
 		 N_("check for forced-updates on all updated branches")),
+	OPT_PASSTHRU(0, "set-upstream", &set_upstream, NULL,
+		N_("set upstream for git pull/fetch"),
+		PARSE_OPT_NOARG),
 
 	OPT_END()
 };
@@ -556,6 +560,8 @@
 		argv_array_push(&args, "--show-forced-updates");
 	else if (opt_show_forced_updates == 0)
 		argv_array_push(&args, "--no-show-forced-updates");
+	if (set_upstream)
+		argv_array_push(&args, set_upstream);
 
 	if (repo) {
 		argv_array_push(&args, repo);
diff --git a/builtin/push.c b/builtin/push.c
index 021dd3b..843f5b2 100644
--- a/builtin/push.c
+++ b/builtin/push.c
@@ -143,8 +143,8 @@
 	return remote->url_nr;
 }
 
-static NORETURN int die_push_simple(struct branch *branch,
-				    struct remote *remote)
+static NORETURN void die_push_simple(struct branch *branch,
+				     struct remote *remote)
 {
 	/*
 	 * There's no point in using shorten_unambiguous_ref here,
@@ -357,8 +357,10 @@
 
 	if (verbosity > 0)
 		fprintf(stderr, _("Pushing to %s\n"), transport->url);
+	trace2_region_enter("push", "transport_push", the_repository);
 	err = transport_push(the_repository, transport,
 			     rs, flags, &reject_reasons);
+	trace2_region_leave("push", "transport_push", the_repository);
 	if (err != 0) {
 		fprintf(stderr, "%s", push_get_color(PUSH_COLOR_ERROR));
 		error(_("failed to push some refs to '%s'"), transport->url);
@@ -385,30 +387,14 @@
 }
 
 static int do_push(const char *repo, int flags,
-		   const struct string_list *push_options)
+		   const struct string_list *push_options,
+		   struct remote *remote)
 {
 	int i, errs;
-	struct remote *remote = pushremote_get(repo);
 	const char **url;
 	int url_nr;
 	struct refspec *push_refspec = &rs;
 
-	if (!remote) {
-		if (repo)
-			die(_("bad repository '%s'"), repo);
-		die(_("No configured push destination.\n"
-		    "Either specify the URL from the command-line or configure a remote repository using\n"
-		    "\n"
-		    "    git remote add <name> <url>\n"
-		    "\n"
-		    "and then push using the remote name\n"
-		    "\n"
-		    "    git push <name>\n"));
-	}
-
-	if (remote->mirror)
-		flags |= (TRANSPORT_PUSH_MIRROR|TRANSPORT_PUSH_FORCE);
-
 	if (push_options->nr)
 		flags |= TRANSPORT_PUSH_OPTIONS;
 
@@ -548,6 +534,7 @@
 	struct string_list push_options_cmdline = STRING_LIST_INIT_DUP;
 	struct string_list *push_options;
 	const struct string_list_item *item;
+	struct remote *remote;
 
 	struct option options[] = {
 		OPT__VERBOSITY(&verbosity),
@@ -602,20 +589,6 @@
 		die(_("--delete is incompatible with --all, --mirror and --tags"));
 	if (deleterefs && argc < 2)
 		die(_("--delete doesn't make sense without any refs"));
-	if (flags & TRANSPORT_PUSH_ALL) {
-		if (tags)
-			die(_("--all and --tags are incompatible"));
-		if (argc >= 2)
-			die(_("--all can't be combined with refspecs"));
-	}
-	if (flags & TRANSPORT_PUSH_MIRROR) {
-		if (tags)
-			die(_("--mirror and --tags are incompatible"));
-		if (argc >= 2)
-			die(_("--mirror can't be combined with refspecs"));
-	}
-	if ((flags & TRANSPORT_PUSH_ALL) && (flags & TRANSPORT_PUSH_MIRROR))
-		die(_("--all and --mirror are incompatible"));
 
 	if (recurse_submodules == RECURSE_SUBMODULES_CHECK)
 		flags |= TRANSPORT_RECURSE_SUBMODULES_CHECK;
@@ -632,11 +605,43 @@
 		set_refspecs(argv + 1, argc - 1, repo);
 	}
 
+	remote = pushremote_get(repo);
+	if (!remote) {
+		if (repo)
+			die(_("bad repository '%s'"), repo);
+		die(_("No configured push destination.\n"
+		    "Either specify the URL from the command-line or configure a remote repository using\n"
+		    "\n"
+		    "    git remote add <name> <url>\n"
+		    "\n"
+		    "and then push using the remote name\n"
+		    "\n"
+		    "    git push <name>\n"));
+	}
+
+	if (remote->mirror)
+		flags |= (TRANSPORT_PUSH_MIRROR|TRANSPORT_PUSH_FORCE);
+
+	if (flags & TRANSPORT_PUSH_ALL) {
+		if (tags)
+			die(_("--all and --tags are incompatible"));
+		if (argc >= 2)
+			die(_("--all can't be combined with refspecs"));
+	}
+	if (flags & TRANSPORT_PUSH_MIRROR) {
+		if (tags)
+			die(_("--mirror and --tags are incompatible"));
+		if (argc >= 2)
+			die(_("--mirror can't be combined with refspecs"));
+	}
+	if ((flags & TRANSPORT_PUSH_ALL) && (flags & TRANSPORT_PUSH_MIRROR))
+		die(_("--all and --mirror are incompatible"));
+
 	for_each_string_list_item(item, push_options)
 		if (strchr(item->string, '\n'))
 			die(_("push options must not have new line characters"));
 
-	rc = do_push(repo, flags, push_options);
+	rc = do_push(repo, flags, push_options, remote);
 	string_list_clear(&push_options_cmdline, 0);
 	string_list_clear(&push_options_config, 0);
 	if (rc == -1)
diff --git a/builtin/rebase.c b/builtin/rebase.c
index 670096c..4a20582 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -29,8 +29,8 @@
 #include "rebase-interactive.h"
 
 static char const * const builtin_rebase_usage[] = {
-	N_("git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] "
-		"[<upstream>] [<branch>]"),
+	N_("git rebase [-i] [options] [--exec <cmd>] "
+		"[--onto <newbase> | --keep-base] [<upstream> [<branch>]]"),
 	N_("git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] "
 		"--root [<branch>]"),
 	N_("git rebase --continue | --abort | --skip | --edit-todo"),
@@ -62,7 +62,7 @@
 	const char *onto_name;
 	const char *revisions;
 	const char *switch_to;
-	int root;
+	int root, root_with_onto;
 	struct object_id *squash_onto;
 	struct commit *restrict_revision;
 	int dont_finish_rebase;
@@ -374,6 +374,7 @@
 	flags |= abbreviate_commands ? TODO_LIST_ABBREVIATE_CMDS : 0;
 	flags |= opts->rebase_merges ? TODO_LIST_REBASE_MERGES : 0;
 	flags |= opts->rebase_cousins > 0 ? TODO_LIST_REBASE_COUSINS : 0;
+	flags |= opts->root_with_onto ? TODO_LIST_ROOT_WITH_ONTO : 0;
 	flags |= command == ACTION_SHORTEN_OIDS ? TODO_LIST_SHORTEN_IDS : 0;
 
 	switch (command) {
@@ -1260,24 +1261,44 @@
 	return 1;
 }
 
-static int can_fast_forward(struct commit *onto, struct object_id *head_oid,
-			    struct object_id *merge_base)
+static int can_fast_forward(struct commit *onto, struct commit *upstream,
+			    struct commit *restrict_revision,
+			    struct object_id *head_oid, struct object_id *merge_base)
 {
 	struct commit *head = lookup_commit(the_repository, head_oid);
-	struct commit_list *merge_bases;
-	int res;
+	struct commit_list *merge_bases = NULL;
+	int res = 0;
 
 	if (!head)
-		return 0;
+		goto done;
 
 	merge_bases = get_merge_bases(onto, head);
-	if (merge_bases && !merge_bases->next) {
-		oidcpy(merge_base, &merge_bases->item->object.oid);
-		res = oideq(merge_base, &onto->object.oid);
-	} else {
+	if (!merge_bases || merge_bases->next) {
 		oidcpy(merge_base, &null_oid);
-		res = 0;
+		goto done;
 	}
+
+	oidcpy(merge_base, &merge_bases->item->object.oid);
+	if (!oideq(merge_base, &onto->object.oid))
+		goto done;
+
+	if (restrict_revision && !oideq(&restrict_revision->object.oid, merge_base))
+		goto done;
+
+	if (!upstream)
+		goto done;
+
+	free_commit_list(merge_bases);
+	merge_bases = get_merge_bases(upstream, head);
+	if (!merge_bases || merge_bases->next)
+		goto done;
+
+	if (!oideq(&onto->object.oid, &merge_bases->item->object.oid))
+		goto done;
+
+	res = 1;
+
+done:
 	free_commit_list(merge_bases);
 	return res && is_linear_history(onto, head);
 }
@@ -1376,6 +1397,7 @@
 	struct rebase_options options = REBASE_OPTIONS_INIT;
 	const char *branch_name;
 	int ret, flags, total_argc, in_progress = 0;
+	int keep_base = 0;
 	int ok_to_skip_pre_rebase = 0;
 	struct strbuf msg = STRBUF_INIT;
 	struct strbuf revisions = STRBUF_INIT;
@@ -1394,6 +1416,8 @@
 		OPT_STRING(0, "onto", &options.onto_name,
 			   N_("revision"),
 			   N_("rebase onto given branch instead of upstream")),
+		OPT_BOOL(0, "keep-base", &keep_base,
+			 N_("use the merge-base of upstream and branch as the current base")),
 		OPT_BOOL(0, "no-verify", &ok_to_skip_pre_rebase,
 			 N_("allow pre-rebase hook to run")),
 		OPT_NEGBIT('q', "quiet", &options.flags,
@@ -1547,6 +1571,13 @@
 		warning(_("git rebase --preserve-merges is deprecated. "
 			  "Use --rebase-merges instead."));
 
+	if (keep_base) {
+		if (options.onto_name)
+			die(_("cannot combine '--keep-base' with '--onto'"));
+		if (options.root)
+			die(_("cannot combine '--keep-base' with '--root'"));
+	}
+
 	if (action != ACTION_NONE && !in_progress)
 		die(_("No rebase in progress?"));
 	setenv(GIT_REFLOG_ACTION_ENVIRONMENT, "rebase", 0);
@@ -1833,15 +1864,6 @@
 			      "'--reschedule-failed-exec'"));
 	}
 
-	if (options.rebase_merges) {
-		if (strategy_options.nr)
-			die(_("cannot combine '--rebase-merges' with "
-			      "'--strategy-option'"));
-		if (options.strategy)
-			die(_("cannot combine '--rebase-merges' with "
-			      "'--strategy'"));
-	}
-
 	if (!options.root) {
 		if (argc < 1) {
 			struct branch *branch;
@@ -1872,7 +1894,9 @@
 			options.squash_onto = &squash_onto;
 			options.onto_name = squash_onto_name =
 				xstrdup(oid_to_hex(&squash_onto));
-		}
+		} else
+			options.root_with_onto = 1;
+
 		options.upstream_name = NULL;
 		options.upstream = NULL;
 		if (argc > 1)
@@ -1882,12 +1906,22 @@
 	}
 
 	/* Make sure the branch to rebase onto is valid. */
-	if (!options.onto_name)
+	if (keep_base) {
+		strbuf_reset(&buf);
+		strbuf_addstr(&buf, options.upstream_name);
+		strbuf_addstr(&buf, "...");
+		options.onto_name = xstrdup(buf.buf);
+	} else if (!options.onto_name)
 		options.onto_name = options.upstream_name;
 	if (strstr(options.onto_name, "...")) {
-		if (get_oid_mb(options.onto_name, &merge_base) < 0)
-			die(_("'%s': need exactly one merge base"),
-			    options.onto_name);
+		if (get_oid_mb(options.onto_name, &merge_base) < 0) {
+			if (keep_base)
+				die(_("'%s': need exactly one merge base with branch"),
+				    options.upstream_name);
+			else
+				die(_("'%s': need exactly one merge base"),
+				    options.onto_name);
+		}
 		options.onto = lookup_commit_or_die(&merge_base,
 						    options.onto_name);
 	} else {
@@ -1968,9 +2002,6 @@
 				state_dir_path("autostash", &options);
 			struct child_process stash = CHILD_PROCESS_INIT;
 			struct object_id oid;
-			struct commit *head =
-				lookup_commit_reference(the_repository,
-							&options.orig_head);
 
 			argv_array_pushl(&stash.args,
 					 "stash", "create", "autostash", NULL);
@@ -1991,17 +2022,9 @@
 				    options.state_dir);
 			write_file(autostash, "%s", oid_to_hex(&oid));
 			printf(_("Created autostash: %s\n"), buf.buf);
-			if (reset_head(&head->object.oid, "reset --hard",
+			if (reset_head(NULL, "reset --hard",
 				       NULL, RESET_HEAD_HARD, NULL, NULL) < 0)
 				die(_("could not reset --hard"));
-			printf(_("HEAD is now at %s"),
-			       find_unique_abbrev(&head->object.oid,
-						  DEFAULT_ABBREV));
-			strbuf_reset(&buf);
-			pp_commit_easy(CMIT_FMT_ONELINE, head, &buf);
-			if (buf.len > 0)
-				printf(" %s", buf.buf);
-			putchar('\n');
 
 			if (discard_index(the_repository->index) < 0 ||
 				repo_read_index(the_repository) < 0)
@@ -2022,13 +2045,13 @@
 
 	/*
 	 * Check if we are already based on onto with linear history,
-	 * but this should be done only when upstream and onto are the same
-	 * and if this is not an interactive rebase.
+	 * in which case we could fast-forward without replacing the commits
+	 * with new commits recreated by replaying their changes. This
+	 * optimization must not be done if this is an interactive rebase.
 	 */
-	if (can_fast_forward(options.onto, &options.orig_head, &merge_base) &&
-	    !is_interactive(&options) && !options.restrict_revision &&
-	    options.upstream &&
-	    !oidcmp(&options.upstream->object.oid, &options.onto->object.oid)) {
+	if (can_fast_forward(options.onto, options.upstream, options.restrict_revision,
+		    &options.orig_head, &merge_base) &&
+	    !is_interactive(&options)) {
 		int flag;
 
 		if (!(options.flags & REBASE_FORCE)) {
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index dcf3855..411e0b4 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -417,24 +417,22 @@
 	return 0;
 }
 
-#define HMAC_BLOCK_SIZE 64
-
-static void hmac_sha1(unsigned char *out,
+static void hmac(unsigned char *out,
 		      const char *key_in, size_t key_len,
 		      const char *text, size_t text_len)
 {
-	unsigned char key[HMAC_BLOCK_SIZE];
-	unsigned char k_ipad[HMAC_BLOCK_SIZE];
-	unsigned char k_opad[HMAC_BLOCK_SIZE];
+	unsigned char key[GIT_MAX_BLKSZ];
+	unsigned char k_ipad[GIT_MAX_BLKSZ];
+	unsigned char k_opad[GIT_MAX_BLKSZ];
 	int i;
-	git_SHA_CTX ctx;
+	git_hash_ctx ctx;
 
 	/* RFC 2104 2. (1) */
-	memset(key, '\0', HMAC_BLOCK_SIZE);
-	if (HMAC_BLOCK_SIZE < key_len) {
-		git_SHA1_Init(&ctx);
-		git_SHA1_Update(&ctx, key_in, key_len);
-		git_SHA1_Final(key, &ctx);
+	memset(key, '\0', GIT_MAX_BLKSZ);
+	if (the_hash_algo->blksz < key_len) {
+		the_hash_algo->init_fn(&ctx);
+		the_hash_algo->update_fn(&ctx, key_in, key_len);
+		the_hash_algo->final_fn(key, &ctx);
 	} else {
 		memcpy(key, key_in, key_len);
 	}
@@ -446,29 +444,29 @@
 	}
 
 	/* RFC 2104 2. (3) & (4) */
-	git_SHA1_Init(&ctx);
-	git_SHA1_Update(&ctx, k_ipad, sizeof(k_ipad));
-	git_SHA1_Update(&ctx, text, text_len);
-	git_SHA1_Final(out, &ctx);
+	the_hash_algo->init_fn(&ctx);
+	the_hash_algo->update_fn(&ctx, k_ipad, sizeof(k_ipad));
+	the_hash_algo->update_fn(&ctx, text, text_len);
+	the_hash_algo->final_fn(out, &ctx);
 
 	/* RFC 2104 2. (6) & (7) */
-	git_SHA1_Init(&ctx);
-	git_SHA1_Update(&ctx, k_opad, sizeof(k_opad));
-	git_SHA1_Update(&ctx, out, GIT_SHA1_RAWSZ);
-	git_SHA1_Final(out, &ctx);
+	the_hash_algo->init_fn(&ctx);
+	the_hash_algo->update_fn(&ctx, k_opad, sizeof(k_opad));
+	the_hash_algo->update_fn(&ctx, out, the_hash_algo->rawsz);
+	the_hash_algo->final_fn(out, &ctx);
 }
 
 static char *prepare_push_cert_nonce(const char *path, timestamp_t stamp)
 {
 	struct strbuf buf = STRBUF_INIT;
-	unsigned char sha1[GIT_SHA1_RAWSZ];
+	unsigned char hash[GIT_MAX_RAWSZ];
 
 	strbuf_addf(&buf, "%s:%"PRItime, path, stamp);
-	hmac_sha1(sha1, buf.buf, buf.len, cert_nonce_seed, strlen(cert_nonce_seed));
+	hmac(hash, buf.buf, buf.len, cert_nonce_seed, strlen(cert_nonce_seed));
 	strbuf_release(&buf);
 
 	/* RFC 2104 5. HMAC-SHA1-80 */
-	strbuf_addf(&buf, "%"PRItime"-%.*s", stamp, GIT_SHA1_HEXSZ, sha1_to_hex(sha1));
+	strbuf_addf(&buf, "%"PRItime"-%.*s", stamp, (int)the_hash_algo->hexsz, hash_to_hex(hash));
 	return strbuf_detach(&buf, NULL);
 }
 
@@ -970,7 +968,7 @@
 	if (run_command(&child))
 		return "Working directory has staged changes";
 
-	read_tree[3] = sha1_to_hex(sha1);
+	read_tree[3] = hash_to_hex(sha1);
 	child_process_init(&child);
 	child.argv = read_tree;
 	child.env = env->argv;
@@ -987,13 +985,13 @@
 
 static const char *push_to_checkout_hook = "push-to-checkout";
 
-static const char *push_to_checkout(unsigned char *sha1,
+static const char *push_to_checkout(unsigned char *hash,
 				    struct argv_array *env,
 				    const char *work_tree)
 {
 	argv_array_pushf(env, "GIT_WORK_TREE=%s", absolute_path(work_tree));
 	if (run_hook_le(env->argv, push_to_checkout_hook,
-			sha1_to_hex(sha1), NULL))
+			hash_to_hex(hash), NULL))
 		return "push-to-checkout hook declined";
 	else
 		return NULL;
diff --git a/builtin/repack.c b/builtin/repack.c
index 632c0c0..094c2f8 100644
--- a/builtin/repack.c
+++ b/builtin/repack.c
@@ -11,6 +11,7 @@
 #include "midx.h"
 #include "packfile.h"
 #include "object-store.h"
+#include "promisor-remote.h"
 
 static int delta_base_offset = 1;
 static int pack_kept_objects = -1;
@@ -190,7 +191,7 @@
 			die(_("could not start pack-objects to repack promisor objects"));
 	}
 
-	xwrite(cmd->in, oid_to_hex(oid), GIT_SHA1_HEXSZ);
+	xwrite(cmd->in, oid_to_hex(oid), the_hash_algo->hexsz);
 	xwrite(cmd->in, "\n", 1);
 	return 0;
 }
@@ -361,7 +362,7 @@
 	argv_array_push(&cmd.args, "--all");
 	argv_array_push(&cmd.args, "--reflog");
 	argv_array_push(&cmd.args, "--indexed-objects");
-	if (repository_format_partial_clone)
+	if (has_promisor_remote())
 		argv_array_push(&cmd.args, "--exclude-promisor-objects");
 	if (write_bitmaps > 0)
 		argv_array_push(&cmd.args, "--write-bitmap-index");
diff --git a/builtin/replace.c b/builtin/replace.c
index 644b21c..bd92dc6 100644
--- a/builtin/replace.c
+++ b/builtin/replace.c
@@ -272,7 +272,7 @@
 			return error(_("unable to spawn mktree"));
 		}
 
-		if (strbuf_read(&result, cmd.out, 41) < 0) {
+		if (strbuf_read(&result, cmd.out, the_hash_algo->hexsz + 1) < 0) {
 			error_errno(_("unable to read from mktree"));
 			close(fd);
 			close(cmd.out);
@@ -358,14 +358,15 @@
 	struct strbuf new_parents = STRBUF_INIT;
 	const char *parent_start, *parent_end;
 	int i;
+	const unsigned hexsz = the_hash_algo->hexsz;
 
 	/* find existing parents */
 	parent_start = buf->buf;
-	parent_start += GIT_SHA1_HEXSZ + 6; /* "tree " + "hex sha1" + "\n" */
+	parent_start += hexsz + 6; /* "tree " + "hex sha1" + "\n" */
 	parent_end = parent_start;
 
 	while (starts_with(parent_end, "parent "))
-		parent_end += 48; /* "parent " + "hex sha1" + "\n" */
+		parent_end += hexsz + 8; /* "parent " + "hex sha1" + "\n" */
 
 	/* prepare new parents */
 	for (i = 0; i < argc; i++) {
@@ -421,7 +422,7 @@
 		if (get_oid(mergetag_data->argv[i], &oid) < 0)
 			return error(_("not a valid object name: '%s'"),
 				     mergetag_data->argv[i]);
-		if (oideq(&tag->tagged->oid, &oid))
+		if (oideq(get_tagged_oid(tag), &oid))
 			return 0; /* found */
 	}
 
diff --git a/builtin/rev-list.c b/builtin/rev-list.c
index 301ccb9..e28d62e 100644
--- a/builtin/rev-list.c
+++ b/builtin/rev-list.c
@@ -18,7 +18,6 @@
 #include "reflog-walk.h"
 #include "oidset.h"
 #include "packfile.h"
-#include "object-store.h"
 
 static const char rev_list_usage[] =
 "git rev-list [OPTION] <commit-id>... [ -- paths... ]\n"
@@ -471,10 +470,6 @@
 			parse_list_objects_filter(&filter_options, arg);
 			if (filter_options.choice && !revs.blob_objects)
 				die(_("object filtering requires --objects"));
-			if (filter_options.choice == LOFC_SPARSE_OID &&
-			    !filter_options.sparse_oid_value)
-				die(_("invalid sparse value '%s'"),
-				    filter_options.filter_spec);
 			continue;
 		}
 		if (!strcmp(arg, ("--no-" CL_ARG__FILTER))) {
diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c
index f8bbe6d..308c67e 100644
--- a/builtin/rev-parse.c
+++ b/builtin/rev-parse.c
@@ -593,6 +593,7 @@
 	const char *name = NULL;
 	struct object_context unused;
 	struct strbuf buf = STRBUF_INIT;
+	const int hexsz = the_hash_algo->hexsz;
 
 	if (argc > 1 && !strcmp("--parseopt", argv[1]))
 		return cmd_parseopt(argc - 1, argv + 1, prefix);
@@ -730,8 +731,8 @@
 				abbrev = strtoul(arg, NULL, 10);
 				if (abbrev < MINIMUM_ABBREV)
 					abbrev = MINIMUM_ABBREV;
-				else if (40 <= abbrev)
-					abbrev = 40;
+				else if (hexsz <= abbrev)
+					abbrev = hexsz;
 				continue;
 			}
 			if (!strcmp(arg, "--sq")) {
diff --git a/builtin/show-index.c b/builtin/show-index.c
index a6e6788..0826f6a 100644
--- a/builtin/show-index.c
+++ b/builtin/show-index.c
@@ -11,6 +11,7 @@
 	unsigned nr;
 	unsigned int version;
 	static unsigned int top_index[256];
+	const unsigned hashsz = the_hash_algo->rawsz;
 
 	if (argc != 1)
 		usage(show_index_usage);
@@ -36,23 +37,23 @@
 	}
 	if (version == 1) {
 		for (i = 0; i < nr; i++) {
-			unsigned int offset, entry[6];
+			unsigned int offset, entry[(GIT_MAX_RAWSZ + 4) / sizeof(unsigned int)];
 
-			if (fread(entry, 4 + 20, 1, stdin) != 1)
+			if (fread(entry, 4 + hashsz, 1, stdin) != 1)
 				die("unable to read entry %u/%u", i, nr);
 			offset = ntohl(entry[0]);
-			printf("%u %s\n", offset, sha1_to_hex((void *)(entry+1)));
+			printf("%u %s\n", offset, hash_to_hex((void *)(entry+1)));
 		}
 	} else {
 		unsigned off64_nr = 0;
 		struct {
-			unsigned char sha1[20];
+			struct object_id oid;
 			uint32_t crc;
 			uint32_t off;
 		} *entries;
 		ALLOC_ARRAY(entries, nr);
 		for (i = 0; i < nr; i++)
-			if (fread(entries[i].sha1, 20, 1, stdin) != 1)
+			if (fread(entries[i].oid.hash, hashsz, 1, stdin) != 1)
 				die("unable to read sha1 %u/%u", i, nr);
 		for (i = 0; i < nr; i++)
 			if (fread(&entries[i].crc, 4, 1, stdin) != 1)
@@ -77,7 +78,7 @@
 			}
 			printf("%" PRIuMAX " %s (%08"PRIx32")\n",
 			       (uintmax_t) offset,
-			       sha1_to_hex(entries[i].sha1),
+			       oid_to_hex(&entries[i].oid),
 			       ntohl(entries[i].crc));
 		}
 		free(entries);
diff --git a/builtin/stash.c b/builtin/stash.c
index b5a301f..4e80617 100644
--- a/builtin/stash.c
+++ b/builtin/stash.c
@@ -396,7 +396,7 @@
 	const struct object_id *bases[1];
 
 	read_cache_preload(NULL);
-	if (refresh_cache(REFRESH_QUIET))
+	if (refresh_and_write_cache(REFRESH_QUIET, 0, 0))
 		return -1;
 
 	if (write_cache_as_tree(&c_tree, 0, NULL))
@@ -427,6 +427,8 @@
 				return error(_("could not save index tree"));
 
 			reset_head();
+			discard_cache();
+			read_cache();
 		}
 	}
 
@@ -485,7 +487,7 @@
 	}
 
 	if (quiet) {
-		if (refresh_cache(REFRESH_QUIET))
+		if (refresh_and_write_cache(REFRESH_QUIET, 0, 0))
 			warning("could not refresh index");
 	} else {
 		struct child_process cp = CHILD_PROCESS_INIT;
@@ -497,6 +499,10 @@
 		 */
 		cp.git_cmd = 1;
 		cp.dir = prefix;
+		argv_array_pushf(&cp.env_array, GIT_WORK_TREE_ENVIRONMENT"=%s",
+				 absolute_path(get_git_work_tree()));
+		argv_array_pushf(&cp.env_array, GIT_DIR_ENVIRONMENT"=%s",
+				 absolute_path(get_git_dir()));
 		argv_array_push(&cp.args, "status");
 		run_command(&cp);
 	}
@@ -1129,7 +1135,10 @@
 	prepare_fallback_ident("git stash", "git@stash");
 
 	read_cache_preload(NULL);
-	refresh_cache(REFRESH_QUIET);
+	if (refresh_and_write_cache(REFRESH_QUIET, 0, 0) < 0) {
+		ret = -1;
+		goto done;
+	}
 
 	if (get_oid("HEAD", &info->b_commit)) {
 		if (!quiet)
@@ -1290,7 +1299,7 @@
 		free(ps_matched);
 	}
 
-	if (refresh_cache(REFRESH_QUIET)) {
+	if (refresh_and_write_cache(REFRESH_QUIET, 0, 0)) {
 		ret = -1;
 		goto done;
 	}
@@ -1383,7 +1392,7 @@
 			struct child_process cp = CHILD_PROCESS_INIT;
 			cp.git_cmd = 1;
 			argv_array_pushl(&cp.args, "reset", "--hard", "-q",
-					 NULL);
+					 "--no-recurse-submodules", NULL);
 			if (run_command(&cp)) {
 				ret = -1;
 				goto done;
diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
index ad8df0d..521b4b3 100644
--- a/builtin/submodule--helper.c
+++ b/builtin/submodule--helper.c
@@ -425,7 +425,7 @@
 		const struct cache_entry *ce = list.entries[i];
 
 		if (ce_stage(ce))
-			printf("%06o %s U\t", ce->ce_mode, sha1_to_hex(null_sha1));
+			printf("%06o %s U\t", ce->ce_mode, oid_to_hex(&null_oid));
 		else
 			printf("%06o %s %d\t", ce->ce_mode,
 			       oid_to_hex(&ce->oid), ce_stage(ce));
@@ -1890,7 +1890,7 @@
 	};
 
 	const char *const git_submodule_helper_usage[] = {
-		N_("git submodule--helper update_clone [--prefix=<path>] [<path>...]"),
+		N_("git submodule--helper update-clone [--prefix=<path>] [<path>...]"),
 		NULL
 	};
 	suc.prefix = prefix;
diff --git a/builtin/update-index.c b/builtin/update-index.c
index dff2f4b..49302d9 100644
--- a/builtin/update-index.c
+++ b/builtin/update-index.c
@@ -966,6 +966,7 @@
 	struct parse_opt_ctx_t ctx;
 	strbuf_getline_fn getline_fn;
 	int parseopt_state = PARSE_OPT_UNKNOWN;
+	struct repository *r = the_repository;
 	struct option options[] = {
 		OPT_BIT('q', NULL, &refresh_args.flags,
 			N_("continue refresh even when index needs update"),
@@ -1180,11 +1181,12 @@
 		remove_split_index(&the_index);
 	}
 
+	prepare_repo_settings(r);
 	switch (untracked_cache) {
 	case UC_UNSPECIFIED:
 		break;
 	case UC_DISABLE:
-		if (git_config_get_untracked_cache() == 1)
+		if (r->settings.core_untracked_cache == UNTRACKED_CACHE_WRITE)
 			warning(_("core.untrackedCache is set to true; "
 				  "remove or change it, if you really want to "
 				  "disable the untracked cache"));
@@ -1196,7 +1198,7 @@
 		return !test_if_untracked_cache_is_supported();
 	case UC_ENABLE:
 	case UC_FORCE:
-		if (git_config_get_untracked_cache() == 0)
+		if (r->settings.core_untracked_cache == UNTRACKED_CACHE_REMOVE)
 			warning(_("core.untrackedCache is set to false; "
 				  "remove or change it, if you really want to "
 				  "enable the untracked cache"));
diff --git a/builtin/worktree.c b/builtin/worktree.c
index a5bb02b..4de44f5 100644
--- a/builtin/worktree.c
+++ b/builtin/worktree.c
@@ -10,7 +10,6 @@
 #include "run-command.h"
 #include "sigchain.h"
 #include "submodule.h"
-#include "refs.h"
 #include "utf8.h"
 #include "worktree.h"
 
@@ -350,7 +349,7 @@
 	 */
 	strbuf_reset(&sb);
 	strbuf_addf(&sb, "%s/HEAD", sb_repo.buf);
-	write_file(sb.buf, "%s", sha1_to_hex(null_sha1));
+	write_file(sb.buf, "%s", oid_to_hex(&null_oid));
 	strbuf_reset(&sb);
 	strbuf_addf(&sb, "%s/commondir", sb_repo.buf);
 	write_file(sb.buf, "../..");
@@ -880,7 +879,7 @@
 			  original_path);
 	ret = xread(cp.out, buf, sizeof(buf));
 	if (ret)
-		die(_("'%s' is dirty, use --force to delete it"),
+		die(_("'%s' contains modified or untracked files, use --force to delete it"),
 		    original_path);
 	close(cp.out);
 	ret = finish_command(&cp);
diff --git a/bulk-checkin.c b/bulk-checkin.c
index 39ee7d6..583aacb 100644
--- a/bulk-checkin.c
+++ b/bulk-checkin.c
@@ -197,7 +197,7 @@
 	git_hash_ctx ctx;
 	unsigned char obuf[16384];
 	unsigned header_len;
-	struct hashfile_checkpoint checkpoint;
+	struct hashfile_checkpoint checkpoint = {0};
 	struct pack_idx_entry *idx = NULL;
 
 	seekback = lseek(fd, 0, SEEK_CUR);
diff --git a/bundle.c b/bundle.c
index b5d21cd..a85ed3f 100644
--- a/bundle.c
+++ b/bundle.c
@@ -282,7 +282,7 @@
 		struct object *object = revs->pending.objects[i].item;
 		if (object->flags & UNINTERESTING)
 			write_or_die(pack_objects.in, "^", 1);
-		write_or_die(pack_objects.in, oid_to_hex(&object->oid), GIT_SHA1_HEXSZ);
+		write_or_die(pack_objects.in, oid_to_hex(&object->oid), the_hash_algo->hexsz);
 		write_or_die(pack_objects.in, "\n", 1);
 	}
 	close(pack_objects.in);
@@ -414,7 +414,7 @@
 		}
 
 		ref_count++;
-		write_or_die(bundle_fd, oid_to_hex(&e->item->oid), 40);
+		write_or_die(bundle_fd, oid_to_hex(&e->item->oid), the_hash_algo->hexsz);
 		write_or_die(bundle_fd, " ", 1);
 		write_or_die(bundle_fd, display_ref, strlen(display_ref));
 		write_or_die(bundle_fd, "\n", 1);
diff --git a/cache-tree.c b/cache-tree.c
index 706ffcf..1bd1b23 100644
--- a/cache-tree.c
+++ b/cache-tree.c
@@ -5,6 +5,7 @@
 #include "cache-tree.h"
 #include "object-store.h"
 #include "replace-object.h"
+#include "promisor-remote.h"
 
 #ifndef DEBUG_CACHE_TREE
 #define DEBUG_CACHE_TREE 0
@@ -357,7 +358,7 @@
 		}
 
 		ce_missing_ok = mode == S_IFGITLINK || missing_ok ||
-			(repository_format_partial_clone &&
+			(has_promisor_remote() &&
 			 ce_skip_worktree(ce));
 		if (is_null_oid(oid) ||
 		    (!ce_missing_ok && !has_object_file(oid))) {
@@ -407,7 +408,7 @@
 	if (repair) {
 		struct object_id oid;
 		hash_object_file(buffer.buf, buffer.len, tree_type, &oid);
-		if (has_object_file(&oid))
+		if (has_object_file_with_flags(&oid, OBJECT_INFO_SKIP_FETCH_OBJECT))
 			oidcpy(&it->oid, &oid);
 		else
 			to_invalidate = 1;
@@ -608,11 +609,66 @@
 	return it;
 }
 
+static int write_index_as_tree_internal(struct object_id *oid,
+					struct index_state *index_state,
+					int cache_tree_valid,
+					int flags,
+					const char *prefix)
+{
+	if (flags & WRITE_TREE_IGNORE_CACHE_TREE) {
+		cache_tree_free(&index_state->cache_tree);
+		cache_tree_valid = 0;
+	}
+
+	if (!index_state->cache_tree)
+		index_state->cache_tree = cache_tree();
+
+	if (!cache_tree_valid && cache_tree_update(index_state, flags) < 0)
+		return WRITE_TREE_UNMERGED_INDEX;
+
+	if (prefix) {
+		struct cache_tree *subtree;
+		subtree = cache_tree_find(index_state->cache_tree, prefix);
+		if (!subtree)
+			return WRITE_TREE_PREFIX_ERROR;
+		oidcpy(oid, &subtree->oid);
+	}
+	else
+		oidcpy(oid, &index_state->cache_tree->oid);
+
+	return 0;
+}
+
+struct tree* write_in_core_index_as_tree(struct repository *repo) {
+	struct object_id o;
+	int was_valid, ret;
+
+	struct index_state *index_state	= repo->index;
+	was_valid = index_state->cache_tree &&
+		    cache_tree_fully_valid(index_state->cache_tree);
+
+	ret = write_index_as_tree_internal(&o, index_state, was_valid, 0, NULL);
+	if (ret == WRITE_TREE_UNMERGED_INDEX) {
+		int i;
+		fprintf(stderr, "BUG: There are unmerged index entries:\n");
+		for (i = 0; i < index_state->cache_nr; i++) {
+			const struct cache_entry *ce = index_state->cache[i];
+			if (ce_stage(ce))
+				fprintf(stderr, "BUG: %d %.*s\n", ce_stage(ce),
+					(int)ce_namelen(ce), ce->name);
+		}
+		BUG("unmerged index entries when writing inmemory index");
+	}
+
+	return lookup_tree(repo, &index_state->cache_tree->oid);
+}
+
+
 int write_index_as_tree(struct object_id *oid, struct index_state *index_state, const char *index_path, int flags, const char *prefix)
 {
 	int entries, was_valid;
 	struct lock_file lock_file = LOCK_INIT;
-	int ret = 0;
+	int ret;
 
 	hold_lock_file_for_update(&lock_file, index_path, LOCK_DIE_ON_ERROR);
 
@@ -621,18 +677,14 @@
 		ret = WRITE_TREE_UNREADABLE_INDEX;
 		goto out;
 	}
-	if (flags & WRITE_TREE_IGNORE_CACHE_TREE)
-		cache_tree_free(&index_state->cache_tree);
 
-	if (!index_state->cache_tree)
-		index_state->cache_tree = cache_tree();
+	was_valid = !(flags & WRITE_TREE_IGNORE_CACHE_TREE) &&
+		    index_state->cache_tree &&
+		    cache_tree_fully_valid(index_state->cache_tree);
 
-	was_valid = cache_tree_fully_valid(index_state->cache_tree);
-	if (!was_valid) {
-		if (cache_tree_update(index_state, flags) < 0) {
-			ret = WRITE_TREE_UNMERGED_INDEX;
-			goto out;
-		}
+	ret = write_index_as_tree_internal(oid, index_state, was_valid, flags,
+					   prefix);
+	if (!ret && !was_valid) {
 		write_locked_index(index_state, &lock_file, COMMIT_LOCK);
 		/* Not being able to write is fine -- we are only interested
 		 * in updating the cache-tree part, and if the next caller
@@ -642,18 +694,6 @@
 		 */
 	}
 
-	if (prefix) {
-		struct cache_tree *subtree;
-		subtree = cache_tree_find(index_state->cache_tree, prefix);
-		if (!subtree) {
-			ret = WRITE_TREE_PREFIX_ERROR;
-			goto out;
-		}
-		oidcpy(oid, &subtree->oid);
-	}
-	else
-		oidcpy(oid, &index_state->cache_tree->oid);
-
 out:
 	rollback_lock_file(&lock_file);
 	return ret;
@@ -713,7 +753,7 @@
 	if (!info->prev)
 		return root;
 	our_parent = find_cache_tree_from_traversal(root, info->prev);
-	return cache_tree_find(our_parent, info->name.path);
+	return cache_tree_find(our_parent, info->name);
 }
 
 int cache_tree_matches_traversal(struct cache_tree *root,
diff --git a/cache-tree.h b/cache-tree.h
index 757bbc4..639bfa5 100644
--- a/cache-tree.h
+++ b/cache-tree.h
@@ -34,7 +34,7 @@
 int cache_tree_update(struct index_state *, int);
 void cache_tree_verify(struct repository *, struct index_state *);
 
-/* bitmasks to write_cache_as_tree flags */
+/* bitmasks to write_index_as_tree flags */
 #define WRITE_TREE_MISSING_OK 1
 #define WRITE_TREE_IGNORE_CACHE_TREE 2
 #define WRITE_TREE_DRY_RUN 4
@@ -46,6 +46,7 @@
 #define WRITE_TREE_UNMERGED_INDEX (-2)
 #define WRITE_TREE_PREFIX_ERROR (-3)
 
+struct tree* write_in_core_index_as_tree(struct repository *repo);
 int write_index_as_tree(struct object_id *oid, struct index_state *index_state, const char *index_path, int flags, const char *prefix);
 void prime_cache_tree(struct repository *, struct index_state *, struct tree *);
 
diff --git a/cache.h b/cache.h
index b1da1ab..04cabaa 100644
--- a/cache.h
+++ b/cache.h
@@ -414,6 +414,7 @@
 #define add_file_to_cache(path, flags) add_file_to_index(&the_index, (path), (flags))
 #define chmod_cache_entry(ce, flip) chmod_index_entry(&the_index, (ce), (flip))
 #define refresh_cache(flags) refresh_index(&the_index, (flags), NULL, NULL, NULL)
+#define refresh_and_write_cache(refresh_flags, write_flags, gentle) repo_refresh_and_write_index(the_repository, (refresh_flags), (write_flags), (gentle), NULL, NULL, NULL)
 #define ce_match_stat(ce, st, options) ie_match_stat(&the_index, (ce), (st), (options))
 #define ce_modified(ce, st, options) ie_modified(&the_index, (ce), (st), (options))
 #define cache_dir_exists(name, namelen) index_dir_exists(&the_index, (name), (namelen))
@@ -636,6 +637,9 @@
  * at least 'nr' entries; the number of entries currently allocated
  * is 'alloc', using the standard growing factor alloc_nr() macro.
  *
+ * Consider using ALLOC_GROW_BY instead of ALLOC_GROW as it has some
+ * added niceties.
+ *
  * DO NOT USE any expression with side-effect for 'x', 'nr', or 'alloc'.
  */
 #define ALLOC_GROW(x, nr, alloc) \
@@ -649,6 +653,25 @@
 		} \
 	} while (0)
 
+/*
+ * Similar to ALLOC_GROW but handles updating of the nr value and
+ * zeroing the bytes of the newly-grown array elements.
+ *
+ * DO NOT USE any expression with side-effect for any of the
+ * arguments.
+ */
+#define ALLOC_GROW_BY(x, nr, increase, alloc) \
+	do { \
+		if (increase) { \
+			size_t new_nr = nr + (increase); \
+			if (new_nr < nr) \
+				BUG("negative growth in ALLOC_GROW_BY"); \
+			ALLOC_GROW(x, new_nr, alloc); \
+			memset((x) + nr, 0, sizeof(*(x)) * (increase)); \
+			nr = new_nr; \
+		} \
+	} while (0)
+
 /* Initialize and use the cache information */
 struct lock_file;
 void preload_index(struct index_state *index,
@@ -725,6 +748,19 @@
  */
 int index_name_pos(const struct index_state *, const char *name, int namelen);
 
+/*
+ * Some functions return the negative complement of an insert position when a
+ * precise match was not found but a position was found where the entry would
+ * need to be inserted. This helper protects that logic from any integer
+ * underflow.
+ */
+static inline int index_pos_to_insert_pos(uintmax_t pos)
+{
+	if (pos > INT_MAX)
+		die("overflow: -1 - %"PRIuMAX, pos);
+	return -1 - (int)pos;
+}
+
 #define ADD_CACHE_OK_TO_ADD 1		/* Ok to add */
 #define ADD_CACHE_OK_TO_REPLACE 2	/* Ok to replace file/directory */
 #define ADD_CACHE_SKIP_DFCHECK 4	/* Ok to skip DF conflict checks */
@@ -812,6 +848,23 @@
 #define REFRESH_IN_PORCELAIN	0x0020	/* user friendly output, not "needs update" */
 #define REFRESH_PROGRESS	0x0040  /* show progress bar if stderr is tty */
 int refresh_index(struct index_state *, unsigned int flags, const struct pathspec *pathspec, char *seen, const char *header_msg);
+/*
+ * Refresh the index and write it to disk.
+ *
+ * 'refresh_flags' is passed directly to 'refresh_index()', while
+ * 'COMMIT_LOCK | write_flags' is passed to 'write_locked_index()', so
+ * the lockfile is always either committed or rolled back.
+ *
+ * If 'gentle' is passed, errors locking the index are ignored.
+ *
+ * Return 1 if refreshing the index returns an error, -1 if writing
+ * the index to disk fails, 0 on success.
+ *
+ * Note that if refreshing the index returns an error, we still write
+ * out the index (unless locking fails).
+ */
+int repo_refresh_and_write_index(struct repository*, unsigned int refresh_flags, unsigned int write_flags, int gentle, const struct pathspec *, char *seen, const char *header_msg);
+
 struct cache_entry *refresh_cache_entry(struct index_state *, struct cache_entry *, unsigned int);
 
 void set_alternate_index_output(const char *);
@@ -937,8 +990,6 @@
 #define GIT_REPO_VERSION 0
 #define GIT_REPO_VERSION_READ 1
 extern int repository_format_precious_objects;
-extern char *repository_format_partial_clone;
-extern const char *core_partial_clone_filter_default;
 extern int repository_format_worktree_config;
 
 /*
@@ -1029,7 +1080,6 @@
 int repo_find_unique_abbrev_r(struct repository *r, char *hex, const struct object_id *oid, int len);
 #define find_unique_abbrev_r(hex, oid, len) repo_find_unique_abbrev_r(the_repository, hex, oid, len)
 
-extern const unsigned char null_sha1[GIT_MAX_RAWSZ];
 extern const struct object_id null_oid;
 
 static inline int hashcmp(const unsigned char *sha1, const unsigned char *sha2)
@@ -1064,14 +1114,9 @@
 	return hasheq(oid1->hash, oid2->hash);
 }
 
-static inline int is_null_sha1(const unsigned char *sha1)
-{
-	return hasheq(sha1, null_sha1);
-}
-
 static inline int is_null_oid(const struct object_id *oid)
 {
-	return hasheq(oid->hash, null_sha1);
+	return oideq(oid, &null_oid);
 }
 
 static inline void hashcpy(unsigned char *sha_dst, const unsigned char *sha_src)
@@ -1516,8 +1561,7 @@
 struct date_mode *date_mode_from_type(enum date_mode_type type);
 
 const char *show_date(timestamp_t time, int timezone, const struct date_mode *mode);
-void show_date_relative(timestamp_t time, const struct timeval *now,
-			struct strbuf *timebuf);
+void show_date_relative(timestamp_t time, struct strbuf *timebuf);
 void show_date_human(timestamp_t time, int tz, const struct timeval *now,
 			struct strbuf *timebuf);
 int parse_date(const char *date, struct strbuf *out);
@@ -1526,7 +1570,7 @@
 void datestamp(struct strbuf *out);
 #define approxidate(s) approxidate_careful((s), NULL)
 timestamp_t approxidate_careful(const char *, int *);
-timestamp_t approxidate_relative(const char *date, const struct timeval *now);
+timestamp_t approxidate_relative(const char *date);
 void parse_date_format(const char *format, struct date_mode *mode);
 int date_overflows(timestamp_t date);
 
diff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh
index 8cc7250..4e64a19 100755
--- a/ci/install-dependencies.sh
+++ b/ci/install-dependencies.sh
@@ -40,20 +40,27 @@
 	test -z "$BREW_INSTALL_PACKAGES" ||
 	brew install $BREW_INSTALL_PACKAGES
 	brew link --force gettext
+	brew cask install perforce || {
+		# Update the definitions and try again
+		git -C "$(brew --repository)"/Library/Taps/homebrew/homebrew-cask pull &&
+		brew cask install perforce
+	} ||
 	brew install caskroom/cask/perforce
 	case "$jobname" in
 	osx-gcc)
+		brew link gcc ||
 		brew link gcc@8
 		;;
 	esac
 	;;
 StaticAnalysis)
 	sudo apt-get -q update
-	sudo apt-get -q -y install coccinelle
+	sudo apt-get -q -y install coccinelle libcurl4-openssl-dev libssl-dev \
+		libexpat-dev gettext
 	;;
 Documentation)
 	sudo apt-get -q update
-	sudo apt-get -q -y install asciidoc xmlto
+	sudo apt-get -q -y install asciidoc xmlto docbook-xsl-ns
 
 	test -n "$ALREADY_HAVE_ASCIIDOCTOR" ||
 	gem install --version 1.5.8 asciidoctor
diff --git a/ci/lib.sh b/ci/lib.sh
index 44db2d5..c8c2c38 100755
--- a/ci/lib.sh
+++ b/ci/lib.sh
@@ -34,6 +34,11 @@
 # successfully before (e.g. because the branch got rebased, changing only
 # the commit messages).
 skip_good_tree () {
+	if test "$TRAVIS_DEBUG_MODE" = true
+	then
+		return
+	fi
+
 	if ! good_tree_info="$(grep "^$(git rev-parse $CI_COMMIT^{tree}) " "$good_trees_file")"
 	then
 		# Haven't seen this tree yet, or no cached good trees file yet.
@@ -160,7 +165,7 @@
 		export CC=gcc-8
 	fi
 
-	export GIT_TEST_HTTPD=YesPlease
+	export GIT_TEST_HTTPD=true
 
 	# The Linux build installs the defined dependency versions below.
 	# The OS X build installs much more recent versions, whichever
diff --git a/ci/run-static-analysis.sh b/ci/run-static-analysis.sh
index a19aa7e..65bcebd 100755
--- a/ci/run-static-analysis.sh
+++ b/ci/run-static-analysis.sh
@@ -26,4 +26,7 @@
 	exit 1
 fi
 
+make hdr-check ||
+exit 1
+
 save_good_tree
diff --git a/ci/test-documentation.sh b/ci/test-documentation.sh
index d490898..b3e76ef 100755
--- a/ci/test-documentation.sh
+++ b/ci/test-documentation.sh
@@ -8,6 +8,8 @@
 filter_log () {
 	sed -e '/^GIT_VERSION = /d' \
 	    -e '/^    \* new asciidoc flags$/d' \
+	    -e '/stripped namespace before processing/d' \
+	    -e '/Attributed.*IDs for element/d' \
 	    "$1"
 }
 
diff --git a/column.c b/column.c
index 7a17c14..4a38eed 100644
--- a/column.c
+++ b/column.c
@@ -23,18 +23,7 @@
 /* return length of 's' in letters, ANSI escapes stripped */
 static int item_length(const char *s)
 {
-	int len, i = 0;
-	struct strbuf str = STRBUF_INIT;
-
-	strbuf_addstr(&str, s);
-	while ((s = strstr(str.buf + i, "\033[")) != NULL) {
-		int len = strspn(s + 2, "0123456789;");
-		i = s - str.buf;
-		strbuf_remove(&str, i, len + 3); /* \033[<len><func char> */
-	}
-	len = utf8_strwidth(str.buf);
-	strbuf_release(&str);
-	return len;
+	return utf8_strnwidth(s, -1, 1);
 }
 
 /*
diff --git a/combine-diff.c b/combine-diff.c
index 3e49f3b..d5c4d83 100644
--- a/combine-diff.c
+++ b/combine-diff.c
@@ -930,7 +930,7 @@
 				 int show_file_header)
 {
 	struct diff_options *opt = &rev->diffopt;
-	int abbrev = opt->flags.full_index ? GIT_SHA1_HEXSZ : DEFAULT_ABBREV;
+	int abbrev = opt->flags.full_index ? the_hash_algo->hexsz : DEFAULT_ABBREV;
 	const char *a_prefix = opt->a_prefix ? opt->a_prefix : "a/";
 	const char *b_prefix = opt->b_prefix ? opt->b_prefix : "b/";
 	const char *c_meta = diff_get_color_opt(opt, DIFF_METAINFO);
diff --git a/commit-graph.c b/commit-graph.c
index fe954ab..0aea7b2 100644
--- a/commit-graph.c
+++ b/commit-graph.c
@@ -41,6 +41,9 @@
 #define GRAPH_MIN_SIZE (GRAPH_HEADER_SIZE + 4 * GRAPH_CHUNKLOOKUP_WIDTH \
 			+ GRAPH_FANOUT_SIZE + the_hash_algo->rawsz)
 
+/* Remember to update object flag allocation in object.h */
+#define REACHABLE       (1u<<15)
+
 char *get_commit_graph_filename(const char *obj_dir)
 {
 	char *filename = xstrfmt("%s/info/commit-graph", obj_dir);
@@ -467,19 +470,26 @@
 static int prepare_commit_graph(struct repository *r)
 {
 	struct object_directory *odb;
-	int config_value;
 
-	if (git_env_bool(GIT_TEST_COMMIT_GRAPH_DIE_ON_LOAD, 0))
-		die("dying as requested by the '%s' variable on commit-graph load!",
-		    GIT_TEST_COMMIT_GRAPH_DIE_ON_LOAD);
+	/*
+	 * This must come before the "already attempted?" check below, because
+	 * we want to disable even an already-loaded graph file.
+	 */
+	if (r->commit_graph_disabled)
+		return 0;
 
 	if (r->objects->commit_graph_attempted)
 		return !!r->objects->commit_graph;
 	r->objects->commit_graph_attempted = 1;
 
+	if (git_env_bool(GIT_TEST_COMMIT_GRAPH_DIE_ON_LOAD, 0))
+		die("dying as requested by the '%s' variable on commit-graph load!",
+		    GIT_TEST_COMMIT_GRAPH_DIE_ON_LOAD);
+
+	prepare_repo_settings(r);
+
 	if (!git_env_bool(GIT_TEST_COMMIT_GRAPH, 0) &&
-	    (repo_config_get_bool(r, "core.commitgraph", &config_value) ||
-	    !config_value))
+	    r->settings.core_commit_graph != 1)
 		/*
 		 * This repository is not configured to use commit graphs, so
 		 * do not load one. (But report commit_graph_attempted anyway
@@ -783,7 +793,8 @@
 
 	unsigned append:1,
 		 report_progress:1,
-		 split:1;
+		 split:1,
+		 check_oids:1;
 
 	const struct split_commit_graph_opts *split_opts;
 };
@@ -838,12 +849,19 @@
 
 	while (list < last) {
 		struct commit_list *parent;
+		struct object_id *tree;
 		int edge_value;
 		uint32_t packedDate[2];
 		display_progress(ctx->progress, ++ctx->progress_cnt);
 
-		parse_commit_no_graph(*list);
-		hashwrite(f, get_commit_tree_oid(*list)->hash, hash_len);
+		if (parse_commit_no_graph(*list))
+			die(_("unable to parse commit %s"),
+				oid_to_hex(&(*list)->object.oid));
+		tree = get_commit_tree_oid(*list);
+		if (!tree)
+			die(_("unable to get tree for %s"),
+				oid_to_hex(&(*list)->object.oid));
+		hashwrite(f, tree->hash, hash_len);
 
 		parent = (*list)->parents;
 
@@ -1015,11 +1033,11 @@
 {
 	struct commit_list *parent;
 	for (parent = commit->parents; parent; parent = parent->next) {
-		if (!(parent->item->object.flags & UNINTERESTING)) {
+		if (!(parent->item->object.flags & REACHABLE)) {
 			ALLOC_GROW(ctx->oids.list, ctx->oids.nr + 1, ctx->oids.alloc);
 			oidcpy(&ctx->oids.list[ctx->oids.nr], &(parent->item->object.oid));
 			ctx->oids.nr++;
-			parent->item->object.flags |= UNINTERESTING;
+			parent->item->object.flags |= REACHABLE;
 		}
 	}
 }
@@ -1037,7 +1055,7 @@
 		display_progress(ctx->progress, i + 1);
 		commit = lookup_commit(ctx->r, &ctx->oids.list[i]);
 		if (commit)
-			commit->object.flags |= UNINTERESTING;
+			commit->object.flags |= REACHABLE;
 	}
 	stop_progress(&ctx->progress);
 
@@ -1049,7 +1067,7 @@
 	if (ctx->report_progress)
 		ctx->progress = start_delayed_progress(
 					_("Expanding reachable commits in commit graph"),
-					ctx->oids.nr);
+					0);
 	for (i = 0; i < ctx->oids.nr; i++) {
 		display_progress(ctx->progress, i + 1);
 		commit = lookup_commit(ctx->r, &ctx->oids.list[i]);
@@ -1074,7 +1092,7 @@
 		commit = lookup_commit(ctx->r, &ctx->oids.list[i]);
 
 		if (commit)
-			commit->object.flags &= ~UNINTERESTING;
+			commit->object.flags &= ~REACHABLE;
 	}
 	stop_progress(&ctx->progress);
 }
@@ -1134,7 +1152,8 @@
 	return 0;
 }
 
-int write_commit_graph_reachable(const char *obj_dir, unsigned int flags,
+int write_commit_graph_reachable(const char *obj_dir,
+				 enum commit_graph_write_flags flags,
 				 const struct split_commit_graph_opts *split_opts)
 {
 	struct string_list list = STRING_LIST_INIT_DUP;
@@ -1193,8 +1212,8 @@
 	return 0;
 }
 
-static void fill_oids_from_commit_hex(struct write_commit_graph_context *ctx,
-				      struct string_list *commit_hex)
+static int fill_oids_from_commit_hex(struct write_commit_graph_context *ctx,
+				     struct string_list *commit_hex)
 {
 	uint32_t i;
 	struct strbuf progress_title = STRBUF_INIT;
@@ -1215,20 +1234,21 @@
 		struct commit *result;
 
 		display_progress(ctx->progress, i + 1);
-		if (commit_hex->items[i].string &&
-		    parse_oid_hex(commit_hex->items[i].string, &oid, &end))
-			continue;
-
-		result = lookup_commit_reference_gently(ctx->r, &oid, 1);
-
-		if (result) {
+		if (!parse_oid_hex(commit_hex->items[i].string, &oid, &end) &&
+		    (result = lookup_commit_reference_gently(ctx->r, &oid, 1))) {
 			ALLOC_GROW(ctx->oids.list, ctx->oids.nr + 1, ctx->oids.alloc);
 			oidcpy(&ctx->oids.list[ctx->oids.nr], &(result->object.oid));
 			ctx->oids.nr++;
+		} else if (ctx->check_oids) {
+			error(_("invalid commit object id: %s"),
+			    commit_hex->items[i].string);
+			return -1;
 		}
 	}
 	stop_progress(&ctx->progress);
 	strbuf_release(&progress_title);
+
+	return 0;
 }
 
 static void fill_oids_from_all_packs(struct write_commit_graph_context *ctx)
@@ -1276,7 +1296,6 @@
 static void copy_oids_to_commits(struct write_commit_graph_context *ctx)
 {
 	uint32_t i;
-	struct commit_list *parent;
 
 	ctx->num_extra_edges = 0;
 	if (ctx->report_progress)
@@ -1284,7 +1303,8 @@
 			_("Finding extra edges in commit graph"),
 			ctx->oids.nr);
 	for (i = 0; i < ctx->oids.nr; i++) {
-		int num_parents = 0;
+		unsigned int num_parents;
+
 		display_progress(ctx->progress, i + 1);
 		if (i > 0 && oideq(&ctx->oids.list[i - 1], &ctx->oids.list[i]))
 			continue;
@@ -1298,10 +1318,7 @@
 
 		parse_commit_no_graph(ctx->commits.list[ctx->commits.nr]);
 
-		for (parent = ctx->commits.list[ctx->commits.nr]->parents;
-		     parent; parent = parent->next)
-			num_parents++;
-
+		num_parents = commit_list_count(ctx->commits.list[ctx->commits.nr]->parents);
 		if (num_parents > 2)
 			ctx->num_extra_edges += num_parents - 1;
 
@@ -1519,8 +1536,8 @@
 
 static void split_graph_merge_strategy(struct write_commit_graph_context *ctx)
 {
-	struct commit_graph *g = ctx->r->objects->commit_graph;
-	uint32_t num_commits = ctx->commits.nr;
+	struct commit_graph *g;
+	uint32_t num_commits;
 	uint32_t i;
 
 	int max_commits = 0;
@@ -1532,6 +1549,7 @@
 	}
 
 	g = ctx->r->objects->commit_graph;
+	num_commits = ctx->commits.nr;
 	ctx->num_commit_graphs_after = ctx->num_commit_graphs_before + 1;
 
 	while (g && (g->num_commits <= size_mult * num_commits ||
@@ -1613,8 +1631,7 @@
 
 static void sort_and_scan_merged_commits(struct write_commit_graph_context *ctx)
 {
-	uint32_t i, num_parents;
-	struct commit_list *parent;
+	uint32_t i;
 
 	if (ctx->report_progress)
 		ctx->progress = start_delayed_progress(
@@ -1632,10 +1649,9 @@
 			die(_("unexpected duplicate commit id %s"),
 			    oid_to_hex(&ctx->commits.list[i]->object.oid));
 		} else {
-			num_parents = 0;
-			for (parent = ctx->commits.list[i]->parents; parent; parent = parent->next)
-				num_parents++;
+			unsigned int num_parents;
 
+			num_parents = commit_list_count(ctx->commits.list[i]->parents);
 			if (num_parents > 2)
 				ctx->num_extra_edges += num_parents - 1;
 		}
@@ -1752,7 +1768,7 @@
 int write_commit_graph(const char *obj_dir,
 		       struct string_list *pack_indexes,
 		       struct string_list *commit_hex,
-		       unsigned int flags,
+		       enum commit_graph_write_flags flags,
 		       const struct split_commit_graph_opts *split_opts)
 {
 	struct write_commit_graph_context *ctx;
@@ -1773,9 +1789,10 @@
 	if (len && ctx->obj_dir[len - 1] == '/')
 		ctx->obj_dir[len - 1] = 0;
 
-	ctx->append = flags & COMMIT_GRAPH_APPEND ? 1 : 0;
-	ctx->report_progress = flags & COMMIT_GRAPH_PROGRESS ? 1 : 0;
-	ctx->split = flags & COMMIT_GRAPH_SPLIT ? 1 : 0;
+	ctx->append = flags & COMMIT_GRAPH_WRITE_APPEND ? 1 : 0;
+	ctx->report_progress = flags & COMMIT_GRAPH_WRITE_PROGRESS ? 1 : 0;
+	ctx->split = flags & COMMIT_GRAPH_WRITE_SPLIT ? 1 : 0;
+	ctx->check_oids = flags & COMMIT_GRAPH_WRITE_CHECK_OIDS ? 1 : 0;
 	ctx->split_opts = split_opts;
 
 	if (ctx->split) {
@@ -1830,8 +1847,10 @@
 			goto cleanup;
 	}
 
-	if (commit_hex)
-		fill_oids_from_commit_hex(ctx, commit_hex);
+	if (commit_hex) {
+		if ((res = fill_oids_from_commit_hex(ctx, commit_hex)))
+			goto cleanup;
+	}
 
 	if (!pack_indexes && !commit_hex)
 		fill_oids_from_all_packs(ctx);
@@ -1986,8 +2005,10 @@
 	if (verify_commit_graph_error & ~VERIFY_COMMIT_GRAPH_ERROR_HASH)
 		return verify_commit_graph_error;
 
-	progress = start_progress(_("Verifying commits in commit graph"),
-				  g->num_commits);
+	if (flags & COMMIT_GRAPH_WRITE_PROGRESS)
+		progress = start_progress(_("Verifying commits in commit graph"),
+					g->num_commits);
+
 	for (i = 0; i < g->num_commits; i++) {
 		struct commit *graph_commit, *odb_commit;
 		struct commit_list *graph_parents, *odb_parents;
@@ -2095,3 +2116,8 @@
 	free(g->filename);
 	free(g);
 }
+
+void disable_commit_graph(struct repository *r)
+{
+	r->commit_graph_disabled = 1;
+}
diff --git a/commit-graph.h b/commit-graph.h
index df9a3b2..7f5c933 100644
--- a/commit-graph.h
+++ b/commit-graph.h
@@ -71,9 +71,13 @@
  */
 int generation_numbers_enabled(struct repository *r);
 
-#define COMMIT_GRAPH_APPEND     (1 << 0)
-#define COMMIT_GRAPH_PROGRESS   (1 << 1)
-#define COMMIT_GRAPH_SPLIT      (1 << 2)
+enum commit_graph_write_flags {
+	COMMIT_GRAPH_WRITE_APPEND     = (1 << 0),
+	COMMIT_GRAPH_WRITE_PROGRESS   = (1 << 1),
+	COMMIT_GRAPH_WRITE_SPLIT      = (1 << 2),
+	/* Make sure that each OID in the input is a valid commit OID. */
+	COMMIT_GRAPH_WRITE_CHECK_OIDS = (1 << 3)
+};
 
 struct split_commit_graph_opts {
 	int size_multiple;
@@ -87,12 +91,13 @@
  * is not compatible with the commit-graph feature, then the
  * methods will return 0 without writing a commit-graph.
  */
-int write_commit_graph_reachable(const char *obj_dir, unsigned int flags,
+int write_commit_graph_reachable(const char *obj_dir,
+				 enum commit_graph_write_flags flags,
 				 const struct split_commit_graph_opts *split_opts);
 int write_commit_graph(const char *obj_dir,
 		       struct string_list *pack_indexes,
 		       struct string_list *commit_hex,
-		       unsigned int flags,
+		       enum commit_graph_write_flags flags,
 		       const struct split_commit_graph_opts *split_opts);
 
 #define COMMIT_GRAPH_VERIFY_SHALLOW	(1 << 0)
@@ -102,4 +107,10 @@
 void close_commit_graph(struct raw_object_store *);
 void free_commit_graph(struct commit_graph *);
 
+/*
+ * Disable further use of the commit graph in this process when parsing a
+ * "struct commit".
+ */
+void disable_commit_graph(struct repository *r);
+
 #endif
diff --git a/commit-reach.c b/commit-reach.c
index 3ea1747..4ca7e70 100644
--- a/commit-reach.c
+++ b/commit-reach.c
@@ -10,7 +10,6 @@
 #include "commit-reach.h"
 
 /* Remember to update object flag allocation in object.h */
-#define REACHABLE       (1u<<15)
 #define PARENT1		(1u<<16)
 #define PARENT2		(1u<<17)
 #define STALE		(1u<<18)
diff --git a/commit.c b/commit.c
index a98de16..40890ae 100644
--- a/commit.c
+++ b/commit.c
@@ -358,14 +358,15 @@
 
 struct object_id *get_commit_tree_oid(const struct commit *commit)
 {
-	return &get_commit_tree(commit)->object.oid;
+	struct tree *tree = get_commit_tree(commit);
+	return tree ? &tree->object.oid : NULL;
 }
 
 void release_commit_memory(struct parsed_object_pool *pool, struct commit *c)
 {
 	set_commit_tree(c, NULL);
-	c->index = 0;
 	free_commit_buffer(pool, c);
+	c->index = 0;
 	free_commit_list(c->parents);
 
 	c->object.parsed = 0;
diff --git a/common-main.c b/common-main.c
index 582a7b1..71e21dd 100644
--- a/common-main.c
+++ b/common-main.c
@@ -39,16 +39,16 @@
 
 	git_resolve_executable_dir(argv[0]);
 
-	trace2_initialize();
-	trace2_cmd_start(argv);
-	trace2_collect_process_info(TRACE2_PROCESS_INFO_STARTUP);
-
 	git_setup_gettext();
 
 	initialize_the_repository();
 
 	attr_start();
 
+	trace2_initialize();
+	trace2_cmd_start(argv);
+	trace2_collect_process_info(TRACE2_PROCESS_INFO_STARTUP);
+
 	result = cmd_main(argc, argv);
 
 	trace2_cmd_exit(result);
diff --git a/compat/mingw.c b/compat/mingw.c
index 7cbde1d..bd24d91 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -363,6 +363,8 @@
 			/* ignore trailing slashes */
 			if (*path)
 				basename = path;
+			else
+				break;
 		}
 
 	if (hide_dotfiles == HIDE_DOTFILES_TRUE)
@@ -1186,14 +1188,21 @@
 			 int isexe, int exe_only)
 {
 	char path[MAX_PATH];
+	wchar_t wpath[MAX_PATH];
 	snprintf(path, sizeof(path), "%.*s\\%s.exe", dirlen, dir, cmd);
 
-	if (!isexe && access(path, F_OK) == 0)
+	if (xutftowcs_path(wpath, path) < 0)
+		return NULL;
+
+	if (!isexe && _waccess(wpath, F_OK) == 0)
 		return xstrdup(path);
-	path[strlen(path)-4] = '\0';
-	if ((!exe_only || isexe) && access(path, F_OK) == 0)
-		if (!(GetFileAttributes(path) & FILE_ATTRIBUTE_DIRECTORY))
+	wpath[wcslen(wpath)-4] = '\0';
+	if ((!exe_only || isexe) && _waccess(wpath, F_OK) == 0) {
+		if (!(GetFileAttributesW(wpath) & FILE_ATTRIBUTE_DIRECTORY)) {
+			path[strlen(path)-4] = '\0';
 			return xstrdup(path);
+		}
+	}
 	return NULL;
 }
 
@@ -1254,11 +1263,6 @@
 	return _wcsnicmp(p, q, p_len);
 }
 
-/* We need a stable sort to convert the environment between UTF-16 <-> UTF-8 */
-#ifndef INTERNAL_QSORT
-#include "qsort.c"
-#endif
-
 /*
  * Build an environment block combining the inherited environment
  * merged with the given list of settings.
@@ -1290,15 +1294,15 @@
 		}
 
 		ALLOC_ARRAY(result, size);
-		memcpy(result, wenv, size * sizeof(*wenv));
+		COPY_ARRAY(result, wenv, size);
 		FreeEnvironmentStringsW(wenv);
 		return result;
 	}
 
 	/*
 	 * If there is a deltaenv, let's accumulate all keys into `array`,
-	 * sort them using the stable git_qsort() and then copy, skipping
-	 * duplicate keys
+	 * sort them using the stable git_stable_qsort() and then copy,
+	 * skipping duplicate keys
 	 */
 	for (p = wenv; p && *p; ) {
 		ALLOC_GROW(array, nr + 1, alloc);
@@ -1321,7 +1325,7 @@
 		p += wlen + 1;
 	}
 
-	git_qsort(array, nr, sizeof(*array), wenvcmp);
+	git_stable_qsort(array, nr, sizeof(*array), wenvcmp);
 	ALLOC_ARRAY(result, size + delta_size);
 
 	for (p = result, i = 0; i < nr; i++) {
@@ -1334,7 +1338,7 @@
 			continue;
 
 		size = wcslen(array[i]) + 1;
-		memcpy(p, array[i], size * sizeof(*p));
+		COPY_ARRAY(p, array[i], size);
 		p += size;
 	}
 	*p = L'\0';
@@ -1702,6 +1706,8 @@
 	if (!w_key)
 		die("Out of memory, (tried to allocate %u wchar_t's)", len_key);
 	xutftowcs(w_key, name, len_key);
+	/* GetEnvironmentVariableW() only sets the last error upon failure */
+	SetLastError(ERROR_SUCCESS);
 	len_value = GetEnvironmentVariableW(w_key, w_value, ARRAY_SIZE(w_value));
 	if (!len_value && GetLastError() == ERROR_ENVVAR_NOT_FOUND) {
 		free(w_key);
diff --git a/compat/mingw.h b/compat/mingw.h
index 2d17024..04ca731 100644
--- a/compat/mingw.h
+++ b/compat/mingw.h
@@ -11,7 +11,7 @@
 #undef _POSIX_THREAD_SAFE_FUNCTIONS
 #endif
 
-extern int mingw_core_config(const char *var, const char *value, void *cb);
+int mingw_core_config(const char *var, const char *value, void *cb);
 #define platform_core_config mingw_core_config
 
 /*
@@ -443,7 +443,7 @@
 			*path = '/';
 }
 #define PATH_SEP ';'
-extern char *mingw_query_user_email(void);
+char *mingw_query_user_email(void);
 #define query_user_email mingw_query_user_email
 #if !defined(__MINGW64_VERSION_MAJOR) && (!defined(_MSC_VER) || _MSC_VER < 1800)
 #define PRIuMAX "I64u"
@@ -594,4 +594,4 @@
 /*
  * Used by Pthread API implementation for Windows
  */
-extern int err_win_to_posix(DWORD winerr);
+int err_win_to_posix(DWORD winerr);
diff --git a/compat/nedmalloc/malloc.c.h b/compat/nedmalloc/malloc.c.h
index b833ff9..9134349 100644
--- a/compat/nedmalloc/malloc.c.h
+++ b/compat/nedmalloc/malloc.c.h
@@ -1755,10 +1755,10 @@
   assert(sl->l != 0);
   assert(sl->threadid == CURRENT_THREAD);
   if (--sl->c == 0) {
-    sl->threadid = 0;
     volatile unsigned int* lp = &sl->l;
     int prev = 0;
     int ret;
+    sl->threadid = 0;
     __asm__ __volatile__ ("lock; xchgl %0, %1"
 			  : "=r" (ret)
 			  : "m" (*(lp)), "0"(prev)
@@ -3066,7 +3066,7 @@
 #if !ONLY_MSPACES
     /* Set up lock for main malloc area */
     gm->mflags = mparams.default_mflags;
-    INITIAL_LOCK(&gm->mutex);
+    (void)INITIAL_LOCK(&gm->mutex);
 #endif
 
 #if (FOOTERS && !INSECURE)
@@ -5017,7 +5017,7 @@
   mchunkptr msp = align_as_chunk(tbase);
   mstate m = (mstate)(chunk2mem(msp));
   memset(m, 0, msize);
-  INITIAL_LOCK(&m->mutex);
+  (void)INITIAL_LOCK(&m->mutex);
   msp->head = (msize|PINUSE_BIT|CINUSE_BIT);
   m->seg.base = m->least_addr = tbase;
   m->seg.size = m->footprint = m->max_footprint = tsize;
diff --git a/compat/vcbuild/scripts/clink.pl b/compat/vcbuild/scripts/clink.pl
index c7b021b..d9f71b7 100755
--- a/compat/vcbuild/scripts/clink.pl
+++ b/compat/vcbuild/scripts/clink.pl
@@ -45,9 +45,9 @@
 	} elsif ("$arg" eq "-liconv") {
 		push(@args, "libiconv.lib");
 	} elsif ("$arg" eq "-lcrypto") {
-		push(@args, "libeay32.lib");
+		push(@args, "libcrypto.lib");
 	} elsif ("$arg" eq "-lssl") {
-		push(@args, "ssleay32.lib");
+		push(@args, "libssl.lib");
 	} elsif ("$arg" eq "-lcurl") {
 		my $lib = "";
 		# Newer vcpkg definitions call this libcurl_imp.lib; Do we
@@ -68,8 +68,54 @@
 	} elsif ("$arg" =~ /^-L/ && "$arg" ne "-LTCG") {
 		$arg =~ s/^-L/-LIBPATH:/;
 		push(@lflags, $arg);
-	} elsif ("$arg" =~ /^-R/) {
+	} elsif ("$arg" =~ /^-[Rl]/) {
 		# eat
+	} elsif ("$arg" eq "-Werror") {
+		push(@cflags, "-WX");
+	} elsif ("$arg" eq "-Wall") {
+		# cl.exe understands -Wall, but it is really overzealous
+		push(@cflags, "-W4");
+		# disable the "signed/unsigned mismatch" warnings; our source code violates that
+		push(@cflags, "-wd4018");
+		push(@cflags, "-wd4245");
+		push(@cflags, "-wd4389");
+		# disable the "unreferenced formal parameter" warning; our source code violates that
+		push(@cflags, "-wd4100");
+		# disable the "conditional expression is constant" warning; our source code violates that
+		push(@cflags, "-wd4127");
+		# disable the "const object should be initialized" warning; these warnings affect only objects that are `static`
+		push(@cflags, "-wd4132");
+		# disable the "function/data pointer conversion in expression" warning; our source code violates that
+		push(@cflags, "-wd4152");
+		# disable the "non-constant aggregate initializer" warning; our source code violates that
+		push(@cflags, "-wd4204");
+		# disable the "cannot be initialized using address of automatic variable" warning; our source code violates that
+		push(@cflags, "-wd4221");
+		# disable the "possible loss of data" warnings; our source code violates that
+		push(@cflags, "-wd4244");
+		push(@cflags, "-wd4267");
+		# disable the "array is too small to include a terminating null character" warning; we ab-use strings to initialize OIDs
+		push(@cflags, "-wd4295");
+		# disable the "'<<': result of 32-bit shift implicitly converted to 64 bits" warning; our source code violates that
+		push(@cflags, "-wd4334");
+		# disable the "declaration hides previous local declaration" warning; our source code violates that
+		push(@cflags, "-wd4456");
+		# disable the "declaration hides function parameter" warning; our source code violates that
+		push(@cflags, "-wd4457");
+		# disable the "declaration hides global declaration" warning; our source code violates that
+		push(@cflags, "-wd4459");
+		# disable the "potentially uninitialized local variable '<name>' used" warning; our source code violates that
+		push(@cflags, "-wd4701");
+		# disable the "unreachable code" warning; our source code violates that
+		push(@cflags, "-wd4702");
+		# disable the "potentially uninitialized local pointer variable used" warning; our source code violates that
+		push(@cflags, "-wd4703");
+		# disable the "assignment within conditional expression" warning; our source code violates that
+		push(@cflags, "-wd4706");
+		# disable the "'inet_ntoa': Use inet_ntop() or InetNtop() instead" warning; our source code violates that
+		push(@cflags, "-wd4996");
+	} elsif ("$arg" =~ /^-W[a-z]/) {
+		# let's ignore those
 	} else {
 		push(@args, $arg);
 	}
diff --git a/compat/win32/path-utils.h b/compat/win32/path-utils.h
index 3403681..f2e7087 100644
--- a/compat/win32/path-utils.h
+++ b/compat/win32/path-utils.h
@@ -1,3 +1,6 @@
+#ifndef WIN32_PATH_UTILS_H
+#define WIN32_PATH_UTILS_H
+
 int win32_has_dos_drive_prefix(const char *path);
 #define has_dos_drive_prefix win32_has_dos_drive_prefix
 
@@ -19,3 +22,5 @@
 #define find_last_dir_sep win32_find_last_dir_sep
 int win32_offset_1st_component(const char *path);
 #define offset_1st_component win32_offset_1st_component
+
+#endif
diff --git a/compat/win32/pthread.h b/compat/win32/pthread.h
index c6cb8dd..737983d 100644
--- a/compat/win32/pthread.h
+++ b/compat/win32/pthread.h
@@ -50,8 +50,8 @@
 	DWORD tid;
 } pthread_t;
 
-extern int pthread_create(pthread_t *thread, const void *unused,
-			  void *(*start_routine)(void*), void *arg);
+int pthread_create(pthread_t *thread, const void *unused,
+		   void *(*start_routine)(void*), void *arg);
 
 /*
  * To avoid the need of copying a struct, we use small macro wrapper to pass
@@ -59,10 +59,10 @@
  */
 #define pthread_join(a, b) win32_pthread_join(&(a), (b))
 
-extern int win32_pthread_join(pthread_t *thread, void **value_ptr);
+int win32_pthread_join(pthread_t *thread, void **value_ptr);
 
 #define pthread_equal(t1, t2) ((t1).tid == (t2).tid)
-extern pthread_t pthread_self(void);
+pthread_t pthread_self(void);
 
 static inline void NORETURN pthread_exit(void *ret)
 {
diff --git a/compat/winansi.c b/compat/winansi.c
index cacd82c..54fd701 100644
--- a/compat/winansi.c
+++ b/compat/winansi.c
@@ -546,7 +546,7 @@
 typedef struct _OBJECT_NAME_INFORMATION
 {
 	UNICODE_STRING Name;
-	WCHAR NameBuffer[0];
+	WCHAR NameBuffer[FLEX_ARRAY];
 } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
 
 #define ObjectNameInformation 1
diff --git a/config.c b/config.c
index 3900e49..e7052b3 100644
--- a/config.c
+++ b/config.c
@@ -275,7 +275,7 @@
 	int flags;
 	int ret;
 	struct strbuf pattern = STRBUF_INIT;
-	const char *refname = !the_repository || !the_repository->gitdir ?
+	const char *refname = !the_repository->gitdir ?
 		NULL : resolve_ref_unsafe("HEAD", 0, NULL, &flags);
 	const char *shortname;
 
@@ -1204,7 +1204,7 @@
 			default_abbrev = -1;
 		else {
 			int abbrev = git_config_int(var, value);
-			if (abbrev < minimum_abbrev || abbrev > 40)
+			if (abbrev < minimum_abbrev || abbrev > the_hash_algo->hexsz)
 				return error(_("abbrev length out of range: %d"), abbrev);
 			default_abbrev = abbrev;
 		}
@@ -1379,11 +1379,6 @@
 		return 0;
 	}
 
-	if (!strcmp(var, "core.partialclonefilter")) {
-		return git_config_string(&core_partial_clone_filter_default,
-					 var, value);
-	}
-
 	if (!strcmp(var, "core.usereplacerefs")) {
 		read_replace_refs = git_config_bool(var, value);
 		return 0;
@@ -1861,9 +1856,9 @@
 	if (git_config_parse_key(key, &normalized_key, NULL))
 		return NULL;
 
-	hashmap_entry_init(&k, strhash(normalized_key));
+	hashmap_entry_init(&k.ent, strhash(normalized_key));
 	k.key = normalized_key;
-	found_entry = hashmap_get(&cs->config_hash, &k, NULL);
+	found_entry = hashmap_get_entry(&cs->config_hash, &k, ent, NULL);
 	free(normalized_key);
 	return found_entry;
 }
@@ -1882,10 +1877,10 @@
 	 */
 	if (!e) {
 		e = xmalloc(sizeof(*e));
-		hashmap_entry_init(e, strhash(key));
+		hashmap_entry_init(&e->ent, strhash(key));
 		e->key = xstrdup(key);
 		string_list_init(&e->value_list, 1);
-		hashmap_add(&cs->config_hash, e);
+		hashmap_add(&cs->config_hash, &e->ent);
 	}
 	si = string_list_append_nodup(&e->value_list, xstrdup_or_null(value));
 
@@ -1913,12 +1908,14 @@
 }
 
 static int config_set_element_cmp(const void *unused_cmp_data,
-				  const void *entry,
-				  const void *entry_or_key,
+				  const struct hashmap_entry *eptr,
+				  const struct hashmap_entry *entry_or_key,
 				  const void *unused_keydata)
 {
-	const struct config_set_element *e1 = entry;
-	const struct config_set_element *e2 = entry_or_key;
+	const struct config_set_element *e1, *e2;
+
+	e1 = container_of(eptr, const struct config_set_element, ent);
+	e2 = container_of(entry_or_key, const struct config_set_element, ent);
 
 	return strcmp(e1->key, e2->key);
 }
@@ -1939,12 +1936,12 @@
 	if (!cs->hash_initialized)
 		return;
 
-	hashmap_iter_init(&cs->config_hash, &iter);
-	while ((entry = hashmap_iter_next(&iter))) {
+	hashmap_for_each_entry(&cs->config_hash, &iter, entry,
+				ent /* member name */) {
 		free(entry->key);
 		string_list_clear(&entry->value_list, 1);
 	}
-	hashmap_free(&cs->config_hash, 1);
+	hashmap_free_entries(&cs->config_hash, struct config_set_element, ent);
 	cs->hash_initialized = 0;
 	free(cs->list.items);
 	cs->list.nr = 0;
@@ -2288,30 +2285,6 @@
 	return -1; /* thing exists but cannot be parsed */
 }
 
-int git_config_get_untracked_cache(void)
-{
-	int val = -1;
-	const char *v;
-
-	/* Hack for test programs like test-dump-untracked-cache */
-	if (ignore_untracked_cache_config)
-		return -1;
-
-	if (!git_config_get_maybe_bool("core.untrackedcache", &val))
-		return val;
-
-	if (!git_config_get_value("core.untrackedcache", &v)) {
-		if (!strcasecmp(v, "keep"))
-			return -1;
-
-		error(_("unknown core.untrackedCache value '%s'; "
-			"using 'keep' default value"), v);
-		return -1;
-	}
-
-	return -1; /* default value */
-}
-
 int git_config_get_split_index(void)
 {
 	int val;
diff --git a/config.mak.uname b/config.mak.uname
index 3e46a8e..0ab8e00 100644
--- a/config.mak.uname
+++ b/config.mak.uname
@@ -702,20 +702,24 @@
 	perl contrib/buildsystems/generate -g Vcxproj
 	git add -f git.sln {*,*/lib,t/helper/*}/*.vcxproj
 
-	# Generate the LinkOrCopyBuiltins.targets file
+	# Generate the LinkOrCopyBuiltins.targets and LinkOrCopyRemoteHttp.targets file
 	(echo '<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">' && \
 	 echo '  <Target Name="CopyBuiltins_AfterBuild" AfterTargets="AfterBuild">' && \
 	 for name in $(BUILT_INS);\
 	 do \
 	   echo '    <Copy SourceFiles="$$(OutDir)\git.exe" DestinationFiles="$$(OutDir)\'"$$name"'" SkipUnchangedFiles="true" UseHardlinksIfPossible="true" />'; \
 	 done && \
+	 echo '  </Target>' && \
+	 echo '</Project>') >git/LinkOrCopyBuiltins.targets
+	(echo '<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">' && \
+	 echo '  <Target Name="CopyBuiltins_AfterBuild" AfterTargets="AfterBuild">' && \
 	 for name in $(REMOTE_CURL_ALIASES); \
 	 do \
 	   echo '    <Copy SourceFiles="$$(OutDir)\'"$(REMOTE_CURL_PRIMARY)"'" DestinationFiles="$$(OutDir)\'"$$name"'" SkipUnchangedFiles="true" UseHardlinksIfPossible="true" />'; \
 	 done && \
 	 echo '  </Target>' && \
-	 echo '</Project>') >git/LinkOrCopyBuiltins.targets
-	git add -f git/LinkOrCopyBuiltins.targets
+	 echo '</Project>') >git-remote-http/LinkOrCopyRemoteHttp.targets
+	git add -f git/LinkOrCopyBuiltins.targets git-remote-http/LinkOrCopyRemoteHttp.targets
 
 	# Add command-list.h
 	$(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 command-list.h
@@ -723,11 +727,10 @@
 
 	# Add scripts
 	rm -f perl/perl.mak
-	$(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 \
-		$(SCRIPT_LIB) $(SCRIPT_SH_GEN) $(SCRIPT_PERL_GEN)
+	$(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 $(SCRIPT_LIB) $(SCRIPTS)
 	# Strip out the sane tool path, needed only for building
 	sed -i '/^git_broken_path_fix ".*/d' git-sh-setup
-	git add -f $(SCRIPT_LIB) $(SCRIPT_SH_GEN) $(SCRIPT_PERL_GEN)
+	git add -f $(SCRIPT_LIB) $(SCRIPTS)
 
 	# Add Perl module
 	$(MAKE) $(LIB_PERL_GEN)
@@ -757,6 +760,10 @@
 	$(MAKE) -C templates
 	git add -f templates/boilerplates.made templates/blt/
 
+	# Add the translated messages
+	make MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 $(MOFILES)
+	git add -f $(MOFILES)
+
 	# Add build options
 	$(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 GIT-BUILD-OPTIONS
 	git add -f GIT-BUILD-OPTIONS
diff --git a/connect.c b/connect.c
index 4050a79..b6451ab 100644
--- a/connect.c
+++ b/connect.c
@@ -915,6 +915,10 @@
 
 	if (protocol == PROTO_LOCAL)
 		path = end;
+	else if (protocol == PROTO_FILE && *host != '/' &&
+		 !has_dos_drive_prefix(host) &&
+		 offset_1st_component(host - 2) > 1)
+		path = host - 2; /* include the leading "//" */
 	else if (protocol == PROTO_FILE && has_dos_drive_prefix(end))
 		path = end; /* "file://$(pwd)" may be "file://C:/projects/repo" */
 	else
diff --git a/connected.c b/connected.c
index cd9b324..36c4e5d 100644
--- a/connected.c
+++ b/connected.c
@@ -5,6 +5,7 @@
 #include "connected.h"
 #include "transport.h"
 #include "packfile.h"
+#include "promisor-remote.h"
 
 /*
  * If we feed all the commits we want to verify to this command
@@ -28,6 +29,7 @@
 	struct packed_git *new_pack = NULL;
 	struct transport *transport;
 	size_t base_len;
+	const unsigned hexsz = the_hash_algo->hexsz;
 
 	if (!opt)
 		opt = &defaults;
@@ -73,7 +75,7 @@
 	argv_array_push(&rev_list.args,"rev-list");
 	argv_array_push(&rev_list.args, "--objects");
 	argv_array_push(&rev_list.args, "--stdin");
-	if (repository_format_partial_clone)
+	if (has_promisor_remote())
 		argv_array_push(&rev_list.args, "--exclude-promisor-objects");
 	if (!opt->is_deepening_fetch) {
 		argv_array_push(&rev_list.args, "--not");
@@ -99,7 +101,7 @@
 
 	sigchain_push(SIGPIPE, SIG_IGN);
 
-	commit[GIT_SHA1_HEXSZ] = '\n';
+	commit[hexsz] = '\n';
 	do {
 		/*
 		 * If index-pack already checked that:
@@ -112,8 +114,8 @@
 		if (new_pack && find_pack_entry_one(oid.hash, new_pack))
 			continue;
 
-		memcpy(commit, oid_to_hex(&oid), GIT_SHA1_HEXSZ);
-		if (write_in_full(rev_list.in, commit, GIT_SHA1_HEXSZ + 1) < 0) {
+		memcpy(commit, oid_to_hex(&oid), hexsz);
+		if (write_in_full(rev_list.in, commit, hexsz + 1) < 0) {
 			if (errno != EPIPE && errno != EINVAL)
 				error_errno(_("failed write to rev-list"));
 			err = -1;
diff --git a/contrib/buildsystems/Generators/Vcxproj.pm b/contrib/buildsystems/Generators/Vcxproj.pm
index 576ccab..5c666f9 100644
--- a/contrib/buildsystems/Generators/Vcxproj.pm
+++ b/contrib/buildsystems/Generators/Vcxproj.pm
@@ -79,7 +79,8 @@
     if (!$static_library) {
       $libs_release = join(";", sort(grep /^(?!libgit\.lib|xdiff\/lib\.lib|vcs-svn\/lib\.lib)/, @{$$build_structure{"$prefix${name}_LIBS"}}));
       $libs_debug = $libs_release;
-      $libs_debug =~ s/zlib\.lib/zlibd\.lib/;
+      $libs_debug =~ s/zlib\.lib/zlibd\.lib/g;
+      $libs_debug =~ s/libcurl\.lib/libcurl-d\.lib/g;
     }
 
     $defines =~ s/-D//g;
@@ -119,13 +120,13 @@
     <VCPKGArch Condition="'\$(Platform)'=='Win32'">x86-windows</VCPKGArch>
     <VCPKGArch Condition="'\$(Platform)'!='Win32'">x64-windows</VCPKGArch>
     <VCPKGArchDirectory>$cdup\\compat\\vcbuild\\vcpkg\\installed\\\$(VCPKGArch)</VCPKGArchDirectory>
-    <VCPKGBinDirectory Condition="'\(Configuration)'=='Debug'">\$(VCPKGArchDirectory)\\debug\\bin</VCPKGBinDirectory>
-    <VCPKGLibDirectory Condition="'\(Configuration)'=='Debug'">\$(VCPKGArchDirectory)\\debug\\lib</VCPKGLibDirectory>
-    <VCPKGBinDirectory Condition="'\(Configuration)'!='Debug'">\$(VCPKGArchDirectory)\\bin</VCPKGBinDirectory>
-    <VCPKGLibDirectory Condition="'\(Configuration)'!='Debug'">\$(VCPKGArchDirectory)\\lib</VCPKGLibDirectory>
+    <VCPKGBinDirectory Condition="'\$(Configuration)'=='Debug'">\$(VCPKGArchDirectory)\\debug\\bin</VCPKGBinDirectory>
+    <VCPKGLibDirectory Condition="'\$(Configuration)'=='Debug'">\$(VCPKGArchDirectory)\\debug\\lib</VCPKGLibDirectory>
+    <VCPKGBinDirectory Condition="'\$(Configuration)'!='Debug'">\$(VCPKGArchDirectory)\\bin</VCPKGBinDirectory>
+    <VCPKGLibDirectory Condition="'\$(Configuration)'!='Debug'">\$(VCPKGArchDirectory)\\lib</VCPKGLibDirectory>
     <VCPKGIncludeDirectory>\$(VCPKGArchDirectory)\\include</VCPKGIncludeDirectory>
-    <VCPKGLibs Condition="'\(Configuration)'=='Debug'">$libs_debug</VCPKGLibs>
-    <VCPKGLibs Condition="'\(Configuration)'!='Debug'">$libs_release</VCPKGLibs>
+    <VCPKGLibs Condition="'\$(Configuration)'=='Debug'">$libs_debug</VCPKGLibs>
+    <VCPKGLibs Condition="'\$(Configuration)'!='Debug'">$libs_release</VCPKGLibs>
   </PropertyGroup>
   <Import Project="\$(VCTargetsPath)\\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'\$(Configuration)'=='Debug'" Label="Configuration">
@@ -277,6 +278,9 @@
     if ($target eq 'git') {
       print F "  <Import Project=\"LinkOrCopyBuiltins.targets\" />\n";
     }
+    if ($target eq 'git-remote-http') {
+      print F "  <Import Project=\"LinkOrCopyRemoteHttp.targets\" />\n";
+    }
     print F << "EOM";
 </Project>
 EOM
diff --git a/contrib/buildsystems/engine.pl b/contrib/buildsystems/engine.pl
index fba8a3f..0709785 100755
--- a/contrib/buildsystems/engine.pl
+++ b/contrib/buildsystems/engine.pl
@@ -343,9 +343,9 @@
         } elsif ("$part" eq "-lz") {
             push(@libs, "zlib.lib");
         } elsif ("$part" eq "-lcrypto") {
-            push(@libs, "libeay32.lib");
+            push(@libs, "libcrypto.lib");
         } elsif ("$part" eq "-lssl") {
-            push(@libs, "ssleay32.lib");
+            push(@libs, "libssl.lib");
         } elsif ("$part" eq "-lcurl") {
             push(@libs, "libcurl.lib");
         } elsif ("$part" eq "-lexpat") {
diff --git a/contrib/coccinelle/hashmap.cocci b/contrib/coccinelle/hashmap.cocci
new file mode 100644
index 0000000..d69e120
--- /dev/null
+++ b/contrib/coccinelle/hashmap.cocci
@@ -0,0 +1,16 @@
+@ hashmap_entry_init_usage @
+expression E;
+struct hashmap_entry HME;
+@@
+- HME.hash = E;
++ hashmap_entry_init(&HME, E);
+
+@@
+identifier f !~ "^hashmap_entry_init$";
+expression E;
+struct hashmap_entry *HMEP;
+@@
+  f(...) {<...
+- HMEP->hash = E;
++ hashmap_entry_init(HMEP, E);
+  ...>}
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index e087c4b..00fbe6c 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -340,7 +340,7 @@
 			c="$c${4-}"
 			if [[ $c == "$cur_"* ]]; then
 				case $c in
-				--*=*|*.) ;;
+				--*=|*.) ;;
 				*) c="$c " ;;
 				esac
 				COMPREPLY[i++]="${2-}$c"
@@ -360,7 +360,7 @@
 			c="$c${4-}"
 			if [[ $c == "$cur_"* ]]; then
 				case $c in
-				--*=*|*.) ;;
+				*=|*.) ;;
 				*) c="$c " ;;
 				esac
 				COMPREPLY[i++]="${2-}$c"
@@ -524,7 +524,7 @@
 			# Even when a directory name itself does not contain
 			# any special characters, it will still be quoted if
 			# any of its (stripped) trailing path components do.
-			# Because of this we may have seen the same direcory
+			# Because of this we may have seen the same directory
 			# both quoted and unquoted.
 			if (p in paths)
 				# We have seen the same directory unquoted,
@@ -1250,10 +1250,7 @@
 		return
 		;;
 	--*)
-		__gitcomp "
-			--format= --list --verbose
-			--prefix= --remote= --exec= --output
-			"
+		__gitcomp_builtin archive "--format= --list --verbose --prefix= --worktree-attributes"
 		return
 		;;
 	esac
@@ -1361,7 +1358,9 @@
 	esac
 }
 
-__git_cherry_pick_inprogress_options="--continue --quit --abort"
+__git_sequencer_inprogress_options="--continue --quit --abort --skip"
+
+__git_cherry_pick_inprogress_options=$__git_sequencer_inprogress_options
 
 _git_cherry_pick ()
 {
@@ -1399,7 +1398,18 @@
 
 _git_clone ()
 {
+	case "$prev" in
+	-c|--config)
+		__git_complete_config_variable_name_and_value
+		return
+		;;
+	esac
 	case "$cur" in
+	--config=*)
+		__git_complete_config_variable_name_and_value \
+			--cur="${cur##--config=}"
+		return
+		;;
 	--*)
 		__gitcomp_builtin clone
 		return
@@ -1476,6 +1486,8 @@
 			--dirstat-by-file= --cumulative
 			--diff-algorithm=
 			--submodule --submodule= --ignore-submodules
+			--indent-heuristic --no-indent-heuristic
+			--textconv --no-textconv
 "
 
 _git_diff ()
@@ -1784,6 +1796,10 @@
 		__gitcomp "$__git_diff_submodule_formats" "" "${cur##--submodule=}"
 		return
 		;;
+	--no-walk=*)
+		__gitcomp "sorted unsorted" "" "${cur##--no-walk=}"
+		return
+		;;
 	--*)
 		__gitcomp "
 			$__git_log_common_options
@@ -1791,16 +1807,19 @@
 			$__git_log_gitk_options
 			--root --topo-order --date-order --reverse
 			--follow --full-diff
-			--abbrev-commit --abbrev=
+			--abbrev-commit --no-abbrev-commit --abbrev=
 			--relative-date --date=
 			--pretty= --format= --oneline
 			--show-signature
 			--cherry-mark
 			--cherry-pick
 			--graph
-			--decorate --decorate=
+			--decorate --decorate= --no-decorate
 			--walk-reflogs
+			--no-walk --no-walk= --do-walk
 			--parents --children
+			--expand-tabs --expand-tabs= --no-expand-tabs
+			--patch
 			$merge
 			$__git_diff_common_options
 			--pickaxe-all --pickaxe-regex
@@ -2004,15 +2023,18 @@
 	__git_complete_revlist
 }
 
+__git_rebase_inprogress_options="--continue --skip --abort --quit --show-current-patch"
+__git_rebase_interactive_inprogress_options="$__git_rebase_inprogress_options --edit-todo"
+
 _git_rebase ()
 {
 	__git_find_repo_path
 	if [ -f "$__git_repo_path"/rebase-merge/interactive ]; then
-		__gitcomp "--continue --skip --abort --quit --edit-todo --show-current-patch"
+		__gitcomp "$__git_rebase_interactive_inprogress_options"
 		return
 	elif [ -d "$__git_repo_path"/rebase-apply ] || \
 	     [ -d "$__git_repo_path"/rebase-merge ]; then
-		__gitcomp "--continue --skip --abort --quit --show-current-patch"
+		__gitcomp "$__git_rebase_inprogress_options"
 		return
 	fi
 	__git_complete_strategy && return
@@ -2022,19 +2044,8 @@
 		return
 		;;
 	--*)
-		__gitcomp "
-			--onto --merge --strategy --interactive
-			--rebase-merges --preserve-merges --stat --no-stat
-			--committer-date-is-author-date --ignore-date
-			--ignore-whitespace --whitespace=
-			--autosquash --no-autosquash
-			--fork-point --no-fork-point
-			--autostash --no-autostash
-			--verify --no-verify
-			--keep-empty --root --force-rebase --no-ff
-			--rerere-autoupdate
-			--exec
-			"
+		__gitcomp_builtin rebase "" \
+			"$__git_rebase_interactive_inprogress_options"
 
 		return
 	esac
@@ -2225,181 +2236,282 @@
 __git_compute_config_vars ()
 {
 	test -n "$__git_config_vars" ||
-	__git_config_vars="$(git help --config-for-completion | sort | uniq)"
+	__git_config_vars="$(git help --config-for-completion | sort -u)"
 }
 
-_git_config ()
+# Completes possible values of various configuration variables.
+#
+# Usage: __git_complete_config_variable_value [<option>]...
+# --varname=<word>: The name of the configuration variable whose value is
+#                   to be completed.  Defaults to the previous word on the
+#                   command line.
+# --cur=<word>: The current value to be completed.  Defaults to the current
+#               word to be completed.
+__git_complete_config_variable_value ()
 {
-	local varname
+	local varname="$prev" cur_="$cur"
+
+	while test $# != 0; do
+		case "$1" in
+		--varname=*)	varname="${1##--varname=}" ;;
+		--cur=*)	cur_="${1##--cur=}" ;;
+		*)		return 1 ;;
+		esac
+		shift
+	done
 
 	if [ "${BASH_VERSINFO[0]:-0}" -ge 4 ]; then
-		varname="${prev,,}"
+		varname="${varname,,}"
 	else
-		varname="$(echo "$prev" |tr A-Z a-z)"
+		varname="$(echo "$varname" |tr A-Z a-z)"
 	fi
 
 	case "$varname" in
 	branch.*.remote|branch.*.pushremote)
-		__gitcomp_nl "$(__git_remotes)"
+		__gitcomp_nl "$(__git_remotes)" "" "$cur_"
 		return
 		;;
 	branch.*.merge)
-		__git_complete_refs
+		__git_complete_refs --cur="$cur_"
 		return
 		;;
 	branch.*.rebase)
-		__gitcomp "false true merges preserve interactive"
+		__gitcomp "false true merges preserve interactive" "" "$cur_"
 		return
 		;;
 	remote.pushdefault)
-		__gitcomp_nl "$(__git_remotes)"
+		__gitcomp_nl "$(__git_remotes)" "" "$cur_"
 		return
 		;;
 	remote.*.fetch)
-		local remote="${prev#remote.}"
+		local remote="${varname#remote.}"
 		remote="${remote%.fetch}"
-		if [ -z "$cur" ]; then
+		if [ -z "$cur_" ]; then
 			__gitcomp_nl "refs/heads/" "" "" ""
 			return
 		fi
-		__gitcomp_nl "$(__git_refs_remotes "$remote")"
+		__gitcomp_nl "$(__git_refs_remotes "$remote")" "" "$cur_"
 		return
 		;;
 	remote.*.push)
-		local remote="${prev#remote.}"
+		local remote="${varname#remote.}"
 		remote="${remote%.push}"
 		__gitcomp_nl "$(__git for-each-ref \
-			--format='%(refname):%(refname)' refs/heads)"
+			--format='%(refname):%(refname)' refs/heads)" "" "$cur_"
 		return
 		;;
 	pull.twohead|pull.octopus)
 		__git_compute_merge_strategies
-		__gitcomp "$__git_merge_strategies"
-		return
-		;;
-	color.branch|color.diff|color.interactive|\
-	color.showbranch|color.status|color.ui)
-		__gitcomp "always never auto"
+		__gitcomp "$__git_merge_strategies" "" "$cur_"
 		return
 		;;
 	color.pager)
-		__gitcomp "false true"
+		__gitcomp "false true" "" "$cur_"
 		return
 		;;
 	color.*.*)
 		__gitcomp "
 			normal black red green yellow blue magenta cyan white
 			bold dim ul blink reverse
-			"
+			" "" "$cur_"
+		return
+		;;
+	color.*)
+		__gitcomp "false true always never auto" "" "$cur_"
 		return
 		;;
 	diff.submodule)
-		__gitcomp "$__git_diff_submodule_formats"
+		__gitcomp "$__git_diff_submodule_formats" "" "$cur_"
 		return
 		;;
 	help.format)
-		__gitcomp "man info web html"
+		__gitcomp "man info web html" "" "$cur_"
 		return
 		;;
 	log.date)
-		__gitcomp "$__git_log_date_formats"
+		__gitcomp "$__git_log_date_formats" "" "$cur_"
 		return
 		;;
 	sendemail.aliasfiletype)
-		__gitcomp "mutt mailrc pine elm gnus"
+		__gitcomp "mutt mailrc pine elm gnus" "" "$cur_"
 		return
 		;;
 	sendemail.confirm)
-		__gitcomp "$__git_send_email_confirm_options"
+		__gitcomp "$__git_send_email_confirm_options" "" "$cur_"
 		return
 		;;
 	sendemail.suppresscc)
-		__gitcomp "$__git_send_email_suppresscc_options"
+		__gitcomp "$__git_send_email_suppresscc_options" "" "$cur_"
 		return
 		;;
 	sendemail.transferencoding)
-		__gitcomp "7bit 8bit quoted-printable base64"
-		return
-		;;
-	--get|--get-all|--unset|--unset-all)
-		__gitcomp_nl "$(__git_config_get_set_variables)"
+		__gitcomp "7bit 8bit quoted-printable base64" "" "$cur_"
 		return
 		;;
 	*.*)
 		return
 		;;
 	esac
-	case "$cur" in
-	--*)
-		__gitcomp_builtin config
-		return
-		;;
+}
+
+# Completes configuration sections, subsections, variable names.
+#
+# Usage: __git_complete_config_variable_name [<option>]...
+# --cur=<word>: The current configuration section/variable name to be
+#               completed.  Defaults to the current word to be completed.
+# --sfx=<suffix>: A suffix to be appended to each fully completed
+#                 configuration variable name (but not to sections or
+#                 subsections) instead of the default space.
+__git_complete_config_variable_name ()
+{
+	local cur_="$cur" sfx
+
+	while test $# != 0; do
+		case "$1" in
+		--cur=*)	cur_="${1##--cur=}" ;;
+		--sfx=*)	sfx="${1##--sfx=}" ;;
+		*)		return 1 ;;
+		esac
+		shift
+	done
+
+	case "$cur_" in
 	branch.*.*)
-		local pfx="${cur%.*}." cur_="${cur##*.}"
-		__gitcomp "remote pushRemote merge mergeOptions rebase" "$pfx" "$cur_"
+		local pfx="${cur_%.*}."
+		cur_="${cur_##*.}"
+		__gitcomp "remote pushRemote merge mergeOptions rebase" "$pfx" "$cur_" "$sfx"
 		return
 		;;
 	branch.*)
-		local pfx="${cur%.*}." cur_="${cur#*.}"
+		local pfx="${cur%.*}."
+		cur_="${cur#*.}"
 		__gitcomp_direct "$(__git_heads "$pfx" "$cur_" ".")"
-		__gitcomp_nl_append $'autoSetupMerge\nautoSetupRebase\n' "$pfx" "$cur_"
+		__gitcomp_nl_append $'autoSetupMerge\nautoSetupRebase\n' "$pfx" "$cur_" "$sfx"
 		return
 		;;
 	guitool.*.*)
-		local pfx="${cur%.*}." cur_="${cur##*.}"
+		local pfx="${cur_%.*}."
+		cur_="${cur_##*.}"
 		__gitcomp "
 			argPrompt cmd confirm needsFile noConsole noRescan
 			prompt revPrompt revUnmerged title
-			" "$pfx" "$cur_"
+			" "$pfx" "$cur_" "$sfx"
 		return
 		;;
 	difftool.*.*)
-		local pfx="${cur%.*}." cur_="${cur##*.}"
-		__gitcomp "cmd path" "$pfx" "$cur_"
+		local pfx="${cur_%.*}."
+		cur_="${cur_##*.}"
+		__gitcomp "cmd path" "$pfx" "$cur_" "$sfx"
 		return
 		;;
 	man.*.*)
-		local pfx="${cur%.*}." cur_="${cur##*.}"
-		__gitcomp "cmd path" "$pfx" "$cur_"
+		local pfx="${cur_%.*}."
+		cur_="${cur_##*.}"
+		__gitcomp "cmd path" "$pfx" "$cur_" "$sfx"
 		return
 		;;
 	mergetool.*.*)
-		local pfx="${cur%.*}." cur_="${cur##*.}"
-		__gitcomp "cmd path trustExitCode" "$pfx" "$cur_"
+		local pfx="${cur_%.*}."
+		cur_="${cur_##*.}"
+		__gitcomp "cmd path trustExitCode" "$pfx" "$cur_" "$sfx"
 		return
 		;;
 	pager.*)
-		local pfx="${cur%.*}." cur_="${cur#*.}"
+		local pfx="${cur_%.*}."
+		cur_="${cur_#*.}"
 		__git_compute_all_commands
-		__gitcomp_nl "$__git_all_commands" "$pfx" "$cur_"
+		__gitcomp_nl "$__git_all_commands" "$pfx" "$cur_" "$sfx"
 		return
 		;;
 	remote.*.*)
-		local pfx="${cur%.*}." cur_="${cur##*.}"
+		local pfx="${cur_%.*}."
+		cur_="${cur_##*.}"
 		__gitcomp "
 			url proxy fetch push mirror skipDefaultUpdate
 			receivepack uploadpack tagOpt pushurl
-			" "$pfx" "$cur_"
+			" "$pfx" "$cur_" "$sfx"
 		return
 		;;
 	remote.*)
-		local pfx="${cur%.*}." cur_="${cur#*.}"
+		local pfx="${cur_%.*}."
+		cur_="${cur_#*.}"
 		__gitcomp_nl "$(__git_remotes)" "$pfx" "$cur_" "."
-		__gitcomp_nl_append "pushDefault" "$pfx" "$cur_"
+		__gitcomp_nl_append "pushDefault" "$pfx" "$cur_" "$sfx"
 		return
 		;;
 	url.*.*)
-		local pfx="${cur%.*}." cur_="${cur##*.}"
-		__gitcomp "insteadOf pushInsteadOf" "$pfx" "$cur_"
+		local pfx="${cur_%.*}."
+		cur_="${cur_##*.}"
+		__gitcomp "insteadOf pushInsteadOf" "$pfx" "$cur_" "$sfx"
 		return
 		;;
 	*.*)
 		__git_compute_config_vars
-		__gitcomp "$__git_config_vars"
+		__gitcomp "$__git_config_vars" "" "$cur_" "$sfx"
 		;;
 	*)
 		__git_compute_config_vars
-		__gitcomp "$(echo "$__git_config_vars" | sed 's/\.[^ ]*/./g')"
+		__gitcomp "$(echo "$__git_config_vars" |
+				awk -F . '{
+					sections[$1] = 1
+				}
+				END {
+					for (s in sections)
+						print s "."
+				}
+				')" "" "$cur_"
+		;;
+	esac
+}
+
+# Completes '='-separated configuration sections/variable names and values
+# for 'git -c section.name=value'.
+#
+# Usage: __git_complete_config_variable_name_and_value [<option>]...
+# --cur=<word>: The current configuration section/variable name/value to be
+#               completed. Defaults to the current word to be completed.
+__git_complete_config_variable_name_and_value ()
+{
+	local cur_="$cur"
+
+	while test $# != 0; do
+		case "$1" in
+		--cur=*)	cur_="${1##--cur=}" ;;
+		*)		return 1 ;;
+		esac
+		shift
+	done
+
+	case "$cur_" in
+	*=*)
+		__git_complete_config_variable_value \
+			--varname="${cur_%%=*}" --cur="${cur_#*=}"
+		;;
+	*)
+		__git_complete_config_variable_name --cur="$cur_" --sfx='='
+		;;
+	esac
+}
+
+_git_config ()
+{
+	case "$prev" in
+	--get|--get-all|--unset|--unset-all)
+		__gitcomp_nl "$(__git_config_get_set_variables)"
+		return
+		;;
+	*.*)
+		__git_complete_config_variable_value
+		return
+		;;
+	esac
+	case "$cur" in
+	--*)
+		__gitcomp_builtin config
+		;;
+	*)
+		__git_complete_config_variable_name
+		;;
 	esac
 }
 
@@ -2512,7 +2624,7 @@
 	esac
 }
 
-__git_revert_inprogress_options="--continue --quit --abort"
+__git_revert_inprogress_options=$__git_sequencer_inprogress_options
 
 _git_revert ()
 {
@@ -2580,8 +2692,9 @@
 		return
 		;;
 	--*)
-		__gitcomp "--pretty= --format= --abbrev-commit --oneline
-			--show-signature
+		__gitcomp "--pretty= --format= --abbrev-commit --no-abbrev-commit
+			--oneline --show-signature --patch
+			--expand-tabs --expand-tabs= --no-expand-tabs
 			$__git_diff_common_options
 			"
 		return
@@ -2956,7 +3069,11 @@
 			# Bash filename completion
 			return
 			;;
-		-c|--namespace)
+		-c)
+			__git_complete_config_variable_name_and_value
+			return
+			;;
+		--namespace)
 			# we don't support completing these options' arguments
 			return
 			;;
diff --git a/contrib/completion/git-completion.zsh b/contrib/completion/git-completion.zsh
index 886bf95..eef4eff 100644
--- a/contrib/completion/git-completion.zsh
+++ b/contrib/completion/git-completion.zsh
@@ -11,8 +11,9 @@
 #
 #  zstyle ':completion:*:*:git:*' script ~/.git-completion.zsh
 #
-# The recommended way to install this script is to copy to '~/.zsh/_git', and
-# then add the following to your ~/.zshrc file:
+# The recommended way to install this script is to make a copy of it in
+# ~/.zsh/ directory as ~/.zsh/git-completion.zsh and then add the following
+# to your ~/.zshrc file:
 #
 #  fpath=(~/.zsh $fpath)
 
diff --git a/contrib/diff-highlight/DiffHighlight.pm b/contrib/diff-highlight/DiffHighlight.pm
index 7440aa1..e258992 100644
--- a/contrib/diff-highlight/DiffHighlight.pm
+++ b/contrib/diff-highlight/DiffHighlight.pm
@@ -72,7 +72,7 @@
 	      (?:$COLOR?\|$COLOR?[ ])* # zero or more trailing "|"
 	                         [ ]*  # trailing whitespace for merges
 	    /x) {
-	        my $graph_prefix = $&;
+		my $graph_prefix = $&;
 
 		# We must flush before setting graph indent, since the
 		# new commit may be indented differently from what we
diff --git a/contrib/hg-to-git/hg-to-git.py b/contrib/hg-to-git/hg-to-git.py
index de3f816..7eb1b24 100755
--- a/contrib/hg-to-git/hg-to-git.py
+++ b/contrib/hg-to-git/hg-to-git.py
@@ -42,7 +42,7 @@
 
 def usage():
 
-        print """\
+        print("""\
 %s: [OPTIONS] <hgprj>
 
 options:
@@ -54,7 +54,7 @@
 
 required:
     hgprj:  name of the HG project to import (directory)
-""" % sys.argv[0]
+""" % sys.argv[0])
 
 #------------------------------------------------------------------------------
 
@@ -104,22 +104,22 @@
 if state:
     if os.path.exists(state):
         if verbose:
-            print 'State does exist, reading'
+            print('State does exist, reading')
         f = open(state, 'r')
         hgvers = pickle.load(f)
     else:
-        print 'State does not exist, first run'
+        print('State does not exist, first run')
 
 sock = os.popen('hg tip --template "{rev}"')
 tip = sock.read()
 if sock.close():
     sys.exit(1)
 if verbose:
-    print 'tip is', tip
+    print('tip is', tip)
 
 # Calculate the branches
 if verbose:
-    print 'analysing the branches...'
+    print('analysing the branches...')
 hgchildren["0"] = ()
 hgparents["0"] = (None, None)
 hgbranch["0"] = "master"
@@ -154,15 +154,15 @@
         else:
             hgbranch[str(cset)] = "branch-" + str(cset)
 
-if not hgvers.has_key("0"):
-    print 'creating repository'
+if "0" not in hgvers:
+    print('creating repository')
     os.system('git init')
 
 # loop through every hg changeset
 for cset in range(int(tip) + 1):
 
     # incremental, already seen
-    if hgvers.has_key(str(cset)):
+    if str(cset) in hgvers:
         continue
     hgnewcsets += 1
 
@@ -180,27 +180,27 @@
     os.write(fdcomment, csetcomment)
     os.close(fdcomment)
 
-    print '-----------------------------------------'
-    print 'cset:', cset
-    print 'branch:', hgbranch[str(cset)]
-    print 'user:', user
-    print 'date:', date
-    print 'comment:', csetcomment
+    print('-----------------------------------------')
+    print('cset:', cset)
+    print('branch:', hgbranch[str(cset)])
+    print('user:', user)
+    print('date:', date)
+    print('comment:', csetcomment)
     if parent:
-	print 'parent:', parent
+        print('parent:', parent)
     if mparent:
-        print 'mparent:', mparent
+        print('mparent:', mparent)
     if tag:
-        print 'tag:', tag
-    print '-----------------------------------------'
+        print('tag:', tag)
+    print('-----------------------------------------')
 
     # checkout the parent if necessary
     if cset != 0:
         if hgbranch[str(cset)] == "branch-" + str(cset):
-            print 'creating new branch', hgbranch[str(cset)]
+            print('creating new branch', hgbranch[str(cset)])
             os.system('git checkout -b %s %s' % (hgbranch[str(cset)], hgvers[parent]))
         else:
-            print 'checking out branch', hgbranch[str(cset)]
+            print('checking out branch', hgbranch[str(cset)])
             os.system('git checkout %s' % hgbranch[str(cset)])
 
     # merge
@@ -209,7 +209,7 @@
             otherbranch = hgbranch[mparent]
         else:
             otherbranch = hgbranch[parent]
-        print 'merging', otherbranch, 'into', hgbranch[str(cset)]
+        print('merging', otherbranch, 'into', hgbranch[str(cset)])
         os.system(getgitenv(user, date) + 'git merge --no-commit -s ours "" %s %s' % (hgbranch[str(cset)], otherbranch))
 
     # remove everything except .git and .hg directories
@@ -233,12 +233,12 @@
 
     # delete branch if not used anymore...
     if mparent and len(hgchildren[str(cset)]):
-        print "Deleting unused branch:", otherbranch
+        print("Deleting unused branch:", otherbranch)
         os.system('git branch -d %s' % otherbranch)
 
     # retrieve and record the version
     vvv = os.popen('git show --quiet --pretty=format:%H').read()
-    print 'record', cset, '->', vvv
+    print('record', cset, '->', vvv)
     hgvers[str(cset)] = vvv
 
 if hgnewcsets >= opt_nrepack and opt_nrepack != -1:
@@ -247,7 +247,7 @@
 # write the state for incrementals
 if state:
     if verbose:
-        print 'Writing state'
+        print('Writing state')
     f = open(state, 'w')
     pickle.dump(hgvers, f)
 
diff --git a/contrib/svn-fe/svn-fe.txt b/contrib/svn-fe/svn-fe.txt
index a3425f4..19333fc 100644
--- a/contrib/svn-fe/svn-fe.txt
+++ b/contrib/svn-fe/svn-fe.txt
@@ -56,7 +56,7 @@
 
 The resulting repository will generally require further processing
 to put each project in its own repository and to separate the history
-of each branch.  The 'git filter-branch --subdirectory-filter' command
+of each branch.  The 'git filter-repo --subdirectory-filter' command
 may be useful for this purpose.
 
 BUGS
@@ -67,5 +67,5 @@
 
 SEE ALSO
 --------
-git-svn(1), svn2git(1), svk(1), git-filter-branch(1), git-fast-import(1),
+git-svn(1), svn2git(1), svk(1), git-filter-repo(1), git-fast-import(1),
 https://svn.apache.org/repos/asf/subversion/trunk/notes/dump-load-format.txt
diff --git a/contrib/svn-fe/svnrdump_sim.py b/contrib/svn-fe/svnrdump_sim.py
index 11ac6f6..50c6a4f 100755
--- a/contrib/svn-fe/svnrdump_sim.py
+++ b/contrib/svn-fe/svnrdump_sim.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 """
 Simulates svnrdump by replaying an existing dump from a file, taking care
 of the specified revision range.
diff --git a/convert.c b/convert.c
index 94ff837..25ac525 100644
--- a/convert.c
+++ b/convert.c
@@ -8,6 +8,7 @@
 #include "pkt-line.h"
 #include "sub-process.h"
 #include "utf8.h"
+#include "ll-merge.h"
 
 /*
  * convert.c - convert a file when checking it out and checking it in.
@@ -289,8 +290,8 @@
 			const char *stripped = NULL;
 			char *upper = xstrdup_toupper(enc);
 			upper[strlen(upper)-2] = '\0';
-			if (!skip_prefix(upper, "UTF-", &stripped))
-				skip_prefix(stripped, "UTF", &stripped);
+			if (skip_prefix(upper, "UTF", &stripped))
+				skip_prefix(stripped, "-", &stripped);
 			advise(advise_msg, path, stripped);
 			free(upper);
 			if (die_on_error)
@@ -309,8 +310,8 @@
 				"working-tree-encoding.");
 			const char *stripped = NULL;
 			char *upper = xstrdup_toupper(enc);
-			if (!skip_prefix(upper, "UTF-", &stripped))
-				skip_prefix(stripped, "UTF", &stripped);
+			if (skip_prefix(upper, "UTF", &stripped))
+				skip_prefix(stripped, "-", &stripped);
 			advise(advise_msg, path, stripped, stripped);
 			free(upper);
 			if (die_on_error)
@@ -1293,10 +1294,11 @@
 	const char *working_tree_encoding; /* Supported encoding or default encoding if NULL */
 };
 
+static struct attr_check *check;
+
 static void convert_attrs(const struct index_state *istate,
 			  struct conv_attrs *ca, const char *path)
 {
-	static struct attr_check *check;
 	struct attr_check_item *ccheck = NULL;
 
 	if (!check) {
@@ -1339,6 +1341,23 @@
 		ca->crlf_action = CRLF_AUTO_INPUT;
 }
 
+void reset_parsed_attributes(void)
+{
+	struct convert_driver *drv, *next;
+
+	attr_check_free(check);
+	check = NULL;
+	reset_merge_attributes();
+
+	for (drv = user_convert; drv; drv = next) {
+		next = drv->next;
+		free((void *)drv->name);
+		free(drv);
+	}
+	user_convert = NULL;
+	user_convert_tail = NULL;
+}
+
 int would_convert_to_git_filter_fd(const struct index_state *istate, const char *path)
 {
 	struct conv_attrs ca;
diff --git a/convert.h b/convert.h
index 831559f..3710969 100644
--- a/convert.h
+++ b/convert.h
@@ -94,6 +94,12 @@
 int would_convert_to_git_filter_fd(const struct index_state *istate,
 				   const char *path);
 
+/*
+ * Reset the internal list of attributes used by convert_to_git and
+ * convert_to_working_tree.
+ */
+void reset_parsed_attributes(void);
+
 /*****************************************************************
  *
  * Streaming conversion support
diff --git a/credential-store.c b/credential-store.c
index ac29542..c010497 100644
--- a/credential-store.c
+++ b/credential-store.c
@@ -72,15 +72,16 @@
 	struct strbuf buf = STRBUF_INIT;
 
 	strbuf_addf(&buf, "%s://", c->protocol);
-	strbuf_addstr_urlencode(&buf, c->username, 1);
+	strbuf_addstr_urlencode(&buf, c->username, is_rfc3986_unreserved);
 	strbuf_addch(&buf, ':');
-	strbuf_addstr_urlencode(&buf, c->password, 1);
+	strbuf_addstr_urlencode(&buf, c->password, is_rfc3986_unreserved);
 	strbuf_addch(&buf, '@');
 	if (c->host)
-		strbuf_addstr_urlencode(&buf, c->host, 1);
+		strbuf_addstr_urlencode(&buf, c->host, is_rfc3986_unreserved);
 	if (c->path) {
 		strbuf_addch(&buf, '/');
-		strbuf_addstr_urlencode(&buf, c->path, 0);
+		strbuf_addstr_urlencode(&buf, c->path,
+					is_rfc3986_reserved_or_unreserved);
 	}
 
 	rewrite_credential_file(fn, c, &buf);
diff --git a/date.c b/date.c
index 8126146..041db7d 100644
--- a/date.c
+++ b/date.c
@@ -128,16 +128,17 @@
 		gettimeofday(now, NULL);
 }
 
-void show_date_relative(timestamp_t time,
-			const struct timeval *now,
-			struct strbuf *timebuf)
+void show_date_relative(timestamp_t time, struct strbuf *timebuf)
 {
+	struct timeval now;
 	timestamp_t diff;
-	if (now->tv_sec < time) {
+
+	get_time(&now);
+	if (now.tv_sec < time) {
 		strbuf_addstr(timebuf, _("in the future"));
 		return;
 	}
-	diff = now->tv_sec - time;
+	diff = now.tv_sec - time;
 	if (diff < 90) {
 		strbuf_addf(timebuf,
 			 Q_("%"PRItime" second ago", "%"PRItime" seconds ago", diff), diff);
@@ -240,9 +241,7 @@
 
 	/* Show "today" times as just relative times */
 	if (hide.wday) {
-		struct timeval now;
-		get_time(&now);
-		show_date_relative(time, &now, buf);
+		show_date_relative(time, buf);
 		return;
 	}
 
@@ -313,11 +312,8 @@
 	}
 
 	if (mode->type == DATE_RELATIVE) {
-		struct timeval now;
-
 		strbuf_reset(&timebuf);
-		get_time(&now);
-		show_date_relative(time, &now, &timebuf);
+		show_date_relative(time, &timebuf);
 		return timebuf.buf;
 	}
 
@@ -1288,15 +1284,18 @@
 	return (timestamp_t)update_tm(&tm, &now, 0);
 }
 
-timestamp_t approxidate_relative(const char *date, const struct timeval *tv)
+timestamp_t approxidate_relative(const char *date)
 {
+	struct timeval tv;
 	timestamp_t timestamp;
 	int offset;
 	int errors = 0;
 
 	if (!parse_date_basic(date, &timestamp, &offset))
 		return timestamp;
-	return approxidate_str(date, tv, &errors);
+
+	get_time(&tv);
+	return approxidate_str(date, (const struct timeval *) &tv, &errors);
 }
 
 timestamp_t approxidate_careful(const char *date, int *error_ret)
diff --git a/diff-delta.c b/diff-delta.c
index e496433..77fea08 100644
--- a/diff-delta.c
+++ b/diff-delta.c
@@ -326,6 +326,8 @@
 	const unsigned char *ref_data, *ref_top, *data, *top;
 	unsigned char *out;
 
+	*delta_size = 0;
+
 	if (!trg_buf || !trg_size)
 		return NULL;
 
diff --git a/diff.c b/diff.c
index efe42b3..afe4400 100644
--- a/diff.c
+++ b/diff.c
@@ -25,7 +25,7 @@
 #include "packfile.h"
 #include "parse-options.h"
 #include "help.h"
-#include "fetch-object.h"
+#include "promisor-remote.h"
 
 #ifdef NO_FAST_WORKING_DIRECTORY
 #define FAST_WORKING_DIRECTORY 0
@@ -933,16 +933,18 @@
 }
 
 static int moved_entry_cmp(const void *hashmap_cmp_fn_data,
-			   const void *entry,
-			   const void *entry_or_key,
+			   const struct hashmap_entry *eptr,
+			   const struct hashmap_entry *entry_or_key,
 			   const void *keydata)
 {
 	const struct diff_options *diffopt = hashmap_cmp_fn_data;
-	const struct moved_entry *a = entry;
-	const struct moved_entry *b = entry_or_key;
+	const struct moved_entry *a, *b;
 	unsigned flags = diffopt->color_moved_ws_handling
 			 & XDF_WHITESPACE_FLAGS;
 
+	a = container_of(eptr, const struct moved_entry, ent);
+	b = container_of(entry_or_key, const struct moved_entry, ent);
+
 	if (diffopt->color_moved_ws_handling &
 	    COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE)
 		/*
@@ -964,8 +966,9 @@
 	struct moved_entry *ret = xmalloc(sizeof(*ret));
 	struct emitted_diff_symbol *l = &o->emitted_symbols->buf[line_no];
 	unsigned flags = o->color_moved_ws_handling & XDF_WHITESPACE_FLAGS;
+	unsigned int hash = xdiff_hash_string(l->line, l->len, flags);
 
-	ret->ent.hash = xdiff_hash_string(l->line, l->len, flags);
+	hashmap_entry_init(&ret->ent, hash);
 	ret->es = l;
 	ret->next_line = NULL;
 
@@ -1002,7 +1005,7 @@
 		if (prev_line && prev_line->es->s == o->emitted_symbols->buf[n].s)
 			prev_line->next_line = key;
 
-		hashmap_add(hm, key);
+		hashmap_add(hm, &key->ent);
 		prev_line = key;
 	}
 }
@@ -1018,7 +1021,7 @@
 		struct moved_entry *prev = pmb[i].match;
 		struct moved_entry *cur = (prev && prev->next_line) ?
 				prev->next_line : NULL;
-		if (cur && !hm->cmpfn(o, cur, match, NULL)) {
+		if (cur && !hm->cmpfn(o, &cur->ent, &match->ent, NULL)) {
 			pmb[i].match = cur;
 		} else {
 			pmb[i].match = NULL;
@@ -1035,7 +1038,7 @@
 	int i;
 	char *got_match = xcalloc(1, pmb_nr);
 
-	for (; match; match = hashmap_get_next(hm, match)) {
+	hashmap_for_each_entry_from(hm, match, ent) {
 		for (i = 0; i < pmb_nr; i++) {
 			struct moved_entry *prev = pmb[i].match;
 			struct moved_entry *cur = (prev && prev->next_line) ?
@@ -1143,13 +1146,13 @@
 		case DIFF_SYMBOL_PLUS:
 			hm = del_lines;
 			key = prepare_entry(o, n);
-			match = hashmap_get(hm, key, NULL);
+			match = hashmap_get_entry(hm, key, ent, NULL);
 			free(key);
 			break;
 		case DIFF_SYMBOL_MINUS:
 			hm = add_lines;
 			key = prepare_entry(o, n);
-			match = hashmap_get(hm, key, NULL);
+			match = hashmap_get_entry(hm, key, ent, NULL);
 			free(key);
 			break;
 		default:
@@ -1188,7 +1191,7 @@
 			 * The current line is the start of a new block.
 			 * Setup the set of potential blocks.
 			 */
-			for (; match; match = hashmap_get_next(hm, match)) {
+			hashmap_for_each_entry_from(hm, match, ent) {
 				ALLOC_GROW(pmb, pmb_nr + 1, pmb_alloc);
 				if (o->color_moved_ws_handling &
 				    COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE) {
@@ -5978,7 +5981,7 @@
 }
 
 struct patch_id_t {
-	git_SHA_CTX *ctx;
+	git_hash_ctx *ctx;
 	int patchlen;
 };
 
@@ -5995,16 +5998,16 @@
 	return dst - line;
 }
 
-void flush_one_hunk(struct object_id *result, git_SHA_CTX *ctx)
+void flush_one_hunk(struct object_id *result, git_hash_ctx *ctx)
 {
 	unsigned char hash[GIT_MAX_RAWSZ];
 	unsigned short carry = 0;
 	int i;
 
-	git_SHA1_Final(hash, ctx);
-	git_SHA1_Init(ctx);
+	the_hash_algo->final_fn(hash, ctx);
+	the_hash_algo->init_fn(ctx);
 	/* 20-byte sum, with carry */
-	for (i = 0; i < GIT_SHA1_RAWSZ; ++i) {
+	for (i = 0; i < the_hash_algo->rawsz; ++i) {
 		carry += result->hash[i] + hash[i];
 		result->hash[i] = carry;
 		carry >>= 8;
@@ -6018,21 +6021,21 @@
 
 	new_len = remove_space(line, len);
 
-	git_SHA1_Update(data->ctx, line, new_len);
+	the_hash_algo->update_fn(data->ctx, line, new_len);
 	data->patchlen += new_len;
 }
 
-static void patch_id_add_string(git_SHA_CTX *ctx, const char *str)
+static void patch_id_add_string(git_hash_ctx *ctx, const char *str)
 {
-	git_SHA1_Update(ctx, str, strlen(str));
+	the_hash_algo->update_fn(ctx, str, strlen(str));
 }
 
-static void patch_id_add_mode(git_SHA_CTX *ctx, unsigned mode)
+static void patch_id_add_mode(git_hash_ctx *ctx, unsigned mode)
 {
 	/* large enough for 2^32 in octal */
 	char buf[12];
 	int len = xsnprintf(buf, sizeof(buf), "%06o", mode);
-	git_SHA1_Update(ctx, buf, len);
+	the_hash_algo->update_fn(ctx, buf, len);
 }
 
 /* returns 0 upon success, and writes result into oid */
@@ -6040,10 +6043,10 @@
 {
 	struct diff_queue_struct *q = &diff_queued_diff;
 	int i;
-	git_SHA_CTX ctx;
+	git_hash_ctx ctx;
 	struct patch_id_t data;
 
-	git_SHA1_Init(&ctx);
+	the_hash_algo->init_fn(&ctx);
 	memset(&data, 0, sizeof(struct patch_id_t));
 	data.ctx = &ctx;
 	oidclr(oid);
@@ -6076,27 +6079,27 @@
 		len2 = remove_space(p->two->path, strlen(p->two->path));
 		patch_id_add_string(&ctx, "diff--git");
 		patch_id_add_string(&ctx, "a/");
-		git_SHA1_Update(&ctx, p->one->path, len1);
+		the_hash_algo->update_fn(&ctx, p->one->path, len1);
 		patch_id_add_string(&ctx, "b/");
-		git_SHA1_Update(&ctx, p->two->path, len2);
+		the_hash_algo->update_fn(&ctx, p->two->path, len2);
 
 		if (p->one->mode == 0) {
 			patch_id_add_string(&ctx, "newfilemode");
 			patch_id_add_mode(&ctx, p->two->mode);
 			patch_id_add_string(&ctx, "---/dev/null");
 			patch_id_add_string(&ctx, "+++b/");
-			git_SHA1_Update(&ctx, p->two->path, len2);
+			the_hash_algo->update_fn(&ctx, p->two->path, len2);
 		} else if (p->two->mode == 0) {
 			patch_id_add_string(&ctx, "deletedfilemode");
 			patch_id_add_mode(&ctx, p->one->mode);
 			patch_id_add_string(&ctx, "---a/");
-			git_SHA1_Update(&ctx, p->one->path, len1);
+			the_hash_algo->update_fn(&ctx, p->one->path, len1);
 			patch_id_add_string(&ctx, "+++/dev/null");
 		} else {
 			patch_id_add_string(&ctx, "---a/");
-			git_SHA1_Update(&ctx, p->one->path, len1);
+			the_hash_algo->update_fn(&ctx, p->one->path, len1);
 			patch_id_add_string(&ctx, "+++b/");
-			git_SHA1_Update(&ctx, p->two->path, len2);
+			the_hash_algo->update_fn(&ctx, p->two->path, len2);
 		}
 
 		if (diff_header_only)
@@ -6108,10 +6111,10 @@
 
 		if (diff_filespec_is_binary(options->repo, p->one) ||
 		    diff_filespec_is_binary(options->repo, p->two)) {
-			git_SHA1_Update(&ctx, oid_to_hex(&p->one->oid),
-					GIT_SHA1_HEXSZ);
-			git_SHA1_Update(&ctx, oid_to_hex(&p->two->oid),
-					GIT_SHA1_HEXSZ);
+			the_hash_algo->update_fn(&ctx, oid_to_hex(&p->one->oid),
+					the_hash_algo->hexsz);
+			the_hash_algo->update_fn(&ctx, oid_to_hex(&p->two->oid),
+					the_hash_algo->hexsz);
 			continue;
 		}
 
@@ -6128,7 +6131,7 @@
 	}
 
 	if (!stable)
-		git_SHA1_Final(oid->hash, &ctx);
+		the_hash_algo->final_fn(oid->hash, &ctx);
 
 	return 0;
 }
@@ -6230,8 +6233,10 @@
 			if (o->color_moved == COLOR_MOVED_ZEBRA_DIM)
 				dim_moved_lines(o);
 
-			hashmap_free(&add_lines, 1);
-			hashmap_free(&del_lines, 1);
+			hashmap_free_entries(&add_lines, struct moved_entry,
+						ent);
+			hashmap_free_entries(&del_lines, struct moved_entry,
+						ent);
 		}
 
 		for (i = 0; i < esm.nr; i++)
@@ -6512,6 +6517,7 @@
 			   const struct diff_filespec *filespec)
 {
 	if (filespec && filespec->oid_valid &&
+	    !S_ISGITLINK(filespec->mode) &&
 	    oid_object_info_extended(r, &filespec->oid, NULL,
 				     OBJECT_INFO_FOR_PREFETCH))
 		oid_array_append(to_fetch, &filespec->oid);
@@ -6519,8 +6525,7 @@
 
 void diffcore_std(struct diff_options *options)
 {
-	if (options->repo == the_repository &&
-	    repository_format_partial_clone) {
+	if (options->repo == the_repository && has_promisor_remote()) {
 		/*
 		 * Prefetch the diff pairs that are about to be flushed.
 		 */
@@ -6537,8 +6542,8 @@
 			/*
 			 * NEEDSWORK: Consider deduplicating the OIDs sent.
 			 */
-			fetch_objects(repository_format_partial_clone,
-				      to_fetch.oid, to_fetch.nr);
+			promisor_remote_get_direct(options->repo,
+						   to_fetch.oid, to_fetch.nr);
 		oid_array_clear(&to_fetch);
 	}
 
diff --git a/diff.h b/diff.h
index c2c3056..7f8f024 100644
--- a/diff.h
+++ b/diff.h
@@ -438,7 +438,7 @@
 
 int do_diff_cache(const struct object_id *, struct diff_options *);
 int diff_flush_patch_id(struct diff_options *, struct object_id *, int, int);
-void flush_one_hunk(struct object_id *, git_SHA_CTX *);
+void flush_one_hunk(struct object_id *result, git_hash_ctx *ctx);
 
 int diff_result_code(struct diff_options *, int);
 
diff --git a/diffcore-break.c b/diffcore-break.c
index 875aefd..9d20a6a 100644
--- a/diffcore-break.c
+++ b/diffcore-break.c
@@ -286,17 +286,17 @@
 					/* Peer survived.  Merge them */
 					merge_broken(p, pp, &outq);
 					q->queue[j] = NULL;
-					break;
+					goto next;
 				}
 			}
-			if (q->nr <= j)
-				/* The peer did not survive, so we keep
-				 * it in the output.
-				 */
-				diff_q(&outq, p);
+			/* The peer did not survive, so we keep
+			 * it in the output.
+			 */
+			diff_q(&outq, p);
 		}
 		else
 			diff_q(&outq, p);
+next:;
 	}
 	free(q->queue);
 	*q = outq;
diff --git a/diffcore-rename.c b/diffcore-rename.c
index 9624864..531d7ad 100644
--- a/diffcore-rename.c
+++ b/diffcore-rename.c
@@ -274,18 +274,17 @@
 				struct diff_options *options)
 {
 	int renames = 0;
-
 	struct diff_filespec *target = rename_dst[dst_index].two;
 	struct file_similarity *p, *best = NULL;
 	int i = 100, best_score = -1;
+	unsigned int hash = hash_filespec(options->repo, target);
 
 	/*
 	 * Find the best source match for specified destination.
 	 */
-	p = hashmap_get_from_hash(srcs,
-				  hash_filespec(options->repo, target),
-				  NULL);
-	for (; p; p = hashmap_get_next(srcs, p)) {
+	p = hashmap_get_entry_from_hash(srcs, hash, NULL,
+					struct file_similarity, entry);
+	hashmap_for_each_entry_from(srcs, p, entry) {
 		int score;
 		struct diff_filespec *source = p->filespec;
 
@@ -329,8 +328,8 @@
 	entry->index = index;
 	entry->filespec = filespec;
 
-	hashmap_entry_init(entry, hash_filespec(r, filespec));
-	hashmap_add(table, entry);
+	hashmap_entry_init(&entry->entry, hash_filespec(r, filespec));
+	hashmap_add(table, &entry->entry);
 }
 
 /*
@@ -359,7 +358,7 @@
 		renames += find_identical_files(&file_table, i, options);
 
 	/* Free the hash data structure and entries */
-	hashmap_free(&file_table, 1);
+	hashmap_free_entries(&file_table, struct file_similarity, entry);
 
 	return renames;
 }
@@ -585,7 +584,7 @@
 	stop_progress(&progress);
 
 	/* cost matrix sorted by most to least similar pair */
-	QSORT(mx, dst_cnt * NUM_CANDIDATE_PER_DST, score_compare);
+	STABLE_QSORT(mx, dst_cnt * NUM_CANDIDATE_PER_DST, score_compare);
 
 	rename_count += find_renames(mx, dst_cnt, minimum_score, 0);
 	if (detect_rename == DIFF_DETECT_COPY)
diff --git a/dir.c b/dir.c
index d021c90..61f559f9 100644
--- a/dir.c
+++ b/dir.c
@@ -139,7 +139,7 @@
 	 * ":(icase)path" is treated as a pathspec full of
 	 * wildcard. In other words, only prefix is considered common
 	 * prefix. If the pathspec is abc/foo abc/bar, running in
-	 * subdir xyz, the common prefix is still xyz, not xuz/abc as
+	 * subdir xyz, the common prefix is still xyz, not xyz/abc as
 	 * in non-:(icase).
 	 */
 	GUARD_PATHSPEC(pathspec,
@@ -273,19 +273,30 @@
 
 #define DO_MATCH_EXCLUDE   (1<<0)
 #define DO_MATCH_DIRECTORY (1<<1)
-#define DO_MATCH_SUBMODULE (1<<2)
+#define DO_MATCH_LEADING_PATHSPEC (1<<2)
 
 /*
- * Does 'match' match the given name?
- * A match is found if
+ * Does the given pathspec match the given name?  A match is found if
  *
- * (1) the 'match' string is leading directory of 'name', or
- * (2) the 'match' string is a wildcard and matches 'name', or
- * (3) the 'match' string is exactly the same as 'name'.
+ * (1) the pathspec string is leading directory of 'name' ("RECURSIVELY"), or
+ * (2) the pathspec string has a leading part matching 'name' ("LEADING"), or
+ * (3) the pathspec string is a wildcard and matches 'name' ("WILDCARD"), or
+ * (4) the pathspec string is exactly the same as 'name' ("EXACT").
  *
- * and the return value tells which case it was.
+ * Return value tells which case it was (1-4), or 0 when there is no match.
  *
- * It returns 0 when there is no match.
+ * It may be instructive to look at a small table of concrete examples
+ * to understand the differences between 1, 2, and 4:
+ *
+ *                              Pathspecs
+ *                |    a/b    |   a/b/    |   a/b/c
+ *          ------+-----------+-----------+------------
+ *          a/b   |  EXACT    |  EXACT[1] | LEADING[2]
+ *  Names   a/b/  | RECURSIVE |   EXACT   | LEADING[2]
+ *          a/b/c | RECURSIVE | RECURSIVE |   EXACT
+ *
+ * [1] Only if DO_MATCH_DIRECTORY is passed; otherwise, this is NOT a match.
+ * [2] Only if DO_MATCH_LEADING_PATHSPEC is passed; otherwise, not a match.
  */
 static int match_pathspec_item(const struct index_state *istate,
 			       const struct pathspec_item *item, int prefix,
@@ -353,13 +364,14 @@
 			 item->nowildcard_len - prefix))
 		return MATCHED_FNMATCH;
 
-	/* Perform checks to see if "name" is a super set of the pathspec */
-	if (flags & DO_MATCH_SUBMODULE) {
+	/* Perform checks to see if "name" is a leading string of the pathspec */
+	if (flags & DO_MATCH_LEADING_PATHSPEC) {
 		/* name is a literal prefix of the pathspec */
+		int offset = name[namelen-1] == '/' ? 1 : 0;
 		if ((namelen < matchlen) &&
-		    (match[namelen] == '/') &&
+		    (match[namelen-offset] == '/') &&
 		    !ps_strncmp(item, match, name, namelen))
-			return MATCHED_RECURSIVELY;
+			return MATCHED_RECURSIVELY_LEADING_PATHSPEC;
 
 		/* name" doesn't match up to the first wild character */
 		if (item->nowildcard_len < item->len &&
@@ -376,7 +388,7 @@
 		 * The submodules themselves will be able to perform more
 		 * accurate matching to determine if the pathspec matches.
 		 */
-		return MATCHED_RECURSIVELY;
+		return MATCHED_RECURSIVELY_LEADING_PATHSPEC;
 	}
 
 	return 0;
@@ -497,7 +509,7 @@
 					strlen(submodule_name),
 					0, seen,
 					DO_MATCH_DIRECTORY |
-					DO_MATCH_SUBMODULE);
+					DO_MATCH_LEADING_PATHSPEC);
 	return matched;
 }
 
@@ -561,7 +573,7 @@
 	return string[simple_length(string)] == '\0';
 }
 
-void parse_exclude_pattern(const char **pattern,
+void parse_path_pattern(const char **pattern,
 			   int *patternlen,
 			   unsigned *flags,
 			   int *nowildcardlen)
@@ -571,20 +583,20 @@
 
 	*flags = 0;
 	if (*p == '!') {
-		*flags |= EXC_FLAG_NEGATIVE;
+		*flags |= PATTERN_FLAG_NEGATIVE;
 		p++;
 	}
 	len = strlen(p);
 	if (len && p[len - 1] == '/') {
 		len--;
-		*flags |= EXC_FLAG_MUSTBEDIR;
+		*flags |= PATTERN_FLAG_MUSTBEDIR;
 	}
 	for (i = 0; i < len; i++) {
 		if (p[i] == '/')
 			break;
 	}
 	if (i == len)
-		*flags |= EXC_FLAG_NODIR;
+		*flags |= PATTERN_FLAG_NODIR;
 	*nowildcardlen = simple_length(p);
 	/*
 	 * we should have excluded the trailing slash from 'p' too,
@@ -594,35 +606,35 @@
 	if (*nowildcardlen > len)
 		*nowildcardlen = len;
 	if (*p == '*' && no_wildcard(p + 1))
-		*flags |= EXC_FLAG_ENDSWITH;
+		*flags |= PATTERN_FLAG_ENDSWITH;
 	*pattern = p;
 	*patternlen = len;
 }
 
-void add_exclude(const char *string, const char *base,
-		 int baselen, struct exclude_list *el, int srcpos)
+void add_pattern(const char *string, const char *base,
+		 int baselen, struct pattern_list *pl, int srcpos)
 {
-	struct exclude *x;
+	struct path_pattern *pattern;
 	int patternlen;
 	unsigned flags;
 	int nowildcardlen;
 
-	parse_exclude_pattern(&string, &patternlen, &flags, &nowildcardlen);
-	if (flags & EXC_FLAG_MUSTBEDIR) {
-		FLEXPTR_ALLOC_MEM(x, pattern, string, patternlen);
+	parse_path_pattern(&string, &patternlen, &flags, &nowildcardlen);
+	if (flags & PATTERN_FLAG_MUSTBEDIR) {
+		FLEXPTR_ALLOC_MEM(pattern, pattern, string, patternlen);
 	} else {
-		x = xmalloc(sizeof(*x));
-		x->pattern = string;
+		pattern = xmalloc(sizeof(*pattern));
+		pattern->pattern = string;
 	}
-	x->patternlen = patternlen;
-	x->nowildcardlen = nowildcardlen;
-	x->base = base;
-	x->baselen = baselen;
-	x->flags = flags;
-	x->srcpos = srcpos;
-	ALLOC_GROW(el->excludes, el->nr + 1, el->alloc);
-	el->excludes[el->nr++] = x;
-	x->el = el;
+	pattern->patternlen = patternlen;
+	pattern->nowildcardlen = nowildcardlen;
+	pattern->base = base;
+	pattern->baselen = baselen;
+	pattern->flags = flags;
+	pattern->srcpos = srcpos;
+	ALLOC_GROW(pl->patterns, pl->nr + 1, pl->alloc);
+	pl->patterns[pl->nr++] = pattern;
+	pattern->pl = pl;
 }
 
 static int read_skip_worktree_file_from_index(const struct index_state *istate,
@@ -643,19 +655,19 @@
 }
 
 /*
- * Frees memory within el which was allocated for exclude patterns and
- * the file buffer.  Does not free el itself.
+ * Frees memory within pl which was allocated for exclude patterns and
+ * the file buffer.  Does not free pl itself.
  */
-void clear_exclude_list(struct exclude_list *el)
+void clear_pattern_list(struct pattern_list *pl)
 {
 	int i;
 
-	for (i = 0; i < el->nr; i++)
-		free(el->excludes[i]);
-	free(el->excludes);
-	free(el->filebuf);
+	for (i = 0; i < pl->nr; i++)
+		free(pl->patterns[i]);
+	free(pl->patterns);
+	free(pl->filebuf);
 
-	memset(el, 0, sizeof(*el));
+	memset(pl, 0, sizeof(*pl));
 }
 
 static void trim_trailing_spaces(char *buf)
@@ -762,21 +774,21 @@
 		dir->dirs[i]->recurse = 0;
 }
 
-static int add_excludes_from_buffer(char *buf, size_t size,
+static int add_patterns_from_buffer(char *buf, size_t size,
 				    const char *base, int baselen,
-				    struct exclude_list *el);
+				    struct pattern_list *pl);
 
 /*
  * Given a file with name "fname", read it (either from disk, or from
  * an index if 'istate' is non-null), parse it and store the
- * exclude rules in "el".
+ * exclude rules in "pl".
  *
  * If "ss" is not NULL, compute SHA-1 of the exclude file and fill
- * stat data from disk (only valid if add_excludes returns zero). If
+ * stat data from disk (only valid if add_patterns returns zero). If
  * ss_valid is non-zero, "ss" must contain good value as input.
  */
-static int add_excludes(const char *fname, const char *base, int baselen,
-			struct exclude_list *el, struct index_state *istate,
+static int add_patterns(const char *fname, const char *base, int baselen,
+			struct pattern_list *pl, struct index_state *istate,
 			struct oid_stat *oid_stat)
 {
 	struct stat st;
@@ -837,21 +849,21 @@
 		}
 	}
 
-	add_excludes_from_buffer(buf, size, base, baselen, el);
+	add_patterns_from_buffer(buf, size, base, baselen, pl);
 	return 0;
 }
 
-static int add_excludes_from_buffer(char *buf, size_t size,
+static int add_patterns_from_buffer(char *buf, size_t size,
 				    const char *base, int baselen,
-				    struct exclude_list *el)
+				    struct pattern_list *pl)
 {
 	int i, lineno = 1;
 	char *entry;
 
-	el->filebuf = buf;
+	pl->filebuf = buf;
 
 	if (skip_utf8_bom(&buf, size))
-		size -= buf - el->filebuf;
+		size -= buf - pl->filebuf;
 
 	entry = buf;
 
@@ -860,7 +872,7 @@
 			if (entry != buf + i && entry[0] != '#') {
 				buf[i - (i && buf[i-1] == '\r')] = 0;
 				trim_trailing_spaces(entry);
-				add_exclude(entry, base, baselen, el, lineno);
+				add_pattern(entry, base, baselen, pl, lineno);
 			}
 			lineno++;
 			entry = buf + i + 1;
@@ -869,17 +881,17 @@
 	return 0;
 }
 
-int add_excludes_from_file_to_list(const char *fname, const char *base,
-				   int baselen, struct exclude_list *el,
+int add_patterns_from_file_to_list(const char *fname, const char *base,
+				   int baselen, struct pattern_list *pl,
 				   struct index_state *istate)
 {
-	return add_excludes(fname, base, baselen, el, istate, NULL);
+	return add_patterns(fname, base, baselen, pl, istate, NULL);
 }
 
-int add_excludes_from_blob_to_list(
+int add_patterns_from_blob_to_list(
 	struct object_id *oid,
 	const char *base, int baselen,
-	struct exclude_list *el)
+	struct pattern_list *pl)
 {
 	char *buf;
 	size_t size;
@@ -889,31 +901,31 @@
 	if (r != 1)
 		return r;
 
-	add_excludes_from_buffer(buf, size, base, baselen, el);
+	add_patterns_from_buffer(buf, size, base, baselen, pl);
 	return 0;
 }
 
-struct exclude_list *add_exclude_list(struct dir_struct *dir,
+struct pattern_list *add_pattern_list(struct dir_struct *dir,
 				      int group_type, const char *src)
 {
-	struct exclude_list *el;
+	struct pattern_list *pl;
 	struct exclude_list_group *group;
 
 	group = &dir->exclude_list_group[group_type];
-	ALLOC_GROW(group->el, group->nr + 1, group->alloc);
-	el = &group->el[group->nr++];
-	memset(el, 0, sizeof(*el));
-	el->src = src;
-	return el;
+	ALLOC_GROW(group->pl, group->nr + 1, group->alloc);
+	pl = &group->pl[group->nr++];
+	memset(pl, 0, sizeof(*pl));
+	pl->src = src;
+	return pl;
 }
 
 /*
  * Used to set up core.excludesfile and .git/info/exclude lists.
  */
-static void add_excludes_from_file_1(struct dir_struct *dir, const char *fname,
+static void add_patterns_from_file_1(struct dir_struct *dir, const char *fname,
 				     struct oid_stat *oid_stat)
 {
-	struct exclude_list *el;
+	struct pattern_list *pl;
 	/*
 	 * catch setup_standard_excludes() that's called before
 	 * dir->untracked is assigned. That function behaves
@@ -921,15 +933,15 @@
 	 */
 	if (!dir->untracked)
 		dir->unmanaged_exclude_files++;
-	el = add_exclude_list(dir, EXC_FILE, fname);
-	if (add_excludes(fname, "", 0, el, NULL, oid_stat) < 0)
+	pl = add_pattern_list(dir, EXC_FILE, fname);
+	if (add_patterns(fname, "", 0, pl, NULL, oid_stat) < 0)
 		die(_("cannot use %s as an exclude file"), fname);
 }
 
-void add_excludes_from_file(struct dir_struct *dir, const char *fname)
+void add_patterns_from_file(struct dir_struct *dir, const char *fname)
 {
 	dir->unmanaged_exclude_files++; /* see validate_untracked_cache() */
-	add_excludes_from_file_1(dir, fname, NULL);
+	add_patterns_from_file_1(dir, fname, NULL);
 }
 
 int match_basename(const char *basename, int basenamelen,
@@ -940,7 +952,7 @@
 		if (patternlen == basenamelen &&
 		    !fspathncmp(pattern, basename, basenamelen))
 			return 1;
-	} else if (flags & EXC_FLAG_ENDSWITH) {
+	} else if (flags & PATTERN_FLAG_ENDSWITH) {
 		/* "*literal" matching against "fooliteral" */
 		if (patternlen - 1 <= basenamelen &&
 		    !fspathncmp(pattern + 1,
@@ -1021,85 +1033,97 @@
  * any, determines the fate.  Returns the exclude_list element which
  * matched, or NULL for undecided.
  */
-static struct exclude *last_exclude_matching_from_list(const char *pathname,
+static struct path_pattern *last_matching_pattern_from_list(const char *pathname,
 						       int pathlen,
 						       const char *basename,
 						       int *dtype,
-						       struct exclude_list *el,
+						       struct pattern_list *pl,
 						       struct index_state *istate)
 {
-	struct exclude *exc = NULL; /* undecided */
+	struct path_pattern *res = NULL; /* undecided */
 	int i;
 
-	if (!el->nr)
+	if (!pl->nr)
 		return NULL;	/* undefined */
 
-	for (i = el->nr - 1; 0 <= i; i--) {
-		struct exclude *x = el->excludes[i];
-		const char *exclude = x->pattern;
-		int prefix = x->nowildcardlen;
+	for (i = pl->nr - 1; 0 <= i; i--) {
+		struct path_pattern *pattern = pl->patterns[i];
+		const char *exclude = pattern->pattern;
+		int prefix = pattern->nowildcardlen;
 
-		if (x->flags & EXC_FLAG_MUSTBEDIR) {
+		if (pattern->flags & PATTERN_FLAG_MUSTBEDIR) {
 			if (*dtype == DT_UNKNOWN)
 				*dtype = get_dtype(NULL, istate, pathname, pathlen);
 			if (*dtype != DT_DIR)
 				continue;
 		}
 
-		if (x->flags & EXC_FLAG_NODIR) {
+		if (pattern->flags & PATTERN_FLAG_NODIR) {
 			if (match_basename(basename,
 					   pathlen - (basename - pathname),
-					   exclude, prefix, x->patternlen,
-					   x->flags)) {
-				exc = x;
+					   exclude, prefix, pattern->patternlen,
+					   pattern->flags)) {
+				res = pattern;
 				break;
 			}
 			continue;
 		}
 
-		assert(x->baselen == 0 || x->base[x->baselen - 1] == '/');
+		assert(pattern->baselen == 0 ||
+		       pattern->base[pattern->baselen - 1] == '/');
 		if (match_pathname(pathname, pathlen,
-				   x->base, x->baselen ? x->baselen - 1 : 0,
-				   exclude, prefix, x->patternlen, x->flags)) {
-			exc = x;
+				   pattern->base,
+				   pattern->baselen ? pattern->baselen - 1 : 0,
+				   exclude, prefix, pattern->patternlen,
+				   pattern->flags)) {
+			res = pattern;
 			break;
 		}
 	}
-	return exc;
+	return res;
 }
 
 /*
- * Scan the list and let the last match determine the fate.
- * Return 1 for exclude, 0 for include and -1 for undecided.
+ * Scan the list of patterns to determine if the ordered list
+ * of patterns matches on 'pathname'.
+ *
+ * Return 1 for a match, 0 for not matched and -1 for undecided.
  */
-int is_excluded_from_list(const char *pathname,
-			  int pathlen, const char *basename, int *dtype,
-			  struct exclude_list *el, struct index_state *istate)
+enum pattern_match_result path_matches_pattern_list(
+				const char *pathname, int pathlen,
+				const char *basename, int *dtype,
+				struct pattern_list *pl,
+				struct index_state *istate)
 {
-	struct exclude *exclude;
-	exclude = last_exclude_matching_from_list(pathname, pathlen, basename,
-						  dtype, el, istate);
-	if (exclude)
-		return exclude->flags & EXC_FLAG_NEGATIVE ? 0 : 1;
-	return -1; /* undecided */
+	struct path_pattern *pattern;
+	pattern = last_matching_pattern_from_list(pathname, pathlen, basename,
+						  dtype, pl, istate);
+	if (pattern) {
+		if (pattern->flags & PATTERN_FLAG_NEGATIVE)
+			return NOT_MATCHED;
+		else
+			return MATCHED;
+	}
+
+	return UNDECIDED;
 }
 
-static struct exclude *last_exclude_matching_from_lists(struct dir_struct *dir,
-							struct index_state *istate,
-		const char *pathname, int pathlen, const char *basename,
-		int *dtype_p)
+static struct path_pattern *last_matching_pattern_from_lists(
+		struct dir_struct *dir, struct index_state *istate,
+		const char *pathname, int pathlen,
+		const char *basename, int *dtype_p)
 {
 	int i, j;
 	struct exclude_list_group *group;
-	struct exclude *exclude;
+	struct path_pattern *pattern;
 	for (i = EXC_CMDL; i <= EXC_FILE; i++) {
 		group = &dir->exclude_list_group[i];
 		for (j = group->nr - 1; j >= 0; j--) {
-			exclude = last_exclude_matching_from_list(
+			pattern = last_matching_pattern_from_list(
 				pathname, pathlen, basename, dtype_p,
-				&group->el[j], istate);
-			if (exclude)
-				return exclude;
+				&group->pl[j], istate);
+			if (pattern)
+				return pattern;
 		}
 	}
 	return NULL;
@@ -1114,7 +1138,7 @@
 			 const char *base, int baselen)
 {
 	struct exclude_list_group *group;
-	struct exclude_list *el;
+	struct pattern_list *pl;
 	struct exclude_stack *stk = NULL;
 	struct untracked_cache_dir *untracked;
 	int current;
@@ -1130,17 +1154,17 @@
 		if (stk->baselen <= baselen &&
 		    !strncmp(dir->basebuf.buf, base, stk->baselen))
 			break;
-		el = &group->el[dir->exclude_stack->exclude_ix];
+		pl = &group->pl[dir->exclude_stack->exclude_ix];
 		dir->exclude_stack = stk->prev;
-		dir->exclude = NULL;
-		free((char *)el->src); /* see strbuf_detach() below */
-		clear_exclude_list(el);
+		dir->pattern = NULL;
+		free((char *)pl->src); /* see strbuf_detach() below */
+		clear_pattern_list(pl);
 		free(stk);
 		group->nr--;
 	}
 
 	/* Skip traversing into sub directories if the parent is excluded */
-	if (dir->exclude)
+	if (dir->pattern)
 		return;
 
 	/*
@@ -1181,7 +1205,7 @@
 		stk->baselen = cp - base;
 		stk->exclude_ix = group->nr;
 		stk->ucd = untracked;
-		el = add_exclude_list(dir, EXC_DIRS, NULL);
+		pl = add_pattern_list(dir, EXC_DIRS, NULL);
 		strbuf_add(&dir->basebuf, base + current, stk->baselen - current);
 		assert(stk->baselen == dir->basebuf.len);
 
@@ -1189,15 +1213,15 @@
 		if (stk->baselen) {
 			int dt = DT_DIR;
 			dir->basebuf.buf[stk->baselen - 1] = 0;
-			dir->exclude = last_exclude_matching_from_lists(dir,
+			dir->pattern = last_matching_pattern_from_lists(dir,
 									istate,
 				dir->basebuf.buf, stk->baselen - 1,
 				dir->basebuf.buf + current, &dt);
 			dir->basebuf.buf[stk->baselen - 1] = '/';
-			if (dir->exclude &&
-			    dir->exclude->flags & EXC_FLAG_NEGATIVE)
-				dir->exclude = NULL;
-			if (dir->exclude) {
+			if (dir->pattern &&
+			    dir->pattern->flags & PATTERN_FLAG_NEGATIVE)
+				dir->pattern = NULL;
+			if (dir->pattern) {
 				dir->exclude_stack = stk;
 				return;
 			}
@@ -1223,30 +1247,30 @@
 			/*
 			 * dir->basebuf gets reused by the traversal, but we
 			 * need fname to remain unchanged to ensure the src
-			 * member of each struct exclude correctly
+			 * member of each struct path_pattern correctly
 			 * back-references its source file.  Other invocations
-			 * of add_exclude_list provide stable strings, so we
+			 * of add_pattern_list provide stable strings, so we
 			 * strbuf_detach() and free() here in the caller.
 			 */
 			struct strbuf sb = STRBUF_INIT;
 			strbuf_addbuf(&sb, &dir->basebuf);
 			strbuf_addstr(&sb, dir->exclude_per_dir);
-			el->src = strbuf_detach(&sb, NULL);
-			add_excludes(el->src, el->src, stk->baselen, el, istate,
+			pl->src = strbuf_detach(&sb, NULL);
+			add_patterns(pl->src, pl->src, stk->baselen, pl, istate,
 				     untracked ? &oid_stat : NULL);
 		}
 		/*
 		 * NEEDSWORK: when untracked cache is enabled, prep_exclude()
 		 * will first be called in valid_cached_dir() then maybe many
-		 * times more in last_exclude_matching(). When the cache is
-		 * used, last_exclude_matching() will not be called and
+		 * times more in last_matching_pattern(). When the cache is
+		 * used, last_matching_pattern() will not be called and
 		 * reading .gitignore content will be a waste.
 		 *
 		 * So when it's called by valid_cached_dir() and we can get
 		 * .gitignore SHA-1 from the index (i.e. .gitignore is not
 		 * modified on work tree), we could delay reading the
 		 * .gitignore content until we absolutely need it in
-		 * last_exclude_matching(). Be careful about ignore rule
+		 * last_matching_pattern(). Be careful about ignore rule
 		 * order, though, if you do that.
 		 */
 		if (untracked &&
@@ -1266,7 +1290,7 @@
  * Returns the exclude_list element which matched, or NULL for
  * undecided.
  */
-struct exclude *last_exclude_matching(struct dir_struct *dir,
+struct path_pattern *last_matching_pattern(struct dir_struct *dir,
 				      struct index_state *istate,
 				      const char *pathname,
 				      int *dtype_p)
@@ -1277,10 +1301,10 @@
 
 	prep_exclude(dir, istate, pathname, basename-pathname);
 
-	if (dir->exclude)
-		return dir->exclude;
+	if (dir->pattern)
+		return dir->pattern;
 
-	return last_exclude_matching_from_lists(dir, istate, pathname, pathlen,
+	return last_matching_pattern_from_lists(dir, istate, pathname, pathlen,
 			basename, dtype_p);
 }
 
@@ -1292,10 +1316,10 @@
 int is_excluded(struct dir_struct *dir, struct index_state *istate,
 		const char *pathname, int *dtype_p)
 {
-	struct exclude *exclude =
-		last_exclude_matching(dir, istate, pathname, dtype_p);
-	if (exclude)
-		return exclude->flags & EXC_FLAG_NEGATIVE ? 0 : 1;
+	struct path_pattern *pattern =
+		last_matching_pattern(dir, istate, pathname, dtype_p);
+	if (pattern)
+		return pattern->flags & PATTERN_FLAG_NEGATIVE ? 0 : 1;
 	return 0;
 }
 
@@ -1439,6 +1463,16 @@
 		return path_none;
 
 	case index_nonexistent:
+		if (dir->flags & DIR_SKIP_NESTED_GIT) {
+			int nested_repo;
+			struct strbuf sb = STRBUF_INIT;
+			strbuf_addstr(&sb, dirname);
+			nested_repo = is_nonbare_repository_dir(&sb);
+			strbuf_release(&sb);
+			if (nested_repo)
+				return path_none;
+		}
+
 		if (dir->flags & DIR_SHOW_OTHER_DIRECTORIES)
 			break;
 		if (exclude &&
@@ -1808,7 +1842,7 @@
 
 	/*
 	 * prep_exclude will be called eventually on this directory,
-	 * but it's called much later in last_exclude_matching(). We
+	 * but it's called much later in last_matching_pattern(). We
 	 * need it now to determine the validity of the cache for this
 	 * path. The next calls will be nearly no-op, the way
 	 * prep_exclude() is designed.
@@ -1938,8 +1972,11 @@
 		/* recurse into subdir if instructed by treat_path */
 		if ((state == path_recurse) ||
 			((state == path_untracked) &&
-			 (dir->flags & DIR_SHOW_IGNORED_TOO) &&
-			 (get_dtype(cdir.de, istate, path.buf, path.len) == DT_DIR))) {
+			 (get_dtype(cdir.de, istate, path.buf, path.len) == DT_DIR) &&
+			 ((dir->flags & DIR_SHOW_IGNORED_TOO) ||
+			  (pathspec &&
+			   do_match_pathspec(istate, pathspec, path.buf, path.len,
+					     baselen, NULL, DO_MATCH_LEADING_PATHSPEC) == MATCHED_RECURSIVELY_LEADING_PATHSPEC)))) {
 			struct untracked_cache_dir *ud;
 			ud = lookup_untracked(dir->untracked, untracked,
 					      path.buf + baselen,
@@ -1950,6 +1987,12 @@
 							 check_only, stop_at_first_file, pathspec);
 			if (subdir_state > dir_state)
 				dir_state = subdir_state;
+
+			if (pathspec &&
+			    !match_pathspec(istate, pathspec, path.buf, path.len,
+					    0 /* prefix */, NULL,
+					    0 /* do NOT special case dirs */))
+				state = path_none;
 		}
 
 		if (check_only) {
@@ -2488,14 +2531,14 @@
 	if (!excludes_file)
 		excludes_file = xdg_config_home("ignore");
 	if (excludes_file && !access_or_warn(excludes_file, R_OK, 0))
-		add_excludes_from_file_1(dir, excludes_file,
+		add_patterns_from_file_1(dir, excludes_file,
 					 dir->untracked ? &dir->ss_excludes_file : NULL);
 
 	/* per repository user preference */
 	if (startup_info->have_repository) {
 		const char *path = git_path_info_exclude();
 		if (!access_or_warn(path, R_OK, 0))
-			add_excludes_from_file_1(dir, path,
+			add_patterns_from_file_1(dir, path,
 						 dir->untracked ? &dir->ss_info_exclude : NULL);
 	}
 }
@@ -2527,18 +2570,18 @@
 {
 	int i, j;
 	struct exclude_list_group *group;
-	struct exclude_list *el;
+	struct pattern_list *pl;
 	struct exclude_stack *stk;
 
 	for (i = EXC_CMDL; i <= EXC_FILE; i++) {
 		group = &dir->exclude_list_group[i];
 		for (j = 0; j < group->nr; j++) {
-			el = &group->el[j];
+			pl = &group->pl[j];
 			if (i == EXC_DIRS)
-				free((char *)el->src);
-			clear_exclude_list(el);
+				free((char *)pl->src);
+			clear_pattern_list(pl);
 		}
-		free(group->el);
+		free(group->pl);
 	}
 
 	stk = dir->exclude_stack;
diff --git a/dir.h b/dir.h
index 680079b..2fbdef0 100644
--- a/dir.h
+++ b/dir.h
@@ -11,24 +11,24 @@
 	char name[FLEX_ARRAY]; /* more */
 };
 
-#define EXC_FLAG_NODIR 1
-#define EXC_FLAG_ENDSWITH 4
-#define EXC_FLAG_MUSTBEDIR 8
-#define EXC_FLAG_NEGATIVE 16
+#define PATTERN_FLAG_NODIR 1
+#define PATTERN_FLAG_ENDSWITH 4
+#define PATTERN_FLAG_MUSTBEDIR 8
+#define PATTERN_FLAG_NEGATIVE 16
 
-struct exclude {
+struct path_pattern {
 	/*
-	 * This allows callers of last_exclude_matching() etc.
+	 * This allows callers of last_matching_pattern() etc.
 	 * to determine the origin of the matching pattern.
 	 */
-	struct exclude_list *el;
+	struct pattern_list *pl;
 
 	const char *pattern;
 	int patternlen;
 	int nowildcardlen;
 	const char *base;
 	int baselen;
-	unsigned flags;		/* EXC_FLAG_* */
+	unsigned flags;		/* PATTERN_FLAG_* */
 
 	/*
 	 * Counting starts from 1 for line numbers in ignore files,
@@ -44,7 +44,7 @@
  * can also be used to represent the list of --exclude values passed
  * via CLI args.
  */
-struct exclude_list {
+struct pattern_list {
 	int nr;
 	int alloc;
 
@@ -54,7 +54,7 @@
 	/* origin of list, e.g. path to filename, or descriptive string */
 	const char *src;
 
-	struct exclude **excludes;
+	struct path_pattern **patterns;
 };
 
 /*
@@ -72,7 +72,7 @@
 
 struct exclude_list_group {
 	int nr, alloc;
-	struct exclude_list *el;
+	struct pattern_list *pl;
 };
 
 struct oid_stat {
@@ -156,7 +156,8 @@
 		DIR_SHOW_IGNORED_TOO = 1<<5,
 		DIR_COLLECT_KILLED_ONLY = 1<<6,
 		DIR_KEEP_UNTRACKED_CONTENTS = 1<<7,
-		DIR_SHOW_IGNORED_TOO_MODE_MATCHING = 1<<8
+		DIR_SHOW_IGNORED_TOO_MODE_MATCHING = 1<<8,
+		DIR_SKIP_NESTED_GIT = 1<<9
 	} flags;
 	struct dir_entry **entries;
 	struct dir_entry **ignored;
@@ -191,7 +192,7 @@
 	 * matching exclude struct if the directory is excluded.
 	 */
 	struct exclude_stack *exclude_stack;
-	struct exclude *exclude;
+	struct path_pattern *pattern;
 	struct strbuf basebuf;
 
 	/* Enable untracked file cache if set */
@@ -211,8 +212,9 @@
  * when populating the seen[] array.
  */
 #define MATCHED_RECURSIVELY 1
-#define MATCHED_FNMATCH 2
-#define MATCHED_EXACTLY 3
+#define MATCHED_RECURSIVELY_LEADING_PATHSPEC 2
+#define MATCHED_FNMATCH 3
+#define MATCHED_EXACTLY 4
 int simple_length(const char *match);
 int no_wildcard(const char *string);
 char *common_prefix(const struct pathspec *pathspec);
@@ -230,10 +232,23 @@
 		   const char *path, int len,
 		   const struct pathspec *pathspec);
 
-int is_excluded_from_list(const char *pathname, int pathlen,
-			  const char *basename, int *dtype,
-			  struct exclude_list *el,
-			  struct index_state *istate);
+enum pattern_match_result {
+	UNDECIDED = -1,
+	NOT_MATCHED = 0,
+	MATCHED = 1,
+};
+
+/*
+ * Scan the list of patterns to determine if the ordered list
+ * of patterns matches on 'pathname'.
+ *
+ * Return 1 for a match, 0 for not matched and -1 for undecided.
+ */
+enum pattern_match_result path_matches_pattern_list(const char *pathname,
+				int pathlen,
+				const char *basename, int *dtype,
+				struct pattern_list *pl,
+				struct index_state *istate);
 struct dir_entry *dir_add_ignored(struct dir_struct *dir,
 				  struct index_state *istate,
 				  const char *pathname, int len);
@@ -248,26 +263,26 @@
 		   const char *, int,
 		   const char *, int, int, unsigned);
 
-struct exclude *last_exclude_matching(struct dir_struct *dir,
-				      struct index_state *istate,
-				      const char *name, int *dtype);
+struct path_pattern *last_matching_pattern(struct dir_struct *dir,
+					   struct index_state *istate,
+					   const char *name, int *dtype);
 
 int is_excluded(struct dir_struct *dir,
 		struct index_state *istate,
 		const char *name, int *dtype);
 
-struct exclude_list *add_exclude_list(struct dir_struct *dir,
+struct pattern_list *add_pattern_list(struct dir_struct *dir,
 				      int group_type, const char *src);
-int add_excludes_from_file_to_list(const char *fname, const char *base, int baselen,
-				   struct exclude_list *el, struct  index_state *istate);
-void add_excludes_from_file(struct dir_struct *, const char *fname);
-int add_excludes_from_blob_to_list(struct object_id *oid,
+int add_patterns_from_file_to_list(const char *fname, const char *base, int baselen,
+				   struct pattern_list *pl, struct  index_state *istate);
+void add_patterns_from_file(struct dir_struct *, const char *fname);
+int add_patterns_from_blob_to_list(struct object_id *oid,
 				   const char *base, int baselen,
-				   struct exclude_list *el);
-void parse_exclude_pattern(const char **string, int *patternlen, unsigned *flags, int *nowildcardlen);
-void add_exclude(const char *string, const char *base,
-		 int baselen, struct exclude_list *el, int srcpos);
-void clear_exclude_list(struct exclude_list *el);
+				   struct pattern_list *pl);
+void parse_path_pattern(const char **string, int *patternlen, unsigned *flags, int *nowildcardlen);
+void add_pattern(const char *string, const char *base,
+		 int baselen, struct pattern_list *pl, int srcpos);
+void clear_pattern_list(struct pattern_list *pl);
 void clear_directory(struct dir_struct *dir);
 
 int repo_file_exists(struct repository *repo, const char *path);
diff --git a/environment.c b/environment.c
index 9f5f381..6f0be4b 100644
--- a/environment.c
+++ b/environment.c
@@ -31,8 +31,6 @@
 int warn_on_object_refname_ambiguity = 1;
 int ref_paranoia = -1;
 int repository_format_precious_objects;
-char *repository_format_partial_clone;
-const char *core_partial_clone_filter_default;
 int repository_format_worktree_config;
 const char *git_commit_encoding;
 const char *git_log_output_encoding;
diff --git a/fast-import.c b/fast-import.c
index b4e2105..b8b65a8 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -1770,7 +1770,6 @@
 		} else {
 			struct recent_command *rc;
 
-			strbuf_detach(&command_buf, NULL);
 			stdin_eof = strbuf_getline_lf(&command_buf, stdin);
 			if (stdin_eof)
 				return EOF;
@@ -1791,7 +1790,7 @@
 				free(rc->buf);
 			}
 
-			rc->buf = command_buf.buf;
+			rc->buf = xstrdup(command_buf.buf);
 			rc->prev = cmd_tail;
 			rc->next = cmd_hist.prev;
 			rc->prev->next = rc;
@@ -1840,7 +1839,6 @@
 		char *term = xstrdup(data);
 		size_t term_len = command_buf.len - (data - command_buf.buf);
 
-		strbuf_detach(&command_buf, NULL);
 		for (;;) {
 			if (strbuf_getline_lf(&command_buf, stdin) == EOF)
 				die("EOF in data (terminator '%s' not found)", term);
@@ -2498,18 +2496,14 @@
 	}
 }
 
-static int parse_from(struct branch *b)
+static int parse_objectish(struct branch *b, const char *objectish)
 {
-	const char *from;
 	struct branch *s;
 	struct object_id oid;
 
-	if (!skip_prefix(command_buf.buf, "from ", &from))
-		return 0;
-
 	oidcpy(&oid, &b->branch_tree.versions[1].oid);
 
-	s = lookup_branch(from);
+	s = lookup_branch(objectish);
 	if (b == s)
 		die("Can't create a branch from itself: %s", b->name);
 	else if (s) {
@@ -2517,8 +2511,8 @@
 		oidcpy(&b->oid, &s->oid);
 		oidcpy(&b->branch_tree.versions[0].oid, t);
 		oidcpy(&b->branch_tree.versions[1].oid, t);
-	} else if (*from == ':') {
-		uintmax_t idnum = parse_mark_ref_eol(from);
+	} else if (*objectish == ':') {
+		uintmax_t idnum = parse_mark_ref_eol(objectish);
 		struct object_entry *oe = find_mark(idnum);
 		if (oe->type != OBJ_COMMIT)
 			die("Mark :%" PRIuMAX " not a commit", idnum);
@@ -2532,13 +2526,13 @@
 			} else
 				parse_from_existing(b);
 		}
-	} else if (!get_oid(from, &b->oid)) {
+	} else if (!get_oid(objectish, &b->oid)) {
 		parse_from_existing(b);
 		if (is_null_oid(&b->oid))
 			b->delete = 1;
 	}
 	else
-		die("Invalid ref name or SHA1 expression: %s", from);
+		die("Invalid ref name or SHA1 expression: %s", objectish);
 
 	if (b->branch_tree.tree && !oideq(&oid, &b->branch_tree.versions[1].oid)) {
 		release_tree_content_recursive(b->branch_tree.tree);
@@ -2549,6 +2543,26 @@
 	return 1;
 }
 
+static int parse_from(struct branch *b)
+{
+	const char *from;
+
+	if (!skip_prefix(command_buf.buf, "from ", &from))
+		return 0;
+
+	return parse_objectish(b, from);
+}
+
+static int parse_objectish_with_prefix(struct branch *b, const char *prefix)
+{
+	const char *base;
+
+	if (!skip_prefix(command_buf.buf, prefix, &base))
+		return 0;
+
+	return parse_objectish(b, base);
+}
+
 static struct hash_list *parse_merge(unsigned int *count)
 {
 	struct hash_list *list = NULL, **tail = &list, *n;
@@ -2595,7 +2609,7 @@
 	struct branch *b;
 	char *author = NULL;
 	char *committer = NULL;
-	const char *encoding = NULL;
+	char *encoding = NULL;
 	struct hash_list *merge_list = NULL;
 	unsigned int merge_count;
 	unsigned char prev_fanout, new_fanout;
@@ -2618,8 +2632,10 @@
 	}
 	if (!committer)
 		die("Expected committer but didn't get one");
-	if (skip_prefix(command_buf.buf, "encoding ", &encoding))
+	if (skip_prefix(command_buf.buf, "encoding ", &v)) {
+		encoding = xstrdup(v);
 		read_next_command();
+	}
 	parse_data(&msg, 0, NULL);
 	read_next_command();
 	parse_from(b);
@@ -2693,6 +2709,7 @@
 	strbuf_addbuf(&new_data, &msg);
 	free(author);
 	free(committer);
+	free(encoding);
 
 	if (!store_object(OBJ_COMMIT, &new_data, NULL, &b->oid, next_mark))
 		b->pack_id = pack_id;
@@ -2720,6 +2737,7 @@
 		first_tag = t;
 	last_tag = t;
 	read_next_command();
+	parse_mark();
 
 	/* from ... */
 	if (!skip_prefix(command_buf.buf, "from ", &from))
@@ -2776,7 +2794,7 @@
 	strbuf_addbuf(&new_data, &msg);
 	free(tagger);
 
-	if (store_object(OBJ_TAG, &new_data, NULL, &t->oid, 0))
+	if (store_object(OBJ_TAG, &new_data, NULL, &t->oid, next_mark))
 		t->pack_id = MAX_PACK_ID;
 	else
 		t->pack_id = pack_id;
@@ -2785,6 +2803,7 @@
 static void parse_reset_branch(const char *arg)
 {
 	struct branch *b;
+	const char *tag_name;
 
 	b = lookup_branch(arg);
 	if (b) {
@@ -2800,6 +2819,32 @@
 		b = new_branch(arg);
 	read_next_command();
 	parse_from(b);
+	if (b->delete && skip_prefix(b->name, "refs/tags/", &tag_name)) {
+		/*
+		 * Elsewhere, we call dump_branches() before dump_tags(),
+		 * and dump_branches() will handle ref deletions first, so
+		 * in order to make sure the deletion actually takes effect,
+		 * we need to remove the tag from our list of tags to update.
+		 *
+		 * NEEDSWORK: replace list of tags with hashmap for faster
+		 * deletion?
+		 */
+		struct tag *t, *prev = NULL;
+		for (t = first_tag; t; t = t->next_tag) {
+			if (!strcmp(t->name, tag_name))
+				break;
+			prev = t;
+		}
+		if (t) {
+			if (prev)
+				prev->next_tag = t->next_tag;
+			else
+				first_tag = t->next_tag;
+			if (!t->next_tag)
+				last_tag = prev;
+			/* There is no mem_pool_free(t) function to call. */
+		}
+	}
 	if (command_buf.len > 0)
 		unread_command_buf = 1;
 }
@@ -3066,6 +3111,28 @@
 	skip_optional_lf();
 }
 
+static void parse_alias(void)
+{
+	struct object_entry *e;
+	struct branch b;
+
+	skip_optional_lf();
+	read_next_command();
+
+	/* mark ... */
+	parse_mark();
+	if (!next_mark)
+		die(_("Expected 'mark' command, got %s"), command_buf.buf);
+
+	/* to ... */
+	memset(&b, 0, sizeof(b));
+	if (!parse_objectish_with_prefix(&b, "to "))
+		die(_("Expected 'to' command, got %s"), command_buf.buf);
+	e = find_object(&b.oid);
+	assert(e);
+	insert_mark(next_mark, e);
+}
+
 static char* make_fast_import_path(const char *path)
 {
 	if (!relative_marks_paths || is_absolute_path(path))
@@ -3203,6 +3270,8 @@
 	} else if (skip_prefix(feature, "export-marks=", &arg)) {
 		check_unsafe_feature(feature, from_stream);
 		option_export_marks(arg);
+	} else if (!strcmp(feature, "alias")) {
+		; /* Don't die - this feature is supported */
 	} else if (!strcmp(feature, "get-mark")) {
 		; /* Don't die - this feature is supported */
 	} else if (!strcmp(feature, "cat-blob")) {
@@ -3373,6 +3442,8 @@
 			parse_checkpoint();
 		else if (!strcmp("done", command_buf.buf))
 			break;
+		else if (!strcmp("alias", command_buf.buf))
+			parse_alias();
 		else if (starts_with(command_buf.buf, "progress "))
 			parse_progress();
 		else if (skip_prefix(command_buf.buf, "feature ", &v))
diff --git a/fetch-negotiator.c b/fetch-negotiator.c
index d6d685c..0a1357d 100644
--- a/fetch-negotiator.c
+++ b/fetch-negotiator.c
@@ -2,19 +2,20 @@
 #include "fetch-negotiator.h"
 #include "negotiator/default.h"
 #include "negotiator/skipping.h"
+#include "repository.h"
 
-void fetch_negotiator_init(struct fetch_negotiator *negotiator,
-			   const char *algorithm)
+void fetch_negotiator_init(struct repository *r,
+			   struct fetch_negotiator *negotiator)
 {
-	if (algorithm) {
-		if (!strcmp(algorithm, "skipping")) {
-			skipping_negotiator_init(negotiator);
-			return;
-		} else if (!strcmp(algorithm, "default")) {
-			/* Fall through to default initialization */
-		} else {
-			die("unknown fetch negotiation algorithm '%s'", algorithm);
-		}
+	prepare_repo_settings(r);
+	switch(r->settings.fetch_negotiation_algorithm) {
+	case FETCH_NEGOTIATION_SKIPPING:
+		skipping_negotiator_init(negotiator);
+		return;
+
+	case FETCH_NEGOTIATION_DEFAULT:
+	default:
+		default_negotiator_init(negotiator);
+		return;
 	}
-	default_negotiator_init(negotiator);
 }
diff --git a/fetch-negotiator.h b/fetch-negotiator.h
index 9e3967c..ea78868 100644
--- a/fetch-negotiator.h
+++ b/fetch-negotiator.h
@@ -2,6 +2,7 @@
 #define FETCH_NEGOTIATOR_H
 
 struct commit;
+struct repository;
 
 /*
  * An object that supplies the information needed to negotiate the contents of
@@ -52,7 +53,7 @@
 	void *data;
 };
 
-void fetch_negotiator_init(struct fetch_negotiator *negotiator,
-			   const char *algorithm);
+void fetch_negotiator_init(struct repository *r,
+			   struct fetch_negotiator *negotiator);
 
 #endif
diff --git a/fetch-object.c b/fetch-object.c
deleted file mode 100644
index 4266548..0000000
--- a/fetch-object.c
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "cache.h"
-#include "packfile.h"
-#include "pkt-line.h"
-#include "strbuf.h"
-#include "transport.h"
-#include "fetch-object.h"
-
-static void fetch_refs(const char *remote_name, struct ref *ref)
-{
-	struct remote *remote;
-	struct transport *transport;
-	int original_fetch_if_missing = fetch_if_missing;
-
-	fetch_if_missing = 0;
-	remote = remote_get(remote_name);
-	if (!remote->url[0])
-		die(_("Remote with no URL"));
-	transport = transport_get(remote, remote->url[0]);
-
-	transport_set_option(transport, TRANS_OPT_FROM_PROMISOR, "1");
-	transport_set_option(transport, TRANS_OPT_NO_DEPENDENTS, "1");
-	transport_fetch_refs(transport, ref);
-	fetch_if_missing = original_fetch_if_missing;
-}
-
-void fetch_objects(const char *remote_name, const struct object_id *oids,
-		   int oid_nr)
-{
-	struct ref *ref = NULL;
-	int i;
-
-	for (i = 0; i < oid_nr; i++) {
-		struct ref *new_ref = alloc_ref(oid_to_hex(&oids[i]));
-		oidcpy(&new_ref->old_oid, &oids[i]);
-		new_ref->exact_oid = 1;
-		new_ref->next = ref;
-		ref = new_ref;
-	}
-	fetch_refs(remote_name, ref);
-}
diff --git a/fetch-object.h b/fetch-object.h
deleted file mode 100644
index d6444ca..0000000
--- a/fetch-object.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef FETCH_OBJECT_H
-#define FETCH_OBJECT_H
-
-struct object_id;
-
-void fetch_objects(const char *remote_name, const struct object_id *oids,
-		   int oid_nr);
-
-#endif
diff --git a/fetch-pack.c b/fetch-pack.c
index 65be043..0130b44 100644
--- a/fetch-pack.c
+++ b/fetch-pack.c
@@ -36,7 +36,6 @@
 static int server_supports_filtering;
 static struct lock_file shallow_lock;
 static const char *alternate_shallow_file;
-static char *negotiation_algorithm;
 static struct strbuf fsck_msg_types = STRBUF_INIT;
 
 /* Remember to update object flag allocation in object.h */
@@ -168,16 +167,16 @@
 	if (!strcmp(reader->line, "NAK"))
 		return NAK;
 	if (skip_prefix(reader->line, "ACK ", &arg)) {
-		if (!get_oid_hex(arg, result_oid)) {
-			arg += 40;
-			len -= arg - reader->line;
+		const char *p;
+		if (!parse_oid_hex(arg, result_oid, &p)) {
+			len -= p - reader->line;
 			if (len < 1)
 				return ACK;
-			if (strstr(arg, "continue"))
+			if (strstr(p, "continue"))
 				return ACK_continue;
-			if (strstr(arg, "common"))
+			if (strstr(p, "common"))
 				return ACK_common;
-			if (strstr(arg, "ready"))
+			if (strstr(p, "ready"))
 				return ACK_ready;
 			return ACK;
 		}
@@ -339,12 +338,9 @@
 		}
 	}
 	if (server_supports_filtering && args->filter_options.choice) {
-		struct strbuf expanded_filter_spec = STRBUF_INIT;
-		expand_list_objects_filter_spec(&args->filter_options,
-						&expanded_filter_spec);
-		packet_buf_write(&req_buf, "filter %s",
-				 expanded_filter_spec.buf);
-		strbuf_release(&expanded_filter_spec);
+		const char *spec =
+			expand_list_objects_filter_spec(&args->filter_options);
+		packet_buf_write(&req_buf, "filter %s", spec);
 	}
 	packet_buf_flush(&req_buf);
 	state_len = req_buf.len;
@@ -386,6 +382,7 @@
 		state_len = 0;
 	}
 
+	trace2_region_enter("fetch-pack", "negotiation_v0_v1", the_repository);
 	flushes = 0;
 	retval = -1;
 	if (args->no_dependents)
@@ -470,6 +467,7 @@
 		}
 	}
 done:
+	trace2_region_leave("fetch-pack", "negotiation_v0_v1", the_repository);
 	if (!got_ready || !no_done) {
 		packet_buf_write(&req_buf, "done\n");
 		send_request(args, fd[1], &req_buf);
@@ -892,12 +890,13 @@
 				 struct shallow_info *si,
 				 char **pack_lockfile)
 {
+	struct repository *r = the_repository;
 	struct ref *ref = copy_ref_list(orig_ref);
 	struct object_id oid;
 	const char *agent_feature;
 	int agent_len;
 	struct fetch_negotiator negotiator;
-	fetch_negotiator_init(&negotiator, negotiation_algorithm);
+	fetch_negotiator_init(r, &negotiator);
 
 	sort_ref_list(&ref, ref_compare_name);
 	QSORT(sought, nr_sought, cmp_ref_by_name);
@@ -911,7 +910,7 @@
 
 	if (server_supports("shallow"))
 		print_verbose(args, _("Server supports %s"), "shallow");
-	else if (args->depth > 0 || is_repository_shallow(the_repository))
+	else if (args->depth > 0 || is_repository_shallow(r))
 		die(_("Server does not support shallow clients"));
 	if (args->depth > 0 || args->deepen_since || args->deepen_not)
 		args->deepen = 1;
@@ -1112,7 +1111,7 @@
 }
 
 static int send_fetch_request(struct fetch_negotiator *negotiator, int fd_out,
-			      const struct fetch_pack_args *args,
+			      struct fetch_pack_args *args,
 			      const struct ref *wants, struct oidset *common,
 			      int *haves_to_send, int *in_vain,
 			      int sideband_all)
@@ -1153,13 +1152,10 @@
 	/* Add filter */
 	if (server_supports_feature("fetch", "filter", 0) &&
 	    args->filter_options.choice) {
-		struct strbuf expanded_filter_spec = STRBUF_INIT;
+		const char *spec =
+			expand_list_objects_filter_spec(&args->filter_options);
 		print_verbose(args, _("Server supports filter"));
-		expand_list_objects_filter_spec(&args->filter_options,
-						&expanded_filter_spec);
-		packet_buf_write(&req_buf, "filter %s",
-				 expanded_filter_spec.buf);
-		strbuf_release(&expanded_filter_spec);
+		packet_buf_write(&req_buf, "filter %s", spec);
 	} else if (args->filter_options.choice) {
 		warning("filtering not recognized by server, ignoring");
 	}
@@ -1379,14 +1375,15 @@
 				    struct shallow_info *si,
 				    char **pack_lockfile)
 {
+	struct repository *r = the_repository;
 	struct ref *ref = copy_ref_list(orig_ref);
 	enum fetch_state state = FETCH_CHECK_LOCAL;
 	struct oidset common = OIDSET_INIT;
 	struct packet_reader reader;
-	int in_vain = 0;
+	int in_vain = 0, negotiation_started = 0;
 	int haves_to_send = INITIAL_FLUSH;
 	struct fetch_negotiator negotiator;
-	fetch_negotiator_init(&negotiator, negotiation_algorithm);
+	fetch_negotiator_init(r, &negotiator);
 	packet_reader_init(&reader, fd[0], NULL, 0,
 			   PACKET_READ_CHOMP_NEWLINE |
 			   PACKET_READ_DIE_ON_ERR_PACKET);
@@ -1426,6 +1423,12 @@
 			}
 			break;
 		case FETCH_SEND_REQUEST:
+			if (!negotiation_started) {
+				negotiation_started = 1;
+				trace2_region_enter("fetch-pack",
+						    "negotiation_v2",
+						    the_repository);
+			}
 			if (send_fetch_request(&negotiator, fd[1], args, ref,
 					       &common,
 					       &haves_to_send, &in_vain,
@@ -1449,6 +1452,9 @@
 			}
 			break;
 		case FETCH_GET_PACK:
+			trace2_region_leave("fetch-pack",
+					    "negotiation_v2",
+					    the_repository);
 			/* Check for shallow-info section */
 			if (process_section_header(&reader, "shallow-info", 1))
 				receive_shallow_info(args, &reader, shallows, si);
@@ -1505,8 +1511,6 @@
 	git_config_get_bool("repack.usedeltabaseoffset", &prefer_ofs_delta);
 	git_config_get_bool("fetch.fsckobjects", &fetch_fsck_objects);
 	git_config_get_bool("transfer.fsckobjects", &transfer_fsck_objects);
-	git_config_get_string("fetch.negotiationalgorithm",
-			      &negotiation_algorithm);
 
 	git_config(fetch_pack_config_cb, NULL);
 }
diff --git a/fsmonitor.c b/fsmonitor.c
index 231e83a..1f4aa1b 100644
--- a/fsmonitor.c
+++ b/fsmonitor.c
@@ -14,8 +14,13 @@
 static void fsmonitor_ewah_callback(size_t pos, void *is)
 {
 	struct index_state *istate = (struct index_state *)is;
-	struct cache_entry *ce = istate->cache[pos];
+	struct cache_entry *ce;
 
+	if (pos >= istate->cache_nr)
+		BUG("fsmonitor_dirty has more entries than the index (%"PRIuMAX" >= %u)",
+		    (uintmax_t)pos, istate->cache_nr);
+
+	ce = istate->cache[pos];
 	ce->ce_flags &= ~CE_FSMONITOR_VALID;
 }
 
@@ -50,17 +55,24 @@
 	}
 	istate->fsmonitor_dirty = fsmonitor_dirty;
 
+	if (istate->fsmonitor_dirty->bit_size > istate->cache_nr)
+		BUG("fsmonitor_dirty has more entries than the index (%"PRIuMAX" > %u)",
+		    (uintmax_t)istate->fsmonitor_dirty->bit_size, istate->cache_nr);
+
 	trace_printf_key(&trace_fsmonitor, "read fsmonitor extension successful");
 	return 0;
 }
 
 void fill_fsmonitor_bitmap(struct index_state *istate)
 {
-	unsigned int i;
+	unsigned int i, skipped = 0;
 	istate->fsmonitor_dirty = ewah_new();
-	for (i = 0; i < istate->cache_nr; i++)
-		if (!(istate->cache[i]->ce_flags & CE_FSMONITOR_VALID))
-			ewah_set(istate->fsmonitor_dirty, i);
+	for (i = 0; i < istate->cache_nr; i++) {
+		if (istate->cache[i]->ce_flags & CE_REMOVE)
+			skipped++;
+		else if (!(istate->cache[i]->ce_flags & CE_FSMONITOR_VALID))
+			ewah_set(istate->fsmonitor_dirty, i - skipped);
+	}
 }
 
 void write_fsmonitor_extension(struct strbuf *sb, struct index_state *istate)
@@ -71,6 +83,10 @@
 	uint32_t ewah_size = 0;
 	int fixup = 0;
 
+	if (istate->fsmonitor_dirty->bit_size > istate->cache_nr)
+		BUG("fsmonitor_dirty has more entries than the index (%"PRIuMAX" > %u)",
+		    (uintmax_t)istate->fsmonitor_dirty->bit_size, istate->cache_nr);
+
 	put_be32(&hdr_version, INDEX_EXTENSION_VERSION);
 	strbuf_add(sb, &hdr_version, sizeof(uint32_t));
 
@@ -236,6 +252,9 @@
 			}
 
 			/* Mark all previously saved entries as dirty */
+			if (istate->fsmonitor_dirty->bit_size > istate->cache_nr)
+				BUG("fsmonitor_dirty has more entries than the index (%"PRIuMAX" > %u)",
+				    (uintmax_t)istate->fsmonitor_dirty->bit_size, istate->cache_nr);
 			ewah_each_bit(istate->fsmonitor_dirty, fsmonitor_ewah_callback, istate);
 
 			/* Now mark the untracked cache for fsmonitor usage */
diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index c20ae9e..52659bb 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl
@@ -1541,7 +1541,7 @@
 		for (@{$hunk[$ix]{DISPLAY}}) {
 			print;
 		}
-		print colored $prompt_color,
+		print colored $prompt_color, "(", ($ix+1), "/$num) ",
 			sprintf(__($patch_update_prompt_modes{$patch_mode}{$hunk[$ix]{TYPE}}), $other);
 
 		my $line = prompt_single_character;
diff --git a/git-compat-util.h b/git-compat-util.h
index aab5536..d0dd9c0 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -77,7 +77,7 @@
 #endif
 /*
  * ARRAY_SIZE - get the number of elements in a visible array
- *  <at> x: the array whose size you want.
+ * @x: the array whose size you want.
  *
  * This does not work on pointers, or arrays declared as [], or
  * function parameters.  With correct compiler support, such usage
@@ -344,6 +344,7 @@
 #define PRItime PRIuMAX
 #define parse_timestamp strtoumax
 #define TIME_MAX UINTMAX_MAX
+#define TIME_MIN 0
 
 #ifndef PATH_SEP
 #define PATH_SEP ':'
@@ -822,9 +823,6 @@
 int git_atexit(void (*handler)(void));
 #endif
 
-typedef void (*try_to_free_t)(size_t);
-try_to_free_t set_try_to_free_routine(try_to_free_t);
-
 static inline size_t st_add(size_t a, size_t b)
 {
 	if (unsigned_add_overflows(a, b))
@@ -1098,10 +1096,10 @@
 	return 0;
 }
 
+void git_stable_qsort(void *base, size_t nmemb, size_t size,
+		      int(*compar)(const void *, const void *));
 #ifdef INTERNAL_QSORT
-void git_qsort(void *base, size_t nmemb, size_t size,
-	       int(*compar)(const void *, const void *));
-#define qsort git_qsort
+#define qsort git_stable_qsort
 #endif
 
 #define QSORT(base, n, compar) sane_qsort((base), (n), sizeof(*(base)), compar)
@@ -1112,6 +1110,9 @@
 		qsort(base, nmemb, size, compar);
 }
 
+#define STABLE_QSORT(base, n, compar) \
+	git_stable_qsort((base), (n), sizeof(*(base)), compar)
+
 #ifndef HAVE_ISO_QSORT_S
 int git_qsort_s(void *base, size_t nmemb, size_t size,
 		int (*compar)(const void *, const void *, void *), void *ctx);
@@ -1316,4 +1317,42 @@
  */
 #include "banned.h"
 
+/*
+ * container_of - Get the address of an object containing a field.
+ *
+ * @ptr: pointer to the field.
+ * @type: type of the object.
+ * @member: name of the field within the object.
+ */
+#define container_of(ptr, type, member) \
+	((type *) ((char *)(ptr) - offsetof(type, member)))
+
+/*
+ * helper function for `container_of_or_null' to avoid multiple
+ * evaluation of @ptr
+ */
+static inline void *container_of_or_null_offset(void *ptr, size_t offset)
+{
+	return ptr ? (char *)ptr - offset : NULL;
+}
+
+/*
+ * like `container_of', but allows returned value to be NULL
+ */
+#define container_of_or_null(ptr, type, member) \
+	(type *)container_of_or_null_offset(ptr, offsetof(type, member))
+
+/*
+ * like offsetof(), but takes a pointer to a a variable of type which
+ * contains @member, instead of a specified type.
+ * @ptr is subject to multiple evaluation since we can't rely on __typeof__
+ * everywhere.
+ */
+#if defined(__GNUC__) /* clang sets this, too */
+#define OFFSETOF_VAR(ptr, member) offsetof(__typeof__(*ptr), member)
+#else /* !__GNUC__ */
+#define OFFSETOF_VAR(ptr, member) \
+	((uintptr_t)&(ptr)->member - (uintptr_t)(ptr))
+#endif /* !__GNUC__ */
+
 #endif
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index 5c5afa2..fea7964 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -83,6 +83,20 @@
 	finish_ident COMMITTER
 }
 
+if test -z "$FILTER_BRANCH_SQUELCH_WARNING$GIT_TEST_DISALLOW_ABBREVIATED_OPTIONS"
+then
+	cat <<EOF
+WARNING: git-filter-branch has a glut of gotchas generating mangled history
+	 rewrites.  Hit Ctrl-C before proceeding to abort, then use an
+	 alternative filtering tool such as 'git filter-repo'
+	 (https://github.com/newren/git-filter-repo/) instead.  See the
+	 filter-branch manual page for more details; to squelch this warning,
+	 set FILTER_BRANCH_SQUELCH_WARNING=1.
+EOF
+	sleep 10
+	printf "Proceeding with filter-branch...\n\n"
+fi
+
 USAGE="[--setup <command>] [--subdirectory-filter <directory>] [--env-filter <command>]
 	[--tree-filter <command>] [--index-filter <command>]
 	[--parent-filter <command>] [--msg-filter <command>]
diff --git a/git-gui/README.md b/git-gui/README.md
new file mode 100644
index 0000000..5ce2122
--- /dev/null
+++ b/git-gui/README.md
@@ -0,0 +1,174 @@
+# Git GUI - A graphical user interface for Git
+
+Git GUI allows you to use the [Git source control management
+tools](https://git-scm.com/) via a GUI. This includes staging, committing,
+adding, pushing, etc. It can also be used as a blame viewer, a tree browser,
+and a citool (make exactly one commit before exiting and returning to shell).
+More details about Git GUI can be found in its manual page by either running
+`man git-gui`, or by visiting the [online manual
+page](https://git-scm.com/docs/git-gui).
+
+Git GUI was initially written by Shawn O. Pearce, and is distributed with the
+standard Git installation.
+
+# Building and installing
+
+You need to have the following dependencies installed before you begin:
+
+- Git
+- Tcl
+- Tk
+- wish
+- Gitk (needed for browsing history)
+- msgfmt
+
+Most of Git GUI is written in Tcl, so there is no compilation involved. Still,
+some things do need to be done (mostly some substitutions), so you do need to
+"build" it.
+
+You can build Git GUI using:
+
+```
+make
+```
+
+And then install it using:
+
+```
+make install
+```
+
+You probably need to have root/admin permissions to install.
+
+# Contributing
+
+The project is currently maintained by Pratyush Yadav over at
+https://github.com/prati0100/git-gui. Even though the project is hosted at
+GitHub, the development does not happen over GitHub Issues and Pull Requests.
+Instead, an email based workflow is used. The Git mailing list
+[git@vger.kernel.org](mailto:git@vger.kernel.org) is where the patches are
+discussed and reviewed.
+
+More information about the Git mailing list and instructions to subscribe can
+be found [here](https://git.wiki.kernel.org/index.php/GitCommunity).
+
+## Sending your changes
+
+Since the development happens over email, you need to send in your commits in
+text format. Commits can be converted to emails via the two tools provided by
+Git: `git-send-email` and `git-format-patch`.
+
+You can use `git-format-patch` to generate patches in mbox format from your
+commits that can then be sent via email. Let's say you are working on a branch
+called 'foo' that was created on top of 'master'. You can run:
+
+```
+git format-patch -o output_dir master..foo
+```
+
+to convert all the extra commits in 'foo' into a set of patches saved in the
+folder `output_dir`.
+
+If you are sending multiple patches, it is recommended to include a cover
+letter. A cover letter is an email explaining in brief what the series is
+supposed to do. A cover letter template can be generated by passing
+`--cover-letter` to `git-format-patch`.
+
+After you send your patches, you might get a review suggesting some changes.
+Make those changes, and re-send your patch(es) in reply to the first patch of
+your initial version. Also please mention the version of the patch. This can be
+done by passing `-v X` to `git-format-patch`, where 'X' is the version number
+of the patch(es).
+
+### Using git-send-email
+
+You can use `git-send-email` to send patches generated via `git-format-patch`.
+While you can directly send patches via `git-send-email`, it is recommended
+that you first use `git-format-patch` to generate the emails, audit them, and
+then send them via `git-send-email`.
+
+A pretty good guide to configuring and using `git-send-email` can be found
+[here](https://www.freedesktop.org/wiki/Software/PulseAudio/HowToUseGitSendEmail/)
+
+### Using your email client
+
+If your email client supports sending mbox format emails, you can use
+`git-format-patch` to get an mbox file for each commit, and then send them. If
+there is more than one patch in the series, then all patches after the first
+patch (or the cover letter) need to be sent as replies to the first.
+`git-send-email` does this by default.
+
+### Using GitGitGadget
+
+Since some people prefer a GitHub pull request based workflow, they can use
+[GitGitGadget](https://gitgitgadget.github.io/) to send in patches. The tool
+was originally written for sending patches to the Git project, but it now also
+supports sending patches for git-gui.
+
+Instructions for using GitGitGadget to send git-gui patches, courtesy of
+Johannes Schindelin:
+
+If you don't already have a fork of the [git/git](https://github.com/git/git)
+repo, you need to make one. Then clone your fork:
+
+```
+git clone https://github.com/<your-username>/git
+```
+
+Then add GitGitGadget as a remote:
+
+```
+git remote add gitgitgadget https://github.com/gitgitgadget/git
+```
+
+Then fetch the git-gui branch:
+
+```
+git fetch gitgitgadget git-gui/master
+```
+
+Then create a new branch based on git-gui/master:
+
+```
+git checkout -b <your-branch-name> git-gui/master
+```
+
+Make whatever commits you need to, push them to your fork, and then head over
+to https://github.com/gitgitgadget/git/pulls and open a Pull Request targeting
+git-gui/master.
+
+GitGitGadget will welcome you with a (hopefully) helpful message.
+
+## Signing off
+
+You need to sign off your commits before sending them to the list. You can do
+that by passing the `-s` option to `git-commit`. You can also use the "Sign
+Off" option in Git GUI.
+
+A sign-off is a simple 'Signed-off-by: A U Thor \<author@example.com\>' line at
+the end of the commit message, after your explanation of the commit.
+
+A sign-off means that you are legally allowed to send the code, and it serves
+as a certificate of origin. More information can be found at
+[developercertificate.org](https://developercertificate.org/).
+
+## Responding to review comments
+
+It is quite likely your patches will get review comments. Those comments are
+sent on the Git mailing list as replies to your patch, and you will usually be
+Cc'ed in those replies.
+
+You are expected to respond by either explaining your code further to convince
+the reviewer what you are doing is correct, or acknowledge the comments and
+re-send the patches with those comments addressed.
+
+Some tips for those not familiar with communication on a mailing list:
+
+- Use only plain text emails. No HTML at all.
+- Wrap lines at around 75 characters.
+- Do not send attachments. If you do need to send some files, consider using a
+  hosting service, and paste the link in your email.
+- Do not [top post](http://www.idallen.com/topposting.html).
+- Always "reply all". Keep all correspondents and the list in Cc. If you reply
+  directly to a reviewer, and not Cc the list, other people would not be able
+  to chime in.
diff --git a/git-gui/git-gui.sh b/git-gui/git-gui.sh
index 6de74ce..0d21f56 100755
--- a/git-gui/git-gui.sh
+++ b/git-gui/git-gui.sh
@@ -1340,6 +1340,7 @@
 set PARENT {}
 set MERGE_HEAD [list]
 set commit_type {}
+set commit_type_is_amend 0
 set empty_tree {}
 set current_branch {}
 set is_detached 0
@@ -1347,8 +1348,9 @@
 set is_3way_diff 0
 set is_submodule_diff 0
 set is_conflict_diff 0
-set selected_commit_type new
 set diff_empty_count 0
+set last_revert {}
+set last_revert_enc {}
 
 set nullid "0000000000000000000000000000000000000000"
 set nullid2 "0000000000000000000000000000000000000001"
@@ -1434,7 +1436,7 @@
 }
 
 proc force_amend {} {
-	global selected_commit_type
+	global commit_type_is_amend
 	global HEAD PARENT MERGE_HEAD commit_type
 
 	repository_state newType newHEAD newMERGE_HEAD
@@ -1443,7 +1445,7 @@
 	set MERGE_HEAD $newMERGE_HEAD
 	set commit_type $newType
 
-	set selected_commit_type amend
+	set commit_type_is_amend 1
 	do_select_commit_type
 }
 
@@ -2494,7 +2496,7 @@
 
 proc toggle_or_diff {mode w args} {
 	global file_states file_lists current_diff_path ui_index ui_workdir
-	global last_clicked selected_paths
+	global last_clicked selected_paths file_lists_last_clicked
 
 	if {$mode eq "click"} {
 		foreach {x y} $args break
@@ -2551,6 +2553,8 @@
 	$ui_index tag remove in_sel 0.0 end
 	$ui_workdir tag remove in_sel 0.0 end
 
+	set file_lists_last_clicked($w) $path
+
 	# Determine the state of the file
 	if {[info exists file_states($path)]} {
 		set state [lindex $file_states($path) 0]
@@ -2664,6 +2668,32 @@
 	}
 }
 
+proc focus_widget {widget} {
+	global file_lists last_clicked selected_paths
+	global file_lists_last_clicked
+
+	if {[llength $file_lists($widget)] > 0} {
+		set path $file_lists_last_clicked($widget)
+		set index [lsearch -sorted -exact $file_lists($widget) $path]
+		if {$index < 0} {
+			set index 0
+			set path [lindex $file_lists($widget) $index]
+		}
+
+		focus $widget
+		set last_clicked [list $widget [expr $index + 1]]
+		array unset selected_paths
+		set selected_paths($path) 1
+		show_diff $path $widget
+	}
+}
+
+proc toggle_commit_type {} {
+	global commit_type_is_amend
+	set commit_type_is_amend [expr !$commit_type_is_amend]
+	do_select_commit_type
+}
+
 ######################################################################
 ##
 ## ui construction
@@ -2706,10 +2736,18 @@
 }
 
 if {[is_Windows]} {
+	# Use /git-bash.exe if available
+	set normalized [file normalize $::argv0]
+	regsub "/mingw../libexec/git-core/git-gui$" \
+		$normalized "/git-bash.exe" cmdLine
+	if {$cmdLine != $normalized && [file exists $cmdLine]} {
+		set cmdLine [list "Git Bash" $cmdLine &]
+	} else {
+		set cmdLine [list "Git Bash" bash --login -l &]
+	}
 	.mbar.repository add command \
 		-label [mc "Git Bash"] \
-		-command {eval exec [auto_execok start] \
-					  [list "Git Bash" bash --login -l &]}
+		-command {eval exec [auto_execok start] $cmdLine}
 }
 
 if {[is_Windows] || ![is_bare]} {
@@ -2852,19 +2890,11 @@
 	menu .mbar.commit
 
 	if {![is_enabled nocommit]} {
-		.mbar.commit add radiobutton \
-			-label [mc "New Commit"] \
-			-command do_select_commit_type \
-			-variable selected_commit_type \
-			-value new
-		lappend disable_on_lock \
-			[list .mbar.commit entryconf [.mbar.commit index last] -state]
-
-		.mbar.commit add radiobutton \
+		.mbar.commit add checkbutton \
 			-label [mc "Amend Last Commit"] \
-			-command do_select_commit_type \
-			-variable selected_commit_type \
-			-value amend
+			-accelerator $M1T-E \
+			-variable commit_type_is_amend \
+			-command do_select_commit_type
 		lappend disable_on_lock \
 			[list .mbar.commit entryconf [.mbar.commit index last] -state]
 
@@ -3030,8 +3060,23 @@
 wm protocol . WM_DELETE_WINDOW do_quit
 bind all <$M1B-Key-q> do_quit
 bind all <$M1B-Key-Q> do_quit
-bind all <$M1B-Key-w> {destroy [winfo toplevel %W]}
-bind all <$M1B-Key-W> {destroy [winfo toplevel %W]}
+
+set m1b_w_script {
+	set toplvl_win [winfo toplevel %W]
+
+	# If we are destroying the main window, we should call do_quit to take
+	# care of cleanup before exiting the program.
+	if {$toplvl_win eq "."} {
+		do_quit
+	} else {
+		destroy $toplvl_win
+	}
+}
+
+bind all <$M1B-Key-w> $m1b_w_script
+bind all <$M1B-Key-W> $m1b_w_script
+
+unset m1b_w_script
 
 set subcommand_args {}
 proc usage {} {
@@ -3337,18 +3382,10 @@
 set ui_coml .vpane.lower.commarea.buffer.header.l
 
 if {![is_enabled nocommit]} {
-	${NS}::radiobutton .vpane.lower.commarea.buffer.header.new \
-		-text [mc "New Commit"] \
-		-command do_select_commit_type \
-		-variable selected_commit_type \
-		-value new
-	lappend disable_on_lock \
-		[list .vpane.lower.commarea.buffer.header.new conf -state]
-	${NS}::radiobutton .vpane.lower.commarea.buffer.header.amend \
+	${NS}::checkbutton .vpane.lower.commarea.buffer.header.amend \
 		-text [mc "Amend Last Commit"] \
-		-command do_select_commit_type \
-		-variable selected_commit_type \
-		-value amend
+		-variable commit_type_is_amend \
+		-command do_select_commit_type
 	lappend disable_on_lock \
 		[list .vpane.lower.commarea.buffer.header.amend conf -state]
 }
@@ -3373,7 +3410,6 @@
 
 if {![is_enabled nocommit]} {
 	pack .vpane.lower.commarea.buffer.header.amend -side right
-	pack .vpane.lower.commarea.buffer.header.new -side right
 }
 
 textframe .vpane.lower.commarea.buffer.frame
@@ -3387,10 +3423,16 @@
 	-relief sunken \
 	-width $repo_config(gui.commitmsgwidth) -height 9 -wrap none \
 	-font font_diff \
+	-xscrollcommand {.vpane.lower.commarea.buffer.frame.sbx set} \
 	-yscrollcommand {.vpane.lower.commarea.buffer.frame.sby set}
+${NS}::scrollbar .vpane.lower.commarea.buffer.frame.sbx \
+	-orient horizontal \
+	-command [list $ui_comm xview]
 ${NS}::scrollbar .vpane.lower.commarea.buffer.frame.sby \
+	-orient vertical \
 	-command [list $ui_comm yview]
 
+pack .vpane.lower.commarea.buffer.frame.sbx -side bottom -fill x
 pack .vpane.lower.commarea.buffer.frame.sby -side right -fill y
 pack $ui_comm -side left -fill y
 pack .vpane.lower.commarea.buffer.header -side top -fill x
@@ -3547,6 +3589,9 @@
 $ui_diff tag conf d< \
 	-foreground orange \
 	-font font_diffbold
+$ui_diff tag conf d| \
+	-foreground orange \
+	-font font_diffbold
 $ui_diff tag conf d= \
 	-foreground orange \
 	-font font_diffbold
@@ -3606,16 +3651,32 @@
 menu $ctxm -tearoff 0
 $ctxm add command \
 	-label [mc "Apply/Reverse Hunk"] \
-	-command {apply_hunk $cursorX $cursorY}
+	-command {apply_or_revert_hunk $cursorX $cursorY 0}
 set ui_diff_applyhunk [$ctxm index last]
 lappend diff_actions [list $ctxm entryconf $ui_diff_applyhunk -state]
 $ctxm add command \
 	-label [mc "Apply/Reverse Line"] \
-	-command {apply_range_or_line $cursorX $cursorY; do_rescan}
+	-command {apply_or_revert_range_or_line $cursorX $cursorY 0; do_rescan}
 set ui_diff_applyline [$ctxm index last]
 lappend diff_actions [list $ctxm entryconf $ui_diff_applyline -state]
 $ctxm add separator
 $ctxm add command \
+	-label [mc "Revert Hunk"] \
+	-command {apply_or_revert_hunk $cursorX $cursorY 1}
+set ui_diff_reverthunk [$ctxm index last]
+lappend diff_actions [list $ctxm entryconf $ui_diff_reverthunk -state]
+$ctxm add command \
+	-label [mc "Revert Line"] \
+	-command {apply_or_revert_range_or_line $cursorX $cursorY 1; do_rescan}
+set ui_diff_revertline [$ctxm index last]
+lappend diff_actions [list $ctxm entryconf $ui_diff_revertline -state]
+$ctxm add command \
+	-label [mc "Undo Last Revert"] \
+	-command {undo_last_revert; do_rescan}
+set ui_diff_undorevert [$ctxm index last]
+lappend diff_actions [list $ctxm entryconf $ui_diff_undorevert -state]
+$ctxm add separator
+$ctxm add command \
 	-label [mc "Show Less Context"] \
 	-command show_less_context
 lappend diff_actions [list $ctxm entryconf [$ctxm index last] -state]
@@ -3693,7 +3754,7 @@
 }
 
 proc popup_diff_menu {ctxm ctxmmg ctxmsm x y X Y} {
-	global current_diff_path file_states
+	global current_diff_path file_states last_revert
 	set ::cursorX $x
 	set ::cursorY $y
 	if {[info exists file_states($current_diff_path)]} {
@@ -3707,19 +3768,28 @@
 		tk_popup $ctxmsm $X $Y
 	} else {
 		set has_range [expr {[$::ui_diff tag nextrange sel 0.0] != {}}]
+		set u [mc "Undo Last Revert"]
 		if {$::ui_index eq $::current_diff_side} {
 			set l [mc "Unstage Hunk From Commit"]
+			set h [mc "Revert Hunk"]
+
 			if {$has_range} {
 				set t [mc "Unstage Lines From Commit"]
+				set r [mc "Revert Lines"]
 			} else {
 				set t [mc "Unstage Line From Commit"]
+				set r [mc "Revert Line"]
 			}
 		} else {
 			set l [mc "Stage Hunk For Commit"]
+			set h [mc "Revert Hunk"]
+
 			if {$has_range} {
 				set t [mc "Stage Lines For Commit"]
+				set r [mc "Revert Lines"]
 			} else {
 				set t [mc "Stage Line For Commit"]
+				set r [mc "Revert Line"]
 			}
 		}
 		if {$::is_3way_diff
@@ -3730,11 +3800,35 @@
 			|| [string match {T?} $state]
 			|| [has_textconv $current_diff_path]} {
 			set s disabled
+			set revert_state disabled
 		} else {
 			set s normal
+
+			# Only allow reverting changes in the working tree. If
+			# the user wants to revert changes in the index, they
+			# need to unstage those first.
+			if {$::ui_workdir eq $::current_diff_side} {
+				set revert_state normal
+			} else {
+				set revert_state disabled
+			}
 		}
+
+		if {$last_revert eq {}} {
+			set undo_state disabled
+		} else {
+			set undo_state normal
+		}
+
 		$ctxm entryconf $::ui_diff_applyhunk -state $s -label $l
 		$ctxm entryconf $::ui_diff_applyline -state $s -label $t
+		$ctxm entryconf $::ui_diff_revertline -state $revert_state \
+			-label $r
+		$ctxm entryconf $::ui_diff_reverthunk -state $revert_state \
+			-label $h
+		$ctxm entryconf $::ui_diff_undorevert -state $undo_state \
+			-label $u
+
 		tk_popup $ctxm $X $Y
 	}
 }
@@ -3861,6 +3955,8 @@
 bind .   <$M1B-Key-J> do_revert_selection
 bind .   <$M1B-Key-i> do_add_all
 bind .   <$M1B-Key-I> do_add_all
+bind .   <$M1B-Key-e> toggle_commit_type
+bind .   <$M1B-Key-E> toggle_commit_type
 bind .   <$M1B-Key-minus> {show_less_context;break}
 bind .   <$M1B-Key-KP_Subtract> {show_less_context;break}
 bind .   <$M1B-Key-equal> {show_more_context;break}
@@ -3877,6 +3973,14 @@
 }
 unset i
 
+bind .   <Alt-Key-1> {focus_widget $::ui_workdir}
+bind .   <Alt-Key-2> {focus_widget $::ui_index}
+bind .   <Alt-Key-3> {focus $::ui_diff}
+bind .   <Alt-Key-4> {focus $::ui_comm}
+
+set file_lists_last_clicked($ui_index) {}
+set file_lists_last_clicked($ui_workdir) {}
+
 set file_lists($ui_index) [list]
 set file_lists($ui_workdir) [list]
 
diff --git a/git-gui/lib/checkout_op.tcl b/git-gui/lib/checkout_op.tcl
index 9e7412c..a522829 100644
--- a/git-gui/lib/checkout_op.tcl
+++ b/git-gui/lib/checkout_op.tcl
@@ -389,7 +389,7 @@
 }
 
 method _after_readtree {} {
-	global selected_commit_type commit_type HEAD MERGE_HEAD PARENT
+	global commit_type HEAD MERGE_HEAD PARENT
 	global current_branch is_detached
 	global ui_comm
 
@@ -490,12 +490,12 @@
 	#    amend mode our file lists are accurate and we can avoid
 	#    the rescan.
 	#
-	global selected_commit_type commit_type HEAD MERGE_HEAD PARENT
+	global commit_type_is_amend commit_type HEAD MERGE_HEAD PARENT
 	global ui_comm
 
 	unlock_index
 	set name [_name $this]
-	set selected_commit_type new
+	set commit_type_is_amend 0
 	if {[string match amend* $commit_type]} {
 		$ui_comm delete 0.0 end
 		$ui_comm edit reset
diff --git a/git-gui/lib/commit.tcl b/git-gui/lib/commit.tcl
index 75ea965..b516aa2 100644
--- a/git-gui/lib/commit.tcl
+++ b/git-gui/lib/commit.tcl
@@ -333,7 +333,7 @@
 proc commit_committree {fd_wt curHEAD msg_p} {
 	global HEAD PARENT MERGE_HEAD commit_type commit_author
 	global current_branch
-	global ui_comm selected_commit_type
+	global ui_comm commit_type_is_amend
 	global file_states selected_paths rescan_active
 	global repo_config
 	global env
@@ -467,8 +467,8 @@
 
 	# -- Update in memory status
 	#
-	set selected_commit_type new
 	set commit_type normal
+	set commit_type_is_amend 0
 	set HEAD $cmt_id
 	set PARENT $cmt_id
 	set MERGE_HEAD [list]
diff --git a/git-gui/lib/diff.tcl b/git-gui/lib/diff.tcl
index 68c4a6c..871ad48 100644
--- a/git-gui/lib/diff.tcl
+++ b/git-gui/lib/diff.tcl
@@ -55,7 +55,7 @@
 
 proc force_diff_encoding {enc} {
 	global current_diff_path
-	
+
 	if {$current_diff_path ne {}} {
 		force_path_encoding $current_diff_path $enc
 		reshow_diff
@@ -270,19 +270,6 @@
 	}
 }
 
-proc get_conflict_marker_size {path} {
-	set size 7
-	catch {
-		set fd_rc [eval [list git_read check-attr "conflict-marker-size" -- $path]]
-		set ret [gets $fd_rc line]
-		close $fd_rc
-		if {$ret > 0} {
-			regexp {.*: conflict-marker-size: (\d+)$} $line line size
-		}
-	}
-	return $size
-}
-
 proc start_show_diff {cont_info {add_opts {}}} {
 	global file_states file_lists
 	global is_3way_diff is_submodule_diff diff_active repo_config
@@ -298,7 +285,7 @@
 	set is_submodule_diff 0
 	set diff_active 1
 	set current_diff_header {}
-	set conflict_size [get_conflict_marker_size $path]
+	set conflict_size [gitattr $path conflict-marker-size 7]
 
 	set cmd [list]
 	if {$w eq $ui_index} {
@@ -360,6 +347,10 @@
 	}
 
 	set ::current_diff_inheader 1
+	# Detect pre-image lines of the diff3 conflict-style. They are just
+	# '++' lines which is not bijective. Thus, we need to maintain a state
+	# across lines.
+	set ::conflict_in_pre_image 0
 	fconfigure $fd \
 		-blocking 0 \
 		-encoding [get_path_encoding $path] \
@@ -462,11 +453,23 @@
 			{--} {set tags d_--}
 			{++} {
 				set regexp [string map [list %conflict_size $conflict_size]\
-								{^\+\+([<>=]){%conflict_size}(?: |$)}]
+								{^\+\+([<>=|]){%conflict_size}(?: |$)}]
 				if {[regexp $regexp $line _g op]} {
 					set is_conflict_diff 1
 					set line [string replace $line 0 1 {  }]
 					set tags d$op
+
+					# The ||| conflict-marker marks the start of the pre-image.
+					# All those lines are also prefixed with '++'. Thus we need
+					# to maintain this state.
+					set ::conflict_in_pre_image [expr {$op eq {|}}]
+				} elseif {$::conflict_in_pre_image} {
+					# This is a pre-image line. It is the one which both sides
+					# are based on. As it has also the '++' line start, it is
+					# normally shown as 'added'. Invert this to '--' to make
+					# it a 'removed' line.
+					set line [string replace $line 0 1 {--}]
+					set tags d_--
 				} else {
 					set tags d_++
 				}
@@ -567,24 +570,31 @@
 	}
 }
 
-proc apply_hunk {x y} {
+proc apply_or_revert_hunk {x y revert} {
 	global current_diff_path current_diff_header current_diff_side
-	global ui_diff ui_index file_states
+	global ui_diff ui_index file_states last_revert last_revert_enc
 
 	if {$current_diff_path eq {} || $current_diff_header eq {}} return
 	if {![lock_index apply_hunk]} return
 
-	set apply_cmd {apply --cached --whitespace=nowarn}
+	set apply_cmd {apply --whitespace=nowarn}
 	set mi [lindex $file_states($current_diff_path) 0]
 	if {$current_diff_side eq $ui_index} {
 		set failed_msg [mc "Failed to unstage selected hunk."]
-		lappend apply_cmd --reverse
+		lappend apply_cmd --reverse --cached
 		if {[string index $mi 0] ne {M}} {
 			unlock_index
 			return
 		}
 	} else {
-		set failed_msg [mc "Failed to stage selected hunk."]
+		if {$revert} {
+			set failed_msg [mc "Failed to revert selected hunk."]
+			lappend apply_cmd --reverse
+		} else {
+			set failed_msg [mc "Failed to stage selected hunk."]
+			lappend apply_cmd --cached
+		}
+
 		if {[string index $mi 1] ne {M}} {
 			unlock_index
 			return
@@ -603,29 +613,40 @@
 		set e_lno end
 	}
 
+	set wholepatch "$current_diff_header[$ui_diff get $s_lno $e_lno]"
+
 	if {[catch {
 		set enc [get_path_encoding $current_diff_path]
 		set p [eval git_write $apply_cmd]
 		fconfigure $p -translation binary -encoding $enc
-		puts -nonewline $p $current_diff_header
-		puts -nonewline $p [$ui_diff get $s_lno $e_lno]
+		puts -nonewline $p $wholepatch
 		close $p} err]} {
 		error_popup "$failed_msg\n\n$err"
 		unlock_index
 		return
 	}
 
+	if {$revert} {
+		# Save a copy of this patch for undoing reverts.
+		set last_revert $wholepatch
+		set last_revert_enc $enc
+	}
+
 	$ui_diff conf -state normal
 	$ui_diff delete $s_lno $e_lno
 	$ui_diff conf -state disabled
 
+	# Check if the hunk was the last one in the file.
 	if {[$ui_diff get 1.0 end] eq "\n"} {
 		set o _
 	} else {
 		set o ?
 	}
 
-	if {$current_diff_side eq $ui_index} {
+	# Update the status flags.
+	if {$revert} {
+		set mi [string index $mi 0]$o
+	} elseif {$current_diff_side eq $ui_index} {
 		set mi ${o}M
 	} elseif {[string index $mi 0] eq {_}} {
 		set mi M$o
@@ -640,9 +661,9 @@
 	}
 }
 
-proc apply_range_or_line {x y} {
+proc apply_or_revert_range_or_line {x y revert} {
 	global current_diff_path current_diff_header current_diff_side
-	global ui_diff ui_index file_states
+	global ui_diff ui_index file_states last_revert
 
 	set selected [$ui_diff tag nextrange sel 0.0]
 
@@ -660,19 +681,27 @@
 	if {$current_diff_path eq {} || $current_diff_header eq {}} return
 	if {![lock_index apply_hunk]} return
 
-	set apply_cmd {apply --cached --whitespace=nowarn}
+	set apply_cmd {apply --whitespace=nowarn}
 	set mi [lindex $file_states($current_diff_path) 0]
 	if {$current_diff_side eq $ui_index} {
 		set failed_msg [mc "Failed to unstage selected line."]
 		set to_context {+}
-		lappend apply_cmd --reverse
+		lappend apply_cmd --reverse --cached
 		if {[string index $mi 0] ne {M}} {
 			unlock_index
 			return
 		}
 	} else {
-		set failed_msg [mc "Failed to stage selected line."]
-		set to_context {-}
+		if {$revert} {
+			set failed_msg [mc "Failed to revert selected line."]
+			set to_context {+}
+			lappend apply_cmd --reverse
+		} else {
+			set failed_msg [mc "Failed to stage selected line."]
+			set to_context {-}
+			lappend apply_cmd --cached
+		}
+
 		if {[string index $mi 1] ne {M}} {
 			unlock_index
 			return
@@ -830,7 +859,47 @@
 		puts -nonewline $p $wholepatch
 		close $p} err]} {
 		error_popup "$failed_msg\n\n$err"
+		unlock_index
+		return
 	}
 
+	if {$revert} {
+		# Save a copy of this patch for undoing reverts.
+		set last_revert $current_diff_header$wholepatch
+		set last_revert_enc $enc
+	}
+
+	unlock_index
+}
+
+# Undo the last line/hunk reverted. When hunks and lines are reverted, a copy
+# of the diff applied is saved. Re-apply that diff to undo the revert.
+#
+# Right now, we only use a single variable to hold the copy, and not a
+# stack/deque for simplicity, so multiple undos are not possible. Maybe this
+# can be added if the need for something like this is felt in the future.
+proc undo_last_revert {} {
+	global last_revert current_diff_path current_diff_header
+	global last_revert_enc
+
+	if {$last_revert eq {}} return
+	if {![lock_index apply_hunk]} return
+
+	set apply_cmd {apply --whitespace=nowarn}
+	set failed_msg [mc "Failed to undo last revert."]
+
+	if {[catch {
+		set enc $last_revert_enc
+		set p [eval git_write $apply_cmd]
+		fconfigure $p -translation binary -encoding $enc
+		puts -nonewline $p $last_revert
+		close $p} err]} {
+		error_popup "$failed_msg\n\n$err"
+		unlock_index
+		return
+	}
+
+	set last_revert {}
+
 	unlock_index
 }
diff --git a/git-gui/lib/index.tcl b/git-gui/lib/index.tcl
index b588db1..e07b7a3 100644
--- a/git-gui/lib/index.tcl
+++ b/git-gui/lib/index.tcl
@@ -466,19 +466,19 @@
 }
 
 proc do_select_commit_type {} {
-	global commit_type selected_commit_type
+	global commit_type commit_type_is_amend
 
-	if {$selected_commit_type eq {new}
+	if {$commit_type_is_amend == 0
 		&& [string match amend* $commit_type]} {
 		create_new_commit
-	} elseif {$selected_commit_type eq {amend}
+	} elseif {$commit_type_is_amend == 1
 		&& ![string match amend* $commit_type]} {
 		load_last_commit
 
 		# The amend request was rejected...
 		#
 		if {![string match amend* $commit_type]} {
-			set selected_commit_type new
+			set commit_type_is_amend 0
 		}
 	}
 }
diff --git a/git-gui/po/ja.po b/git-gui/po/ja.po
index 208651c..2f61153 100644
--- a/git-gui/po/ja.po
+++ b/git-gui/po/ja.po
@@ -4,14 +4,15 @@
 #
 # しらいし ななこ <nanako3@bluebottle.com>, 2007.
 # Satoshi Yasushima <s.yasushima@gmail.com>, 2016.
+# KIDANI Akito <a.kid.1985@gmail.com>, 2019.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: git-gui\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2016-05-27 17:52+0900\n"
-"PO-Revision-Date: 2016-06-22 12:50+0900\n"
-"Last-Translator: Satoshi Yasushima <s.yasushima@gmail.com>\n"
+"PO-Revision-Date: 2019-10-13 23:20+0900\n"
+"Last-Translator: KIDANI Akito <a.kid.1985@gmail.com>\n"
 "Language-Team: Japanese\n"
 "Language: ja\n"
 "MIME-Version: 1.0\n"
@@ -661,7 +662,7 @@
 #: lib/merge.tcl:108
 #, tcl-format
 msgid "%s of %s"
-msgstr "%s の %s ブランチ"
+msgstr "%2$s の %1$s ブランチ"
 
 #: lib/merge.tcl:122
 #, tcl-format
@@ -956,7 +957,7 @@
 #: lib/checkout_op.tcl:85
 #, tcl-format
 msgid "Fetching %s from %s"
-msgstr "%s から %s をフェッチしています"
+msgstr "%2$s から %1$s をフェッチしています"
 
 #: lib/checkout_op.tcl:133
 #, tcl-format
diff --git a/git-legacy-stash.sh b/git-legacy-stash.sh
index f60e9b3..07ad4a5 100755
--- a/git-legacy-stash.sh
+++ b/git-legacy-stash.sh
@@ -370,7 +370,7 @@
 			git diff-index -p --cached --binary HEAD -- "$@" |
 			git apply --index -R
 		else
-			git reset --hard -q
+			git reset --hard -q --no-recurse-submodules
 		fi
 
 		if test "$keep_index" = "t" && test -n "$i_tree"
diff --git a/git-p4.py b/git-p4.py
index 3991e7d..60c73b6 100755
--- a/git-p4.py
+++ b/git-p4.py
@@ -1160,13 +1160,11 @@
             if contentsSize <= gitConfigInt('git-p4.largeFileCompressedThreshold'):
                 return False
             contentTempFile = self.generateTempFile(contents)
-            compressedContentFile = tempfile.NamedTemporaryFile(prefix='git-p4-large-file', delete=False)
-            zf = zipfile.ZipFile(compressedContentFile.name, mode='w')
-            zf.write(contentTempFile, compress_type=zipfile.ZIP_DEFLATED)
-            zf.close()
-            compressedContentsSize = zf.infolist()[0].compress_size
+            compressedContentFile = tempfile.NamedTemporaryFile(prefix='git-p4-large-file', delete=True)
+            with zipfile.ZipFile(compressedContentFile, mode='w') as zf:
+                zf.write(contentTempFile, compress_type=zipfile.ZIP_DEFLATED)
+                compressedContentsSize = zf.infolist()[0].compress_size
             os.remove(contentTempFile)
-            os.remove(compressedContentFile.name)
             if compressedContentsSize > gitConfigInt('git-p4.largeFileCompressedThreshold'):
                 return True
         return False
@@ -3525,8 +3523,9 @@
         self.updateOptionDict(details)
         try:
             self.commit(details, self.extractFilesFromCommit(details), self.branch)
-        except IOError:
+        except IOError as err:
             print("IO error with git fast-import. Is your git version recent enough?")
+            print("IO error details: {}".format(err))
             print(self.gitError.read())
 
     def openStreams(self):
diff --git a/git.c b/git.c
index c1ee712..ce6ab0e 100644
--- a/git.c
+++ b/git.c
@@ -369,8 +369,7 @@
 			die(_("alias '%s' changes environment variables.\n"
 			      "You can use '!git' in the alias to do this"),
 			    alias_command);
-		memmove(new_argv - option_count, new_argv,
-				count * sizeof(char *));
+		MOVE_ARRAY(new_argv - option_count, new_argv, count);
 		new_argv -= option_count;
 
 		if (count < 1)
@@ -385,7 +384,7 @@
 
 		REALLOC_ARRAY(new_argv, count + *argcp);
 		/* insert after command name */
-		memcpy(new_argv + count, *argv + 1, sizeof(char *) * *argcp);
+		COPY_ARRAY(new_argv + count, *argv + 1, *argcp);
 
 		trace2_cmd_alias(alias_command, new_argv);
 		trace2_cmd_list_config();
diff --git a/gitk-git/gitk b/gitk-git/gitk
index a14d7a1..abe4805 100755
--- a/gitk-git/gitk
+++ b/gitk-git/gitk
@@ -3404,6 +3404,8 @@
 }
 image create bitmap reficon-H -background black -foreground "#00ff00" \
     -data $rectdata -maskdata $rectmask
+image create bitmap reficon-R -background black -foreground "#ffddaa" \
+    -data $rectdata -maskdata $rectmask
 image create bitmap reficon-o -background black -foreground "#ddddff" \
     -data $rectdata -maskdata $rectmask
 
@@ -7016,6 +7018,7 @@
 
 # append some text to the ctext widget, and make any SHA1 ID
 # that we know about be a clickable link.
+# Also look for URLs of the form "http[s]://..." and make them web links.
 proc appendwithlinks {text tags} {
     global ctext linknum curview
 
@@ -7032,6 +7035,18 @@
 	setlink $linkid link$linknum
 	incr linknum
     }
+    set wlinks [regexp -indices -all -inline -line \
+		    {https?://[^[:space:]]+} $text]
+    foreach l $wlinks {
+	set s2 [lindex $l 0]
+	set e2 [lindex $l 1]
+	set url [string range $text $s2 $e2]
+	incr e2
+	$ctext tag delete link$linknum
+	$ctext tag add link$linknum "$start + $s2 c" "$start + $e2 c"
+	setwlink $url link$linknum
+	incr linknum
+    }
 }
 
 proc setlink {id lk} {
@@ -7064,6 +7079,18 @@
     }
 }
 
+proc setwlink {url lk} {
+    global ctext
+    global linkfgcolor
+    global web_browser
+
+    if {$web_browser eq {}} return
+    $ctext tag conf $lk -foreground $linkfgcolor -underline 1
+    $ctext tag bind $lk <1> [list browseweb $url]
+    $ctext tag bind $lk <Enter> {linkcursor %W 1}
+    $ctext tag bind $lk <Leave> {linkcursor %W -1}
+}
+
 proc appendshortlink {id {pre {}} {post {}}} {
     global ctext linknum
 
@@ -7098,6 +7125,16 @@
     }
 }
 
+proc browseweb {url} {
+    global web_browser
+
+    if {$web_browser eq {}} return
+    # Use eval here in case $web_browser is a command plus some arguments
+    if {[catch {eval exec $web_browser [list $url] &} err]} {
+	error_popup "[mc "Error starting web browser:"] $err"
+    }
+}
+
 proc viewnextline {dir} {
     global canv linespc
 
@@ -8191,11 +8228,11 @@
 	} else {
 	    $ctext insert end "$line\n" filesep
 	}
-    } elseif {![string compare -length 3 "  >" $line]} {
+    } elseif {$currdiffsubmod != "" && ![string compare -length 3 "  >" $line]} {
 	set $currdiffsubmod ""
 	set line [encoding convertfrom $diffencoding $line]
 	$ctext insert end "$line\n" dresult
-    } elseif {![string compare -length 3 "  <" $line]} {
+    } elseif {$currdiffsubmod != "" && ![string compare -length 3 "  <" $line]} {
 	set $currdiffsubmod ""
 	set line [encoding convertfrom $diffencoding $line]
 	$ctext insert end "$line\n" d0
@@ -10022,6 +10059,7 @@
     set n [lindex $ref 0]
     switch -- [lindex $ref 1] {
 	"H" {selbyid $headids($n)}
+	"R" {selbyid $headids($n)}
 	"T" {selbyid $tagids($n)}
 	"o" {selbyid $otherrefids($n)}
     }
@@ -10051,7 +10089,11 @@
     foreach n [array names headids] {
 	if {[string match $reflistfilter $n]} {
 	    if {[commitinview $headids($n) $curview]} {
-		lappend refs [list $n H]
+		if {[string match "remotes/*" $n]} {
+		    lappend refs [list $n R]
+		} else {
+		    lappend refs [list $n H]
+		}
 	    } else {
 		interestedin $headids($n) {run refill_reflist}
 	    }
@@ -11488,7 +11530,7 @@
 proc prefspage_general {notebook} {
     global NS maxwidth maxgraphpct showneartags showlocalchanges
     global tabstop limitdiffs autoselect autosellen extdifftool perfile_attrs
-    global hideremotes want_ttk have_ttk maxrefs
+    global hideremotes want_ttk have_ttk maxrefs web_browser
 
     set page [create_prefs_page $notebook.general]
 
@@ -11539,6 +11581,13 @@
     pack configure $page.extdifff.l -padx 10
     grid x $page.extdifff $page.extdifft -sticky ew
 
+    ${NS}::entry $page.webbrowser -textvariable web_browser
+    ${NS}::frame $page.webbrowserf
+    ${NS}::label $page.webbrowserf.l -text [mc "Web browser" ]
+    pack $page.webbrowserf.l -side left
+    pack configure $page.webbrowserf.l -padx 10
+    grid x $page.webbrowserf $page.webbrowser -sticky ew
+
     ${NS}::label $page.lgen -text [mc "General options"]
     grid $page.lgen - -sticky w -pady 10
     ${NS}::checkbutton $page.want_ttk -variable want_ttk \
@@ -12310,6 +12359,7 @@
     set bgcolor SystemWindow
     set fgcolor SystemWindowText
     set selectbgcolor SystemHighlight
+    set web_browser "cmd /c start"
 } else {
     set uicolor grey85
     set uifgcolor black
@@ -12317,6 +12367,11 @@
     set bgcolor white
     set fgcolor black
     set selectbgcolor gray85
+    if {[tk windowingsystem] eq "aqua"} {
+	set web_browser "open"
+    } else {
+	set web_browser "xdg-open"
+    }
 }
 set diffcolors {red "#00a000" blue}
 set diffcontext 3
@@ -12390,6 +12445,7 @@
     filesepbgcolor filesepfgcolor linehoverbgcolor linehoverfgcolor
     linehoveroutlinecolor mainheadcirclecolor workingfilescirclecolor
     indexcirclecolor circlecolors linkfgcolor circleoutlinecolor
+    web_browser
 }
 foreach var $config_variables {
     config_init_trace $var
diff --git a/gitk-git/po/zh_cn.po b/gitk-git/po/zh_cn.po
new file mode 100644
index 0000000..17b7f89
--- /dev/null
+++ b/gitk-git/po/zh_cn.po
@@ -0,0 +1,1367 @@
+# Translation of gitk to Simplified Chinese.
+#
+# Translators:
+# YanKe <imyanke@163.com>, 2017
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Git Chinese Localization Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-02-28 23:11+0800\n"
+"PO-Revision-Date: 2017-03-11 02:27+0800\n"
+"Last-Translator: YanKe <imyanke@163.com>\n"
+"Language-Team: Chinese\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_CN\n"
+
+#: gitk:140
+msgid "Couldn't get list of unmerged files:"
+msgstr "不能获取未合并文件列表:"
+
+#: gitk:212 gitk:2403
+msgid "Color words"
+msgstr "着色显示差异"
+
+#: gitk:217 gitk:2403 gitk:8249 gitk:8282
+msgid "Markup words"
+msgstr "标记显示差异"
+
+#: gitk:324
+msgid "Error parsing revisions:"
+msgstr "解析版本错误:"
+
+#: gitk:380
+msgid "Error executing --argscmd command:"
+msgstr "运行 --argscmd命令出错"
+
+#: gitk:393
+msgid "No files selected: --merge specified but no files are unmerged."
+msgstr "没有选中文件:--指定merge参数但没有未合并的文件。"
+
+#: gitk:396
+msgid ""
+"No files selected: --merge specified but no unmerged files are within file "
+"limit."
+msgstr "没有选中文件:--指定merge参数但没有未合并的文件在文件中"
+
+#: gitk:418 gitk:566
+msgid "Error executing git log:"
+msgstr "执行git log命令出错:"
+
+#: gitk:436 gitk:582
+msgid "Reading"
+msgstr "读取中"
+
+#: gitk:496 gitk:4549
+msgid "Reading commits..."
+msgstr "提交记录读取中..."
+
+#: gitk:499 gitk:1641 gitk:4552
+msgid "No commits selected"
+msgstr "未选中任何提交"
+
+#: gitk:1449 gitk:4069 gitk:12583
+msgid "Command line"
+msgstr "命令行"
+
+#: gitk:1515
+msgid "Can't parse git log output:"
+msgstr "不能解析git log输出:"
+
+#: gitk:1744
+msgid "No commit information available"
+msgstr "无可用提交信息"
+
+#: gitk:1907 gitk:1936 gitk:4339 gitk:9789 gitk:11388 gitk:11668
+msgid "OK"
+msgstr "确定"
+
+#: gitk:1938 gitk:4341 gitk:9225 gitk:9304 gitk:9434 gitk:9520 gitk:9791
+#: gitk:11389 gitk:11669
+msgid "Cancel"
+msgstr "取消"
+
+#: gitk:2087
+msgid "&Update"
+msgstr "更新"
+
+#: gitk:2088
+msgid "&Reload"
+msgstr "重新加载"
+
+#: gitk:2089
+msgid "Reread re&ferences"
+msgstr "重新读取引用"
+
+#: gitk:2090
+msgid "&List references"
+msgstr "列出引用(分支以及tag)"
+
+#: gitk:2092
+msgid "Start git &gui"
+msgstr "启动git gui客户端"
+
+#: gitk:2094
+msgid "&Quit"
+msgstr "退出"
+
+#: gitk:2086
+msgid "&File"
+msgstr "文件"
+
+#: gitk:2098
+msgid "&Preferences"
+msgstr "偏好设置"
+
+#: gitk:2097
+msgid "&Edit"
+msgstr "编辑"
+
+#: gitk:2102
+msgid "&New view..."
+msgstr "新视图..."
+
+#: gitk:2103
+msgid "&Edit view..."
+msgstr "编辑视图..."
+
+#: gitk:2104
+msgid "&Delete view"
+msgstr "删除视图"
+
+#: gitk:2106
+msgid "&All files"
+msgstr "所有文件"
+
+#: gitk:2101
+msgid "&View"
+msgstr "视图"
+
+#: gitk:2111 gitk:2121
+msgid "&About gitk"
+msgstr "关于gitk"
+
+#: gitk:2112 gitk:2126
+msgid "&Key bindings"
+msgstr "快捷键"
+
+#: gitk:2110 gitk:2125
+msgid "&Help"
+msgstr "帮助"
+
+#: gitk:2203 gitk:8681
+msgid "SHA1 ID:"
+msgstr "SHA1 ID:"
+
+#: gitk:2247
+msgid "Row"
+msgstr "行"
+
+#: gitk:2285
+msgid "Find"
+msgstr "查找"
+
+#: gitk:2313
+msgid "commit"
+msgstr "提交"
+
+#: gitk:2317 gitk:2319 gitk:4711 gitk:4734 gitk:4758 gitk:6779 gitk:6851
+#: gitk:6936
+msgid "containing:"
+msgstr "包含:"
+
+#: gitk:2320 gitk:3550 gitk:3555 gitk:4787
+msgid "touching paths:"
+msgstr "影响路径:"
+
+#: gitk:2321 gitk:4801
+msgid "adding/removing string:"
+msgstr "增加/删除字符串:"
+
+#: gitk:2322 gitk:4803
+msgid "changing lines matching:"
+msgstr "改变行匹配:"
+
+#: gitk:2331 gitk:2333 gitk:4790
+msgid "Exact"
+msgstr "精确匹配"
+
+#: gitk:2333 gitk:4878 gitk:6747
+msgid "IgnCase"
+msgstr "忽略大小写"
+
+#: gitk:2333 gitk:4760 gitk:4876 gitk:6743
+msgid "Regexp"
+msgstr "正则"
+
+#: gitk:2335 gitk:2336 gitk:4898 gitk:4928 gitk:4935 gitk:6872 gitk:6940
+msgid "All fields"
+msgstr "所有字段"
+
+#: gitk:2336 gitk:4895 gitk:4928 gitk:6810
+msgid "Headline"
+msgstr "标题"
+
+#: gitk:2337 gitk:4895 gitk:6810 gitk:6940 gitk:7413
+msgid "Comments"
+msgstr "提交注释"
+
+#: gitk:2337 gitk:4895 gitk:4900 gitk:4935 gitk:6810 gitk:7348 gitk:8859
+#: gitk:8874
+msgid "Author"
+msgstr "作者"
+
+#: gitk:2337 gitk:4895 gitk:6810 gitk:7350
+msgid "Committer"
+msgstr "提交者"
+
+#: gitk:2371
+msgid "Search"
+msgstr "搜索"
+
+#: gitk:2379
+msgid "Diff"
+msgstr "差异"
+
+#: gitk:2381
+msgid "Old version"
+msgstr "老版本"
+
+#: gitk:2383
+msgid "New version"
+msgstr "新版本"
+
+#: gitk:2386
+msgid "Lines of context"
+msgstr "Diff上下文显示行数"
+
+#: gitk:2396
+msgid "Ignore space change"
+msgstr "忽略空格修改"
+
+#: gitk:2400 gitk:2402 gitk:7983 gitk:8235
+msgid "Line diff"
+msgstr "按行显示差异"
+
+#: gitk:2467
+msgid "Patch"
+msgstr "补丁"
+
+#: gitk:2469
+msgid "Tree"
+msgstr "树"
+
+#: gitk:2639 gitk:2660
+msgid "Diff this -> selected"
+msgstr "比较从当前提交到选中提交的差异"
+
+#: gitk:2640 gitk:2661
+msgid "Diff selected -> this"
+msgstr "比较从选中提交到当前提交的差异"
+
+#: gitk:2641 gitk:2662
+msgid "Make patch"
+msgstr "制作补丁"
+
+#: gitk:2642 gitk:9283
+msgid "Create tag"
+msgstr "创建tag"
+
+#: gitk:2643
+msgid "Copy commit summary"
+msgstr "复制提交摘要"
+
+#: gitk:2644 gitk:9414
+msgid "Write commit to file"
+msgstr "写入提交到文件"
+
+#: gitk:2645
+msgid "Create new branch"
+msgstr "创建新分支"
+
+#: gitk:2646
+msgid "Cherry-pick this commit"
+msgstr "在此提交运用补丁(cherry-pick)命令"
+
+#: gitk:2647
+msgid "Reset HEAD branch to here"
+msgstr "将分支头(HEAD)重置到此处"
+
+#: gitk:2648
+msgid "Mark this commit"
+msgstr "标记此提交"
+
+#: gitk:2649
+msgid "Return to mark"
+msgstr "返回到标记"
+
+#: gitk:2650
+msgid "Find descendant of this and mark"
+msgstr "查找本次提交的子提交并标记"
+
+#: gitk:2651
+msgid "Compare with marked commit"
+msgstr "和已标记的提交作比较"
+
+#: gitk:2652 gitk:2663
+msgid "Diff this -> marked commit"
+msgstr "比较从当前提交到已标记提交的差异"
+
+#: gitk:2653 gitk:2664
+msgid "Diff marked commit -> this"
+msgstr "比较从已标记提交到当前提交的差异"
+
+#: gitk:2654
+msgid "Revert this commit"
+msgstr "撤销(revert)此提交"
+
+#: gitk:2670
+msgid "Check out this branch"
+msgstr "检出(checkout)此分支"
+
+#: gitk:2671
+msgid "Rename this branch"
+msgstr "重命名(Rename)此分支"
+
+#: gitk:2672
+msgid "Remove this branch"
+msgstr "删除(Remove)此分支"
+
+#: gitk:2673
+msgid "Copy branch name"
+msgstr "复制分支名称"
+
+#: gitk:2680
+msgid "Highlight this too"
+msgstr "高亮此处"
+
+#: gitk:2681
+msgid "Highlight this only"
+msgstr "只高亮此处"
+
+#: gitk:2682
+msgid "External diff"
+msgstr "外部diff"
+
+#: gitk:2683
+msgid "Blame parent commit"
+msgstr "Blame父提交"
+
+#: gitk:2684
+msgid "Copy path"
+msgstr "复制路径"
+
+#: gitk:2691
+msgid "Show origin of this line"
+msgstr "显示此行原始提交"
+
+#: gitk:2692
+msgid "Run git gui blame on this line"
+msgstr "在此行运行git gui客户端的blame"
+
+#: gitk:3036
+msgid "About gitk"
+msgstr "关于gitk"
+
+#: gitk:3038
+msgid ""
+"\n"
+"Gitk - a commit viewer for git\n"
+"\n"
+"Copyright © 2005-2016 Paul Mackerras\n"
+"\n"
+"Use and redistribute under the terms of the GNU General Public License"
+msgstr "\nGitk — 一个git的提交查看器\n\n© 2005-2016 Paul Mackerras\n\n在GNU许可证下使用以及分发"
+
+#: gitk:3046 gitk:3113 gitk:10004
+msgid "Close"
+msgstr "关闭"
+
+#: gitk:3067
+msgid "Gitk key bindings"
+msgstr "Gitk快捷键"
+
+#: gitk:3070
+msgid "Gitk key bindings:"
+msgstr "Gitk快捷键:"
+
+#: gitk:3072
+#, tcl-format
+msgid "<%s-Q>\t\tQuit"
+msgstr "<%s-Q>\t\t退出"
+
+#: gitk:3073
+#, tcl-format
+msgid "<%s-W>\t\tClose window"
+msgstr "<%s-W>\t\t关闭窗口"
+
+#: gitk:3074
+msgid "<Home>\t\tMove to first commit"
+msgstr "<Home>\t\t移动到第一次提交"
+
+#: gitk:3075
+msgid "<End>\t\tMove to last commit"
+msgstr "<End>\t\t移动到最后一次提交"
+
+#: gitk:3076
+msgid "<Up>, p, k\tMove up one commit"
+msgstr "<Up>, p, k\t移动到上一次提交"
+
+#: gitk:3077
+msgid "<Down>, n, j\tMove down one commit"
+msgstr "<Down>, n, j\t移动到下一次提交"
+
+#: gitk:3078
+msgid "<Left>, z, h\tGo back in history list"
+msgstr "<Left>, z, h\t历史列表的上一项"
+
+#: gitk:3079
+msgid "<Right>, x, l\tGo forward in history list"
+msgstr "<Right>, x, l\t历史列表的下一项"
+
+#: gitk:3080
+#, tcl-format
+msgid "<%s-n>\tGo to n-th parent of current commit in history list"
+msgstr "<%s-n>\t在历史列表中前往本次提交的第n个父提交"
+
+#: gitk:3081
+msgid "<PageUp>\tMove up one page in commit list"
+msgstr "<PageUp>\t上一页提交列表"
+
+#: gitk:3082
+msgid "<PageDown>\tMove down one page in commit list"
+msgstr "<PageDown>\t下一页提交列表"
+
+#: gitk:3083
+#, tcl-format
+msgid "<%s-Home>\tScroll to top of commit list"
+msgstr "<%s-Home>\t滚动到提交列表顶部"
+
+#: gitk:3084
+#, tcl-format
+msgid "<%s-End>\tScroll to bottom of commit list"
+msgstr "<%s-End>\t滚动到提交列表底部"
+
+#: gitk:3085
+#, tcl-format
+msgid "<%s-Up>\tScroll commit list up one line"
+msgstr "<%s-Up>\t向上滚动一行提交列表"
+
+#: gitk:3086
+#, tcl-format
+msgid "<%s-Down>\tScroll commit list down one line"
+msgstr "<%s-Down>\t向下滚动一行提交列表"
+
+#: gitk:3087
+#, tcl-format
+msgid "<%s-PageUp>\tScroll commit list up one page"
+msgstr "<%s-PageUp>\t向上滚动一页提交列表"
+
+#: gitk:3088
+#, tcl-format
+msgid "<%s-PageDown>\tScroll commit list down one page"
+msgstr "<%s-PageDown>\t向下滚动一页提交列表"
+
+#: gitk:3089
+msgid "<Shift-Up>\tFind backwards (upwards, later commits)"
+msgstr "<Shift-Up>\t向后查找(向上的,更晚的提交)"
+
+#: gitk:3090
+msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)"
+msgstr "<Shift-Down>\t向前查找(向下的,更早的提交)"
+
+#: gitk:3091
+msgid "<Delete>, b\tScroll diff view up one page"
+msgstr "<Delete>, b\t向上滚动diff视图一页"
+
+#: gitk:3092
+msgid "<Backspace>\tScroll diff view up one page"
+msgstr "<Backspace>\t向上滚动diff视图一页"
+
+#: gitk:3093
+msgid "<Space>\t\tScroll diff view down one page"
+msgstr "<Space>\t\t向下滚动diff视图一页"
+
+#: gitk:3094
+msgid "u\t\tScroll diff view up 18 lines"
+msgstr "u\t\t向上滚动diff视图18行"
+
+#: gitk:3095
+msgid "d\t\tScroll diff view down 18 lines"
+msgstr "d\t\t向下滚动diff视图18行"
+
+#: gitk:3096
+#, tcl-format
+msgid "<%s-F>\t\tFind"
+msgstr "<%s-F>\t\t查找"
+
+#: gitk:3097
+#, tcl-format
+msgid "<%s-G>\t\tMove to next find hit"
+msgstr "<%s-G>\t\t移动到下一次查找命中"
+
+#: gitk:3098
+msgid "<Return>\tMove to next find hit"
+msgstr "<Return>\t\t移动到下一次查找命中"
+
+#: gitk:3099
+msgid "g\t\tGo to commit"
+msgstr "g\t\t转到提交"
+
+#: gitk:3100
+msgid "/\t\tFocus the search box"
+msgstr "/\t\t选中搜索框"
+
+#: gitk:3101
+msgid "?\t\tMove to previous find hit"
+msgstr "?\t\t移动到上一次查找命中"
+
+#: gitk:3102
+msgid "f\t\tScroll diff view to next file"
+msgstr "f\t\t滚动diff视图到下一个文件"
+
+#: gitk:3103
+#, tcl-format
+msgid "<%s-S>\t\tSearch for next hit in diff view"
+msgstr "<%s-S>\t\t在diff视图中查找下一此命中"
+
+#: gitk:3104
+#, tcl-format
+msgid "<%s-R>\t\tSearch for previous hit in diff view"
+msgstr "<%s-R>\t\t在diff视图中查找上一次命中"
+
+#: gitk:3105
+#, tcl-format
+msgid "<%s-KP+>\tIncrease font size"
+msgstr "<%s-KP+>\t增大字体大小"
+
+#: gitk:3106
+#, tcl-format
+msgid "<%s-plus>\tIncrease font size"
+msgstr "<%s-plus>\t增大字体大小"
+
+#: gitk:3107
+#, tcl-format
+msgid "<%s-KP->\tDecrease font size"
+msgstr "<%s-KP->\t减小字体大小"
+
+#: gitk:3108
+#, tcl-format
+msgid "<%s-minus>\tDecrease font size"
+msgstr "<%s-minus>\t减小字体大小"
+
+#: gitk:3109
+msgid "<F5>\t\tUpdate"
+msgstr "<F5>\t\t更新"
+
+#: gitk:3574 gitk:3583
+#, tcl-format
+msgid "Error creating temporary directory %s:"
+msgstr "创建临时目录出错%s:"
+
+#: gitk:3596
+#, tcl-format
+msgid "Error getting \"%s\" from %s:"
+msgstr "从%s获取\"%s\"出错:"
+
+#: gitk:3659
+msgid "command failed:"
+msgstr "执行命令失败:"
+
+#: gitk:3808
+msgid "No such commit"
+msgstr "无此提交"
+
+#: gitk:3822
+msgid "git gui blame: command failed:"
+msgstr "git gui blame:执行命令失败:"
+
+#: gitk:3853
+#, tcl-format
+msgid "Couldn't read merge head: %s"
+msgstr "不能读取合并头(merge head):%s"
+
+#: gitk:3861
+#, tcl-format
+msgid "Error reading index: %s"
+msgstr "读取索引出错:%s"
+
+#: gitk:3886
+#, tcl-format
+msgid "Couldn't start git blame: %s"
+msgstr "不能执行git blame:%s"
+
+#: gitk:3889 gitk:6778
+msgid "Searching"
+msgstr "搜索中"
+
+#: gitk:3921
+#, tcl-format
+msgid "Error running git blame: %s"
+msgstr "运行git blame出错:%s"
+
+#: gitk:3949
+#, tcl-format
+msgid "That line comes from commit %s,  which is not in this view"
+msgstr "此行来自提交%s,不在此视图中"
+
+#: gitk:3963
+msgid "External diff viewer failed:"
+msgstr "外部diff查看器失败:"
+
+#: gitk:4067
+msgid "All files"
+msgstr "所有文件"
+
+#: gitk:4091
+msgid "View"
+msgstr "视图"
+
+#: gitk:4094
+msgid "Gitk view definition"
+msgstr "Gitk视图定义"
+
+#: gitk:4098
+msgid "Remember this view"
+msgstr "记住此视图"
+
+#: gitk:4099
+msgid "References (space separated list):"
+msgstr "引用(空格切分的列表):"
+
+#: gitk:4100
+msgid "Branches & tags:"
+msgstr "分支和tags"
+
+#: gitk:4101
+msgid "All refs"
+msgstr "所有引用"
+
+#: gitk:4102
+msgid "All (local) branches"
+msgstr "所有(本地)分支"
+
+#: gitk:4103
+msgid "All tags"
+msgstr "所有tag"
+
+#: gitk:4104
+msgid "All remote-tracking branches"
+msgstr "所有远程跟踪分支"
+
+#: gitk:4105
+msgid "Commit Info (regular expressions):"
+msgstr "提交信息 (正则表达式):"
+
+#: gitk:4106
+msgid "Author:"
+msgstr "作者:"
+
+#: gitk:4107
+msgid "Committer:"
+msgstr "提交者:"
+
+#: gitk:4108
+msgid "Commit Message:"
+msgstr "提交信息:"
+
+#: gitk:4109
+msgid "Matches all Commit Info criteria"
+msgstr "匹配所有提交信息标准"
+
+#: gitk:4110
+msgid "Matches no Commit Info criteria"
+msgstr "匹配无提交信息标准"
+
+#: gitk:4111
+msgid "Changes to Files:"
+msgstr "文件修改列表:"
+
+#: gitk:4112
+msgid "Fixed String"
+msgstr "固定字符串"
+
+#: gitk:4113
+msgid "Regular Expression"
+msgstr "正则表达式:"
+
+#: gitk:4114
+msgid "Search string:"
+msgstr "搜索字符串:"
+
+#: gitk:4115
+msgid ""
+"Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 "
+"15:27:38\"):"
+msgstr "提交日期 (\"2星期之前\", \"2009-03-17 15:27:38\", \"5月 17, 2009 15:27:38\"):"
+
+#: gitk:4116
+msgid "Since:"
+msgstr "自:"
+
+#: gitk:4117
+msgid "Until:"
+msgstr "到:"
+
+#: gitk:4118
+msgid "Limit and/or skip a number of revisions (positive integer):"
+msgstr "限制 且/或 跳过一定数量的版本(正整数):"
+
+#: gitk:4119
+msgid "Number to show:"
+msgstr "显示数量:"
+
+#: gitk:4120
+msgid "Number to skip:"
+msgstr "跳过数量:"
+
+#: gitk:4121
+msgid "Miscellaneous options:"
+msgstr "其他选项:"
+
+#: gitk:4122
+msgid "Strictly sort by date"
+msgstr "严格按日期整理"
+
+#: gitk:4123
+msgid "Mark branch sides"
+msgstr "标记分支边界"
+
+#: gitk:4124
+msgid "Limit to first parent"
+msgstr "限制到第一个父提交"
+
+#: gitk:4125
+msgid "Simple history"
+msgstr "简易历史"
+
+#: gitk:4126
+msgid "Additional arguments to git log:"
+msgstr "git log命令的额外参数:"
+
+#: gitk:4127
+msgid "Enter files and directories to include, one per line:"
+msgstr "输入文件和文件夹来引用,每行一个:"
+
+#: gitk:4128
+msgid "Command to generate more commits to include:"
+msgstr "命令产生更多的提交来引用:"
+
+#: gitk:4252
+msgid "Gitk: edit view"
+msgstr "Gitk: 编辑视图"
+
+#: gitk:4260
+msgid "-- criteria for selecting revisions"
+msgstr "-- 用来选择版本的规则"
+
+#: gitk:4265
+msgid "View Name"
+msgstr "视图名称"
+
+#: gitk:4340
+msgid "Apply (F5)"
+msgstr "应用(F5)"
+
+#: gitk:4378
+msgid "Error in commit selection arguments:"
+msgstr "提交选择参数错误:"
+
+#: gitk:4433 gitk:4486 gitk:4948 gitk:4962 gitk:6232 gitk:12524 gitk:12525
+msgid "None"
+msgstr "无"
+
+#: gitk:5045 gitk:5050
+msgid "Descendant"
+msgstr "子提交"
+
+#: gitk:5046
+msgid "Not descendant"
+msgstr "非子提交"
+
+#: gitk:5053 gitk:5058
+msgid "Ancestor"
+msgstr "父提交"
+
+#: gitk:5054
+msgid "Not ancestor"
+msgstr "非父提交"
+
+#: gitk:5348
+msgid "Local changes checked in to index but not committed"
+msgstr "已添加到索引但未提交的修改"
+
+#: gitk:5384
+msgid "Local uncommitted changes, not checked in to index"
+msgstr "未添加到索引且未提交的修改"
+
+#: gitk:7158
+msgid "and many more"
+msgstr "更多"
+
+#: gitk:7161
+msgid "many"
+msgstr "很多"
+
+#: gitk:7352
+msgid "Tags:"
+msgstr "Tags:"
+
+#: gitk:7369 gitk:7375 gitk:8854
+msgid "Parent"
+msgstr "父节点"
+
+#: gitk:7380
+msgid "Child"
+msgstr "子节点"
+
+#: gitk:7389
+msgid "Branch"
+msgstr "分支"
+
+#: gitk:7392
+msgid "Follows"
+msgstr "之后的tag"
+
+#: gitk:7395
+msgid "Precedes"
+msgstr "之前的tag"
+
+#: gitk:7990
+#, tcl-format
+msgid "Error getting diffs: %s"
+msgstr "获取差异错误:%s"
+
+#: gitk:8679
+msgid "Goto:"
+msgstr "转到:"
+
+#: gitk:8700
+#, tcl-format
+msgid "Short SHA1 id %s is ambiguous"
+msgstr "短格式的SHA1提交号%s不明确、有歧义"
+
+#: gitk:8707
+#, tcl-format
+msgid "Revision %s is not known"
+msgstr "版本%s未知"
+
+#: gitk:8717
+#, tcl-format
+msgid "SHA1 id %s is not known"
+msgstr "提交号(SHA1 id)%s未知"
+
+#: gitk:8719
+#, tcl-format
+msgid "Revision %s is not in the current view"
+msgstr "版本%s不在当前视图中"
+
+#: gitk:8861 gitk:8876
+msgid "Date"
+msgstr "日期"
+
+#: gitk:8864
+msgid "Children"
+msgstr "子节点"
+
+#: gitk:8927
+#, tcl-format
+msgid "Reset %s branch to here"
+msgstr "重置分支%s到此处"
+
+#: gitk:8929
+msgid "Detached head: can't reset"
+msgstr "分离的头(head):不能重置(reset)"
+
+#: gitk:9034 gitk:9040
+msgid "Skipping merge commit "
+msgstr "跳过合并提交"
+
+#: gitk:9049 gitk:9054
+msgid "Error getting patch ID for "
+msgstr "获取补丁ID出错"
+
+#: gitk:9050 gitk:9055
+msgid " - stopping\n"
+msgstr " — 停止中\n"
+
+#: gitk:9060 gitk:9063 gitk:9071 gitk:9085 gitk:9094
+msgid "Commit "
+msgstr "提交"
+
+#: gitk:9064
+msgid ""
+" is the same patch as\n"
+"       "
+msgstr " 是相同的补丁(patch)\n       "
+
+#: gitk:9072
+msgid ""
+" differs from\n"
+"       "
+msgstr " 差异来自\n       "
+
+#: gitk:9074
+msgid ""
+"Diff of commits:\n"
+"\n"
+msgstr "提交的差异(Diff):\n\n"
+
+#: gitk:9086 gitk:9095
+#, tcl-format
+msgid " has %s children - stopping\n"
+msgstr "有%s子节点 — 停止中\n"
+
+#: gitk:9114
+#, tcl-format
+msgid "Error writing commit to file: %s"
+msgstr "写入提交到文件出错:%s"
+
+#: gitk:9120
+#, tcl-format
+msgid "Error diffing commits: %s"
+msgstr "比较提交差异出错:%s"
+
+#: gitk:9166
+msgid "Top"
+msgstr "顶部"
+
+#: gitk:9167
+msgid "From"
+msgstr "从"
+
+#: gitk:9172
+msgid "To"
+msgstr "到"
+
+#: gitk:9196
+msgid "Generate patch"
+msgstr "生成补丁(patch)"
+
+#: gitk:9198
+msgid "From:"
+msgstr "从:"
+
+#: gitk:9207
+msgid "To:"
+msgstr "到:"
+
+#: gitk:9216
+msgid "Reverse"
+msgstr "反向(Reverse)"
+
+#: gitk:9218 gitk:9428
+msgid "Output file:"
+msgstr "输出文件:"
+
+#: gitk:9224
+msgid "Generate"
+msgstr "生成"
+
+#: gitk:9262
+msgid "Error creating patch:"
+msgstr "创建补丁(patch)出错:"
+
+#: gitk:9285 gitk:9416 gitk:9504
+msgid "ID:"
+msgstr "ID:"
+
+#: gitk:9294
+msgid "Tag name:"
+msgstr "Tag名称:"
+
+#: gitk:9297
+msgid "Tag message is optional"
+msgstr "Tag信息是可选的"
+
+#: gitk:9299
+msgid "Tag message:"
+msgstr "Tag信息:"
+
+#: gitk:9303 gitk:9474
+msgid "Create"
+msgstr "创建"
+
+#: gitk:9321
+msgid "No tag name specified"
+msgstr "未指定tag名称"
+
+#: gitk:9325
+#, tcl-format
+msgid "Tag \"%s\" already exists"
+msgstr "Tag\"%s\"已经存在"
+
+#: gitk:9335
+msgid "Error creating tag:"
+msgstr "创建tag出错:"
+
+#: gitk:9425
+msgid "Command:"
+msgstr "命令:"
+
+#: gitk:9433
+msgid "Write"
+msgstr "写入"
+
+#: gitk:9451
+msgid "Error writing commit:"
+msgstr "写入提交出错:"
+
+#: gitk:9473
+msgid "Create branch"
+msgstr "创建分支"
+
+#: gitk:9489
+#, tcl-format
+msgid "Rename branch %s"
+msgstr "重命名分支%s"
+
+#: gitk:9490
+msgid "Rename"
+msgstr "重命名"
+
+#: gitk:9514
+msgid "Name:"
+msgstr "名称:"
+
+#: gitk:9538
+msgid "Please specify a name for the new branch"
+msgstr "请指定新分支的名称"
+
+#: gitk:9543
+#, tcl-format
+msgid "Branch '%s' already exists. Overwrite?"
+msgstr "分支\"%s\"已经存在。覆盖它?"
+
+#: gitk:9587
+msgid "Please specify a new name for the branch"
+msgstr "请重新指定新分支的名称"
+
+#: gitk:9650
+#, tcl-format
+msgid "Commit %s is already included in branch %s -- really re-apply it?"
+msgstr "提交%s已经存在于分支%s。确定重新应用它?"
+
+#: gitk:9655
+msgid "Cherry-picking"
+msgstr "打补丁中(Cherry-picking)"
+
+#: gitk:9664
+#, tcl-format
+msgid ""
+"Cherry-pick failed because of local changes to file '%s'.\n"
+"Please commit, reset or stash your changes and try again."
+msgstr "打补丁(Cherry-pick)失败,因为本地修改了文件\"%s\"。\n请提交(commit)、重置(reset)或暂存(stash)修改后重试。"
+
+#: gitk:9670
+msgid ""
+"Cherry-pick failed because of merge conflict.\n"
+"Do you wish to run git citool to resolve it?"
+msgstr "打补丁(Cherry-pick)失败因为合并冲突。\n你是否希望运行git citool 来解决冲突?"
+
+#: gitk:9686 gitk:9744
+msgid "No changes committed"
+msgstr "无已经提交的修改"
+
+#: gitk:9713
+#, tcl-format
+msgid "Commit %s is not included in branch %s -- really revert it?"
+msgstr "提交%s不包含在分支%s中,确认回滚(revert)它?"
+
+#: gitk:9718
+msgid "Reverting"
+msgstr "回滚中(Reverting)"
+
+#: gitk:9726
+#, tcl-format
+msgid ""
+"Revert failed because of local changes to the following files:%s Please "
+"commit, reset or stash  your changes and try again."
+msgstr "回滚(revert)失败,因为如下的本地文件修改:%s\n请提交(commit)、重置(reset)或者暂存(stash)改变后重试。"
+
+#: gitk:9730
+msgid ""
+"Revert failed because of merge conflict.\n"
+" Do you wish to run git citool to resolve it?"
+msgstr "回滚(revert)失败,因为合并冲突。\n你是否希望运行git citool来解决冲突?"
+
+#: gitk:9773
+msgid "Confirm reset"
+msgstr "确认重置(reset)"
+
+#: gitk:9775
+#, tcl-format
+msgid "Reset branch %s to %s?"
+msgstr "重置(reset)分支%s到%s?"
+
+#: gitk:9777
+msgid "Reset type:"
+msgstr "重置(reset)类型:"
+
+#: gitk:9780
+msgid "Soft: Leave working tree and index untouched"
+msgstr "软性:离开工作树,索引未改变"
+
+#: gitk:9783
+msgid "Mixed: Leave working tree untouched, reset index"
+msgstr "混合:离开工作树(未改变),索引重置"
+
+#: gitk:9786
+msgid ""
+"Hard: Reset working tree and index\n"
+"(discard ALL local changes)"
+msgstr "硬性:重置工作树和索引\n(丢弃所有的本地修改)"
+
+#: gitk:9803
+msgid "Resetting"
+msgstr "重置中(Resetting)"
+
+#: gitk:9876
+#, tcl-format
+msgid "A local branch named %s exists already"
+msgstr "本地分支%s已经存在"
+
+#: gitk:9884
+msgid "Checking out"
+msgstr "检出中(Checking out)"
+
+#: gitk:9943
+msgid "Cannot delete the currently checked-out branch"
+msgstr "不能删除当前检出(checkout)分支"
+
+#: gitk:9949
+#, tcl-format
+msgid ""
+"The commits on branch %s aren't on any other branch.\n"
+"Really delete branch %s?"
+msgstr "在分支%s上的提交不在其他任何分支上。\n确认删除分支%s?"
+
+#: gitk:9980
+#, tcl-format
+msgid "Tags and heads: %s"
+msgstr "Tags和头指针(heads):%s"
+
+#: gitk:9997
+msgid "Filter"
+msgstr "过滤器"
+
+#: gitk:10293
+msgid ""
+"Error reading commit topology information; branch and preceding/following "
+"tag information will be incomplete."
+msgstr "读取提交拓扑信息出错;分支和之前/之后的tag信息将不能完成。"
+
+#: gitk:11270
+msgid "Tag"
+msgstr "标签(Tag)"
+
+#: gitk:11274
+msgid "Id"
+msgstr "Id"
+
+#: gitk:11357
+msgid "Gitk font chooser"
+msgstr "Gitk字体选择"
+
+#: gitk:11374
+msgid "B"
+msgstr "粗体"
+
+#: gitk:11377
+msgid "I"
+msgstr "斜体"
+
+#: gitk:11495
+msgid "Commit list display options"
+msgstr "提交列表展示选项"
+
+#: gitk:11498
+msgid "Maximum graph width (lines)"
+msgstr "最大图宽度(行数)"
+
+#: gitk:11502
+#, no-tcl-format
+msgid "Maximum graph width (% of pane)"
+msgstr "最大图宽度(%窗口百分比)"
+
+#: gitk:11505
+msgid "Show local changes"
+msgstr "显示本地修改"
+
+#: gitk:11508
+msgid "Auto-select SHA1 (length)"
+msgstr "自动选择SHA1(长度)"
+
+#: gitk:11512
+msgid "Hide remote refs"
+msgstr "隐藏远程引用"
+
+#: gitk:11516
+msgid "Diff display options"
+msgstr "差异(Diff)展示选项"
+
+#: gitk:11518
+msgid "Tab spacing"
+msgstr "制表符宽度"
+
+#: gitk:11521
+msgid "Display nearby tags/heads"
+msgstr "显示临近的tags/heads"
+
+#: gitk:11524
+msgid "Maximum # tags/heads to show"
+msgstr "最大tags/heads展示数量"
+
+#: gitk:11527
+msgid "Limit diffs to listed paths"
+msgstr "diff中列出文件限制"
+
+#: gitk:11530
+msgid "Support per-file encodings"
+msgstr "单独文件编码支持"
+
+#: gitk:11536 gitk:11683
+msgid "External diff tool"
+msgstr "外部差异(diff)工具"
+
+#: gitk:11537
+msgid "Choose..."
+msgstr "选择..."
+
+#: gitk:11542
+msgid "General options"
+msgstr "常规选项"
+
+#: gitk:11545
+msgid "Use themed widgets"
+msgstr "使用主题小部件"
+
+#: gitk:11547
+msgid "(change requires restart)"
+msgstr "(需重启生效)"
+
+#: gitk:11549
+msgid "(currently unavailable)"
+msgstr "(当前不可用)"
+
+#: gitk:11560
+msgid "Colors: press to choose"
+msgstr "颜色:点击来选择"
+
+#: gitk:11563
+msgid "Interface"
+msgstr "界面"
+
+#: gitk:11564
+msgid "interface"
+msgstr "界面"
+
+#: gitk:11567
+msgid "Background"
+msgstr "背景"
+
+#: gitk:11568 gitk:11598
+msgid "background"
+msgstr "背景"
+
+#: gitk:11571
+msgid "Foreground"
+msgstr "前景"
+
+#: gitk:11572
+msgid "foreground"
+msgstr "前景"
+
+#: gitk:11575
+msgid "Diff: old lines"
+msgstr "差异(Diff):老代码行"
+
+#: gitk:11576
+msgid "diff old lines"
+msgstr "差异(diff)老代码行"
+
+#: gitk:11580
+msgid "Diff: new lines"
+msgstr "差异(Diff):新代码行"
+
+#: gitk:11581
+msgid "diff new lines"
+msgstr "差异(diff)新代码行"
+
+#: gitk:11585
+msgid "Diff: hunk header"
+msgstr "差异(Diff):补丁片段头信息"
+
+#: gitk:11587
+msgid "diff hunk header"
+msgstr "差异(diff)补丁片段头信息"
+
+#: gitk:11591
+msgid "Marked line bg"
+msgstr "已标记代码行背景"
+
+#: gitk:11593
+msgid "marked line background"
+msgstr "已标记代码行背景"
+
+#: gitk:11597
+msgid "Select bg"
+msgstr "选择背景"
+
+#: gitk:11606
+msgid "Fonts: press to choose"
+msgstr "字体:点击来选择"
+
+#: gitk:11608
+msgid "Main font"
+msgstr "主字体"
+
+#: gitk:11609
+msgid "Diff display font"
+msgstr "差异(Diff)显示字体"
+
+#: gitk:11610
+msgid "User interface font"
+msgstr "用户界面字体"
+
+#: gitk:11632
+msgid "Gitk preferences"
+msgstr "Gitk偏好设置"
+
+#: gitk:11641
+msgid "General"
+msgstr "常规"
+
+#: gitk:11642
+msgid "Colors"
+msgstr "颜色"
+
+#: gitk:11643
+msgid "Fonts"
+msgstr "字体"
+
+#: gitk:11693
+#, tcl-format
+msgid "Gitk: choose color for %s"
+msgstr "Gitk:选择颜色用于%s"
+
+#: gitk:12206
+msgid ""
+"Sorry, gitk cannot run with this version of Tcl/Tk.\n"
+" Gitk requires at least Tcl/Tk 8.4."
+msgstr "对不起,gitk不能运行在当前版本的Tcl/Tk中。\nGitk运行需要最低版本为Tcl/Tk8.4。"
+
+#: gitk:12416
+msgid "Cannot find a git repository here."
+msgstr "在此位置未发现git仓库。"
+
+#: gitk:12463
+#, tcl-format
+msgid "Ambiguous argument '%s': both revision and filename"
+msgstr "不明确有歧义的参数\"%s\":版本和文件名称"
+
+#: gitk:12475
+msgid "Bad arguments to gitk:"
+msgstr "运行gitk参数错误:"
diff --git a/gitweb/static/js/blame_incremental.js b/gitweb/static/js/blame_incremental.js
index db6eb50..e100d82 100644
--- a/gitweb/static/js/blame_incremental.js
+++ b/gitweb/static/js/blame_incremental.js
@@ -484,7 +484,7 @@
 			case 'previous':
 				curCommit.nprevious++;
 				// store only first 'previous' header
-				if (!'previous' in curCommit) {
+				if (!('previous' in curCommit)) {
 					var parts = data.split(' ', 2);
 					curCommit.previous    = parts[0];
 					curCommit.file_parent = unquote(parts[1]);
diff --git a/grep.c b/grep.c
index cd952ef..b7ae5a4 100644
--- a/grep.c
+++ b/grep.c
@@ -16,6 +16,20 @@
 
 static struct grep_opt grep_defaults;
 
+#ifdef USE_LIBPCRE2
+static pcre2_general_context *pcre2_global_context;
+
+static void *pcre2_malloc(PCRE2_SIZE size, MAYBE_UNUSED void *memory_data)
+{
+	return malloc(size);
+}
+
+static void pcre2_free(void *pointer, MAYBE_UNUSED void *memory_data)
+{
+	return free(pointer);
+}
+#endif
+
 static const char *color_grep_slots[] = {
 	[GREP_COLOR_CONTEXT]	    = "context",
 	[GREP_COLOR_FILENAME]	    = "filename",
@@ -150,12 +164,28 @@
  * Initialize one instance of grep_opt and copy the
  * default values from the template we read the configuration
  * information in an earlier call to git_config(grep_config).
+ *
+ * If using PCRE, make sure that the library is configured
+ * to use the same allocator as Git (e.g. nedmalloc on Windows).
+ *
+ * Any allocated memory needs to be released in grep_destroy().
  */
 void grep_init(struct grep_opt *opt, struct repository *repo, const char *prefix)
 {
 	struct grep_opt *def = &grep_defaults;
 	int i;
 
+#if defined(USE_LIBPCRE2)
+	if (!pcre2_global_context)
+		pcre2_global_context = pcre2_general_context_create(
+					pcre2_malloc, pcre2_free, NULL);
+#endif
+
+#ifdef USE_LIBPCRE1
+	pcre_malloc = malloc;
+	pcre_free = free;
+#endif
+
 	memset(opt, 0, sizeof(*opt));
 	opt->repo = repo;
 	opt->prefix = prefix;
@@ -178,6 +208,13 @@
 		color_set(opt->colors[i], def->colors[i]);
 }
 
+void grep_destroy(void)
+{
+#ifdef USE_LIBPCRE2
+	pcre2_general_context_free(pcre2_global_context);
+#endif
+}
+
 static void grep_set_pattern_type_option(enum grep_pattern_type pattern_type, struct grep_opt *opt)
 {
 	/*
@@ -368,31 +405,20 @@
 	return 1;
 }
 
-static int has_null(const char *s, size_t len)
-{
-	/*
-	 * regcomp cannot accept patterns with NULs so when using it
-	 * we consider any pattern containing a NUL fixed.
-	 */
-	if (memchr(s, 0, len))
-		return 1;
-
-	return 0;
-}
-
 #ifdef USE_LIBPCRE1
 static void compile_pcre1_regexp(struct grep_pat *p, const struct grep_opt *opt)
 {
 	const char *error;
 	int erroffset;
 	int options = PCRE_MULTILINE;
+	int study_options = 0;
 
 	if (opt->ignore_case) {
-		if (has_non_ascii(p->pattern))
+		if (!opt->ignore_locale && has_non_ascii(p->pattern))
 			p->pcre1_tables = pcre_maketables();
 		options |= PCRE_CASELESS;
 	}
-	if (is_utf8_locale() && has_non_ascii(p->pattern))
+	if (!opt->ignore_locale && is_utf8_locale() && has_non_ascii(p->pattern))
 		options |= PCRE_UTF8;
 
 	p->pcre1_regexp = pcre_compile(p->pattern, options, &error, &erroffset,
@@ -400,44 +426,31 @@
 	if (!p->pcre1_regexp)
 		compile_regexp_failed(p, error);
 
-	p->pcre1_extra_info = pcre_study(p->pcre1_regexp, GIT_PCRE_STUDY_JIT_COMPILE, &error);
+#if defined(PCRE_CONFIG_JIT) && !defined(NO_LIBPCRE1_JIT)
+	pcre_config(PCRE_CONFIG_JIT, &p->pcre1_jit_on);
+	if (opt->debug)
+		fprintf(stderr, "pcre1_jit_on=%d\n", p->pcre1_jit_on);
+
+	if (p->pcre1_jit_on)
+		study_options = PCRE_STUDY_JIT_COMPILE;
+#endif
+
+	p->pcre1_extra_info = pcre_study(p->pcre1_regexp, study_options, &error);
 	if (!p->pcre1_extra_info && error)
 		die("%s", error);
-
-#ifdef GIT_PCRE1_USE_JIT
-	pcre_config(PCRE_CONFIG_JIT, &p->pcre1_jit_on);
-	if (p->pcre1_jit_on == 1) {
-		p->pcre1_jit_stack = pcre_jit_stack_alloc(1, 1024 * 1024);
-		if (!p->pcre1_jit_stack)
-			die("Couldn't allocate PCRE JIT stack");
-		pcre_assign_jit_stack(p->pcre1_extra_info, NULL, p->pcre1_jit_stack);
-	} else if (p->pcre1_jit_on != 0) {
-		BUG("The pcre1_jit_on variable should be 0 or 1, not %d",
-		    p->pcre1_jit_on);
-	}
-#endif
 }
 
 static int pcre1match(struct grep_pat *p, const char *line, const char *eol,
 		regmatch_t *match, int eflags)
 {
-	int ovector[30], ret, flags = 0;
+	int ovector[30], ret, flags = PCRE_NO_UTF8_CHECK;
 
 	if (eflags & REG_NOTBOL)
 		flags |= PCRE_NOTBOL;
 
-#ifdef GIT_PCRE1_USE_JIT
-	if (p->pcre1_jit_on) {
-		ret = pcre_jit_exec(p->pcre1_regexp, p->pcre1_extra_info, line,
-				    eol - line, 0, flags, ovector,
-				    ARRAY_SIZE(ovector), p->pcre1_jit_stack);
-	} else
-#endif
-	{
-		ret = pcre_exec(p->pcre1_regexp, p->pcre1_extra_info, line,
-				eol - line, 0, flags, ovector,
-				ARRAY_SIZE(ovector));
-	}
+	ret = pcre_exec(p->pcre1_regexp, p->pcre1_extra_info, line,
+			eol - line, 0, flags, ovector,
+			ARRAY_SIZE(ovector));
 
 	if (ret < 0 && ret != PCRE_ERROR_NOMATCH)
 		die("pcre_exec failed with error code %d", ret);
@@ -453,15 +466,12 @@
 static void free_pcre1_regexp(struct grep_pat *p)
 {
 	pcre_free(p->pcre1_regexp);
-#ifdef GIT_PCRE1_USE_JIT
-	if (p->pcre1_jit_on) {
+#ifdef PCRE_CONFIG_JIT
+	if (p->pcre1_jit_on)
 		pcre_free_study(p->pcre1_extra_info);
-		pcre_jit_stack_free(p->pcre1_jit_stack);
-	} else
+	else
 #endif
-	{
 		pcre_free(p->pcre1_extra_info);
-	}
 	pcre_free((void *)p->pcre1_tables);
 }
 #else /* !USE_LIBPCRE1 */
@@ -488,7 +498,6 @@
 	PCRE2_UCHAR errbuf[256];
 	PCRE2_SIZE erroffset;
 	int options = PCRE2_MULTILINE;
-	const uint8_t *character_tables = NULL;
 	int jitret;
 	int patinforet;
 	size_t jitsizearg;
@@ -497,15 +506,20 @@
 
 	p->pcre2_compile_context = NULL;
 
+	/* pcre2_global_context is initialized in append_grep_pattern */
 	if (opt->ignore_case) {
-		if (has_non_ascii(p->pattern)) {
-			character_tables = pcre2_maketables(NULL);
+		if (!opt->ignore_locale && has_non_ascii(p->pattern)) {
+			if (!pcre2_global_context)
+				BUG("pcre2_global_context uninitialized");
+			p->pcre2_tables = pcre2_maketables(pcre2_global_context);
 			p->pcre2_compile_context = pcre2_compile_context_create(NULL);
-			pcre2_set_character_tables(p->pcre2_compile_context, character_tables);
+			pcre2_set_character_tables(p->pcre2_compile_context,
+							p->pcre2_tables);
 		}
 		options |= PCRE2_CASELESS;
 	}
-	if (is_utf8_locale() && has_non_ascii(p->pattern))
+	if (!opt->ignore_locale && is_utf8_locale() && has_non_ascii(p->pattern) &&
+	    !(!opt->ignore_case && (p->fixed || p->is_fixed)))
 		options |= PCRE2_UTF;
 
 	p->pcre2_pattern = pcre2_compile((PCRE2_SPTR)p->pattern,
@@ -522,7 +536,9 @@
 	}
 
 	pcre2_config(PCRE2_CONFIG_JIT, &p->pcre2_jit_on);
-	if (p->pcre2_jit_on == 1) {
+	if (opt->debug)
+		fprintf(stderr, "pcre2_jit_on=%d\n", p->pcre2_jit_on);
+	if (p->pcre2_jit_on) {
 		jitret = pcre2_jit_compile(p->pcre2_pattern, PCRE2_JIT_COMPLETE);
 		if (jitret)
 			die("Couldn't JIT the PCRE2 pattern '%s', got '%d'\n", p->pattern, jitret);
@@ -547,19 +563,11 @@
 			BUG("pcre2_pattern_info() failed: %d", patinforet);
 		if (jitsizearg == 0) {
 			p->pcre2_jit_on = 0;
+			if (opt->debug)
+				fprintf(stderr, "pcre2_jit_on=%d: (*NO_JIT) in regex\n",
+					p->pcre2_jit_on);
 			return;
 		}
-
-		p->pcre2_jit_stack = pcre2_jit_stack_create(1, 1024 * 1024, NULL);
-		if (!p->pcre2_jit_stack)
-			die("Couldn't allocate PCRE2 JIT stack");
-		p->pcre2_match_context = pcre2_match_context_create(NULL);
-		if (!p->pcre2_match_context)
-			die("Couldn't allocate PCRE2 match context");
-		pcre2_jit_stack_assign(p->pcre2_match_context, NULL, p->pcre2_jit_stack);
-	} else if (p->pcre2_jit_on != 0) {
-		BUG("The pcre2_jit_on variable should be 0 or 1, not %d",
-		    p->pcre2_jit_on);
 	}
 }
 
@@ -603,8 +611,7 @@
 	pcre2_compile_context_free(p->pcre2_compile_context);
 	pcre2_code_free(p->pcre2_pattern);
 	pcre2_match_data_free(p->pcre2_match_data);
-	pcre2_jit_stack_free(p->pcre2_jit_stack);
-	pcre2_match_context_free(p->pcre2_match_context);
+	free((void *)p->pcre2_tables);
 }
 #else /* !USE_LIBPCRE2 */
 static void compile_pcre2_pattern(struct grep_pat *p, const struct grep_opt *opt)
@@ -626,7 +633,6 @@
 static void free_pcre2_pattern(struct grep_pat *p)
 {
 }
-#endif /* !USE_LIBPCRE2 */
 
 static void compile_fixed_regexp(struct grep_pat *p, struct grep_opt *opt)
 {
@@ -647,46 +653,66 @@
 		compile_regexp_failed(p, errbuf);
 	}
 }
+#endif /* !USE_LIBPCRE2 */
 
 static void compile_regexp(struct grep_pat *p, struct grep_opt *opt)
 {
-	int ascii_only;
 	int err;
 	int regflags = REG_NEWLINE;
 
 	p->word_regexp = opt->word_regexp;
 	p->ignore_case = opt->ignore_case;
-	ascii_only     = !has_non_ascii(p->pattern);
+	p->fixed = opt->fixed;
 
-	/*
-	 * Even when -F (fixed) asks us to do a non-regexp search, we
-	 * may not be able to correctly case-fold when -i
-	 * (ignore-case) is asked (in which case, we'll synthesize a
-	 * regexp to match the pattern that matches regexp special
-	 * characters literally, while ignoring case differences).  On
-	 * the other hand, even without -F, if the pattern does not
-	 * have any regexp special characters and there is no need for
-	 * case-folding search, we can internally turn it into a
-	 * simple string match using kws.  p->fixed tells us if we
-	 * want to use kws.
-	 */
-	if (opt->fixed ||
-	    has_null(p->pattern, p->patternlen) ||
-	    is_fixed(p->pattern, p->patternlen))
-		p->fixed = !p->ignore_case || ascii_only;
+	if (memchr(p->pattern, 0, p->patternlen) && !opt->pcre2)
+		die(_("given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2"));
 
-	if (p->fixed) {
-		p->kws = kwsalloc(p->ignore_case ? tolower_trans_tbl : NULL);
-		kwsincr(p->kws, p->pattern, p->patternlen);
-		kwsprep(p->kws);
-		return;
-	} else if (opt->fixed) {
-		/*
-		 * We come here when the pattern has the non-ascii
-		 * characters we cannot case-fold, and asked to
-		 * ignore-case.
-		 */
+	p->is_fixed = is_fixed(p->pattern, p->patternlen);
+#ifdef USE_LIBPCRE2
+       if (!p->fixed && !p->is_fixed) {
+	       const char *no_jit = "(*NO_JIT)";
+	       const int no_jit_len = strlen(no_jit);
+	       if (starts_with(p->pattern, no_jit) &&
+		   is_fixed(p->pattern + no_jit_len,
+			    p->patternlen - no_jit_len))
+		       p->is_fixed = 1;
+       }
+#endif
+	if (p->fixed || p->is_fixed) {
+#ifdef USE_LIBPCRE2
+		opt->pcre2 = 1;
+		if (p->is_fixed) {
+			compile_pcre2_pattern(p, opt);
+		} else {
+			/*
+			 * E.g. t7811-grep-open.sh relies on the
+			 * pattern being restored.
+			 */
+			char *old_pattern = p->pattern;
+			size_t old_patternlen = p->patternlen;
+			struct strbuf sb = STRBUF_INIT;
+
+			/*
+			 * There is the PCRE2_LITERAL flag, but it's
+			 * only in PCRE v2 10.30 and later. Needing to
+			 * ifdef our way around that and dealing with
+			 * it + PCRE2_MULTILINE being an error is more
+			 * complex than just quoting this ourselves.
+			*/
+			strbuf_add(&sb, "\\Q", 2);
+			strbuf_add(&sb, p->pattern, p->patternlen);
+			strbuf_add(&sb, "\\E", 2);
+
+			p->pattern = sb.buf;
+			p->patternlen = sb.len;
+			compile_pcre2_pattern(p, opt);
+			p->pattern = old_pattern;
+			p->patternlen = old_patternlen;
+			strbuf_release(&sb);
+		}
+#else /* !USE_LIBPCRE2 */
 		compile_fixed_regexp(p, opt);
+#endif /* !USE_LIBPCRE2 */
 		return;
 	}
 
@@ -1053,9 +1079,7 @@
 		case GREP_PATTERN: /* atom */
 		case GREP_PATTERN_HEAD:
 		case GREP_PATTERN_BODY:
-			if (p->kws)
-				kwsfree(p->kws);
-			else if (p->pcre1_regexp)
+			if (p->pcre1_regexp)
 				free_pcre1_regexp(p);
 			else if (p->pcre2_pattern)
 				free_pcre2_pattern(p);
@@ -1115,29 +1139,12 @@
 	opt->output(opt, opt->null_following_name ? "\0" : "\n", 1);
 }
 
-static int fixmatch(struct grep_pat *p, char *line, char *eol,
-		    regmatch_t *match)
-{
-	struct kwsmatch kwsm;
-	size_t offset = kwsexec(p->kws, line, eol - line, &kwsm);
-	if (offset == -1) {
-		match->rm_so = match->rm_eo = -1;
-		return REG_NOMATCH;
-	} else {
-		match->rm_so = offset;
-		match->rm_eo = match->rm_so + kwsm.size[0];
-		return 0;
-	}
-}
-
 static int patmatch(struct grep_pat *p, char *line, char *eol,
 		    regmatch_t *match, int eflags)
 {
 	int hit;
 
-	if (p->fixed)
-		hit = !fixmatch(p, line, eol, match);
-	else if (p->pcre1_regexp)
+	if (p->pcre1_regexp)
 		hit = !pcre1match(p, line, eol, match, eflags);
 	else if (p->pcre2_pattern)
 		hit = !pcre2match(p, line, eol, match, eflags);
diff --git a/grep.h b/grep.h
index 1875880..811fd27 100644
--- a/grep.h
+++ b/grep.h
@@ -3,24 +3,12 @@
 #include "color.h"
 #ifdef USE_LIBPCRE1
 #include <pcre.h>
-#ifdef PCRE_CONFIG_JIT
-#if PCRE_MAJOR >= 8 && PCRE_MINOR >= 32
-#ifndef NO_LIBPCRE1_JIT
-#define GIT_PCRE1_USE_JIT
-#define GIT_PCRE_STUDY_JIT_COMPILE PCRE_STUDY_JIT_COMPILE
-#endif
-#endif
-#endif
-#ifndef GIT_PCRE_STUDY_JIT_COMPILE
-#define GIT_PCRE_STUDY_JIT_COMPILE 0
-#endif
-#if PCRE_MAJOR <= 8 && PCRE_MINOR < 20
-typedef int pcre_jit_stack;
+#ifndef PCRE_NO_UTF8_CHECK
+#define PCRE_NO_UTF8_CHECK 0
 #endif
 #else
 typedef int pcre;
 typedef int pcre_extra;
-typedef int pcre_jit_stack;
 #endif
 #ifdef USE_LIBPCRE2
 #define PCRE2_CODE_UNIT_WIDTH 8
@@ -29,10 +17,7 @@
 typedef int pcre2_code;
 typedef int pcre2_match_data;
 typedef int pcre2_compile_context;
-typedef int pcre2_match_context;
-typedef int pcre2_jit_stack;
 #endif
-#include "kwset.h"
 #include "thread-utils.h"
 #include "userdiff.h"
 
@@ -88,17 +73,15 @@
 	regex_t regexp;
 	pcre *pcre1_regexp;
 	pcre_extra *pcre1_extra_info;
-	pcre_jit_stack *pcre1_jit_stack;
 	const unsigned char *pcre1_tables;
 	int pcre1_jit_on;
 	pcre2_code *pcre2_pattern;
 	pcre2_match_data *pcre2_match_data;
 	pcre2_compile_context *pcre2_compile_context;
-	pcre2_match_context *pcre2_match_context;
-	pcre2_jit_stack *pcre2_jit_stack;
+	const uint8_t *pcre2_tables;
 	uint32_t pcre2_jit_on;
-	kwset_t kws;
 	unsigned fixed:1;
+	unsigned is_fixed:1;
 	unsigned ignore_case:1;
 	unsigned word_regexp:1;
 };
@@ -173,6 +156,7 @@
 	int funcbody;
 	int extended_regexp_option;
 	int pattern_type_option;
+	int ignore_locale;
 	char colors[NR_GREP_COLORS][COLOR_MAXLEN];
 	unsigned pre_context;
 	unsigned post_context;
@@ -189,6 +173,7 @@
 void init_grep_defaults(struct repository *);
 int grep_config(const char *var, const char *value, void *);
 void grep_init(struct grep_opt *, struct repository *repo, const char *prefix);
+void grep_destroy(void);
 void grep_commit_pattern_type(enum grep_pattern_type, struct grep_opt *opt);
 
 void append_grep_pat(struct grep_opt *opt, const char *pat, size_t patlen, const char *origin, int no, enum grep_pat_token t);
diff --git a/hashmap.c b/hashmap.c
index d42f01f..39c1311 100644
--- a/hashmap.c
+++ b/hashmap.c
@@ -140,8 +140,8 @@
 }
 
 static int always_equal(const void *unused_cmp_data,
-			const void *unused1,
-			const void *unused2,
+			const struct hashmap_entry *unused1,
+			const struct hashmap_entry *unused2,
 			const void *unused_keydata)
 {
 	return 0;
@@ -171,41 +171,49 @@
 	map->do_count_items = 1;
 }
 
-void hashmap_free(struct hashmap *map, int free_entries)
+void hashmap_free_(struct hashmap *map, ssize_t entry_offset)
 {
 	if (!map || !map->table)
 		return;
-	if (free_entries) {
+	if (entry_offset >= 0) { /* called by hashmap_free_entries */
 		struct hashmap_iter iter;
 		struct hashmap_entry *e;
+
 		hashmap_iter_init(map, &iter);
 		while ((e = hashmap_iter_next(&iter)))
-			free(e);
+			/*
+			 * like container_of, but using caller-calculated
+			 * offset (caller being hashmap_free_entries)
+			 */
+			free((char *)e - entry_offset);
 	}
 	free(map->table);
 	memset(map, 0, sizeof(*map));
 }
 
-void *hashmap_get(const struct hashmap *map, const void *key, const void *keydata)
+struct hashmap_entry *hashmap_get(const struct hashmap *map,
+				const struct hashmap_entry *key,
+				const void *keydata)
 {
 	return *find_entry_ptr(map, key, keydata);
 }
 
-void *hashmap_get_next(const struct hashmap *map, const void *entry)
+struct hashmap_entry *hashmap_get_next(const struct hashmap *map,
+			const struct hashmap_entry *entry)
 {
-	struct hashmap_entry *e = ((struct hashmap_entry *) entry)->next;
+	struct hashmap_entry *e = entry->next;
 	for (; e; e = e->next)
 		if (entry_equals(map, entry, e, NULL))
 			return e;
 	return NULL;
 }
 
-void hashmap_add(struct hashmap *map, void *entry)
+void hashmap_add(struct hashmap *map, struct hashmap_entry *entry)
 {
 	unsigned int b = bucket(map, entry);
 
 	/* add entry */
-	((struct hashmap_entry *) entry)->next = map->table[b];
+	entry->next = map->table[b];
 	map->table[b] = entry;
 
 	/* fix size and rehash if appropriate */
@@ -216,7 +224,9 @@
 	}
 }
 
-void *hashmap_remove(struct hashmap *map, const void *key, const void *keydata)
+struct hashmap_entry *hashmap_remove(struct hashmap *map,
+					const struct hashmap_entry *key,
+					const void *keydata)
 {
 	struct hashmap_entry *old;
 	struct hashmap_entry **e = find_entry_ptr(map, key, keydata);
@@ -238,7 +248,8 @@
 	return old;
 }
 
-void *hashmap_put(struct hashmap *map, void *entry)
+struct hashmap_entry *hashmap_put(struct hashmap *map,
+				struct hashmap_entry *entry)
 {
 	struct hashmap_entry *old = hashmap_remove(map, entry, NULL);
 	hashmap_add(map, entry);
@@ -252,7 +263,7 @@
 	iter->next = NULL;
 }
 
-void *hashmap_iter_next(struct hashmap_iter *iter)
+struct hashmap_entry *hashmap_iter_next(struct hashmap_iter *iter)
 {
 	struct hashmap_entry *current = iter->next;
 	for (;;) {
@@ -275,10 +286,15 @@
 };
 
 static int pool_entry_cmp(const void *unused_cmp_data,
-			  const struct pool_entry *e1,
-			  const struct pool_entry *e2,
-			  const unsigned char *keydata)
+			  const struct hashmap_entry *eptr,
+			  const struct hashmap_entry *entry_or_key,
+			  const void *keydata)
 {
+	const struct pool_entry *e1, *e2;
+
+	e1 = container_of(eptr, const struct pool_entry, ent);
+	e2 = container_of(entry_or_key, const struct pool_entry, ent);
+
 	return e1->data != keydata &&
 	       (e1->len != e2->len || memcmp(e1->data, keydata, e1->len));
 }
@@ -290,18 +306,18 @@
 
 	/* initialize string pool hashmap */
 	if (!map.tablesize)
-		hashmap_init(&map, (hashmap_cmp_fn) pool_entry_cmp, NULL, 0);
+		hashmap_init(&map, pool_entry_cmp, NULL, 0);
 
 	/* lookup interned string in pool */
-	hashmap_entry_init(&key, memhash(data, len));
+	hashmap_entry_init(&key.ent, memhash(data, len));
 	key.len = len;
-	e = hashmap_get(&map, &key, data);
+	e = hashmap_get_entry(&map, &key, ent, data);
 	if (!e) {
 		/* not found: create it */
 		FLEX_ALLOC_MEM(e, data, data, len);
-		hashmap_entry_init(e, key.ent.hash);
+		hashmap_entry_init(&e->ent, key.ent.hash);
 		e->len = len;
-		hashmap_add(&map, e);
+		hashmap_add(&map, &e->ent);
 	}
 	return e->data;
 }
diff --git a/hashmap.h b/hashmap.h
index 8424911..bd27015 100644
--- a/hashmap.h
+++ b/hashmap.h
@@ -13,7 +13,7 @@
  *
  * struct hashmap map;
  * struct long2string {
- *     struct hashmap_entry ent; // must be the first member!
+ *     struct hashmap_entry ent;
  *     long key;
  *     char value[FLEX_ARRAY];   // be careful with allocating on stack!
  * };
@@ -21,12 +21,16 @@
  * #define COMPARE_VALUE 1
  *
  * static int long2string_cmp(const void *hashmap_cmp_fn_data,
- *                            const struct long2string *e1,
- *                            const struct long2string *e2,
+ *                            const struct hashmap_entry *eptr,
+ *                            const struct hashmap_entry *entry_or_key,
  *                            const void *keydata)
  * {
  *     const char *string = keydata;
  *     unsigned flags = *(unsigned *)hashmap_cmp_fn_data;
+ *     const struct long2string *e1, *e2;
+ *
+ *     e1 = container_of(eptr, const struct long2string, ent);
+ *     e2 = container_of(entry_or_key, const struct long2string, ent);
  *
  *     if (flags & COMPARE_VALUE)
  *         return e1->key != e2->key ||
@@ -41,54 +45,58 @@
  *     char value[255], action[32];
  *     unsigned flags = 0;
  *
- *     hashmap_init(&map, (hashmap_cmp_fn) long2string_cmp, &flags, 0);
+ *     hashmap_init(&map, long2string_cmp, &flags, 0);
  *
  *     while (scanf("%s %ld %s", action, &key, value)) {
  *
  *         if (!strcmp("add", action)) {
  *             struct long2string *e;
  *             FLEX_ALLOC_STR(e, value, value);
- *             hashmap_entry_init(e, memhash(&key, sizeof(long)));
+ *             hashmap_entry_init(&e->ent, memhash(&key, sizeof(long)));
  *             e->key = key;
- *             hashmap_add(&map, e);
+ *             hashmap_add(&map, &e->ent);
  *         }
  *
  *         if (!strcmp("print_all_by_key", action)) {
  *             struct long2string k, *e;
- *             hashmap_entry_init(&k, memhash(&key, sizeof(long)));
+ *             hashmap_entry_init(&k->ent, memhash(&key, sizeof(long)));
  *             k.key = key;
  *
  *             flags &= ~COMPARE_VALUE;
- *             e = hashmap_get(&map, &k, NULL);
+ *             e = hashmap_get_entry(&map, &k, ent, NULL);
  *             if (e) {
  *                 printf("first: %ld %s\n", e->key, e->value);
- *                 while ((e = hashmap_get_next(&map, e)))
+ *                 while ((e = hashmap_get_next_entry(&map, e,
+ *                                              struct long2string, ent))) {
  *                     printf("found more: %ld %s\n", e->key, e->value);
+ *                 }
  *             }
  *         }
  *
  *         if (!strcmp("has_exact_match", action)) {
  *             struct long2string *e;
  *             FLEX_ALLOC_STR(e, value, value);
- *             hashmap_entry_init(e, memhash(&key, sizeof(long)));
+ *             hashmap_entry_init(&e->ent, memhash(&key, sizeof(long)));
  *             e->key = key;
  *
  *             flags |= COMPARE_VALUE;
- *             printf("%sfound\n", hashmap_get(&map, e, NULL) ? "" : "not ");
+ *             printf("%sfound\n",
+ *                    hashmap_get(&map, &e->ent, NULL) ? "" : "not ");
  *             free(e);
  *         }
  *
  *         if (!strcmp("has_exact_match_no_heap_alloc", action)) {
  *             struct long2string k;
- *             hashmap_entry_init(&k, memhash(&key, sizeof(long)));
+ *             hashmap_entry_init(&k->ent, memhash(&key, sizeof(long)));
  *             k.key = key;
  *
  *             flags |= COMPARE_VALUE;
- *             printf("%sfound\n", hashmap_get(&map, &k, value) ? "" : "not ");
+ *             printf("%sfound\n",
+ *                    hashmap_get(&map, &k->ent, value) ? "" : "not ");
  *         }
  *
  *         if (!strcmp("end", action)) {
- *             hashmap_free(&map, 1);
+ *             hashmap_free_entries(&map, struct long2string, ent);
  *             break;
  *         }
  *     }
@@ -133,7 +141,7 @@
 
 /*
  * struct hashmap_entry is an opaque structure representing an entry in the
- * hash table, which must be used as first member of user data structures.
+ * hash table.
  * Ideally it should be followed by an int-sized member to prevent unused
  * memory on 64-bit systems due to alignment.
  */
@@ -168,7 +176,8 @@
  * The `hashmap_cmp_fn_data` entry is the pointer given in the init function.
  */
 typedef int (*hashmap_cmp_fn)(const void *hashmap_cmp_fn_data,
-			      const void *entry, const void *entry_or_key,
+			      const struct hashmap_entry *entry,
+			      const struct hashmap_entry *entry_or_key,
 			      const void *keydata);
 
 /*
@@ -223,13 +232,20 @@
 			 const void *equals_function_data,
 			 size_t initial_size);
 
+/* internal function for freeing hashmap */
+void hashmap_free_(struct hashmap *map, ssize_t offset);
+
 /*
- * Frees a hashmap structure and allocated memory.
- *
- * If `free_entries` is true, each hashmap_entry in the map is freed as well
- * using stdlibs free().
+ * Frees a hashmap structure and allocated memory, leaves entries undisturbed
  */
-void hashmap_free(struct hashmap *map, int free_entries);
+#define hashmap_free(map) hashmap_free_(map, -1)
+
+/*
+ * Frees @map and all entries.  @type is the struct type of the entry
+ * where @member is the hashmap_entry struct used to associate with @map
+ */
+#define hashmap_free_entries(map, type, member) \
+	hashmap_free_(map, offsetof(type, member));
 
 /* hashmap_entry functions */
 
@@ -244,9 +260,9 @@
  * your structure was allocated with xmalloc(), you can just free(3) it,
  * and if it is on stack, you can just let it go out of scope).
  */
-static inline void hashmap_entry_init(void *entry, unsigned int hash)
+static inline void hashmap_entry_init(struct hashmap_entry *e,
+					unsigned int hash)
 {
-	struct hashmap_entry *e = entry;
 	e->hash = hash;
 	e->next = NULL;
 }
@@ -286,8 +302,9 @@
  * If an entry with matching hash code is found, `key` and `keydata` are passed
  * to `hashmap_cmp_fn` to decide whether the entry matches the key.
  */
-void *hashmap_get(const struct hashmap *map, const void *key,
-			 const void *keydata);
+struct hashmap_entry *hashmap_get(const struct hashmap *map,
+				const struct hashmap_entry *key,
+				const void *keydata);
 
 /*
  * Returns the hashmap entry for the specified hash code and key data,
@@ -301,9 +318,10 @@
  * `entry_or_key` parameter of `hashmap_cmp_fn` points to a hashmap_entry
  * structure that should not be used in the comparison.
  */
-static inline void *hashmap_get_from_hash(const struct hashmap *map,
-					  unsigned int hash,
-					  const void *keydata)
+static inline struct hashmap_entry *hashmap_get_from_hash(
+					const struct hashmap *map,
+					unsigned int hash,
+					const void *keydata)
 {
 	struct hashmap_entry key;
 	hashmap_entry_init(&key, hash);
@@ -318,7 +336,8 @@
  * `entry` is the hashmap_entry to start the search from, obtained via a previous
  * call to `hashmap_get` or `hashmap_get_next`.
  */
-void *hashmap_get_next(const struct hashmap *map, const void *entry);
+struct hashmap_entry *hashmap_get_next(const struct hashmap *map,
+			const struct hashmap_entry *entry);
 
 /*
  * Adds a hashmap entry. This allows to add duplicate entries (i.e.
@@ -327,7 +346,7 @@
  * `map` is the hashmap structure.
  * `entry` is the entry to add.
  */
-void hashmap_add(struct hashmap *map, void *entry);
+void hashmap_add(struct hashmap *map, struct hashmap_entry *entry);
 
 /*
  * Adds or replaces a hashmap entry. If the hashmap contains duplicate
@@ -337,7 +356,20 @@
  * `entry` is the entry to add or replace.
  * Returns the replaced entry, or NULL if not found (i.e. the entry was added).
  */
-void *hashmap_put(struct hashmap *map, void *entry);
+struct hashmap_entry *hashmap_put(struct hashmap *map,
+				struct hashmap_entry *entry);
+
+/*
+ * Adds or replaces a hashmap entry contained within @keyvar,
+ * where @keyvar is a pointer to a struct containing a
+ * "struct hashmap_entry" @member.
+ *
+ * Returns the replaced pointer which is of the same type as @keyvar,
+ * or NULL if not found.
+ */
+#define hashmap_put_entry(map, keyvar, member) \
+	container_of_or_null_offset(hashmap_put(map, &(keyvar)->member), \
+				OFFSETOF_VAR(keyvar, member))
 
 /*
  * Removes a hashmap entry matching the specified key. If the hashmap contains
@@ -346,8 +378,24 @@
  *
  * Argument explanation is the same as in `hashmap_get`.
  */
-void *hashmap_remove(struct hashmap *map, const void *key,
-		const void *keydata);
+struct hashmap_entry *hashmap_remove(struct hashmap *map,
+					const struct hashmap_entry *key,
+					const void *keydata);
+
+/*
+ * Removes a hashmap entry contained within @keyvar,
+ * where @keyvar is a pointer to a struct containing a
+ * "struct hashmap_entry" @member.
+ *
+ * See `hashmap_get` for an explanation of @keydata
+ *
+ * Returns the replaced pointer which is of the same type as @keyvar,
+ * or NULL if not found.
+ */
+#define hashmap_remove_entry(map, keyvar, member, keydata) \
+	container_of_or_null_offset( \
+			hashmap_remove(map, &(keyvar)->member, keydata), \
+			OFFSETOF_VAR(keyvar, member))
 
 /*
  * Returns the `bucket` an entry is stored in.
@@ -370,10 +418,10 @@
 void hashmap_iter_init(struct hashmap *map, struct hashmap_iter *iter);
 
 /* Returns the next hashmap_entry, or NULL if there are no more entries. */
-void *hashmap_iter_next(struct hashmap_iter *iter);
+struct hashmap_entry *hashmap_iter_next(struct hashmap_iter *iter);
 
 /* Initializes the iterator and returns the first entry, if any. */
-static inline void *hashmap_iter_first(struct hashmap *map,
+static inline struct hashmap_entry *hashmap_iter_first(struct hashmap *map,
 		struct hashmap_iter *iter)
 {
 	hashmap_iter_init(map, iter);
@@ -381,6 +429,64 @@
 }
 
 /*
+ * returns the first entry in @map using @iter, where the entry is of
+ * @type (e.g. "struct foo") and @member is the name of the
+ * "struct hashmap_entry" in @type
+ */
+#define hashmap_iter_first_entry(map, iter, type, member) \
+	container_of_or_null(hashmap_iter_first(map, iter), type, member)
+
+/* internal macro for hashmap_for_each_entry */
+#define hashmap_iter_next_entry_offset(iter, offset) \
+	container_of_or_null_offset(hashmap_iter_next(iter), offset)
+
+/* internal macro for hashmap_for_each_entry */
+#define hashmap_iter_first_entry_offset(map, iter, offset) \
+	container_of_or_null_offset(hashmap_iter_first(map, iter), offset)
+
+/*
+ * iterate through @map using @iter, @var is a pointer to a type
+ * containing a @member which is a "struct hashmap_entry"
+ */
+#define hashmap_for_each_entry(map, iter, var, member) \
+	for (var = hashmap_iter_first_entry_offset(map, iter, \
+						OFFSETOF_VAR(var, member)); \
+		var; \
+		var = hashmap_iter_next_entry_offset(iter, \
+						OFFSETOF_VAR(var, member)))
+
+/*
+ * returns a pointer of type matching @keyvar, or NULL if nothing found.
+ * @keyvar is a pointer to a struct containing a
+ * "struct hashmap_entry" @member.
+ */
+#define hashmap_get_entry(map, keyvar, member, keydata) \
+	container_of_or_null_offset( \
+				hashmap_get(map, &(keyvar)->member, keydata), \
+				OFFSETOF_VAR(keyvar, member))
+
+#define hashmap_get_entry_from_hash(map, hash, keydata, type, member) \
+	container_of_or_null(hashmap_get_from_hash(map, hash, keydata), \
+				type, member)
+/*
+ * returns the next equal pointer to @var, or NULL if not found.
+ * @var is a pointer of any type containing "struct hashmap_entry"
+ * @member is the name of the "struct hashmap_entry" field
+ */
+#define hashmap_get_next_entry(map, var, member) \
+	container_of_or_null_offset(hashmap_get_next(map, &(var)->member), \
+				OFFSETOF_VAR(var, member))
+
+/*
+ * iterate @map starting from @var, where @var is a pointer of @type
+ * and @member is the name of the "struct hashmap_entry" field in @type
+ */
+#define hashmap_for_each_entry_from(map, var, member) \
+	for (; \
+		var; \
+		var = hashmap_get_next_entry(map, var, member))
+
+/*
  * Disable item counting and automatic rehashing when adding/removing items.
  *
  * Normally, the hashmap keeps track of the number of items in the map
diff --git a/help.c b/help.c
index 5261d83..9ff2be6 100644
--- a/help.c
+++ b/help.c
@@ -774,7 +774,8 @@
 	return similar_refs;
 }
 
-void help_unknown_ref(const char *ref, const char *cmd, const char *error)
+NORETURN void help_unknown_ref(const char *ref, const char *cmd,
+			       const char *error)
 {
 	int i;
 	struct string_list suggested_refs = guess_refs(ref);
diff --git a/help.h b/help.h
index b8780fb..7a455be 100644
--- a/help.h
+++ b/help.h
@@ -43,7 +43,7 @@
  * call this to die(), when it is suspected that the user mistyped a
  * ref to the command, to give suggested "correct" refs.
  */
-void help_unknown_ref(const char *ref, const char *cmd, const char *error);
+NORETURN void help_unknown_ref(const char *ref, const char *cmd, const char *error);
 
 static inline void list_config_item(struct string_list *list,
 				    const char *prefix,
diff --git a/http-push.c b/http-push.c
index 0353f9f..822f326 100644
--- a/http-push.c
+++ b/http-push.c
@@ -501,10 +501,10 @@
 	if (request == request_queue_head) {
 		request_queue_head = request->next;
 	} else {
-		while (entry->next != NULL && entry->next != request)
+		while (entry && entry->next != request)
 			entry = entry->next;
-		if (entry->next == request)
-			entry->next = entry->next->next;
+		if (entry)
+			entry->next = request->next;
 	}
 
 	free(request->url);
@@ -981,7 +981,7 @@
 		while (prev && prev->next != lock)
 			prev = prev->next;
 		if (prev)
-			prev->next = prev->next->next;
+			prev->next = lock->next;
 	}
 
 	free(lock->owner);
diff --git a/http.c b/http.c
index c4dfdac..221d3f2 100644
--- a/http.c
+++ b/http.c
@@ -513,9 +513,11 @@
 #else
 		struct strbuf s = STRBUF_INIT;
 
-		strbuf_addstr_urlencode(&s, proxy_auth.username, 1);
+		strbuf_addstr_urlencode(&s, proxy_auth.username,
+					is_rfc3986_unreserved);
 		strbuf_addch(&s, ':');
-		strbuf_addstr_urlencode(&s, proxy_auth.password, 1);
+		strbuf_addstr_urlencode(&s, proxy_auth.password,
+					is_rfc3986_unreserved);
 		curl_proxyuserpwd = strbuf_detach(&s, NULL);
 		curl_easy_setopt(result, CURLOPT_PROXYUSERPWD, curl_proxyuserpwd);
 #endif
@@ -1074,6 +1076,7 @@
 
 	git_config(urlmatch_config_entry, &config);
 	free(normalized_url);
+	string_list_clear(&config.vars, 1);
 
 #if LIBCURL_VERSION_NUM >= 0x073800
 	if (http_ssl_backend) {
diff --git a/http.h b/http.h
index b429f1c..5e0ad72 100644
--- a/http.h
+++ b/http.h
@@ -25,8 +25,12 @@
 #if LIBCURL_VERSION_NUM < 0x070704
 #define curl_global_cleanup() do { /* nothing */ } while (0)
 #endif
+
 #if LIBCURL_VERSION_NUM < 0x070800
 #define curl_global_init(a) do { /* nothing */ } while (0)
+#elif LIBCURL_VERSION_NUM >= 0x070c00
+#define curl_global_init(a) curl_global_init_mem(a, xmalloc, free, \
+						xrealloc, xstrdup, xcalloc)
 #endif
 
 #if (LIBCURL_VERSION_NUM < 0x070c04) || (LIBCURL_VERSION_NUM == 0x071000)
diff --git a/line-log.c b/line-log.c
index 3aff184..9010e00 100644
--- a/line-log.c
+++ b/line-log.c
@@ -737,6 +737,38 @@
 	return ret;
 }
 
+static int same_paths_in_pathspec_and_range(struct pathspec *pathspec,
+					    struct line_log_data *range)
+{
+	int i;
+	struct line_log_data *r;
+
+	for (i = 0, r = range; i < pathspec->nr && r; i++, r = r->next)
+		if (strcmp(pathspec->items[i].match, r->path))
+			return 0;
+	if (i < pathspec->nr || r)
+		/* different number of pathspec items and ranges */
+		return 0;
+
+	return 1;
+}
+
+static void parse_pathspec_from_ranges(struct pathspec *pathspec,
+				       struct line_log_data *range)
+{
+	struct line_log_data *r;
+	struct argv_array array = ARGV_ARRAY_INIT;
+	const char **paths;
+
+	for (r = range; r; r = r->next)
+		argv_array_push(&array, r->path);
+	paths = argv_array_detach(&array);
+
+	parse_pathspec(pathspec, 0, PATHSPEC_PREFER_FULL, "", paths);
+	/* strings are now owned by pathspec */
+	free(paths);
+}
+
 void line_log_init(struct rev_info *rev, const char *prefix, struct string_list *args)
 {
 	struct commit *commit = NULL;
@@ -746,20 +778,7 @@
 	range = parse_lines(rev->diffopt.repo, commit, prefix, args);
 	add_line_range(rev, commit, range);
 
-	if (!rev->diffopt.detect_rename) {
-		struct line_log_data *r;
-		struct argv_array array = ARGV_ARRAY_INIT;
-		const char **paths;
-
-		for (r = range; r; r = r->next)
-			argv_array_push(&array, r->path);
-		paths = argv_array_detach(&array);
-
-		parse_pathspec(&rev->diffopt.pathspec, 0,
-			       PATHSPEC_PREFER_FULL, "", paths);
-		/* strings are now owned by pathspec */
-		free(paths);
-	}
+	parse_pathspec_from_ranges(&rev->diffopt.pathspec, range);
 }
 
 static void move_diff_queue(struct diff_queue_struct *dst,
@@ -817,15 +836,29 @@
 			struct diff_queue_struct *queue,
 			struct commit *commit, struct commit *parent)
 {
+	struct object_id *tree_oid, *parent_tree_oid;
+
 	assert(commit);
 
+	tree_oid = get_commit_tree_oid(commit);
+	parent_tree_oid = parent ? get_commit_tree_oid(parent) : NULL;
+
+	if (opt->detect_rename &&
+	    !same_paths_in_pathspec_and_range(&opt->pathspec, range)) {
+		clear_pathspec(&opt->pathspec);
+		parse_pathspec_from_ranges(&opt->pathspec, range);
+	}
 	DIFF_QUEUE_CLEAR(&diff_queued_diff);
-	diff_tree_oid(parent ? get_commit_tree_oid(parent) : NULL,
-		      get_commit_tree_oid(commit), "", opt);
-	if (opt->detect_rename) {
+	diff_tree_oid(parent_tree_oid, tree_oid, "", opt);
+	if (opt->detect_rename && diff_might_be_rename()) {
+		/* must look at the full tree diff to detect renames */
+		clear_pathspec(&opt->pathspec);
+		DIFF_QUEUE_CLEAR(&diff_queued_diff);
+
+		diff_tree_oid(parent_tree_oid, tree_oid, "", opt);
+
 		filter_diffs_for_paths(range, 1);
-		if (diff_might_be_rename())
-			diffcore_std(opt);
+		diffcore_std(opt);
 		filter_diffs_for_paths(range, 0);
 	}
 	move_diff_queue(queue, &diff_queued_diff);
diff --git a/list-objects-filter-options.c b/list-objects-filter-options.c
index 1cb20c6..256bcfb 100644
--- a/list-objects-filter-options.c
+++ b/list-objects-filter-options.c
@@ -6,6 +6,14 @@
 #include "list-objects.h"
 #include "list-objects-filter.h"
 #include "list-objects-filter-options.h"
+#include "promisor-remote.h"
+#include "trace.h"
+#include "url.h"
+
+static int parse_combine_filter(
+	struct list_objects_filter_options *filter_options,
+	const char *arg,
+	struct strbuf *errbuf);
 
 /*
  * Parse value of the argument to the "filter" keyword.
@@ -29,16 +37,11 @@
 {
 	const char *v0;
 
-	if (filter_options->choice) {
-		if (errbuf) {
-			strbuf_addstr(
-				errbuf,
-				_("multiple filter-specs cannot be combined"));
-		}
-		return 1;
-	}
+	if (!arg)
+		return 0;
 
-	filter_options->filter_spec = strdup(arg);
+	if (filter_options->choice)
+		BUG("filter_options already populated");
 
 	if (!strcmp(arg, "blob:none")) {
 		filter_options->choice = LOFC_BLOB_NONE;
@@ -52,28 +55,14 @@
 
 	} else if (skip_prefix(arg, "tree:", &v0)) {
 		if (!git_parse_ulong(v0, &filter_options->tree_exclude_depth)) {
-			if (errbuf) {
-				strbuf_addstr(
-					errbuf,
-					_("expected 'tree:<depth>'"));
-			}
+			strbuf_addstr(errbuf, _("expected 'tree:<depth>'"));
 			return 1;
 		}
 		filter_options->choice = LOFC_TREE_DEPTH;
 		return 0;
 
 	} else if (skip_prefix(arg, "sparse:oid=", &v0)) {
-		struct object_context oc;
-		struct object_id sparse_oid;
-
-		/*
-		 * Try to parse <oid-expression> into an OID for the current
-		 * command, but DO NOT complain if we don't have the blob or
-		 * ref locally.
-		 */
-		if (!get_oid_with_context(the_repository, v0, GET_OID_BLOB,
-					  &sparse_oid, &oc))
-			filter_options->sparse_oid_value = oiddup(&sparse_oid);
+		filter_options->sparse_oid_name = xstrdup(v0);
 		filter_options->choice = LOFC_SPARSE_OID;
 		return 0;
 
@@ -84,26 +73,189 @@
 				_("sparse:path filters support has been dropped"));
 		}
 		return 1;
+
+	} else if (skip_prefix(arg, "combine:", &v0)) {
+		return parse_combine_filter(filter_options, v0, errbuf);
+
 	}
 	/*
 	 * Please update _git_fetch() in git-completion.bash when you
 	 * add new filters
 	 */
 
-	if (errbuf)
-		strbuf_addf(errbuf, _("invalid filter-spec '%s'"), arg);
+	strbuf_addf(errbuf, _("invalid filter-spec '%s'"), arg);
 
 	memset(filter_options, 0, sizeof(*filter_options));
 	return 1;
 }
 
-int parse_list_objects_filter(struct list_objects_filter_options *filter_options,
-			      const char *arg)
+static const char *RESERVED_NON_WS = "~`!@#$^&*()[]{}\\;'\",<>?";
+
+static int has_reserved_character(
+	struct strbuf *sub_spec, struct strbuf *errbuf)
+{
+	const char *c = sub_spec->buf;
+	while (*c) {
+		if (*c <= ' ' || strchr(RESERVED_NON_WS, *c)) {
+			strbuf_addf(
+				errbuf,
+				_("must escape char in sub-filter-spec: '%c'"),
+				*c);
+			return 1;
+		}
+		c++;
+	}
+
+	return 0;
+}
+
+static int parse_combine_subfilter(
+	struct list_objects_filter_options *filter_options,
+	struct strbuf *subspec,
+	struct strbuf *errbuf)
+{
+	size_t new_index = filter_options->sub_nr;
+	char *decoded;
+	int result;
+
+	ALLOC_GROW_BY(filter_options->sub, filter_options->sub_nr, 1,
+		      filter_options->sub_alloc);
+
+	decoded = url_percent_decode(subspec->buf);
+
+	result = has_reserved_character(subspec, errbuf) ||
+		gently_parse_list_objects_filter(
+			&filter_options->sub[new_index], decoded, errbuf);
+
+	free(decoded);
+	return result;
+}
+
+static int parse_combine_filter(
+	struct list_objects_filter_options *filter_options,
+	const char *arg,
+	struct strbuf *errbuf)
+{
+	struct strbuf **subspecs = strbuf_split_str(arg, '+', 0);
+	size_t sub;
+	int result = 0;
+
+	if (!subspecs[0]) {
+		strbuf_addstr(errbuf, _("expected something after combine:"));
+		result = 1;
+		goto cleanup;
+	}
+
+	for (sub = 0; subspecs[sub] && !result; sub++) {
+		if (subspecs[sub + 1]) {
+			/*
+			 * This is not the last subspec. Remove trailing "+" so
+			 * we can parse it.
+			 */
+			size_t last = subspecs[sub]->len - 1;
+			assert(subspecs[sub]->buf[last] == '+');
+			strbuf_remove(subspecs[sub], last, 1);
+		}
+		result = parse_combine_subfilter(
+			filter_options, subspecs[sub], errbuf);
+	}
+
+	filter_options->choice = LOFC_COMBINE;
+
+cleanup:
+	strbuf_list_free(subspecs);
+	if (result) {
+		list_objects_filter_release(filter_options);
+		memset(filter_options, 0, sizeof(*filter_options));
+	}
+	return result;
+}
+
+static int allow_unencoded(char ch)
+{
+	if (ch <= ' ' || ch == '%' || ch == '+')
+		return 0;
+	return !strchr(RESERVED_NON_WS, ch);
+}
+
+static void filter_spec_append_urlencode(
+	struct list_objects_filter_options *filter, const char *raw)
 {
 	struct strbuf buf = STRBUF_INIT;
-	if (gently_parse_list_objects_filter(filter_options, arg, &buf))
-		die("%s", buf.buf);
-	return 0;
+	strbuf_addstr_urlencode(&buf, raw, allow_unencoded);
+	trace_printf("Add to combine filter-spec: %s\n", buf.buf);
+	string_list_append(&filter->filter_spec, strbuf_detach(&buf, NULL));
+}
+
+/*
+ * Changes filter_options into an equivalent LOFC_COMBINE filter options
+ * instance. Does not do anything if filter_options is already LOFC_COMBINE.
+ */
+static void transform_to_combine_type(
+	struct list_objects_filter_options *filter_options)
+{
+	assert(filter_options->choice);
+	if (filter_options->choice == LOFC_COMBINE)
+		return;
+	{
+		const int initial_sub_alloc = 2;
+		struct list_objects_filter_options *sub_array =
+			xcalloc(initial_sub_alloc, sizeof(*sub_array));
+		sub_array[0] = *filter_options;
+		memset(filter_options, 0, sizeof(*filter_options));
+		filter_options->sub = sub_array;
+		filter_options->sub_alloc = initial_sub_alloc;
+	}
+	filter_options->sub_nr = 1;
+	filter_options->choice = LOFC_COMBINE;
+	string_list_append(&filter_options->filter_spec, xstrdup("combine:"));
+	filter_spec_append_urlencode(
+		filter_options,
+		list_objects_filter_spec(&filter_options->sub[0]));
+	/*
+	 * We don't need the filter_spec strings for subfilter specs, only the
+	 * top level.
+	 */
+	string_list_clear(&filter_options->sub[0].filter_spec, /*free_util=*/0);
+}
+
+void list_objects_filter_die_if_populated(
+	struct list_objects_filter_options *filter_options)
+{
+	if (filter_options->choice)
+		die(_("multiple filter-specs cannot be combined"));
+}
+
+void parse_list_objects_filter(
+	struct list_objects_filter_options *filter_options,
+	const char *arg)
+{
+	struct strbuf errbuf = STRBUF_INIT;
+	int parse_error;
+
+	if (!filter_options->choice) {
+		string_list_append(&filter_options->filter_spec, xstrdup(arg));
+
+		parse_error = gently_parse_list_objects_filter(
+			filter_options, arg, &errbuf);
+	} else {
+		/*
+		 * Make filter_options an LOFC_COMBINE spec so we can trivially
+		 * add subspecs to it.
+		 */
+		transform_to_combine_type(filter_options);
+
+		string_list_append(&filter_options->filter_spec, xstrdup("+"));
+		filter_spec_append_urlencode(filter_options, arg);
+		ALLOC_GROW_BY(filter_options->sub, filter_options->sub_nr, 1,
+			      filter_options->sub_alloc);
+
+		parse_error = gently_parse_list_objects_filter(
+			&filter_options->sub[filter_options->sub_nr - 1], arg,
+			&errbuf);
+	}
+	if (parse_error)
+		die("%s", errbuf.buf);
 }
 
 int opt_parse_list_objects_filter(const struct option *opt,
@@ -111,76 +263,108 @@
 {
 	struct list_objects_filter_options *filter_options = opt->value;
 
-	if (unset || !arg) {
+	if (unset || !arg)
 		list_objects_filter_set_no_filter(filter_options);
-		return 0;
-	}
-
-	return parse_list_objects_filter(filter_options, arg);
+	else
+		parse_list_objects_filter(filter_options, arg);
+	return 0;
 }
 
-void expand_list_objects_filter_spec(
-	const struct list_objects_filter_options *filter,
-	struct strbuf *expanded_spec)
+const char *list_objects_filter_spec(struct list_objects_filter_options *filter)
 {
-	strbuf_init(expanded_spec, strlen(filter->filter_spec));
-	if (filter->choice == LOFC_BLOB_LIMIT)
-		strbuf_addf(expanded_spec, "blob:limit=%lu",
+	if (!filter->filter_spec.nr)
+		BUG("no filter_spec available for this filter");
+	if (filter->filter_spec.nr != 1) {
+		struct strbuf concatted = STRBUF_INIT;
+		strbuf_add_separated_string_list(
+			&concatted, "", &filter->filter_spec);
+		string_list_clear(&filter->filter_spec, /*free_util=*/0);
+		string_list_append(
+			&filter->filter_spec, strbuf_detach(&concatted, NULL));
+	}
+
+	return filter->filter_spec.items[0].string;
+}
+
+const char *expand_list_objects_filter_spec(
+	struct list_objects_filter_options *filter)
+{
+	if (filter->choice == LOFC_BLOB_LIMIT) {
+		struct strbuf expanded_spec = STRBUF_INIT;
+		strbuf_addf(&expanded_spec, "blob:limit=%lu",
 			    filter->blob_limit_value);
-	else if (filter->choice == LOFC_TREE_DEPTH)
-		strbuf_addf(expanded_spec, "tree:%lu",
-			    filter->tree_exclude_depth);
-	else
-		strbuf_addstr(expanded_spec, filter->filter_spec);
+		string_list_clear(&filter->filter_spec, /*free_util=*/0);
+		string_list_append(
+			&filter->filter_spec,
+			strbuf_detach(&expanded_spec, NULL));
+	}
+
+	return list_objects_filter_spec(filter);
 }
 
 void list_objects_filter_release(
 	struct list_objects_filter_options *filter_options)
 {
-	free(filter_options->filter_spec);
-	free(filter_options->sparse_oid_value);
+	size_t sub;
+
+	if (!filter_options)
+		return;
+	string_list_clear(&filter_options->filter_spec, /*free_util=*/0);
+	free(filter_options->sparse_oid_name);
+	for (sub = 0; sub < filter_options->sub_nr; sub++)
+		list_objects_filter_release(&filter_options->sub[sub]);
+	free(filter_options->sub);
 	memset(filter_options, 0, sizeof(*filter_options));
 }
 
 void partial_clone_register(
 	const char *remote,
-	const struct list_objects_filter_options *filter_options)
+	struct list_objects_filter_options *filter_options)
 {
-	/*
-	 * Record the name of the partial clone remote in the
-	 * config and in the global variable -- the latter is
-	 * used throughout to indicate that partial clone is
-	 * enabled and to expect missing objects.
-	 */
-	if (repository_format_partial_clone &&
-	    *repository_format_partial_clone &&
-	    strcmp(remote, repository_format_partial_clone))
-		die(_("cannot change partial clone promisor remote"));
+	char *cfg_name;
+	char *filter_name;
 
-	git_config_set("core.repositoryformatversion", "1");
-	git_config_set("extensions.partialclone", remote);
+	/* Check if it is already registered */
+	if (!promisor_remote_find(remote)) {
+		git_config_set("core.repositoryformatversion", "1");
 
-	repository_format_partial_clone = xstrdup(remote);
+		/* Add promisor config for the remote */
+		cfg_name = xstrfmt("remote.%s.promisor", remote);
+		git_config_set(cfg_name, "true");
+		free(cfg_name);
+	}
 
 	/*
 	 * Record the initial filter-spec in the config as
 	 * the default for subsequent fetches from this remote.
 	 */
-	core_partial_clone_filter_default =
-		xstrdup(filter_options->filter_spec);
-	git_config_set("core.partialclonefilter",
-		       core_partial_clone_filter_default);
+	filter_name = xstrfmt("remote.%s.partialclonefilter", remote);
+	/* NEEDSWORK: 'expand' result leaking??? */
+	git_config_set(filter_name,
+		       expand_list_objects_filter_spec(filter_options));
+	free(filter_name);
+
+	/* Make sure the config info are reset */
+	promisor_remote_reinit();
 }
 
 void partial_clone_get_default_filter_spec(
-	struct list_objects_filter_options *filter_options)
+	struct list_objects_filter_options *filter_options,
+	const char *remote)
 {
+	struct promisor_remote *promisor = promisor_remote_find(remote);
+	struct strbuf errbuf = STRBUF_INIT;
+
 	/*
 	 * Parse default value, but silently ignore it if it is invalid.
 	 */
-	if (!core_partial_clone_filter_default)
+	if (!promisor)
 		return;
+
+	string_list_append(&filter_options->filter_spec,
+			   promisor->partial_clone_filter);
 	gently_parse_list_objects_filter(filter_options,
-					 core_partial_clone_filter_default,
-					 NULL);
+					 promisor->partial_clone_filter,
+					 &errbuf);
+	strbuf_release(&errbuf);
 }
diff --git a/list-objects-filter-options.h b/list-objects-filter-options.h
index c54f000..2ffb392 100644
--- a/list-objects-filter-options.h
+++ b/list-objects-filter-options.h
@@ -2,7 +2,7 @@
 #define LIST_OBJECTS_FILTER_OPTIONS_H
 
 #include "parse-options.h"
-#include "strbuf.h"
+#include "string-list.h"
 
 /*
  * The list of defined filters for list-objects.
@@ -13,6 +13,7 @@
 	LOFC_BLOB_LIMIT,
 	LOFC_TREE_DEPTH,
 	LOFC_SPARSE_OID,
+	LOFC_COMBINE,
 	LOFC__COUNT /* must be last */
 };
 
@@ -23,8 +24,10 @@
 	 * commands that launch filtering sub-processes, or for communication
 	 * over the network, don't use this value; use the result of
 	 * expand_list_objects_filter_spec() instead.
+	 * To get the raw filter spec given by the user, use the result of
+	 * list_objects_filter_spec().
 	 */
-	char *filter_spec;
+	struct string_list filter_spec;
 
 	/*
 	 * 'choice' is determined by parsing the filter-spec.  This indicates
@@ -38,19 +41,40 @@
 	unsigned int no_filter : 1;
 
 	/*
-	 * Parsed values (fields) from within the filter-spec.  These are
-	 * choice-specific; not all values will be defined for any given
-	 * choice.
+	 * BEGIN choice-specific parsed values from within the filter-spec. Only
+	 * some values will be defined for any given choice.
 	 */
-	struct object_id *sparse_oid_value;
+
+	char *sparse_oid_name;
 	unsigned long blob_limit_value;
 	unsigned long tree_exclude_depth;
+
+	/* LOFC_COMBINE values */
+
+	/* This array contains all the subfilters which this filter combines. */
+	size_t sub_nr, sub_alloc;
+	struct list_objects_filter_options *sub;
+
+	/*
+	 * END choice-specific parsed values.
+	 */
 };
 
 /* Normalized command line arguments */
 #define CL_ARG__FILTER "filter"
 
-int parse_list_objects_filter(
+void list_objects_filter_die_if_populated(
+	struct list_objects_filter_options *filter_options);
+
+/*
+ * Parses the filter spec string given by arg and either (1) simply places the
+ * result in filter_options if it is not yet populated or (2) combines it with
+ * the filter already in filter_options if it is already populated. In the case
+ * of (2), the filter specs are combined as if specified with 'combine:'.
+ *
+ * Dies and prints a user-facing message if an error occurs.
+ */
+void parse_list_objects_filter(
 	struct list_objects_filter_options *filter_options,
 	const char *arg);
 
@@ -65,13 +89,22 @@
 /*
  * Translates abbreviated numbers in the filter's filter_spec into their
  * fully-expanded forms (e.g., "limit:blob=1k" becomes "limit:blob=1024").
+ * Returns a string owned by the list_objects_filter_options object.
  *
- * This form should be used instead of the raw filter_spec field when
- * communicating with a remote process or subprocess.
+ * This form should be used instead of the raw list_objects_filter_spec()
+ * value when communicating with a remote process or subprocess.
  */
-void expand_list_objects_filter_spec(
-	const struct list_objects_filter_options *filter,
-	struct strbuf *expanded_spec);
+const char *expand_list_objects_filter_spec(
+	struct list_objects_filter_options *filter);
+
+/*
+ * Returns the filter spec string more or less in the form as the user
+ * entered it. This form of the filter_spec can be used in user-facing
+ * messages.  Returns a string owned by the list_objects_filter_options
+ * object.
+ */
+const char *list_objects_filter_spec(
+	struct list_objects_filter_options *filter);
 
 void list_objects_filter_release(
 	struct list_objects_filter_options *filter_options);
@@ -85,8 +118,9 @@
 
 void partial_clone_register(
 	const char *remote,
-	const struct list_objects_filter_options *filter_options);
-void partial_clone_get_default_filter_spec(
 	struct list_objects_filter_options *filter_options);
+void partial_clone_get_default_filter_spec(
+	struct list_objects_filter_options *filter_options,
+	const char *remote);
 
 #endif /* LIST_OBJECTS_FILTER_OPTIONS_H */
diff --git a/list-objects-filter.c b/list-objects-filter.c
index 36e1f77..1e8d4e7 100644
--- a/list-objects-filter.c
+++ b/list-objects-filter.c
@@ -26,11 +26,46 @@
  */
 #define FILTER_SHOWN_BUT_REVISIT (1<<21)
 
-/*
- * A filter for list-objects to omit ALL blobs from the traversal.
- * And to OPTIONALLY collect a list of the omitted OIDs.
- */
-struct filter_blobs_none_data {
+struct subfilter {
+	struct filter *filter;
+	struct oidset seen;
+	struct oidset omits;
+	struct object_id skip_tree;
+	unsigned is_skipping_tree : 1;
+};
+
+struct filter {
+	enum list_objects_filter_result (*filter_object_fn)(
+		struct repository *r,
+		enum list_objects_filter_situation filter_situation,
+		struct object *obj,
+		const char *pathname,
+		const char *filename,
+		struct oidset *omits,
+		void *filter_data);
+
+	/*
+	 * Optional. If this function is supplied and the filter needs
+	 * to collect omits, then this function is called once before
+	 * free_fn is called.
+	 *
+	 * This is required because the following two conditions hold:
+	 *
+	 *   a. A tree filter can add and remove objects as an object
+	 *      graph is traversed.
+	 *   b. A combine filter's omit set is the union of all its
+	 *      subfilters, which may include tree: filters.
+	 *
+	 * As such, the omits sets must be separate sets, and can only
+	 * be unioned after the traversal is completed.
+	 */
+	void (*finalize_omits_fn)(struct oidset *omits, void *filter_data);
+
+	void (*free_fn)(void *filter_data);
+
+	void *filter_data;
+
+	/* If non-NULL, the filter collects a list of the omitted OIDs here. */
 	struct oidset *omits;
 };
 
@@ -40,10 +75,9 @@
 	struct object *obj,
 	const char *pathname,
 	const char *filename,
+	struct oidset *omits,
 	void *filter_data_)
 {
-	struct filter_blobs_none_data *filter_data = filter_data_;
-
 	switch (filter_situation) {
 	default:
 		BUG("unknown filter_situation: %d", filter_situation);
@@ -61,24 +95,18 @@
 		assert(obj->type == OBJ_BLOB);
 		assert((obj->flags & SEEN) == 0);
 
-		if (filter_data->omits)
-			oidset_insert(filter_data->omits, &obj->oid);
+		if (omits)
+			oidset_insert(omits, &obj->oid);
 		return LOFR_MARK_SEEN; /* but not LOFR_DO_SHOW (hard omit) */
 	}
 }
 
-static void *filter_blobs_none__init(
-	struct oidset *omitted,
+static void filter_blobs_none__init(
 	struct list_objects_filter_options *filter_options,
-	filter_object_fn *filter_fn,
-	filter_free_fn *filter_free_fn)
+	struct filter *filter)
 {
-	struct filter_blobs_none_data *d = xcalloc(1, sizeof(*d));
-	d->omits = omitted;
-
-	*filter_fn = filter_blobs_none;
-	*filter_free_fn = free;
-	return d;
+	filter->filter_object_fn = filter_blobs_none;
+	filter->free_fn = free;
 }
 
 /*
@@ -86,8 +114,6 @@
  * Can OPTIONALLY collect a list of the omitted OIDs.
  */
 struct filter_trees_depth_data {
-	struct oidset *omits;
-
 	/*
 	 * Maps trees to the minimum depth at which they were seen. It is not
 	 * necessary to re-traverse a tree at deeper or equal depths than it has
@@ -110,16 +136,16 @@
 /* Returns 1 if the oid was in the omits set before it was invoked. */
 static int filter_trees_update_omits(
 	struct object *obj,
-	struct filter_trees_depth_data *filter_data,
+	struct oidset *omits,
 	int include_it)
 {
-	if (!filter_data->omits)
+	if (!omits)
 		return 0;
 
 	if (include_it)
-		return oidset_remove(filter_data->omits, &obj->oid);
+		return oidset_remove(omits, &obj->oid);
 	else
-		return oidset_insert(filter_data->omits, &obj->oid);
+		return oidset_insert(omits, &obj->oid);
 }
 
 static enum list_objects_filter_result filter_trees_depth(
@@ -128,6 +154,7 @@
 	struct object *obj,
 	const char *pathname,
 	const char *filename,
+	struct oidset *omits,
 	void *filter_data_)
 {
 	struct filter_trees_depth_data *filter_data = filter_data_;
@@ -152,7 +179,7 @@
 		return LOFR_ZERO;
 
 	case LOFS_BLOB:
-		filter_trees_update_omits(obj, filter_data, include_it);
+		filter_trees_update_omits(obj, omits, include_it);
 		return include_it ? LOFR_MARK_SEEN | LOFR_DO_SHOW : LOFR_ZERO;
 
 	case LOFS_BEGIN_TREE:
@@ -173,12 +200,12 @@
 			filter_res = LOFR_SKIP_TREE;
 		} else {
 			int been_omitted = filter_trees_update_omits(
-				obj, filter_data, include_it);
+				obj, omits, include_it);
 			seen_info->depth = filter_data->current_depth;
 
 			if (include_it)
 				filter_res = LOFR_DO_SHOW;
-			else if (filter_data->omits && !been_omitted)
+			else if (omits && !been_omitted)
 				/*
 				 * Must update omit information of children
 				 * recursively; they have not been omitted yet.
@@ -201,21 +228,18 @@
 	free(d);
 }
 
-static void *filter_trees_depth__init(
-	struct oidset *omitted,
+static void filter_trees_depth__init(
 	struct list_objects_filter_options *filter_options,
-	filter_object_fn *filter_fn,
-	filter_free_fn *filter_free_fn)
+	struct filter *filter)
 {
 	struct filter_trees_depth_data *d = xcalloc(1, sizeof(*d));
-	d->omits = omitted;
 	oidmap_init(&d->seen_at_depth, 0);
 	d->exclude_depth = filter_options->tree_exclude_depth;
 	d->current_depth = 0;
 
-	*filter_fn = filter_trees_depth;
-	*filter_free_fn = filter_trees_free;
-	return d;
+	filter->filter_data = d;
+	filter->filter_object_fn = filter_trees_depth;
+	filter->free_fn = filter_trees_free;
 }
 
 /*
@@ -223,7 +247,6 @@
  * And to OPTIONALLY collect a list of the omitted OIDs.
  */
 struct filter_blobs_limit_data {
-	struct oidset *omits;
 	unsigned long max_bytes;
 };
 
@@ -233,6 +256,7 @@
 	struct object *obj,
 	const char *pathname,
 	const char *filename,
+	struct oidset *omits,
 	void *filter_data_)
 {
 	struct filter_blobs_limit_data *filter_data = filter_data_;
@@ -270,30 +294,27 @@
 		if (object_length < filter_data->max_bytes)
 			goto include_it;
 
-		if (filter_data->omits)
-			oidset_insert(filter_data->omits, &obj->oid);
+		if (omits)
+			oidset_insert(omits, &obj->oid);
 		return LOFR_MARK_SEEN; /* but not LOFR_DO_SHOW (hard omit) */
 	}
 
 include_it:
-	if (filter_data->omits)
-		oidset_remove(filter_data->omits, &obj->oid);
+	if (omits)
+		oidset_remove(omits, &obj->oid);
 	return LOFR_MARK_SEEN | LOFR_DO_SHOW;
 }
 
-static void *filter_blobs_limit__init(
-	struct oidset *omitted,
+static void filter_blobs_limit__init(
 	struct list_objects_filter_options *filter_options,
-	filter_object_fn *filter_fn,
-	filter_free_fn *filter_free_fn)
+	struct filter *filter)
 {
 	struct filter_blobs_limit_data *d = xcalloc(1, sizeof(*d));
-	d->omits = omitted;
 	d->max_bytes = filter_options->blob_limit_value;
 
-	*filter_fn = filter_blobs_limit;
-	*filter_free_fn = free;
-	return d;
+	filter->filter_data = d;
+	filter->filter_object_fn = filter_blobs_limit;
+	filter->free_fn = free;
 }
 
 /*
@@ -307,12 +328,12 @@
  */
 struct frame {
 	/*
-	 * defval is the usual default include/exclude value that
+	 * default_match is the usual default include/exclude value that
 	 * should be inherited as we recurse into directories based
 	 * upon pattern matching of the directory itself or of a
 	 * containing directory.
 	 */
-	int defval;
+	enum pattern_match_result default_match;
 
 	/*
 	 * 1 if the directory (recursively) contains any provisionally
@@ -326,8 +347,7 @@
 };
 
 struct filter_sparse_data {
-	struct oidset *omits;
-	struct exclude_list el;
+	struct pattern_list pl;
 
 	size_t nr, alloc;
 	struct frame *array_frame;
@@ -339,11 +359,13 @@
 	struct object *obj,
 	const char *pathname,
 	const char *filename,
+	struct oidset *omits,
 	void *filter_data_)
 {
 	struct filter_sparse_data *filter_data = filter_data_;
-	int val, dtype;
+	int dtype;
 	struct frame *frame;
+	enum pattern_match_result match;
 
 	switch (filter_situation) {
 	default:
@@ -352,15 +374,15 @@
 	case LOFS_BEGIN_TREE:
 		assert(obj->type == OBJ_TREE);
 		dtype = DT_DIR;
-		val = is_excluded_from_list(pathname, strlen(pathname),
-					    filename, &dtype, &filter_data->el,
-					    r->index);
-		if (val < 0)
-			val = filter_data->array_frame[filter_data->nr - 1].defval;
+		match = path_matches_pattern_list(pathname, strlen(pathname),
+						  filename, &dtype, &filter_data->pl,
+						  r->index);
+		if (match == UNDECIDED)
+			match = filter_data->array_frame[filter_data->nr - 1].default_match;
 
 		ALLOC_GROW(filter_data->array_frame, filter_data->nr + 1,
 			   filter_data->alloc);
-		filter_data->array_frame[filter_data->nr].defval = val;
+		filter_data->array_frame[filter_data->nr].default_match = match;
 		filter_data->array_frame[filter_data->nr].child_prov_omit = 0;
 		filter_data->nr++;
 
@@ -414,14 +436,14 @@
 		frame = &filter_data->array_frame[filter_data->nr - 1];
 
 		dtype = DT_REG;
-		val = is_excluded_from_list(pathname, strlen(pathname),
-					    filename, &dtype, &filter_data->el,
+		match = path_matches_pattern_list(pathname, strlen(pathname),
+					    filename, &dtype, &filter_data->pl,
 					    r->index);
-		if (val < 0)
-			val = frame->defval;
-		if (val > 0) {
-			if (filter_data->omits)
-				oidset_remove(filter_data->omits, &obj->oid);
+		if (match == UNDECIDED)
+			match = frame->default_match;
+		if (match == MATCHED) {
+			if (omits)
+				oidset_remove(omits, &obj->oid);
 			return LOFR_MARK_SEEN | LOFR_DO_SHOW;
 		}
 
@@ -435,8 +457,8 @@
 		 * Leave the LOFR_ bits unset so that if the blob appears
 		 * again in the traversal, we will be asked again.
 		 */
-		if (filter_data->omits)
-			oidset_insert(filter_data->omits, &obj->oid);
+		if (omits)
+			oidset_insert(omits, &obj->oid);
 
 		/*
 		 * Remember that at least 1 blob in this tree was
@@ -456,33 +478,169 @@
 	free(d);
 }
 
-static void *filter_sparse_oid__init(
-	struct oidset *omitted,
+static void filter_sparse_oid__init(
 	struct list_objects_filter_options *filter_options,
-	filter_object_fn *filter_fn,
-	filter_free_fn *filter_free_fn)
+	struct filter *filter)
 {
 	struct filter_sparse_data *d = xcalloc(1, sizeof(*d));
-	d->omits = omitted;
-	if (add_excludes_from_blob_to_list(filter_options->sparse_oid_value,
-					   NULL, 0, &d->el) < 0)
-		die("could not load filter specification");
+	struct object_context oc;
+	struct object_id sparse_oid;
+
+	if (get_oid_with_context(the_repository,
+				 filter_options->sparse_oid_name,
+				 GET_OID_BLOB, &sparse_oid, &oc))
+		die(_("unable to access sparse blob in '%s'"),
+		    filter_options->sparse_oid_name);
+	if (add_patterns_from_blob_to_list(&sparse_oid, "", 0, &d->pl) < 0)
+		die(_("unable to parse sparse filter data in %s"),
+		    oid_to_hex(&sparse_oid));
 
 	ALLOC_GROW(d->array_frame, d->nr + 1, d->alloc);
-	d->array_frame[d->nr].defval = 0; /* default to include */
+	d->array_frame[d->nr].default_match = 0; /* default to include */
 	d->array_frame[d->nr].child_prov_omit = 0;
 	d->nr++;
 
-	*filter_fn = filter_sparse;
-	*filter_free_fn = filter_sparse_free;
-	return d;
+	filter->filter_data = d;
+	filter->filter_object_fn = filter_sparse;
+	filter->free_fn = filter_sparse_free;
 }
 
-typedef void *(*filter_init_fn)(
-	struct oidset *omitted,
+/* A filter which only shows objects shown by all sub-filters. */
+struct combine_filter_data {
+	struct subfilter *sub;
+	size_t nr;
+};
+
+static enum list_objects_filter_result process_subfilter(
+	struct repository *r,
+	enum list_objects_filter_situation filter_situation,
+	struct object *obj,
+	const char *pathname,
+	const char *filename,
+	struct subfilter *sub)
+{
+	enum list_objects_filter_result result;
+
+	/*
+	 * Check and update is_skipping_tree before oidset_contains so
+	 * that is_skipping_tree gets unset even when the object is
+	 * marked as seen.  As of this writing, no filter uses
+	 * LOFR_MARK_SEEN on trees that also uses LOFR_SKIP_TREE, so the
+	 * ordering is only theoretically important. Be cautious if you
+	 * change the order of the below checks and more filters have
+	 * been added!
+	 */
+	if (sub->is_skipping_tree) {
+		if (filter_situation == LOFS_END_TREE &&
+		    oideq(&obj->oid, &sub->skip_tree))
+			sub->is_skipping_tree = 0;
+		else
+			return LOFR_ZERO;
+	}
+	if (oidset_contains(&sub->seen, &obj->oid))
+		return LOFR_ZERO;
+
+	result = list_objects_filter__filter_object(
+		r, filter_situation, obj, pathname, filename, sub->filter);
+
+	if (result & LOFR_MARK_SEEN)
+		oidset_insert(&sub->seen, &obj->oid);
+
+	if (result & LOFR_SKIP_TREE) {
+		sub->is_skipping_tree = 1;
+		sub->skip_tree = obj->oid;
+	}
+
+	return result;
+}
+
+static enum list_objects_filter_result filter_combine(
+	struct repository *r,
+	enum list_objects_filter_situation filter_situation,
+	struct object *obj,
+	const char *pathname,
+	const char *filename,
+	struct oidset *omits,
+	void *filter_data)
+{
+	struct combine_filter_data *d = filter_data;
+	enum list_objects_filter_result combined_result =
+		LOFR_DO_SHOW | LOFR_MARK_SEEN | LOFR_SKIP_TREE;
+	size_t sub;
+
+	for (sub = 0; sub < d->nr; sub++) {
+		enum list_objects_filter_result sub_result = process_subfilter(
+			r, filter_situation, obj, pathname, filename,
+			&d->sub[sub]);
+		if (!(sub_result & LOFR_DO_SHOW))
+			combined_result &= ~LOFR_DO_SHOW;
+		if (!(sub_result & LOFR_MARK_SEEN))
+			combined_result &= ~LOFR_MARK_SEEN;
+		if (!d->sub[sub].is_skipping_tree)
+			combined_result &= ~LOFR_SKIP_TREE;
+	}
+
+	return combined_result;
+}
+
+static void filter_combine__free(void *filter_data)
+{
+	struct combine_filter_data *d = filter_data;
+	size_t sub;
+	for (sub = 0; sub < d->nr; sub++) {
+		list_objects_filter__free(d->sub[sub].filter);
+		oidset_clear(&d->sub[sub].seen);
+		if (d->sub[sub].omits.set.size)
+			BUG("expected oidset to be cleared already");
+	}
+	free(d->sub);
+}
+
+static void add_all(struct oidset *dest, struct oidset *src) {
+	struct oidset_iter iter;
+	struct object_id *src_oid;
+
+	oidset_iter_init(src, &iter);
+	while ((src_oid = oidset_iter_next(&iter)) != NULL)
+		oidset_insert(dest, src_oid);
+}
+
+static void filter_combine__finalize_omits(
+	struct oidset *omits,
+	void *filter_data)
+{
+	struct combine_filter_data *d = filter_data;
+	size_t sub;
+
+	for (sub = 0; sub < d->nr; sub++) {
+		add_all(omits, &d->sub[sub].omits);
+		oidset_clear(&d->sub[sub].omits);
+	}
+}
+
+static void filter_combine__init(
 	struct list_objects_filter_options *filter_options,
-	filter_object_fn *filter_fn,
-	filter_free_fn *filter_free_fn);
+	struct filter* filter)
+{
+	struct combine_filter_data *d = xcalloc(1, sizeof(*d));
+	size_t sub;
+
+	d->nr = filter_options->sub_nr;
+	d->sub = xcalloc(d->nr, sizeof(*d->sub));
+	for (sub = 0; sub < d->nr; sub++)
+		d->sub[sub].filter = list_objects_filter__init(
+			filter->omits ? &d->sub[sub].omits : NULL,
+			&filter_options->sub[sub]);
+
+	filter->filter_data = d;
+	filter->filter_object_fn = filter_combine;
+	filter->free_fn = filter_combine__free;
+	filter->finalize_omits_fn = filter_combine__finalize_omits;
+}
+
+typedef void (*filter_init_fn)(
+	struct list_objects_filter_options *filter_options,
+	struct filter *filter);
 
 /*
  * Must match "enum list_objects_filter_choice".
@@ -493,14 +651,14 @@
 	filter_blobs_limit__init,
 	filter_trees_depth__init,
 	filter_sparse_oid__init,
+	filter_combine__init,
 };
 
-void *list_objects_filter__init(
+struct filter *list_objects_filter__init(
 	struct oidset *omitted,
-	struct list_objects_filter_options *filter_options,
-	filter_object_fn *filter_fn,
-	filter_free_fn *filter_free_fn)
+	struct list_objects_filter_options *filter_options)
 {
+	struct filter *filter;
 	filter_init_fn init_fn;
 
 	assert((sizeof(s_filters) / sizeof(s_filters[0])) == LOFC__COUNT);
@@ -510,10 +668,44 @@
 		    filter_options->choice);
 
 	init_fn = s_filters[filter_options->choice];
-	if (init_fn)
-		return init_fn(omitted, filter_options,
-			       filter_fn, filter_free_fn);
-	*filter_fn = NULL;
-	*filter_free_fn = NULL;
-	return NULL;
+	if (!init_fn)
+		return NULL;
+
+	filter = xcalloc(1, sizeof(*filter));
+	filter->omits = omitted;
+	init_fn(filter_options, filter);
+	return filter;
+}
+
+enum list_objects_filter_result list_objects_filter__filter_object(
+	struct repository *r,
+	enum list_objects_filter_situation filter_situation,
+	struct object *obj,
+	const char *pathname,
+	const char *filename,
+	struct filter *filter)
+{
+	if (filter && (obj->flags & NOT_USER_GIVEN))
+		return filter->filter_object_fn(r, filter_situation, obj,
+						pathname, filename,
+						filter->omits,
+						filter->filter_data);
+	/*
+	 * No filter is active or user gave object explicitly. In this case,
+	 * always show the object (except when LOFS_END_TREE, since this tree
+	 * had already been shown when LOFS_BEGIN_TREE).
+	 */
+	if (filter_situation == LOFS_END_TREE)
+		return 0;
+	return LOFR_MARK_SEEN | LOFR_DO_SHOW;
+}
+
+void list_objects_filter__free(struct filter *filter)
+{
+	if (!filter)
+		return;
+	if (filter->finalize_omits_fn && filter->omits)
+		filter->finalize_omits_fn(filter->omits, filter->filter_data);
+	filter->free_fn(filter->filter_data);
+	free(filter);
 }
diff --git a/list-objects-filter.h b/list-objects-filter.h
index 1d45a4a..cfd784e 100644
--- a/list-objects-filter.h
+++ b/list-objects-filter.h
@@ -60,30 +60,36 @@
 	LOFS_BLOB
 };
 
-typedef enum list_objects_filter_result (*filter_object_fn)(
+struct filter;
+
+/*
+ * Constructor for the set of defined list-objects filters.
+ * The `omitted` set is optional. It is populated with objects that the
+ * filter excludes. This set should not be considered finalized until
+ * after list_objects_filter__free is called on the returned `struct
+ * filter *`.
+ */
+struct filter *list_objects_filter__init(
+	struct oidset *omitted,
+	struct list_objects_filter_options *filter_options);
+
+/*
+ * Lets `filter` decide how to handle the `obj`. If `filter` is NULL, this
+ * function behaves as expected if no filter is configured: all objects are
+ * included.
+ */
+enum list_objects_filter_result list_objects_filter__filter_object(
 	struct repository *r,
 	enum list_objects_filter_situation filter_situation,
 	struct object *obj,
 	const char *pathname,
 	const char *filename,
-	void *filter_data);
-
-typedef void (*filter_free_fn)(void *filter_data);
+	struct filter *filter);
 
 /*
- * Constructor for the set of defined list-objects filters.
- * Returns a generic "void *filter_data".
- *
- * The returned "filter_fn" will be used by traverse_commit_list()
- * to filter the results.
- *
- * The returned "filter_free_fn" is a destructor for the
- * filter_data.
+ * Destroys `filter` and finalizes the `omitted` set, if present. Does
+ * nothing if `filter` is null.
  */
-void *list_objects_filter__init(
-	struct oidset *omitted,
-	struct list_objects_filter_options *filter_options,
-	filter_object_fn *filter_fn,
-	filter_free_fn *filter_free_fn);
+void list_objects_filter__free(struct filter *filter);
 
 #endif /* LIST_OBJECTS_FILTER_H */
diff --git a/list-objects.c b/list-objects.c
index b5651dd..e19589b 100644
--- a/list-objects.c
+++ b/list-objects.c
@@ -18,8 +18,7 @@
 	show_object_fn show_object;
 	show_commit_fn show_commit;
 	void *show_data;
-	filter_object_fn filter_fn;
-	void *filter_data;
+	struct filter *filter;
 };
 
 static void process_blob(struct traversal_context *ctx,
@@ -29,7 +28,7 @@
 {
 	struct object *obj = &blob->object;
 	size_t pathlen;
-	enum list_objects_filter_result r = LOFR_MARK_SEEN | LOFR_DO_SHOW;
+	enum list_objects_filter_result r;
 
 	if (!ctx->revs->blob_objects)
 		return;
@@ -54,11 +53,10 @@
 
 	pathlen = path->len;
 	strbuf_addstr(path, name);
-	if ((obj->flags & NOT_USER_GIVEN) && ctx->filter_fn)
-		r = ctx->filter_fn(ctx->revs->repo,
-				   LOFS_BLOB, obj,
-				   path->buf, &path->buf[pathlen],
-				   ctx->filter_data);
+	r = list_objects_filter__filter_object(ctx->revs->repo,
+					       LOFS_BLOB, obj,
+					       path->buf, &path->buf[pathlen],
+					       ctx->filter);
 	if (r & LOFR_MARK_SEEN)
 		obj->flags |= SEEN;
 	if (r & LOFR_DO_SHOW)
@@ -157,7 +155,7 @@
 	struct object *obj = &tree->object;
 	struct rev_info *revs = ctx->revs;
 	int baselen = base->len;
-	enum list_objects_filter_result r = LOFR_MARK_SEEN | LOFR_DO_SHOW;
+	enum list_objects_filter_result r;
 	int failed_parse;
 
 	if (!revs->tree_objects)
@@ -186,11 +184,10 @@
 	}
 
 	strbuf_addstr(base, name);
-	if ((obj->flags & NOT_USER_GIVEN) && ctx->filter_fn)
-		r = ctx->filter_fn(ctx->revs->repo,
-				   LOFS_BEGIN_TREE, obj,
-				   base->buf, &base->buf[baselen],
-				   ctx->filter_data);
+	r = list_objects_filter__filter_object(ctx->revs->repo,
+					       LOFS_BEGIN_TREE, obj,
+					       base->buf, &base->buf[baselen],
+					       ctx->filter);
 	if (r & LOFR_MARK_SEEN)
 		obj->flags |= SEEN;
 	if (r & LOFR_DO_SHOW)
@@ -203,16 +200,14 @@
 	else if (!failed_parse)
 		process_tree_contents(ctx, tree, base);
 
-	if ((obj->flags & NOT_USER_GIVEN) && ctx->filter_fn) {
-		r = ctx->filter_fn(ctx->revs->repo,
-				   LOFS_END_TREE, obj,
-				   base->buf, &base->buf[baselen],
-				   ctx->filter_data);
-		if (r & LOFR_MARK_SEEN)
-			obj->flags |= SEEN;
-		if (r & LOFR_DO_SHOW)
-			ctx->show_object(obj, base->buf, ctx->show_data);
-	}
+	r = list_objects_filter__filter_object(ctx->revs->repo,
+					       LOFS_END_TREE, obj,
+					       base->buf, &base->buf[baselen],
+					       ctx->filter);
+	if (r & LOFR_MARK_SEEN)
+		obj->flags |= SEEN;
+	if (r & LOFR_DO_SHOW)
+		ctx->show_object(obj, base->buf, ctx->show_data);
 
 	strbuf_setlen(base, baselen);
 	free_tree_buffer(tree);
@@ -370,7 +365,9 @@
 		 * an uninteresting boundary commit may not have its tree
 		 * parsed yet, but we are not going to show them anyway
 		 */
-		if (get_commit_tree(commit)) {
+		if (!ctx->revs->tree_objects)
+			; /* do not bother loading tree */
+		else if (get_commit_tree(commit)) {
 			struct tree *tree = get_commit_tree(commit);
 			tree->object.flags |= NOT_USER_GIVEN;
 			add_pending_tree(ctx->revs, tree);
@@ -402,8 +399,7 @@
 	ctx.show_commit = show_commit;
 	ctx.show_object = show_object;
 	ctx.show_data = show_data;
-	ctx.filter_fn = NULL;
-	ctx.filter_data = NULL;
+	ctx.filter = NULL;
 	do_traverse(&ctx);
 }
 
@@ -416,17 +412,12 @@
 	struct oidset *omitted)
 {
 	struct traversal_context ctx;
-	filter_free_fn filter_free_fn = NULL;
 
 	ctx.revs = revs;
 	ctx.show_object = show_object;
 	ctx.show_commit = show_commit;
 	ctx.show_data = show_data;
-	ctx.filter_fn = NULL;
-
-	ctx.filter_data = list_objects_filter__init(omitted, filter_options,
-						    &ctx.filter_fn, &filter_free_fn);
+	ctx.filter = list_objects_filter__init(omitted, filter_options);
 	do_traverse(&ctx);
-	if (ctx.filter_data && filter_free_fn)
-		filter_free_fn(ctx.filter_data);
+	list_objects_filter__free(ctx.filter);
 }
diff --git a/ll-merge.c b/ll-merge.c
index 5b8d46a..d65a897 100644
--- a/ll-merge.c
+++ b/ll-merge.c
@@ -32,6 +32,20 @@
 	char *cmdline;
 };
 
+static struct attr_check *merge_attributes;
+static struct attr_check *load_merge_attributes(void)
+{
+	if (!merge_attributes)
+		merge_attributes = attr_check_initl("merge", "conflict-marker-size", NULL);
+	return merge_attributes;
+}
+
+void reset_merge_attributes(void)
+{
+	attr_check_free(merge_attributes);
+	merge_attributes = NULL;
+}
+
 /*
  * Built-in low-levels
  */
@@ -354,7 +368,7 @@
 	     struct index_state *istate,
 	     const struct ll_merge_options *opts)
 {
-	static struct attr_check *check;
+	struct attr_check *check = load_merge_attributes();
 	static const struct ll_merge_options default_opts;
 	const char *ll_driver_name = NULL;
 	int marker_size = DEFAULT_CONFLICT_MARKER_SIZE;
@@ -369,9 +383,6 @@
 		normalize_file(theirs, path, istate);
 	}
 
-	if (!check)
-		check = attr_check_initl("merge", "conflict-marker-size", NULL);
-
 	git_check_attr(istate, path, check);
 	ll_driver_name = check->items[0].value;
 	if (check->items[1].value) {
diff --git a/ll-merge.h b/ll-merge.h
index b9e2af1..e78973d 100644
--- a/ll-merge.h
+++ b/ll-merge.h
@@ -26,5 +26,6 @@
 	     const struct ll_merge_options *opts);
 
 int ll_merge_marker_size(struct index_state *istate, const char *path);
+void reset_merge_attributes(void);
 
 #endif
diff --git a/log-tree.c b/log-tree.c
index 1e56df6..923a299 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -77,6 +77,7 @@
 
 const struct name_decoration *get_name_decoration(const struct object *obj)
 {
+	load_ref_decorations(NULL, DECORATE_SHORT_REFS);
 	return lookup_decoration(&name_decoration, obj);
 }
 
@@ -677,9 +678,7 @@
 		raw = (opt->commit_format == CMIT_FMT_USERFORMAT);
 		format_display_notes(&commit->object.oid, &notebuf,
 				     get_log_output_encoding(), raw);
-		ctx.notes_message = notebuf.len
-			? strbuf_detach(&notebuf, NULL)
-			: xcalloc(1, 1);
+		ctx.notes_message = strbuf_detach(&notebuf, NULL);
 	}
 
 	/*
diff --git a/merge-recursive.c b/merge-recursive.c
index 6b812d6..42be7c9 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -4,30 +4,40 @@
  * The thieves were Alex Riesen and Johannes Schindelin, in June/July 2006
  */
 #include "cache.h"
-#include "config.h"
+#include "merge-recursive.h"
+
 #include "advice.h"
-#include "lockfile.h"
-#include "cache-tree.h"
-#include "object-store.h"
-#include "repository.h"
-#include "commit.h"
+#include "alloc.h"
+#include "attr.h"
 #include "blob.h"
 #include "builtin.h"
-#include "tree-walk.h"
+#include "cache-tree.h"
+#include "commit.h"
+#include "commit-reach.h"
+#include "config.h"
 #include "diff.h"
 #include "diffcore.h"
-#include "tag.h"
-#include "alloc.h"
-#include "unpack-trees.h"
-#include "string-list.h"
-#include "xdiff-interface.h"
-#include "ll-merge.h"
-#include "attr.h"
-#include "merge-recursive.h"
 #include "dir.h"
-#include "submodule.h"
+#include "ll-merge.h"
+#include "lockfile.h"
+#include "object-store.h"
+#include "repository.h"
 #include "revision.h"
-#include "commit-reach.h"
+#include "string-list.h"
+#include "submodule.h"
+#include "tag.h"
+#include "tree-walk.h"
+#include "unpack-trees.h"
+#include "xdiff-interface.h"
+
+struct merge_options_internal {
+	int call_depth;
+	int needed_rename_limit;
+	struct hashmap current_file_dir_set;
+	struct string_list df_conflict_file_set;
+	struct unpack_trees_options unpack_opts;
+	struct index_state orig_index;
+};
 
 struct path_hashmap_entry {
 	struct hashmap_entry e;
@@ -35,14 +45,16 @@
 };
 
 static int path_hashmap_cmp(const void *cmp_data,
-			    const void *entry,
-			    const void *entry_or_key,
+			    const struct hashmap_entry *eptr,
+			    const struct hashmap_entry *entry_or_key,
 			    const void *keydata)
 {
-	const struct path_hashmap_entry *a = entry;
-	const struct path_hashmap_entry *b = entry_or_key;
+	const struct path_hashmap_entry *a, *b;
 	const char *key = keydata;
 
+	a = container_of(eptr, const struct path_hashmap_entry, e);
+	b = container_of(entry_or_key, const struct path_hashmap_entry, e);
+
 	if (ignore_case)
 		return strcasecmp(a->path, key ? key : b->path);
 	else
@@ -54,6 +66,24 @@
 	return ignore_case ? strihash(path) : strhash(path);
 }
 
+/*
+ * For dir_rename_entry, directory names are stored as a full path from the
+ * toplevel of the repository and do not include a trailing '/'.  Also:
+ *
+ *   dir:                original name of directory being renamed
+ *   non_unique_new_dir: if true, could not determine new_dir
+ *   new_dir:            final name of directory being renamed
+ *   possible_new_dirs:  temporary used to help determine new_dir; see comments
+ *                       in get_directory_renames() for details
+ */
+struct dir_rename_entry {
+	struct hashmap_entry ent;
+	char *dir;
+	unsigned non_unique_new_dir:1;
+	struct strbuf new_dir;
+	struct string_list possible_new_dirs;
+};
+
 static struct dir_rename_entry *dir_rename_find_entry(struct hashmap *hashmap,
 						      char *dir)
 {
@@ -61,18 +91,20 @@
 
 	if (dir == NULL)
 		return NULL;
-	hashmap_entry_init(&key, strhash(dir));
+	hashmap_entry_init(&key.ent, strhash(dir));
 	key.dir = dir;
-	return hashmap_get(hashmap, &key, NULL);
+	return hashmap_get_entry(hashmap, &key, ent, NULL);
 }
 
 static int dir_rename_cmp(const void *unused_cmp_data,
-			  const void *entry,
-			  const void *entry_or_key,
+			  const struct hashmap_entry *eptr,
+			  const struct hashmap_entry *entry_or_key,
 			  const void *unused_keydata)
 {
-	const struct dir_rename_entry *e1 = entry;
-	const struct dir_rename_entry *e2 = entry_or_key;
+	const struct dir_rename_entry *e1, *e2;
+
+	e1 = container_of(eptr, const struct dir_rename_entry, ent);
+	e2 = container_of(entry_or_key, const struct dir_rename_entry, ent);
 
 	return strcmp(e1->dir, e2->dir);
 }
@@ -85,34 +117,46 @@
 static void dir_rename_entry_init(struct dir_rename_entry *entry,
 				  char *directory)
 {
-	hashmap_entry_init(entry, strhash(directory));
+	hashmap_entry_init(&entry->ent, strhash(directory));
 	entry->dir = directory;
 	entry->non_unique_new_dir = 0;
 	strbuf_init(&entry->new_dir, 0);
 	string_list_init(&entry->possible_new_dirs, 0);
 }
 
+struct collision_entry {
+	struct hashmap_entry ent;
+	char *target_file;
+	struct string_list source_files;
+	unsigned reported_already:1;
+};
+
 static struct collision_entry *collision_find_entry(struct hashmap *hashmap,
 						    char *target_file)
 {
 	struct collision_entry key;
 
-	hashmap_entry_init(&key, strhash(target_file));
+	hashmap_entry_init(&key.ent, strhash(target_file));
 	key.target_file = target_file;
-	return hashmap_get(hashmap, &key, NULL);
+	return hashmap_get_entry(hashmap, &key, ent, NULL);
 }
 
-static int collision_cmp(void *unused_cmp_data,
-			 const struct collision_entry *e1,
-			 const struct collision_entry *e2,
+static int collision_cmp(const void *unused_cmp_data,
+			 const struct hashmap_entry *eptr,
+			 const struct hashmap_entry *entry_or_key,
 			 const void *unused_keydata)
 {
+	const struct collision_entry *e1, *e2;
+
+	e1 = container_of(eptr, const struct collision_entry, ent);
+	e2 = container_of(entry_or_key, const struct collision_entry, ent);
+
 	return strcmp(e1->target_file, e2->target_file);
 }
 
 static void collision_init(struct hashmap *map)
 {
-	hashmap_init(map, (hashmap_cmp_fn) collision_cmp, NULL, 0);
+	hashmap_init(map, collision_cmp, NULL, 0);
 }
 
 static void flush_output(struct merge_options *opt)
@@ -284,7 +328,8 @@
 
 static int show(struct merge_options *opt, int v)
 {
-	return (!opt->call_depth && opt->verbosity >= v) || opt->verbosity >= 5;
+	return (!opt->priv->call_depth && opt->verbosity >= v) ||
+		opt->verbosity >= 5;
 }
 
 __attribute__((format (printf, 3, 4)))
@@ -295,7 +340,7 @@
 	if (!show(opt, v))
 		return;
 
-	strbuf_addchars(&opt->obuf, ' ', opt->call_depth * 2);
+	strbuf_addchars(&opt->obuf, ' ', opt->priv->call_depth * 2);
 
 	va_start(ap, fmt);
 	strbuf_vaddf(&opt->obuf, fmt, ap);
@@ -310,7 +355,7 @@
 {
 	struct merge_remote_desc *desc;
 
-	strbuf_addchars(&opt->obuf, ' ', opt->call_depth * 2);
+	strbuf_addchars(&opt->obuf, ' ', opt->priv->call_depth * 2);
 	desc = merge_remote_util(commit);
 	if (desc)
 		strbuf_addf(&opt->obuf, "virtual %s\n", desc->name);
@@ -358,6 +403,11 @@
 	return ret;
 }
 
+static inline int merge_detect_rename(struct merge_options *opt)
+{
+	return (opt->detect_renames >= 0) ? opt->detect_renames : 1;
+}
+
 static void init_tree_desc_from_tree(struct tree_desc *desc, struct tree *tree)
 {
 	parse_tree(tree);
@@ -373,74 +423,43 @@
 	struct tree_desc t[3];
 	struct index_state tmp_index = { NULL };
 
-	memset(&opt->unpack_opts, 0, sizeof(opt->unpack_opts));
-	if (opt->call_depth)
-		opt->unpack_opts.index_only = 1;
+	memset(&opt->priv->unpack_opts, 0, sizeof(opt->priv->unpack_opts));
+	if (opt->priv->call_depth)
+		opt->priv->unpack_opts.index_only = 1;
 	else
-		opt->unpack_opts.update = 1;
-	opt->unpack_opts.merge = 1;
-	opt->unpack_opts.head_idx = 2;
-	opt->unpack_opts.fn = threeway_merge;
-	opt->unpack_opts.src_index = opt->repo->index;
-	opt->unpack_opts.dst_index = &tmp_index;
-	opt->unpack_opts.aggressive = !merge_detect_rename(opt);
-	setup_unpack_trees_porcelain(&opt->unpack_opts, "merge");
+		opt->priv->unpack_opts.update = 1;
+	opt->priv->unpack_opts.merge = 1;
+	opt->priv->unpack_opts.head_idx = 2;
+	opt->priv->unpack_opts.fn = threeway_merge;
+	opt->priv->unpack_opts.src_index = opt->repo->index;
+	opt->priv->unpack_opts.dst_index = &tmp_index;
+	opt->priv->unpack_opts.aggressive = !merge_detect_rename(opt);
+	setup_unpack_trees_porcelain(&opt->priv->unpack_opts, "merge");
 
 	init_tree_desc_from_tree(t+0, common);
 	init_tree_desc_from_tree(t+1, head);
 	init_tree_desc_from_tree(t+2, merge);
 
-	rc = unpack_trees(3, t, &opt->unpack_opts);
+	rc = unpack_trees(3, t, &opt->priv->unpack_opts);
 	cache_tree_free(&opt->repo->index->cache_tree);
 
 	/*
-	 * Update opt->repo->index to match the new results, AFTER saving a copy
-	 * in opt->orig_index.  Update src_index to point to the saved copy.
-	 * (verify_uptodate() checks src_index, and the original index is
-	 * the one that had the necessary modification timestamps.)
+	 * Update opt->repo->index to match the new results, AFTER saving a
+	 * copy in opt->priv->orig_index.  Update src_index to point to the
+	 * saved copy.  (verify_uptodate() checks src_index, and the original
+	 * index is the one that had the necessary modification timestamps.)
 	 */
-	opt->orig_index = *opt->repo->index;
+	opt->priv->orig_index = *opt->repo->index;
 	*opt->repo->index = tmp_index;
-	opt->unpack_opts.src_index = &opt->orig_index;
+	opt->priv->unpack_opts.src_index = &opt->priv->orig_index;
 
 	return rc;
 }
 
 static void unpack_trees_finish(struct merge_options *opt)
 {
-	discard_index(&opt->orig_index);
-	clear_unpack_trees_porcelain(&opt->unpack_opts);
-}
-
-struct tree *write_tree_from_memory(struct merge_options *opt)
-{
-	struct tree *result = NULL;
-	struct index_state *istate = opt->repo->index;
-
-	if (unmerged_index(istate)) {
-		int i;
-		fprintf(stderr, "BUG: There are unmerged index entries:\n");
-		for (i = 0; i < istate->cache_nr; i++) {
-			const struct cache_entry *ce = istate->cache[i];
-			if (ce_stage(ce))
-				fprintf(stderr, "BUG: %d %.*s\n", ce_stage(ce),
-					(int)ce_namelen(ce), ce->name);
-		}
-		BUG("unmerged index entries in merge-recursive.c");
-	}
-
-	if (!istate->cache_tree)
-		istate->cache_tree = cache_tree();
-
-	if (!cache_tree_fully_valid(istate->cache_tree) &&
-	    cache_tree_update(istate, 0) < 0) {
-		err(opt, _("error building trees"));
-		return NULL;
-	}
-
-	result = lookup_tree(opt->repo, &istate->cache_tree->oid);
-
-	return result;
+	discard_index(&opt->priv->orig_index);
+	clear_unpack_trees_porcelain(&opt->priv->unpack_opts);
 }
 
 static int save_files_dirs(const struct object_id *oid,
@@ -454,8 +473,8 @@
 	strbuf_addstr(base, path);
 
 	FLEX_ALLOC_MEM(entry, path, base->buf, base->len);
-	hashmap_entry_init(entry, path_hash(entry->path));
-	hashmap_add(&opt->current_file_dir_set, entry);
+	hashmap_entry_init(&entry->e, path_hash(entry->path));
+	hashmap_add(&opt->priv->current_file_dir_set, &entry->e);
 
 	strbuf_setlen(base, baselen);
 	return (S_ISDIR(mode) ? READ_TREE_RECURSIVE : 0);
@@ -586,7 +605,7 @@
 	 * If we're merging merge-bases, we don't want to bother with
 	 * any working directory changes.
 	 */
-	if (opt->call_depth)
+	if (opt->priv->call_depth)
 		return;
 
 	/* Ensure D/F conflicts are adjacent in the entries list. */
@@ -598,7 +617,7 @@
 	df_sorted_entries.cmp = string_list_df_name_compare;
 	string_list_sort(&df_sorted_entries);
 
-	string_list_clear(&opt->df_conflict_file_set, 1);
+	string_list_clear(&opt->priv->df_conflict_file_set, 1);
 	for (i = 0; i < df_sorted_entries.nr; i++) {
 		const char *path = df_sorted_entries.items[i].string;
 		int len = strlen(path);
@@ -614,7 +633,7 @@
 		    len > last_len &&
 		    memcmp(path, last_file, last_len) == 0 &&
 		    path[last_len] == '/') {
-			string_list_insert(&opt->df_conflict_file_set, last_file);
+			string_list_insert(&opt->priv->df_conflict_file_set, last_file);
 		}
 
 		/*
@@ -681,8 +700,8 @@
 static int remove_file(struct merge_options *opt, int clean,
 		       const char *path, int no_wd)
 {
-	int update_cache = opt->call_depth || clean;
-	int update_working_directory = !opt->call_depth && !no_wd;
+	int update_cache = opt->priv->call_depth || clean;
+	int update_working_directory = !opt->priv->call_depth && !no_wd;
 
 	if (update_cache) {
 		if (remove_file_from_index(opt->repo->index, path))
@@ -712,7 +731,9 @@
 			out->buf[i] = '_';
 }
 
-static char *unique_path(struct merge_options *opt, const char *path, const char *branch)
+static char *unique_path(struct merge_options *opt,
+			 const char *path,
+			 const char *branch)
 {
 	struct path_hashmap_entry *entry;
 	struct strbuf newpath = STRBUF_INIT;
@@ -723,16 +744,16 @@
 	add_flattened_path(&newpath, branch);
 
 	base_len = newpath.len;
-	while (hashmap_get_from_hash(&opt->current_file_dir_set,
+	while (hashmap_get_from_hash(&opt->priv->current_file_dir_set,
 				     path_hash(newpath.buf), newpath.buf) ||
-	       (!opt->call_depth && file_exists(newpath.buf))) {
+	       (!opt->priv->call_depth && file_exists(newpath.buf))) {
 		strbuf_setlen(&newpath, base_len);
 		strbuf_addf(&newpath, "_%d", suffix++);
 	}
 
 	FLEX_ALLOC_MEM(entry, path, newpath.buf, newpath.len);
-	hashmap_entry_init(entry, path_hash(entry->path));
-	hashmap_add(&opt->current_file_dir_set, entry);
+	hashmap_entry_init(&entry->e, path_hash(entry->path));
+	hashmap_add(&opt->priv->current_file_dir_set, &entry->e);
 	return strbuf_detach(&newpath, NULL);
 }
 
@@ -764,7 +785,8 @@
 
 	strbuf_release(&dirpath);
 	return check_working_copy && !lstat(path, &st) && S_ISDIR(st.st_mode) &&
-		!(empty_ok && is_empty_dir(path));
+		!(empty_ok && is_empty_dir(path)) &&
+		!has_symlink_leading_path(path, strlen(path));
 }
 
 /*
@@ -774,7 +796,7 @@
 static int was_tracked_and_matches(struct merge_options *opt, const char *path,
 				   const struct diff_filespec *blob)
 {
-	int pos = index_name_pos(&opt->orig_index, path, strlen(path));
+	int pos = index_name_pos(&opt->priv->orig_index, path, strlen(path));
 	struct cache_entry *ce;
 
 	if (0 > pos)
@@ -782,7 +804,7 @@
 		return 0;
 
 	/* See if the file we were tracking before matches */
-	ce = opt->orig_index.cache[pos];
+	ce = opt->priv->orig_index.cache[pos];
 	return (oid_eq(&ce->oid, &blob->oid) && ce->ce_mode == blob->mode);
 }
 
@@ -791,7 +813,7 @@
  */
 static int was_tracked(struct merge_options *opt, const char *path)
 {
-	int pos = index_name_pos(&opt->orig_index, path, strlen(path));
+	int pos = index_name_pos(&opt->priv->orig_index, path, strlen(path));
 
 	if (0 <= pos)
 		/* we were tracking this path before the merge */
@@ -848,12 +870,12 @@
 	struct cache_entry *ce;
 	int dirty = 1;
 
-	if (opt->call_depth || !was_tracked(opt, path))
+	if (opt->priv->call_depth || !was_tracked(opt, path))
 		return !dirty;
 
-	ce = index_file_exists(opt->unpack_opts.src_index,
+	ce = index_file_exists(opt->priv->unpack_opts.src_index,
 			       path, strlen(path), ignore_case);
-	dirty = verify_uptodate(ce, &opt->unpack_opts) != 0;
+	dirty = verify_uptodate(ce, &opt->priv->unpack_opts) != 0;
 	return dirty;
 }
 
@@ -863,8 +885,8 @@
 	const char *msg = _("failed to create path '%s'%s");
 
 	/* Unlink any D/F conflict files that are in the way */
-	for (i = 0; i < opt->df_conflict_file_set.nr; i++) {
-		const char *df_path = opt->df_conflict_file_set.items[i].string;
+	for (i = 0; i < opt->priv->df_conflict_file_set.nr; i++) {
+		const char *df_path = opt->priv->df_conflict_file_set.items[i].string;
 		size_t pathlen = strlen(path);
 		size_t df_pathlen = strlen(df_path);
 		if (df_pathlen < pathlen &&
@@ -874,7 +896,7 @@
 			       _("Removing %s to make room for subdirectory\n"),
 			       df_path);
 			unlink(df_path);
-			unsorted_string_list_delete_item(&opt->df_conflict_file_set,
+			unsorted_string_list_delete_item(&opt->priv->df_conflict_file_set,
 							 i, 0);
 			break;
 		}
@@ -915,7 +937,7 @@
 {
 	int ret = 0;
 
-	if (opt->call_depth)
+	if (opt->priv->call_depth)
 		update_wd = 0;
 
 	if (update_wd) {
@@ -934,9 +956,11 @@
 		}
 
 		buf = read_object_file(&contents->oid, &type, &size);
-		if (!buf)
-			return err(opt, _("cannot read object %s '%s'"),
-				   oid_to_hex(&contents->oid), path);
+		if (!buf) {
+			ret = err(opt, _("cannot read object %s '%s'"),
+				  oid_to_hex(&contents->oid), path);
+			goto free_buf;
+		}
 		if (type != OBJ_BLOB) {
 			ret = err(opt, _("blob expected for %s '%s'"),
 				  oid_to_hex(&contents->oid), path);
@@ -944,7 +968,8 @@
 		}
 		if (S_ISREG(contents->mode)) {
 			struct strbuf strbuf = STRBUF_INIT;
-			if (convert_to_working_tree(opt->repo->index, path, buf, size, &strbuf)) {
+			if (convert_to_working_tree(opt->repo->index,
+						    path, buf, size, &strbuf)) {
 				free(buf);
 				size = strbuf.len;
 				buf = strbuf_detach(&strbuf, NULL);
@@ -997,7 +1022,7 @@
 		       const char *path)
 {
 	return update_file_flags(opt, contents, path,
-				 opt->call_depth || clean, !opt->call_depth);
+				 opt->priv->call_depth || clean, !opt->priv->call_depth);
 }
 
 /* Low level file merging, update and removal */
@@ -1019,22 +1044,22 @@
 {
 	mmfile_t orig, src1, src2;
 	struct ll_merge_options ll_opts = {0};
-	char *base_name, *name1, *name2;
+	char *base, *name1, *name2;
 	int merge_status;
 
 	ll_opts.renormalize = opt->renormalize;
 	ll_opts.extra_marker_size = extra_marker_size;
 	ll_opts.xdl_opts = opt->xdl_opts;
 
-	if (opt->call_depth) {
+	if (opt->priv->call_depth) {
 		ll_opts.virtual_ancestor = 1;
 		ll_opts.variant = 0;
 	} else {
 		switch (opt->recursive_variant) {
-		case MERGE_RECURSIVE_OURS:
+		case MERGE_VARIANT_OURS:
 			ll_opts.variant = XDL_MERGE_FAVOR_OURS;
 			break;
-		case MERGE_RECURSIVE_THEIRS:
+		case MERGE_VARIANT_THEIRS:
 			ll_opts.variant = XDL_MERGE_FAVOR_THEIRS;
 			break;
 		default:
@@ -1043,16 +1068,13 @@
 		}
 	}
 
-	assert(a->path && b->path);
-	if (strcmp(a->path, b->path) ||
-	    (opt->ancestor != NULL && strcmp(a->path, o->path) != 0)) {
-		base_name = opt->ancestor == NULL ? NULL :
-			mkpathdup("%s:%s", opt->ancestor, o->path);
+	assert(a->path && b->path && o->path && opt->ancestor);
+	if (strcmp(a->path, b->path) || strcmp(a->path, o->path) != 0) {
+		base  = mkpathdup("%s:%s", opt->ancestor, o->path);
 		name1 = mkpathdup("%s:%s", branch1, a->path);
 		name2 = mkpathdup("%s:%s", branch2, b->path);
 	} else {
-		base_name = opt->ancestor == NULL ? NULL :
-			mkpathdup("%s", opt->ancestor);
+		base  = mkpathdup("%s", opt->ancestor);
 		name1 = mkpathdup("%s", branch1);
 		name2 = mkpathdup("%s", branch2);
 	}
@@ -1061,11 +1083,11 @@
 	read_mmblob(&src1, &a->oid);
 	read_mmblob(&src2, &b->oid);
 
-	merge_status = ll_merge(result_buf, a->path, &orig, base_name,
+	merge_status = ll_merge(result_buf, a->path, &orig, base,
 				&src1, name1, &src2, name2,
 				opt->repo->index, &ll_opts);
 
-	free(base_name);
+	free(base);
 	free(name1);
 	free(name2);
 	free(orig.ptr);
@@ -1160,7 +1182,7 @@
 	struct object_array merges;
 
 	int i;
-	int search = !opt->call_depth;
+	int search = !opt->priv->call_depth;
 
 	/* store a in result in case we fail */
 	oidcpy(result, a);
@@ -1344,15 +1366,15 @@
 							&b->oid);
 		} else if (S_ISLNK(a->mode)) {
 			switch (opt->recursive_variant) {
-			case MERGE_RECURSIVE_NORMAL:
+			case MERGE_VARIANT_NORMAL:
 				oidcpy(&result->blob.oid, &a->oid);
 				if (!oid_eq(&a->oid, &b->oid))
 					result->clean = 0;
 				break;
-			case MERGE_RECURSIVE_OURS:
+			case MERGE_VARIANT_OURS:
 				oidcpy(&result->blob.oid, &a->oid);
 				break;
-			case MERGE_RECURSIVE_THEIRS:
+			case MERGE_VARIANT_THEIRS:
 				oidcpy(&result->blob.oid, &b->oid);
 				break;
 			}
@@ -1378,10 +1400,11 @@
 	const struct rename *ren = ci->ren1;
 	const struct diff_filespec *dest = ren->pair->two;
 	char *file_path = dest->path;
-	int mark_conflicted = (opt->detect_directory_renames == 1);
+	int mark_conflicted = (opt->detect_directory_renames ==
+			       MERGE_DIRECTORY_RENAMES_CONFLICT);
 	assert(ren->dir_rename_original_dest);
 
-	if (!opt->call_depth && would_lose_untracked(opt, dest->path)) {
+	if (!opt->priv->call_depth && would_lose_untracked(opt, dest->path)) {
 		mark_conflicted = 1;
 		file_path = unique_path(opt, dest->path, ren->branch);
 		output(opt, 1, _("Error: Refusing to lose untracked file at %s; "
@@ -1424,12 +1447,12 @@
 	const char *update_path = path;
 	int ret = 0;
 
-	if (dir_in_way(opt->repo->index, path, !opt->call_depth, 0) ||
-	    (!opt->call_depth && would_lose_untracked(opt, path))) {
+	if (dir_in_way(opt->repo->index, path, !opt->priv->call_depth, 0) ||
+	    (!opt->priv->call_depth && would_lose_untracked(opt, path))) {
 		update_path = alt_path = unique_path(opt, path, change_branch);
 	}
 
-	if (opt->call_depth) {
+	if (opt->priv->call_depth) {
 		/*
 		 * We cannot arbitrarily accept either a_sha or b_sha as
 		 * correct; since there is no true "middle point" between
@@ -1504,14 +1527,14 @@
 				     opt->branch2 : opt->branch1);
 
 	if (handle_change_delete(opt,
-				 opt->call_depth ? orig->path : dest->path,
-				 opt->call_depth ? NULL : orig->path,
+				 opt->priv->call_depth ? orig->path : dest->path,
+				 opt->priv->call_depth ? NULL : orig->path,
 				 orig, dest,
 				 rename_branch, delete_branch,
 				 _("rename"), _("renamed")))
 		return -1;
 
-	if (opt->call_depth)
+	if (opt->priv->call_depth)
 		return remove_file_from_index(opt->repo->index, dest->path);
 	else
 		return update_stages(opt, dest->path, NULL,
@@ -1548,7 +1571,7 @@
 	/*
 	 * In the recursive case, we just opt to undo renames
 	 */
-	if (opt->call_depth && (prev_path1 || prev_path2)) {
+	if (opt->priv->call_depth && (prev_path1 || prev_path2)) {
 		/* Put first file (a->oid, a->mode) in its original spot */
 		if (prev_path1) {
 			if (update_file(opt, 1, a, prev_path1))
@@ -1577,10 +1600,10 @@
 	/* Remove rename sources if rename/add or rename/rename(2to1) */
 	if (prev_path1)
 		remove_file(opt, 1, prev_path1,
-			    opt->call_depth || would_lose_untracked(opt, prev_path1));
+			    opt->priv->call_depth || would_lose_untracked(opt, prev_path1));
 	if (prev_path2)
 		remove_file(opt, 1, prev_path2,
-			    opt->call_depth || would_lose_untracked(opt, prev_path2));
+			    opt->priv->call_depth || would_lose_untracked(opt, prev_path2));
 
 	/*
 	 * Remove the collision path, if it wouldn't cause dirty contents
@@ -1622,12 +1645,12 @@
 	null.mode = 0;
 
 	if (merge_mode_and_contents(opt, &null, a, b, collide_path,
-				    branch1, branch2, opt->call_depth * 2, &mfi))
+				    branch1, branch2, opt->priv->call_depth * 2, &mfi))
 		return -1;
 	mfi.clean &= !alt_path;
 	if (update_file(opt, mfi.clean, &mfi.blob, update_path))
 		return -1;
-	if (!mfi.clean && !opt->call_depth &&
+	if (!mfi.clean && !opt->priv->call_depth &&
 	    update_stages(opt, collide_path, NULL, a, b))
 		return -1;
 	free(alt_path);
@@ -1667,7 +1690,7 @@
 				    &ci->ren1->src_entry->stages[other_stage],
 				    prev_path_desc,
 				    opt->branch1, opt->branch2,
-				    1 + opt->call_depth * 2, &mfi))
+				    1 + opt->priv->call_depth * 2, &mfi))
 		return -1;
 	free(prev_path_desc);
 
@@ -1685,7 +1708,7 @@
 				    const char *branch2)
 {
 	char *new_path = NULL;
-	if (dir_in_way(opt->repo->index, path, !opt->call_depth, 0)) {
+	if (dir_in_way(opt->repo->index, path, !opt->priv->call_depth, 0)) {
 		new_path = unique_path(opt, path, branch1);
 		output(opt, 1, _("%s is a directory in %s adding "
 			       "as %s instead"),
@@ -1716,17 +1739,17 @@
 	       "rename \"%s\"->\"%s\" in \"%s\"%s"),
 	       o->path, a->path, ci->ren1->branch,
 	       o->path, b->path, ci->ren2->branch,
-	       opt->call_depth ? _(" (left unresolved)") : "");
+	       opt->priv->call_depth ? _(" (left unresolved)") : "");
 
 	path_desc = xstrfmt("%s and %s, both renamed from %s",
 			    a->path, b->path, o->path);
 	if (merge_mode_and_contents(opt, o, a, b, path_desc,
 				    ci->ren1->branch, ci->ren2->branch,
-				    opt->call_depth * 2, &mfi))
+				    opt->priv->call_depth * 2, &mfi))
 		return -1;
 	free(path_desc);
 
-	if (opt->call_depth) {
+	if (opt->priv->call_depth) {
 		/*
 		 * FIXME: For rename/add-source conflicts (if we could detect
 		 * such), this is wrong.  We should instead find a unique
@@ -1841,12 +1864,12 @@
 				    &ci->ren1->src_entry->stages[ostage1],
 				    path_side_1_desc,
 				    opt->branch1, opt->branch2,
-				    1 + opt->call_depth * 2, &mfi_c1) ||
+				    1 + opt->priv->call_depth * 2, &mfi_c1) ||
 	    merge_mode_and_contents(opt, b,
 				    &ci->ren2->src_entry->stages[ostage2],
 				    c2, path_side_2_desc,
 				    opt->branch1, opt->branch2,
-				    1 + opt->call_depth * 2, &mfi_c2))
+				    1 + opt->priv->call_depth * 2, &mfi_c2))
 		return -1;
 	free(path_side_1_desc);
 	free(path_side_2_desc);
@@ -1880,17 +1903,15 @@
 	 */
 	if (opts.detect_rename > DIFF_DETECT_RENAME)
 		opts.detect_rename = DIFF_DETECT_RENAME;
-	opts.rename_limit = opt->merge_rename_limit >= 0 ? opt->merge_rename_limit :
-			    opt->diff_rename_limit >= 0 ? opt->diff_rename_limit :
-			    1000;
+	opts.rename_limit = (opt->rename_limit >= 0) ? opt->rename_limit : 1000;
 	opts.rename_score = opt->rename_score;
 	opts.show_rename_progress = opt->show_rename_progress;
 	opts.output_format = DIFF_FORMAT_NO_OUTPUT;
 	diff_setup_done(&opts);
 	diff_tree_oid(&o_tree->object.oid, &tree->object.oid, "", &opts);
 	diffcore_std(&opts);
-	if (opts.needed_rename_limit > opt->needed_rename_limit)
-		opt->needed_rename_limit = opts.needed_rename_limit;
+	if (opts.needed_rename_limit > opt->priv->needed_rename_limit)
+		opt->priv->needed_rename_limit = opts.needed_rename_limit;
 
 	ret = xmalloc(sizeof(*ret));
 	*ret = diff_queued_diff;
@@ -2001,7 +2022,7 @@
 
 	for (i = 0; i < items_to_remove->nr; i++) {
 		entry = items_to_remove->items[i].util;
-		hashmap_remove(dir_renames, entry, NULL);
+		hashmap_remove(dir_renames, &entry->ent, NULL);
 	}
 	string_list_clear(items_to_remove, 0);
 }
@@ -2124,8 +2145,8 @@
 	struct string_list remove_from_head = STRING_LIST_INIT_NODUP;
 	struct string_list remove_from_merge = STRING_LIST_INIT_NODUP;
 
-	hashmap_iter_init(dir_re_head, &iter);
-	while ((head_ent = hashmap_iter_next(&iter))) {
+	hashmap_for_each_entry(dir_re_head, &iter, head_ent,
+				ent /* member name */) {
 		merge_ent = dir_rename_find_entry(dir_re_merge, head_ent->dir);
 		if (merge_ent &&
 		    !head_ent->non_unique_new_dir &&
@@ -2149,8 +2170,8 @@
 	remove_hashmap_entries(dir_re_head, &remove_from_head);
 	remove_hashmap_entries(dir_re_merge, &remove_from_merge);
 
-	hashmap_iter_init(dir_re_merge, &iter);
-	while ((merge_ent = hashmap_iter_next(&iter))) {
+	hashmap_for_each_entry(dir_re_merge, &iter, merge_ent,
+				ent /* member name */) {
 		head_ent = dir_rename_find_entry(dir_re_head, merge_ent->dir);
 		if (tree_has_path(opt->repo, merge, merge_ent->dir)) {
 			/* 2. This wasn't a directory rename after all */
@@ -2229,7 +2250,7 @@
 		if (!entry) {
 			entry = xmalloc(sizeof(*entry));
 			dir_rename_entry_init(entry, old_dir);
-			hashmap_put(dir_renames, entry);
+			hashmap_put(dir_renames, &entry->ent);
 		} else {
 			free(old_dir);
 		}
@@ -2254,8 +2275,8 @@
 	 * we set non_unique_new_dir.  Once we've determined the winner (or
 	 * that there is no winner), we no longer need possible_new_dirs.
 	 */
-	hashmap_iter_init(dir_renames, &iter);
-	while ((entry = hashmap_iter_next(&iter))) {
+	hashmap_for_each_entry(dir_renames, &iter, entry,
+				ent /* member name */) {
 		int max = 0;
 		int bad_max = 0;
 		char *best = NULL;
@@ -2358,8 +2379,9 @@
 		if (!collision_ent) {
 			collision_ent = xcalloc(1,
 						sizeof(struct collision_entry));
-			hashmap_entry_init(collision_ent, strhash(new_path));
-			hashmap_put(collisions, collision_ent);
+			hashmap_entry_init(&collision_ent->ent,
+						strhash(new_path));
+			hashmap_put(collisions, &collision_ent->ent);
 			collision_ent->target_file = new_path;
 		} else {
 			free(new_path);
@@ -2612,12 +2634,12 @@
 							     entries);
 	}
 
-	hashmap_iter_init(&collisions, &iter);
-	while ((e = hashmap_iter_next(&iter))) {
+	hashmap_for_each_entry(&collisions, &iter, e,
+				ent /* member name */) {
 		free(e->target_file);
 		string_list_clear(&e->source_files, 0);
 	}
-	hashmap_free(&collisions, 1);
+	hashmap_free_entries(&collisions, struct collision_entry, ent);
 	return renames;
 }
 
@@ -2830,13 +2852,13 @@
 	struct hashmap_iter iter;
 	struct dir_rename_entry *e;
 
-	hashmap_iter_init(dir_renames, &iter);
-	while ((e = hashmap_iter_next(&iter))) {
+	hashmap_for_each_entry(dir_renames, &iter, e,
+				ent /* member name */) {
 		free(e->dir);
 		strbuf_release(&e->new_dir);
 		/* possible_new_dirs already cleared in get_directory_renames */
 	}
-	hashmap_free(dir_renames, 1);
+	hashmap_free_entries(dir_renames, struct dir_rename_entry, ent);
 	free(dir_renames);
 
 	free(pairs->queue);
@@ -2863,8 +2885,9 @@
 	head_pairs = get_diffpairs(opt, common, head);
 	merge_pairs = get_diffpairs(opt, common, merge);
 
-	if ((opt->detect_directory_renames == 2) ||
-	    (opt->detect_directory_renames == 1 && !opt->call_depth)) {
+	if ((opt->detect_directory_renames == MERGE_DIRECTORY_RENAMES_TRUE) ||
+	    (opt->detect_directory_renames == MERGE_DIRECTORY_RENAMES_CONFLICT &&
+	     !opt->priv->call_depth)) {
 		dir_re_head = get_directory_renames(head_pairs);
 		dir_re_merge = get_directory_renames(merge_pairs);
 
@@ -3021,13 +3044,13 @@
 		reason = _("add/add");
 
 	assert(o->path && a->path && b->path);
-	if (ci && dir_in_way(opt->repo->index, path, !opt->call_depth,
+	if (ci && dir_in_way(opt->repo->index, path, !opt->priv->call_depth,
 			     S_ISGITLINK(ci->ren1->pair->two->mode)))
 		df_conflict_remains = 1;
 
 	if (merge_mode_and_contents(opt, o, a, b, path,
 				    opt->branch1, opt->branch2,
-				    opt->call_depth * 2, mfi))
+				    opt->priv->call_depth * 2, mfi))
 		return -1;
 
 	/*
@@ -3043,7 +3066,7 @@
 
 		output(opt, 3, _("Skipped %s (merged same as existing)"), path);
 		if (add_cacheinfo(opt, &mfi->blob, path,
-				  0, (!opt->call_depth && !is_dirty), 0))
+				  0, (!opt->priv->call_depth && !is_dirty), 0))
 			return -1;
 		/*
 		 * However, add_cacheinfo() will delete the old cache entry
@@ -3051,8 +3074,8 @@
 		 * flag to avoid making the file appear as if it were
 		 * deleted by the user.
 		 */
-		pos = index_name_pos(&opt->orig_index, path, strlen(path));
-		ce = opt->orig_index.cache[pos];
+		pos = index_name_pos(&opt->priv->orig_index, path, strlen(path));
+		ce = opt->priv->orig_index.cache[pos];
 		if (ce_skip_worktree(ce)) {
 			pos = index_name_pos(opt->repo->index, path, strlen(path));
 			ce = opt->repo->index->cache[pos];
@@ -3073,7 +3096,7 @@
 
 	if (df_conflict_remains || is_dirty) {
 		char *new_path;
-		if (opt->call_depth) {
+		if (opt->priv->call_depth) {
 			remove_file_from_index(opt->repo->index, path);
 		} else {
 			if (!mfi->clean) {
@@ -3122,7 +3145,8 @@
 	clean = handle_content_merge(&mfi, opt, path, was_dirty(opt, path),
 				     o, a, b, ci);
 
-	if (clean && opt->detect_directory_renames == 1 &&
+	if (clean &&
+	    opt->detect_directory_renames == MERGE_DIRECTORY_RENAMES_CONFLICT &&
 	    ren->dir_rename_original_dest) {
 		if (update_stages(opt, path,
 				  NULL,
@@ -3167,12 +3191,12 @@
 		return clean;
 
 	/* Sanity checks */
-	assert(opt->detect_directory_renames > 0);
+	assert(opt->detect_directory_renames > MERGE_DIRECTORY_RENAMES_NONE);
 	assert(ren->dir_rename_original_type == 'A' ||
 	       ren->dir_rename_original_type == 'R');
 
 	/* Check whether to treat directory renames as a conflict */
-	clean = (opt->detect_directory_renames == 2);
+	clean = (opt->detect_directory_renames == MERGE_DIRECTORY_RENAMES_TRUE);
 
 	is_add = (ren->dir_rename_original_type == 'A');
 	if (ren->dir_rename_original_type == 'A' && clean) {
@@ -3331,7 +3355,7 @@
 			conf = _("directory/file");
 		}
 		if (dir_in_way(opt->repo->index, path,
-			       !opt->call_depth && !S_ISGITLINK(a->mode),
+			       !opt->priv->call_depth && !S_ISGITLINK(a->mode),
 			       0)) {
 			char *new_path = unique_path(opt, path, add_branch);
 			clean_merge = 0;
@@ -3340,7 +3364,7 @@
 			       conf, path, other_branch, path, new_path);
 			if (update_file(opt, 0, contents, new_path))
 				clean_merge = -1;
-			else if (opt->call_depth)
+			else if (opt->priv->call_depth)
 				remove_file_from_index(opt->repo->index, path);
 			free(new_path);
 		} else {
@@ -3380,37 +3404,32 @@
 	return clean_merge;
 }
 
-int merge_trees(struct merge_options *opt,
-		struct tree *head,
-		struct tree *merge,
-		struct tree *common,
-		struct tree **result)
+static int merge_trees_internal(struct merge_options *opt,
+				struct tree *head,
+				struct tree *merge,
+				struct tree *merge_base,
+				struct tree **result)
 {
 	struct index_state *istate = opt->repo->index;
 	int code, clean;
-	struct strbuf sb = STRBUF_INIT;
-
-	if (!opt->call_depth && repo_index_has_changes(opt->repo, head, &sb)) {
-		err(opt, _("Your local changes to the following files would be overwritten by merge:\n  %s"),
-		    sb.buf);
-		return -1;
-	}
 
 	if (opt->subtree_shift) {
-		merge = shift_tree_object(opt->repo, head, merge, opt->subtree_shift);
-		common = shift_tree_object(opt->repo, head, common, opt->subtree_shift);
+		merge = shift_tree_object(opt->repo, head, merge,
+					  opt->subtree_shift);
+		merge_base = shift_tree_object(opt->repo, head, merge_base,
+					       opt->subtree_shift);
 	}
 
-	if (oid_eq(&common->object.oid, &merge->object.oid)) {
+	if (oid_eq(&merge_base->object.oid, &merge->object.oid)) {
 		output(opt, 0, _("Already up to date!"));
 		*result = head;
 		return 1;
 	}
 
-	code = unpack_trees_start(opt, common, head, merge);
+	code = unpack_trees_start(opt, merge_base, head, merge);
 
 	if (code != 0) {
-		if (show(opt, 4) || opt->call_depth)
+		if (show(opt, 4) || opt->priv->call_depth)
 			err(opt, _("merging of trees %s and %s failed"),
 			    oid_to_hex(&head->object.oid),
 			    oid_to_hex(&merge->object.oid));
@@ -3429,12 +3448,13 @@
 		 * opposed to decaring a local hashmap is for convenience
 		 * so that we don't have to pass it to around.
 		 */
-		hashmap_init(&opt->current_file_dir_set, path_hashmap_cmp, NULL, 512);
+		hashmap_init(&opt->priv->current_file_dir_set, path_hashmap_cmp,
+			     NULL, 512);
 		get_files_dirs(opt, head);
 		get_files_dirs(opt, merge);
 
 		entries = get_unmerged(opt->repo->index);
-		clean = detect_and_process_renames(opt, common, head, merge,
+		clean = detect_and_process_renames(opt, merge_base, head, merge,
 						   entries, &re_info);
 		record_df_conflict_files(opt, entries);
 		if (clean < 0)
@@ -3465,7 +3485,8 @@
 		string_list_clear(entries, 1);
 		free(entries);
 
-		hashmap_free(&opt->current_file_dir_set, 1);
+		hashmap_free_entries(&opt->priv->current_file_dir_set,
+					struct path_hashmap_entry, e);
 
 		if (clean < 0) {
 			unpack_trees_finish(opt);
@@ -3477,7 +3498,8 @@
 
 	unpack_trees_finish(opt);
 
-	if (opt->call_depth && !(*result = write_tree_from_memory(opt)))
+	if (opt->priv->call_depth &&
+	    !(*result = write_in_core_index_as_tree(opt->repo)))
 		return -1;
 
 	return clean;
@@ -3498,16 +3520,18 @@
  * Merge the commits h1 and h2, return the resulting virtual
  * commit object and a flag indicating the cleanness of the merge.
  */
-int merge_recursive(struct merge_options *opt,
-		    struct commit *h1,
-		    struct commit *h2,
-		    struct commit_list *ca,
-		    struct commit **result)
+static int merge_recursive_internal(struct merge_options *opt,
+				    struct commit *h1,
+				    struct commit *h2,
+				    struct commit_list *merge_bases,
+				    struct commit **result)
 {
 	struct commit_list *iter;
-	struct commit *merged_common_ancestors;
-	struct tree *mrtree;
+	struct commit *merged_merge_bases;
+	struct tree *result_tree;
 	int clean;
+	const char *ancestor_name;
+	struct strbuf merge_base_abbrev = STRBUF_INIT;
 
 	if (show(opt, 4)) {
 		output(opt, 4, _("Merging:"));
@@ -3515,32 +3539,43 @@
 		output_commit_title(opt, h2);
 	}
 
-	if (!ca) {
-		ca = get_merge_bases(h1, h2);
-		ca = reverse_commit_list(ca);
+	if (!merge_bases) {
+		merge_bases = get_merge_bases(h1, h2);
+		merge_bases = reverse_commit_list(merge_bases);
 	}
 
 	if (show(opt, 5)) {
-		unsigned cnt = commit_list_count(ca);
+		unsigned cnt = commit_list_count(merge_bases);
 
 		output(opt, 5, Q_("found %u common ancestor:",
 				"found %u common ancestors:", cnt), cnt);
-		for (iter = ca; iter; iter = iter->next)
+		for (iter = merge_bases; iter; iter = iter->next)
 			output_commit_title(opt, iter->item);
 	}
 
-	merged_common_ancestors = pop_commit(&ca);
-	if (merged_common_ancestors == NULL) {
+	merged_merge_bases = pop_commit(&merge_bases);
+	if (merged_merge_bases == NULL) {
 		/* if there is no common ancestor, use an empty tree */
 		struct tree *tree;
 
 		tree = lookup_tree(opt->repo, opt->repo->hash_algo->empty_tree);
-		merged_common_ancestors = make_virtual_commit(opt->repo, tree, "ancestor");
+		merged_merge_bases = make_virtual_commit(opt->repo, tree,
+							 "ancestor");
+		ancestor_name = "empty tree";
+	} else if (opt->ancestor && !opt->priv->call_depth) {
+		ancestor_name = opt->ancestor;
+	} else if (merge_bases) {
+		ancestor_name = "merged common ancestors";
+	} else {
+		strbuf_add_unique_abbrev(&merge_base_abbrev,
+					 &merged_merge_bases->object.oid,
+					 DEFAULT_ABBREV);
+		ancestor_name = merge_base_abbrev.buf;
 	}
 
-	for (iter = ca; iter; iter = iter->next) {
+	for (iter = merge_bases; iter; iter = iter->next) {
 		const char *saved_b1, *saved_b2;
-		opt->call_depth++;
+		opt->priv->call_depth++;
 		/*
 		 * When the merge fails, the result contains files
 		 * with conflict markers. The cleanness flag is
@@ -3554,45 +3589,134 @@
 		saved_b2 = opt->branch2;
 		opt->branch1 = "Temporary merge branch 1";
 		opt->branch2 = "Temporary merge branch 2";
-		if (merge_recursive(opt, merged_common_ancestors, iter->item,
-				    NULL, &merged_common_ancestors) < 0)
+		if (merge_recursive_internal(opt, merged_merge_bases, iter->item,
+					     NULL, &merged_merge_bases) < 0)
 			return -1;
 		opt->branch1 = saved_b1;
 		opt->branch2 = saved_b2;
-		opt->call_depth--;
+		opt->priv->call_depth--;
 
-		if (!merged_common_ancestors)
+		if (!merged_merge_bases)
 			return err(opt, _("merge returned no commit"));
 	}
 
 	discard_index(opt->repo->index);
-	if (!opt->call_depth)
+	if (!opt->priv->call_depth)
 		repo_read_index(opt->repo);
 
-	opt->ancestor = "merged common ancestors";
-	clean = merge_trees(opt, get_commit_tree(h1), get_commit_tree(h2),
-			    get_commit_tree(merged_common_ancestors),
-			    &mrtree);
+	opt->ancestor = ancestor_name;
+	clean = merge_trees_internal(opt,
+				     repo_get_commit_tree(opt->repo, h1),
+				     repo_get_commit_tree(opt->repo, h2),
+				     repo_get_commit_tree(opt->repo,
+							  merged_merge_bases),
+				     &result_tree);
+	strbuf_release(&merge_base_abbrev);
+	opt->ancestor = NULL;  /* avoid accidental re-use of opt->ancestor */
 	if (clean < 0) {
 		flush_output(opt);
 		return clean;
 	}
 
-	if (opt->call_depth) {
-		*result = make_virtual_commit(opt->repo, mrtree, "merged tree");
+	if (opt->priv->call_depth) {
+		*result = make_virtual_commit(opt->repo, result_tree,
+					      "merged tree");
 		commit_list_insert(h1, &(*result)->parents);
 		commit_list_insert(h2, &(*result)->parents->next);
 	}
-	flush_output(opt);
-	if (!opt->call_depth && opt->buffer_output < 2)
-		strbuf_release(&opt->obuf);
-	if (show(opt, 2))
-		diff_warn_rename_limit("merge.renamelimit",
-				       opt->needed_rename_limit, 0);
 	return clean;
 }
 
-static struct commit *get_ref(struct repository *repo, const struct object_id *oid,
+static int merge_start(struct merge_options *opt, struct tree *head)
+{
+	struct strbuf sb = STRBUF_INIT;
+
+	/* Sanity checks on opt */
+	assert(opt->repo);
+
+	assert(opt->branch1 && opt->branch2);
+
+	assert(opt->detect_renames >= -1 &&
+	       opt->detect_renames <= DIFF_DETECT_COPY);
+	assert(opt->detect_directory_renames >= MERGE_DIRECTORY_RENAMES_NONE &&
+	       opt->detect_directory_renames <= MERGE_DIRECTORY_RENAMES_TRUE);
+	assert(opt->rename_limit >= -1);
+	assert(opt->rename_score >= 0 && opt->rename_score <= MAX_SCORE);
+	assert(opt->show_rename_progress >= 0 && opt->show_rename_progress <= 1);
+
+	assert(opt->xdl_opts >= 0);
+	assert(opt->recursive_variant >= MERGE_VARIANT_NORMAL &&
+	       opt->recursive_variant <= MERGE_VARIANT_THEIRS);
+
+	assert(opt->verbosity >= 0 && opt->verbosity <= 5);
+	assert(opt->buffer_output <= 2);
+	assert(opt->obuf.len == 0);
+
+	assert(opt->priv == NULL);
+
+	/* Sanity check on repo state; index must match head */
+	if (repo_index_has_changes(opt->repo, head, &sb)) {
+		err(opt, _("Your local changes to the following files would be overwritten by merge:\n  %s"),
+		    sb.buf);
+		strbuf_release(&sb);
+		return -1;
+	}
+
+	opt->priv = xcalloc(1, sizeof(*opt->priv));
+	string_list_init(&opt->priv->df_conflict_file_set, 1);
+	return 0;
+}
+
+static void merge_finalize(struct merge_options *opt)
+{
+	flush_output(opt);
+	if (!opt->priv->call_depth && opt->buffer_output < 2)
+		strbuf_release(&opt->obuf);
+	if (show(opt, 2))
+		diff_warn_rename_limit("merge.renamelimit",
+				       opt->priv->needed_rename_limit, 0);
+	FREE_AND_NULL(opt->priv);
+}
+
+int merge_trees(struct merge_options *opt,
+		struct tree *head,
+		struct tree *merge,
+		struct tree *merge_base)
+{
+	int clean;
+	struct tree *ignored;
+
+	assert(opt->ancestor != NULL);
+
+	if (merge_start(opt, head))
+		return -1;
+	clean = merge_trees_internal(opt, head, merge, merge_base, &ignored);
+	merge_finalize(opt);
+
+	return clean;
+}
+
+int merge_recursive(struct merge_options *opt,
+		    struct commit *h1,
+		    struct commit *h2,
+		    struct commit_list *merge_bases,
+		    struct commit **result)
+{
+	int clean;
+
+	assert(opt->ancestor == NULL ||
+	       !strcmp(opt->ancestor, "constructed merge base"));
+
+	if (merge_start(opt, repo_get_commit_tree(opt->repo, h1)))
+		return -1;
+	clean = merge_recursive_internal(opt, h1, h2, merge_bases, result);
+	merge_finalize(opt);
+
+	return clean;
+}
+
+static struct commit *get_ref(struct repository *repo,
+			      const struct object_id *oid,
 			      const char *name)
 {
 	struct object *object;
@@ -3613,8 +3737,8 @@
 int merge_recursive_generic(struct merge_options *opt,
 			    const struct object_id *head,
 			    const struct object_id *merge,
-			    int num_base_list,
-			    const struct object_id **base_list,
+			    int num_merge_bases,
+			    const struct object_id **merge_bases,
 			    struct commit **result)
 {
 	int clean;
@@ -3623,15 +3747,18 @@
 	struct commit *next_commit = get_ref(opt->repo, merge, opt->branch2);
 	struct commit_list *ca = NULL;
 
-	if (base_list) {
+	if (merge_bases) {
 		int i;
-		for (i = 0; i < num_base_list; ++i) {
+		for (i = 0; i < num_merge_bases; ++i) {
 			struct commit *base;
-			if (!(base = get_ref(opt->repo, base_list[i], oid_to_hex(base_list[i]))))
+			if (!(base = get_ref(opt->repo, merge_bases[i],
+					     oid_to_hex(merge_bases[i]))))
 				return err(opt, _("Could not parse object '%s'"),
-					   oid_to_hex(base_list[i]));
+					   oid_to_hex(merge_bases[i]));
 			commit_list_insert(base, &ca);
 		}
+		if (num_merge_bases == 1)
+			opt->ancestor = "constructed merge base";
 	}
 
 	repo_hold_locked_index(opt->repo, &lock, LOCK_DIE_ON_ERROR);
@@ -3653,22 +3780,25 @@
 {
 	char *value = NULL;
 	git_config_get_int("merge.verbosity", &opt->verbosity);
-	git_config_get_int("diff.renamelimit", &opt->diff_rename_limit);
-	git_config_get_int("merge.renamelimit", &opt->merge_rename_limit);
+	git_config_get_int("diff.renamelimit", &opt->rename_limit);
+	git_config_get_int("merge.renamelimit", &opt->rename_limit);
 	if (!git_config_get_string("diff.renames", &value)) {
-		opt->diff_detect_rename = git_config_rename("diff.renames", value);
+		opt->detect_renames = git_config_rename("diff.renames", value);
 		free(value);
 	}
 	if (!git_config_get_string("merge.renames", &value)) {
-		opt->merge_detect_rename = git_config_rename("merge.renames", value);
+		opt->detect_renames = git_config_rename("merge.renames", value);
 		free(value);
 	}
 	if (!git_config_get_string("merge.directoryrenames", &value)) {
 		int boolval = git_parse_maybe_bool(value);
 		if (0 <= boolval) {
-			opt->detect_directory_renames = boolval ? 2 : 0;
+			opt->detect_directory_renames = boolval ?
+				MERGE_DIRECTORY_RENAMES_TRUE :
+				MERGE_DIRECTORY_RENAMES_NONE;
 		} else if (!strcasecmp(value, "conflict")) {
-			opt->detect_directory_renames = 1;
+			opt->detect_directory_renames =
+				MERGE_DIRECTORY_RENAMES_CONFLICT;
 		} /* avoid erroring on values from future versions of git */
 		free(value);
 	}
@@ -3680,23 +3810,25 @@
 {
 	const char *merge_verbosity;
 	memset(opt, 0, sizeof(struct merge_options));
+
 	opt->repo = repo;
+
+	opt->detect_renames = -1;
+	opt->detect_directory_renames = MERGE_DIRECTORY_RENAMES_CONFLICT;
+	opt->rename_limit = -1;
+
 	opt->verbosity = 2;
 	opt->buffer_output = 1;
-	opt->diff_rename_limit = -1;
-	opt->merge_rename_limit = -1;
+	strbuf_init(&opt->obuf, 0);
+
 	opt->renormalize = 0;
-	opt->diff_detect_rename = -1;
-	opt->merge_detect_rename = -1;
-	opt->detect_directory_renames = 1;
+
 	merge_recursive_config(opt);
 	merge_verbosity = getenv("GIT_MERGE_VERBOSITY");
 	if (merge_verbosity)
 		opt->verbosity = strtol(merge_verbosity, NULL, 10);
 	if (opt->verbosity >= 5)
 		opt->buffer_output = 0;
-	strbuf_init(&opt->obuf, 0);
-	string_list_init(&opt->df_conflict_file_set, 1);
 }
 
 int parse_merge_opt(struct merge_options *opt, const char *s)
@@ -3706,9 +3838,9 @@
 	if (!s || !*s)
 		return -1;
 	if (!strcmp(s, "ours"))
-		opt->recursive_variant = MERGE_RECURSIVE_OURS;
+		opt->recursive_variant = MERGE_VARIANT_OURS;
 	else if (!strcmp(s, "theirs"))
-		opt->recursive_variant = MERGE_RECURSIVE_THEIRS;
+		opt->recursive_variant = MERGE_VARIANT_THEIRS;
 	else if (!strcmp(s, "subtree"))
 		opt->subtree_shift = "";
 	else if (skip_prefix(s, "subtree=", &arg))
@@ -3739,16 +3871,16 @@
 	else if (!strcmp(s, "no-renormalize"))
 		opt->renormalize = 0;
 	else if (!strcmp(s, "no-renames"))
-		opt->merge_detect_rename = 0;
+		opt->detect_renames = 0;
 	else if (!strcmp(s, "find-renames")) {
-		opt->merge_detect_rename = 1;
+		opt->detect_renames = 1;
 		opt->rename_score = 0;
 	}
 	else if (skip_prefix(s, "find-renames=", &arg) ||
 		 skip_prefix(s, "rename-threshold=", &arg)) {
 		if ((opt->rename_score = parse_rename_score(&arg)) == -1 || *arg != 0)
 			return -1;
-		opt->merge_detect_rename = 1;
+		opt->detect_renames = 1;
 	}
 	/*
 	 * Please update $__git_merge_strategy_options in
diff --git a/merge-recursive.h b/merge-recursive.h
index c2b7bb6..978847e 100644
--- a/merge-recursive.h
+++ b/merge-recursive.h
@@ -1,104 +1,124 @@
 #ifndef MERGE_RECURSIVE_H
 #define MERGE_RECURSIVE_H
 
-#include "string-list.h"
-#include "unpack-trees.h"
+#include "strbuf.h"
 
 struct commit;
-
+struct commit_list;
+struct object_id;
 struct repository;
+struct tree;
 
+struct merge_options_internal;
 struct merge_options {
+	struct repository *repo;
+
+	/* ref names used in console messages and conflict markers */
 	const char *ancestor;
 	const char *branch1;
 	const char *branch2;
+
+	/* rename related options */
+	int detect_renames;
 	enum {
-		MERGE_RECURSIVE_NORMAL = 0,
-		MERGE_RECURSIVE_OURS,
-		MERGE_RECURSIVE_THEIRS
-	} recursive_variant;
-	const char *subtree_shift;
-	unsigned buffer_output; /* 1: output at end, 2: keep buffered */
-	unsigned renormalize : 1;
-	long xdl_opts;
-	int verbosity;
-	int detect_directory_renames;
-	int diff_detect_rename;
-	int merge_detect_rename;
-	int diff_rename_limit;
-	int merge_rename_limit;
+		MERGE_DIRECTORY_RENAMES_NONE = 0,
+		MERGE_DIRECTORY_RENAMES_CONFLICT = 1,
+		MERGE_DIRECTORY_RENAMES_TRUE = 2
+	} detect_directory_renames;
+	int rename_limit;
 	int rename_score;
-	int needed_rename_limit;
 	int show_rename_progress;
-	int call_depth;
-	struct strbuf obuf;
-	struct hashmap current_file_dir_set;
-	struct string_list df_conflict_file_set;
-	struct unpack_trees_options unpack_opts;
-	struct index_state orig_index;
-	struct repository *repo;
+
+	/* xdiff-related options (patience, ignore whitespace, ours/theirs) */
+	long xdl_opts;
+	enum {
+		MERGE_VARIANT_NORMAL = 0,
+		MERGE_VARIANT_OURS,
+		MERGE_VARIANT_THEIRS
+	} recursive_variant;
+
+	/* console output related options */
+	int verbosity;
+	unsigned buffer_output; /* 1: output at end, 2: keep buffered */
+	struct strbuf obuf;     /* output buffer; if buffer_output == 2, caller
+				 * must handle and call strbuf_release */
+
+	/* miscellaneous control options */
+	const char *subtree_shift;
+	unsigned renormalize : 1;
+
+	/* internal fields used by the implementation */
+	struct merge_options_internal *priv;
 };
 
+void init_merge_options(struct merge_options *opt, struct repository *repo);
+
+/* parse the option in s and update the relevant field of opt */
+int parse_merge_opt(struct merge_options *opt, const char *s);
+
 /*
- * For dir_rename_entry, directory names are stored as a full path from the
- * toplevel of the repository and do not include a trailing '/'.  Also:
- *
- *   dir:                original name of directory being renamed
- *   non_unique_new_dir: if true, could not determine new_dir
- *   new_dir:            final name of directory being renamed
- *   possible_new_dirs:  temporary used to help determine new_dir; see comments
- *                       in get_directory_renames() for details
+ * RETURN VALUES: All the merge_* functions below return a value as follows:
+ *   > 0     Merge was clean
+ *   = 0     Merge had conflicts
+ *   < 0     Merge hit an unexpected and unrecoverable problem (e.g. disk
+ *             full) and aborted merge part-way through.
  */
-struct dir_rename_entry {
-	struct hashmap_entry ent; /* must be the first member! */
-	char *dir;
-	unsigned non_unique_new_dir:1;
-	struct strbuf new_dir;
-	struct string_list possible_new_dirs;
-};
 
-struct collision_entry {
-	struct hashmap_entry ent; /* must be the first member! */
-	char *target_file;
-	struct string_list source_files;
-	unsigned reported_already:1;
-};
-
-static inline int merge_detect_rename(struct merge_options *o)
-{
-	return o->merge_detect_rename >= 0 ? o->merge_detect_rename :
-		o->diff_detect_rename >= 0 ? o->diff_detect_rename : 1;
-}
-
-/* merge_trees() but with recursive ancestor consolidation */
-int merge_recursive(struct merge_options *o,
-		    struct commit *h1,
-		    struct commit *h2,
-		    struct commit_list *ancestors,
-		    struct commit **result);
-
-/* rename-detecting three-way merge, no recursion */
-int merge_trees(struct merge_options *o,
+/*
+ * rename-detecting three-way merge, no recursion.
+ *
+ * Outputs:
+ *   - See RETURN VALUES above
+ *   - No commit is created
+ *   - opt->repo->index has the new index
+ *   - $GIT_INDEX_FILE is not updated
+ *   - The working tree is updated with results of the merge
+ */
+int merge_trees(struct merge_options *opt,
 		struct tree *head,
 		struct tree *merge,
-		struct tree *common,
-		struct tree **result);
+		struct tree *merge_base);
 
 /*
- * "git-merge-recursive" can be fed trees; wrap them into
- * virtual commits and call merge_recursive() proper.
+ * merge_recursive is like merge_trees() but with recursive ancestor
+ * consolidation and, if the commit is clean, creation of a commit.
+ *
+ * NOTE: empirically, about a decade ago it was determined that with more
+ *       than two merge bases, optimal behavior was found when the
+ *       merge_bases were passed in the order of oldest commit to newest
+ *       commit.  Also, merge_bases will be consumed (emptied) so make a
+ *       copy if you need it.
+ *
+ * Outputs:
+ *   - See RETURN VALUES above
+ *   - If merge is clean, a commit is created and its address written to *result
+ *   - opt->repo->index has the new index
+ *   - $GIT_INDEX_FILE is not updated
+ *   - The working tree is updated with results of the merge
  */
-int merge_recursive_generic(struct merge_options *o,
+int merge_recursive(struct merge_options *opt,
+		    struct commit *h1,
+		    struct commit *h2,
+		    struct commit_list *merge_bases,
+		    struct commit **result);
+
+/*
+ * merge_recursive_generic can operate on trees instead of commits, by
+ * wrapping the trees into virtual commits, and calling merge_recursive().
+ * It also writes out the in-memory index to disk if the merge is successful.
+ *
+ * Outputs:
+ *   - See RETURN VALUES above
+ *   - If merge is clean, a commit is created and its address written to *result
+ *   - opt->repo->index has the new index
+ *   - $GIT_INDEX_FILE is updated
+ *   - The working tree is updated with results of the merge
+ */
+int merge_recursive_generic(struct merge_options *opt,
 			    const struct object_id *head,
 			    const struct object_id *merge,
-			    int num_ca,
-			    const struct object_id **ca,
+			    int num_merge_bases,
+			    const struct object_id **merge_bases,
 			    struct commit **result);
 
-void init_merge_options(struct merge_options *o,
-			struct repository *repo);
-struct tree *write_tree_from_memory(struct merge_options *o);
-
-int parse_merge_opt(struct merge_options *out, const char *s);
-
 #endif
diff --git a/midx.c b/midx.c
index d649644..f29afc0 100644
--- a/midx.c
+++ b/midx.c
@@ -19,8 +19,7 @@
 #define MIDX_BYTE_NUM_PACKS 8
 #define MIDX_HASH_VERSION 1
 #define MIDX_HEADER_SIZE 12
-#define MIDX_HASH_LEN 20
-#define MIDX_MIN_SIZE (MIDX_HEADER_SIZE + MIDX_HASH_LEN)
+#define MIDX_MIN_SIZE (MIDX_HEADER_SIZE + the_hash_algo->rawsz)
 
 #define MIDX_MAX_CHUNKS 5
 #define MIDX_CHUNK_ALIGNMENT 4
@@ -93,7 +92,7 @@
 	hash_version = m->data[MIDX_BYTE_HASH_VERSION];
 	if (hash_version != MIDX_HASH_VERSION)
 		die(_("hash version %u does not match"), hash_version);
-	m->hash_len = MIDX_HASH_LEN;
+	m->hash_len = the_hash_algo->rawsz;
 
 	m->num_chunks = m->data[MIDX_BYTE_NUM_CHUNKS];
 
@@ -234,7 +233,7 @@
 int bsearch_midx(const struct object_id *oid, struct multi_pack_index *m, uint32_t *result)
 {
 	return bsearch_hash(oid->hash, m->chunk_oid_fanout, m->chunk_oid_lookup,
-			    MIDX_HASH_LEN, result);
+			    the_hash_algo->rawsz, result);
 }
 
 struct object_id *nth_midxed_object_oid(struct object_id *oid,
@@ -928,7 +927,7 @@
 
 	cur_chunk++;
 	chunk_ids[cur_chunk] = MIDX_CHUNKID_OBJECTOFFSETS;
-	chunk_offsets[cur_chunk] = chunk_offsets[cur_chunk - 1] + nr_entries * MIDX_HASH_LEN;
+	chunk_offsets[cur_chunk] = chunk_offsets[cur_chunk - 1] + nr_entries * the_hash_algo->rawsz;
 
 	cur_chunk++;
 	chunk_offsets[cur_chunk] = chunk_offsets[cur_chunk - 1] + nr_entries * MIDX_CHUNK_OFFSET_WIDTH;
@@ -976,7 +975,7 @@
 				break;
 
 			case MIDX_CHUNKID_OIDLOOKUP:
-				written += write_midx_oid_lookup(f, MIDX_HASH_LEN, entries, nr_entries);
+				written += write_midx_oid_lookup(f, the_hash_algo->rawsz, entries, nr_entries);
 				break;
 
 			case MIDX_CHUNKID_OBJECTOFFSETS:
diff --git a/name-hash.c b/name-hash.c
index 6959086..ceb1d7b 100644
--- a/name-hash.c
+++ b/name-hash.c
@@ -17,14 +17,16 @@
 };
 
 static int dir_entry_cmp(const void *unused_cmp_data,
-			 const void *entry,
-			 const void *entry_or_key,
+			 const struct hashmap_entry *eptr,
+			 const struct hashmap_entry *entry_or_key,
 			 const void *keydata)
 {
-	const struct dir_entry *e1 = entry;
-	const struct dir_entry *e2 = entry_or_key;
+	const struct dir_entry *e1, *e2;
 	const char *name = keydata;
 
+	e1 = container_of(eptr, const struct dir_entry, ent);
+	e2 = container_of(entry_or_key, const struct dir_entry, ent);
+
 	return e1->namelen != e2->namelen || strncasecmp(e1->name,
 			name ? name : e2->name, e1->namelen);
 }
@@ -33,9 +35,9 @@
 		const char *name, unsigned int namelen, unsigned int hash)
 {
 	struct dir_entry key;
-	hashmap_entry_init(&key, hash);
+	hashmap_entry_init(&key.ent, hash);
 	key.namelen = namelen;
-	return hashmap_get(&istate->dir_hash, &key, name);
+	return hashmap_get_entry(&istate->dir_hash, &key, ent, name);
 }
 
 static struct dir_entry *find_dir_entry(struct index_state *istate,
@@ -68,9 +70,9 @@
 	if (!dir) {
 		/* not found, create it and add to hash table */
 		FLEX_ALLOC_MEM(dir, name, ce->name, namelen);
-		hashmap_entry_init(dir, memihash(ce->name, namelen));
+		hashmap_entry_init(&dir->ent, memihash(ce->name, namelen));
 		dir->namelen = namelen;
-		hashmap_add(&istate->dir_hash, dir);
+		hashmap_add(&istate->dir_hash, &dir->ent);
 
 		/* recursively add missing parent directories */
 		dir->parent = hash_dir_entry(istate, ce, namelen);
@@ -95,7 +97,7 @@
 	struct dir_entry *dir = hash_dir_entry(istate, ce, ce_namelen(ce));
 	while (dir && !(--dir->nr)) {
 		struct dir_entry *parent = dir->parent;
-		hashmap_remove(&istate->dir_hash, dir, NULL);
+		hashmap_remove(&istate->dir_hash, &dir->ent, NULL);
 		free(dir);
 		dir = parent;
 	}
@@ -106,20 +108,23 @@
 	if (ce->ce_flags & CE_HASHED)
 		return;
 	ce->ce_flags |= CE_HASHED;
-	hashmap_entry_init(ce, memihash(ce->name, ce_namelen(ce)));
-	hashmap_add(&istate->name_hash, ce);
+	hashmap_entry_init(&ce->ent, memihash(ce->name, ce_namelen(ce)));
+	hashmap_add(&istate->name_hash, &ce->ent);
 
 	if (ignore_case)
 		add_dir_entry(istate, ce);
 }
 
 static int cache_entry_cmp(const void *unused_cmp_data,
-			   const void *entry,
-			   const void *entry_or_key,
+			   const struct hashmap_entry *eptr,
+			   const struct hashmap_entry *entry_or_key,
 			   const void *remove)
 {
-	const struct cache_entry *ce1 = entry;
-	const struct cache_entry *ce2 = entry_or_key;
+	const struct cache_entry *ce1, *ce2;
+
+	ce1 = container_of(eptr, const struct cache_entry, ent);
+	ce2 = container_of(entry_or_key, const struct cache_entry, ent);
+
 	/*
 	 * For remove_name_hash, find the exact entry (pointer equality); for
 	 * index_file_exists, find all entries with matching hash code and
@@ -280,10 +285,10 @@
 	dir = find_dir_entry__hash(istate, prefix->buf, prefix->len, hash);
 	if (!dir) {
 		FLEX_ALLOC_MEM(dir, name, prefix->buf, prefix->len);
-		hashmap_entry_init(dir, hash);
+		hashmap_entry_init(&dir->ent, hash);
 		dir->namelen = prefix->len;
 		dir->parent = parent;
-		hashmap_add(&istate->dir_hash, dir);
+		hashmap_add(&istate->dir_hash, &dir->ent);
 
 		if (parent) {
 			unlock_dir_mutex(lock_nr);
@@ -472,8 +477,8 @@
 	for (k = 0; k < d->istate->cache_nr; k++) {
 		struct cache_entry *ce_k = d->istate->cache[k];
 		ce_k->ce_flags |= CE_HASHED;
-		hashmap_entry_init(ce_k, d->lazy_entries[k].hash_name);
-		hashmap_add(&d->istate->name_hash, ce_k);
+		hashmap_entry_init(&ce_k->ent, d->lazy_entries[k].hash_name);
+		hashmap_add(&d->istate->name_hash, &ce_k->ent);
 	}
 
 	return NULL;
@@ -625,7 +630,7 @@
 	if (!istate->name_hash_initialized || !(ce->ce_flags & CE_HASHED))
 		return;
 	ce->ce_flags &= ~CE_HASHED;
-	hashmap_remove(&istate->name_hash, ce, ce);
+	hashmap_remove(&istate->name_hash, &ce->ent, ce);
 
 	if (ignore_case)
 		remove_dir_entry(istate, ce);
@@ -702,15 +707,15 @@
 struct cache_entry *index_file_exists(struct index_state *istate, const char *name, int namelen, int icase)
 {
 	struct cache_entry *ce;
+	unsigned int hash = memihash(name, namelen);
 
 	lazy_init_name_hash(istate);
 
-	ce = hashmap_get_from_hash(&istate->name_hash,
-				   memihash(name, namelen), NULL);
-	while (ce) {
+	ce = hashmap_get_entry_from_hash(&istate->name_hash, hash, NULL,
+					 struct cache_entry, ent);
+	hashmap_for_each_entry_from(&istate->name_hash, ce, ent) {
 		if (same_name(ce, name, namelen, icase))
 			return ce;
-		ce = hashmap_get_next(&istate->name_hash, ce);
 	}
 	return NULL;
 }
@@ -721,6 +726,6 @@
 		return;
 	istate->name_hash_initialized = 0;
 
-	hashmap_free(&istate->name_hash, 0);
-	hashmap_free(&istate->dir_hash, 1);
+	hashmap_free(&istate->name_hash);
+	hashmap_free_entries(&istate->dir_hash, struct dir_entry, ent);
 }
diff --git a/notes.c b/notes.c
index 75c028b..03e7d0c 100644
--- a/notes.c
+++ b/notes.c
@@ -269,8 +269,10 @@
 		case PTR_TYPE_NOTE:
 			if (oideq(&l->key_oid, &entry->key_oid)) {
 				/* skip concatenation if l == entry */
-				if (oideq(&l->val_oid, &entry->val_oid))
+				if (oideq(&l->val_oid, &entry->val_oid)) {
+					free(entry);
 					return 0;
+				}
 
 				ret = combine_notes(&l->val_oid,
 						    &entry->val_oid);
@@ -458,7 +460,7 @@
 			die("Failed to load %s %s into notes tree "
 			    "from %s",
 			    type == PTR_TYPE_NOTE ? "note" : "subtree",
-			    oid_to_hex(&l->key_oid), t->ref);
+			    oid_to_hex(&object_oid), t->ref);
 
 		continue;
 
diff --git a/object.c b/object.c
index 07bdd5b..3b8b8c5 100644
--- a/object.c
+++ b/object.c
@@ -7,7 +7,6 @@
 #include "commit.h"
 #include "tag.h"
 #include "alloc.h"
-#include "object-store.h"
 #include "packfile.h"
 #include "commit-graph.h"
 
diff --git a/object.h b/object.h
index 0120892..25f5ab3 100644
--- a/object.h
+++ b/object.h
@@ -68,7 +68,8 @@
  * bisect.c:                                        16
  * bundle.c:                                        16
  * http-push.c:                                     16-----19
- * commit-reach.c:                                15-------19
+ * commit-graph.c:                                15
+ * commit-reach.c:                                  16-----19
  * sha1-name.c:                                              20
  * list-objects-filter.c:                                      21
  * builtin/fsck.c:           0--3
diff --git a/oidmap.c b/oidmap.c
index 6d6e840..423aa01 100644
--- a/oidmap.c
+++ b/oidmap.c
@@ -2,14 +2,18 @@
 #include "oidmap.h"
 
 static int oidmap_neq(const void *hashmap_cmp_fn_data,
-		      const void *entry, const void *entry_or_key,
+		      const struct hashmap_entry *e1,
+		      const struct hashmap_entry *e2,
 		      const void *keydata)
 {
-	const struct oidmap_entry *entry_ = entry;
+	const struct oidmap_entry *a, *b;
+
+	a = container_of(e1, const struct oidmap_entry, internal_entry);
+	b = container_of(e2, const struct oidmap_entry, internal_entry);
+
 	if (keydata)
-		return !oideq(&entry_->oid, (const struct object_id *) keydata);
-	return !oideq(&entry_->oid,
-		      &((const struct oidmap_entry *) entry_or_key)->oid);
+		return !oideq(&a->oid, (const struct object_id *) keydata);
+	return !oideq(&a->oid, &b->oid);
 }
 
 void oidmap_init(struct oidmap *map, size_t initial_size)
@@ -21,7 +25,9 @@
 {
 	if (!map)
 		return;
-	hashmap_free(&map->map, free_entries);
+
+	/* TODO: make oidmap itself not depend on struct layouts */
+	hashmap_free_(&map->map, free_entries ? 0 : -1);
 }
 
 void *oidmap_get(const struct oidmap *map, const struct object_id *key)
@@ -51,5 +57,5 @@
 		oidmap_init(map, 0);
 
 	hashmap_entry_init(&to_put->internal_entry, oidhash(&to_put->oid));
-	return hashmap_put(&map->map, to_put);
+	return hashmap_put(&map->map, &to_put->internal_entry);
 }
diff --git a/oidmap.h b/oidmap.h
index 7a93946..c66a83a 100644
--- a/oidmap.h
+++ b/oidmap.h
@@ -78,14 +78,16 @@
 
 static inline void *oidmap_iter_next(struct oidmap_iter *iter)
 {
-	return hashmap_iter_next(&iter->h_iter);
+	/* TODO: this API could be reworked to do compile-time type checks */
+	return (void *)hashmap_iter_next(&iter->h_iter);
 }
 
 static inline void *oidmap_iter_first(struct oidmap *map,
 				      struct oidmap_iter *iter)
 {
 	oidmap_iter_init(map, iter);
-	return oidmap_iter_next(iter);
+	/* TODO: this API could be reworked to do compile-time type checks */
+	return (void *)oidmap_iter_next(iter);
 }
 
 #endif
diff --git a/pack-bitmap-write.c b/pack-bitmap-write.c
index fa78a46..a7a4964 100644
--- a/pack-bitmap-write.c
+++ b/pack-bitmap-write.c
@@ -144,7 +144,7 @@
 
 static uint32_t find_object_pos(const struct object_id *oid)
 {
-	struct object_entry *entry = packlist_find(writer.to_pack, oid, NULL);
+	struct object_entry *entry = packlist_find(writer.to_pack, oid);
 
 	if (!entry) {
 		die("Failed to write bitmap index. Packfile doesn't have full closure "
diff --git a/pack-bitmap.c b/pack-bitmap.c
index ed2befa..e07c798 100644
--- a/pack-bitmap.c
+++ b/pack-bitmap.c
@@ -709,9 +709,7 @@
 			else
 				object_list_insert(object, &wants);
 
-			if (!tag->tagged)
-				die("bad tag");
-			object = parse_object_or_die(&tag->tagged->oid, NULL);
+			object = parse_object_or_die(get_tagged_oid(tag), NULL);
 		}
 
 		if (object->flags & UNINTERESTING)
@@ -1063,7 +1061,7 @@
 
 		entry = &bitmap_git->pack->revindex[i];
 		nth_packed_object_oid(&oid, bitmap_git->pack, entry->nr);
-		oe = packlist_find(mapping, &oid, NULL);
+		oe = packlist_find(mapping, &oid);
 
 		if (oe)
 			reposition[i] = oe_in_pack_pos(mapping, oe) + 1;
diff --git a/pack-bitmap.h b/pack-bitmap.h
index 00de3ec..466c5af 100644
--- a/pack-bitmap.h
+++ b/pack-bitmap.h
@@ -9,16 +9,16 @@
 struct repository;
 struct rev_info;
 
+static const char BITMAP_IDX_SIGNATURE[] = {'B', 'I', 'T', 'M'};
+
 struct bitmap_disk_header {
-	char magic[4];
+	char magic[ARRAY_SIZE(BITMAP_IDX_SIGNATURE)];
 	uint16_t version;
 	uint16_t options;
 	uint32_t entry_count;
 	unsigned char checksum[GIT_MAX_RAWSZ];
 };
 
-static const char BITMAP_IDX_SIGNATURE[] = {'B', 'I', 'T', 'M'};
-
 #define NEEDS_BITMAP (1u<<22)
 
 enum pack_bitmap_opts {
diff --git a/pack-objects.c b/pack-objects.c
index 5256029..c6250d7 100644
--- a/pack-objects.c
+++ b/pack-objects.c
@@ -68,8 +68,7 @@
 }
 
 struct object_entry *packlist_find(struct packing_data *pdata,
-				   const struct object_id *oid,
-				   uint32_t *index_pos)
+				   const struct object_id *oid)
 {
 	uint32_t i;
 	int found;
@@ -79,9 +78,6 @@
 
 	i = locate_object_entry_hash(pdata, oid, &found);
 
-	if (index_pos)
-		*index_pos = i;
-
 	if (!found)
 		return NULL;
 
@@ -153,8 +149,7 @@
 }
 
 struct object_entry *packlist_alloc(struct packing_data *pdata,
-				    const unsigned char *sha1,
-				    uint32_t index_pos)
+				    const struct object_id *oid)
 {
 	struct object_entry *new_entry;
 
@@ -177,12 +172,19 @@
 	new_entry = pdata->objects + pdata->nr_objects++;
 
 	memset(new_entry, 0, sizeof(*new_entry));
-	hashcpy(new_entry->idx.oid.hash, sha1);
+	oidcpy(&new_entry->idx.oid, oid);
 
 	if (pdata->index_size * 3 <= pdata->nr_objects * 4)
 		rehash_objects(pdata);
-	else
-		pdata->index[index_pos] = pdata->nr_objects;
+	else {
+		int found;
+		uint32_t pos = locate_object_entry_hash(pdata,
+							&new_entry->idx.oid,
+							&found);
+		if (found)
+			BUG("duplicate object inserted into hash");
+		pdata->index[pos] = pdata->nr_objects;
+	}
 
 	if (pdata->in_pack)
 		pdata->in_pack[pdata->nr_objects - 1] = NULL;
diff --git a/pack-objects.h b/pack-objects.h
index 857d438..6fe6ae5 100644
--- a/pack-objects.h
+++ b/pack-objects.h
@@ -183,12 +183,10 @@
 }
 
 struct object_entry *packlist_alloc(struct packing_data *pdata,
-				    const unsigned char *sha1,
-				    uint32_t index_pos);
+				    const struct object_id *oid);
 
 struct object_entry *packlist_find(struct packing_data *pdata,
-				   const struct object_id *oid,
-				   uint32_t *index_pos);
+				   const struct object_id *oid);
 
 static inline uint32_t pack_name_hash(const char *name)
 {
diff --git a/pack-write.c b/pack-write.c
index 29d17a9..f0017be 100644
--- a/pack-write.c
+++ b/pack-write.c
@@ -349,7 +349,7 @@
 			 struct pack_idx_entry **written_list,
 			 uint32_t nr_written,
 			 struct pack_idx_option *pack_idx_opts,
-			 unsigned char sha1[])
+			 unsigned char hash[])
 {
 	const char *idx_tmp_name;
 	int basename_len = name_buffer->len;
@@ -358,18 +358,18 @@
 		die_errno("unable to make temporary pack file readable");
 
 	idx_tmp_name = write_idx_file(NULL, written_list, nr_written,
-				      pack_idx_opts, sha1);
+				      pack_idx_opts, hash);
 	if (adjust_shared_perm(idx_tmp_name))
 		die_errno("unable to make temporary index file readable");
 
-	strbuf_addf(name_buffer, "%s.pack", sha1_to_hex(sha1));
+	strbuf_addf(name_buffer, "%s.pack", hash_to_hex(hash));
 
 	if (rename(pack_tmp_name, name_buffer->buf))
 		die_errno("unable to rename temporary pack file");
 
 	strbuf_setlen(name_buffer, basename_len);
 
-	strbuf_addf(name_buffer, "%s.idx", sha1_to_hex(sha1));
+	strbuf_addf(name_buffer, "%s.idx", hash_to_hex(hash));
 	if (rename(idx_tmp_name, name_buffer->buf))
 		die_errno("unable to rename temporary index file");
 
diff --git a/packfile.c b/packfile.c
index fc43a6c..355066d 100644
--- a/packfile.c
+++ b/packfile.c
@@ -6,7 +6,6 @@
 #include "mergesort.h"
 #include "packfile.h"
 #include "delta.h"
-#include "list.h"
 #include "streaming.h"
 #include "sha1-lookup.h"
 #include "commit.h"
@@ -17,14 +16,15 @@
 #include "object-store.h"
 #include "midx.h"
 #include "commit-graph.h"
+#include "promisor-remote.h"
 
 char *odb_pack_name(struct strbuf *buf,
-		    const unsigned char *sha1,
+		    const unsigned char *hash,
 		    const char *ext)
 {
 	strbuf_reset(buf);
 	strbuf_addf(buf, "%s/pack/pack-%s.%s", get_object_directory(),
-		    sha1_to_hex(sha1), ext);
+		    hash_to_hex(hash), ext);
 	return buf->buf;
 }
 
@@ -287,13 +287,6 @@
 	return 0;
 }
 
-void release_pack_memory(size_t need)
-{
-	size_t cur = pack_mapped;
-	while (need >= (cur - pack_mapped) && unuse_one_window(NULL))
-		; /* nothing */
-}
-
 void close_pack_windows(struct packed_git *p)
 {
 	while (p->windows) {
@@ -710,23 +703,12 @@
 	}
 }
 
-static void try_to_free_pack_memory(size_t size)
-{
-	release_pack_memory(size);
-}
-
 struct packed_git *add_packed_git(const char *path, size_t path_len, int local)
 {
-	static int have_set_try_to_free_routine;
 	struct stat st;
 	size_t alloc;
 	struct packed_git *p;
 
-	if (!have_set_try_to_free_routine) {
-		have_set_try_to_free_routine = 1;
-		set_try_to_free_routine(try_to_free_pack_memory);
-	}
-
 	/*
 	 * Make sure a corresponding .pack file exists and that
 	 * the index looks sane.
@@ -1361,7 +1343,7 @@
 };
 
 struct delta_base_cache_entry {
-	struct hashmap hash;
+	struct hashmap_entry ent;
 	struct delta_base_cache_key key;
 	struct list_head lru;
 	void *data;
@@ -1381,7 +1363,7 @@
 static struct delta_base_cache_entry *
 get_delta_base_cache_entry(struct packed_git *p, off_t base_offset)
 {
-	struct hashmap_entry entry;
+	struct hashmap_entry entry, *e;
 	struct delta_base_cache_key key;
 
 	if (!delta_base_cache.cmpfn)
@@ -1390,7 +1372,8 @@
 	hashmap_entry_init(&entry, pack_entry_hash(p, base_offset));
 	key.p = p;
 	key.base_offset = base_offset;
-	return hashmap_get(&delta_base_cache, &entry, &key);
+	e = hashmap_get(&delta_base_cache, &entry, &key);
+	return e ? container_of(e, struct delta_base_cache_entry, ent) : NULL;
 }
 
 static int delta_base_cache_key_eq(const struct delta_base_cache_key *a,
@@ -1400,11 +1383,16 @@
 }
 
 static int delta_base_cache_hash_cmp(const void *unused_cmp_data,
-				     const void *va, const void *vb,
+				     const struct hashmap_entry *va,
+				     const struct hashmap_entry *vb,
 				     const void *vkey)
 {
-	const struct delta_base_cache_entry *a = va, *b = vb;
+	const struct delta_base_cache_entry *a, *b;
 	const struct delta_base_cache_key *key = vkey;
+
+	a = container_of(va, const struct delta_base_cache_entry, ent);
+	b = container_of(vb, const struct delta_base_cache_entry, ent);
+
 	if (key)
 		return !delta_base_cache_key_eq(&a->key, key);
 	else
@@ -1423,7 +1411,7 @@
  */
 static void detach_delta_base_cache_entry(struct delta_base_cache_entry *ent)
 {
-	hashmap_remove(&delta_base_cache, ent, &ent->key);
+	hashmap_remove(&delta_base_cache, &ent->ent, &ent->key);
 	list_del(&ent->lru);
 	delta_base_cached -= ent->size;
 	free(ent);
@@ -1487,8 +1475,8 @@
 
 	if (!delta_base_cache.cmpfn)
 		hashmap_init(&delta_base_cache, delta_base_cache_hash_cmp, NULL, 0);
-	hashmap_entry_init(ent, pack_entry_hash(p, base_offset));
-	hashmap_add(&delta_base_cache, ent);
+	hashmap_entry_init(&ent->ent, pack_entry_hash(p, base_offset));
+	hashmap_add(&delta_base_cache, &ent->ent);
 }
 
 int packed_object_info(struct repository *r, struct packed_git *p,
@@ -2139,7 +2127,7 @@
 			oidset_insert(set, &parents->item->object.oid);
 	} else if (obj->type == OBJ_TAG) {
 		struct tag *tag = (struct tag *) obj;
-		oidset_insert(set, &tag->tagged->oid);
+		oidset_insert(set, get_tagged_oid(tag));
 	}
 	return 0;
 }
@@ -2150,7 +2138,7 @@
 	static int promisor_objects_prepared;
 
 	if (!promisor_objects_prepared) {
-		if (repository_format_partial_clone) {
+		if (has_promisor_remote()) {
 			for_each_packed_object(add_promisor_object,
 					       &promisor_objects,
 					       FOR_EACH_OBJECT_PROMISOR_ONLY);
diff --git a/packfile.h b/packfile.h
index 3e98910..fc7904e 100644
--- a/packfile.h
+++ b/packfile.h
@@ -100,7 +100,7 @@
  * Does not unlink if 'force_delete' is false and the pack-file is
  * marked as ".keep".
  */
-extern void unlink_pack_path(const char *pack_name, int force_delete);
+void unlink_pack_path(const char *pack_name, int force_delete);
 
 /*
  * Make sure that a pointer access into an mmap'd index file is within bounds,
diff --git a/parse-options.c b/parse-options.c
index 87b26a1..b42f54d 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -780,7 +780,8 @@
 			continue;
 		}
 
-		if (!arg[2]) { /* "--" */
+		if (!arg[2] /* "--" */ ||
+		    !strcmp(arg + 2, "end-of-options")) {
 			if (!(ctx->flags & PARSE_OPT_KEEP_DASHDASH)) {
 				ctx->argc--;
 				ctx->argv++;
diff --git a/parse-options.h b/parse-options.h
index a4bd40b..38a33a0 100644
--- a/parse-options.h
+++ b/parse-options.h
@@ -46,6 +46,15 @@
 	PARSE_OPT_COMP_ARG = 1024
 };
 
+enum parse_opt_result {
+	PARSE_OPT_COMPLETE = -3,
+	PARSE_OPT_HELP = -2,
+	PARSE_OPT_ERROR = -1,	/* must be the same as error() */
+	PARSE_OPT_DONE = 0,	/* fixed so that "return 0" works */
+	PARSE_OPT_NON_OPTION,
+	PARSE_OPT_UNKNOWN
+};
+
 struct option;
 typedef int parse_opt_cb(const struct option *, const char *arg, int unset);
 
@@ -241,15 +250,6 @@
 
 /*----- incremental advanced APIs -----*/
 
-enum parse_opt_result {
-	PARSE_OPT_COMPLETE = -3,
-	PARSE_OPT_HELP = -2,
-	PARSE_OPT_ERROR = -1,	/* must be the same as error() */
-	PARSE_OPT_DONE = 0,	/* fixed so that "return 0" works */
-	PARSE_OPT_NON_OPTION,
-	PARSE_OPT_UNKNOWN
-};
-
 /*
  * It's okay for the caller to consume argv/argc in the usual way.
  * Other fields of that structure are private to parse-options and should not
diff --git a/patch-ids.c b/patch-ids.c
index e8c150d..12aa6d4 100644
--- a/patch-ids.c
+++ b/patch-ids.c
@@ -36,14 +36,16 @@
  * any significance; only that it is non-zero matters.
  */
 static int patch_id_neq(const void *cmpfn_data,
-			const void *entry,
-			const void *entry_or_key,
+			const struct hashmap_entry *eptr,
+			const struct hashmap_entry *entry_or_key,
 			const void *unused_keydata)
 {
 	/* NEEDSWORK: const correctness? */
 	struct diff_options *opt = (void *)cmpfn_data;
-	struct patch_id *a = (void *)entry;
-	struct patch_id *b = (void *)entry_or_key;
+	struct patch_id *a, *b;
+
+	a = container_of(eptr, struct patch_id, ent);
+	b = container_of(entry_or_key, struct patch_id, ent);
 
 	if (is_null_oid(&a->patch_id) &&
 	    commit_patch_id(a->commit, opt, &a->patch_id, 0, 0))
@@ -69,7 +71,7 @@
 
 int free_patch_ids(struct patch_ids *ids)
 {
-	hashmap_free(&ids->patches, 1);
+	hashmap_free_entries(&ids->patches, struct patch_id, ent);
 	return 0;
 }
 
@@ -83,7 +85,7 @@
 	if (commit_patch_id(commit, &ids->diffopts, &header_only_patch_id, 1, 0))
 		return -1;
 
-	hashmap_entry_init(patch, oidhash(&header_only_patch_id));
+	hashmap_entry_init(&patch->ent, oidhash(&header_only_patch_id));
 	return 0;
 }
 
@@ -99,7 +101,7 @@
 	if (init_patch_id_entry(&patch, commit, ids))
 		return NULL;
 
-	return hashmap_get(&ids->patches, &patch, NULL);
+	return hashmap_get_entry(&ids->patches, &patch, ent, NULL);
 }
 
 struct patch_id *add_commit_patch_id(struct commit *commit,
@@ -116,6 +118,6 @@
 		return NULL;
 	}
 
-	hashmap_add(&ids->patches, key);
+	hashmap_add(&ids->patches, &key->ent);
 	return key;
 }
diff --git a/path.c b/path.c
index b24e419..e42bba6 100644
--- a/path.c
+++ b/path.c
@@ -1221,31 +1221,52 @@
 }
 
 /*
+ * If path ends with suffix (complete path components), returns the offset of
+ * the last character in the path before the suffix (sans trailing directory
+ * separators), and -1 otherwise.
+ */
+static ssize_t stripped_path_suffix_offset(const char *path, const char *suffix)
+{
+	int path_len = strlen(path), suffix_len = strlen(suffix);
+
+	while (suffix_len) {
+		if (!path_len)
+			return -1;
+
+		if (is_dir_sep(path[path_len - 1])) {
+			if (!is_dir_sep(suffix[suffix_len - 1]))
+				return -1;
+			path_len = chomp_trailing_dir_sep(path, path_len);
+			suffix_len = chomp_trailing_dir_sep(suffix, suffix_len);
+		}
+		else if (path[--path_len] != suffix[--suffix_len])
+			return -1;
+	}
+
+	if (path_len && !is_dir_sep(path[path_len - 1]))
+		return -1;
+	return chomp_trailing_dir_sep(path, path_len);
+}
+
+/*
+ * Returns true if the path ends with components, considering only complete path
+ * components, and false otherwise.
+ */
+int ends_with_path_components(const char *path, const char *components)
+{
+	return stripped_path_suffix_offset(path, components) != -1;
+}
+
+/*
  * If path ends with suffix (complete path components), returns the
  * part before suffix (sans trailing directory separators).
  * Otherwise returns NULL.
  */
 char *strip_path_suffix(const char *path, const char *suffix)
 {
-	int path_len = strlen(path), suffix_len = strlen(suffix);
+	ssize_t offset = stripped_path_suffix_offset(path, suffix);
 
-	while (suffix_len) {
-		if (!path_len)
-			return NULL;
-
-		if (is_dir_sep(path[path_len - 1])) {
-			if (!is_dir_sep(suffix[suffix_len - 1]))
-				return NULL;
-			path_len = chomp_trailing_dir_sep(path, path_len);
-			suffix_len = chomp_trailing_dir_sep(suffix, suffix_len);
-		}
-		else if (path[--path_len] != suffix[--suffix_len])
-			return NULL;
-	}
-
-	if (path_len && !is_dir_sep(path[path_len - 1]))
-		return NULL;
-	return xstrndup(path, chomp_trailing_dir_sep(path, path_len));
+	return offset == -1 ? NULL : xstrndup(path, offset);
 }
 
 int daemon_avoid_alias(const char *p)
diff --git a/path.h b/path.h
index 2ba6ca5..14d6dca 100644
--- a/path.h
+++ b/path.h
@@ -193,4 +193,7 @@
 const char *git_path_fetch_head(struct repository *r);
 const char *git_path_shallow(struct repository *r);
 
+
+int ends_with_path_components(const char *path, const char *components);
+
 #endif /* PATH_H */
diff --git a/perl/Git/SVN.pm b/perl/Git/SVN.pm
index 76b2965..4b28b87 100644
--- a/perl/Git/SVN.pm
+++ b/perl/Git/SVN.pm
@@ -1491,6 +1491,10 @@
 
 sub check_author {
 	my ($author) = @_;
+	if (defined $author) {
+		$author =~ s/^\s+//g;
+		$author =~ s/\s+$//g;
+	}
 	if (!defined $author || length $author == 0) {
 		$author = '(no author)';
 	}
diff --git a/po/bg.po b/po/bg.po
index e1d10db..e446c76 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -31,7 +31,7 @@
 # am прилагам поредица от кръпки
 # working directory/tree — винаги работно дърво, git следи цялото дърво, а не директории, работна директория за cwd
 # switch to branch преминавам към клон
-# sparse entry частично изтеглена директория/път
+# sparse entry/blob частично изтеглена директория/път/обект-BLOB
 # revision range диапазон на версиите
 # cover letter придружаващо писмо
 # reference repository еталонно хранилище
@@ -155,10 +155,10 @@
 # for i in `sort -u FILES`; do cnt=`grep $i FILES | wc -l`; echo $cnt $i ;done | sort -n
 msgid ""
 msgstr ""
-"Project-Id-Version: git 2.22\n"
+"Project-Id-Version: git 2.24\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2019-08-10 12:25+0300\n"
-"PO-Revision-Date: 2019-08-10 12:33+0300\n"
+"POT-Creation-Date: 2019-10-28 13:19+0800\n"
+"PO-Revision-Date: 2019-10-29 11:35+0100\n"
 "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
 "Language-Team: Bulgarian <dict@fsa-bg.org>\n"
 "Language: bg\n"
@@ -209,7 +209,7 @@
 msgid "Exiting because of an unresolved conflict."
 msgstr "Изход от програмата заради некоригиран конфликт."
 
-#: advice.c:193 builtin/merge.c:1327
+#: advice.c:193 builtin/merge.c:1332
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Не сте завършили сливане.  (Указателят „MERGE_HEAD“ съществува)."
 
@@ -355,17 +355,7 @@
 msgid "inconsistent header lines %d and %d"
 msgstr "несъвместими заглавни части на редове №%d и №%d"
 
-#: apply.c:1460
-#, c-format
-msgid "recount: unexpected line: %.*s"
-msgstr "при повторното преброяване бе получен неочакван ред: „%.*s“"
-
-#: apply.c:1529
-#, c-format
-msgid "patch fragment without header at line %d: %.*s"
-msgstr "част от кръпка без заглавна част на ред %d: %.*s"
-
-#: apply.c:1551
+#: apply.c:1372
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -380,71 +370,81 @@
 "След съкращаването на първите %d части от компонентите на пътя, в заглавната "
 "част на „git diff“ липсва информация за име на файл (ред: %d)"
 
-#: apply.c:1564
+#: apply.c:1385
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr ""
 "в заглавната част на „git diff“ липсва информация за име на файл (ред: %d)"
 
-#: apply.c:1752
+#: apply.c:1481
+#, c-format
+msgid "recount: unexpected line: %.*s"
+msgstr "при повторното преброяване бе получен неочакван ред: „%.*s“"
+
+#: apply.c:1550
+#, c-format
+msgid "patch fragment without header at line %d: %.*s"
+msgstr "част от кръпка без заглавна част на ред %d: %.*s"
+
+#: apply.c:1753
 msgid "new file depends on old contents"
 msgstr "новият файл зависи от старото съдържание на файла"
 
-#: apply.c:1754
+#: apply.c:1755
 msgid "deleted file still has contents"
 msgstr "изтритият файл не е празен"
 
-#: apply.c:1788
+#: apply.c:1789
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "грешка в кръпката на ред %d"
 
-#: apply.c:1825
+#: apply.c:1826
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "новият файл „%s“ зависи от старото съдържание на файла"
 
-#: apply.c:1827
+#: apply.c:1828
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "изтритият файл „%s“ не е празен"
 
-#: apply.c:1830
+#: apply.c:1831
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "● предупреждение: файлът „%s“ вече е празен, но не е изтрит"
 
-#: apply.c:1977
+#: apply.c:1978
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "грешка в двоичната кръпка на ред %d: %.*s"
 
-#: apply.c:2014
+#: apply.c:2015
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "неразпозната двоичната кръпка на ред %d"
 
-#: apply.c:2176
+#: apply.c:2177
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "кръпката е с изцяло повредени данни на ред %d"
 
-#: apply.c:2262
+#: apply.c:2263
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "символната връзка „%s“ не може да бъде прочетена"
 
-#: apply.c:2266
+#: apply.c:2267
 #, c-format
 msgid "unable to open or read %s"
 msgstr "файлът „%s“ не може да бъде отворен или прочетен"
 
-#: apply.c:2925
+#: apply.c:2926
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "неправилно начало на ред: „%c“"
 
-#: apply.c:3046
+#: apply.c:3047
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
@@ -453,13 +453,13 @@
 msgstr[1] ""
 "%d-то парче код бе успешно приложено на ред %d (отместване от %d реда)."
 
-#: apply.c:3058
+#: apply.c:3059
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr ""
 "Контекстът е намален на (%ld/%ld) за прилагането на парчето код на ред %d"
 
-#: apply.c:3064
+#: apply.c:3065
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -468,317 +468,317 @@
 "при търсене за:\n"
 "%.*s"
 
-#: apply.c:3086
+#: apply.c:3087
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "липсват данните за двоичната кръпка за „%s“"
 
-#: apply.c:3094
+#: apply.c:3095
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr ""
 "двоичната кръпка не може да се приложи в обратна посока, когато обратното "
 "парче за „%s“ липсва"
 
-#: apply.c:3141
+#: apply.c:3142
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr "към „%s“ не може да се приложи двоична кръпка без пълен индекс"
 
-#: apply.c:3151
+#: apply.c:3152
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr "кръпката съответства на „%s“ (%s), който не съвпада по съдържание."
 
-#: apply.c:3159
+#: apply.c:3160
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "кръпката съответства на „%s“, който трябва да е празен, но не е"
 
-#: apply.c:3177
+#: apply.c:3178
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr ""
 "необходимият резултат след операцията  — „%s“ за „%s“ не може да бъде "
 "прочетен"
 
-#: apply.c:3190
+#: apply.c:3191
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "двоичната кръпка не може да бъде приложена върху „%s“"
 
-#: apply.c:3196
+#: apply.c:3197
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
 "двоичната кръпка за „%s“ води до неправилни резултати (очакваше се: „%s“, а "
 "бе получено: „%s“)"
 
-#: apply.c:3217
+#: apply.c:3218
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "неуспешно прилагане на кръпка: „%s:%ld“"
 
-#: apply.c:3340
+#: apply.c:3341
 #, c-format
 msgid "cannot checkout %s"
 msgstr "„%s“ не може да се изтегли"
 
-#: apply.c:3392 apply.c:3403 apply.c:3449 midx.c:62 setup.c:279
+#: apply.c:3393 apply.c:3404 apply.c:3450 midx.c:61 setup.c:280
 #, c-format
 msgid "failed to read %s"
 msgstr "файлът „%s“ не може да бъде прочетен"
 
-#: apply.c:3400
+#: apply.c:3401
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "изчитане на „%s“ след проследяване на символна връзка"
 
-#: apply.c:3429 apply.c:3672
+#: apply.c:3430 apply.c:3673
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "обектът с път „%s“ е преименуван или изтрит"
 
-#: apply.c:3515 apply.c:3687
+#: apply.c:3516 apply.c:3688
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "„%s“ не съществува в индекса"
 
-#: apply.c:3524 apply.c:3695
+#: apply.c:3525 apply.c:3696
 #, c-format
 msgid "%s: does not match index"
 msgstr "„%s“ не съответства на индекса"
 
-#: apply.c:3559
+#: apply.c:3560
 msgid "repository lacks the necessary blob to fall back on 3-way merge."
 msgstr ""
 "в хранилището липсват необходимите обекти-BLOB, за да се премине към тройно "
 "сливане."
 
-#: apply.c:3562
+#: apply.c:3563
 #, c-format
 msgid "Falling back to three-way merge...\n"
 msgstr "Преминаване към тройно сливане…\n"
 
-#: apply.c:3578 apply.c:3582
+#: apply.c:3579 apply.c:3583
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "текущото съдържание на „%s“ не може да бъде прочетено"
 
-#: apply.c:3594
+#: apply.c:3595
 #, c-format
 msgid "Failed to fall back on three-way merge...\n"
 msgstr "Неуспешно преминаване към тройно сливане…\n"
 
-#: apply.c:3608
+#: apply.c:3609
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "Конфликти при прилагането на кръпката към „%s“.\n"
 
-#: apply.c:3613
+#: apply.c:3614
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "Кръпката бе приложена чисто към „%s“.\n"
 
-#: apply.c:3639
+#: apply.c:3640
 msgid "removal patch leaves file contents"
 msgstr "изтриващата кръпка оставя файла непразен"
 
-#: apply.c:3712
+#: apply.c:3713
 #, c-format
 msgid "%s: wrong type"
 msgstr "„%s“: неправилен вид"
 
-#: apply.c:3714
+#: apply.c:3715
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "„%s“ е от вид „%o“, а се очакваше „%o“"
 
-#: apply.c:3865 apply.c:3867 read-cache.c:830 read-cache.c:856
+#: apply.c:3866 apply.c:3868 read-cache.c:830 read-cache.c:856
 #: read-cache.c:1309
 #, c-format
 msgid "invalid path '%s'"
 msgstr "неправилен път: „%s“"
 
-#: apply.c:3923
+#: apply.c:3924
 #, c-format
 msgid "%s: already exists in index"
 msgstr "„%s“: вече съществува в индекса"
 
-#: apply.c:3926
+#: apply.c:3927
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "„%s“: вече съществува в работното дърво"
 
-#: apply.c:3946
+#: apply.c:3947
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "новите права за достъп (%o) на „%s“ не съвпадат със старите (%o)"
 
-#: apply.c:3951
+#: apply.c:3952
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr ""
 "новите права за достъп (%o) на „%s“ не съвпадат със старите (%o) на „%s“"
 
-#: apply.c:3971
+#: apply.c:3972
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "засегнатият файл „%s“ е след символна връзка"
 
-#: apply.c:3975
+#: apply.c:3976
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "Кръпката „%s“ не може да бъде приложена"
 
-#: apply.c:3990
+#: apply.c:3991
 #, c-format
 msgid "Checking patch %s..."
 msgstr "Проверяване на кръпката „%s“…"
 
-#: apply.c:4082
+#: apply.c:4083
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr ""
 "информацията за сумата по SHA1 за подмодула липсва или не е достатъчна (%s)."
 
-#: apply.c:4089
+#: apply.c:4090
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "смяна на режима на достъпа на „%s“, който не е в текущия връх „HEAD“"
 
-#: apply.c:4092
+#: apply.c:4093
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "информацията за сумата по SHA1 липсва или не е достатъчна (%s)."
 
-#: apply.c:4097 builtin/checkout.c:278 builtin/reset.c:143
+#: apply.c:4098 builtin/checkout.c:279 builtin/reset.c:143
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "неуспешно създаване на запис в кеша чрез „make_cache_entry“ за „%s“"
 
-#: apply.c:4101
+#: apply.c:4102
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "„%s“ не може да се добави към временния индекс"
 
-#: apply.c:4111
+#: apply.c:4112
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "временният индекс не може да се запази в „%s“"
 
-#: apply.c:4249
+#: apply.c:4250
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "„%s“ не може да се извади от индекса"
 
-#: apply.c:4283
+#: apply.c:4284
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "повредена кръпка за модула „%s“"
 
-#: apply.c:4289
+#: apply.c:4290
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr ""
 "не може да се получи информация чрез „stat“ за новосъздадения файл „%s“"
 
-#: apply.c:4297
+#: apply.c:4298
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr ""
 "не може да се за създаде мястото за съхранение на новосъздадения файл „%s“"
 
-#: apply.c:4303 apply.c:4448
+#: apply.c:4304 apply.c:4449
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "не може да се добави запис в кеша за „%s“"
 
-#: apply.c:4346
+#: apply.c:4347
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "в „%s“ не може да се пише"
 
-#: apply.c:4350
+#: apply.c:4351
 #, c-format
 msgid "closing file '%s'"
 msgstr "затваряне на файла „%s“"
 
-#: apply.c:4420
+#: apply.c:4421
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "файлът „%s“ не може да се запише с режим на достъп „%o“"
 
-#: apply.c:4518
+#: apply.c:4519
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "Кръпката „%s“ бе приложена чисто."
 
-#: apply.c:4526
+#: apply.c:4527
 msgid "internal error"
 msgstr "вътрешна грешка"
 
-#: apply.c:4529
+#: apply.c:4530
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "Прилагане на кръпката „%%s“ с %d отхвърлено парче…"
 msgstr[1] "Прилагане на кръпката „%%s“ с %d отхвърлени парчета…"
 
-#: apply.c:4540
+#: apply.c:4541
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "съкращаване на името на файла с отхвърлените парчета на „ %.*s.rej“"
 
-#: apply.c:4548 builtin/fetch.c:878 builtin/fetch.c:1168
+#: apply.c:4549 builtin/fetch.c:898 builtin/fetch.c:1194
 #, c-format
 msgid "cannot open %s"
 msgstr "„%s“ не може да бъде отворен"
 
-#: apply.c:4562
+#: apply.c:4563
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "%d-то парче бе успешно приложено."
 
-#: apply.c:4566
+#: apply.c:4567
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "%d-то парче бе отхвърлено."
 
-#: apply.c:4676
+#: apply.c:4686
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Пропусната кръпка: „%s“"
 
-#: apply.c:4684
+#: apply.c:4694
 msgid "unrecognized input"
 msgstr "непознат вход"
 
-#: apply.c:4704
+#: apply.c:4714
 msgid "unable to read index file"
 msgstr "индексът не може да бъде записан"
 
-#: apply.c:4859
+#: apply.c:4871
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "кръпката „%s“ не може да бъде отворена: %s"
 
-#: apply.c:4886
+#: apply.c:4898
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "пренебрегната е %d грешка в знаците за интервали"
 msgstr[1] "пренебрегнати са %d грешки в знаците за интервали"
 
-#: apply.c:4892 apply.c:4907
+#: apply.c:4904 apply.c:4919
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d ред добавя грешки в знаците за интервали."
 msgstr[1] "%d реда добавят грешки в знаците за интервали."
 
-#: apply.c:4900
+#: apply.c:4912
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
@@ -787,144 +787,144 @@
 msgstr[1] ""
 "Добавени са %d реда след корекцията на грешките в знаците за интервали."
 
-#: apply.c:4916 builtin/add.c:540 builtin/mv.c:301 builtin/rm.c:390
+#: apply.c:4928 builtin/add.c:540 builtin/mv.c:301 builtin/rm.c:390
 msgid "Unable to write new index file"
 msgstr "Новият индекс не може да бъде записан"
 
-#: apply.c:4943 apply.c:4946 builtin/am.c:2208 builtin/am.c:2211
-#: builtin/clone.c:123 builtin/fetch.c:128 builtin/merge.c:273
-#: builtin/pull.c:208 builtin/submodule--helper.c:407
+#: apply.c:4955 apply.c:4958 builtin/am.c:2197 builtin/am.c:2200
+#: builtin/clone.c:122 builtin/fetch.c:143 builtin/merge.c:273
+#: builtin/pull.c:209 builtin/submodule--helper.c:407
 #: builtin/submodule--helper.c:1367 builtin/submodule--helper.c:1370
 #: builtin/submodule--helper.c:1850 builtin/submodule--helper.c:1853
 #: builtin/submodule--helper.c:2092 git-add--interactive.perl:211
 msgid "path"
 msgstr "път"
 
-#: apply.c:4944
+#: apply.c:4956
 msgid "don't apply changes matching the given path"
 msgstr "без прилагане на промените напасващи на дадения път"
 
-#: apply.c:4947
+#: apply.c:4959
 msgid "apply changes matching the given path"
 msgstr "прилагане на промените напасващи на дадения път"
 
-#: apply.c:4949 builtin/am.c:2217
+#: apply.c:4961 builtin/am.c:2206
 msgid "num"
 msgstr "БРОЙ"
 
-#: apply.c:4950
+#: apply.c:4962
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "премахване на този БРОЙ водещи елементи от пътищата в разликата"
 
-#: apply.c:4953
+#: apply.c:4965
 msgid "ignore additions made by the patch"
 msgstr "игнориране на редовете добавени от тази кръпка"
 
-#: apply.c:4955
+#: apply.c:4967
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "извеждане на статистика на промените без прилагане на кръпката"
 
-#: apply.c:4959
+#: apply.c:4971
 msgid "show number of added and deleted lines in decimal notation"
 msgstr "извеждане на броя на добавените и изтритите редове"
 
-#: apply.c:4961
+#: apply.c:4973
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "извеждане на статистика на входните данни без прилагане на кръпката"
 
-#: apply.c:4963
+#: apply.c:4975
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "проверка дали кръпката може да се приложи, без действително прилагане"
 
-#: apply.c:4965
+#: apply.c:4977
 msgid "make sure the patch is applicable to the current index"
 msgstr "проверка дали кръпката може да бъде приложена към текущия индекс"
 
-#: apply.c:4967
+#: apply.c:4979
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "отбелязване на новите файлове с „git add --intent-to-add“"
 
-#: apply.c:4969
+#: apply.c:4981
 msgid "apply a patch without touching the working tree"
 msgstr "прилагане на кръпката без промяна на работното дърво"
 
-#: apply.c:4971
+#: apply.c:4983
 msgid "accept a patch that touches outside the working area"
 msgstr "прилагане на кръпка, която променя и файлове извън работното дърво"
 
-#: apply.c:4974
+#: apply.c:4986
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr ""
 "кръпката да бъде приложена.  Опцията се комбинира с „--check“/„--stat“/„--"
 "summary“"
 
-#: apply.c:4976
+#: apply.c:4988
 msgid "attempt three-way merge if a patch does not apply"
 msgstr "пробване с тройно сливане, ако кръпката не може да се приложи директно"
 
-#: apply.c:4978
+#: apply.c:4990
 msgid "build a temporary index based on embedded index information"
 msgstr ""
 "създаване на временен индекс на база на включената информация за индекса"
 
-#: apply.c:4981 builtin/checkout-index.c:173 builtin/ls-files.c:524
+#: apply.c:4993 builtin/checkout-index.c:173 builtin/ls-files.c:524
 msgid "paths are separated with NUL character"
 msgstr "разделяне на пътищата с нулевия знак „NUL“"
 
-#: apply.c:4983
+#: apply.c:4995
 msgid "ensure at least <n> lines of context match"
 msgstr "да се осигури контекст от поне такъв БРОЙ съвпадащи редове"
 
-#: apply.c:4984 builtin/am.c:2196 builtin/interpret-trailers.c:98
+#: apply.c:4996 builtin/am.c:2185 builtin/interpret-trailers.c:98
 #: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3330 builtin/rebase.c:1421
+#: builtin/pack-objects.c:3310 builtin/rebase.c:1445
 msgid "action"
 msgstr "действие"
 
-#: apply.c:4985
+#: apply.c:4997
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "засичане на нови или променени редове с грешки в знаците за интервали"
 
-#: apply.c:4988 apply.c:4991
+#: apply.c:5000 apply.c:5003
 msgid "ignore changes in whitespace when finding context"
 msgstr ""
 "игнориране на промените в знаците за интервали при откриване на контекста"
 
-#: apply.c:4994
+#: apply.c:5006
 msgid "apply the patch in reverse"
 msgstr "прилагане на кръпката в обратна посока"
 
-#: apply.c:4996
+#: apply.c:5008
 msgid "don't expect at least one line of context"
 msgstr "без изискване на дори и един ред контекст"
 
-#: apply.c:4998
+#: apply.c:5010
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "оставяне на отхвърлените парчета във файлове с разширение „.rej“"
 
-#: apply.c:5000
+#: apply.c:5012
 msgid "allow overlapping hunks"
 msgstr "позволяване на застъпващи се парчета"
 
-#: apply.c:5001 builtin/add.c:291 builtin/check-ignore.c:22
+#: apply.c:5013 builtin/add.c:291 builtin/check-ignore.c:22
 #: builtin/commit.c:1337 builtin/count-objects.c:98 builtin/fsck.c:786
-#: builtin/log.c:2068 builtin/mv.c:123 builtin/read-tree.c:128
+#: builtin/log.c:2085 builtin/mv.c:123 builtin/read-tree.c:128
 msgid "be verbose"
 msgstr "повече подробности"
 
-#: apply.c:5003
+#: apply.c:5015
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr "пренебрегване на неправилно липсващ знак за нов ред в края на файл"
 
-#: apply.c:5006
+#: apply.c:5018
 msgid "do not trust the line counts in the hunk headers"
 msgstr "без доверяване на номерата на редовете в заглавните части на парчетата"
 
-#: apply.c:5008 builtin/am.c:2205
+#: apply.c:5020 builtin/am.c:2194
 msgid "root"
 msgstr "НАЧАЛНА_ДИРЕКТОРИЯ"
 
-#: apply.c:5009
+#: apply.c:5021
 msgid "prepend <root> to all filenames"
 msgstr "добавяне на тази НАЧАЛНА_ДИРЕКТОРИЯ към имената на всички файлове"
 
@@ -979,7 +979,7 @@
 msgid "archive format"
 msgstr "ФОРМАТ на архива"
 
-#: archive.c:458 builtin/log.c:1580
+#: archive.c:458 builtin/log.c:1581
 msgid "prefix"
 msgstr "ПРЕФИКС"
 
@@ -987,11 +987,12 @@
 msgid "prepend prefix to each pathname in the archive"
 msgstr "добавяне на този ПРЕФИКС към всеки път в архива"
 
-#: archive.c:460 builtin/blame.c:862 builtin/blame.c:874 builtin/blame.c:875
-#: builtin/commit-tree.c:117 builtin/config.c:129 builtin/fast-export.c:1134
-#: builtin/fast-export.c:1136 builtin/grep.c:897 builtin/hash-object.c:105
-#: builtin/ls-files.c:560 builtin/ls-files.c:563 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:177
+#: archive.c:460 builtin/blame.c:861 builtin/blame.c:873 builtin/blame.c:874
+#: builtin/commit-tree.c:117 builtin/config.c:129 builtin/fast-export.c:1162
+#: builtin/fast-export.c:1164 builtin/fast-export.c:1168 builtin/grep.c:899
+#: builtin/hash-object.c:105 builtin/ls-files.c:560 builtin/ls-files.c:563
+#: builtin/notes.c:412 builtin/notes.c:578 builtin/read-tree.c:123
+#: parse-options.h:186
 msgid "file"
 msgstr "ФАЙЛ"
 
@@ -1023,7 +1024,7 @@
 msgid "list supported archive formats"
 msgstr "извеждане на списъка с поддържаните формати"
 
-#: archive.c:479 builtin/archive.c:91 builtin/clone.c:113 builtin/clone.c:116
+#: archive.c:479 builtin/archive.c:91 builtin/clone.c:112 builtin/clone.c:115
 #: builtin/submodule--helper.c:1379 builtin/submodule--helper.c:1859
 msgid "repo"
 msgstr "хранилище"
@@ -1032,7 +1033,7 @@
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "изтегляне на архива от отдалеченото ХРАНИЛИЩЕ"
 
-#: archive.c:481 builtin/archive.c:93 builtin/difftool.c:707
+#: archive.c:481 builtin/archive.c:93 builtin/difftool.c:715
 #: builtin/notes.c:498
 msgid "command"
 msgstr "команда"
@@ -1068,26 +1069,26 @@
 msgid "cannot stream blob %s"
 msgstr "обектът-BLOB „%s“ не може да бъде обработен"
 
-#: archive-tar.c:260 archive-zip.c:363
+#: archive-tar.c:266 archive-zip.c:363
 #, c-format
 msgid "unsupported file mode: 0%o (SHA1: %s)"
 msgstr "неподдържани права за достъп до файл: 0%o (SHA1: %s)"
 
-#: archive-tar.c:287 archive-zip.c:353
+#: archive-tar.c:293 archive-zip.c:353
 #, c-format
 msgid "cannot read %s"
 msgstr "обектът „%s“ не може да бъде прочетен"
 
-#: archive-tar.c:459
+#: archive-tar.c:465
 #, c-format
 msgid "unable to start '%s' filter"
 msgstr "филтърът „%s“ не може да бъде стартиран"
 
-#: archive-tar.c:462
+#: archive-tar.c:468
 msgid "unable to redirect descriptor"
 msgstr "дескрипторът не може да бъде пренасочен"
 
-#: archive-tar.c:469
+#: archive-tar.c:475
 #, c-format
 msgid "'%s' filter reported error"
 msgstr "филтърът „%s“ върна грешка"
@@ -1112,17 +1113,17 @@
 msgid "timestamp too large for this system: %<PRIuMAX>"
 msgstr "времевата стойност е твърде голяма за тази система: %<PRIuMAX>"
 
-#: attr.c:211
+#: attr.c:213
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr "„%.*s“ е неправилно име за атрибут"
 
-#: attr.c:368
+#: attr.c:370
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s: командата не е позволена: „%s:%d“"
 
-#: attr.c:408
+#: attr.c:410
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1249,41 +1250,41 @@
 msgstr[0] "Двоично търсене: остава %d версия след тази %s\n"
 msgstr[1] "Двоично търсене: остават %d версии след тази %s\n"
 
-#: blame.c:2697
+#: blame.c:2700
 msgid "--contents and --reverse do not blend well."
 msgstr "Опциите „--contents“ и „--reverse“ са несъвместими"
 
-#: blame.c:2711
+#: blame.c:2714
 msgid "cannot use --contents with final commit object name"
 msgstr "Опцията „--contents“ е несъвместима с име на обект от крайно подаване"
 
-#: blame.c:2732
+#: blame.c:2735
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "Едновременното задаване на опциите „--reverse“ и „--first-parent“ изисква "
 "указването на крайно подаване"
 
-#: blame.c:2741 bundle.c:167 ref-filter.c:2196 remote.c:1938 sequencer.c:2033
-#: sequencer.c:4348 builtin/commit.c:1020 builtin/log.c:387 builtin/log.c:963
-#: builtin/log.c:1451 builtin/log.c:1827 builtin/log.c:2117 builtin/merge.c:411
-#: builtin/pack-objects.c:3148 builtin/pack-objects.c:3163
+#: blame.c:2744 bundle.c:167 ref-filter.c:2203 remote.c:1941 sequencer.c:1971
+#: sequencer.c:4305 builtin/commit.c:1020 builtin/log.c:387 builtin/log.c:964
+#: builtin/log.c:1452 builtin/log.c:1844 builtin/log.c:2134 builtin/merge.c:411
+#: builtin/pack-objects.c:3128 builtin/pack-objects.c:3143
 #: builtin/shortlog.c:192
 msgid "revision walk setup failed"
 msgstr "неуспешно настройване на обхождането на версиите"
 
-#: blame.c:2759
+#: blame.c:2762
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "Едновременното задаване на опциите „--reverse“ и „--first-parent“ изисква "
 "указването на диапазон по веригата на първите наследници"
 
-#: blame.c:2770
+#: blame.c:2773
 #, c-format
 msgid "no such path %s in %s"
 msgstr "няма път на име „%s“ в „%s“"
 
-#: blame.c:2781
+#: blame.c:2784
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "обектът-BLOB „%s“ в пътя %s не може да бъде прочетен"
@@ -1436,7 +1437,7 @@
 msgid "unrecognized header: %s%s (%d)"
 msgstr "непозната заглавна част: %s%s (%d)"
 
-#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2283 sequencer.c:3024
+#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2221 sequencer.c:2962
 #: builtin/commit.c:791
 #, c-format
 msgid "could not open '%s'"
@@ -1490,7 +1491,7 @@
 msgstr ""
 "указателят „%s“ не е бил включен поради опциите зададени на „git rev-list“"
 
-#: bundle.c:460 builtin/log.c:202 builtin/log.c:1732 builtin/shortlog.c:306
+#: bundle.c:460 builtin/log.c:202 builtin/log.c:1733 builtin/shortlog.c:306
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "непознат аргумент: %s"
@@ -1513,8 +1514,8 @@
 msgid "invalid color value: %.*s"
 msgstr "неправилна стойност за цвят: %.*s"
 
-#: commit.c:50 sequencer.c:2727 builtin/am.c:355 builtin/am.c:399
-#: builtin/am.c:1378 builtin/am.c:2020 builtin/replace.c:455
+#: commit.c:50 sequencer.c:2665 builtin/am.c:354 builtin/am.c:398
+#: builtin/am.c:1366 builtin/am.c:2009 builtin/replace.c:456
 #, c-format
 msgid "could not parse %s"
 msgstr "„%s“ не може да се анализира"
@@ -1547,29 +1548,29 @@
 "\n"
 "    git config advice.graftFileDeprecated false"
 
-#: commit.c:1127
+#: commit.c:1128
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr ""
 "Подаването „%s“ е с недоверен подпис от GPG, който твърди, че е на „%s“."
 
-#: commit.c:1130
+#: commit.c:1131
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr ""
 "Подаването „%s“ е с неправилен подпис от GPG, който твърди, че е на „%s“."
 
-#: commit.c:1133
+#: commit.c:1134
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "Подаването „%s“ е без подпис от GPG."
 
-#: commit.c:1136
+#: commit.c:1137
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "Подаването „%s“ е с коректен подпис от GPG на „%s“.\n"
 
-#: commit.c:1390
+#: commit.c:1391
 msgid ""
 "Warning: commit message did not conform to UTF-8.\n"
 "You may want to amend it after fixing the message, or set the config\n"
@@ -1631,185 +1632,200 @@
 msgid "unable to find all commit-graph files"
 msgstr "някои файлове на гра̀фа с подаванията не могат да бъдат открити"
 
-#: commit-graph.c:554 commit-graph.c:614
+#: commit-graph.c:561 commit-graph.c:621
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr ""
 "неправилна позиция на подаването.  Вероятно графът с подаванията е повреден"
 
-#: commit-graph.c:575
+#: commit-graph.c:582
 #, c-format
 msgid "could not find commit %s"
 msgstr "подаването „%s“ не може да бъде открито"
 
-#: commit-graph.c:1002 builtin/pack-objects.c:2657
+#: commit-graph.c:855 builtin/am.c:1287
+#, c-format
+msgid "unable to parse commit %s"
+msgstr "подаването не може да бъде анализирано: %s"
+
+#: commit-graph.c:859
+#, c-format
+msgid "unable to get tree for %s"
+msgstr "дървото на „%s“ не може да бъде получено"
+
+#: commit-graph.c:1017 builtin/pack-objects.c:2641
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "видът на обекта „%s“ не може да бъде определен"
 
-#: commit-graph.c:1034
+#: commit-graph.c:1049
 msgid "Loading known commits in commit graph"
 msgstr "Зареждане на познатите подавания в гра̀фа с подаванията"
 
-#: commit-graph.c:1051
+#: commit-graph.c:1066
 msgid "Expanding reachable commits in commit graph"
 msgstr "Разширяване на достижимите подавания в гра̀фа"
 
-#: commit-graph.c:1070
+#: commit-graph.c:1085
 msgid "Clearing commit marks in commit graph"
 msgstr "Изчистване на отбелязванията на подаванията в гра̀фа с подаванията"
 
-#: commit-graph.c:1089
+#: commit-graph.c:1104
 msgid "Computing commit graph generation numbers"
 msgstr "Изчисляване на номерата на поколенията в гра̀фа с подаванията"
 
-#: commit-graph.c:1163
+#: commit-graph.c:1179
 #, c-format
 msgid "Finding commits for commit graph in %d pack"
 msgid_plural "Finding commits for commit graph in %d packs"
 msgstr[0] "Откриване на подаванията в гра̀фа в %d пакетен файл"
 msgstr[1] "Откриване на подаванията в гра̀фа в %d пакетни файла"
 
-#: commit-graph.c:1176
+#: commit-graph.c:1192
 #, c-format
 msgid "error adding pack %s"
 msgstr "грешка при добавяне на пакетен файл „%s“"
 
-#: commit-graph.c:1180
+#: commit-graph.c:1196
 #, c-format
 msgid "error opening index for %s"
 msgstr "грешка при отваряне на индекса на „%s“"
 
-#: commit-graph.c:1204
+#: commit-graph.c:1220
 #, c-format
 msgid "Finding commits for commit graph from %d ref"
 msgid_plural "Finding commits for commit graph from %d refs"
 msgstr[0] "Откриване на подаванията в гра̀фа измежду %d указател"
 msgstr[1] "Откриване на подаванията в гра̀фа измежду %d указатели"
 
-#: commit-graph.c:1238
+#: commit-graph.c:1240
+#, c-format
+msgid "invalid commit object id: %s"
+msgstr "неправилен идентификатор на обект-подаване: „%s“"
+
+#: commit-graph.c:1255
 msgid "Finding commits for commit graph among packed objects"
 msgstr "Откриване на подаванията в гра̀фа измежду пакетираните обекти"
 
-#: commit-graph.c:1253
+#: commit-graph.c:1270
 msgid "Counting distinct commits in commit graph"
 msgstr "Преброяване на различните подавания в гра̀фа"
 
-#: commit-graph.c:1284
+#: commit-graph.c:1300
 msgid "Finding extra edges in commit graph"
 msgstr "Откриване на още върхове в гра̀фа с подаванията"
 
-#: commit-graph.c:1332
+#: commit-graph.c:1346
 msgid "failed to write correct number of base graph ids"
 msgstr "правилният брой на базовите идентификатори не може да се запише"
 
-#: commit-graph.c:1365 midx.c:811
+#: commit-graph.c:1379 midx.c:810
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "родителските директории на „%s“ не могат да бъдат създадени"
 
-#: commit-graph.c:1377 builtin/index-pack.c:306 builtin/repack.c:240
+#: commit-graph.c:1391 builtin/index-pack.c:306 builtin/repack.c:241
 #, c-format
 msgid "unable to create '%s'"
 msgstr "пакетният файл „%s“ не може да бъде създаден"
 
-#: commit-graph.c:1437
+#: commit-graph.c:1451
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "Запазване на гра̀фа с подаванията в %d пас"
 msgstr[1] "Запазване на гра̀фа с подаванията в %d паса"
 
-#: commit-graph.c:1478
+#: commit-graph.c:1492
 msgid "unable to open commit-graph chain file"
 msgstr "файлът с веригата на гра̀фа с подаванията не може да се отвори"
 
-#: commit-graph.c:1490
+#: commit-graph.c:1504
 msgid "failed to rename base commit-graph file"
 msgstr "основният файл на гра̀фа с подаванията не може да бъде преименуван"
 
-#: commit-graph.c:1510
+#: commit-graph.c:1524
 msgid "failed to rename temporary commit-graph file"
 msgstr "временният файл на гра̀фа с подаванията не може да бъде преименуван"
 
-#: commit-graph.c:1621
+#: commit-graph.c:1635
 msgid "Scanning merged commits"
 msgstr "Търсене на подаванията със сливания"
 
-#: commit-graph.c:1632
+#: commit-graph.c:1646
 #, c-format
 msgid "unexpected duplicate commit id %s"
 msgstr "неочакван, повтарящ се идентификатор на подаване: %s"
 
-#: commit-graph.c:1657
+#: commit-graph.c:1670
 msgid "Merging commit-graph"
 msgstr "Сливане на гра̀фа с подаванията"
 
-#: commit-graph.c:1844
+#: commit-graph.c:1860
 #, c-format
 msgid "the commit graph format cannot write %d commits"
 msgstr "форматът на гра̀фа с подаванията не може да запише %d подавания"
 
-#: commit-graph.c:1855
+#: commit-graph.c:1871
 msgid "too many commits to write graph"
 msgstr "прекалено много подавания за записване на гра̀фа"
 
-#: commit-graph.c:1945
+#: commit-graph.c:1961
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr "графът с подаванията е с грешна сума за проверка — вероятно е повреден"
 
-#: commit-graph.c:1955
+#: commit-graph.c:1971
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr ""
 "неправилна подредба на обектите по идентификатор в гра̀фа с подаванията: „%s“ "
 "е преди „%s“, а не трябва"
 
-#: commit-graph.c:1965 commit-graph.c:1980
+#: commit-graph.c:1981 commit-graph.c:1996
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr ""
 "неправилна стойност за откъс в гра̀фа с подаванията: fanout[%d] = %u, а "
 "трябва да е %u"
 
-#: commit-graph.c:1972
+#: commit-graph.c:1988
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "подаване „%s“ в гра̀фа с подаванията не може да се анализира"
 
-#: commit-graph.c:1989
+#: commit-graph.c:2006
 msgid "Verifying commits in commit graph"
 msgstr "Проверка на подаванията в гра̀фа"
 
-#: commit-graph.c:2002
+#: commit-graph.c:2020
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 "подаване „%s“ в базата от данни към гра̀фа с подаванията не може да се "
 "анализира"
 
-#: commit-graph.c:2009
+#: commit-graph.c:2027
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr ""
 "идентификаторът на обект за кореновото дърво за подаване „%s“ в гра̀фа с "
 "подаванията е „%s“, а трябва да е „%s“"
 
-#: commit-graph.c:2019
+#: commit-graph.c:2037
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr "списъкът с родители на „%s“ в гра̀фа с подаванията е прекалено дълъг"
 
-#: commit-graph.c:2028
+#: commit-graph.c:2046
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "родителят на „%s“ в гра̀фа с подаванията е „%s“, а трябва да е „%s“"
 
-#: commit-graph.c:2041
+#: commit-graph.c:2059
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr "списъкът с родители на „%s“ в гра̀фа с подаванията е прекалено къс"
 
-#: commit-graph.c:2046
+#: commit-graph.c:2064
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
@@ -1817,7 +1833,7 @@
 "номерът на поколението на подаване „%s“ в гра̀фа с подаванията е 0, а другаде "
 "не е"
 
-#: commit-graph.c:2050
+#: commit-graph.c:2068
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
@@ -1825,14 +1841,14 @@
 "номерът на поколението на подаване „%s“ в гра̀фа с подаванията не е 0, а "
 "другаде е"
 
-#: commit-graph.c:2065
+#: commit-graph.c:2083
 #, c-format
 msgid "commit-graph generation for commit %s is %u != %u"
 msgstr ""
 "номерът на поколението на подаване „%s“ в гра̀фа с подаванията е %u, а "
 "другаде е %u"
 
-#: commit-graph.c:2071
+#: commit-graph.c:2089
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
@@ -1881,7 +1897,7 @@
 msgid "key does not contain variable name: %s"
 msgstr "ключът не съдържа име на променлива: „%s“"
 
-#: config.c:406 sequencer.c:2463
+#: config.c:406 sequencer.c:2401
 #, c-format
 msgid "invalid key: %s"
 msgstr "неправилен ключ: „%s“"
@@ -2003,17 +2019,17 @@
 msgid "invalid mode for object creation: %s"
 msgstr "неправилен режим за създаването на обекти: %s"
 
-#: config.c:1430
+#: config.c:1425
 #, c-format
 msgid "malformed value for %s"
 msgstr "неправилна стойност за „%s“"
 
-#: config.c:1456
+#: config.c:1451
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "неправилна стойност за „%s“: „%s“"
 
-#: config.c:1457
+#: config.c:1452
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr ""
 "трябва да е една от следните стойности: „nothing“ (без изтласкване при липса "
@@ -2021,139 +2037,132 @@
 "„simple“ (клонът със същото име, от който се издърпва), „upstream“ (клонът, "
 "от който се издърпва) или „current“ (клонът със същото име)"
 
-#: config.c:1518 builtin/pack-objects.c:3410
+#: config.c:1513 builtin/pack-objects.c:3394
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "неправилно ниво на компресиране при пакетиране: %d"
 
-#: config.c:1639
+#: config.c:1634
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "обектът-BLOB „%s“ с конфигурации не може да се зареди"
 
-#: config.c:1642
+#: config.c:1637
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "указателят „%s“ не сочи към обект-BLOB"
 
-#: config.c:1659
+#: config.c:1654
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "обектът-BLOB „%s“ с конфигурации не може да бъде открит"
 
-#: config.c:1689
+#: config.c:1684
 #, c-format
 msgid "failed to parse %s"
 msgstr "„%s“ не може да бъде анализиран"
 
-#: config.c:1745
+#: config.c:1740
 msgid "unable to parse command-line config"
 msgstr "неправилни настройки от командния ред"
 
-#: config.c:2094
+#: config.c:2091
 msgid "unknown error occurred while reading the configuration files"
 msgstr "неочаквана грешка при изчитането на конфигурационните файлове"
 
-#: config.c:2264
+#: config.c:2261
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "Неправилен %s: „%s“"
 
-#: config.c:2307
-#, c-format
-msgid "unknown core.untrackedCache value '%s'; using 'keep' default value"
-msgstr ""
-"непозната стойност „%s“ за настройката „core.untrackedCache“.  Ще се ползва "
-"стандартната стойност „keep“ (запазване)"
-
-#: config.c:2333
+#: config.c:2306
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr ""
 "стойността на „splitIndex.maxPercentChange“ трябва да е между 1 и 100, а не "
 "%d"
 
-#: config.c:2379
+#: config.c:2352
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "неразпозната стойност „%s“ от командния ред"
 
-#: config.c:2381
+#: config.c:2354
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "неправилна настройка „%s“ във файла „%s“ на ред №%d"
 
-#: config.c:2462
+#: config.c:2435
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "неправилно име на раздел: „%s“"
 
-#: config.c:2494
+#: config.c:2467
 #, c-format
 msgid "%s has multiple values"
 msgstr "зададени са няколко стойности за „%s“"
 
-#: config.c:2523
+#: config.c:2496
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "новият конфигурационен файл „%s“ не може да бъде запазен"
 
-#: config.c:2775 config.c:3099
+#: config.c:2748 config.c:3072
 #, c-format
 msgid "could not lock config file %s"
 msgstr "конфигурационният файл „%s“ не може да бъде заключен"
 
-#: config.c:2786
+#: config.c:2759
 #, c-format
 msgid "opening %s"
 msgstr "отваряне на „%s“"
 
-#: config.c:2821 builtin/config.c:328
+#: config.c:2794 builtin/config.c:328
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "неправилен шаблон: %s"
 
-#: config.c:2846
+#: config.c:2819
 #, c-format
 msgid "invalid config file %s"
 msgstr "неправилен конфигурационен файл: „%s“"
 
-#: config.c:2859 config.c:3112
+#: config.c:2832 config.c:3085
 #, c-format
 msgid "fstat on %s failed"
 msgstr "неуспешно изпълнение на „fstat“ върху „%s“"
 
-#: config.c:2870
+#: config.c:2843
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr "неуспешно изпълнение на „mmap“ върху „%s“"
 
-#: config.c:2879 config.c:3117
+#: config.c:2852 config.c:3090
 #, c-format
 msgid "chmod on %s failed"
 msgstr "неуспешна смяна на права с „chmod“ върху „%s“"
 
-#: config.c:2964 config.c:3214
+#: config.c:2937 config.c:3187
 #, c-format
 msgid "could not write config file %s"
 msgstr "конфигурационният файл „%s“ не може да бъде записан"
 
-#: config.c:2998
+#: config.c:2971
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "„%s“ не може да се зададе да е „%s“"
 
-#: config.c:3000 builtin/remote.c:782
+#: config.c:2973 builtin/remote.c:782
 #, c-format
 msgid "could not unset '%s'"
 msgstr "„%s“ не може да се премахне"
 
-#: config.c:3090
+#: config.c:3063
 #, c-format
 msgid "invalid section name: %s"
 msgstr "неправилно име на раздел: %s"
 
-#: config.c:3257
+#: config.c:3230
 #, c-format
 msgid "missing value for '%s'"
 msgstr "липсва стойност за „%s“"
@@ -2278,7 +2287,7 @@
 msgid "unknown port %s"
 msgstr "непознат порт „%s“"
 
-#: connect.c:845 connect.c:1171
+#: connect.c:845 connect.c:1175
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr "необичайното име на хост „%s“ е блокирано"
@@ -2293,62 +2302,62 @@
 msgid "cannot start proxy %s"
 msgstr "посредникът „%s“ не може да се стартира"
 
-#: connect.c:924
+#: connect.c:928
 msgid "no path specified; see 'git help pull' for valid url syntax"
 msgstr ""
 "не е указан път. Проверете синтаксиса с командата:\n"
 "\n"
 "    git help pull"
 
-#: connect.c:1119
+#: connect.c:1123
 msgid "ssh variant 'simple' does not support -4"
 msgstr "вариантът за „ssh“ — „simple“ (опростен), не поддържа опцията „-4“"
 
-#: connect.c:1131
+#: connect.c:1135
 msgid "ssh variant 'simple' does not support -6"
 msgstr "вариантът за „ssh“ — „simple“ (опростен), не поддържа опцията „-6“"
 
-#: connect.c:1148
+#: connect.c:1152
 msgid "ssh variant 'simple' does not support setting port"
 msgstr ""
 "вариантът за „ssh“ — „simple“ (опростен), не поддържа задаването на порт"
 
-#: connect.c:1260
+#: connect.c:1264
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr "необичайният път „%s“ е блокиран"
 
-#: connect.c:1307
+#: connect.c:1311
 msgid "unable to fork"
 msgstr "неуспешно създаване на процес"
 
-#: connected.c:86 builtin/fsck.c:221 builtin/prune.c:43
+#: connected.c:88 builtin/fsck.c:221 builtin/prune.c:43
 msgid "Checking connectivity"
 msgstr "Проверка на свързаността"
 
-#: connected.c:98
+#: connected.c:100
 msgid "Could not run 'git rev-list'"
 msgstr "Командата „git rev-list“ не може да бъде изпълнена."
 
-#: connected.c:118
+#: connected.c:120
 msgid "failed write to rev-list"
 msgstr "неуспешен запис на списъка с версиите"
 
-#: connected.c:125
+#: connected.c:127
 msgid "failed to close rev-list's stdin"
 msgstr "стандартният вход на списъка с версиите не може да бъде затворен"
 
-#: convert.c:193
+#: convert.c:194
 #, c-format
 msgid "illegal crlf_action %d"
 msgstr "неправилно действие за край на ред: %d"
 
-#: convert.c:206
+#: convert.c:207
 #, c-format
 msgid "CRLF would be replaced by LF in %s"
 msgstr "Всяка последователност от знаци „CRLF“ ще бъдe заменена с „LF“ в „%s“."
 
-#: convert.c:208
+#: convert.c:209
 #, c-format
 msgid ""
 "CRLF will be replaced by LF in %s.\n"
@@ -2358,13 +2367,13 @@
 "Файлът ще остане с първоначалните знаци за край на ред в работната ви "
 "директория."
 
-#: convert.c:216
+#: convert.c:217
 #, c-format
 msgid "LF would be replaced by CRLF in %s"
 msgstr ""
 "Всеки знак „LF“ ще бъдe заменен с последователността от знаци „CRLF“ в „%s“."
 
-#: convert.c:218
+#: convert.c:219
 #, c-format
 msgid ""
 "LF will be replaced by CRLF in %s.\n"
@@ -2375,14 +2384,14 @@
 "Файлът ще остане с първоначалните знаци за край на ред в работната ви "
 "директория."
 
-#: convert.c:279
+#: convert.c:280
 #, c-format
 msgid "BOM is prohibited in '%s' if encoded as %s"
 msgstr ""
 "„%s“ не трябва да съдържа маркер за поредността на байтовете (BOM) при "
 "кодиране „%s“"
 
-#: convert.c:286
+#: convert.c:287
 #, c-format
 msgid ""
 "The file '%s' contains a byte order mark (BOM). Please use UTF-%s as working-"
@@ -2391,14 +2400,14 @@
 "Файлът „%s“ съдържа маркер за поредността на байтовете (BOM).  Използвайте "
 "„UTF-%s“ като кодиране за работното дърво."
 
-#: convert.c:304
+#: convert.c:305
 #, c-format
 msgid "BOM is required in '%s' if encoded as %s"
 msgstr ""
 "„%s“ трябва да съдържа маркер за поредността на байтовете (BOM) при кодиране "
 "„%s“"
 
-#: convert.c:306
+#: convert.c:307
 #, c-format
 msgid ""
 "The file '%s' is missing a byte order mark (BOM). Please use UTF-%sBE or UTF-"
@@ -2408,50 +2417,50 @@
 "на работното дърво използвайте UTF-%sBE или UTF-%sLE (в зависимост от "
 "поредността на байтовете)."
 
-#: convert.c:424 convert.c:495
+#: convert.c:425 convert.c:496
 #, c-format
 msgid "failed to encode '%s' from %s to %s"
 msgstr "неуспешно прекодиране на „%s“ от „%s“ към „%s“"
 
-#: convert.c:467
+#: convert.c:468
 #, c-format
 msgid "encoding '%s' from %s to %s and back is not the same"
 msgstr "Прекодирането на „%s“ от „%s“ към „%s“ и обратно променя файла"
 
-#: convert.c:673
+#: convert.c:674
 #, c-format
 msgid "cannot fork to run external filter '%s'"
 msgstr "неуспешно създаване на процес за външен филтър „%s“"
 
-#: convert.c:693
+#: convert.c:694
 #, c-format
 msgid "cannot feed the input to external filter '%s'"
 msgstr "входът не може да бъде подаден на външния филтър „%s“"
 
-#: convert.c:700
+#: convert.c:701
 #, c-format
 msgid "external filter '%s' failed %d"
 msgstr "неуспешно изпълнение на външния филтър „%s“: %d"
 
-#: convert.c:735 convert.c:738
+#: convert.c:736 convert.c:739
 #, c-format
 msgid "read from external filter '%s' failed"
 msgstr "неуспешно четене от външния филтър „%s“"
 
-#: convert.c:741 convert.c:796
+#: convert.c:742 convert.c:797
 #, c-format
 msgid "external filter '%s' failed"
 msgstr "неуспешно изпълнение на външния филтър „%s“"
 
-#: convert.c:844
+#: convert.c:845
 msgid "unexpected filter type"
 msgstr "неочакван вид филтър"
 
-#: convert.c:855
+#: convert.c:856
 msgid "path name too long for external filter"
 msgstr "пътят е прекалено дълъг за външен филтър"
 
-#: convert.c:929
+#: convert.c:930
 #, c-format
 msgid ""
 "external filter '%s' is not available anymore although not all paths have "
@@ -2460,67 +2469,67 @@
 "външният филтър „%s“ вече не е наличен, въпреки че не всички пътища са "
 "филтрирани"
 
-#: convert.c:1228
+#: convert.c:1229
 msgid "true/false are no valid working-tree-encodings"
 msgstr "„true“/„false“ не може да са кодирания на работното дърво"
 
-#: convert.c:1398 convert.c:1432
+#: convert.c:1417 convert.c:1451
 #, c-format
 msgid "%s: clean filter '%s' failed"
 msgstr "%s: неуспешно изпълнение на декодиращ филтър „%s“"
 
-#: convert.c:1476
+#: convert.c:1495
 #, c-format
 msgid "%s: smudge filter %s failed"
 msgstr "%s: неуспешно изпълнение на кодиращ филтър „%s“"
 
-#: date.c:137
+#: date.c:138
 msgid "in the future"
 msgstr "в бъдещето"
 
-#: date.c:143
+#: date.c:144
 #, c-format
 msgid "%<PRIuMAX> second ago"
 msgid_plural "%<PRIuMAX> seconds ago"
 msgstr[0] "преди %<PRIuMAX> секунда"
 msgstr[1] "преди %<PRIuMAX> секунди"
 
-#: date.c:150
+#: date.c:151
 #, c-format
 msgid "%<PRIuMAX> minute ago"
 msgid_plural "%<PRIuMAX> minutes ago"
 msgstr[0] "преди %<PRIuMAX> минута"
 msgstr[1] "преди %<PRIuMAX> минути"
 
-#: date.c:157
+#: date.c:158
 #, c-format
 msgid "%<PRIuMAX> hour ago"
 msgid_plural "%<PRIuMAX> hours ago"
 msgstr[0] "преди %<PRIuMAX> час"
 msgstr[1] "преди %<PRIuMAX> часа"
 
-#: date.c:164
+#: date.c:165
 #, c-format
 msgid "%<PRIuMAX> day ago"
 msgid_plural "%<PRIuMAX> days ago"
 msgstr[0] "преди %<PRIuMAX> ден"
 msgstr[1] "преди %<PRIuMAX> дена"
 
-#: date.c:170
+#: date.c:171
 #, c-format
 msgid "%<PRIuMAX> week ago"
 msgid_plural "%<PRIuMAX> weeks ago"
 msgstr[0] "преди %<PRIuMAX> седмица"
 msgstr[1] "преди %<PRIuMAX> седмици"
 
-#: date.c:177
+#: date.c:178
 #, c-format
 msgid "%<PRIuMAX> month ago"
 msgid_plural "%<PRIuMAX> months ago"
 msgstr[0] "преди %<PRIuMAX> месец"
 msgstr[1] "преди %<PRIuMAX> месеца"
 
-#: date.c:188
+#: date.c:189
 #, c-format
 msgid "%<PRIuMAX> year"
 msgid_plural "%<PRIuMAX> years"
@@ -2528,14 +2537,14 @@
 msgstr[1] "%<PRIuMAX> години"
 
 #. TRANSLATORS: "%s" is "<n> years"
-#: date.c:191
+#: date.c:192
 #, c-format
 msgid "%s, %<PRIuMAX> month ago"
 msgid_plural "%s, %<PRIuMAX> months ago"
 msgstr[0] "преди %s и %<PRIuMAX> месец"
 msgstr[1] "преди %s и %<PRIuMAX> месеца"
 
-#: date.c:196 date.c:201
+#: date.c:197 date.c:202
 #, c-format
 msgid "%<PRIuMAX> year ago"
 msgid_plural "%<PRIuMAX> years ago"
@@ -2573,7 +2582,7 @@
 msgid "failed to read orderfile '%s'"
 msgstr "файлът с подредбата на съответствията „%s“ не може да бъде прочетен"
 
-#: diffcore-rename.c:544
+#: diffcore-rename.c:543
 msgid "Performing inexact rename detection"
 msgstr "Търсене на преименувания на обекти съчетани с промени"
 
@@ -2645,38 +2654,38 @@
 "Грешки в настройката „diff.dirstat“:\n"
 "%s"
 
-#: diff.c:4215
+#: diff.c:4218
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr ""
 "външната програма за разлики завърши неуспешно.  Спиране на работата при „%s“"
 
-#: diff.c:4560
+#: diff.c:4563
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr ""
 "Опциите „--name-only“, „--name-status“, „--check“ и „-s“ са несъвместими "
 "една с друга"
 
-#: diff.c:4563
+#: diff.c:4566
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "Опциите „-G“, „-S“ и „--find-object“ са несъвместими една с друга"
 
-#: diff.c:4641
+#: diff.c:4644
 msgid "--follow requires exactly one pathspec"
 msgstr "Опцията „--follow“ изисква точно един път"
 
-#: diff.c:4689
+#: diff.c:4692
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "неправилна стойност за „--stat“: %s"
 
-#: diff.c:4694 diff.c:4699 diff.c:4704 diff.c:4709 diff.c:5222
+#: diff.c:4697 diff.c:4702 diff.c:4707 diff.c:4712 diff.c:5225
 #: parse-options.c:199 parse-options.c:203
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "опцията „%s“ очаква число за аргумент"
 
-#: diff.c:4726
+#: diff.c:4729
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -2685,44 +2694,44 @@
 "Неразпознат параметър към опцията „--dirstat/-X“:\n"
 "%s"
 
-#: diff.c:4811
+#: diff.c:4814
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "непознат вид промяна: „%c“ в „--diff-filter=%s“"
 
-#: diff.c:4835
+#: diff.c:4838
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "непозната стойност след „ws-error-highlight=%.*s“"
 
-#: diff.c:4849
+#: diff.c:4852
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "„%s“ не може да се открие"
 
-#: diff.c:4899 diff.c:4905
+#: diff.c:4902 diff.c:4908
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr ""
 "опцията „%s“ изисква стойности за МИНИМАЛЕН_%%_ПРОМЯНА_ЗА_ИЗТОЧНИК_/"
 "МАКСИМАЛЕН_%%_ПРОМЯНА_ЗА_ЗАМЯНА от"
 
-#: diff.c:4917
+#: diff.c:4920
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "опцията „%s“ изисква знак, а не: „%s“"
 
-#: diff.c:4938
+#: diff.c:4941
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "неправилен аргумент за „--color-moved“: „%s“"
 
-#: diff.c:4957
+#: diff.c:4960
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "неправилен режим „%s“ за „ --color-moved-ws“"
 
-#: diff.c:4997
+#: diff.c:5000
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
@@ -2731,153 +2740,153 @@
 "Майерс), „minimal“ (минимизиране на разликите), „patience“ (пасианс) и "
 "„histogram“ (хистограмен)"
 
-#: diff.c:5033 diff.c:5053
+#: diff.c:5036 diff.c:5056
 #, c-format
 msgid "invalid argument to %s"
 msgstr "неправилен аргумент към „%s“"
 
-#: diff.c:5191
+#: diff.c:5194
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "неразпознат параметър към опцията „--submodule“: „%s“"
 
-#: diff.c:5247
+#: diff.c:5250
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "неправилен аргумент към „--word-diff“: „%s“"
 
-#: diff.c:5270
+#: diff.c:5273
 msgid "Diff output format options"
 msgstr "Формат на изхода за разликите"
 
-#: diff.c:5272 diff.c:5278
+#: diff.c:5275 diff.c:5281
 msgid "generate patch"
 msgstr "създаване на кръпки"
 
-#: diff.c:5275 builtin/log.c:172
+#: diff.c:5278 builtin/log.c:172
 msgid "suppress diff output"
 msgstr "без извеждане на разликите"
 
-#: diff.c:5280 diff.c:5394 diff.c:5401
+#: diff.c:5283 diff.c:5397 diff.c:5404
 msgid "<n>"
 msgstr "БРОЙ"
 
-#: diff.c:5281 diff.c:5284
+#: diff.c:5284 diff.c:5287
 msgid "generate diffs with <n> lines context"
 msgstr "файловете с разлики да са с контекст с такъв БРОЙ редове"
 
-#: diff.c:5286
+#: diff.c:5289
 msgid "generate the diff in raw format"
 msgstr "файловете с разлики да са в суров формат"
 
-#: diff.c:5289
+#: diff.c:5292
 msgid "synonym for '-p --raw'"
 msgstr "псевдоним на „-p --stat“"
 
-#: diff.c:5293
+#: diff.c:5296
 msgid "synonym for '-p --stat'"
 msgstr "псевдоним на „-p --stat“"
 
-#: diff.c:5297
+#: diff.c:5300
 msgid "machine friendly --stat"
 msgstr "„--stat“ във формат за четене от програма"
 
-#: diff.c:5300
+#: diff.c:5303
 msgid "output only the last line of --stat"
 msgstr "извеждане само на последния ред на „--stat“"
 
-#: diff.c:5302 diff.c:5310
+#: diff.c:5305 diff.c:5313
 msgid "<param1,param2>..."
 msgstr "ПАРАМЕТЪР_1, ПАРАМЕТЪР_2, …"
 
-#: diff.c:5303
+#: diff.c:5306
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr "извеждане на разпределението на промените за всяка поддиректория"
 
-#: diff.c:5307
+#: diff.c:5310
 msgid "synonym for --dirstat=cumulative"
 msgstr "псевдоним на „--dirstat=cumulative“"
 
-#: diff.c:5311
+#: diff.c:5314
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "псевдоним на „--dirstat=ФАЙЛОВЕ,ПАРАМЕТЪР_1,ПАРАМЕТЪР_2,…“"
 
-#: diff.c:5315
+#: diff.c:5318
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 "предупреждаване, ако промените водят до маркери за конфликт или грешки в "
 "празните знаци"
 
-#: diff.c:5318
+#: diff.c:5321
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr ""
 "съкратено резюме на създадените, преименуваните и файловете с промяна на "
 "режима на достъп"
 
-#: diff.c:5321
+#: diff.c:5324
 msgid "show only names of changed files"
 msgstr "извеждане само на имената на променените файлове"
 
-#: diff.c:5324
+#: diff.c:5327
 msgid "show only names and status of changed files"
 msgstr "извеждане само на имената и статистиката за променените файлове"
 
-#: diff.c:5326
+#: diff.c:5329
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "ШИРОЧИНА[,ИМЕ-ШИРОЧИНА[,БРОЙ]]"
 
-#: diff.c:5327
+#: diff.c:5330
 msgid "generate diffstat"
 msgstr "извеждане на статистика за промените"
 
-#: diff.c:5329 diff.c:5332 diff.c:5335
+#: diff.c:5332 diff.c:5335 diff.c:5338
 msgid "<width>"
 msgstr "ШИРОЧИНА"
 
-#: diff.c:5330
+#: diff.c:5333
 msgid "generate diffstat with a given width"
 msgstr "статистика с такава ШИРОЧИНА за промените"
 
-#: diff.c:5333
+#: diff.c:5336
 msgid "generate diffstat with a given name width"
 msgstr "статистика за промените с такава ШИРОЧИНА на имената"
 
-#: diff.c:5336
+#: diff.c:5339
 msgid "generate diffstat with a given graph width"
 msgstr "статистика за промените с такава ШИРОЧИНА на гра̀фа"
 
-#: diff.c:5338
+#: diff.c:5341
 msgid "<count>"
 msgstr "БРОЙ"
 
-#: diff.c:5339
+#: diff.c:5342
 msgid "generate diffstat with limited lines"
 msgstr "ограничаване на БРОя на редовете в статистиката за промените"
 
-#: diff.c:5342
+#: diff.c:5345
 msgid "generate compact summary in diffstat"
 msgstr "кратко резюме в статистиката за промените"
 
-#: diff.c:5345
+#: diff.c:5348
 msgid "output a binary diff that can be applied"
 msgstr "извеждане на двоична разлика във вид за прилагане"
 
-#: diff.c:5348
+#: diff.c:5351
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr ""
 "показване на пълните имена на обекти в редовете за индекса при вариантите "
 "преди и след промяната"
 
-#: diff.c:5350
+#: diff.c:5353
 msgid "show colored diff"
 msgstr "разлики в цвят"
 
-#: diff.c:5351
+#: diff.c:5354
 msgid "<kind>"
 msgstr "ВИД"
 
-#: diff.c:5352
+#: diff.c:5355
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
@@ -2885,7 +2894,7 @@
 "грешките в празните знаци да се указват в редовете за контекста, вариантите "
 "преди и след разликата,"
 
-#: diff.c:5355
+#: diff.c:5358
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -2893,257 +2902,257 @@
 "без преименуване на пътищата.  Да се използват нулеви байтове за разделители "
 "на полета в изхода при ползване на опцията „--raw“ или „--numstat“"
 
-#: diff.c:5358 diff.c:5361 diff.c:5364 diff.c:5470
+#: diff.c:5361 diff.c:5364 diff.c:5367 diff.c:5473
 msgid "<prefix>"
 msgstr "ПРЕФИКС"
 
-#: diff.c:5359
+#: diff.c:5362
 msgid "show the given source prefix instead of \"a/\""
 msgstr "префикс вместо „a/“ за източник"
 
-#: diff.c:5362
+#: diff.c:5365
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "префикс вместо „b/“ за цел"
 
-#: diff.c:5365
+#: diff.c:5368
 msgid "prepend an additional prefix to every line of output"
 msgstr "добавяне на допълнителен префикс за всеки ред на изхода"
 
-#: diff.c:5368
+#: diff.c:5371
 msgid "do not show any source or destination prefix"
 msgstr "без префикс за източника и целта"
 
-#: diff.c:5371
+#: diff.c:5374
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr ""
 "извеждане на контекст между последователните парчета с разлики от указания "
 "БРОЙ редове"
 
-#: diff.c:5375 diff.c:5380 diff.c:5385
+#: diff.c:5378 diff.c:5383 diff.c:5388
 msgid "<char>"
 msgstr "ЗНАК"
 
-#: diff.c:5376
+#: diff.c:5379
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "знак вместо „+“ за нов вариант на ред"
 
-#: diff.c:5381
+#: diff.c:5384
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "знак вместо „-“ за стар вариант на ред"
 
-#: diff.c:5386
+#: diff.c:5389
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "знак вместо „ “ за контекст"
 
-#: diff.c:5389
+#: diff.c:5392
 msgid "Diff rename options"
 msgstr "Настройки за разлики с преименуване"
 
-#: diff.c:5390
+#: diff.c:5393
 msgid "<n>[/<m>]"
 msgstr "МИНИМАЛЕН_%_ПРОМЯНА_ЗА_ИЗТОЧНИК[/МАКСИМАЛEН_%_ПРОМЯНА_ЗА_ЗАМЯНА]"
 
-#: diff.c:5391
+#: diff.c:5394
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr ""
 "заместване на пълните промени с последователност от изтриване и създаване"
 
-#: diff.c:5395
+#: diff.c:5398
 msgid "detect renames"
 msgstr "засичане на преименуванията"
 
-#: diff.c:5399
+#: diff.c:5402
 msgid "omit the preimage for deletes"
 msgstr "без предварителен вариант при изтриване"
 
-#: diff.c:5402
+#: diff.c:5405
 msgid "detect copies"
 msgstr "засичане на копиранията"
 
-#: diff.c:5406
+#: diff.c:5409
 msgid "use unmodified files as source to find copies"
 msgstr "търсене на копирано и от непроменените файлове"
 
-#: diff.c:5408
+#: diff.c:5411
 msgid "disable rename detection"
 msgstr "без търсене на преименувания"
 
-#: diff.c:5411
+#: diff.c:5414
 msgid "use empty blobs as rename source"
 msgstr "празни обекти като източник при преименувания"
 
-#: diff.c:5413
+#: diff.c:5416
 msgid "continue listing the history of a file beyond renames"
 msgstr ""
 "продължаване на извеждането на историята — без отрязването при преименувания "
 "на файл"
 
-#: diff.c:5416
+#: diff.c:5419
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
 msgstr ""
 "без засичане на преименувания/копирания, ако броят им надвишава тази стойност"
 
-#: diff.c:5418
+#: diff.c:5421
 msgid "Diff algorithm options"
 msgstr "Опции към алгоритъма за разлики"
 
-#: diff.c:5420
+#: diff.c:5423
 msgid "produce the smallest possible diff"
 msgstr "търсене на възможно най-малка разлика"
 
-#: diff.c:5423
+#: diff.c:5426
 msgid "ignore whitespace when comparing lines"
 msgstr "без промени в празните знаци при сравняване на редове"
 
-#: diff.c:5426
+#: diff.c:5429
 msgid "ignore changes in amount of whitespace"
 msgstr "без промени в празните знаци"
 
-#: diff.c:5429
+#: diff.c:5432
 msgid "ignore changes in whitespace at EOL"
 msgstr "без промени в празните знаци в края на редовете"
 
-#: diff.c:5432
+#: diff.c:5435
 msgid "ignore carrier-return at the end of line"
 msgstr "без промени в знаците за край на ред"
 
-#: diff.c:5435
+#: diff.c:5438
 msgid "ignore changes whose lines are all blank"
 msgstr "без промени в редовете, които са изцяло от празни знаци"
 
-#: diff.c:5438
+#: diff.c:5441
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr ""
 "евристика за преместване на границите на парчетата за улесняване на четенето"
 
-#: diff.c:5441
+#: diff.c:5444
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "разлика чрез алгоритъм за подредба като пасианс"
 
-#: diff.c:5445
+#: diff.c:5448
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "разлика по хистограмния алгоритъм"
 
-#: diff.c:5447
+#: diff.c:5450
 msgid "<algorithm>"
 msgstr "АЛГОРИТЪМ"
 
-#: diff.c:5448
+#: diff.c:5451
 msgid "choose a diff algorithm"
 msgstr "избор на АЛГОРИТЪМа за разлики"
 
-#: diff.c:5450
+#: diff.c:5453
 msgid "<text>"
 msgstr "ТЕКСТ"
 
-#: diff.c:5451
+#: diff.c:5454
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "разлика чрез алгоритъма със закотвяне"
 
-#: diff.c:5453 diff.c:5462 diff.c:5465
+#: diff.c:5456 diff.c:5465 diff.c:5468
 msgid "<mode>"
 msgstr "РЕЖИМ"
 
-#: diff.c:5454
+#: diff.c:5457
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr ""
 "разлика по думи, като се ползва този РЕЖИМ за отделянето на променените думи"
 
-#: diff.c:5456 diff.c:5459 diff.c:5504
+#: diff.c:5459 diff.c:5462 diff.c:5507
 msgid "<regex>"
 msgstr "РЕГУЛЯРЕН_ИЗРАЗ"
 
-#: diff.c:5457
+#: diff.c:5460
 msgid "use <regex> to decide what a word is"
 msgstr "РЕГУЛЯРЕН_ИЗРАЗ за разделяне по думи"
 
-#: diff.c:5460
+#: diff.c:5463
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "псевдоним на „--word-diff=color --word-diff-regex=РЕГУЛЯРЕН_ИЗРАЗ“"
 
-#: diff.c:5463
+#: diff.c:5466
 msgid "moved lines of code are colored differently"
 msgstr "различен цвят за извеждане на преместените редове"
 
-#: diff.c:5466
+#: diff.c:5469
 msgid "how white spaces are ignored in --color-moved"
 msgstr ""
 "режим за прескачането на празните знаци при задаването на „--color-moved“"
 
-#: diff.c:5469
+#: diff.c:5472
 msgid "Other diff options"
 msgstr "Други опции за разлики"
 
-#: diff.c:5471
+#: diff.c:5474
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 "при изпълнение от поддиректория да се пренебрегват разликите извън нея и да "
 "се ползват относителни пътища"
 
-#: diff.c:5475
+#: diff.c:5478
 msgid "treat all files as text"
 msgstr "обработка на всички файлове като текстови"
 
-#: diff.c:5477
+#: diff.c:5480
 msgid "swap two inputs, reverse the diff"
 msgstr "размяна на двата входа — обръщане на разликата"
 
-#: diff.c:5479
+#: diff.c:5482
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr ""
 "завършване с код за състояние 1 при наличието на разлики, а в противен "
 "случай — с 0"
 
-#: diff.c:5481
+#: diff.c:5484
 msgid "disable all output of the program"
 msgstr "без всякакъв изход от програмата"
 
-#: diff.c:5483
+#: diff.c:5486
 msgid "allow an external diff helper to be executed"
 msgstr "позволяване на изпълнение на външна помощна програма за разлики"
 
-#: diff.c:5485
+#: diff.c:5488
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 "изпълнение на външни програми-филтри при сравнението на двоични файлове"
 
-#: diff.c:5487
+#: diff.c:5490
 msgid "<when>"
 msgstr "КОГА"
 
-#: diff.c:5488
+#: diff.c:5491
 msgid "ignore changes to submodules in the diff generation"
 msgstr "игнориране на промените в подмодулите при извеждането на разликите"
 
-#: diff.c:5491
+#: diff.c:5494
 msgid "<format>"
 msgstr "ФОРМАТ"
 
-#: diff.c:5492
+#: diff.c:5495
 msgid "specify how differences in submodules are shown"
 msgstr "начин за извеждане на промените в подмодулите"
 
-#: diff.c:5496
+#: diff.c:5499
 msgid "hide 'git add -N' entries from the index"
 msgstr "без включване в индекса на записите, добавени с „git add -N“"
 
-#: diff.c:5499
+#: diff.c:5502
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "включване в индекса на записите, добавени с „git add -N“"
 
-#: diff.c:5501
+#: diff.c:5504
 msgid "<string>"
 msgstr "НИЗ"
 
-#: diff.c:5502
+#: diff.c:5505
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
 msgstr "търсене на разлики, които променят броя на поява на указаните низове"
 
-#: diff.c:5505
+#: diff.c:5508
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
@@ -3151,97 +3160,97 @@
 "търсене на разлики, които променят броя на поява на низовете, които напасват "
 "на регулярния израз"
 
-#: diff.c:5508
+#: diff.c:5511
 msgid "show all changes in the changeset with -S or -G"
 msgstr "извеждане на всички промени с „-G“/„-S“"
 
-#: diff.c:5511
+#: diff.c:5514
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "НИЗът към „-S“ да се тълкува като разширен регулярен израз по POSIX"
 
-#: diff.c:5514
+#: diff.c:5517
 msgid "control the order in which files appear in the output"
 msgstr "управление на подредбата на файловете в изхода"
 
-#: diff.c:5515
+#: diff.c:5518
 msgid "<object-id>"
 msgstr "ИДЕНТИФИКАТОР_НА_ОБЕКТ"
 
-#: diff.c:5516
+#: diff.c:5519
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
 msgstr "търсене на разлики, които променят броя на поява на указания обект"
 
-#: diff.c:5518
+#: diff.c:5521
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)…[*]]"
 
-#: diff.c:5519
+#: diff.c:5522
 msgid "select files by diff type"
 msgstr "избор на файловете по вид разлика"
 
-#: diff.c:5521
+#: diff.c:5524
 msgid "<file>"
 msgstr "ФАЙЛ"
 
-#: diff.c:5522
+#: diff.c:5525
 msgid "Output to a specific file"
 msgstr "Изход към указания файл"
 
-#: diff.c:6177
+#: diff.c:6180
 msgid "inexact rename detection was skipped due to too many files."
 msgstr ""
 "търсенето на преименувания на обекти съчетани с промени се прескача поради "
 "многото файлове."
 
-#: diff.c:6180
+#: diff.c:6183
 msgid "only found copies from modified paths due to too many files."
 msgstr ""
 "установени са само точните копия на променените пътища поради многото "
 "файлове."
 
-#: diff.c:6183
+#: diff.c:6186
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
 msgstr "задайте променливата „%s“ да е поне %d и отново изпълнете командата."
 
-#: dir.c:537
+#: dir.c:549
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
 msgstr "пътят „%s“ не съвпада с никой файл в git"
 
-#: dir.c:926
+#: dir.c:938
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr "„%s“ не може да се ползва за игнорираните файлове (като gitignore)"
 
-#: dir.c:1843
+#: dir.c:1877
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "директорията „%s“ не може да бъде отворена"
 
-#: dir.c:2085
+#: dir.c:2128
 msgid "failed to get kernel name and information"
 msgstr "името и версията на ядрото не бяха получени"
 
-#: dir.c:2209
+#: dir.c:2252
 msgid "untracked cache is disabled on this system or location"
 msgstr ""
 "кешът за неследените файлове е изключен на тази система или местоположение"
 
-#: dir.c:3013
+#: dir.c:3056
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "файлът с индекса е повреден в хранилището „%s“"
 
-#: dir.c:3058 dir.c:3063
+#: dir.c:3101 dir.c:3106
 #, c-format
 msgid "could not create directories for %s"
 msgstr "директориите за „%s“ не може да бъдат създадени"
 
-#: dir.c:3092
+#: dir.c:3135
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "директорията на git не може да се мигрира от „%s“ до „%s“"
@@ -3260,12 +3269,12 @@
 msgid "could not stat file '%s'"
 msgstr "неуспешно изпълнение на „stat“ върху файла „%s“"
 
-#: environment.c:150
+#: environment.c:148
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "неправилен път към пространства от имена „%s“"
 
-#: environment.c:332
+#: environment.c:330
 #, c-format
 msgid "could not set GIT_DIR to '%s'"
 msgstr "GIT_DIR не може да се зададе да е „%s“"
@@ -3275,159 +3284,155 @@
 msgid "too many args to run %s"
 msgstr "прекалено много аргументи за изпълнение „%s“"
 
-#: fetch-object.c:17
-msgid "Remote with no URL"
-msgstr "Липсва адрес за отдалеченото хранилище"
-
-#: fetch-pack.c:151
+#: fetch-pack.c:150
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack: очаква се плитък списък"
 
-#: fetch-pack.c:154
+#: fetch-pack.c:153
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr "git fetch-pack: след плитък списък се очаква изчистващ пакет „flush“"
 
-#: fetch-pack.c:165
+#: fetch-pack.c:164
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr ""
 "git fetch-pack: очаква се „ACK“/„NAK“, а бе получен изчистващ пакет „flush“"
 
-#: fetch-pack.c:185
+#: fetch-pack.c:184
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr "git fetch-pack: очаква се „ACK“/„NAK“, а бе получено „%s“"
 
-#: fetch-pack.c:196
+#: fetch-pack.c:195
 msgid "unable to write to remote"
 msgstr "невъзможно писане към отдалечено хранилище"
 
-#: fetch-pack.c:258
+#: fetch-pack.c:257
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "опцията „--stateless-rpc“ изисква  „multi_ack_detailed“"
 
-#: fetch-pack.c:360 fetch-pack.c:1284
+#: fetch-pack.c:356 fetch-pack.c:1280
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "неправилен плитък ред: „%s“"
 
-#: fetch-pack.c:366 fetch-pack.c:1290
+#: fetch-pack.c:362 fetch-pack.c:1286
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "неправилен неплитък ред: „%s“"
 
-#: fetch-pack.c:368 fetch-pack.c:1292
+#: fetch-pack.c:364 fetch-pack.c:1288
 #, c-format
 msgid "object not found: %s"
 msgstr "обектът „%s“ липсва"
 
-#: fetch-pack.c:371 fetch-pack.c:1295
+#: fetch-pack.c:367 fetch-pack.c:1291
 #, c-format
 msgid "error in object: %s"
 msgstr "грешка в обекта: „%s“"
 
-#: fetch-pack.c:373 fetch-pack.c:1297
+#: fetch-pack.c:369 fetch-pack.c:1293
 #, c-format
 msgid "no shallow found: %s"
 msgstr "не е открит плитък обект: %s"
 
-#: fetch-pack.c:376 fetch-pack.c:1301
+#: fetch-pack.c:372 fetch-pack.c:1297
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "очаква се плитък или не обект, а бе получено: „%s“"
 
-#: fetch-pack.c:417
+#: fetch-pack.c:414
 #, c-format
 msgid "got %s %d %s"
 msgstr "получено бе %s %d %s"
 
-#: fetch-pack.c:434
+#: fetch-pack.c:431
 #, c-format
 msgid "invalid commit %s"
 msgstr "неправилно подаване: „%s“"
 
-#: fetch-pack.c:465
+#: fetch-pack.c:462
 msgid "giving up"
 msgstr "преустановяване"
 
-#: fetch-pack.c:477 progress.c:277
+#: fetch-pack.c:475 progress.c:312
 msgid "done"
 msgstr "действието завърши"
 
-#: fetch-pack.c:489
+#: fetch-pack.c:487
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "получено бе %s (%d) %s"
 
-#: fetch-pack.c:535
+#: fetch-pack.c:533
 #, c-format
 msgid "Marking %s as complete"
 msgstr "Отбелязване на „%s“ като пълно"
 
-#: fetch-pack.c:744
+#: fetch-pack.c:742
 #, c-format
 msgid "already have %s (%s)"
 msgstr "вече има „%s“ (%s)"
 
-#: fetch-pack.c:783
+#: fetch-pack.c:781
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack: не може да се създаде процес за демултиплексора"
 
-#: fetch-pack.c:791
+#: fetch-pack.c:789
 msgid "protocol error: bad pack header"
 msgstr "протоколна грешка: неправилна заглавна част на пакет"
 
-#: fetch-pack.c:859
+#: fetch-pack.c:857
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack: не може да се създаде процес за „%s“"
 
-#: fetch-pack.c:875
+#: fetch-pack.c:873
 #, c-format
 msgid "%s failed"
 msgstr "неуспешно изпълнение на „%s“"
 
-#: fetch-pack.c:877
+#: fetch-pack.c:875
 msgid "error in sideband demultiplexer"
 msgstr "грешка в демултиплексора"
 
-#: fetch-pack.c:908
+#: fetch-pack.c:907
 #, c-format
 msgid "Server version is %.*s"
 msgstr "Версията на сървъра е: %.*s"
 
-#: fetch-pack.c:913 fetch-pack.c:919 fetch-pack.c:922 fetch-pack.c:928
-#: fetch-pack.c:932 fetch-pack.c:936 fetch-pack.c:940 fetch-pack.c:944
-#: fetch-pack.c:948 fetch-pack.c:952 fetch-pack.c:956 fetch-pack.c:960
-#: fetch-pack.c:966 fetch-pack.c:972 fetch-pack.c:977 fetch-pack.c:982
+#: fetch-pack.c:912 fetch-pack.c:918 fetch-pack.c:921 fetch-pack.c:927
+#: fetch-pack.c:931 fetch-pack.c:935 fetch-pack.c:939 fetch-pack.c:943
+#: fetch-pack.c:947 fetch-pack.c:951 fetch-pack.c:955 fetch-pack.c:959
+#: fetch-pack.c:965 fetch-pack.c:971 fetch-pack.c:976 fetch-pack.c:981
 #, c-format
 msgid "Server supports %s"
 msgstr "Сървърът поддържа „%s“"
 
-#: fetch-pack.c:915
+#: fetch-pack.c:914
 msgid "Server does not support shallow clients"
 msgstr "Сървърът не поддържа плитки клиенти"
 
-#: fetch-pack.c:975
+#: fetch-pack.c:974
 msgid "Server does not support --shallow-since"
 msgstr "Сървърът не поддържа опцията „--shallow-since“"
 
-#: fetch-pack.c:980
+#: fetch-pack.c:979
 msgid "Server does not support --shallow-exclude"
 msgstr "Сървърът не поддържа опцията „--shallow-exclude“"
 
-#: fetch-pack.c:984
+#: fetch-pack.c:983
 msgid "Server does not support --deepen"
 msgstr "Сървърът не поддържа опцията „--deepen“"
 
-#: fetch-pack.c:1001
+#: fetch-pack.c:1000
 msgid "no common commits"
 msgstr "няма общи подавания"
 
-#: fetch-pack.c:1013 fetch-pack.c:1462
+#: fetch-pack.c:1012 fetch-pack.c:1468
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: неуспешно доставяне."
 
-#: fetch-pack.c:1151
+#: fetch-pack.c:1150
 msgid "Server does not support shallow requests"
 msgstr "Сървърът не поддържа плитки заявки"
 
@@ -3435,75 +3440,75 @@
 msgid "Server supports filter"
 msgstr "Сървърът поддържа филтри"
 
-#: fetch-pack.c:1184
+#: fetch-pack.c:1180
 msgid "unable to write request to remote"
 msgstr "невъзможно писане към отдалечено хранилище"
 
-#: fetch-pack.c:1202
+#: fetch-pack.c:1198
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "грешка при прочитане на заглавната част на раздел „%s“"
 
-#: fetch-pack.c:1208
+#: fetch-pack.c:1204
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "очаква се „%s“, а бе получено „%s“"
 
-#: fetch-pack.c:1247
+#: fetch-pack.c:1243
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "неочакван ред за потвърждение: „%s“"
 
-#: fetch-pack.c:1252
+#: fetch-pack.c:1248
 #, c-format
 msgid "error processing acks: %d"
 msgstr "грешка при обработка на потвържденията: %d"
 
-#: fetch-pack.c:1262
+#: fetch-pack.c:1258
 msgid "expected packfile to be sent after 'ready'"
 msgstr ""
 "очакваше се пакетният файл да бъде изпратен след отговор за готовност (ready)"
 
-#: fetch-pack.c:1264
+#: fetch-pack.c:1260
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr ""
 "очакваше се след липса на отговор за готовност (ready) да не се се пращат "
 "други раздели"
 
-#: fetch-pack.c:1306
+#: fetch-pack.c:1302
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "грешка при обработка на информация за дълбочината/плиткостта: %d"
 
-#: fetch-pack.c:1353
+#: fetch-pack.c:1349
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "очаква се искан указател, а бе получено: „%s“"
 
-#: fetch-pack.c:1358
+#: fetch-pack.c:1354
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "неочакван искан указател: „%s“"
 
-#: fetch-pack.c:1363
+#: fetch-pack.c:1359
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "грешка при обработката на исканите указатели: %d"
 
-#: fetch-pack.c:1689
+#: fetch-pack.c:1693
 msgid "no matching remote head"
 msgstr "не може да бъде открит подходящ връх от отдалеченото хранилище"
 
-#: fetch-pack.c:1712 builtin/clone.c:686
+#: fetch-pack.c:1716 builtin/clone.c:685
 msgid "remote did not send all necessary objects"
 msgstr "отдалеченото хранилище не изпрати всички необходими обекти."
 
-#: fetch-pack.c:1739
+#: fetch-pack.c:1743
 #, c-format
 msgid "no such remote ref %s"
 msgstr "такъв отдалечен указател няма: %s"
 
-#: fetch-pack.c:1742
+#: fetch-pack.c:1746
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "Сървърът не позволява заявка за необявен обект „%s“"
@@ -3526,18 +3531,26 @@
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr "прескачане на неправилния цвят „%.*s“ в „log.graphColors“"
 
-#: grep.c:2117
+#: grep.c:668
+msgid ""
+"given pattern contains NULL byte (via -f <file>). This is only supported "
+"with -P under PCRE v2"
+msgstr ""
+"зададеният шаблон съдържа нулев знак (идва от -f „ФАЙЛ“).  Това се поддържа "
+"в комбинация с „-P“ само при ползването на „PCRE v2“"
+
+#: grep.c:2124
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "„%s“: файлът сочен от „%s“ не може да бъде прочетен"
 
-#: grep.c:2134 setup.c:164 builtin/clone.c:409 builtin/diff.c:82
+#: grep.c:2141 setup.c:165 builtin/clone.c:408 builtin/diff.c:82
 #: builtin/rm.c:135
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "не може да бъде получена информация чрез „stat“ за „%s“"
 
-#: grep.c:2145
+#: grep.c:2152
 #, c-format
 msgid "'%s': short read"
 msgstr "„%s“: изчитането върна по-малко байтове от очакваното"
@@ -3684,12 +3697,12 @@
 msgid "git version [<options>]"
 msgstr "git version [ОПЦИЯ…]"
 
-#: help.c:782
+#: help.c:783
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s: %s — %s"
 
-#: help.c:786
+#: help.c:787
 msgid ""
 "\n"
 "Did you mean this?"
@@ -3765,41 +3778,57 @@
 msgid "invalid date format: %s"
 msgstr "неправилен формат на дата: %s"
 
-#: list-objects.c:129
+#: list-objects.c:127
 #, c-format
 msgid "entry '%s' in tree %s has tree mode, but is not a tree"
 msgstr "обект „%s“ в дървото „%s“ е отбелязан като дърво, но не е"
 
-#: list-objects.c:142
+#: list-objects.c:140
 #, c-format
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr "обект „%s“ в дървото „%s“ е отбелязан като BLOB, но не е"
 
-#: list-objects.c:378
+#: list-objects.c:375
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "кореновото дърво за подаване „%s“ не може да се зареди"
 
-#: list-objects-filter-options.c:36
-msgid "multiple filter-specs cannot be combined"
-msgstr "не може да комбинирате множество филтри"
+#: list-objects-filter.c:492
+#, c-format
+msgid "unable to access sparse blob in '%s'"
+msgstr "няма достъп до частично изтегления обект-BLOB в „%s“"
+
+#: list-objects-filter.c:495
+#, c-format
+msgid "unable to parse sparse filter data in %s"
+msgstr ""
+"данните от филтъра за частични изтеглания в „%s“ не може да бъдат анализирани"
 
 #: list-objects-filter-options.c:58
 msgid "expected 'tree:<depth>'"
 msgstr "очаква се „tree:ДЪЛБОЧИНА“"
 
-#: list-objects-filter-options.c:84
+#: list-objects-filter-options.c:73
 msgid "sparse:path filters support has been dropped"
 msgstr "поддръжката на филтри със „sparse:path“ е премахната"
 
-#: list-objects-filter-options.c:94
+#: list-objects-filter-options.c:86
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "неправилен филтър: „%s“"
 
-#: list-objects-filter-options.c:158
-msgid "cannot change partial clone promisor remote"
-msgstr "не може да промените хранилището-гарант на непълно хранилище"
+#: list-objects-filter-options.c:102
+#, c-format
+msgid "must escape char in sub-filter-spec: '%c'"
+msgstr "знак за екраниране в подфилтър: „%c“"
+
+#: list-objects-filter-options.c:144
+msgid "expected something after combine:"
+msgstr "добавете нещо след комбинирането:"
+
+#: list-objects-filter-options.c:226
+msgid "multiple filter-specs cannot be combined"
+msgstr "не може да комбинирате множество филтри"
 
 #: lockfile.c:151
 #, c-format
@@ -3829,126 +3858,122 @@
 msgid "failed to read the cache"
 msgstr "кешът не може да бъде прочетен"
 
-#: merge.c:107 rerere.c:720 builtin/am.c:1885 builtin/am.c:1919
-#: builtin/checkout.c:536 builtin/checkout.c:796 builtin/clone.c:786
+#: merge.c:107 rerere.c:720 builtin/am.c:1874 builtin/am.c:1908
+#: builtin/checkout.c:537 builtin/checkout.c:796 builtin/clone.c:785
 #: builtin/stash.c:264
 msgid "unable to write new index file"
 msgstr "неуспешно записване на новия индекс"
 
-#: merge-recursive.c:322
+#: merge-recursive.c:367
 msgid "(bad commit)\n"
 msgstr "(лошо подаване)\n"
 
-#: merge-recursive.c:345
+#: merge-recursive.c:390
 #, c-format
 msgid "add_cacheinfo failed for path '%s'; merge aborting."
 msgstr ""
 "неуспешно изпълнение на „add_cacheinfo“ за пътя „%s“.  Сливането е "
 "преустановено."
 
-#: merge-recursive.c:354
+#: merge-recursive.c:399
 #, c-format
 msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
 msgstr ""
 "неуспешно изпълнение на „add_cacheinfo“ за обновяването на пътя „%s“.  "
 "Сливането е преустановено."
 
-#: merge-recursive.c:437
-msgid "error building trees"
-msgstr "грешка при изграждане на дърветата"
-
-#: merge-recursive.c:863
+#: merge-recursive.c:885
 #, c-format
 msgid "failed to create path '%s'%s"
 msgstr "грешка при създаването на пътя „%s“%s"
 
-#: merge-recursive.c:874
+#: merge-recursive.c:896
 #, c-format
 msgid "Removing %s to make room for subdirectory\n"
 msgstr "Изтриване на „%s“, за да се освободи място за поддиректория\n"
 
-#: merge-recursive.c:888 merge-recursive.c:907
+#: merge-recursive.c:910 merge-recursive.c:929
 msgid ": perhaps a D/F conflict?"
 msgstr ": възможно е да има конфликт директория/файл."
 
-#: merge-recursive.c:897
+#: merge-recursive.c:919
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
 msgstr ""
 "преустановяване на действието, за да не се изтрие неследеният файл „%s“"
 
-#: merge-recursive.c:938 builtin/cat-file.c:40
+#: merge-recursive.c:960 builtin/cat-file.c:41
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "обектът „%s“ (%s) не може да бъде прочетен"
 
-#: merge-recursive.c:941
+#: merge-recursive.c:965
 #, c-format
 msgid "blob expected for %s '%s'"
 msgstr "обектът „%s“ (%s) се очакваше да е BLOB, а не е"
 
-#: merge-recursive.c:965
+#: merge-recursive.c:990
 #, c-format
 msgid "failed to open '%s': %s"
 msgstr "„%s“ не може да се отвори: %s"
 
-#: merge-recursive.c:976
+#: merge-recursive.c:1001
 #, c-format
 msgid "failed to symlink '%s': %s"
 msgstr "неуспешно създаване на символната връзка „%s“: %s"
 
-#: merge-recursive.c:981
+#: merge-recursive.c:1006
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
 msgstr ""
 "не е ясно какво да се прави с обекта „%2$s“ (%3$s) с права за достъп „%1$06o“"
 
-#: merge-recursive.c:1177
+#: merge-recursive.c:1199
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "Неуспешно сливане на подмодула „%s“ (не е изтеглен)"
 
-#: merge-recursive.c:1184
+#: merge-recursive.c:1206
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr "Неуспешно сливане на подмодула „%s“ (няма подавания)"
 
-#: merge-recursive.c:1191
+#: merge-recursive.c:1213
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr ""
 "Подмодулът „%s“ не може да бъде слят (базата за сливане не предшества "
 "подаванията)"
 
-#: merge-recursive.c:1199 merge-recursive.c:1211
+#: merge-recursive.c:1221 merge-recursive.c:1233
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "Превъртане на подмодула „%s“ до следното подаване:"
 
-#: merge-recursive.c:1202 merge-recursive.c:1214
+#: merge-recursive.c:1224 merge-recursive.c:1236
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "Превъртане на подмодула „%s“"
 
-#: merge-recursive.c:1237
+#: merge-recursive.c:1259
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 "Неуспешно сливане на подмодула „%s“ (липсва сливането, което се предшества "
 "от подаванията)"
 
-#: merge-recursive.c:1241
+#: merge-recursive.c:1263
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "Неуспешно сливане на подмодула „%s“ (не е превъртане)"
 
-#: merge-recursive.c:1242
+#: merge-recursive.c:1264
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr ""
 "Открито е сливане, което може да решава проблема със сливането на "
 "подмодула:\n"
 
-#: merge-recursive.c:1245
+#: merge-recursive.c:1267
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -3964,31 +3989,31 @@
 "\n"
 "Това приема предложеното.\n"
 
-#: merge-recursive.c:1254
+#: merge-recursive.c:1276
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr "Неуспешно сливане на подмодула „%s“ (открити са множество сливания)"
 
-#: merge-recursive.c:1327
+#: merge-recursive.c:1349
 msgid "Failed to execute internal merge"
 msgstr "Неуспешно вътрешно сливане"
 
-#: merge-recursive.c:1332
+#: merge-recursive.c:1354
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "„%s“ не може да се добави в базата с данни"
 
-#: merge-recursive.c:1364
+#: merge-recursive.c:1386
 #, c-format
 msgid "Auto-merging %s"
 msgstr "Автоматично сливане на „%s“"
 
-#: merge-recursive.c:1387
+#: merge-recursive.c:1410
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr "Грешка: за да не се изтрие неследеният файл „%s“, се записва в „%s“."
 
-#: merge-recursive.c:1459
+#: merge-recursive.c:1482
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -3997,7 +4022,7 @@
 "КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ в %s.  Версия %s на „%s“ "
 "е оставена в дървото."
 
-#: merge-recursive.c:1464
+#: merge-recursive.c:1487
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -4006,7 +4031,7 @@
 "КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ е преименуван на „%s“ в "
 "%s.  Версия %s на „%s“ е оставена в дървото."
 
-#: merge-recursive.c:1471
+#: merge-recursive.c:1494
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -4015,7 +4040,7 @@
 "КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ в %s.  Версия %s на „%s“ "
 "е оставена в дървото: %s."
 
-#: merge-recursive.c:1476
+#: merge-recursive.c:1499
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -4024,45 +4049,45 @@
 "КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ е преименуван на „%s“ в "
 "%s.  Версия %s на „%s“ е оставена в дървото: %s."
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1534
 msgid "rename"
 msgstr "преименуване"
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1534
 msgid "renamed"
 msgstr "преименуван"
 
-#: merge-recursive.c:1591 merge-recursive.c:2450 merge-recursive.c:3094
+#: merge-recursive.c:1614 merge-recursive.c:2472 merge-recursive.c:3117
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "Преустановяване на действието, за да не се изгуби промененият „%s“"
 
-#: merge-recursive.c:1601
+#: merge-recursive.c:1624
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr ""
 "Отказ да се загуби неследеният файл „%s“, защото е на място, където пречи."
 
-#: merge-recursive.c:1659
+#: merge-recursive.c:1682
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 "КОНФЛИКТ (преименуване/добавяне): „%s“ е преименуван на „%s“ в клон „%s“, а "
 "„%s“ е добавен в „%s“"
 
-#: merge-recursive.c:1690
+#: merge-recursive.c:1713
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "„%s“ е директория в „%s“, затова се добавя като „%s“"
 
-#: merge-recursive.c:1695
+#: merge-recursive.c:1718
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr ""
 "Преустановяване на действието, за да не се изгуби неследеният файл „%s“.  "
 "Вместо него се добавя „%s“"
 
-#: merge-recursive.c:1714
+#: merge-recursive.c:1737
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -4071,18 +4096,18 @@
 "КОНФЛИКТ (преименуване/преименуване): „%s“ е преименуван на „%s“ в клон "
 "„%s“, а „%s“ е преименуван на „%s“ в „%s“/%s."
 
-#: merge-recursive.c:1719
+#: merge-recursive.c:1742
 msgid " (left unresolved)"
 msgstr " (некоригиран конфликт)"
 
-#: merge-recursive.c:1828
+#: merge-recursive.c:1851
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "КОНФЛИКТ (преименуване/преименуване): „%s“ е преименуван на „%s“ в клон "
 "„%s“, а „%s“ е преименуван на „%s“ в „%s“"
 
-#: merge-recursive.c:2035
+#: merge-recursive.c:2056
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -4093,7 +4118,7 @@
 "постави „%s“, защото няколко нови директории поделят съдържанието на "
 "директория „%s“, като никоя не съдържа мнозинство от файловете ѝ."
 
-#: merge-recursive.c:2067
+#: merge-recursive.c:2088
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -4102,7 +4127,7 @@
 "КОНФЛИКТ (косвено преименуване на директория): следният файл или директория "
 "„%s“ не позволяват косвеното преименуване на следния път/ища: %s."
 
-#: merge-recursive.c:2077
+#: merge-recursive.c:2098
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -4112,7 +4137,7 @@
 "съответства на „%s“.  Косвено преименуване на директория води до поставянето "
 "на тези пътища там: %s."
 
-#: merge-recursive.c:2169
+#: merge-recursive.c:2190
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -4121,7 +4146,7 @@
 "КОНФЛИКТ (преименуване/преименуване): „%s“ е преименуван на „%s“ в клон "
 "„%s“, а „%s“ е преименуван на „%s“ в „%s“"
 
-#: merge-recursive.c:2413
+#: merge-recursive.c:2435
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
@@ -4130,52 +4155,52 @@
 "ПРЕДУПРЕЖДЕНИЕ: прескачане на преименуването на „%s“ на „%s“ в „%s“, защото "
 "„%s“ също е с променено име."
 
-#: merge-recursive.c:2938
+#: merge-recursive.c:2961
 #, c-format
 msgid "cannot read object %s"
 msgstr "обектът „%s“ не може да се прочете"
 
-#: merge-recursive.c:2941
+#: merge-recursive.c:2964
 #, c-format
 msgid "object %s is not a blob"
 msgstr "обектът „%s“ не е BLOB"
 
-#: merge-recursive.c:3005
+#: merge-recursive.c:3028
 msgid "modify"
 msgstr "промяна"
 
-#: merge-recursive.c:3005
+#: merge-recursive.c:3028
 msgid "modified"
 msgstr "променен"
 
-#: merge-recursive.c:3017
+#: merge-recursive.c:3040
 msgid "content"
 msgstr "съдържание"
 
-#: merge-recursive.c:3021
+#: merge-recursive.c:3044
 msgid "add/add"
 msgstr "добавяне/добавяне"
 
-#: merge-recursive.c:3044
+#: merge-recursive.c:3067
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "Прескачане на „%s“ (слетият резултат е идентичен със сегашния)"
 
-#: merge-recursive.c:3066 git-submodule.sh:937
+#: merge-recursive.c:3089 git-submodule.sh:937
 msgid "submodule"
 msgstr "ПОДМОДУЛ"
 
-#: merge-recursive.c:3067
+#: merge-recursive.c:3090
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "КОНФЛИКТ (%s): Конфликт при сливане на „%s“"
 
-#: merge-recursive.c:3097
+#: merge-recursive.c:3120
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Добавяне като „%s“"
 
-#: merge-recursive.c:3179
+#: merge-recursive.c:3203
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
@@ -4184,7 +4209,7 @@
 "Обновен път: „%s“ е добавен в „%s“ в директория, която е преименувана в "
 "„%s“.  Обектът се мести в „%s“."
 
-#: merge-recursive.c:3182
+#: merge-recursive.c:3206
 #, c-format
 msgid ""
 "CONFLICT (file location): %s added in %s inside a directory that was renamed "
@@ -4193,7 +4218,7 @@
 "КОНФЛИКТ (места на файлове): „%s“ е добавен в „%s“ в директория, която е "
 "преименувана в „%s“.  Предложението е да преместите обекта в „%s“."
 
-#: merge-recursive.c:3186
+#: merge-recursive.c:3210
 #, c-format
 msgid ""
 "Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
@@ -4202,7 +4227,7 @@
 "Обновен път: „%s“ е преименуван на „%s“ в „%s“ в директория, която е "
 "преименувана в „%s“.  Обектът се мести в „%s“."
 
-#: merge-recursive.c:3189
+#: merge-recursive.c:3213
 #, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
@@ -4211,37 +4236,61 @@
 "КОНФЛИКТ (места на файлове): „%s“ е преименуван на „%s“ в „%s“ в директория, "
 "която е преименувана в „%s“.  Предложението е да преместите обекта в „%s“."
 
-#: merge-recursive.c:3303
+#: merge-recursive.c:3327
 #, c-format
 msgid "Removing %s"
 msgstr "Изтриване на „%s“"
 
-#: merge-recursive.c:3326
+#: merge-recursive.c:3350
 msgid "file/directory"
 msgstr "файл/директория"
 
-#: merge-recursive.c:3331
+#: merge-recursive.c:3355
 msgid "directory/file"
 msgstr "директория/файл"
 
-#: merge-recursive.c:3338
+#: merge-recursive.c:3362
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
 "КОНФЛИКТ (%s): Съществува директория на име „%s“ в „%s“.  Добавяне на „%s“ "
 "като „%s“"
 
-#: merge-recursive.c:3347
+#: merge-recursive.c:3371
 #, c-format
 msgid "Adding %s"
 msgstr "Добавяне на „%s“"
 
-#: merge-recursive.c:3356
+#: merge-recursive.c:3380
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "КОНФЛИКТ (добавяне/добавяне): Конфликт при сливане на „%s“"
 
-#: merge-recursive.c:3394
+#: merge-recursive.c:3424
+msgid "Already up to date!"
+msgstr "Вече е обновено!"
+
+#: merge-recursive.c:3433
+#, c-format
+msgid "merging of trees %s and %s failed"
+msgstr "неуспешно сливане на дърветата „%s“ и „%s“"
+
+#: merge-recursive.c:3537
+msgid "Merging:"
+msgstr "Сливане:"
+
+#: merge-recursive.c:3550
+#, c-format
+msgid "found %u common ancestor:"
+msgid_plural "found %u common ancestors:"
+msgstr[0] "открит е %u общ предшественик:"
+msgstr[1] "открити са %u общи предшественици:"
+
+#: merge-recursive.c:3600
+msgid "merge returned no commit"
+msgstr "сливането не върна подаване"
+
+#: merge-recursive.c:3659
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -4250,140 +4299,116 @@
 "Сливането ще презапише локалните промени на тези файлове:\n"
 "    %s"
 
-#: merge-recursive.c:3405
-msgid "Already up to date!"
-msgstr "Вече е обновено!"
-
-#: merge-recursive.c:3414
-#, c-format
-msgid "merging of trees %s and %s failed"
-msgstr "неуспешно сливане на дърветата „%s“ и „%s“"
-
-#: merge-recursive.c:3513
-msgid "Merging:"
-msgstr "Сливане:"
-
-#: merge-recursive.c:3526
-#, c-format
-msgid "found %u common ancestor:"
-msgid_plural "found %u common ancestors:"
-msgstr[0] "открит е %u общ предшественик:"
-msgstr[1] "открити са %u общи предшественици:"
-
-#: merge-recursive.c:3565
-msgid "merge returned no commit"
-msgstr "сливането не върна подаване"
-
-#: merge-recursive.c:3631
+#: merge-recursive.c:3756
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "Неуспешен анализ на обекта „%s“"
 
-#: merge-recursive.c:3647 builtin/merge.c:698 builtin/merge.c:869
+#: merge-recursive.c:3774 builtin/merge.c:694 builtin/merge.c:874
 msgid "Unable to write index."
 msgstr "Индексът не може да бъде прочетен"
 
-#: midx.c:69
+#: midx.c:68
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "файлът с индекса за множество пакети „%s“ е твърде малък"
 
-#: midx.c:85
+#: midx.c:84
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr "отпечатъкът на индекса за множество пакети 0x%08x не съвпада с 0x%08x"
 
-#: midx.c:90
+#: midx.c:89
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "непозната версия на индекс за множество пакети — %d"
 
-#: midx.c:95
+#: midx.c:94
 #, c-format
 msgid "hash version %u does not match"
 msgstr "версията на отпечатъка %u не съвпада"
 
-#: midx.c:109
+#: midx.c:108
 msgid "invalid chunk offset (too large)"
 msgstr "неправилно (прекалено голямо) отместване на откъс"
 
-#: midx.c:133
+#: midx.c:132
 msgid "terminating multi-pack-index chunk id appears earlier than expected"
 msgstr ""
 "идентификаторът за краен откъс на индекс за множество пакети се явява по-"
 "рано от очакваното"
 
-#: midx.c:146
+#: midx.c:145
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "липсва откъс (pack-name) от индекс за множество пакети"
 
-#: midx.c:148
+#: midx.c:147
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "липсва откъс (OID fanout) от индекс за множество пакети"
 
-#: midx.c:150
+#: midx.c:149
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "липсва откъс (OID lookup) от индекс за множество пакети"
 
-#: midx.c:152
+#: midx.c:151
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "липсва откъс за отместванията на обекти от индекс за множество пакети"
 
-#: midx.c:166
+#: midx.c:165
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr ""
 "неправилна подредба на имената в индекс за множество пакети: „%s“ се появи "
 "преди „%s“"
 
-#: midx.c:211
+#: midx.c:210
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr ""
 "неправилен идентификатор на пакет (pack-int-id): %u (от общо %u пакети)"
 
-#: midx.c:261
+#: midx.c:260
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr ""
 "индексът за множество пакети съдържа 64-битови отмествания, но размерът на "
 "„off_t“ е недостатъчен"
 
-#: midx.c:289
+#: midx.c:288
 msgid "error preparing packfile from multi-pack-index"
 msgstr ""
 "грешка при създаването на пакетен файл на базата на индекс за множество "
 "пакети"
 
-#: midx.c:470
+#: midx.c:469
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "пакетният файл „%s“ не може да бъде добавен"
 
-#: midx.c:476
+#: midx.c:475
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "индексът за пакети „%s“ не може да бъде отворен"
 
-#: midx.c:536
+#: midx.c:535
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "обект %d в пакетния файл липсва"
 
-#: midx.c:865
+#: midx.c:864
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "пакетният файл за триене „%s“ не може да се открие"
 
-#: midx.c:1036
+#: midx.c:1035
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "индексът за множество пакети не може да бъде изчистен при „%s“"
 
-#: midx.c:1091
+#: midx.c:1090
 msgid "Looking for referenced packfiles"
 msgstr "Търсене на указаните пакетни файлове"
 
-#: midx.c:1106
+#: midx.c:1105
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
@@ -4391,60 +4416,60 @@
 "неправилна подредба на откъси (OID fanout): fanout[%d] = %<PRIx32> > "
 "%<PRIx32> = fanout[%d]"
 
-#: midx.c:1110
+#: midx.c:1109
 msgid "Verifying OID order in MIDX"
 msgstr ""
 "Проверка на подредбата на идентификатори на обекти в MIDX (файл с индекс към "
 "множество пакетни файлове)"
 
-#: midx.c:1119
+#: midx.c:1118
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr ""
 "неправилна подредба на откъси (OID lookup): oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1138
+#: midx.c:1137
 msgid "Sorting objects by packfile"
 msgstr "Подредба на обектите по пакетни файлове"
 
-#: midx.c:1144
+#: midx.c:1143
 msgid "Verifying object offsets"
 msgstr "Проверка на отместването на обекти"
 
-#: midx.c:1160
+#: midx.c:1159
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "записът в пакета за обекта oid[%d] = %s не може да бъде зареден"
 
-#: midx.c:1166
+#: midx.c:1165
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "индексът на пакета „%s“ не може да бъде зареден"
 
-#: midx.c:1175
+#: midx.c:1174
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "неправилно отместване на обект за oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 
-#: midx.c:1350
+#: midx.c:1349
 msgid "could not start pack-objects"
 msgstr "командата „pack-objects“ не може да бъде стартирана"
 
-#: midx.c:1369
+#: midx.c:1368
 msgid "could not finish pack-objects"
 msgstr "командата „pack-objects“ не може да бъде завършена"
 
-#: name-hash.c:532
+#: name-hash.c:537
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
 msgstr "не може да се създаде нишка за директории: %s"
 
-#: name-hash.c:554
+#: name-hash.c:559
 #, c-format
 msgid "unable to create lazy_name thread: %s"
 msgstr "не може да се създаде нишка за имена: %s"
 
-#: name-hash.c:560
+#: name-hash.c:565
 #, c-format
 msgid "unable to join lazy_name thread: %s"
 msgstr "не може да се изчака нишка за имена: %s"
@@ -4497,44 +4522,44 @@
 msgid "Bad %s value: '%s'"
 msgstr "Зададена е лоша стойност на променливата „%s“: „%s“"
 
-#: object.c:54
+#: object.c:53
 #, c-format
 msgid "invalid object type \"%s\""
 msgstr "неправилен вид обект: „%s“"
 
-#: object.c:174
+#: object.c:173
 #, c-format
 msgid "object %s is a %s, not a %s"
 msgstr "обектът „%s“ е %s, а не %s"
 
-#: object.c:234
+#: object.c:233
 #, c-format
 msgid "object %s has unknown type id %d"
 msgstr "обектът „%s“ е непознат вид: %d"
 
-#: object.c:247
+#: object.c:246
 #, c-format
 msgid "unable to parse object: %s"
 msgstr "обектът „%s“ не може да бъде анализиран"
 
-#: object.c:267 object.c:278
+#: object.c:266 object.c:277
 #, c-format
 msgid "hash mismatch %s"
 msgstr "разлика в контролната сума: „%s“"
 
-#: packfile.c:648
+#: packfile.c:641
 msgid "offset before end of packfile (broken .idx?)"
 msgstr ""
 "отместване преди края на пакетния файл (възможно е индексът да е повреден)"
 
-#: packfile.c:1899
+#: packfile.c:1887
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr ""
 "отместване преди началото на индекса на пакетния файл „%s“ (възможно е "
 "индексът да е повреден)"
 
-#: packfile.c:1903
+#: packfile.c:1891
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr ""
@@ -4582,26 +4607,26 @@
 msgid "did you mean `--%s` (with two dashes ?)"
 msgstr "„--%s“ (с 2 тирета) ли имахте предвид?"
 
-#: parse-options.c:859
+#: parse-options.c:860
 #, c-format
 msgid "unknown option `%s'"
 msgstr "непозната опция: „%s“"
 
-#: parse-options.c:861
+#: parse-options.c:862
 #, c-format
 msgid "unknown switch `%c'"
 msgstr "непознат флаг „%c“"
 
-#: parse-options.c:863
+#: parse-options.c:864
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr "непозната стойност извън „ascii“ в низа: „%s“"
 
-#: parse-options.c:887
+#: parse-options.c:888
 msgid "..."
 msgstr "…"
 
-#: parse-options.c:906
+#: parse-options.c:907
 #, c-format
 msgid "usage: %s"
 msgstr "употреба: %s"
@@ -4609,21 +4634,21 @@
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
 #.
-#: parse-options.c:912
+#: parse-options.c:913
 #, c-format
 msgid "   or: %s"
 msgstr "     или: %s"
 
-#: parse-options.c:915
+#: parse-options.c:916
 #, c-format
 msgid "    %s"
 msgstr "    %s"
 
-#: parse-options.c:954
+#: parse-options.c:955
 msgid "-NUM"
 msgstr "-ЧИСЛО"
 
-#: parse-options.c:968
+#: parse-options.c:969
 #, c-format
 msgid "alias of --%s"
 msgstr "псевдоним на „--%s“"
@@ -4795,30 +4820,40 @@
 msgid "unable to parse --pretty format"
 msgstr "аргументът към опцията „--pretty“ не може да се анализира"
 
-#: range-diff.c:70
+#: promisor-remote.c:25
+msgid "Remote with no URL"
+msgstr "Липсва адрес за отдалеченото хранилище"
+
+#: promisor-remote.c:61
+#, c-format
+msgid "promisor remote name cannot begin with '/': %s"
+msgstr ""
+"името отдалеченото хранилище-гарант не може за започва със знака „/“: %s"
+
+#: range-diff.c:71
 msgid "could not start `log`"
 msgstr "командата за журнала с подавания „log“ не може да се стартира"
 
-#: range-diff.c:72
+#: range-diff.c:73
 msgid "could not read `log` output"
 msgstr ""
 "изходът от командата за журнала с подавания „log“ не може да се прочете"
 
-#: range-diff.c:91 sequencer.c:5021
+#: range-diff.c:92 sequencer.c:4985
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "подаването „%s“ не може да бъде анализирано"
 
-#: range-diff.c:117
+#: range-diff.c:118
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "заглавната част на git „%.*s“ не може да се анализира"
 
-#: range-diff.c:274
+#: range-diff.c:275
 msgid "failed to generate diff"
 msgstr "неуспешно търсене на разлика"
 
-#: range-diff.c:506 range-diff.c:508
+#: range-diff.c:507 range-diff.c:509
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "журналът с подаванията на „%s“ не може да бъде анализиран"
@@ -4865,11 +4900,11 @@
 msgid "'%s' appears as both a file and as a directory"
 msgstr "„%s“ съществува и като файл, и като директория"
 
-#: read-cache.c:1499
+#: read-cache.c:1520
 msgid "Refresh index"
 msgstr "Обновяване на индекса"
 
-#: read-cache.c:1613
+#: read-cache.c:1635
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -4878,7 +4913,7 @@
 "Зададена е неправилна стойност на настройката „index.version“.\n"
 "Ще се ползва версия %i"
 
-#: read-cache.c:1623
+#: read-cache.c:1645
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -4888,141 +4923,141 @@
 "„GIT_INDEX_VERSION“.\n"
 "Ще се ползва версия %i"
 
-#: read-cache.c:1679
+#: read-cache.c:1701
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "неправилен подпис: „0x%08x“"
 
-#: read-cache.c:1682
+#: read-cache.c:1704
 #, c-format
 msgid "bad index version %d"
 msgstr "неправилна версия на индекса %d"
 
-#: read-cache.c:1691
+#: read-cache.c:1713
 msgid "bad index file sha1 signature"
 msgstr "неправилен подпис за контролна сума по SHA1 на файла на индекса"
 
-#: read-cache.c:1721
+#: read-cache.c:1743
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr ""
 "индексът ползва разширение „%.4s“, което не се поддържа от тази версия на git"
 
-#: read-cache.c:1723
+#: read-cache.c:1745
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "игнориране на разширението „%.4s“"
 
-#: read-cache.c:1760
+#: read-cache.c:1782
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "непознат формат на запис в индекса: „0x%08x“"
 
-#: read-cache.c:1776
+#: read-cache.c:1798
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "неправилно име на поле в индекса близо до пътя „%s“"
 
-#: read-cache.c:1833
+#: read-cache.c:1855
 msgid "unordered stage entries in index"
 msgstr "неподредени записи в индекса"
 
-#: read-cache.c:1836
+#: read-cache.c:1858
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "множество записи за слетия файл „%s“"
 
-#: read-cache.c:1839
+#: read-cache.c:1861
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "неподредени записи за „%s“"
 
-#: read-cache.c:1946 read-cache.c:2234 rerere.c:565 rerere.c:599 rerere.c:1111
-#: builtin/add.c:460 builtin/check-ignore.c:178 builtin/checkout.c:467
-#: builtin/checkout.c:651 builtin/clean.c:956 builtin/commit.c:347
+#: read-cache.c:1967 read-cache.c:2255 rerere.c:565 rerere.c:599 rerere.c:1111
+#: builtin/add.c:460 builtin/check-ignore.c:178 builtin/checkout.c:468
+#: builtin/checkout.c:652 builtin/clean.c:967 builtin/commit.c:347
 #: builtin/diff-tree.c:120 builtin/grep.c:499 builtin/mv.c:145
 #: builtin/reset.c:245 builtin/rm.c:271 builtin/submodule--helper.c:330
 msgid "index file corrupt"
 msgstr "файлът с индекса е повреден"
 
-#: read-cache.c:2087
+#: read-cache.c:2108
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "не може да се създаде нишка за зареждане на обектите от кеша: %s"
 
-#: read-cache.c:2100
+#: read-cache.c:2121
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "не може да се изчака нишка за зареждане на обектите от кеша: %s"
 
-#: read-cache.c:2133
+#: read-cache.c:2154
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s: неуспешно отваряне на файла на индекса"
 
-#: read-cache.c:2137
+#: read-cache.c:2158
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s: не може да се получи информация за отворения индекс със „stat“"
 
-#: read-cache.c:2141
+#: read-cache.c:2162
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s: файлът на индекса е по-малък от очакваното"
 
-#: read-cache.c:2145
+#: read-cache.c:2166
 #, c-format
 msgid "%s: unable to map index file"
 msgstr "%s: неуспешно заделяне на съответстваща памет чрез „mmap“ на индекса"
 
-#: read-cache.c:2187
+#: read-cache.c:2208
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr ""
 "не може да се създаде нишка за зареждане на разширенията на индекса: %s"
 
-#: read-cache.c:2214
+#: read-cache.c:2235
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr ""
 "не може да се създаде нишка за зареждане на разширенията на индекса: %s"
 
-#: read-cache.c:2246
+#: read-cache.c:2267
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "споделеният индекс „%s“ не може да се обнови"
 
-#: read-cache.c:2293
+#: read-cache.c:2314
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "грешки в индекса — в „%2$s“ се очаква „%1$s“, а бе получено „%3$s“"
 
-#: read-cache.c:2989 wrapper.c:658 builtin/merge.c:1114
+#: read-cache.c:3010 wrapper.c:622 builtin/merge.c:1119
 #, c-format
 msgid "could not close '%s'"
 msgstr "„%s“ не може да се затвори"
 
-#: read-cache.c:3092 sequencer.c:2358 sequencer.c:3928
+#: read-cache.c:3113 sequencer.c:2296 sequencer.c:3917
 #, c-format
 msgid "could not stat '%s'"
 msgstr "неуспешно изпълнение на „stat“ върху „%s“"
 
-#: read-cache.c:3105
+#: read-cache.c:3126
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "не може да се отвори директорията на git: %s"
 
-#: read-cache.c:3117
+#: read-cache.c:3138
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "неуспешно изтриване на „%s“"
 
-#: read-cache.c:3142
+#: read-cache.c:3163
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "правата за достъп до „%s“ не могат да бъдат поправени"
 
-#: read-cache.c:3291
+#: read-cache.c:3312
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s: не може да се премине към етап №0"
@@ -5135,8 +5170,8 @@
 msgid "Note that empty commits are commented out"
 msgstr "Празните подавания са коментирани"
 
-#: rebase-interactive.c:105 rerere.c:485 rerere.c:692 sequencer.c:3447
-#: sequencer.c:3473 sequencer.c:5120 builtin/fsck.c:356 builtin/rebase.c:235
+#: rebase-interactive.c:105 rerere.c:485 rerere.c:692 sequencer.c:3388
+#: sequencer.c:3414 sequencer.c:5084 builtin/fsck.c:356 builtin/rebase.c:235
 #, c-format
 msgid "could not write '%s'"
 msgstr "„%s“ не може да се запише"
@@ -5182,7 +5217,7 @@
 msgid "ignoring dangling symref %s"
 msgstr "игнориране на указател на обект извън клон „%s“"
 
-#: refs.c:669 ref-filter.c:2092
+#: refs.c:669 ref-filter.c:2098
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "игнориране на повредения указател „%s“"
@@ -5207,14 +5242,14 @@
 msgid "unexpected object ID when writing '%s'"
 msgstr "неочакван идентификатор на обект при записването на „%s“"
 
-#: refs.c:833 sequencer.c:403 sequencer.c:2709 sequencer.c:2913
-#: sequencer.c:2927 sequencer.c:3184 sequencer.c:5037 wrapper.c:656
+#: refs.c:833 sequencer.c:403 sequencer.c:2647 sequencer.c:2851
+#: sequencer.c:2865 sequencer.c:3122 sequencer.c:5001 wrapper.c:620
 #, c-format
 msgid "could not write to '%s'"
 msgstr "в „%s“ не може да се пише"
 
-#: refs.c:860 wrapper.c:225 wrapper.c:395 builtin/am.c:715
-#: builtin/rebase.c:1003
+#: refs.c:860 wrapper.c:188 wrapper.c:358 builtin/am.c:714
+#: builtin/rebase.c:1004
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "„%s“ не може да бъде отворен за запис"
@@ -5249,21 +5284,21 @@
 msgid "update_ref failed for ref '%s': %s"
 msgstr "неуспешно обновяване на указателя „%s“: %s"
 
-#: refs.c:2012
+#: refs.c:2023
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "не са позволени повече от една промени на указателя „%s“"
 
-#: refs.c:2044
+#: refs.c:2055
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "обновяванията на указатели са забранени в среди под карантина"
 
-#: refs.c:2140 refs.c:2170
+#: refs.c:2151 refs.c:2181
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "„%s“ съществува, не може да се създаде „%s“"
 
-#: refs.c:2146 refs.c:2181
+#: refs.c:2157 refs.c:2192
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "невъзможно е едновременно да се обработват „%s“ и „%s“"
@@ -5273,13 +5308,13 @@
 msgid "could not remove reference %s"
 msgstr "Указателят „%s“ не може да бъде изтрит"
 
-#: refs/files-backend.c:1248 refs/packed-backend.c:1532
-#: refs/packed-backend.c:1542
+#: refs/files-backend.c:1248 refs/packed-backend.c:1541
+#: refs/packed-backend.c:1551
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr "Указателят „%s“ не може да бъде изтрит: %s"
 
-#: refs/files-backend.c:1251 refs/packed-backend.c:1545
+#: refs/files-backend.c:1251 refs/packed-backend.c:1554
 #, c-format
 msgid "could not delete references: %s"
 msgstr "Указателите не може да бъдат изтрити: %s"
@@ -5289,7 +5324,7 @@
 msgid "invalid refspec '%s'"
 msgstr "неправилен указател: „%s“"
 
-#: ref-filter.c:42 wt-status.c:1934
+#: ref-filter.c:42 wt-status.c:1938
 msgid "gone"
 msgstr "изтрит"
 
@@ -5308,281 +5343,281 @@
 msgid "ahead %d, behind %d"
 msgstr "напред с %d, назад с %d"
 
-#: ref-filter.c:162
+#: ref-filter.c:165
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr "очакван формат: %%(color:ЦВЯТ)"
 
-#: ref-filter.c:164
+#: ref-filter.c:167
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr "непознат цвят: %%(color:%s)"
 
-#: ref-filter.c:186
+#: ref-filter.c:189
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr "очаква се цяло число за „refname:lstrip=%s“"
 
-#: ref-filter.c:190
+#: ref-filter.c:193
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr "очаква се цяло число за „refname:rstrip=%s“"
 
-#: ref-filter.c:192
+#: ref-filter.c:195
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr "непознат аргумент за „%%(%s)“: %s"
 
-#: ref-filter.c:247
+#: ref-filter.c:250
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr "%%(objecttype) не приема аргументи"
 
-#: ref-filter.c:269
+#: ref-filter.c:272
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr "непознат аргумент за %%(objectsize): %s"
 
-#: ref-filter.c:277
+#: ref-filter.c:280
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr "%%(deltabase) не приема аргументи"
 
-#: ref-filter.c:289
+#: ref-filter.c:292
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr "%%(body) не приема аргументи"
 
-#: ref-filter.c:298
+#: ref-filter.c:301
 #, c-format
 msgid "%%(subject) does not take arguments"
 msgstr "%%(subject) не приема аргументи"
 
-#: ref-filter.c:320
+#: ref-filter.c:323
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr "непознат аргумент „%%(trailers)“: %s"
 
-#: ref-filter.c:349
+#: ref-filter.c:352
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr "очаква се положителна стойност за „contents:lines=%s“"
 
-#: ref-filter.c:351
+#: ref-filter.c:354
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr "непознат аргумент за %%(contents): %s"
 
-#: ref-filter.c:366
+#: ref-filter.c:369
 #, c-format
 msgid "positive value expected objectname:short=%s"
 msgstr "очаква се положителна стойност за „objectname:short=%s“"
 
-#: ref-filter.c:370
+#: ref-filter.c:373
 #, c-format
 msgid "unrecognized %%(objectname) argument: %s"
 msgstr "непознат аргумент за %%(objectname): %s"
 
-#: ref-filter.c:400
+#: ref-filter.c:403
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr "очакван формат: %%(align:ШИРОЧИНА,ПОЗИЦИЯ)"
 
-#: ref-filter.c:412
+#: ref-filter.c:415
 #, c-format
 msgid "unrecognized position:%s"
 msgstr "непозната позиция: %s"
 
-#: ref-filter.c:419
+#: ref-filter.c:422
 #, c-format
 msgid "unrecognized width:%s"
 msgstr "непозната широчина: %s"
 
-#: ref-filter.c:428
+#: ref-filter.c:431
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr "непознат аргумент за %%(align): %s"
 
-#: ref-filter.c:436
+#: ref-filter.c:439
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr "очаква се положителна широчина с лексемата „%%(align)“"
 
-#: ref-filter.c:454
+#: ref-filter.c:457
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr "непознат аргумент за „%%(if)“: %s"
 
-#: ref-filter.c:556
+#: ref-filter.c:559
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "неправилно име на обект: „%.*s“"
 
-#: ref-filter.c:583
+#: ref-filter.c:586
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "непознато име на обект: „%.*s“"
 
-#: ref-filter.c:587
+#: ref-filter.c:590
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
 msgstr "не е хранилище на git, а полето „%.*s“ изисква достъп данни на обектни"
 
-#: ref-filter.c:711
+#: ref-filter.c:714
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr "формат: лексемата %%(if) е използвана без съответната ѝ %%(then)"
 
-#: ref-filter.c:774
+#: ref-filter.c:777
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr "формат: лексемата %%(then) е използвана без съответната ѝ %%(if)"
 
-#: ref-filter.c:776
+#: ref-filter.c:779
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr "формат: лексемата %%(then) е използвана повече от един път"
 
-#: ref-filter.c:778
+#: ref-filter.c:781
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "формат: лексемата %%(then) е използвана след %%(else)"
 
-#: ref-filter.c:806
+#: ref-filter.c:809
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr "формат: лексемата %%(else) е използвана без съответната ѝ %%(if)"
 
-#: ref-filter.c:808
+#: ref-filter.c:811
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr "формат: лексемата %%(else) е използвана без съответната ѝ %%(then)"
 
-#: ref-filter.c:810
+#: ref-filter.c:813
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr "формат: лексемата %%(else) е използвана повече от един път"
 
-#: ref-filter.c:825
+#: ref-filter.c:828
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr "формат: лексемата %%(end) е използвана без съответната ѝ"
 
-#: ref-filter.c:882
+#: ref-filter.c:885
 #, c-format
 msgid "malformed format string %s"
 msgstr "неправилен форматиращ низ „%s“"
 
-#: ref-filter.c:1485
+#: ref-filter.c:1488
 #, c-format
 msgid "no branch, rebasing %s"
 msgstr "извън клон, пребазиране на „%s“"
 
-#: ref-filter.c:1488
+#: ref-filter.c:1491
 #, c-format
 msgid "no branch, rebasing detached HEAD %s"
 msgstr "извън клон, пребазиране на несвързан указател „HEAD“ при „%s“"
 
-#: ref-filter.c:1491
+#: ref-filter.c:1494
 #, c-format
 msgid "no branch, bisect started on %s"
 msgstr "извън клон, двоично търсене от „%s“"
 
-#: ref-filter.c:1501
+#: ref-filter.c:1504
 msgid "no branch"
 msgstr "извън клон"
 
-#: ref-filter.c:1537 ref-filter.c:1743
+#: ref-filter.c:1540 ref-filter.c:1749
 #, c-format
 msgid "missing object %s for %s"
 msgstr "обектът „%s“ липсва за „%s“"
 
-#: ref-filter.c:1547
+#: ref-filter.c:1550
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "неуспешно анализиране чрез „parse_object_buffer“ на „%s“ за „%s“"
 
-#: ref-filter.c:1998
+#: ref-filter.c:2004
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "обект със сгрешен формат при „%s“"
 
-#: ref-filter.c:2087
+#: ref-filter.c:2093
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "игнориране на указателя с грешно име „%s“"
 
-#: ref-filter.c:2382
+#: ref-filter.c:2389
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "грешка във форма̀та: липсва лексемата %%(end)"
 
-#: ref-filter.c:2482
+#: ref-filter.c:2489
 #, c-format
 msgid "option `%s' is incompatible with --merged"
 msgstr "опциите „%s“ и „--merged“ са несъвместими"
 
-#: ref-filter.c:2485
+#: ref-filter.c:2492
 #, c-format
 msgid "option `%s' is incompatible with --no-merged"
 msgstr "опциите „%s“ и „--no-merged“ са несъвместими"
 
-#: ref-filter.c:2495
+#: ref-filter.c:2502
 #, c-format
 msgid "malformed object name %s"
 msgstr "неправилно име на обект „%s“"
 
-#: ref-filter.c:2500
+#: ref-filter.c:2507
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "опцията „%s“ не сочи към подаване"
 
-#: remote.c:363
+#: remote.c:366
 #, c-format
 msgid "config remote shorthand cannot begin with '/': %s"
 msgstr ""
 "съкращението за отдалечено хранилище не може за започва със знака „/“: %s"
 
-#: remote.c:410
+#: remote.c:413
 msgid "more than one receivepack given, using the first"
 msgstr "зададен е повече от един пакет за получаване, ще се ползва първият"
 
-#: remote.c:418
+#: remote.c:421
 msgid "more than one uploadpack given, using the first"
 msgstr "зададен е повече от един пакет за изпращане, ще се ползва първият"
 
-#: remote.c:608
+#: remote.c:611
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
 msgstr "Невъзможно е да се доставят едновременно и „%s“, и „%s“ към „%s“"
 
-#: remote.c:612
+#: remote.c:615
 #, c-format
 msgid "%s usually tracks %s, not %s"
 msgstr "„%s“ обикновено следи „%s“, а не „%s“"
 
-#: remote.c:616
+#: remote.c:619
 #, c-format
 msgid "%s tracks both %s and %s"
 msgstr "„%s“ следи както „%s“, така и „%s“"
 
-#: remote.c:684
+#: remote.c:687
 #, c-format
 msgid "key '%s' of pattern had no '*'"
 msgstr "ключ „%s“ на шаблона не съдържа „*“"
 
-#: remote.c:694
+#: remote.c:697
 #, c-format
 msgid "value '%s' of pattern has no '*'"
 msgstr "стойност „%s“ на шаблона не съдържа „*“"
 
-#: remote.c:1000
+#: remote.c:1003
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "указателят на версия-източник „%s“ не съвпада с никой обект"
 
-#: remote.c:1005
+#: remote.c:1008
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr "указателят на версия-източник „%s“ съвпада с повече от един обект"
@@ -5591,7 +5626,7 @@
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1020
+#: remote.c:1023
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -5615,7 +5650,7 @@
 "Никой от вариантите не сработи.  Трябва сами да укажете пълното име на\n"
 "указателя."
 
-#: remote.c:1040
+#: remote.c:1043
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -5626,7 +5661,7 @@
 "като\n"
 "изтласкате към „%s:refs/heads/%s“?"
 
-#: remote.c:1045
+#: remote.c:1048
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -5637,7 +5672,7 @@
 "като\n"
 "изтласкате към „%s:refs/tags/%s“?"
 
-#: remote.c:1050
+#: remote.c:1053
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -5647,7 +5682,7 @@
 "ИЗТОЧНИКът е обект-дърво.  Не целите ли всъщност да създадете нов клон като\n"
 "изтласкате към „%s:refs/tags/%s“?"
 
-#: remote.c:1055
+#: remote.c:1058
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -5657,118 +5692,118 @@
 "ИЗТОЧНИКът е обект-BLOB.  Не целите ли всъщност да създадете нов клон като\n"
 "изтласкате към „%s:refs/tags/%s“?"
 
-#: remote.c:1091
+#: remote.c:1094
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "не е открит клон съответстващ на „%s“"
 
-#: remote.c:1102
+#: remote.c:1105
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "„%s“ не може да се изтрие: отдалечения указател не съществува"
 
-#: remote.c:1114
+#: remote.c:1117
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr "указателят на версия-цел „%s“ съвпада с повече от един обект"
 
-#: remote.c:1121
+#: remote.c:1124
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr ""
 "указателят на версия-цел „%s“ съответства и ще получава от повече от един "
 "източник"
 
-#: remote.c:1624 remote.c:1725
+#: remote.c:1627 remote.c:1728
 msgid "HEAD does not point to a branch"
 msgstr "Указателят „HEAD“ не сочи към клон"
 
-#: remote.c:1633
+#: remote.c:1636
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "няма клон на име „%s“"
 
-#: remote.c:1636
+#: remote.c:1639
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "не е зададен клон-източник за клона „%s“"
 
-#: remote.c:1642
+#: remote.c:1645
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "клонът-източник „%s“ не е съхранен като следящ клон"
 
-#: remote.c:1657
+#: remote.c:1660
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr ""
 "липсва локален следящ клон за местоположението за изтласкване „%s“ в "
 "хранилището „%s“"
 
-#: remote.c:1669
+#: remote.c:1672
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "няма информация клонът „%s“ да следи някой друг"
 
-#: remote.c:1679
+#: remote.c:1682
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "указателят за изтласкване на „%s“ не включва „%s“"
 
-#: remote.c:1692
+#: remote.c:1695
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "указателят за изтласкване не включва цел („push.default“ е „nothing“)"
 
-#: remote.c:1714
+#: remote.c:1717
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "простото (simple) изтласкване не съответства на една цел"
 
-#: remote.c:1840
+#: remote.c:1843
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "отдалеченият указател „%s“ не може да бъде открит"
 
-#: remote.c:1853
+#: remote.c:1856
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "• прескачане на неочаквания локален указател „%s“"
 
-#: remote.c:2016
+#: remote.c:2019
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "Този клон следи „%s“, но следеният клон е изтрит.\n"
 
-#: remote.c:2020
+#: remote.c:2023
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (за да коригирате това, използвайте „git branch --unset-upstream“)\n"
 
-#: remote.c:2023
+#: remote.c:2026
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Клонът е актуализиран към „%s“.\n"
 
-#: remote.c:2027
+#: remote.c:2030
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Клонът ви и „%s“ сочат към различни подавания.\n"
 
-#: remote.c:2030
+#: remote.c:2033
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (за повече информация ползвайте „%s“)\n"
 
-#: remote.c:2034
+#: remote.c:2037
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "Клонът ви е с %2$d подаване пред „%1$s“.\n"
 msgstr[1] "Клонът ви е с %2$d подавания пред „%1$s“.\n"
 
-#: remote.c:2040
+#: remote.c:2043
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (публикувайте локалните си промени чрез „git push“)\n"
 
-#: remote.c:2043
+#: remote.c:2046
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -5776,11 +5811,11 @@
 msgstr[0] "Клонът ви е с %2$d подаване зад „%1$s“ и може да бъде превъртян.\n"
 msgstr[1] "Клонът ви е с %2$d подавания зад „%1$s“ и може да бъде превъртян.\n"
 
-#: remote.c:2051
+#: remote.c:2054
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (обновете локалния си клон чрез „git pull“)\n"
 
-#: remote.c:2054
+#: remote.c:2057
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -5795,11 +5830,11 @@
 "Текущият клон се е отделил от „%s“,\n"
 "двата имат съответно по %d и %d несъвпадащи подавания.\n"
 
-#: remote.c:2064
+#: remote.c:2067
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (слейте отдалечения клон в локалния чрез „git pull“)\n"
 
-#: remote.c:2247
+#: remote.c:2250
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "очакваното име на обект „%s“ не може да бъде анализирано"
@@ -5880,7 +5915,7 @@
 msgid "Recorded preimage for '%s'"
 msgstr "Предварителният вариант на „%s“ е запазен"
 
-#: rerere.c:881 submodule.c:2023 builtin/log.c:1773
+#: rerere.c:881 submodule.c:2023 builtin/log.c:1790
 #: builtin/submodule--helper.c:1418 builtin/submodule--helper.c:1428
 #, c-format
 msgid "could not create directory '%s'"
@@ -5915,20 +5950,20 @@
 msgid "unable to open rr-cache directory"
 msgstr "директорията „rr-cache“ не може да се отвори"
 
-#: revision.c:2507
+#: revision.c:2509
 msgid "your current branch appears to be broken"
 msgstr "Текущият клон е повреден"
 
-#: revision.c:2510
+#: revision.c:2512
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "Текущият клон „%s“ е без подавания "
 
-#: revision.c:2710
+#: revision.c:2720
 msgid "--first-parent is incompatible with --bisect"
 msgstr "опциите „--first-parent“ и „--bisect“ са несъвместими"
 
-#: revision.c:2714
+#: revision.c:2724
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr ""
 "опцията „-L“ поддържа единствено форматирането на разликите според опциите „-"
@@ -5953,32 +5988,32 @@
 "За да изключите това предупреждение, изпълнете:\n"
 "    git config advice.ignoredHook false"
 
-#: send-pack.c:141
+#: send-pack.c:142
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr ""
 "неочакван изчистващ пакет „flush“ при изчитане на състоянието от "
 "отдалеченото разпакетиране"
 
-#: send-pack.c:143
+#: send-pack.c:144
 #, c-format
 msgid "unable to parse remote unpack status: %s"
 msgstr ""
 "състоянието от отдалеченото разпакетиране не може да бъде анализирано: %s"
 
-#: send-pack.c:145
+#: send-pack.c:146
 #, c-format
 msgid "remote unpack failed: %s"
 msgstr "неуспешно отдалечено разпакетиране: %s"
 
-#: send-pack.c:306
+#: send-pack.c:307
 msgid "failed to sign the push certificate"
 msgstr "сертификатът за изтласкване не може да бъде подписан"
 
-#: send-pack.c:420
+#: send-pack.c:421
 msgid "the receiving end does not support --signed push"
 msgstr "отсрещната страна не поддържа изтласкване с опцията „--signed“"
 
-#: send-pack.c:422
+#: send-pack.c:423
 msgid ""
 "not sending a push certificate since the receiving end does not support --"
 "signed push"
@@ -5986,11 +6021,11 @@
 "отсрещната страна не поддържа изтласкване с опцията „--signed“, затова не се "
 "използва сертификат"
 
-#: send-pack.c:434
+#: send-pack.c:435
 msgid "the receiving end does not support --atomic push"
 msgstr "получаващата страна не поддържа изтласкване с опцията „--atomic“"
 
-#: send-pack.c:439
+#: send-pack.c:440
 msgid "the receiving end does not support push options"
 msgstr "отсрещната страна не поддържа опции при изтласкване"
 
@@ -6004,7 +6039,7 @@
 msgid "could not delete '%s'"
 msgstr "„%s“ не може да бъде изтрит"
 
-#: sequencer.c:311 builtin/rebase.c:759 builtin/rebase.c:1645 builtin/rm.c:369
+#: sequencer.c:311 builtin/rebase.c:760 builtin/rebase.c:1676 builtin/rm.c:369
 #, c-format
 msgid "could not remove '%s'"
 msgstr "„%s“ не може да бъде изтрит"
@@ -6044,7 +6079,7 @@
 "пътища с „git add ПЪТ…“ или „git rm ПЪТ…“, след което\n"
 "подайте резултата с командата „git commit'“."
 
-#: sequencer.c:401 sequencer.c:2909
+#: sequencer.c:401 sequencer.c:2847
 #, c-format
 msgid "could not lock '%s'"
 msgstr "„%s“ не може да се заключи"
@@ -6054,15 +6089,15 @@
 msgid "could not write eol to '%s'"
 msgstr "краят на ред не може да се запише в „%s“"
 
-#: sequencer.c:413 sequencer.c:2714 sequencer.c:2915 sequencer.c:2929
-#: sequencer.c:3192
+#: sequencer.c:413 sequencer.c:2652 sequencer.c:2853 sequencer.c:2867
+#: sequencer.c:3130
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "„%s“ не може да се завърши"
 
-#: sequencer.c:436 sequencer.c:981 sequencer.c:1655 sequencer.c:2734
-#: sequencer.c:3174 sequencer.c:3283 builtin/am.c:245 builtin/commit.c:763
-#: builtin/merge.c:1112 builtin/rebase.c:567
+#: sequencer.c:436 sequencer.c:1585 sequencer.c:2672 sequencer.c:3112
+#: sequencer.c:3221 builtin/am.c:244 builtin/commit.c:763 builtin/merge.c:1117
+#: builtin/rebase.c:568
 #, c-format
 msgid "could not read '%s'"
 msgstr "файлът „%s“ не може да бъде прочетен"
@@ -6089,70 +6124,65 @@
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase -i".
 #.
-#: sequencer.c:632
+#: sequencer.c:631
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s: новият индекс не може да бъде запазен"
 
-#: sequencer.c:649
+#: sequencer.c:648
 msgid "unable to update cache tree"
 msgstr "дървото на кеша не може да бъде обновено"
 
-#: sequencer.c:663
+#: sequencer.c:662
 msgid "could not resolve HEAD commit"
 msgstr "подаването, сочено от указателя „HEAD“, не може да бъде открито"
 
-#: sequencer.c:743
+#: sequencer.c:742
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr "в „%.*s“ няма ключове"
 
-#: sequencer.c:754
+#: sequencer.c:753
 #, c-format
 msgid "unable to dequote value of '%s'"
 msgstr "цитирането на стойността на „%s“ не може да бъде изчистено"
 
-#: sequencer.c:791 wrapper.c:227 wrapper.c:397 builtin/am.c:706
-#: builtin/am.c:798 builtin/merge.c:1109 builtin/rebase.c:1045
+#: sequencer.c:790 wrapper.c:190 wrapper.c:360 builtin/am.c:705
+#: builtin/am.c:797 builtin/merge.c:1114 builtin/rebase.c:1046
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "файлът не може да бъде прочетен: „%s“"
 
-#: sequencer.c:801
+#: sequencer.c:800
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr "настройката за автор „GIT_AUTHOR_NAME“ вече е зададена"
 
-#: sequencer.c:806
+#: sequencer.c:805
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr "настройката за е-поща „GIT_AUTHOR_EMAIL“ вече е зададена"
 
-#: sequencer.c:811
+#: sequencer.c:810
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr "настройката за дата „GIT_AUTHOR_DATE“ вече е зададена"
 
-#: sequencer.c:815
+#: sequencer.c:814
 #, c-format
 msgid "unknown variable '%s'"
 msgstr "непозната променлива „%s“"
 
-#: sequencer.c:820
+#: sequencer.c:819
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr "настройката за автор „GIT_AUTHOR_NAME“ липсва"
 
-#: sequencer.c:822
+#: sequencer.c:821
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr "настройката за е-поща „GIT_AUTHOR_EMAIL“ липсва"
 
-#: sequencer.c:824
+#: sequencer.c:823
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr "настройката за дата „GIT_AUTHOR_DATE“ липсва"
 
-#: sequencer.c:884
-#, c-format
-msgid "invalid date format '%s' in '%s'"
-msgstr "неправилен формат на дата „%s“ в „%s“"
-
-#: sequencer.c:901
+#: sequencer.c:872
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -6181,17 +6211,13 @@
 "\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:995
-msgid "writing root commit"
-msgstr "запазване на начално подаване"
-
-#: sequencer.c:1216
+#: sequencer.c:1146
 msgid "'prepare-commit-msg' hook failed"
 msgstr ""
 "неуспешно изпълнение на куката при промяна на съобщението при подаване "
 "(prepare-commit-msg)"
 
-#: sequencer.c:1223
+#: sequencer.c:1153
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -6220,7 +6246,7 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1236
+#: sequencer.c:1166
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -6246,338 +6272,338 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1278
+#: sequencer.c:1208
 msgid "couldn't look up newly created commit"
 msgstr "току що създаденото подаване не може да бъде открито"
 
-#: sequencer.c:1280
+#: sequencer.c:1210
 msgid "could not parse newly created commit"
 msgstr "току що създаденото подаване не може да бъде анализирано"
 
-#: sequencer.c:1326
+#: sequencer.c:1256
 msgid "unable to resolve HEAD after creating commit"
 msgstr ""
 "състоянието сочено от указателя „HEAD“ не може да бъде открито след "
 "подаването"
 
-#: sequencer.c:1328
+#: sequencer.c:1258
 msgid "detached HEAD"
 msgstr "несвързан връх „HEAD“"
 
-#: sequencer.c:1332
+#: sequencer.c:1262
 msgid " (root-commit)"
 msgstr " (начално подаване)"
 
-#: sequencer.c:1353
+#: sequencer.c:1283
 msgid "could not parse HEAD"
 msgstr "указателят „HEAD“ не може да бъде анализиран"
 
-#: sequencer.c:1355
+#: sequencer.c:1285
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "указателят „HEAD“ „%s“ сочи към нещо, което не е подаване!"
 
-#: sequencer.c:1359 builtin/commit.c:1571
+#: sequencer.c:1289 builtin/commit.c:1571
 msgid "could not parse HEAD commit"
 msgstr "върховото подаване „HEAD“ не може да бъде прочетено"
 
-#: sequencer.c:1411 sequencer.c:2004
+#: sequencer.c:1341 sequencer.c:1933
 msgid "unable to parse commit author"
 msgstr "авторът на подаването не може да бъде анализиран"
 
-#: sequencer.c:1421 builtin/am.c:1573 builtin/merge.c:684
+#: sequencer.c:1352 builtin/am.c:1561 builtin/merge.c:684
 msgid "git write-tree failed to write a tree"
 msgstr "Командата „git write-tree“ не успя да запише обект-дърво"
 
-#: sequencer.c:1438 sequencer.c:1499
+#: sequencer.c:1369 sequencer.c:1429
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "съобщението за подаване не може да бъде прочетено от „%s“"
 
-#: sequencer.c:1465 builtin/am.c:1595 builtin/commit.c:1670 builtin/merge.c:878
-#: builtin/merge.c:903
+#: sequencer.c:1396 builtin/am.c:1583 builtin/commit.c:1670 builtin/merge.c:883
+#: builtin/merge.c:908
 msgid "failed to write commit object"
 msgstr "обектът за подаването не може да бъде записан"
 
-#: sequencer.c:1526
+#: sequencer.c:1456
 #, c-format
 msgid "could not parse commit %s"
 msgstr "подаването „%s“ не може да бъде анализирано"
 
-#: sequencer.c:1531
+#: sequencer.c:1461
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "родителското подаване „%s“ не може да бъде анализирано"
 
-#: sequencer.c:1605 sequencer.c:1715
+#: sequencer.c:1535 sequencer.c:1645
 #, c-format
 msgid "unknown command: %d"
 msgstr "непозната команда: %d"
 
-#: sequencer.c:1662 sequencer.c:1687
+#: sequencer.c:1592 sequencer.c:1617
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr "Това е обединение от %d подавания"
 
-#: sequencer.c:1672
+#: sequencer.c:1602
 msgid "need a HEAD to fixup"
 msgstr "За вкарване в предходното подаване ви трябва указател „HEAD“"
 
-#: sequencer.c:1674 sequencer.c:3219
+#: sequencer.c:1604 sequencer.c:3157
 msgid "could not read HEAD"
 msgstr "указателят „HEAD“ не може да се прочете"
 
-#: sequencer.c:1676
+#: sequencer.c:1606
 msgid "could not read HEAD's commit message"
 msgstr ""
 "съобщението за подаване към указателя „HEAD“ не може да бъде прочетено: %s"
 
-#: sequencer.c:1682
+#: sequencer.c:1612
 #, c-format
 msgid "cannot write '%s'"
 msgstr "„%s“ не може да се запази"
 
-#: sequencer.c:1689 git-rebase--preserve-merges.sh:496
+#: sequencer.c:1619 git-rebase--preserve-merges.sh:496
 msgid "This is the 1st commit message:"
 msgstr "Това е 1-то съобщение при подаване:"
 
-#: sequencer.c:1697
+#: sequencer.c:1627
 #, c-format
 msgid "could not read commit message of %s"
 msgstr "съобщението за подаване към „%s“ не може да бъде прочетено"
 
-#: sequencer.c:1704
+#: sequencer.c:1634
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Това е съобщение при подаване №%d:"
 
-#: sequencer.c:1710
+#: sequencer.c:1640
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "Съобщение при подаване №%d ще бъде прескочено:"
 
-#: sequencer.c:1798
+#: sequencer.c:1728
 msgid "your index file is unmerged."
 msgstr "индексът не е слят."
 
-#: sequencer.c:1805
+#: sequencer.c:1735
 msgid "cannot fixup root commit"
 msgstr "началното подаване не може да се вкара в предходното му"
 
-#: sequencer.c:1824
+#: sequencer.c:1754
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "подаването „%s“ е сливане, но не е дадена опцията „-m“"
 
-#: sequencer.c:1832 sequencer.c:1840
+#: sequencer.c:1762 sequencer.c:1770
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "подаването „%s“ няма родител %d"
 
-#: sequencer.c:1846
+#: sequencer.c:1776
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "неуспешно извличане на съобщението за подаване на „%s“"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:1865
+#: sequencer.c:1795
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: неразпозната стойност за родителското подаване „%s“"
 
-#: sequencer.c:1930
+#: sequencer.c:1860
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "„%s“ не може да се преименува на „%s“"
 
-#: sequencer.c:1985
+#: sequencer.c:1915
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "подаването „%s“… не може да бъде отменено: „%s“"
 
-#: sequencer.c:1986
+#: sequencer.c:1916
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "подаването „%s“… не може да бъде приложено: „%s“"
 
-#: sequencer.c:2045
+#: sequencer.c:1983
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: неуспешно изчитане на индекса"
 
-#: sequencer.c:2052
+#: sequencer.c:1990
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: неуспешно обновяване на индекса"
 
-#: sequencer.c:2128
+#: sequencer.c:2066
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "„%s“ не приема аргументи: „%s“"
 
-#: sequencer.c:2137
+#: sequencer.c:2075
 #, c-format
 msgid "missing arguments for %s"
 msgstr "„%s“ изисква аргументи"
 
-#: sequencer.c:2174
+#: sequencer.c:2112
 #, c-format
 msgid "could not parse '%.*s'"
 msgstr "„%.*s“ не може да се анализира"
 
-#: sequencer.c:2228
+#: sequencer.c:2166
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "неправилен ред %d: %.*s"
 
-#: sequencer.c:2239
+#: sequencer.c:2177
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "Без предишно подаване не може да се изпълни „%s“"
 
-#: sequencer.c:2287 builtin/rebase.c:153 builtin/rebase.c:178
+#: sequencer.c:2225 builtin/rebase.c:153 builtin/rebase.c:178
 #: builtin/rebase.c:204 builtin/rebase.c:229
 #, c-format
 msgid "could not read '%s'."
 msgstr "от „%s“ не може да се чете."
 
-#: sequencer.c:2323
+#: sequencer.c:2261
 msgid "cancelling a cherry picking in progress"
 msgstr "преустановяване на извършваното в момента отбиране на подавания"
 
-#: sequencer.c:2330
+#: sequencer.c:2268
 msgid "cancelling a revert in progress"
 msgstr "преустановяване на извършваното в момента отмяна на подаване"
 
-#: sequencer.c:2364
+#: sequencer.c:2302
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "коригирайте това чрез „git rebase --edit-todo“."
 
-#: sequencer.c:2366
+#: sequencer.c:2304
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "неизползваем файл с описание на предстоящите действия: „%s“"
 
-#: sequencer.c:2371
+#: sequencer.c:2309
 msgid "no commits parsed."
 msgstr "никое от подаванията не може да се разпознае."
 
-#: sequencer.c:2382
+#: sequencer.c:2320
 msgid "cannot cherry-pick during a revert."
 msgstr ""
 "по време на отмяна на подаване не може да се извърши отбиране на подаване."
 
-#: sequencer.c:2384
+#: sequencer.c:2322
 msgid "cannot revert during a cherry-pick."
 msgstr "по време на отбиране не може да се извърши отмяна на подаване."
 
-#: sequencer.c:2466
+#: sequencer.c:2404
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr "неправилна стойност за „%s“: „%s“"
 
-#: sequencer.c:2553
+#: sequencer.c:2491
 msgid "unusable squash-onto"
 msgstr "подаването, в което другите да се вкарат, не може да се използва"
 
-#: sequencer.c:2569
+#: sequencer.c:2507
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "неправилен файл с опции: „%s“"
 
-#: sequencer.c:2652 sequencer.c:4351
+#: sequencer.c:2590 sequencer.c:4308
 msgid "empty commit set passed"
 msgstr "зададено е празно множество от подавания"
 
-#: sequencer.c:2668
+#: sequencer.c:2606
 msgid "revert is already in progress"
 msgstr "в момента вече се извършва отмяна на подавания"
 
-#: sequencer.c:2670
+#: sequencer.c:2608
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "използвайте „git cherry-pick (--continue | %s--abort | --quit)“"
 
-#: sequencer.c:2673
+#: sequencer.c:2611
 msgid "cherry-pick is already in progress"
 msgstr "в момента вече се извършва отбиране на подавания"
 
-#: sequencer.c:2675
+#: sequencer.c:2613
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "използвайте „git cherry-pick (--continue | %s--abort | --quit)“"
 
-#: sequencer.c:2689
+#: sequencer.c:2627
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr ""
 "директорията за определянето на последователността „%s“ не може да бъде "
 "създадена"
 
-#: sequencer.c:2704
+#: sequencer.c:2642
 msgid "could not lock HEAD"
 msgstr "указателят „HEAD“ не може да се заключи"
 
-#: sequencer.c:2764 sequencer.c:4103
+#: sequencer.c:2702 sequencer.c:4057
 msgid "no cherry-pick or revert in progress"
 msgstr ""
 "в момента не се извършва отбиране на подавания или пребазиране на клона"
 
-#: sequencer.c:2766 sequencer.c:2777
+#: sequencer.c:2704 sequencer.c:2715
 msgid "cannot resolve HEAD"
 msgstr "Подаването сочено от указателя „HEAD“ не може да бъде открито"
 
-#: sequencer.c:2768 sequencer.c:2812
+#: sequencer.c:2706 sequencer.c:2750
 msgid "cannot abort from a branch yet to be born"
 msgstr ""
 "действието не може да бъде преустановено, когато сте на клон, който тепърва "
 "предстои да бъде създаден"
 
-#: sequencer.c:2798 builtin/grep.c:734
+#: sequencer.c:2736 builtin/grep.c:736
 #, c-format
 msgid "cannot open '%s'"
 msgstr "„%s“ не може да бъде отворен"
 
-#: sequencer.c:2800
+#: sequencer.c:2738
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "„%s“ не може да бъде прочетен: %s"
 
-#: sequencer.c:2801
+#: sequencer.c:2739
 msgid "unexpected end of file"
 msgstr "неочакван край на файл"
 
-#: sequencer.c:2807
+#: sequencer.c:2745
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr ""
 "запазеният преди започването на отбирането файл за указателя „HEAD“ — „%s“ е "
 "повреден"
 
-#: sequencer.c:2818
+#: sequencer.c:2756
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr ""
 "Изглежда указателят „HEAD“ е променен.  Проверете към какво сочи.\n"
 "Не се правят промени."
 
-#: sequencer.c:2859
+#: sequencer.c:2797
 msgid "no revert in progress"
 msgstr "в момента не тече пребазиране"
 
-#: sequencer.c:2867
+#: sequencer.c:2805
 msgid "no cherry-pick in progress"
 msgstr "в момента не се извършва отбиране на подавания"
 
-#: sequencer.c:2877
+#: sequencer.c:2815
 msgid "failed to skip the commit"
 msgstr "неуспешно прескачане на подаването"
 
-#: sequencer.c:2884
+#: sequencer.c:2822
 msgid "there is nothing to skip"
 msgstr "няма какво да се прескочи"
 
-#: sequencer.c:2887
+#: sequencer.c:2825
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -6587,21 +6613,21 @@
 "\n"
 "    git %s --continue"
 
-#: sequencer.c:3011 sequencer.c:4015
+#: sequencer.c:2949 sequencer.c:3969
 #, c-format
 msgid "could not update %s"
 msgstr "„%s“ не може да се обнови"
 
-#: sequencer.c:3049 sequencer.c:3995
+#: sequencer.c:2987 sequencer.c:3949
 msgid "cannot read HEAD"
 msgstr "указателят „HEAD“ не може да бъде прочетен"
 
-#: sequencer.c:3066
+#: sequencer.c:3004
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "„%s“ не може да се копира като „%s“"
 
-#: sequencer.c:3074
+#: sequencer.c:3012
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -6620,27 +6646,27 @@
 "\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:3084
+#: sequencer.c:3022
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "Подаването „%s“… не може да бъде приложено: „%.*s“"
 
-#: sequencer.c:3091
+#: sequencer.c:3029
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "Невъзможно сливане на „%.*s“"
 
-#: sequencer.c:3105 sequencer.c:3109 builtin/difftool.c:633
+#: sequencer.c:3043 sequencer.c:3047 builtin/difftool.c:641
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "„%s“ не може да се копира като „%s“"
 
-#: sequencer.c:3131 sequencer.c:3558 builtin/rebase.c:849 builtin/rebase.c:1582
-#: builtin/rebase.c:1953 builtin/rebase.c:2008
+#: sequencer.c:3069 sequencer.c:3506 builtin/rebase.c:850 builtin/rebase.c:1613
+#: builtin/rebase.c:1987 builtin/rebase.c:2031
 msgid "could not read index"
 msgstr "индексът не може да бъде прочетен"
 
-#: sequencer.c:3136
+#: sequencer.c:3074
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -6655,11 +6681,11 @@
 "    git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3142
+#: sequencer.c:3080
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "и променѝ индекса и/или работното дърво\n"
 
-#: sequencer.c:3148
+#: sequencer.c:3086
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -6676,76 +6702,76 @@
 "    git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3209
+#: sequencer.c:3147
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "неправилно име на етикет: „%.*s“"
 
-#: sequencer.c:3263
+#: sequencer.c:3201
 msgid "writing fake root commit"
 msgstr "запазване на фалшиво начално подаване"
 
-#: sequencer.c:3268
+#: sequencer.c:3206
 msgid "writing squash-onto"
 msgstr "запазване на подаването, в което другите да се вкарат"
 
-#: sequencer.c:3306 builtin/rebase.c:854 builtin/rebase.c:860
+#: sequencer.c:3244 builtin/rebase.c:855 builtin/rebase.c:861
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "дървото, сочено от „%s“, не може да бъде открито"
 
-#: sequencer.c:3324 builtin/rebase.c:873
+#: sequencer.c:3262 builtin/rebase.c:874
 msgid "could not write index"
 msgstr "индексът не може да бъде записан"
 
-#: sequencer.c:3351
+#: sequencer.c:3289
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "„%s“ не може да бъде открит"
 
-#: sequencer.c:3379
+#: sequencer.c:3320
 msgid "cannot merge without a current revision"
 msgstr "без текущо подаване не може да се слива"
 
-#: sequencer.c:3401
+#: sequencer.c:3342
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "„%.*s“ не може да се анализира"
 
-#: sequencer.c:3410
+#: sequencer.c:3351
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "няма нищо за сливане: „%.*s“"
 
-#: sequencer.c:3422
+#: sequencer.c:3363
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr "върху начално подаване не може да се извърши множествено сливане"
 
-#: sequencer.c:3437
+#: sequencer.c:3378
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "съобщението за подаване към „%s“ не може да бъде получено"
 
-#: sequencer.c:3590
+#: sequencer.c:3538
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "сливането на „%.*s“ не може даже да започне"
 
-#: sequencer.c:3606
+#: sequencer.c:3554
 msgid "merge: Unable to write new index file"
 msgstr "сливане: новият индекс не може да бъде запазен"
 
-#: sequencer.c:3675 builtin/rebase.c:711
+#: sequencer.c:3623 builtin/rebase.c:712
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Автоматично скатаното е приложено.\n"
 
-#: sequencer.c:3687
+#: sequencer.c:3635
 #, c-format
 msgid "cannot store %s"
 msgstr "„%s“ не може да бъде запазен"
 
-#: sequencer.c:3690 builtin/rebase.c:727 git-rebase--preserve-merges.sh:113
+#: sequencer.c:3638 builtin/rebase.c:728 git-rebase--preserve-merges.sh:113
 #, c-format
 msgid ""
 "Applying autostash resulted in conflicts.\n"
@@ -6756,31 +6782,31 @@
 "надеждно скатани.  Можете да пробвате да ги приложите чрез „git stash pop“\n"
 "или да ги изхвърлите чрез „git stash drop“, когато поискате.\n"
 
-#: sequencer.c:3751
+#: sequencer.c:3699
 #, c-format
 msgid "could not checkout %s"
 msgstr "„%s“ не може да се изтегли"
 
-#: sequencer.c:3765
+#: sequencer.c:3713
 #, c-format
 msgid "%s: not a valid OID"
 msgstr "„%s“ е неправилен идентификатор на обект"
 
-#: sequencer.c:3770 git-rebase--preserve-merges.sh:779
+#: sequencer.c:3718 git-rebase--preserve-merges.sh:779
 msgid "could not detach HEAD"
 msgstr "указателят „HEAD“ не може да се отдели"
 
-#: sequencer.c:3785
+#: sequencer.c:3733
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "Бе спряно при „HEAD“\n"
 
-#: sequencer.c:3787
+#: sequencer.c:3735
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Бе спряно при „%s“\n"
 
-#: sequencer.c:3795
+#: sequencer.c:3743
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -6803,48 +6829,48 @@
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:3877
+#: sequencer.c:3827
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Спиране при „%s“…  %.*s\n"
 
-#: sequencer.c:3958
+#: sequencer.c:3898
 #, c-format
 msgid "unknown command %d"
 msgstr "непозната команда %d"
 
-#: sequencer.c:4003
+#: sequencer.c:3957
 msgid "could not read orig-head"
 msgstr "указателят за „orig-head“ не може да се прочете"
 
-#: sequencer.c:4008
+#: sequencer.c:3962
 msgid "could not read 'onto'"
 msgstr "указателят за „onto“ не може да се прочете"
 
-#: sequencer.c:4022
+#: sequencer.c:3976
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "„HEAD“ не може да бъде обновен до „%s“"
 
-#: sequencer.c:4115
+#: sequencer.c:4069
 msgid "cannot rebase: You have unstaged changes."
 msgstr "не може да пребазирате, защото има промени, които не са в индекса."
 
-#: sequencer.c:4124
+#: sequencer.c:4078
 msgid "cannot amend non-existing commit"
 msgstr "несъществуващо подаване не може да се поправи"
 
-#: sequencer.c:4126
+#: sequencer.c:4080
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "неправилен файл: „%s“"
 
-#: sequencer.c:4128
+#: sequencer.c:4082
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "неправилно съдържание: „%s“"
 
-#: sequencer.c:4131
+#: sequencer.c:4085
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -6854,42 +6880,42 @@
 "В работното дърво има неподадени промени.  Първо ги подайте, а след това\n"
 "отново изпълнете „git rebase --continue“."
 
-#: sequencer.c:4167 sequencer.c:4205
+#: sequencer.c:4121 sequencer.c:4159
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "файлът „%s“ не може да бъде записан"
 
-#: sequencer.c:4220
+#: sequencer.c:4174
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "указателят „CHERRY_PICK_HEAD“ не може да бъде изтрит"
 
-#: sequencer.c:4227
+#: sequencer.c:4181
 msgid "could not commit staged changes."
 msgstr "промените в индекса не могат да бъдат подадени."
 
-#: sequencer.c:4328
+#: sequencer.c:4285
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: не може да се отбере „%s“"
 
-#: sequencer.c:4332
+#: sequencer.c:4289
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: неправилна версия"
 
-#: sequencer.c:4367
+#: sequencer.c:4324
 msgid "can't revert as initial commit"
 msgstr "първоначалното подаване не може да бъде отменено"
 
-#: sequencer.c:4810
+#: sequencer.c:4774
 msgid "make_script: unhandled options"
 msgstr "make_script: неподдържани опции"
 
-#: sequencer.c:4813
+#: sequencer.c:4777
 msgid "make_script: error preparing revisions"
 msgstr "make_script: грешка при подготовката на версии"
 
-#: sequencer.c:4971
+#: sequencer.c:4935
 msgid ""
 "You can fix this with 'git rebase --edit-todo' and then run 'git rebase --"
 "continue'.\n"
@@ -6899,24 +6925,24 @@
 "continue“ след това.\n"
 "Може и да преустановите пребазирането с командата „git rebase --abort“.\n"
 
-#: sequencer.c:5083 sequencer.c:5100
+#: sequencer.c:5047 sequencer.c:5064
 msgid "nothing to do"
 msgstr "няма какво да се прави"
 
-#: sequencer.c:5114
+#: sequencer.c:5078
 msgid "could not skip unnecessary pick commands"
 msgstr "излишните команди за отбиране не бяха прескочени"
 
-#: sequencer.c:5197
+#: sequencer.c:5166
 msgid "the script was already rearranged."
 msgstr "скриптът вече е преподреден."
 
-#: setup.c:123
+#: setup.c:124
 #, c-format
 msgid "'%s' is outside repository"
 msgstr "„%s“ е извън хранилището"
 
-#: setup.c:173
+#: setup.c:174
 #, c-format
 msgid ""
 "%s: no such path in the working tree.\n"
@@ -6927,7 +6953,7 @@
 "\n"
 "    git КОМАНДА -- ПЪТ…"
 
-#: setup.c:186
+#: setup.c:187
 #, c-format
 msgid ""
 "ambiguous argument '%s': unknown revision or path not in the working tree.\n"
@@ -6940,12 +6966,12 @@
 "\n"
 "    git КОМАНДА [ВЕРСИЯ…] -- [ФАЙЛ…]"
 
-#: setup.c:235
+#: setup.c:236
 #, c-format
 msgid "option '%s' must come before non-option arguments"
 msgstr "опцията „%s“ трябва да е преди първия аргумент, който не е опция"
 
-#: setup.c:254
+#: setup.c:255
 #, c-format
 msgid ""
 "ambiguous argument '%s': both revision and filename\n"
@@ -6957,95 +6983,95 @@
 "\n"
 "    git КОМАНДА [ВЕРСИЯ…] -- [ФАЙЛ…]"
 
-#: setup.c:390
+#: setup.c:391
 msgid "unable to set up work tree using invalid config"
 msgstr ""
 "не може да се зададе текуща работна директория при неправилни настройки"
 
-#: setup.c:394
+#: setup.c:395
 msgid "this operation must be run in a work tree"
 msgstr "тази команда трябва да се изпълни в работно дърво"
 
-#: setup.c:540
+#: setup.c:541
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
 msgstr "Очаква се версия на хранилището на git <= %d, а не %d"
 
-#: setup.c:548
+#: setup.c:549
 msgid "unknown repository extensions found:"
 msgstr "открити са непознати разширения в хранилището:"
 
-#: setup.c:567
+#: setup.c:568
 #, c-format
 msgid "error opening '%s'"
 msgstr "„%s“ не може да се отвори"
 
-#: setup.c:569
+#: setup.c:570
 #, c-format
 msgid "too large to be a .git file: '%s'"
 msgstr "прекалено голям файл „.git“: „%s“"
 
-#: setup.c:571
+#: setup.c:572
 #, c-format
 msgid "error reading %s"
 msgstr "грешка при прочитане на „%s“"
 
-#: setup.c:573
+#: setup.c:574
 #, c-format
 msgid "invalid gitfile format: %s"
 msgstr "неправилен формат на gitfile: %s"
 
-#: setup.c:575
+#: setup.c:576
 #, c-format
 msgid "no path in gitfile: %s"
 msgstr "липсва път в gitfile: „%s“"
 
-#: setup.c:577
+#: setup.c:578
 #, c-format
 msgid "not a git repository: %s"
 msgstr "не е хранилище на Git: %s"
 
-#: setup.c:676
+#: setup.c:677
 #, c-format
 msgid "'$%s' too big"
 msgstr "„%s“ е прекалено голям"
 
-#: setup.c:690
+#: setup.c:691
 #, c-format
 msgid "not a git repository: '%s'"
 msgstr "не е хранилище на git: „%s“"
 
-#: setup.c:719 setup.c:721 setup.c:752
+#: setup.c:720 setup.c:722 setup.c:753
 #, c-format
 msgid "cannot chdir to '%s'"
 msgstr "не може да се влезе в директорията „%s“"
 
-#: setup.c:724 setup.c:780 setup.c:790 setup.c:829 setup.c:837
+#: setup.c:725 setup.c:781 setup.c:791 setup.c:830 setup.c:838
 msgid "cannot come back to cwd"
 msgstr "процесът не може да се върне към предишната работна директория"
 
-#: setup.c:851
+#: setup.c:852
 #, c-format
 msgid "failed to stat '%*s%s%s'"
 msgstr "не може да бъде получена информация чрез „stat“ за „%*s%s%s“"
 
-#: setup.c:1083
+#: setup.c:1090
 msgid "Unable to read current working directory"
 msgstr "Текущата работна директория не може да бъде прочетена"
 
-#: setup.c:1092 setup.c:1098
+#: setup.c:1099 setup.c:1105
 #, c-format
 msgid "cannot change to '%s'"
 msgstr "не може да се влезе в директорията „%s“"
 
-#: setup.c:1103
+#: setup.c:1110
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
 msgstr ""
 "нито тази, нито която и да е от по-горните директории, не е хранилище на "
 "git: %s"
 
-#: setup.c:1109
+#: setup.c:1116
 #, c-format
 msgid ""
 "not a git repository (or any parent up to mount point %s)\n"
@@ -7056,7 +7082,7 @@
 "Git работи в рамките на една файлова система, защото променливата на средата "
 "„GIT_DISCOVERY_ACROSS_FILESYSTEM“ не е зададена."
 
-#: setup.c:1220
+#: setup.c:1227
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -7066,291 +7092,291 @@
 "(0%.3o).\n"
 "Собственикът на файла трябва да има права за писане и четене."
 
-#: setup.c:1264
+#: setup.c:1271
 msgid "open /dev/null or dup failed"
 msgstr "неуспешно изпълнение на „open“ или „dup“ върху „/dev/null“"
 
-#: setup.c:1279
+#: setup.c:1286
 msgid "fork failed"
 msgstr "неуспешно създаване на процес чрез „fork“"
 
-#: setup.c:1284
+#: setup.c:1291
 msgid "setsid failed"
 msgstr "неуспешно изпълнение на „setsid“"
 
-#: sha1-file.c:453
+#: sha1-file.c:452
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr ""
 "директорията за обекти „%s“ не съществува, проверете „.git/objects/info/"
 "alternates“"
 
-#: sha1-file.c:504
+#: sha1-file.c:503
 #, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr "алтернативният път към обекти не може да бъде нормализиран: „%s“"
 
-#: sha1-file.c:576
+#: sha1-file.c:575
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr ""
 "%s: алтернативните хранилища за обекти се пренебрегват поради прекалено "
 "дълбоко влагане"
 
-#: sha1-file.c:583
+#: sha1-file.c:582
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr "директорията за обекти „%s“ не може да бъде нормализирана"
 
-#: sha1-file.c:626
+#: sha1-file.c:625
 msgid "unable to fdopen alternates lockfile"
 msgstr "заключващият файл за алтернативите не може да се отвори с „fdopen“"
 
-#: sha1-file.c:644
+#: sha1-file.c:643
 msgid "unable to read alternates file"
 msgstr "файлът с алтернативите не може да бъде прочетен"
 
-#: sha1-file.c:651
+#: sha1-file.c:650
 msgid "unable to move new alternates file into place"
 msgstr "новият файл с алтернативите не може да бъде преместен на мястото му"
 
-#: sha1-file.c:686
+#: sha1-file.c:685
 #, c-format
 msgid "path '%s' does not exist"
 msgstr "пътят „%s“ не съществува."
 
-#: sha1-file.c:712
+#: sha1-file.c:711
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr "все още не се поддържа еталонно хранилище „%s“ като свързано."
 
-#: sha1-file.c:718
+#: sha1-file.c:717
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "еталонното хранилище „%s“ не е локално"
 
-#: sha1-file.c:724
+#: sha1-file.c:723
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr "еталонното хранилище „%s“ е плитко"
 
-#: sha1-file.c:732
+#: sha1-file.c:731
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr "еталонното хранилище „%s“ е с присаждане"
 
-#: sha1-file.c:792
+#: sha1-file.c:791
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr "неправилен ред при анализа на алтернативните указатели: „%s“"
 
-#: sha1-file.c:944
+#: sha1-file.c:943
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr ""
 "неуспешен опит за „mmap“ %<PRIuMAX>, което е над позволеното %<PRIuMAX>"
 
-#: sha1-file.c:969
+#: sha1-file.c:964
 msgid "mmap failed"
 msgstr "неуспешно изпълнение на „mmap“"
 
-#: sha1-file.c:1133
+#: sha1-file.c:1128
 #, c-format
 msgid "object file %s is empty"
 msgstr "файлът с обектите „%s“ е празен"
 
-#: sha1-file.c:1257 sha1-file.c:2396
+#: sha1-file.c:1252 sha1-file.c:2392
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr "непакетираният обект „%s“ е повреден"
 
-#: sha1-file.c:1259 sha1-file.c:2400
+#: sha1-file.c:1254 sha1-file.c:2396
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr "грешни данни в края на непакетирания обект „%s“"
 
-#: sha1-file.c:1301
+#: sha1-file.c:1296
 msgid "invalid object type"
 msgstr "неправилен вид обект"
 
-#: sha1-file.c:1385
+#: sha1-file.c:1380
 #, c-format
 msgid "unable to unpack %s header with --allow-unknown-type"
 msgstr ""
 "заглавната част „%s“ не може да се разпакетира с опцията „--allow-unknown-"
 "type“"
 
-#: sha1-file.c:1388
+#: sha1-file.c:1383
 #, c-format
 msgid "unable to unpack %s header"
 msgstr "заглавната част на „%s“ не може да бъде разпакетирана"
 
-#: sha1-file.c:1394
+#: sha1-file.c:1389
 #, c-format
 msgid "unable to parse %s header with --allow-unknown-type"
 msgstr ""
 "заглавната част „%s“ не може да се анализира с опцията „--allow-unknown-type“"
 
-#: sha1-file.c:1397
+#: sha1-file.c:1392
 #, c-format
 msgid "unable to parse %s header"
 msgstr "заглавната част на „%s“ не може да бъде анализирана"
 
-#: sha1-file.c:1588
+#: sha1-file.c:1584
 #, c-format
 msgid "failed to read object %s"
 msgstr "обектът „%s“ не може да бъде прочетен"
 
-#: sha1-file.c:1592
+#: sha1-file.c:1588
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr "заместителят „%s“ на „%s“ не може да бъде открит"
 
-#: sha1-file.c:1596
+#: sha1-file.c:1592
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr "непакетираният обект „%s“ (в „%s“) е повреден"
 
-#: sha1-file.c:1600
+#: sha1-file.c:1596
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr "пакетираният обект „%s“ (в „%s“) е повреден"
 
-#: sha1-file.c:1703
+#: sha1-file.c:1699
 #, c-format
 msgid "unable to write file %s"
 msgstr "файлът „%s“ не може да бъде записан"
 
-#: sha1-file.c:1710
+#: sha1-file.c:1706
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr "правата за достъп до „%s“ не могат да бъдат зададени"
 
-#: sha1-file.c:1717
+#: sha1-file.c:1713
 msgid "file write error"
 msgstr "грешка при запис на файл"
 
-#: sha1-file.c:1736
+#: sha1-file.c:1732
 msgid "error when closing loose object file"
 msgstr "грешка при затварянето на файла с непакетиран обект"
 
-#: sha1-file.c:1801
+#: sha1-file.c:1797
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr ""
 "няма права за добавяне на обект към базата от данни на хранилището „%s“"
 
-#: sha1-file.c:1803
+#: sha1-file.c:1799
 msgid "unable to create temporary file"
 msgstr "не може да бъде създаден временен файл"
 
-#: sha1-file.c:1827
+#: sha1-file.c:1823
 msgid "unable to write loose object file"
 msgstr "грешка при записа на файла с непакетиран обект"
 
-#: sha1-file.c:1833
+#: sha1-file.c:1829
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr "новият обект „%s“ не може да се компресира с „deflate“: %d"
 
-#: sha1-file.c:1837
+#: sha1-file.c:1833
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr "неуспешно приключване на „deflate“ върху „%s“: %d"
 
-#: sha1-file.c:1841
+#: sha1-file.c:1837
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr "грешка поради нестабилния източник данни за обектите „%s“"
 
-#: sha1-file.c:1851 builtin/pack-objects.c:925
+#: sha1-file.c:1847 builtin/pack-objects.c:925
 #, c-format
 msgid "failed utime() on %s"
 msgstr "неуспешно задаване на време на достъп/създаване чрез „utime“ на „%s“"
 
-#: sha1-file.c:1926
+#: sha1-file.c:1922
 #, c-format
 msgid "cannot read object for %s"
 msgstr "обектът за „%s“ не може да се прочете"
 
-#: sha1-file.c:1966
+#: sha1-file.c:1962
 msgid "corrupt commit"
 msgstr "повредено подаване"
 
-#: sha1-file.c:1974
+#: sha1-file.c:1970
 msgid "corrupt tag"
 msgstr "повреден етикет"
 
-#: sha1-file.c:2073
+#: sha1-file.c:2069
 #, c-format
 msgid "read error while indexing %s"
 msgstr "грешка при четене по време на индексиране на „%s“"
 
-#: sha1-file.c:2076
+#: sha1-file.c:2072
 #, c-format
 msgid "short read while indexing %s"
 msgstr "непълно прочитане по време на индексиране на „%s“"
 
-#: sha1-file.c:2149 sha1-file.c:2158
+#: sha1-file.c:2145 sha1-file.c:2154
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr "„%s“ не може да се вмъкне в базата от данни"
 
-#: sha1-file.c:2164
+#: sha1-file.c:2160
 #, c-format
 msgid "%s: unsupported file type"
 msgstr "неподдържан вид файл: „%s“"
 
-#: sha1-file.c:2188
+#: sha1-file.c:2184
 #, c-format
 msgid "%s is not a valid object"
 msgstr "„%s“ е неправилен обект"
 
-#: sha1-file.c:2190
+#: sha1-file.c:2186
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr "„%s“ е неправилен обект от вид „%s“"
 
-#: sha1-file.c:2217 builtin/index-pack.c:155
+#: sha1-file.c:2213 builtin/index-pack.c:155
 #, c-format
 msgid "unable to open %s"
 msgstr "обектът „%s“ не може да бъде отворен"
 
-#: sha1-file.c:2407 sha1-file.c:2459
+#: sha1-file.c:2403 sha1-file.c:2455
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr "неправилна контролна сума за „%s“ (трябва да е %s)"
 
-#: sha1-file.c:2431
+#: sha1-file.c:2427
 #, c-format
 msgid "unable to mmap %s"
 msgstr "неуспешно изпълнение на „mmap“ върху „%s“"
 
-#: sha1-file.c:2436
+#: sha1-file.c:2432
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr "заглавната част на „%s“ не може да бъде разпакетирана"
 
-#: sha1-file.c:2442
+#: sha1-file.c:2438
 #, c-format
 msgid "unable to parse header of %s"
 msgstr "заглавната част на „%s“ не може да бъде анализирана"
 
-#: sha1-file.c:2453
+#: sha1-file.c:2449
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr "съдържанието на „%s“ не може да бъде разпакетирано"
 
-#: sha1-name.c:490
+#: sha1-name.c:487
 #, c-format
 msgid "short SHA1 %s is ambiguous"
 msgstr "късият SHA1 „%s“ не е еднозначен"
 
-#: sha1-name.c:501
+#: sha1-name.c:498
 msgid "The candidates are:"
 msgstr "Възможностите са:"
 
-#: sha1-name.c:800
+#: sha1-name.c:797
 msgid ""
 "Git normally never creates a ref that ends with 40 hex characters\n"
 "because it will be ignored when you just specify 40-hex. These refs\n"
@@ -7376,43 +7402,43 @@
 "    git config advice.objectNameWarning false"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:821
+#: strbuf.c:822
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:823
+#: strbuf.c:824
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u GiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:831
+#: strbuf.c:832
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:833
+#: strbuf.c:834
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u MiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:840
+#: strbuf.c:841
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:842
+#: strbuf.c:843
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u KiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:848
+#: strbuf.c:849
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -7420,7 +7446,7 @@
 msgstr[1] "%u байта"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:850
+#: strbuf.c:851
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
@@ -7539,28 +7565,28 @@
 msgid "ls-tree returned unexpected return code %d"
 msgstr "„ls-tree“ завърши с неочакван изходен код: %d"
 
-#: submodule-config.c:232
+#: submodule-config.c:236
 #, c-format
 msgid "ignoring suspicious submodule name: %s"
 msgstr "игнориране на подозрително име на подмодул: „%s“"
 
-#: submodule-config.c:299
+#: submodule-config.c:303
 msgid "negative values not allowed for submodule.fetchjobs"
 msgstr "настройката „submodule.fetchjobs“ не приема отрицателни стойности"
 
-#: submodule-config.c:397
+#: submodule-config.c:401
 #, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
 msgstr ""
 "„%s“ се прескача, защото е възможно да се тълкува като опция за командния "
 "ред: %s"
 
-#: submodule-config.c:486
+#: submodule-config.c:490
 #, c-format
 msgid "invalid value for %s"
 msgstr "Неправилна стойност за „%s“"
 
-#: submodule-config.c:755
+#: submodule-config.c:761
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr "Записът „%s“ във файла „.gitmodules“ не може да бъде променен"
@@ -7595,7 +7621,7 @@
 msgid "could not read from stdin"
 msgstr "от стандартния вход не може да се чете"
 
-#: trailer.c:1011 wrapper.c:701
+#: trailer.c:1011 wrapper.c:665
 #, c-format
 msgid "could not stat %s"
 msgstr "Не може да се получи информация чрез „stat“ за „%s“"
@@ -7624,48 +7650,48 @@
 msgid "Would set upstream of '%s' to '%s' of '%s'\n"
 msgstr "Клонът „%s“ ще следи „%s“ от „%s“\n"
 
-#: transport.c:142
+#: transport.c:145
 #, c-format
 msgid "could not read bundle '%s'"
 msgstr "пратката на git „%s“ не може да бъде прочетена"
 
-#: transport.c:208
+#: transport.c:214
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr "transport: неправилна опция за дълбочина: %s"
 
-#: transport.c:259
+#: transport.c:266
 msgid "see protocol.version in 'git help config' for more details"
 msgstr ""
 "За повече информация вижте раздела „protocol.version“ в „git help config“"
 
-#: transport.c:260
+#: transport.c:267
 msgid "server options require protocol version 2 or later"
 msgstr "опциите на сървъра изискват поне версия 2 на протокола"
 
-#: transport.c:625
+#: transport.c:632
 msgid "could not parse transport.color.* config"
 msgstr "стойността на настройката „transport.color.*“ не може да се разпознае"
 
-#: transport.c:698
+#: transport.c:705
 msgid "support for protocol v2 not implemented yet"
 msgstr "протокол версия 2 все още не се поддържа"
 
-#: transport.c:825
+#: transport.c:831
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "непозната стойност за настройката „%s“: „%s“"
 
-#: transport.c:891
+#: transport.c:897
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "преносът по „%s“ не е позволен"
 
-#: transport.c:945
+#: transport.c:949
 msgid "git-over-rsync is no longer supported"
 msgstr "командата „git-over-rsync“ вече не се поддържа"
 
-#: transport.c:1040
+#: transport.c:1044
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -7674,7 +7700,7 @@
 "Следните пътища за подмодули съдържат промени,\n"
 "които липсват от всички отдалечени хранилища:\n"
 
-#: transport.c:1044
+#: transport.c:1048
 #, c-format
 msgid ""
 "\n"
@@ -7699,34 +7725,34 @@
 "    git push\n"
 "\n"
 
-#: transport.c:1052
+#: transport.c:1056
 msgid "Aborting."
 msgstr "Преустановяване на действието."
 
-#: transport.c:1193
+#: transport.c:1201
 msgid "failed to push all needed submodules"
 msgstr "неуспешно изтласкване на всички необходими подмодули"
 
-#: transport.c:1340 transport-helper.c:645
+#: transport.c:1345 transport-helper.c:655
 msgid "operation not supported by protocol"
 msgstr "опцията не се поддържа от протокола"
 
-#: transport-helper.c:51 transport-helper.c:80
+#: transport-helper.c:61 transport-helper.c:90
 msgid "full write to remote helper failed"
 msgstr "неуспешен пълен запис към насрещната помощна програма"
 
-#: transport-helper.c:134
+#: transport-helper.c:144
 #, c-format
 msgid "unable to find remote helper for '%s'"
 msgstr "насрещната помощна програма за „%s“ не може да бъде открита"
 
-#: transport-helper.c:150 transport-helper.c:559
+#: transport-helper.c:160 transport-helper.c:569
 msgid "can't dup helper output fd"
 msgstr ""
 "файловият дескриптор от насрещната помощна програма не може да се дублира с "
 "„dup“"
 
-#: transport-helper.c:201
+#: transport-helper.c:211
 #, c-format
 msgid ""
 "unknown mandatory capability %s; this remote helper probably needs newer "
@@ -7735,106 +7761,111 @@
 "непозната задължителна способност „%s“.  Насрещната помощна програма "
 "вероятно изисква нова версия на Git"
 
-#: transport-helper.c:207
+#: transport-helper.c:217
 msgid "this remote helper should implement refspec capability"
 msgstr ""
 "насрещната помощна програма трябва да поддържа способност за изброяване на "
 "указатели"
 
-#: transport-helper.c:274 transport-helper.c:414
+#: transport-helper.c:284 transport-helper.c:424
 #, c-format
 msgid "%s unexpectedly said: '%s'"
 msgstr "„%s“ неочаквано върна: „%s“"
 
-#: transport-helper.c:403
+#: transport-helper.c:413
 #, c-format
 msgid "%s also locked %s"
 msgstr "„%s“ заключи и „%s“"
 
-#: transport-helper.c:481
+#: transport-helper.c:491
 msgid "couldn't run fast-import"
 msgstr "неуспешно изпълнение на бързо внасяне"
 
-#: transport-helper.c:504
+#: transport-helper.c:514
 msgid "error while running fast-import"
 msgstr "грешка при изпълнението на бързо внасяне"
 
-#: transport-helper.c:533 transport-helper.c:1105
+#: transport-helper.c:543 transport-helper.c:1132
 #, c-format
 msgid "could not read ref %s"
 msgstr "указателят „%s“ не може да се прочете"
 
-#: transport-helper.c:578
+#: transport-helper.c:588
 #, c-format
 msgid "unknown response to connect: %s"
 msgstr "неочакван отговор при свързване: „%s“"
 
-#: transport-helper.c:600
+#: transport-helper.c:610
 msgid "setting remote service path not supported by protocol"
 msgstr "протоколът не поддържа задаването на път на отдалечената услуга"
 
-#: transport-helper.c:602
+#: transport-helper.c:612
 msgid "invalid remote service path"
 msgstr "неправилен път на отдалечената услуга"
 
-#: transport-helper.c:648
+#: transport-helper.c:658
 #, c-format
 msgid "can't connect to subservice %s"
 msgstr "неуспешно свързване към подуслугата „%s“"
 
-#: transport-helper.c:720
+#: transport-helper.c:734
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr ""
 "очаква се или успех, или грешка, но насрещната помощна програма върна „%s“"
 
-#: transport-helper.c:773
+#: transport-helper.c:787
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "насрещната помощна програма завърши с неочакван изходен код: „%s“"
 
-#: transport-helper.c:834
+#: transport-helper.c:848
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "насрещната помощна програма „%s“ не поддържа проби „dry-run“"
 
-#: transport-helper.c:837
+#: transport-helper.c:851
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "насрещната помощна програма „%s“ не поддържа опцията „--signed“"
 
-#: transport-helper.c:840
+#: transport-helper.c:854
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr ""
 "насрещната помощна програма „%s“ не поддържа опцията „--signed=if-asked“"
 
-#: transport-helper.c:847
+#: transport-helper.c:859
+#, c-format
+msgid "helper %s does not support --atomic"
+msgstr "насрещната помощна програма „%s“ не поддържа опцията „--atomic“"
+
+#: transport-helper.c:865
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "насрещната помощна програма „%s“ не поддържа опции за изтласкване"
 
-#: transport-helper.c:945
+#: transport-helper.c:963
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr ""
 "насрещната помощна програма не поддържа изтласкване.  Необходимо е "
 "изброяване на указателите"
 
-#: transport-helper.c:950
+#: transport-helper.c:968
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr ""
 "насрещната помощна програма не поддържа „%s“ поддържа опцията „--force“"
 
-#: transport-helper.c:997
+#: transport-helper.c:1015
 msgid "couldn't run fast-export"
 msgstr "не може да се извърши бързо изнасяне"
 
-#: transport-helper.c:1002
+#: transport-helper.c:1020
 msgid "error while running fast-export"
 msgstr "грешка при изпълнението на командата за бързо изнасяне"
 
-#: transport-helper.c:1027
+#: transport-helper.c:1045
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -7843,47 +7874,47 @@
 "Няма общи указатели, не са указани никакви указатели — нищо няма да бъде\n"
 "направено.  Пробвайте да укажете клон, напр. “master“.\n"
 
-#: transport-helper.c:1091
+#: transport-helper.c:1118
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "неправилен отговор в списъка с указатели: „%s“"
 
-#: transport-helper.c:1244
+#: transport-helper.c:1270
 #, c-format
 msgid "read(%s) failed"
 msgstr "неуспешно четене на „%s“"
 
-#: transport-helper.c:1271
+#: transport-helper.c:1297
 #, c-format
 msgid "write(%s) failed"
 msgstr "неуспешен запис в „%s“"
 
-#: transport-helper.c:1320
+#: transport-helper.c:1346
 #, c-format
 msgid "%s thread failed"
 msgstr "неуспешно изпълнение на нишката „%s“"
 
-#: transport-helper.c:1324
+#: transport-helper.c:1350
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "завършването на нишката „%s“ не може да се изчака: „%s“"
 
-#: transport-helper.c:1343 transport-helper.c:1347
+#: transport-helper.c:1369 transport-helper.c:1373
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "неуспешно стартиране на нишка за копиране на данните: „%s“"
 
-#: transport-helper.c:1384
+#: transport-helper.c:1410
 #, c-format
 msgid "%s process failed to wait"
 msgstr "процесът на „%s“ не успя да изчака чрез „waitpid“"
 
-#: transport-helper.c:1388
+#: transport-helper.c:1414
 #, c-format
 msgid "%s process failed"
 msgstr "неуспешно изпълнение на „%s“"
 
-#: transport-helper.c:1406 transport-helper.c:1415
+#: transport-helper.c:1432 transport-helper.c:1441
 msgid "can't start thread for copying data"
 msgstr "неуспешно стартиране на нишка за копиране на данните"
 
@@ -7903,7 +7934,7 @@
 msgid "too-short tree file"
 msgstr "прекалено кратък файл-дърво"
 
-#: unpack-trees.c:111
+#: unpack-trees.c:110
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -7912,7 +7943,7 @@
 "Изтеглянето ще презапише локалните промени на тези файлове:\n"
 "%%sПодайте или скатайте промените, за да преминете към нов клон."
 
-#: unpack-trees.c:113
+#: unpack-trees.c:112
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -7921,7 +7952,7 @@
 "Изтеглянето ще презапише локалните промени на тези файлове:\n"
 "%%s"
 
-#: unpack-trees.c:116
+#: unpack-trees.c:115
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -7930,7 +7961,7 @@
 "Сливането ще презапише локалните промени на тези файлове:\n"
 "%%sПодайте или скатайте промените, за да слеете."
 
-#: unpack-trees.c:118
+#: unpack-trees.c:117
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -7939,7 +7970,7 @@
 "Сливането ще презапише локалните промени на тези файлове:\n"
 "%%s"
 
-#: unpack-trees.c:121
+#: unpack-trees.c:120
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -7948,7 +7979,7 @@
 "„%s“ ще презапише локалните промени на тези файлове:\n"
 "%%sПодайте или скатайте промените, за да извършите „%s“."
 
-#: unpack-trees.c:123
+#: unpack-trees.c:122
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -7957,7 +7988,7 @@
 "„%s“ ще презапише локалните промени на тези файлове:\n"
 "%%s"
 
-#: unpack-trees.c:128
+#: unpack-trees.c:127
 #, c-format
 msgid ""
 "Updating the following directories would lose untracked files in them:\n"
@@ -7966,7 +7997,7 @@
 "Обновяването на следните директории ще изтрие неследените файлове в тях:\n"
 "%s"
 
-#: unpack-trees.c:132
+#: unpack-trees.c:131
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -7975,7 +8006,7 @@
 "Изтеглянето ще изтрие тези неследени файлове в работното дърво:\n"
 "%%sПреместете ги или ги изтрийте, за да преминете на друг клон."
 
-#: unpack-trees.c:134
+#: unpack-trees.c:133
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -7984,7 +8015,7 @@
 "Изтеглянето ще изтрие тези неследени файлове в работното дърво:\n"
 "%%s"
 
-#: unpack-trees.c:137
+#: unpack-trees.c:136
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -7993,7 +8024,7 @@
 "Сливането ще изтрие тези неследени файлове в работното дърво:\n"
 "%%sПреместете ги или ги изтрийте, за да слеете."
 
-#: unpack-trees.c:139
+#: unpack-trees.c:138
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -8002,7 +8033,7 @@
 "Сливането ще изтрие тези неследени файлове в работното дърво:\n"
 "%%s"
 
-#: unpack-trees.c:142
+#: unpack-trees.c:141
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -8011,7 +8042,7 @@
 "„%s“ ще изтрие тези неследени файлове в работното дърво:\n"
 "%%sПреместете ги или ги изтрийте, за да извършите „%s“."
 
-#: unpack-trees.c:144
+#: unpack-trees.c:143
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -8020,7 +8051,7 @@
 "„%s“ ще изтрие тези неследени файлове в работното дърво:\n"
 "%%s"
 
-#: unpack-trees.c:150
+#: unpack-trees.c:149
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -8030,7 +8061,7 @@
 "Изтеглянето ще презапише тези неследени файлове в работното дърво:\n"
 "%%sПреместете ги или ги изтрийте, за да смените клон."
 
-#: unpack-trees.c:152
+#: unpack-trees.c:151
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -8040,7 +8071,7 @@
 "Изтеглянето ще презапише тези неследени файлове в работното дърво:\n"
 "%%s"
 
-#: unpack-trees.c:155
+#: unpack-trees.c:154
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -8049,7 +8080,7 @@
 "Сливането ще презапише тези неследени файлове в работното дърво:\n"
 "%%sПреместете ги или ги изтрийте, за да слеете."
 
-#: unpack-trees.c:157
+#: unpack-trees.c:156
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -8058,7 +8089,7 @@
 "Сливането ще презапише тези неследени файлове в работното дърво:\n"
 "%%s"
 
-#: unpack-trees.c:160
+#: unpack-trees.c:159
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -8067,7 +8098,7 @@
 "„%s“ ще презапише тези неследени файлове в работното дърво:\n"
 "%%sПреместете ги или ги изтрийте, за да извършите „%s“."
 
-#: unpack-trees.c:162
+#: unpack-trees.c:161
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -8076,12 +8107,12 @@
 "„%s“ ще презапише тези неследени файлове в работното дърво:\n"
 "%%s"
 
-#: unpack-trees.c:170
+#: unpack-trees.c:169
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
 msgstr "Записът за „%s“ съвпада с този за „%s“.  Не може да се присвои."
 
-#: unpack-trees.c:173
+#: unpack-trees.c:172
 #, c-format
 msgid ""
 "Cannot update sparse checkout: the following entries are not up to date:\n"
@@ -8091,7 +8122,7 @@
 "актуални:\n"
 "%s"
 
-#: unpack-trees.c:175
+#: unpack-trees.c:174
 #, c-format
 msgid ""
 "The following working tree files would be overwritten by sparse checkout "
@@ -8102,7 +8133,7 @@
 "дърво:\n"
 "%s"
 
-#: unpack-trees.c:177
+#: unpack-trees.c:176
 #, c-format
 msgid ""
 "The following working tree files would be removed by sparse checkout "
@@ -8113,7 +8144,7 @@
 "дърво:\n"
 "%s"
 
-#: unpack-trees.c:179
+#: unpack-trees.c:178
 #, c-format
 msgid ""
 "Cannot update submodule:\n"
@@ -8122,16 +8153,16 @@
 "Подмодулът не може да бъде обновен:\n"
 "„%s“"
 
-#: unpack-trees.c:256
+#: unpack-trees.c:255
 #, c-format
 msgid "Aborting\n"
 msgstr "Преустановяване на действието\n"
 
-#: unpack-trees.c:318
+#: unpack-trees.c:317
 msgid "Updating files"
 msgstr "Обновяване на файлове"
 
-#: unpack-trees.c:350
+#: unpack-trees.c:349
 msgid ""
 "the following paths have collided (e.g. case-sensitive paths\n"
 "on a case-insensitive filesystem) and only one from the same\n"
@@ -8170,7 +8201,7 @@
 msgid "invalid '..' path segment"
 msgstr "неправилна част от пътя „..“"
 
-#: worktree.c:258 builtin/am.c:2095
+#: worktree.c:258 builtin/am.c:2084
 #, c-format
 msgid "failed to read '%s'"
 msgstr "„%s“ не може да бъде прочетен"
@@ -8201,17 +8232,17 @@
 msgid "'%s' does not point back to '%s'"
 msgstr "„%s“ не сочи към обратно към „%s“"
 
-#: wrapper.c:223 wrapper.c:393
+#: wrapper.c:186 wrapper.c:356
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr "„%s“ не може да бъде отворен и за четене, и за запис"
 
-#: wrapper.c:424 wrapper.c:624
+#: wrapper.c:387 wrapper.c:588
 #, c-format
 msgid "unable to access '%s'"
 msgstr "няма достъп до „%s“"
 
-#: wrapper.c:632
+#: wrapper.c:596
 msgid "unable to get current working directory"
 msgstr "текущата работна директория е недостъпна"
 
@@ -8558,86 +8589,94 @@
 "  (всички конфликти са коригирани, изпълнете „git cherry-pick --continue“)"
 
 #: wt-status.c:1437
+msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
+msgstr "  (използвайте „git cherry-pick --skip“, за да пропуснете тази кръпка)"
+
+#: wt-status.c:1439
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr ""
 "  (използвайте „git cherry-pick --abort“, за да отмените всички действия с "
 "отбиране)"
 
-#: wt-status.c:1447
+#: wt-status.c:1449
 msgid "Revert currently in progress."
 msgstr "В момента тече отмяна на подаване."
 
-#: wt-status.c:1450
+#: wt-status.c:1452
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "В момента отменяте подаване „%s“."
 
-#: wt-status.c:1456
+#: wt-status.c:1458
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (коригирайте конфликтите и изпълнете „git revert --continue“)"
 
-#: wt-status.c:1459
+#: wt-status.c:1461
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (за да продължите, изпълнете „git revert --continue“)"
 
-#: wt-status.c:1462
+#: wt-status.c:1464
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (всички конфликти са коригирани, изпълнете „git revert --continue“)"
 
-#: wt-status.c:1464
+#: wt-status.c:1466
+msgid "  (use \"git revert --skip\" to skip this patch)"
+msgstr "  (използвайте „git revert --skip“, за да пропуснете тази кръпка)"
+
+#: wt-status.c:1468
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr ""
 "  (използвайте „git revert --abort“, за да преустановите отмяната на "
 "подаване)"
 
-#: wt-status.c:1474
+#: wt-status.c:1478
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "В момента търсите двоично, като сте стартирали от клон „%s“."
 
-#: wt-status.c:1478
+#: wt-status.c:1482
 msgid "You are currently bisecting."
 msgstr "В момента търсите двоично."
 
-#: wt-status.c:1481
+#: wt-status.c:1485
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr ""
 "  (използвайте „git bisect reset“, за да се върнете към първоначалното "
 "състояние и клон)"
 
-#: wt-status.c:1690
+#: wt-status.c:1694
 msgid "On branch "
 msgstr "На клон "
 
-#: wt-status.c:1697
+#: wt-status.c:1701
 msgid "interactive rebase in progress; onto "
 msgstr "извършвате интерактивно пребазиране върху "
 
-#: wt-status.c:1699
+#: wt-status.c:1703
 msgid "rebase in progress; onto "
 msgstr "извършвате пребазиране върху "
 
-#: wt-status.c:1709
+#: wt-status.c:1713
 msgid "Not currently on any branch."
 msgstr "Извън всички клони."
 
-#: wt-status.c:1726
+#: wt-status.c:1730
 msgid "Initial commit"
 msgstr "Първоначално подаване"
 
-#: wt-status.c:1727
+#: wt-status.c:1731
 msgid "No commits yet"
 msgstr "Все още липсват подавания"
 
-#: wt-status.c:1741
+#: wt-status.c:1745
 msgid "Untracked files"
 msgstr "Неследени файлове"
 
-#: wt-status.c:1743
+#: wt-status.c:1747
 msgid "Ignored files"
 msgstr "Игнорирани файлове"
 
-#: wt-status.c:1747
+#: wt-status.c:1751
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -8649,32 +8688,32 @@
 "изпълнението, но ще трябва да добавяте новите файлове ръчно.\n"
 "За повече подробности погледнете „git status help“."
 
-#: wt-status.c:1753
+#: wt-status.c:1757
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Неследените файлове не са изведени%s"
 
-#: wt-status.c:1755
+#: wt-status.c:1759
 msgid " (use -u option to show untracked files)"
 msgstr " (използвайте опцията „-u“, за да изведете неследените файлове)"
 
-#: wt-status.c:1761
+#: wt-status.c:1765
 msgid "No changes"
 msgstr "Няма промени"
 
-#: wt-status.c:1766
+#: wt-status.c:1770
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 "към индекса за подаване не са добавени промени (използвайте „git add“ и/или "
 "„git commit -a“)\n"
 
-#: wt-status.c:1769
+#: wt-status.c:1773
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "към индекса за подаване не са добавени промени\n"
 
-#: wt-status.c:1772
+#: wt-status.c:1776
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -8683,71 +8722,71 @@
 "към индекса за подаване не са добавени промени, но има нови файлове "
 "(използвайте „git add“, за да започне тяхното следене)\n"
 
-#: wt-status.c:1775
+#: wt-status.c:1779
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr "към индекса за подаване не са добавени промени, но има нови файлове\n"
 
-#: wt-status.c:1778
+#: wt-status.c:1782
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr ""
 "липсват каквито и да е промени (създайте или копирайте файлове и използвайте "
 "„git add“, за да започне тяхното следене)\n"
 
-#: wt-status.c:1781 wt-status.c:1786
+#: wt-status.c:1785 wt-status.c:1790
 #, c-format
 msgid "nothing to commit\n"
 msgstr "липсват каквито и да е промени\n"
 
-#: wt-status.c:1784
+#: wt-status.c:1788
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr ""
 "липсват каквито и да е промени (използвайте опцията „-u“, за да се изведат и "
 "неследените файлове)\n"
 
-#: wt-status.c:1788
+#: wt-status.c:1792
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "липсват каквито и да е промени, работното дърво е чисто\n"
 
-#: wt-status.c:1901
+#: wt-status.c:1905
 msgid "No commits yet on "
 msgstr "Все още липсват подавания в "
 
-#: wt-status.c:1905
+#: wt-status.c:1909
 msgid "HEAD (no branch)"
 msgstr "HEAD (извън клон)"
 
-#: wt-status.c:1936
+#: wt-status.c:1940
 msgid "different"
 msgstr "различен"
 
-#: wt-status.c:1938 wt-status.c:1946
+#: wt-status.c:1942 wt-status.c:1950
 msgid "behind "
 msgstr "назад с "
 
-#: wt-status.c:1941 wt-status.c:1944
+#: wt-status.c:1945 wt-status.c:1948
 msgid "ahead "
 msgstr "напред с "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2466
+#: wt-status.c:2470
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "не може да извършите „%s“, защото има промени, които не са в индекса."
 
-#: wt-status.c:2472
+#: wt-status.c:2476
 msgid "additionally, your index contains uncommitted changes."
 msgstr "освен това в индекса има неподадени промени."
 
-#: wt-status.c:2474
+#: wt-status.c:2478
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "не може да извършите „%s“, защото в индекса има неподадени промени."
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:453
+#: compat/precompose_utf8.c:58 builtin/clone.c:452
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "неуспешно изтриване на „%s“"
@@ -8774,7 +8813,7 @@
 msgid "Unstaged changes after refreshing the index:"
 msgstr "Промени, които и след обновяването на индекса не са добавени към него:"
 
-#: builtin/add.c:234 builtin/rev-parse.c:896
+#: builtin/add.c:234 builtin/rev-parse.c:897
 msgid "Could not read the index"
 msgstr "Индексът не може да бъде прочетен"
 
@@ -8810,8 +8849,8 @@
 msgstr ""
 "Следните пътища ще бъдат игнорирани според някой от файловете „.gitignore“:\n"
 
-#: builtin/add.c:290 builtin/clean.c:909 builtin/fetch.c:147 builtin/mv.c:124
-#: builtin/prune-packed.c:56 builtin/pull.c:222 builtin/push.c:560
+#: builtin/add.c:290 builtin/clean.c:910 builtin/fetch.c:162 builtin/mv.c:124
+#: builtin/prune-packed.c:56 builtin/pull.c:223 builtin/push.c:547
 #: builtin/remote.c:1345 builtin/rm.c:241 builtin/send-pack.c:165
 msgid "dry run"
 msgstr "пробно изпълнение"
@@ -8869,7 +8908,7 @@
 "проверка, че при пробно изпълнение всички файлове, дори и изтритите, се "
 "игнорират"
 
-#: builtin/add.c:309 builtin/update-index.c:1001
+#: builtin/add.c:309 builtin/update-index.c:1002
 msgid "override the executable bit of the listed files"
 msgstr "изрично задаване на стойността на флага дали файлът е изпълним"
 
@@ -8945,114 +8984,110 @@
 msgid "Maybe you wanted to say 'git add .'?\n"
 msgstr "Вероятно искахте да използвате „git add .“?\n"
 
-#: builtin/am.c:348
+#: builtin/am.c:347
 msgid "could not parse author script"
 msgstr "скриптът за автор не може да се анализира"
 
-#: builtin/am.c:432
+#: builtin/am.c:431
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "„%s“ бе изтрит от куката „applypatch-msg“"
 
-#: builtin/am.c:474
+#: builtin/am.c:473
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Даденият входен ред е с неправилен формат: „%s“."
 
-#: builtin/am.c:512
+#: builtin/am.c:511
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Бележката не може да се копира от „%s“ към „%s“"
 
-#: builtin/am.c:538
+#: builtin/am.c:537
 msgid "fseek failed"
 msgstr "неуспешно изпълнение на „fseek“"
 
-#: builtin/am.c:726
+#: builtin/am.c:725
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "кръпката „%s“ не може да се анализира"
 
-#: builtin/am.c:791
+#: builtin/am.c:790
 msgid "Only one StGIT patch series can be applied at once"
 msgstr ""
 "Само една поредица от кръпки от „StGIT“ може да бъде прилагана в даден момент"
 
-#: builtin/am.c:839
+#: builtin/am.c:838
 msgid "invalid timestamp"
 msgstr "неправилна стойност за време"
 
-#: builtin/am.c:844 builtin/am.c:856
+#: builtin/am.c:843 builtin/am.c:855
 msgid "invalid Date line"
 msgstr "неправилен ред за дата „Date“"
 
-#: builtin/am.c:851
+#: builtin/am.c:850
 msgid "invalid timezone offset"
 msgstr "неправилно отместване на часовия пояс"
 
-#: builtin/am.c:944
+#: builtin/am.c:943
 msgid "Patch format detection failed."
 msgstr "Форматът на кръпката не може да бъде определен."
 
-#: builtin/am.c:949 builtin/clone.c:407
+#: builtin/am.c:948 builtin/clone.c:406
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "директорията „%s“ не може да бъде създадена"
 
-#: builtin/am.c:954
+#: builtin/am.c:953
 msgid "Failed to split patches."
 msgstr "Кръпките не могат да бъдат разделени."
 
-#: builtin/am.c:1084 builtin/commit.c:374
-msgid "unable to write index file"
-msgstr "индексът не може да бъде записан"
-
-#: builtin/am.c:1098
+#: builtin/am.c:1084
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "След коригирането на този проблем изпълнете „%s --continue“."
 
-#: builtin/am.c:1099
+#: builtin/am.c:1085
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "Ако предпочитате да прескочите тази кръпка, изпълнете „%s --skip“."
 
-#: builtin/am.c:1100
+#: builtin/am.c:1086
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr "За да се върнете към първоначалното състояние, изпълнете „%s --abort“."
 
-#: builtin/am.c:1183
+#: builtin/am.c:1169
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 "Кръпката е пратена с форматиране „format=flowed“.  Празните знаци в края на "
 "редовете може да се загубят."
 
-#: builtin/am.c:1211
+#: builtin/am.c:1197
 msgid "Patch is empty."
 msgstr "Кръпката е празна."
 
-#: builtin/am.c:1277
+#: builtin/am.c:1262
+#, c-format
+msgid "missing author line in commit %s"
+msgstr "липсва ред за авторство в подаването „%s“"
+
+#: builtin/am.c:1265
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "грешен ред с идентичност: %.*s"
 
-#: builtin/am.c:1299
-#, c-format
-msgid "unable to parse commit %s"
-msgstr "подаването не може да бъде анализирано: %s"
-
-#: builtin/am.c:1496
+#: builtin/am.c:1484
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
 "В хранилището липсват необходимите обекти-BLOB, за да се премине към тройно "
 "сливане."
 
-#: builtin/am.c:1498
+#: builtin/am.c:1486
 msgid "Using index info to reconstruct a base tree..."
 msgstr "Базовото дърво се реконструира от информацията в индекса…"
 
-#: builtin/am.c:1517
+#: builtin/am.c:1505
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -9060,24 +9095,24 @@
 "Кръпката не може да се приложи към обектите-BLOB в индекса.\n"
 "Да не би да сте я редактирали на ръка?"
 
-#: builtin/am.c:1523
+#: builtin/am.c:1511
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "Преминаване към прилагане на кръпка към базата и тройно сливане…"
 
-#: builtin/am.c:1549
+#: builtin/am.c:1537
 msgid "Failed to merge in the changes."
 msgstr "Неуспешно сливане на промените."
 
-#: builtin/am.c:1581
+#: builtin/am.c:1569
 msgid "applying to an empty history"
 msgstr "прилагане върху празна история"
 
-#: builtin/am.c:1628 builtin/am.c:1632
+#: builtin/am.c:1616 builtin/am.c:1620
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "не може да се продължи — „%s“ не съществува."
 
-#: builtin/am.c:1650
+#: builtin/am.c:1638
 msgid "Commit Body is:"
 msgstr "Тялото на кръпката за прилагане е:"
 
@@ -9085,40 +9120,44 @@
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1660
+#: builtin/am.c:1648
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr ""
 "Прилагане? „y“ — да/„n“ — не/„e“ — редактиране/„v“ — преглед/„a“ — приемане "
 "на всичко:"
 
-#: builtin/am.c:1710
+#: builtin/am.c:1695 builtin/commit.c:374
+msgid "unable to write index file"
+msgstr "индексът не може да бъде записан"
+
+#: builtin/am.c:1699
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr ""
 "Индексът не е чист: кръпките не могат да бъдат приложени (замърсени са: %s)"
 
-#: builtin/am.c:1750 builtin/am.c:1818
+#: builtin/am.c:1739 builtin/am.c:1807
 #, c-format
 msgid "Applying: %.*s"
 msgstr "Прилагане: %.*s"
 
-#: builtin/am.c:1767
+#: builtin/am.c:1756
 msgid "No changes -- Patch already applied."
 msgstr "Без промени — кръпката вече е приложена."
 
-#: builtin/am.c:1773
+#: builtin/am.c:1762
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "Неуспешно прилагане на кръпка при %s %.*s“"
 
-#: builtin/am.c:1777
+#: builtin/am.c:1766
 msgid "Use 'git am --show-current-patch' to see the failed patch"
 msgstr ""
 "За да видите неуспешно приложени кръпки, използвайте опцията „git am --show-"
 "current-patch“ to see the failed patch"
 
-#: builtin/am.c:1821
+#: builtin/am.c:1810
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -9128,7 +9167,7 @@
 "Ако няма друга промяна за включване в индекса, най-вероятно някоя друга\n"
 "кръпка е довела до същите промени и в такъв случай просто пропуснете тази."
 
-#: builtin/am.c:1828
+#: builtin/am.c:1817
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -9139,17 +9178,17 @@
 "След корекция на конфликтите изпълнете „git add“ върху поправените файлове.\n"
 "За да приемете „изтрити от тях“, изпълнете „git rm“ върху изтритите файлове."
 
-#: builtin/am.c:1935 builtin/am.c:1939 builtin/am.c:1951 builtin/reset.c:329
+#: builtin/am.c:1924 builtin/am.c:1928 builtin/am.c:1940 builtin/reset.c:329
 #: builtin/reset.c:337
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "„%s“ не е разпознат като обект."
 
-#: builtin/am.c:1987
+#: builtin/am.c:1976
 msgid "failed to clean index"
 msgstr "индексът не може да бъде изчистен"
 
-#: builtin/am.c:2031
+#: builtin/am.c:2020
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -9160,149 +9199,149 @@
 "сочи към\n"
 "„ORIG_HEAD“"
 
-#: builtin/am.c:2128
+#: builtin/am.c:2117
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr "Неправилна стойност за „--patch-format“: „%s“"
 
-#: builtin/am.c:2164
+#: builtin/am.c:2153
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [ОПЦИЯ…] [(ФАЙЛ_С_ПОЩА|ДИРЕКТОРИЯ_С_ПОЩА)…]"
 
-#: builtin/am.c:2165
+#: builtin/am.c:2154
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [ОПЦИЯ…] (--continue | --quit | --abort)"
 
-#: builtin/am.c:2171
+#: builtin/am.c:2160
 msgid "run interactively"
 msgstr "интерактивна работа"
 
-#: builtin/am.c:2173
+#: builtin/am.c:2162
 msgid "historical option -- no-op"
 msgstr "изоставена опция, съществува по исторически причини, нищо не прави"
 
-#: builtin/am.c:2175
+#: builtin/am.c:2164
 msgid "allow fall back on 3way merging if needed"
 msgstr "да се преминава към тройно сливане при нужда."
 
-#: builtin/am.c:2176 builtin/init-db.c:494 builtin/prune-packed.c:58
-#: builtin/repack.c:296 builtin/stash.c:806
+#: builtin/am.c:2165 builtin/init-db.c:494 builtin/prune-packed.c:58
+#: builtin/repack.c:297 builtin/stash.c:812
 msgid "be quiet"
 msgstr "без извеждане на информация"
 
-#: builtin/am.c:2178
+#: builtin/am.c:2167
 msgid "add a Signed-off-by line to the commit message"
 msgstr "добавяне на ред за подпис „Signed-off-by“ в съобщението за подаване"
 
-#: builtin/am.c:2181
+#: builtin/am.c:2170
 msgid "recode into utf8 (default)"
 msgstr "прекодиране в UTF-8 (стандартно)"
 
-#: builtin/am.c:2183
+#: builtin/am.c:2172
 msgid "pass -k flag to git-mailinfo"
 msgstr "подаване на опцията „-k“ на командата „git-mailinfo“"
 
-#: builtin/am.c:2185
+#: builtin/am.c:2174
 msgid "pass -b flag to git-mailinfo"
 msgstr "подаване на опцията „-b“ на командата „git-mailinfo“"
 
-#: builtin/am.c:2187
+#: builtin/am.c:2176
 msgid "pass -m flag to git-mailinfo"
 msgstr "подаване на опцията „-m“ на командата „git-mailinfo“"
 
-#: builtin/am.c:2189
+#: builtin/am.c:2178
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr ""
 "подаване на опцията „--keep-cr“ на командата „git-mailsplit“ за формат „mbox“"
 
-#: builtin/am.c:2192
+#: builtin/am.c:2181
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr ""
 "без подаване на опцията „--keep-cr“ на командата „git-mailsplit“ независимо "
 "от „am.keepcr“"
 
-#: builtin/am.c:2195
+#: builtin/am.c:2184
 msgid "strip everything before a scissors line"
 msgstr "пропускане на всичко преди реда за отрязване"
 
-#: builtin/am.c:2197 builtin/am.c:2200 builtin/am.c:2203 builtin/am.c:2206
-#: builtin/am.c:2209 builtin/am.c:2212 builtin/am.c:2215 builtin/am.c:2218
-#: builtin/am.c:2224
+#: builtin/am.c:2186 builtin/am.c:2189 builtin/am.c:2192 builtin/am.c:2195
+#: builtin/am.c:2198 builtin/am.c:2201 builtin/am.c:2204 builtin/am.c:2207
+#: builtin/am.c:2213
 msgid "pass it through git-apply"
 msgstr "прекарване през „git-apply“"
 
-#: builtin/am.c:2214 builtin/commit.c:1368 builtin/fmt-merge-msg.c:671
-#: builtin/fmt-merge-msg.c:674 builtin/grep.c:881 builtin/merge.c:249
-#: builtin/pull.c:159 builtin/pull.c:218 builtin/rebase.c:1418
-#: builtin/repack.c:307 builtin/repack.c:311 builtin/repack.c:313
+#: builtin/am.c:2203 builtin/commit.c:1368 builtin/fmt-merge-msg.c:671
+#: builtin/fmt-merge-msg.c:674 builtin/grep.c:883 builtin/merge.c:249
+#: builtin/pull.c:160 builtin/pull.c:219 builtin/rebase.c:1442
+#: builtin/repack.c:308 builtin/repack.c:312 builtin/repack.c:314
 #: builtin/show-branch.c:650 builtin/show-ref.c:172 builtin/tag.c:403
-#: parse-options.h:141 parse-options.h:162 parse-options.h:312
+#: parse-options.h:150 parse-options.h:171 parse-options.h:312
 msgid "n"
 msgstr "БРОЙ"
 
-#: builtin/am.c:2220 builtin/branch.c:661 builtin/for-each-ref.c:38
-#: builtin/replace.c:554 builtin/tag.c:437 builtin/verify-tag.c:38
+#: builtin/am.c:2209 builtin/branch.c:661 builtin/for-each-ref.c:38
+#: builtin/replace.c:555 builtin/tag.c:437 builtin/verify-tag.c:38
 msgid "format"
 msgstr "ФОРМАТ"
 
-#: builtin/am.c:2221
+#: builtin/am.c:2210
 msgid "format the patch(es) are in"
 msgstr "формат на кръпките"
 
-#: builtin/am.c:2227
+#: builtin/am.c:2216
 msgid "override error message when patch failure occurs"
 msgstr "избрано от вас съобщение за грешка при прилагане на кръпки"
 
-#: builtin/am.c:2229
+#: builtin/am.c:2218
 msgid "continue applying patches after resolving a conflict"
 msgstr "продължаване на прилагането на кръпки след коригирането на конфликт"
 
-#: builtin/am.c:2232
+#: builtin/am.c:2221
 msgid "synonyms for --continue"
 msgstr "псевдоними на „--continue“"
 
-#: builtin/am.c:2235
+#: builtin/am.c:2224
 msgid "skip the current patch"
 msgstr "прескачане на текущата кръпка"
 
-#: builtin/am.c:2238
+#: builtin/am.c:2227
 msgid "restore the original branch and abort the patching operation."
 msgstr ""
 "възстановяване на първоначалното състояние на клона и преустановяване на "
 "прилагането на кръпката."
 
-#: builtin/am.c:2241
+#: builtin/am.c:2230
 msgid "abort the patching operation but keep HEAD where it is."
 msgstr ""
 "преустановяване на прилагането на кръпката без промяна към кое сочи „HEAD“."
 
-#: builtin/am.c:2244
+#: builtin/am.c:2233
 msgid "show the patch being applied."
 msgstr "показване на прилаганата кръпка."
 
-#: builtin/am.c:2248
+#: builtin/am.c:2237
 msgid "lie about committer date"
 msgstr "дата за подаване различна от първоначалната"
 
-#: builtin/am.c:2250
+#: builtin/am.c:2239
 msgid "use current timestamp for author date"
 msgstr "използване на текущото време като това за автор"
 
-#: builtin/am.c:2252 builtin/commit-tree.c:120 builtin/commit.c:1511
-#: builtin/merge.c:286 builtin/pull.c:193 builtin/rebase.c:489
-#: builtin/rebase.c:1459 builtin/revert.c:117 builtin/tag.c:418
+#: builtin/am.c:2241 builtin/commit-tree.c:120 builtin/commit.c:1511
+#: builtin/merge.c:286 builtin/pull.c:194 builtin/rebase.c:490
+#: builtin/rebase.c:1483 builtin/revert.c:117 builtin/tag.c:418
 msgid "key-id"
 msgstr "ИДЕНТИФИКАТОР_НА_КЛЮЧ"
 
-#: builtin/am.c:2253 builtin/rebase.c:490 builtin/rebase.c:1460
+#: builtin/am.c:2242 builtin/rebase.c:491 builtin/rebase.c:1484
 msgid "GPG-sign commits"
 msgstr "подписване на подаванията с GPG"
 
-#: builtin/am.c:2256
+#: builtin/am.c:2245
 msgid "(internal use for git-rebase)"
 msgstr "(ползва се вътрешно за „git-rebase“)"
 
-#: builtin/am.c:2274
+#: builtin/am.c:2263
 msgid ""
 "The -b/--binary option has been a no-op for long time, and\n"
 "it will be removed. Please do not use it anymore."
@@ -9310,18 +9349,18 @@
 "Опциите „-b“/„--binary“ отдавна не правят нищо и\n"
 "ще бъдат премахнати в бъдеще.  Не ги ползвайте."
 
-#: builtin/am.c:2281
+#: builtin/am.c:2270
 msgid "failed to read the index"
 msgstr "неуспешно изчитане на индекса"
 
-#: builtin/am.c:2296
+#: builtin/am.c:2285
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr ""
 "предишната директория за пребазиране „%s“ все още съществува, а е зададен "
 "файл „mbox“."
 
-#: builtin/am.c:2320
+#: builtin/am.c:2309
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -9330,11 +9369,11 @@
 "Открита е излишна директория „%s“.\n"
 "Можете да я изтриете с командата „git am --abort“."
 
-#: builtin/am.c:2326
+#: builtin/am.c:2315
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "В момента не тече операция по коригиране и няма как да се продължи."
 
-#: builtin/am.c:2336
+#: builtin/am.c:2325
 msgid "interactive mode requires patches on the command line"
 msgstr "интерактивният режим изисква кръпки на командния ред"
 
@@ -9652,171 +9691,171 @@
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "опцията „--bisect-terms“ изисква 0 или 1 аргумента"
 
-#: builtin/blame.c:32
+#: builtin/blame.c:31
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
 msgstr "git blame [ОПЦИЯ…] [ОПЦИЯ_ЗА_ВЕРСИЯТА…] [ВЕРСИЯ] [--] ФАЙЛ"
 
-#: builtin/blame.c:37
+#: builtin/blame.c:36
 msgid "<rev-opts> are documented in git-rev-list(1)"
 msgstr "ОПЦИИте_ЗА_ВЕРСИЯТА са документирани в ръководството git-rev-list(1)"
 
-#: builtin/blame.c:410
+#: builtin/blame.c:409
 #, c-format
 msgid "expecting a color: %s"
 msgstr "трябва да е цвят: %s"
 
-#: builtin/blame.c:417
+#: builtin/blame.c:416
 msgid "must end with a color"
 msgstr "трябва да завършва с цвят"
 
-#: builtin/blame.c:730
+#: builtin/blame.c:729
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr "неправилен цвят „%s“ в „color.blame.repeatedLines“"
 
-#: builtin/blame.c:748
+#: builtin/blame.c:747
 msgid "invalid value for blame.coloring"
 msgstr "неправилна стойност за „blame.coloring“"
 
-#: builtin/blame.c:823
+#: builtin/blame.c:822
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "версията за прескачане „%s“ не може да бъде открита"
 
-#: builtin/blame.c:845
+#: builtin/blame.c:844
 msgid "Show blame entries as we find them, incrementally"
 msgstr "Извеждане на авторството с намирането му, последователно"
 
-#: builtin/blame.c:846
+#: builtin/blame.c:845
 msgid "Show blank SHA-1 for boundary commits (Default: off)"
 msgstr ""
 "Извеждане на празни суми по SHA1 за граничните подавания (стандартно опцията "
 "е изключена)"
 
-#: builtin/blame.c:847
+#: builtin/blame.c:846
 msgid "Do not treat root commits as boundaries (Default: off)"
 msgstr ""
 "Началните подавания да не се считат за гранични (стандартно опцията е "
 "изключена)"
 
-#: builtin/blame.c:848
+#: builtin/blame.c:847
 msgid "Show work cost statistics"
 msgstr "Извеждане на статистика за извършените действия"
 
-#: builtin/blame.c:849
+#: builtin/blame.c:848
 msgid "Force progress reporting"
 msgstr "Принудително извеждане на напредъка"
 
-#: builtin/blame.c:850
+#: builtin/blame.c:849
 msgid "Show output score for blame entries"
 msgstr "Извеждане на допълнителна информация за определянето на авторството"
 
-#: builtin/blame.c:851
+#: builtin/blame.c:850
 msgid "Show original filename (Default: auto)"
 msgstr ""
 "Извеждане на първоначалното име на файл (стандартно това е автоматично)"
 
-#: builtin/blame.c:852
+#: builtin/blame.c:851
 msgid "Show original linenumber (Default: off)"
 msgstr ""
 "Извеждане на първоначалният номер на ред (стандартно опцията е изключена)"
 
-#: builtin/blame.c:853
+#: builtin/blame.c:852
 msgid "Show in a format designed for machine consumption"
 msgstr "Извеждане във формат за по-нататъшна обработка"
 
-#: builtin/blame.c:854
+#: builtin/blame.c:853
 msgid "Show porcelain format with per-line commit information"
 msgstr ""
 "Извеждане във формат за команди от потребителско ниво с информация на всеки "
 "ред"
 
-#: builtin/blame.c:855
+#: builtin/blame.c:854
 msgid "Use the same output mode as git-annotate (Default: off)"
 msgstr ""
 "Използване на същия формат като „git-annotate“ (стандартно опцията е "
 "изключена)"
 
-#: builtin/blame.c:856
+#: builtin/blame.c:855
 msgid "Show raw timestamp (Default: off)"
 msgstr "Извеждане на неформатирани времена (стандартно опцията е изключена)"
 
-#: builtin/blame.c:857
+#: builtin/blame.c:856
 msgid "Show long commit SHA1 (Default: off)"
 msgstr "Извеждане на пълните суми по SHA1 (стандартно опцията е изключена)"
 
-#: builtin/blame.c:858
+#: builtin/blame.c:857
 msgid "Suppress author name and timestamp (Default: off)"
 msgstr "Без име на автор и време на промяна (стандартно опцията е изключена)"
 
-#: builtin/blame.c:859
+#: builtin/blame.c:858
 msgid "Show author email instead of name (Default: off)"
 msgstr ""
 "Извеждане на е-пощата на автора, а не името му (стандартно опцията е "
 "изключена)"
 
-#: builtin/blame.c:860
+#: builtin/blame.c:859
 msgid "Ignore whitespace differences"
 msgstr "Без разлики в знаците за интервали"
 
-#: builtin/blame.c:861 builtin/log.c:1629
+#: builtin/blame.c:860 builtin/log.c:1630
 msgid "rev"
 msgstr "ВЕРС"
 
-#: builtin/blame.c:861
+#: builtin/blame.c:860
 msgid "Ignore <rev> when blaming"
 msgstr "Прескачане на ВЕРСията при извеждане на авторството"
 
-#: builtin/blame.c:862
+#: builtin/blame.c:861
 msgid "Ignore revisions from <file>"
 msgstr "Прескачане на версиите указани във ФАЙЛа при извеждане на авторството"
 
-#: builtin/blame.c:863
+#: builtin/blame.c:862
 msgid "color redundant metadata from previous line differently"
 msgstr ""
 "оцветяване на повтарящите се метаданни от предишния ред в различен цвят"
 
-#: builtin/blame.c:864
+#: builtin/blame.c:863
 msgid "color lines by age"
 msgstr "оцветяване на редовете по възраст"
 
-#: builtin/blame.c:871
+#: builtin/blame.c:870
 msgid "Use an experimental heuristic to improve diffs"
 msgstr "Подобряване на разликите чрез експериментална евристика"
 
-#: builtin/blame.c:873
+#: builtin/blame.c:872
 msgid "Spend extra cycles to find better match"
 msgstr "Допълнителни изчисления за по-добри резултати"
 
-#: builtin/blame.c:874
+#: builtin/blame.c:873
 msgid "Use revisions from <file> instead of calling git-rev-list"
 msgstr "Изчитане на версиите от ФАЙЛ, а не чрез изпълнение на „git-rev-list“"
 
-#: builtin/blame.c:875
+#: builtin/blame.c:874
 msgid "Use <file>'s contents as the final image"
 msgstr "Използване на съдържанието на ФАЙЛа като крайно положение"
 
-#: builtin/blame.c:876 builtin/blame.c:877
+#: builtin/blame.c:875 builtin/blame.c:876
 msgid "score"
 msgstr "напасване на редовете"
 
-#: builtin/blame.c:876
+#: builtin/blame.c:875
 msgid "Find line copies within and across files"
 msgstr ""
 "Търсене на копирани редове както в рамките на един файл, така и от един файл "
 "към друг"
 
-#: builtin/blame.c:877
+#: builtin/blame.c:876
 msgid "Find line movements within and across files"
 msgstr ""
 "Търсене на преместени редове както в рамките на един файл, така и от един "
 "файл към друг"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:877
 msgid "n,m"
 msgstr "n,m"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:877
 msgid "Process only line range n,m, counting from 1"
 msgstr ""
 "Информация само за редовете в диапазона от n до m включително.  Броенето "
@@ -10059,7 +10098,7 @@
 msgid "do not use"
 msgstr "да не се ползва"
 
-#: builtin/branch.c:626 builtin/rebase.c:485
+#: builtin/branch.c:626 builtin/rebase.c:486
 msgid "upstream"
 msgstr "клон-източник"
 
@@ -10171,7 +10210,7 @@
 msgid "format to use for the output"
 msgstr "ФОРМАТ за изхода"
 
-#: builtin/branch.c:684 builtin/clone.c:761
+#: builtin/branch.c:684 builtin/clone.c:760
 msgid "HEAD not found below refs/heads!"
 msgstr "В директорията „refs/heads“ липсва файл „HEAD“"
 
@@ -10274,7 +10313,7 @@
 msgid "Need a repository to unbundle."
 msgstr "За приемането на пратка е необходимо хранилище."
 
-#: builtin/cat-file.c:594
+#: builtin/cat-file.c:595
 msgid ""
 "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
 "p | <type> | --textconv | --filters) [--path=<path>] <object>"
@@ -10282,7 +10321,7 @@
 "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
 "p | ВИД | --textconv --filters) [--path=ПЪТ] ОБЕКТ"
 
-#: builtin/cat-file.c:595
+#: builtin/cat-file.c:596
 msgid ""
 "git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
 "filters]"
@@ -10290,79 +10329,79 @@
 "git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
 "filters]"
 
-#: builtin/cat-file.c:616
+#: builtin/cat-file.c:617
 msgid "only one batch option may be specified"
 msgstr "може да укажете само една пакетна опция"
 
-#: builtin/cat-file.c:634
+#: builtin/cat-file.c:635
 msgid "<type> can be one of: blob, tree, commit, tag"
 msgstr ""
 "ВИДът може да е: „blob“ (BLOB), „tree“ (дърво), „commit“ (подаване), "
 "„tag“ (етикет)"
 
-#: builtin/cat-file.c:635
+#: builtin/cat-file.c:636
 msgid "show object type"
 msgstr "извеждане на вида на обект"
 
-#: builtin/cat-file.c:636
+#: builtin/cat-file.c:637
 msgid "show object size"
 msgstr "извеждане на размера на обект"
 
-#: builtin/cat-file.c:638
+#: builtin/cat-file.c:639
 msgid "exit with zero when there's no error"
 msgstr "изход с 0, когато няма грешка"
 
-#: builtin/cat-file.c:639
+#: builtin/cat-file.c:640
 msgid "pretty-print object's content"
 msgstr "форматирано извеждане на съдържанието на обекта"
 
-#: builtin/cat-file.c:641
+#: builtin/cat-file.c:642
 msgid "for blob objects, run textconv on object's content"
 msgstr ""
 "да се стартира програмата зададена в настройката „textconv“ за преобразуване "
 "на съдържанието на обекта-BLOB"
 
-#: builtin/cat-file.c:643
+#: builtin/cat-file.c:644
 msgid "for blob objects, run filters on object's content"
 msgstr ""
 "да се стартират програмите за преобразуване на съдържанието на обектите-BLOB"
 
-#: builtin/cat-file.c:644 git-submodule.sh:936
+#: builtin/cat-file.c:645 git-submodule.sh:936
 msgid "blob"
 msgstr "обект-BLOB"
 
-#: builtin/cat-file.c:645
+#: builtin/cat-file.c:646
 msgid "use a specific path for --textconv/--filters"
 msgstr "опциите „--textconv“/„--filters“ изискват път"
 
-#: builtin/cat-file.c:647
+#: builtin/cat-file.c:648
 msgid "allow -s and -t to work with broken/corrupt objects"
 msgstr "позволяване на опциите „-s“ и „-t“ да работят с повредени обекти"
 
-#: builtin/cat-file.c:648
+#: builtin/cat-file.c:649
 msgid "buffer --batch output"
 msgstr "буфериране на изхода от „--batch“"
 
-#: builtin/cat-file.c:650
+#: builtin/cat-file.c:651
 msgid "show info and content of objects fed from the standard input"
 msgstr ""
 "извеждане на информация и съдържание на обектите подадени на стандартния вход"
 
-#: builtin/cat-file.c:654
+#: builtin/cat-file.c:655
 msgid "show info about objects fed from the standard input"
 msgstr "извеждане на информация за обектите подадени на стандартния вход"
 
-#: builtin/cat-file.c:658
+#: builtin/cat-file.c:659
 msgid "follow in-tree symlinks (used with --batch or --batch-check)"
 msgstr ""
 "следване на символните връзки сочещи в дървото (ползва се с „--batch“ или „--"
 "batch-check“)"
 
-#: builtin/cat-file.c:660
+#: builtin/cat-file.c:661
 msgid "show all objects with --batch or --batch-check"
 msgstr "извеждане на всички обекти с „--batch“ или „--batch-check“"
 
-#: builtin/cat-file.c:662
+#: builtin/cat-file.c:663
 msgid "do not order --batch-all-objects output"
 msgstr "без подреждане на изхода от „--batch-all-objects“"
 
@@ -10390,8 +10429,8 @@
 msgid "terminate input and output records by a NUL character"
 msgstr "разделяне на входните и изходните записи с нулевия знак „NUL“"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1433 builtin/gc.c:538
-#: builtin/worktree.c:507
+#: builtin/check-ignore.c:21 builtin/checkout.c:1433 builtin/gc.c:537
+#: builtin/worktree.c:506
 msgid "suppress progress reporting"
 msgstr "без показване на напредъка"
 
@@ -10483,7 +10522,7 @@
 #: builtin/checkout-index.c:178 builtin/column.c:31
 #: builtin/submodule--helper.c:1373 builtin/submodule--helper.c:1376
 #: builtin/submodule--helper.c:1384 builtin/submodule--helper.c:1857
-#: builtin/worktree.c:680
+#: builtin/worktree.c:679
 msgid "string"
 msgstr "НИЗ"
 
@@ -10511,99 +10550,99 @@
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [ОПЦИЯ…] [--source=КЛОН] ФАЙЛ…"
 
-#: builtin/checkout.c:172 builtin/checkout.c:211
+#: builtin/checkout.c:173 builtin/checkout.c:212
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "вашата версия липсва в пътя „%s“"
 
-#: builtin/checkout.c:174 builtin/checkout.c:213
+#: builtin/checkout.c:175 builtin/checkout.c:214
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "чуждата версия липсва в пътя „%s“"
 
-#: builtin/checkout.c:190
+#: builtin/checkout.c:191
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "някоя от необходимите версии липсва в пътя „%s“"
 
-#: builtin/checkout.c:240
+#: builtin/checkout.c:241
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "някоя от необходимите версии липсва в пътя „%s“"
 
-#: builtin/checkout.c:258
+#: builtin/checkout.c:259
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "пътят „%s“ не може да бъде слян"
 
-#: builtin/checkout.c:274
+#: builtin/checkout.c:275
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "Резултатът за „%s“ не може да бъде слян"
 
-#: builtin/checkout.c:374
+#: builtin/checkout.c:375
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "Пресъздаден е %d конфликт при сливане"
 msgstr[1] "Пресъздадени са %d конфликта при сливане"
 
-#: builtin/checkout.c:379
+#: builtin/checkout.c:380
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "Обновен е %d път от „%s“"
 msgstr[1] "Обновени са %d пътя от „%s“"
 
-#: builtin/checkout.c:386
+#: builtin/checkout.c:387
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "Обновен е %d път от индекса"
 msgstr[1] "Обновени са %d пътя от индекса"
 
-#: builtin/checkout.c:409 builtin/checkout.c:412 builtin/checkout.c:415
-#: builtin/checkout.c:419
+#: builtin/checkout.c:410 builtin/checkout.c:413 builtin/checkout.c:416
+#: builtin/checkout.c:420
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "опцията „%s“ е несъвместима с обновяването на пътища"
 
-#: builtin/checkout.c:422 builtin/checkout.c:425
+#: builtin/checkout.c:423 builtin/checkout.c:426
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr "опцията „%s“ е несъвместима с „%s“"
 
-#: builtin/checkout.c:429
+#: builtin/checkout.c:430
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr ""
 "Невъзможно е едновременно да обновявате пътища и да преминете към клона „%s“."
 
-#: builtin/checkout.c:433
+#: builtin/checkout.c:434
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "не е указано нито „%s“, нито „%s“"
 
-#: builtin/checkout.c:437
+#: builtin/checkout.c:438
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "опцията „%s“ е задължителна, когато „%s“ не е зададена"
 
-#: builtin/checkout.c:442 builtin/checkout.c:447
+#: builtin/checkout.c:443 builtin/checkout.c:448
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "опцията „%3$s“ е несъвместима както с „%1$s“, така и с „%2$s“"
 
-#: builtin/checkout.c:506 builtin/checkout.c:513
+#: builtin/checkout.c:507 builtin/checkout.c:514
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "пътят „%s“ не е слят"
 
-#: builtin/checkout.c:679
+#: builtin/checkout.c:680
 msgid "you need to resolve your current index first"
 msgstr "първо трябва да коригирате индекса си"
 
-#: builtin/checkout.c:729
+#: builtin/checkout.c:730
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -10613,11 +10652,6 @@
 "индекса:\n"
 "%s"
 
-#: builtin/checkout.c:736
-#, c-format
-msgid "staged changes in the following files may be lost: %s"
-msgstr "локалните промени в тези файлове ще се презапишат: %s"
-
 #: builtin/checkout.c:833
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
@@ -10627,7 +10661,7 @@
 msgid "HEAD is now at"
 msgstr "Указателят „HEAD“ в момента сочи към"
 
-#: builtin/checkout.c:879 builtin/clone.c:714
+#: builtin/checkout.c:879 builtin/clone.c:713
 msgid "unable to update HEAD"
 msgstr "Указателят „HEAD“ не може да бъде обновен"
 
@@ -10740,7 +10774,7 @@
 "„%s“ може да е както локален файл, така и следящ клон.  За уточняване\n"
 "ползвайте разделителя „--“ (и евентуално опцията „--no-guess“)"
 
-#: builtin/checkout.c:1243 builtin/worktree.c:291 builtin/worktree.c:456
+#: builtin/checkout.c:1243 builtin/worktree.c:290 builtin/worktree.c:455
 #, c-format
 msgid "invalid reference: %s"
 msgstr "неправилен указател: %s"
@@ -10846,9 +10880,9 @@
 msgid "missing branch or commit argument"
 msgstr "липсва аргумент — клон или подаване"
 
-#: builtin/checkout.c:1437 builtin/clone.c:91 builtin/fetch.c:151
-#: builtin/merge.c:285 builtin/pull.c:137 builtin/push.c:575
-#: builtin/send-pack.c:174
+#: builtin/checkout.c:1437 builtin/clone.c:90 builtin/commit-graph.c:59
+#: builtin/commit-graph.c:180 builtin/fetch.c:166 builtin/merge.c:285
+#: builtin/pull.c:138 builtin/push.c:562 builtin/send-pack.c:174
 msgid "force progress reporting"
 msgstr "извеждане на напредъка"
 
@@ -10856,7 +10890,7 @@
 msgid "perform a 3-way merge with the new branch"
 msgstr "извършване на тройно сливане с новия клон"
 
-#: builtin/checkout.c:1439 builtin/log.c:1617 parse-options.h:318
+#: builtin/checkout.c:1439 builtin/log.c:1618 parse-options.h:318
 msgid "style"
 msgstr "СТИЛ"
 
@@ -10864,7 +10898,7 @@
 msgid "conflict style (merge or diff3)"
 msgstr "действие при конфликт (сливане или тройна разлика)"
 
-#: builtin/checkout.c:1452 builtin/worktree.c:504
+#: builtin/checkout.c:1452 builtin/worktree.c:503
 msgid "detach HEAD at named commit"
 msgstr "отделяне на указателя „HEAD“ към указаното подаване"
 
@@ -10981,9 +11015,9 @@
 "\n"
 "    checkout.defaultRemote=origin"
 
-#: builtin/checkout.c:1691 builtin/checkout.c:1693 builtin/checkout.c:1733
-#: builtin/checkout.c:1735 builtin/clone.c:121 builtin/remote.c:169
-#: builtin/remote.c:171 builtin/worktree.c:500 builtin/worktree.c:502
+#: builtin/checkout.c:1691 builtin/checkout.c:1693 builtin/checkout.c:1742
+#: builtin/checkout.c:1744 builtin/clone.c:120 builtin/remote.c:169
+#: builtin/remote.c:171 builtin/worktree.c:499 builtin/worktree.c:501
 msgid "branch"
 msgstr "клон"
 
@@ -11009,41 +11043,41 @@
 msgid "use overlay mode (default)"
 msgstr "използване на припокриващ режим (стандартно)"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1743
 msgid "create and switch to a new branch"
 msgstr "създаване и преминаване към нов клон"
 
-#: builtin/checkout.c:1736
+#: builtin/checkout.c:1745
 msgid "create/reset and switch to a branch"
 msgstr "създаване/зануляване на клон и преминаване към него"
 
-#: builtin/checkout.c:1738
+#: builtin/checkout.c:1747
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr ""
 "опит за отгатване на име на клон след неуспешен опит с „git switch "
 "НЕСЪЩЕСТВУВАЩ_КЛОН“"
 
-#: builtin/checkout.c:1740
+#: builtin/checkout.c:1749
 msgid "throw away local modifications"
 msgstr "зануляване на локалните промени"
 
-#: builtin/checkout.c:1772
+#: builtin/checkout.c:1781
 msgid "which tree-ish to checkout from"
 msgstr "към кой указател към дърво да се премине"
 
-#: builtin/checkout.c:1774
+#: builtin/checkout.c:1783
 msgid "restore the index"
 msgstr "възстановяване на индекса"
 
-#: builtin/checkout.c:1776
+#: builtin/checkout.c:1785
 msgid "restore the working tree (default)"
 msgstr "възстановяване на работното дърво (стандартно)"
 
-#: builtin/checkout.c:1778
+#: builtin/checkout.c:1787
 msgid "ignore unmerged entries"
 msgstr "пренебрегване на неслетите елементи"
 
-#: builtin/checkout.c:1779
+#: builtin/checkout.c:1788
 msgid "use overlay mode"
 msgstr "използване на припокриващ режим"
 
@@ -11082,7 +11116,7 @@
 msgid "could not lstat %s\n"
 msgstr "не може да се получи информация чрез „lstat“ за „%s“\n"
 
-#: builtin/clean.c:300 git-add--interactive.perl:593
+#: builtin/clean.c:301 git-add--interactive.perl:593
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -11095,7 +11129,7 @@
 "ПРЕФИКС    — избор на единствен обект по този уникален префикс\n"
 "           — (празно) нищо да не се избира\n"
 
-#: builtin/clean.c:304 git-add--interactive.perl:602
+#: builtin/clean.c:305 git-add--interactive.perl:602
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -11116,39 +11150,39 @@
 "*          — избиране на всички обекти\n"
 "           — (празно) завършване на избирането\n"
 
-#: builtin/clean.c:520 git-add--interactive.perl:568
+#: builtin/clean.c:521 git-add--interactive.perl:568
 #: git-add--interactive.perl:573
 #, c-format, perl-format
 msgid "Huh (%s)?\n"
 msgstr "Неправилен избор (%s).\n"
 
-#: builtin/clean.c:662
+#: builtin/clean.c:663
 #, c-format
 msgid "Input ignore patterns>> "
 msgstr "Шаблони за игнорирани елементи≫ "
 
-#: builtin/clean.c:699
+#: builtin/clean.c:700
 #, c-format
 msgid "WARNING: Cannot find items matched by: %s"
 msgstr "ПРЕДУПРЕЖДЕНИЕ: Никой обект не напасва на „%s“"
 
-#: builtin/clean.c:720
+#: builtin/clean.c:721
 msgid "Select items to delete"
 msgstr "Избиране на обекти за изтриване"
 
 #. TRANSLATORS: Make sure to keep [y/N] as is
-#: builtin/clean.c:761
+#: builtin/clean.c:762
 #, c-format
 msgid "Remove %s [y/N]? "
 msgstr "Да се изтрие ли „%s“? „y“ —  да, „N“ — НЕ"
 
 #
-#: builtin/clean.c:786 git-add--interactive.perl:1763
+#: builtin/clean.c:787 git-add--interactive.perl:1763
 #, c-format
 msgid "Bye.\n"
 msgstr "Изход.\n"
 
-#: builtin/clean.c:794
+#: builtin/clean.c:795
 msgid ""
 "clean               - start cleaning\n"
 "filter by pattern   - exclude items from deletion\n"
@@ -11166,64 +11200,64 @@
 "help                — този край\n"
 "?                   — подсказка за шаблоните"
 
-#: builtin/clean.c:821 git-add--interactive.perl:1849
+#: builtin/clean.c:822 git-add--interactive.perl:1849
 msgid "*** Commands ***"
 msgstr "●●● Команди ●●●"
 
-#: builtin/clean.c:822 git-add--interactive.perl:1846
+#: builtin/clean.c:823 git-add--interactive.perl:1846
 msgid "What now"
 msgstr "Избор на следващо действие"
 
-#: builtin/clean.c:830
+#: builtin/clean.c:831
 msgid "Would remove the following item:"
 msgid_plural "Would remove the following items:"
 msgstr[0] "Следният обект ще бъде изтрит:"
 msgstr[1] "Следните обекти ще бъдат изтрити:"
 
-#: builtin/clean.c:846
+#: builtin/clean.c:847
 msgid "No more files to clean, exiting."
 msgstr "Файловете за изчистване свършиха.  Изход от програмата."
 
-#: builtin/clean.c:908
+#: builtin/clean.c:909
 msgid "do not print names of files removed"
 msgstr "без извеждане на имената на файловете, които ще бъдат изтрити"
 
-#: builtin/clean.c:910
+#: builtin/clean.c:911
 msgid "force"
 msgstr "принудително изтриване"
 
-#: builtin/clean.c:911
+#: builtin/clean.c:912
 msgid "interactive cleaning"
 msgstr "интерактивно изтриване"
 
-#: builtin/clean.c:913
+#: builtin/clean.c:914
 msgid "remove whole directories"
 msgstr "изтриване на цели директории"
 
-#: builtin/clean.c:914 builtin/describe.c:546 builtin/describe.c:548
-#: builtin/grep.c:899 builtin/log.c:176 builtin/log.c:178
-#: builtin/ls-files.c:557 builtin/name-rev.c:413 builtin/name-rev.c:415
+#: builtin/clean.c:915 builtin/describe.c:548 builtin/describe.c:550
+#: builtin/grep.c:901 builtin/log.c:176 builtin/log.c:178
+#: builtin/ls-files.c:557 builtin/name-rev.c:417 builtin/name-rev.c:419
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr "ШАБЛОН"
 
-#: builtin/clean.c:915
+#: builtin/clean.c:916
 msgid "add <pattern> to ignore rules"
 msgstr "добавяне на ШАБЛОН от файлове, които да не се трият"
 
-#: builtin/clean.c:916
+#: builtin/clean.c:917
 msgid "remove ignored files, too"
 msgstr "изтриване и на игнорираните файлове"
 
-#: builtin/clean.c:918
+#: builtin/clean.c:919
 msgid "remove only ignored files"
 msgstr "изтриване само на игнорирани файлове"
 
-#: builtin/clean.c:936
+#: builtin/clean.c:937
 msgid "-x and -X cannot be used together"
 msgstr "опциите „-x“ и „-X“ са несъвместими"
 
-#: builtin/clean.c:940
+#: builtin/clean.c:941
 msgid ""
 "clean.requireForce set to true and neither -i, -n, nor -f given; refusing to "
 "clean"
@@ -11231,7 +11265,7 @@
 "Настройката „clean.requireForce“ е зададена като истина, което изисква някоя "
 "от опциите „-i“, „-n“ или „-f“.  Няма да се извърши изчистване"
 
-#: builtin/clean.c:943
+#: builtin/clean.c:944
 msgid ""
 "clean.requireForce defaults to true and neither -i, -n, nor -f given; "
 "refusing to clean"
@@ -11240,164 +11274,164 @@
 "което изисква някоя от опциите „-i“, „-n“ или „-f“.  Няма да се извърши "
 "изчистване"
 
-#: builtin/clone.c:46
+#: builtin/clone.c:45
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [ОПЦИЯ…] [--] ХРАНИЛИЩЕ [ДИРЕКТОРИЯ]"
 
-#: builtin/clone.c:93
+#: builtin/clone.c:92
 msgid "don't create a checkout"
 msgstr "без създаване на работно дърво"
 
-#: builtin/clone.c:94 builtin/clone.c:96 builtin/init-db.c:489
+#: builtin/clone.c:93 builtin/clone.c:95 builtin/init-db.c:489
 msgid "create a bare repository"
 msgstr "създаване на голо хранилище"
 
-#: builtin/clone.c:98
+#: builtin/clone.c:97
 msgid "create a mirror repository (implies bare)"
 msgstr ""
 "създаване на хранилище-огледало (включва опцията „--bare“ за голо хранилище)"
 
-#: builtin/clone.c:100
+#: builtin/clone.c:99
 msgid "to clone from a local repository"
 msgstr "клониране от локално хранилище"
 
-#: builtin/clone.c:102
+#: builtin/clone.c:101
 msgid "don't use local hardlinks, always copy"
 msgstr "без твърди връзки, файловете винаги да се копират"
 
-#: builtin/clone.c:104
+#: builtin/clone.c:103
 msgid "setup as shared repository"
 msgstr "настройване за споделено хранилище"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:106
 msgid "pathspec"
 msgstr "път"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:106
 msgid "initialize submodules in the clone"
 msgstr "инициализиране на подмодулите при това клониране"
 
-#: builtin/clone.c:110
+#: builtin/clone.c:109
 msgid "number of submodules cloned in parallel"
 msgstr "брой подмодули, клонирани паралелно"
 
-#: builtin/clone.c:111 builtin/init-db.c:486
+#: builtin/clone.c:110 builtin/init-db.c:486
 msgid "template-directory"
 msgstr "директория с шаблони"
 
-#: builtin/clone.c:112 builtin/init-db.c:487
+#: builtin/clone.c:111 builtin/init-db.c:487
 msgid "directory from which templates will be used"
 msgstr "директория, която съдържа шаблоните, които да се ползват"
 
-#: builtin/clone.c:114 builtin/clone.c:116 builtin/submodule--helper.c:1380
+#: builtin/clone.c:113 builtin/clone.c:115 builtin/submodule--helper.c:1380
 #: builtin/submodule--helper.c:1860
 msgid "reference repository"
 msgstr "еталонно хранилище"
 
-#: builtin/clone.c:118 builtin/submodule--helper.c:1382
+#: builtin/clone.c:117 builtin/submodule--helper.c:1382
 #: builtin/submodule--helper.c:1862
 msgid "use --reference only while cloning"
 msgstr "опцията „--reference“ може да се използва само при клониране"
 
-#: builtin/clone.c:119 builtin/column.c:27 builtin/merge-file.c:46
-#: builtin/pack-objects.c:3314 builtin/repack.c:319
+#: builtin/clone.c:118 builtin/column.c:27 builtin/merge-file.c:46
+#: builtin/pack-objects.c:3294 builtin/repack.c:320
 msgid "name"
 msgstr "ИМЕ"
 
-#: builtin/clone.c:120
+#: builtin/clone.c:119
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "използване на това ИМЕ вместо „origin“ при проследяване на клони"
 
-#: builtin/clone.c:122
+#: builtin/clone.c:121
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "изтегляне на този КЛОН, а не соченият от отдалечения указател „HEAD“"
 
-#: builtin/clone.c:124
+#: builtin/clone.c:123
 msgid "path to git-upload-pack on the remote"
 msgstr "път към командата „git-upload-pack“ на отдалеченото хранилище"
 
-#: builtin/clone.c:125 builtin/fetch.c:152 builtin/grep.c:838
-#: builtin/pull.c:226
+#: builtin/clone.c:124 builtin/fetch.c:167 builtin/grep.c:840
+#: builtin/pull.c:227
 msgid "depth"
 msgstr "ДЪЛБОЧИНА"
 
-#: builtin/clone.c:126
+#: builtin/clone.c:125
 msgid "create a shallow clone of that depth"
 msgstr "плитко клониране до тази ДЪЛБОЧИНА"
 
-#: builtin/clone.c:127 builtin/fetch.c:154 builtin/pack-objects.c:3303
+#: builtin/clone.c:126 builtin/fetch.c:169 builtin/pack-objects.c:3283
 msgid "time"
 msgstr "ВРЕМЕ"
 
-#: builtin/clone.c:128
+#: builtin/clone.c:127
 msgid "create a shallow clone since a specific time"
 msgstr "плитко клониране до момент във времето"
 
-#: builtin/clone.c:129 builtin/fetch.c:156 builtin/fetch.c:179
-#: builtin/rebase.c:1395
+#: builtin/clone.c:128 builtin/fetch.c:171 builtin/fetch.c:194
+#: builtin/rebase.c:1417
 msgid "revision"
 msgstr "ВЕРСИЯ"
 
-#: builtin/clone.c:130 builtin/fetch.c:157
+#: builtin/clone.c:129 builtin/fetch.c:172
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "задълбочаване на историята на плитко хранилище до изключващ указател"
 
-#: builtin/clone.c:132
+#: builtin/clone.c:131
 msgid "clone only one branch, HEAD or --branch"
 msgstr ""
 "клониране само на един клон — или сочения от отдалечения „HEAD“, или изрично "
 "зададения с „--branch“"
 
-#: builtin/clone.c:134
+#: builtin/clone.c:133
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr ""
 "без клониране на етикети, като последващите доставяния няма да ги следят"
 
-#: builtin/clone.c:136
+#: builtin/clone.c:135
 msgid "any cloned submodules will be shallow"
 msgstr "всички клонирани подмодули ще са плитки"
 
-#: builtin/clone.c:137 builtin/init-db.c:495
+#: builtin/clone.c:136 builtin/init-db.c:495
 msgid "gitdir"
 msgstr "СЛУЖЕБНА_ДИРЕКТОРИЯ"
 
-#: builtin/clone.c:138 builtin/init-db.c:496
+#: builtin/clone.c:137 builtin/init-db.c:496
 msgid "separate git dir from working tree"
 msgstr "отделна СЛУЖЕБНА_ДИРЕКТОРИЯ за git извън работното дърво"
 
-#: builtin/clone.c:139
+#: builtin/clone.c:138
 msgid "key=value"
 msgstr "КЛЮЧ=СТОЙНОСТ"
 
-#: builtin/clone.c:140
+#: builtin/clone.c:139
 msgid "set config inside the new repository"
 msgstr "задаване на настройките на новото хранилище"
 
-#: builtin/clone.c:142 builtin/fetch.c:174 builtin/ls-remote.c:76
-#: builtin/push.c:585 builtin/send-pack.c:172
+#: builtin/clone.c:141 builtin/fetch.c:189 builtin/ls-remote.c:76
+#: builtin/push.c:572 builtin/send-pack.c:172
 msgid "server-specific"
 msgstr "специфични за сървъра"
 
-#: builtin/clone.c:142 builtin/fetch.c:174 builtin/ls-remote.c:76
-#: builtin/push.c:585 builtin/send-pack.c:173
+#: builtin/clone.c:141 builtin/fetch.c:189 builtin/ls-remote.c:76
+#: builtin/push.c:572 builtin/send-pack.c:173
 msgid "option to transmit"
 msgstr "опция за пренос"
 
-#: builtin/clone.c:143 builtin/fetch.c:175 builtin/pull.c:239
-#: builtin/push.c:586
+#: builtin/clone.c:142 builtin/fetch.c:190 builtin/pull.c:240
+#: builtin/push.c:573
 msgid "use IPv4 addresses only"
 msgstr "само адреси IPv4"
 
-#: builtin/clone.c:145 builtin/fetch.c:177 builtin/pull.c:242
-#: builtin/push.c:588
+#: builtin/clone.c:144 builtin/fetch.c:192 builtin/pull.c:243
+#: builtin/push.c:575
 msgid "use IPv6 addresses only"
 msgstr "само адреси IPv6"
 
-#: builtin/clone.c:149
+#: builtin/clone.c:148
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "всички клонирани подмодули ще ползват следящите си клони"
 
-#: builtin/clone.c:285
+#: builtin/clone.c:284
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -11405,43 +11439,43 @@
 "Името на директорията не може да бъде отгатнато.\n"
 "Задайте директорията изрично на командния ред"
 
-#: builtin/clone.c:338
+#: builtin/clone.c:337
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr ""
 "ПРЕДУПРЕЖДЕНИЕ: не може да се добави алтернативен източник на „%s“: %s\n"
 
-#: builtin/clone.c:411
+#: builtin/clone.c:410
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "„%s“ съществува и не е директория"
 
-#: builtin/clone.c:428
+#: builtin/clone.c:427
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "неуспешно итериране по „%s“"
 
-#: builtin/clone.c:458
+#: builtin/clone.c:457
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "връзката „%s“ не може да бъде създадена"
 
-#: builtin/clone.c:462
+#: builtin/clone.c:461
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "файлът не може да бъде копиран като „%s“"
 
-#: builtin/clone.c:467
+#: builtin/clone.c:466
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "неуспешно итериране по „%s“"
 
-#: builtin/clone.c:492
+#: builtin/clone.c:491
 #, c-format
 msgid "done.\n"
 msgstr "действието завърши.\n"
 
-#: builtin/clone.c:506
+#: builtin/clone.c:505
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -11454,99 +11488,99 @@
 "\n"
 "    git restore --source=HEAD :/\n"
 
-#: builtin/clone.c:583
+#: builtin/clone.c:582
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr ""
 "Клонът „%s“ от отдалеченото хранилище, което клонирате,\n"
 "и който следва да бъде изтеглен, не съществува."
 
-#: builtin/clone.c:702
+#: builtin/clone.c:701
 #, c-format
 msgid "unable to update %s"
 msgstr "обектът „%s“ не може да бъде обновен"
 
-#: builtin/clone.c:752
+#: builtin/clone.c:751
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 "указателят „HEAD“ от отдалеченото хранилище сочи към нещо,\n"
 "което не съществува.  Не може да се изтегли определен клон.\n"
 
-#: builtin/clone.c:783
+#: builtin/clone.c:782
 msgid "unable to checkout working tree"
 msgstr "работното дърво не може да бъде подготвено"
 
-#: builtin/clone.c:833
+#: builtin/clone.c:832
 msgid "unable to write parameters to config file"
 msgstr "настройките не могат да бъдат записани в конфигурационния файл"
 
-#: builtin/clone.c:896
+#: builtin/clone.c:895
 msgid "cannot repack to clean up"
 msgstr "не може да се извърши пакетиране за изчистване на файловете"
 
-#: builtin/clone.c:898
+#: builtin/clone.c:897
 msgid "cannot unlink temporary alternates file"
 msgstr "временният файл за алтернативни обекти не може да бъде изтрит"
 
-#: builtin/clone.c:938 builtin/receive-pack.c:1950
+#: builtin/clone.c:937 builtin/receive-pack.c:1948
 msgid "Too many arguments."
 msgstr "Прекалено много аргументи."
 
-#: builtin/clone.c:942
+#: builtin/clone.c:941
 msgid "You must specify a repository to clone."
 msgstr "Трябва да укажете кое хранилище искате да клонирате."
 
-#: builtin/clone.c:955
+#: builtin/clone.c:954
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "опциите „--bare“ и „--origin %s“ са несъвместими."
 
-#: builtin/clone.c:958
+#: builtin/clone.c:957
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "опциите „--bare“ и „--separate-git-dir“ са несъвместими."
 
-#: builtin/clone.c:971
+#: builtin/clone.c:970
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "не съществува хранилище „%s“"
 
-#: builtin/clone.c:977 builtin/fetch.c:1660
+#: builtin/clone.c:976 builtin/fetch.c:1790
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "дълбочината трябва да е положително цяло число, а не „%s“"
 
-#: builtin/clone.c:987
+#: builtin/clone.c:986
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "целевият път „%s“ съществува и не е празна директория."
 
-#: builtin/clone.c:997
+#: builtin/clone.c:996
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "в „%s“ вече съществува работно дърво."
 
-#: builtin/clone.c:1012 builtin/clone.c:1033 builtin/difftool.c:264
-#: builtin/worktree.c:303 builtin/worktree.c:335
+#: builtin/clone.c:1011 builtin/clone.c:1032 builtin/difftool.c:271
+#: builtin/log.c:1785 builtin/worktree.c:302 builtin/worktree.c:334
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "родителските директории на „%s“ не могат да бъдат създадени"
 
-#: builtin/clone.c:1017
+#: builtin/clone.c:1016
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "работното дърво в „%s“ не може да бъде създадено."
 
-#: builtin/clone.c:1037
+#: builtin/clone.c:1036
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Клониране и създаване на голо хранилище в „%s“…\n"
 
-#: builtin/clone.c:1039
+#: builtin/clone.c:1038
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Клониране и създаване на хранилище в „%s“…\n"
 
-#: builtin/clone.c:1063
+#: builtin/clone.c:1062
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
@@ -11554,44 +11588,44 @@
 "Опцията „--recursive“ е несъвместима с опциите „--reference“ и „--reference-"
 "if-able“"
 
-#: builtin/clone.c:1124
+#: builtin/clone.c:1123
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr ""
 "При локално клониране опцията „--depth“ се прескача.  Ползвайте схемата "
 "„file://“."
 
-#: builtin/clone.c:1126
+#: builtin/clone.c:1125
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr ""
 "При локално клониране опцията „--shallow-since“ се прескача.  Ползвайте "
 "схемата „file://“."
 
-#: builtin/clone.c:1128
+#: builtin/clone.c:1127
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 "При локално клониране опцията „--shallow-exclude“ се прескача.  Ползвайте "
 "схемата „file://“."
 
-#: builtin/clone.c:1130
+#: builtin/clone.c:1129
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr ""
 "При локално клониране опцията „--filter“ се прескача.  Ползвайте схемата "
 "„file://“."
 
-#: builtin/clone.c:1133
+#: builtin/clone.c:1132
 msgid "source repository is shallow, ignoring --local"
 msgstr "клонираното хранилище е плитко, затова опцията „--local“ се прескача"
 
-#: builtin/clone.c:1138
+#: builtin/clone.c:1137
 msgid "--local is ignored"
 msgstr "опцията „--local“ се прескача"
 
-#: builtin/clone.c:1215 builtin/clone.c:1223
+#: builtin/clone.c:1212 builtin/clone.c:1220
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "Отдалеченият клон „%s“ липсва в клонираното хранилище „%s“"
 
-#: builtin/clone.c:1226
+#: builtin/clone.c:1223
 msgid "You appear to have cloned an empty repository."
 msgstr "Изглежда клонирахте празно хранилище."
 
@@ -11669,7 +11703,7 @@
 msgstr "ИДЕНТИФИКАТОР на обекта за подаването-родител"
 
 #: builtin/commit-tree.c:114 builtin/commit.c:1500 builtin/merge.c:270
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1460
+#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1469
 #: builtin/tag.c:412
 msgid "message"
 msgstr "СЪОБЩЕНИЕ"
@@ -11683,7 +11717,7 @@
 msgstr "изчитане на съобщението за подаване от ФАЙЛ"
 
 #: builtin/commit-tree.c:121 builtin/commit.c:1512 builtin/merge.c:287
-#: builtin/pull.c:194 builtin/revert.c:118
+#: builtin/pull.c:195 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "подписване на подаването с GPG"
 
@@ -12021,8 +12055,8 @@
 msgid "version"
 msgstr "версия"
 
-#: builtin/commit.c:1347 builtin/commit.c:1529 builtin/push.c:561
-#: builtin/worktree.c:651
+#: builtin/commit.c:1347 builtin/commit.c:1529 builtin/push.c:548
+#: builtin/worktree.c:650
 msgid "machine-readable output"
 msgstr "формат на изхода за четене от програма"
 
@@ -12035,8 +12069,8 @@
 msgstr "разделяне на елементите с нулевия знак „NUL“"
 
 #: builtin/commit.c:1355 builtin/commit.c:1359 builtin/commit.c:1537
-#: builtin/fast-export.c:1125 builtin/fast-export.c:1128
-#: builtin/fast-export.c:1131 builtin/rebase.c:1471 parse-options.h:332
+#: builtin/fast-export.c:1153 builtin/fast-export.c:1156
+#: builtin/fast-export.c:1159 builtin/rebase.c:1495 parse-options.h:332
 msgid "mode"
 msgstr "РЕЖИМ"
 
@@ -12056,7 +12090,7 @@
 "„traditional“ (традиционен), „matching“ (напасващи), „no“ (без игнорираните "
 "файлове).  Стандартният РЕЖИМ е: „traditional“."
 
-#: builtin/commit.c:1362 parse-options.h:179
+#: builtin/commit.c:1362 parse-options.h:188
 msgid "when"
 msgstr "КОГА"
 
@@ -12109,7 +12143,7 @@
 msgid "override author for commit"
 msgstr "задаване на АВТОР за подаването"
 
-#: builtin/commit.c:1499 builtin/gc.c:539
+#: builtin/commit.c:1499 builtin/gc.c:538
 msgid "date"
 msgstr "ДАТА"
 
@@ -12147,8 +12181,8 @@
 msgstr ""
 "смяна на автора да съвпада с подаващия (използва се с „-C“/„-c“/„--amend“)"
 
-#: builtin/commit.c:1506 builtin/log.c:1564 builtin/merge.c:289
-#: builtin/pull.c:163 builtin/revert.c:110
+#: builtin/commit.c:1506 builtin/log.c:1565 builtin/merge.c:289
+#: builtin/pull.c:164 builtin/revert.c:110
 msgid "add Signed-off-by:"
 msgstr "добавяне на поле за подпис — „Signed-off-by:“"
 
@@ -12259,71 +12293,74 @@
 msgstr "git commit-graph read [--object-dir ДИР_ОБЕКТИ]"
 
 #: builtin/commit-graph.c:13 builtin/commit-graph.c:19
-msgid "git commit-graph verify [--object-dir <objdir>] [--shallow]"
-msgstr "git commit-graph verify [--object-dir ДИР_ОБЕКТИ] [--shallow]"
+msgid ""
+"git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
+msgstr ""
+"git commit-graph verify [--object-dir ДИР_ОБЕКТИ] [--shallow] [--"
+"[no-]progress]"
 
 #: builtin/commit-graph.c:14 builtin/commit-graph.c:29
 msgid ""
 "git commit-graph write [--object-dir <objdir>] [--append|--split] [--"
-"reachable|--stdin-packs|--stdin-commits] <split options>"
+"reachable|--stdin-packs|--stdin-commits] [--[no-]progress] <split options>"
 msgstr ""
 "git commit-graph write [--object-dir ДИР_ОБЕКТИ] [--append|--split] [--"
-"reachable|--stdin-packs|--stdin-commits] ОПЦИИ_ЗА_РАЗДЕЛЯНЕ"
+"reachable|--stdin-packs|--stdin-commits] [--[no-]progress] ОПЦИИ_ЗА_РАЗДЕЛЯНЕ"
 
-#: builtin/commit-graph.c:54 builtin/commit-graph.c:100
-#: builtin/commit-graph.c:161 builtin/commit-graph.c:237 builtin/fetch.c:163
-#: builtin/log.c:1584
+#: builtin/commit-graph.c:55 builtin/commit-graph.c:107
+#: builtin/commit-graph.c:170 builtin/commit-graph.c:254 builtin/fetch.c:178
+#: builtin/log.c:1585
 msgid "dir"
 msgstr "директория"
 
-#: builtin/commit-graph.c:55 builtin/commit-graph.c:101
-#: builtin/commit-graph.c:162 builtin/commit-graph.c:238
+#: builtin/commit-graph.c:56 builtin/commit-graph.c:108
+#: builtin/commit-graph.c:171 builtin/commit-graph.c:255
 msgid "The object directory to store the graph"
 msgstr "ДИРекторията_с_ОБЕКТИ за запазване на гра̀фа"
 
-#: builtin/commit-graph.c:57
+#: builtin/commit-graph.c:58
 msgid "if the commit-graph is split, only verify the tip file"
 msgstr ""
 "ако гра̀фа с подаванията е раздробен, да се проверява само файлът на върха"
 
-#: builtin/commit-graph.c:73 builtin/commit-graph.c:116
+#: builtin/commit-graph.c:80 builtin/commit-graph.c:125
 #, c-format
 msgid "Could not open commit-graph '%s'"
 msgstr "Графът с подаванията не може да се отвори: „%s“"
 
-#: builtin/commit-graph.c:164
+#: builtin/commit-graph.c:173
 msgid "start walk at all refs"
 msgstr "обхождането да започне от всички указатели"
 
-#: builtin/commit-graph.c:166
+#: builtin/commit-graph.c:175
 msgid "scan pack-indexes listed by stdin for commits"
 msgstr ""
 "проверка на подаванията за индексите на пакетите изброени на командния ред"
 
-#: builtin/commit-graph.c:168
+#: builtin/commit-graph.c:177
 msgid "start walk at commits listed by stdin"
 msgstr "започване на обхождането при подаванията подадени на стандартния вход"
 
-#: builtin/commit-graph.c:170
+#: builtin/commit-graph.c:179
 msgid "include all commits already in the commit-graph file"
 msgstr ""
 "включване на всички подавания, които вече са във файла с гра̀фа на подаванията"
 
-#: builtin/commit-graph.c:172
+#: builtin/commit-graph.c:182
 msgid "allow writing an incremental commit-graph file"
 msgstr "позволяване на запис на нарастващ файл с гра̀фа на подаванията"
 
-#: builtin/commit-graph.c:174 builtin/commit-graph.c:178
+#: builtin/commit-graph.c:184 builtin/commit-graph.c:188
 msgid "maximum number of commits in a non-base split commit-graph"
 msgstr "максимален брой подавания в небазово ниво на раздробен граф"
 
-#: builtin/commit-graph.c:176
+#: builtin/commit-graph.c:186
 msgid "maximum ratio between two levels of a split commit-graph"
 msgstr ""
 "максимално отношение на броя подавания в две последователни нива в раздробен "
 "граф"
 
-#: builtin/commit-graph.c:191
+#: builtin/commit-graph.c:204
 msgid "use at most one of --reachable, --stdin-commits, or --stdin-packs"
 msgstr ""
 "опциите „--reachable“, „--stdin-commits“ и „--stdin-packs“ са несъвместими"
@@ -12649,57 +12686,57 @@
 msgid "print sizes in human readable format"
 msgstr "извеждане на размерите на обектите във формат лесно четим от хора"
 
-#: builtin/describe.c:27
+#: builtin/describe.c:26
 msgid "git describe [<options>] [<commit-ish>...]"
 msgstr "git describe [ОПЦИЯ…] [УКАЗАТЕЛ_КЪМ_ПОДАВАНЕ…]"
 
-#: builtin/describe.c:28
+#: builtin/describe.c:27
 msgid "git describe [<options>] --dirty"
 msgstr "git describe [ОПЦИЯ…] --dirty"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "head"
 msgstr "основно"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "lightweight"
 msgstr "кратко"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "annotated"
 msgstr "анотирано"
 
-#: builtin/describe.c:273
+#: builtin/describe.c:275
 #, c-format
 msgid "annotated tag %s not available"
 msgstr "не съществува анотиран етикет „%s“"
 
-#: builtin/describe.c:277
+#: builtin/describe.c:279
 #, c-format
 msgid "annotated tag %s has no embedded name"
 msgstr "в анотирания етикет „%s“ липсва вградено име"
 
-#: builtin/describe.c:279
+#: builtin/describe.c:281
 #, c-format
 msgid "tag '%s' is really '%s' here"
 msgstr "етикетът „%s“ тук е всъщност „%s“"
 
-#: builtin/describe.c:323
+#: builtin/describe.c:325
 #, c-format
 msgid "no tag exactly matches '%s'"
 msgstr "никой етикет не напасва точно „%s“"
 
-#: builtin/describe.c:325
+#: builtin/describe.c:327
 #, c-format
 msgid "No exact match on refs or tags, searching to describe\n"
 msgstr "Никоя версия и етикет не напасват точно.  Търси се по описание\n"
 
-#: builtin/describe.c:379
+#: builtin/describe.c:381
 #, c-format
 msgid "finished search at %s\n"
 msgstr "търсенето приключи при „%s“\n"
 
-#: builtin/describe.c:405
+#: builtin/describe.c:407
 #, c-format
 msgid ""
 "No annotated tags can describe '%s'.\n"
@@ -12708,7 +12745,7 @@
 "Никой анотиран етикет не описва „%s“.\n"
 "Съществуват и неанотирани етикети.  Пробвайте с опцията „--tags“."
 
-#: builtin/describe.c:409
+#: builtin/describe.c:411
 #, c-format
 msgid ""
 "No tags can describe '%s'.\n"
@@ -12717,12 +12754,12 @@
 "Никой етикет не описва „%s“.\n"
 "Пробвайте с опцията „--always“ или създайте етикети."
 
-#: builtin/describe.c:439
+#: builtin/describe.c:441
 #, c-format
 msgid "traversed %lu commits\n"
 msgstr "претърсени са %lu подавания\n"
 
-#: builtin/describe.c:442
+#: builtin/describe.c:444
 #, c-format
 msgid ""
 "more than %i tags found; listed %i most recent\n"
@@ -12731,93 +12768,93 @@
 "открити са над %i етикета, изведени са последните %i,\n"
 "търсенето бе прекратено при „%s“.\n"
 
-#: builtin/describe.c:510
+#: builtin/describe.c:512
 #, c-format
 msgid "describe %s\n"
 msgstr "описание на „%s“\n"
 
-#: builtin/describe.c:513
+#: builtin/describe.c:515
 #, c-format
 msgid "Not a valid object name %s"
 msgstr "Неправилно име на обект „%s“"
 
-#: builtin/describe.c:521
+#: builtin/describe.c:523
 #, c-format
 msgid "%s is neither a commit nor blob"
 msgstr "„%s“ не е нито подаване, нито обект-BLOB"
 
-#: builtin/describe.c:535
+#: builtin/describe.c:537
 msgid "find the tag that comes after the commit"
 msgstr "откриване на етикета, който следва подаване"
 
-#: builtin/describe.c:536
+#: builtin/describe.c:538
 msgid "debug search strategy on stderr"
 msgstr ""
 "извеждане на информация за трасиране на стратегията за търсене на "
 "стандартната грешка"
 
-#: builtin/describe.c:537
+#: builtin/describe.c:539
 msgid "use any ref"
 msgstr "използване на произволен указател"
 
-#: builtin/describe.c:538
+#: builtin/describe.c:540
 msgid "use any tag, even unannotated"
 msgstr "използване на всеки етикет — включително и неанотираните"
 
-#: builtin/describe.c:539
+#: builtin/describe.c:541
 msgid "always use long format"
 msgstr "винаги да се ползва дългият формат"
 
-#: builtin/describe.c:540
+#: builtin/describe.c:542
 msgid "only follow first parent"
 msgstr "проследяване само на първия родител"
 
-#: builtin/describe.c:543
+#: builtin/describe.c:545
 msgid "only output exact matches"
 msgstr "извеждане само на точните съвпадения"
 
-#: builtin/describe.c:545
+#: builtin/describe.c:547
 msgid "consider <n> most recent tags (default: 10)"
 msgstr "да се търси само в този БРОЙ последни етикети (стандартно: 10)"
 
-#: builtin/describe.c:547
+#: builtin/describe.c:549
 msgid "only consider tags matching <pattern>"
 msgstr "да се търси само измежду етикетите напасващи този ШАБЛОН"
 
-#: builtin/describe.c:549
+#: builtin/describe.c:551
 msgid "do not consider tags matching <pattern>"
 msgstr "да не се търси измежду етикетите напасващи този ШАБЛОН"
 
-#: builtin/describe.c:551 builtin/name-rev.c:422
+#: builtin/describe.c:553 builtin/name-rev.c:426
 msgid "show abbreviated commit object as fallback"
 msgstr "извеждане на съкратено име на обект като резервен вариант"
 
-#: builtin/describe.c:552 builtin/describe.c:555
+#: builtin/describe.c:554 builtin/describe.c:557
 msgid "mark"
 msgstr "МАРКЕР"
 
-#: builtin/describe.c:553
+#: builtin/describe.c:555
 msgid "append <mark> on dirty working tree (default: \"-dirty\")"
 msgstr "добавяне на такъв МАРКЕР на работното дърво (стандартно е „-dirty“)"
 
-#: builtin/describe.c:556
+#: builtin/describe.c:558
 msgid "append <mark> on broken working tree (default: \"-broken\")"
 msgstr ""
 "добавяне на такъв МАРКЕР на счупеното работно дърво (стандартно е „-broken“)"
 
-#: builtin/describe.c:574
+#: builtin/describe.c:576
 msgid "--long is incompatible with --abbrev=0"
 msgstr "Опциите „--long“ и „--abbrev=0“ са несъвместими"
 
-#: builtin/describe.c:603
+#: builtin/describe.c:605
 msgid "No names found, cannot describe anything."
 msgstr "Не са открити имена — нищо не може да бъде описано."
 
-#: builtin/describe.c:654
+#: builtin/describe.c:656
 msgid "--dirty is incompatible with commit-ishes"
 msgstr "опцията „--dirty“ е несъвместима с указател към подаване"
 
-#: builtin/describe.c:656
+#: builtin/describe.c:658
 msgid "--broken is incompatible with commit-ishes"
 msgstr "опцията „--broken“ е несъвместима с указател към подаване"
 
@@ -12854,27 +12891,27 @@
 msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
 msgstr "git difftool [ОПЦИЯ…] [ПОДАВАНЕ [ПОДАВАНЕ]] [[--] ПЪТ…]"
 
-#: builtin/difftool.c:253
+#: builtin/difftool.c:260
 #, c-format
 msgid "failed: %d"
 msgstr "неуспешно действие с изходен код: %d"
 
-#: builtin/difftool.c:295
+#: builtin/difftool.c:302
 #, c-format
 msgid "could not read symlink %s"
 msgstr "символната връзка „%s“ не може да бъде прочетена"
 
-#: builtin/difftool.c:297
+#: builtin/difftool.c:304
 #, c-format
 msgid "could not read symlink file %s"
 msgstr "файлът, сочен от символната връзка „%s“, не може да бъде прочетен"
 
-#: builtin/difftool.c:305
+#: builtin/difftool.c:312
 #, c-format
 msgid "could not read object %s for symlink %s"
 msgstr "обектът „%s“ за символната връзка „%s“ не може да бъде прочетен"
 
-#: builtin/difftool.c:406
+#: builtin/difftool.c:413
 msgid ""
 "combined diff formats('-c' and '--cc') are not supported in\n"
 "directory diff mode('-d' and '--dir-diff')."
@@ -12882,55 +12919,55 @@
 "комбинираните формати на разликите („-c“ и „--cc“) не се поддържат\n"
 "в режима за разлики върху директории („-d“ и „--dir-diff“)."
 
-#: builtin/difftool.c:626
+#: builtin/difftool.c:634
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "и двата файла са променени: „%s“ и „%s“."
 
-#: builtin/difftool.c:628
+#: builtin/difftool.c:636
 msgid "working tree file has been left."
 msgstr "работното дърво е изоставено."
 
-#: builtin/difftool.c:639
+#: builtin/difftool.c:647
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "в „%s“ има временни файлове."
 
-#: builtin/difftool.c:640
+#: builtin/difftool.c:648
 msgid "you may want to cleanup or recover these."
 msgstr "възможно е да ги изчистите или възстановите"
 
-#: builtin/difftool.c:689
+#: builtin/difftool.c:697
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr "използвайте „diff.guitool“ вместо „diff.tool“"
 
-#: builtin/difftool.c:691
+#: builtin/difftool.c:699
 msgid "perform a full-directory diff"
 msgstr "разлика по директории"
 
-#: builtin/difftool.c:693
+#: builtin/difftool.c:701
 msgid "do not prompt before launching a diff tool"
 msgstr "стартиране на ПРОГРАМАта за разлики без предупреждение"
 
-#: builtin/difftool.c:698
+#: builtin/difftool.c:706
 msgid "use symlinks in dir-diff mode"
 msgstr "следване на символните връзки при разлика по директории"
 
-#: builtin/difftool.c:699
+#: builtin/difftool.c:707
 msgid "tool"
 msgstr "ПРОГРАМА"
 
-#: builtin/difftool.c:700
+#: builtin/difftool.c:708
 msgid "use the specified diff tool"
 msgstr "използване на указаната ПРОГРАМА"
 
-#: builtin/difftool.c:702
+#: builtin/difftool.c:710
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr ""
 "извеждане на списък с всички ПРОГРАМи, които може да се ползват с опцията „--"
 "tool“"
 
-#: builtin/difftool.c:705
+#: builtin/difftool.c:713
 msgid ""
 "make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
 "code"
@@ -12938,31 +12975,31 @@
 "„git-difftool“ да спре работа, когато стартираната ПРОГРАМА завърши с "
 "ненулев код"
 
-#: builtin/difftool.c:708
+#: builtin/difftool.c:716
 msgid "specify a custom command for viewing diffs"
 msgstr "команда за разглеждане на разлики"
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:717
 msgid "passed to `diff`"
 msgstr "подава се към „diff“"
 
-#: builtin/difftool.c:724
+#: builtin/difftool.c:732
 msgid "difftool requires worktree or --no-index"
 msgstr "„git-difftool“ изисква работно дърво или опцията „--no-index“"
 
-#: builtin/difftool.c:731
+#: builtin/difftool.c:739
 msgid "--dir-diff is incompatible with --no-index"
 msgstr "опциите „--dir-diff“ и „--no-index“ са несъвместими"
 
-#: builtin/difftool.c:734
+#: builtin/difftool.c:742
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr "опциите „--gui“, „--tool“ и „--extcmd“ са несъвместими една с друга"
 
-#: builtin/difftool.c:742
+#: builtin/difftool.c:750
 msgid "no <tool> given for --tool=<tool>"
 msgstr "не е зададена програма за „--tool=ПРОГРАМА“"
 
-#: builtin/difftool.c:749
+#: builtin/difftool.c:757
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "не е зададена команда за „--extcmd=КОМАНДА“"
 
@@ -13002,160 +13039,185 @@
 msgid "git fast-export [rev-list-opts]"
 msgstr "git fast-export [ОПЦИИ_ЗА_СПИСЪКА_С_ВЕРСИИ]"
 
-#: builtin/fast-export.c:1124
+#: builtin/fast-export.c:852
+msgid "Error: Cannot export nested tags unless --mark-tags is specified."
+msgstr ""
+"Грешка: непреките етикети не се изнасят, освен ако не зададете „--mark-tags“."
+
+#: builtin/fast-export.c:1152
 msgid "show progress after <n> objects"
 msgstr "Съобщение за напредъка на всеки такъв БРОЙ обекта"
 
-#: builtin/fast-export.c:1126
+#: builtin/fast-export.c:1154
 msgid "select handling of signed tags"
 msgstr "Как да се обработват подписаните етикети"
 
-#: builtin/fast-export.c:1129
+#: builtin/fast-export.c:1157
 msgid "select handling of tags that tag filtered objects"
 msgstr "Как да се обработват етикетите на филтрираните обекти"
 
-#: builtin/fast-export.c:1132
+#: builtin/fast-export.c:1160
 msgid "select handling of commit messages in an alternate encoding"
 msgstr ""
 "как да се обработват съобщенията за подаване, които са в друго кодиране"
 
-#: builtin/fast-export.c:1135
+#: builtin/fast-export.c:1163
 msgid "Dump marks to this file"
 msgstr "Запазване на маркерите в този ФАЙЛ"
 
-#: builtin/fast-export.c:1137
+#: builtin/fast-export.c:1165
 msgid "Import marks from this file"
 msgstr "Внасяне на маркерите от този ФАЙЛ"
 
-#: builtin/fast-export.c:1139
+#: builtin/fast-export.c:1169
+msgid "Import marks from this file if it exists"
+msgstr "Внасяне на маркерите от този ФАЙЛ, ако съществува"
+
+#: builtin/fast-export.c:1171
 msgid "Fake a tagger when tags lack one"
 msgstr "Да се използва изкуствено име на човек при липса на задаващ етикета"
 
-#: builtin/fast-export.c:1141
+#: builtin/fast-export.c:1173
 msgid "Output full tree for each commit"
 msgstr "Извеждане на цялото дърво за всяко подаване"
 
-#: builtin/fast-export.c:1143
+#: builtin/fast-export.c:1175
 msgid "Use the done feature to terminate the stream"
 msgstr "Използване на маркер за завършване на потока"
 
-#: builtin/fast-export.c:1144
+#: builtin/fast-export.c:1176
 msgid "Skip output of blob data"
 msgstr "Без извеждане на съдържанието на обектите-BLOB"
 
-#: builtin/fast-export.c:1145 builtin/log.c:1632
+#: builtin/fast-export.c:1177 builtin/log.c:1633
 msgid "refspec"
 msgstr "УКАЗАТЕЛ_НА_ВЕРСИЯ"
 
-#: builtin/fast-export.c:1146
+#: builtin/fast-export.c:1178
 msgid "Apply refspec to exported refs"
 msgstr "Прилагане на УКАЗАТЕЛя_НА_ВЕРСИЯ към изнесените указатели"
 
-#: builtin/fast-export.c:1147
+#: builtin/fast-export.c:1179
 msgid "anonymize output"
 msgstr "анонимизиране на извежданата информация"
 
-#: builtin/fast-export.c:1149
+#: builtin/fast-export.c:1181
 msgid "Reference parents which are not in fast-export stream by object id"
 msgstr ""
 "Указване на родителите, които не са в потока на бързо изнасяне, с "
 "идентификатор на обект"
 
-#: builtin/fast-export.c:1151
+#: builtin/fast-export.c:1183
 msgid "Show original object ids of blobs/commits"
 msgstr "Извеждане на първоначалните идентификатори на обектите BLOB/подавяния"
 
-#: builtin/fetch.c:30
+#: builtin/fast-export.c:1185
+msgid "Label tags with mark ids"
+msgstr "Задаване на идентификатори на маркери на етикетите"
+
+#: builtin/fast-export.c:1220
+msgid "Cannot pass both --import-marks and --import-marks-if-exists"
+msgstr "опциите „--import-marks“ и „--import-marks-if-exists“ са несъвместими"
+
+#: builtin/fetch.c:34
 msgid "git fetch [<options>] [<repository> [<refspec>...]]"
 msgstr "git fetch [ОПЦИЯ…] [ХРАНИЛИЩЕ [УКАЗАТЕЛ…]]"
 
-#: builtin/fetch.c:31
+#: builtin/fetch.c:35
 msgid "git fetch [<options>] <group>"
 msgstr "git fetch [ОПЦИЯ…] ГРУПА"
 
-#: builtin/fetch.c:32
+#: builtin/fetch.c:36
 msgid "git fetch --multiple [<options>] [(<repository> | <group>)...]"
 msgstr "git fetch --multiple [ОПЦИЯ…] [(ХРАНИЛИЩЕ | ГРУПА)…]"
 
-#: builtin/fetch.c:33
+#: builtin/fetch.c:37
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [ОПЦИЯ…]"
 
-#: builtin/fetch.c:125 builtin/pull.c:203
+#: builtin/fetch.c:115
+msgid "fetch.parallel cannot be negative"
+msgstr "опцията „fetch.parallel“ трябва да е неотрицателна"
+
+#: builtin/fetch.c:138 builtin/pull.c:204
 msgid "fetch from all remotes"
 msgstr "доставяне от всички отдалечени хранилища"
 
-#: builtin/fetch.c:127 builtin/pull.c:206
+#: builtin/fetch.c:140 builtin/pull.c:248
+msgid "set upstream for git pull/fetch"
+msgstr "задаване на клон за следене за издърпване/доставяне"
+
+#: builtin/fetch.c:142 builtin/pull.c:207
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "добавяне към „.git/FETCH_HEAD“ вместо замяна"
 
-#: builtin/fetch.c:129 builtin/pull.c:209
+#: builtin/fetch.c:144 builtin/pull.c:210
 msgid "path to upload pack on remote end"
 msgstr "отдалечен път, където да се качи пакетът"
 
-#: builtin/fetch.c:130
+#: builtin/fetch.c:145
 msgid "force overwrite of local reference"
 msgstr "принудително презаписване на локален указател"
 
-#: builtin/fetch.c:132
+#: builtin/fetch.c:147
 msgid "fetch from multiple remotes"
 msgstr "доставяне от множество отдалечени хранилища"
 
-#: builtin/fetch.c:134 builtin/pull.c:213
+#: builtin/fetch.c:149 builtin/pull.c:214
 msgid "fetch all tags and associated objects"
 msgstr "доставяне на всички етикети и принадлежащи обекти"
 
-#: builtin/fetch.c:136
+#: builtin/fetch.c:151
 msgid "do not fetch all tags (--no-tags)"
 msgstr "без доставянето на всички етикети „--no-tags“"
 
-#: builtin/fetch.c:138
+#: builtin/fetch.c:153
 msgid "number of submodules fetched in parallel"
 msgstr "брой подмодули доставени паралелно"
 
-#: builtin/fetch.c:140 builtin/pull.c:216
+#: builtin/fetch.c:155 builtin/pull.c:217
 msgid "prune remote-tracking branches no longer on remote"
 msgstr "окастряне на клоните следящи вече несъществуващи отдалечени клони"
 
-#: builtin/fetch.c:142
+#: builtin/fetch.c:157
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
 "окастряне на локалните етикети, които вече не съществуват в отдалеченото "
 "хранилище и презаписване на променените"
 
-#: builtin/fetch.c:143 builtin/fetch.c:166 builtin/pull.c:140
+#: builtin/fetch.c:158 builtin/fetch.c:181 builtin/pull.c:141
 msgid "on-demand"
 msgstr "ПРИ НУЖДА"
 
-#: builtin/fetch.c:144
+#: builtin/fetch.c:159
 msgid "control recursive fetching of submodules"
 msgstr "управление на рекурсивното доставяне на подмодулите"
 
-#: builtin/fetch.c:148 builtin/pull.c:224
+#: builtin/fetch.c:163 builtin/pull.c:225
 msgid "keep downloaded pack"
 msgstr "запазване на изтеглените пакети с обекти"
 
-#: builtin/fetch.c:150
+#: builtin/fetch.c:165
 msgid "allow updating of HEAD ref"
 msgstr "позволяване на обновяването на указателя „HEAD“"
 
-#: builtin/fetch.c:153 builtin/fetch.c:159 builtin/pull.c:227
+#: builtin/fetch.c:168 builtin/fetch.c:174 builtin/pull.c:228
 msgid "deepen history of shallow clone"
 msgstr "задълбочаване на историята на плитко хранилище"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:170
 msgid "deepen history of shallow repository based on time"
 msgstr "задълбочаване на историята на плитко хранилище до определено време"
 
-#: builtin/fetch.c:161 builtin/pull.c:230
+#: builtin/fetch.c:176 builtin/pull.c:231
 msgid "convert to a complete repository"
 msgstr "превръщане в пълно хранилище"
 
-#: builtin/fetch.c:164
+#: builtin/fetch.c:179
 msgid "prepend this to submodule path output"
 msgstr "добавяне на това пред пътя на подмодула"
 
-#: builtin/fetch.c:167
+#: builtin/fetch.c:182
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
@@ -13163,90 +13225,90 @@
 "стандартно рекурсивно изтегляне на подмодулите (файловете с настройки са с "
 "приоритет)"
 
-#: builtin/fetch.c:171 builtin/pull.c:233
+#: builtin/fetch.c:186 builtin/pull.c:234
 msgid "accept refs that update .git/shallow"
 msgstr "приемане на указатели, които обновяват „.git/shallow“"
 
-#: builtin/fetch.c:172 builtin/pull.c:235
+#: builtin/fetch.c:187 builtin/pull.c:236
 msgid "refmap"
 msgstr "КАРТА_С_УКАЗАТЕЛИ"
 
-#: builtin/fetch.c:173 builtin/pull.c:236
+#: builtin/fetch.c:188 builtin/pull.c:237
 msgid "specify fetch refmap"
 msgstr "указване на КАРТАта_С_УКАЗАТЕЛИ за доставяне"
 
-#: builtin/fetch.c:180
+#: builtin/fetch.c:195
 msgid "report that we have only objects reachable from this object"
 msgstr "докладване, че всички обекти могат са достижими при започване от този"
 
-#: builtin/fetch.c:183
+#: builtin/fetch.c:198
 msgid "run 'gc --auto' after fetching"
 msgstr "изпълняване на „gc --auto“ след доставяне"
 
-#: builtin/fetch.c:185 builtin/pull.c:245
+#: builtin/fetch.c:200 builtin/pull.c:246
 msgid "check for forced-updates on all updated branches"
 msgstr "проверка за принудителни обновявания на всички клони"
 
-#: builtin/fetch.c:491
+#: builtin/fetch.c:510
 msgid "Couldn't find remote ref HEAD"
 msgstr "Указателят „HEAD“ в отдалеченото хранилище не може да бъде открит"
 
-#: builtin/fetch.c:630
+#: builtin/fetch.c:650
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
 msgstr "настройката „fetch.output“ е с неправилна стойност „%s“"
 
-#: builtin/fetch.c:728
+#: builtin/fetch.c:748
 #, c-format
 msgid "object %s not found"
 msgstr "обектът „%s“ липсва"
 
-#: builtin/fetch.c:732
+#: builtin/fetch.c:752
 msgid "[up to date]"
 msgstr "[актуализиран]"
 
-#: builtin/fetch.c:745 builtin/fetch.c:761 builtin/fetch.c:833
+#: builtin/fetch.c:765 builtin/fetch.c:781 builtin/fetch.c:853
 msgid "[rejected]"
 msgstr "[отхвърлен]"
 
-#: builtin/fetch.c:746
+#: builtin/fetch.c:766
 msgid "can't fetch in current branch"
 msgstr "в текущия клон не може да се доставя"
 
-#: builtin/fetch.c:756
+#: builtin/fetch.c:776
 msgid "[tag update]"
 msgstr "[обновяване на етикетите]"
 
-#: builtin/fetch.c:757 builtin/fetch.c:794 builtin/fetch.c:816
-#: builtin/fetch.c:828
+#: builtin/fetch.c:777 builtin/fetch.c:814 builtin/fetch.c:836
+#: builtin/fetch.c:848
 msgid "unable to update local ref"
 msgstr "локален указател не може да бъде обновен"
 
-#: builtin/fetch.c:761
+#: builtin/fetch.c:781
 msgid "would clobber existing tag"
 msgstr "съществуващ етикет ще бъде презаписан"
 
-#: builtin/fetch.c:783
+#: builtin/fetch.c:803
 msgid "[new tag]"
 msgstr "[нов етикет]"
 
-#: builtin/fetch.c:786
+#: builtin/fetch.c:806
 msgid "[new branch]"
 msgstr "[нов клон]"
 
-#: builtin/fetch.c:789
+#: builtin/fetch.c:809
 msgid "[new ref]"
 msgstr "[нов указател]"
 
-#: builtin/fetch.c:828
+#: builtin/fetch.c:848
 msgid "forced update"
 msgstr "принудително обновяване"
 
-#: builtin/fetch.c:833
+#: builtin/fetch.c:853
 msgid "non-fast-forward"
 msgstr "същинско сливане"
 
-#: builtin/fetch.c:854
+#: builtin/fetch.c:874
 msgid ""
 "Fetch normally indicates which branches had a forced update,\n"
 "but that check has been disabled. To re-enable, use '--show-forced-updates'\n"
@@ -13257,7 +13319,7 @@
 "\n"
 "    git config fetch.showForcedUpdates true"
 
-#: builtin/fetch.c:858
+#: builtin/fetch.c:878
 #, c-format
 msgid ""
 "It took %.2f seconds to check forced updates. You can use\n"
@@ -13271,24 +13333,24 @@
 "\n"
 "    git config fetch.showForcedUpdates false\n"
 
-#: builtin/fetch.c:888
+#: builtin/fetch.c:908
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "хранилището „%s“ не изпрати всички необходими обекти\n"
 
-#: builtin/fetch.c:909
+#: builtin/fetch.c:929
 #, c-format
 msgid "reject %s because shallow roots are not allowed to be updated"
 msgstr ""
 "отхвърляне на върха „%s“, защото плитките хранилища не могат да бъдат "
 "обновявани"
 
-#: builtin/fetch.c:1000 builtin/fetch.c:1131
+#: builtin/fetch.c:1020 builtin/fetch.c:1157
 #, c-format
 msgid "From %.*s\n"
 msgstr "От %.*s\n"
 
-#: builtin/fetch.c:1011
+#: builtin/fetch.c:1031
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -13298,58 +13360,80 @@
 "„git remote prune %s“, за да премахнете остарелите клони, които\n"
 "предизвикват конфликта"
 
-#: builtin/fetch.c:1101
+#: builtin/fetch.c:1127
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (обектът „%s“ ще се окаже извън клон)"
 
-#: builtin/fetch.c:1102
+#: builtin/fetch.c:1128
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (обектът „%s“ вече е извън клон)"
 
-#: builtin/fetch.c:1134
+#: builtin/fetch.c:1160
 msgid "[deleted]"
 msgstr "[изтрит]"
 
-#: builtin/fetch.c:1135 builtin/remote.c:1036
+#: builtin/fetch.c:1161 builtin/remote.c:1036
 msgid "(none)"
 msgstr "(нищо)"
 
-#: builtin/fetch.c:1158
+#: builtin/fetch.c:1184
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr "Не може да доставите в текущия клон „%s“ на хранилище, което не е голо"
 
-#: builtin/fetch.c:1177
+#: builtin/fetch.c:1203
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr "Стойността „%2$s“ за опцията „%1$s“ не е съвместима с „%3$s“"
 
-#: builtin/fetch.c:1180
+#: builtin/fetch.c:1206
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr "Опцията „%s“ се прескача при „%s“\n"
 
-#: builtin/fetch.c:1484
+#: builtin/fetch.c:1414
+msgid "multiple branch detected, incompatible with --set-upstream"
+msgstr ""
+"засечени са множество клони, това е несъвместимо с опцията „--set-upstream“"
+
+#: builtin/fetch.c:1429
+msgid "not setting upstream for a remote remote-tracking branch"
+msgstr "не може да указвате клон за следене на отдалечен етикет"
+
+#: builtin/fetch.c:1431
+msgid "not setting upstream for a remote tag"
+msgstr "не може да указвате клон за следене на отдалечен етикет"
+
+#: builtin/fetch.c:1433
+msgid "unknown branch type"
+msgstr "непознат вид клон"
+
+#: builtin/fetch.c:1435
+msgid ""
+"no source branch found.\n"
+"you need to specify exactly one branch with the --set-upstream option."
+msgstr ""
+"не е открит клон за следене.\n"
+"Трябва изрично да зададете един клон с опцията „--set-upstream option“."
+
+#: builtin/fetch.c:1561 builtin/fetch.c:1623
 #, c-format
 msgid "Fetching %s\n"
 msgstr "Доставяне на „%s“\n"
 
-#: builtin/fetch.c:1486 builtin/remote.c:100
+#: builtin/fetch.c:1571 builtin/fetch.c:1625 builtin/remote.c:100
 #, c-format
 msgid "Could not fetch %s"
 msgstr "„%s“ не може да се достави"
 
-#: builtin/fetch.c:1532
-msgid ""
-"--filter can only be used with the remote configured in extensions."
-"partialClone"
-msgstr ""
-"опцията „--filter“ може да се ползва само с отдалеченото хранилище указано в "
-"настройката „extensions.partialClone“"
+#: builtin/fetch.c:1583
+#, c-format
+msgid "could not fetch '%s' (exit code: %d)\n"
+msgstr "„%s“ не може да се достави (изходният код е: %d)\n"
 
-#: builtin/fetch.c:1556
+#: builtin/fetch.c:1685
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
@@ -13357,45 +13441,45 @@
 "Не сте указали отдалечено хранилище.  Задайте или адрес, или име\n"
 "на отдалечено хранилище, откъдето да се доставят новите версии."
 
-#: builtin/fetch.c:1593
+#: builtin/fetch.c:1722
 msgid "You need to specify a tag name."
 msgstr "Трябва да укажете име на етикет."
 
-#: builtin/fetch.c:1644
+#: builtin/fetch.c:1774
 msgid "Negative depth in --deepen is not supported"
 msgstr "Отрицателна дълбочина като аргумент на „--deepen“ не се поддържа"
 
-#: builtin/fetch.c:1646
+#: builtin/fetch.c:1776
 msgid "--deepen and --depth are mutually exclusive"
-msgstr "Опциите „--deepen“ и „--depth“ са несъвместими една с друга"
+msgstr "опциите „--deepen“ и „--depth“ са несъвместими"
 
-#: builtin/fetch.c:1651
+#: builtin/fetch.c:1781
 msgid "--depth and --unshallow cannot be used together"
 msgstr "опциите „--depth“ и „--unshallow“ са несъвместими"
 
-#: builtin/fetch.c:1653
+#: builtin/fetch.c:1783
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "не можете да използвате опцията „--unshallow“ върху пълно хранилище"
 
-#: builtin/fetch.c:1669
+#: builtin/fetch.c:1799
 msgid "fetch --all does not take a repository argument"
 msgstr "към „git fetch --all“ не можете да добавите аргумент — хранилище"
 
-#: builtin/fetch.c:1671
+#: builtin/fetch.c:1801
 msgid "fetch --all does not make sense with refspecs"
 msgstr ""
 "към „git fetch --all“ не можете да добавите аргумент — указател на версия"
 
-#: builtin/fetch.c:1680
+#: builtin/fetch.c:1810
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr "Няма нито отдалечено хранилище, нито група от хранилища на име „%s“"
 
-#: builtin/fetch.c:1687
+#: builtin/fetch.c:1817
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr "Указването на група и указването на версия са несъвместими"
 
-#: builtin/fetch.c:1703
+#: builtin/fetch.c:1835
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
@@ -13735,7 +13819,7 @@
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "неправилен параметър: очаква се SHA1, а бе получено: „%s“"
 
-#: builtin/gc.c:34
+#: builtin/gc.c:35
 msgid "git gc [<options>]"
 msgstr "git gc [ОПЦИЯ…]"
 
@@ -13749,17 +13833,17 @@
 msgid "failed to parse '%s' value '%s'"
 msgstr "стойността на „%s“ — „%s“ не може да се анализира"
 
-#: builtin/gc.c:476 builtin/init-db.c:55
+#: builtin/gc.c:475 builtin/init-db.c:55
 #, c-format
 msgid "cannot stat '%s'"
 msgstr "не може да се получи информация чрез „stat“ за директорията „%s“"
 
-#: builtin/gc.c:485 builtin/notes.c:240 builtin/tag.c:529
+#: builtin/gc.c:484 builtin/notes.c:240 builtin/tag.c:529
 #, c-format
 msgid "cannot read '%s'"
 msgstr "файлът „%s“ не може да бъде прочетен"
 
-#: builtin/gc.c:492
+#: builtin/gc.c:491
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -13776,58 +13860,58 @@
 "\n"
 "%s"
 
-#: builtin/gc.c:540
+#: builtin/gc.c:539
 msgid "prune unreferenced objects"
 msgstr "окастряне на обектите, към които нищо не сочи"
 
-#: builtin/gc.c:542
+#: builtin/gc.c:541
 msgid "be more thorough (increased runtime)"
 msgstr "изчерпателно търсене на боклука (за сметка на повече време работа)"
 
-#: builtin/gc.c:543
+#: builtin/gc.c:542
 msgid "enable auto-gc mode"
 msgstr "включване на автоматичното събиране на боклука (auto-gc)"
 
-#: builtin/gc.c:546
+#: builtin/gc.c:545
 msgid "force running gc even if there may be another gc running"
 msgstr ""
 "изрично стартиране на събирането на боклука, дори и ако вече работи друго "
 "събиране"
 
-#: builtin/gc.c:549
+#: builtin/gc.c:548
 msgid "repack all other packs except the largest pack"
 msgstr "препакетиране на всичко без най-големия пакет"
 
-#: builtin/gc.c:566
+#: builtin/gc.c:565
 #, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr "неразпозната стойност на „gc.logexpiry“ %s"
 
-#: builtin/gc.c:577
+#: builtin/gc.c:576
 #, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr "неразпозната стойност на периода за окастряне: %s"
 
-#: builtin/gc.c:597
+#: builtin/gc.c:596
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr ""
 "Автоматично пакетиране на заден фон на хранилището за по-добра "
 "производителност.\n"
 
-#: builtin/gc.c:599
+#: builtin/gc.c:598
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr "Автоматично пакетиране на хранилището за по-добра производителност.\n"
 
-#: builtin/gc.c:600
+#: builtin/gc.c:599
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr ""
 "Погледнете ръководството за повече информация как да изпълните „git help "
 "gc“.\n"
 
-#: builtin/gc.c:640
+#: builtin/gc.c:639
 #, c-format
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
@@ -13836,7 +13920,7 @@
 "процеса: %<PRIuMAX> (ако сте сигурни, че това не е вярно, това използвайте\n"
 "опцията „--force“)"
 
-#: builtin/gc.c:695
+#: builtin/gc.c:694
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr ""
@@ -13862,271 +13946,271 @@
 #. grep.threads
 #.
 #: builtin/grep.c:287 builtin/index-pack.c:1534 builtin/index-pack.c:1727
-#: builtin/pack-objects.c:2728
+#: builtin/pack-objects.c:2708
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "липсва поддръжка за нишки.  „%s“ ще се пренебрегне"
 
-#: builtin/grep.c:467 builtin/grep.c:591 builtin/grep.c:633
+#: builtin/grep.c:467 builtin/grep.c:592 builtin/grep.c:635
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "дървото не може да бъде прочетено (%s)"
 
-#: builtin/grep.c:648
+#: builtin/grep.c:650
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "не може да се изпълни „grep“ от обект от вида %s"
 
-#: builtin/grep.c:714
+#: builtin/grep.c:716
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "опцията „%c“ очаква число за аргумент"
 
-#: builtin/grep.c:813
+#: builtin/grep.c:815
 msgid "search in index instead of in the work tree"
 msgstr "търсене в индекса, а не в работното дърво"
 
-#: builtin/grep.c:815
+#: builtin/grep.c:817
 msgid "find in contents not managed by git"
 msgstr "търсене и във файловете, които не са под управлението на git"
 
-#: builtin/grep.c:817
+#: builtin/grep.c:819
 msgid "search in both tracked and untracked files"
 msgstr "търсене и в следените, и в неследените файлове"
 
-#: builtin/grep.c:819
+#: builtin/grep.c:821
 msgid "ignore files specified via '.gitignore'"
 msgstr "игнориране на файловете указани в „.gitignore“"
 
-#: builtin/grep.c:821
+#: builtin/grep.c:823
 msgid "recursively search in each submodule"
 msgstr "рекурсивно търсене във всички подмодули"
 
-#: builtin/grep.c:824
+#: builtin/grep.c:826
 msgid "show non-matching lines"
 msgstr "извеждане на редовете, които не съвпадат"
 
-#: builtin/grep.c:826
+#: builtin/grep.c:828
 msgid "case insensitive matching"
 msgstr "без значение на регистъра на буквите (главни/малки)"
 
-#: builtin/grep.c:828
+#: builtin/grep.c:830
 msgid "match patterns only at word boundaries"
 msgstr "напасване на шаблоните само по границите на думите"
 
-#: builtin/grep.c:830
+#: builtin/grep.c:832
 msgid "process binary files as text"
 msgstr "обработване на двоичните файлове като текстови"
 
-#: builtin/grep.c:832
+#: builtin/grep.c:834
 msgid "don't match patterns in binary files"
 msgstr "прескачане на двоичните файлове"
 
-#: builtin/grep.c:835
+#: builtin/grep.c:837
 msgid "process binary files with textconv filters"
 msgstr ""
 "обработване на двоичните файлове чрез филтри за преобразуване към текст"
 
-#: builtin/grep.c:837
+#: builtin/grep.c:839
 msgid "search in subdirectories (default)"
 msgstr "търсене в поддиректориите (стандартно)"
 
-#: builtin/grep.c:839
+#: builtin/grep.c:841
 msgid "descend at most <depth> levels"
 msgstr "навлизане максимално на тази ДЪЛБОЧИНА в дървото"
 
-#: builtin/grep.c:843
+#: builtin/grep.c:845
 msgid "use extended POSIX regular expressions"
 msgstr "разширени регулярни изрази по POSIX"
 
-#: builtin/grep.c:846
+#: builtin/grep.c:848
 msgid "use basic POSIX regular expressions (default)"
 msgstr "основни регулярни изрази по POSIX (стандартно)"
 
-#: builtin/grep.c:849
+#: builtin/grep.c:851
 msgid "interpret patterns as fixed strings"
 msgstr "шаблоните са дословни низове"
 
-#: builtin/grep.c:852
+#: builtin/grep.c:854
 msgid "use Perl-compatible regular expressions"
 msgstr "регулярни изрази на Perl"
 
-#: builtin/grep.c:855
+#: builtin/grep.c:857
 msgid "show line numbers"
 msgstr "извеждане на номерата на редовете"
 
-#: builtin/grep.c:856
+#: builtin/grep.c:858
 msgid "show column number of first match"
 msgstr "извеждане на номера на колоната на първото напасване"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:859
 msgid "don't show filenames"
 msgstr "без извеждане на имената на файловете"
 
-#: builtin/grep.c:858
+#: builtin/grep.c:860
 msgid "show filenames"
 msgstr "извеждане на имената на файловете"
 
-#: builtin/grep.c:860
+#: builtin/grep.c:862
 msgid "show filenames relative to top directory"
 msgstr ""
 "извеждане на относителните имена на файловете спрямо основната директория на "
 "хранилището"
 
-#: builtin/grep.c:862
+#: builtin/grep.c:864
 msgid "show only filenames instead of matching lines"
 msgstr "извеждане само на имената на файловете без напасващите редове"
 
-#: builtin/grep.c:864
+#: builtin/grep.c:866
 msgid "synonym for --files-with-matches"
 msgstr "псевдоним на „--files-with-matches“"
 
-#: builtin/grep.c:867
+#: builtin/grep.c:869
 msgid "show only the names of files without match"
 msgstr ""
 "извеждане само на имената на файловете, които не съдържат ред, напасващ на "
 "шаблона"
 
-#: builtin/grep.c:869
+#: builtin/grep.c:871
 msgid "print NUL after filenames"
 msgstr "извеждане на нулевия знак „NUL“ след всяко име на файл"
 
-#: builtin/grep.c:872
+#: builtin/grep.c:874
 msgid "show only matching parts of a line"
 msgstr "извеждане само на частите на редовете, които съвпадат"
 
-#: builtin/grep.c:874
+#: builtin/grep.c:876
 msgid "show the number of matches instead of matching lines"
 msgstr "извеждане на броя на съвпаденията вместо напасващите редове"
 
-#: builtin/grep.c:875
+#: builtin/grep.c:877
 msgid "highlight matches"
 msgstr "оцветяване на напасванията"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:879
 msgid "print empty line between matches from different files"
 msgstr "извеждане на празен ред между напасванията от различни файлове"
 
-#: builtin/grep.c:879
+#: builtin/grep.c:881
 msgid "show filename only once above matches from same file"
 msgstr ""
 "извеждане на името на файла само веднъж за всички напасвания от този файл"
 
-#: builtin/grep.c:882
+#: builtin/grep.c:884
 msgid "show <n> context lines before and after matches"
 msgstr "извеждане на такъв БРОЙ редове преди и след напасванията"
 
-#: builtin/grep.c:885
+#: builtin/grep.c:887
 msgid "show <n> context lines before matches"
 msgstr "извеждане на такъв БРОЙ редове преди напасванията"
 
-#: builtin/grep.c:887
+#: builtin/grep.c:889
 msgid "show <n> context lines after matches"
 msgstr "извеждане на такъв БРОЙ редове след напасванията"
 
-#: builtin/grep.c:889
+#: builtin/grep.c:891
 msgid "use <n> worker threads"
 msgstr "използване на такъв БРОЙ работещи нишки"
 
-#: builtin/grep.c:890
+#: builtin/grep.c:892
 msgid "shortcut for -C NUM"
 msgstr "псевдоним на „-C БРОЙ“"
 
-#: builtin/grep.c:893
+#: builtin/grep.c:895
 msgid "show a line with the function name before matches"
 msgstr "извеждане на ред с името на функцията, в която е напаснат шаблона"
 
-#: builtin/grep.c:895
+#: builtin/grep.c:897
 msgid "show the surrounding function"
 msgstr "извеждане на обхващащата функция"
 
-#: builtin/grep.c:898
+#: builtin/grep.c:900
 msgid "read patterns from file"
 msgstr "изчитане на шаблоните от ФАЙЛ"
 
-#: builtin/grep.c:900
+#: builtin/grep.c:902
 msgid "match <pattern>"
 msgstr "напасване на ШАБЛОН"
 
-#: builtin/grep.c:902
+#: builtin/grep.c:904
 msgid "combine patterns specified with -e"
 msgstr "комбиниране на шаблоните указани с опцията „-e“"
 
-#: builtin/grep.c:914
+#: builtin/grep.c:916
 msgid "indicate hit with exit status without output"
 msgstr ""
 "без извеждане на стандартния изход.  Изходният код указва наличието на "
 "напасване"
 
-#: builtin/grep.c:916
+#: builtin/grep.c:918
 msgid "show only matches from files that match all patterns"
 msgstr ""
 "извеждане на редове само от файловете, които напасват на всички шаблони"
 
-#: builtin/grep.c:918
+#: builtin/grep.c:920
 msgid "show parse tree for grep expression"
 msgstr "извеждане на дървото за анализ на регулярния израз"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:924
 msgid "pager"
 msgstr "програма за преглед по страници"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:924
 msgid "show matching files in the pager"
 msgstr "извеждане на съвпадащите файлове в програма за преглед по страници"
 
-#: builtin/grep.c:926
+#: builtin/grep.c:928
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr ""
 "позволяване на стартирането на grep(1) (текущият компилат пренебрегва тази "
 "опция)"
 
-#: builtin/grep.c:990
+#: builtin/grep.c:992
 msgid "no pattern given"
 msgstr "не сте задали шаблон"
 
-#: builtin/grep.c:1026
+#: builtin/grep.c:1028
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr "опциите „--cached“ и „--untracked“ са несъвместими с версии."
 
-#: builtin/grep.c:1034
+#: builtin/grep.c:1036
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "версията „%s“ не може бъде открита"
 
-#: builtin/grep.c:1065
+#: builtin/grep.c:1067
 msgid "invalid option combination, ignoring --threads"
 msgstr "неправилна комбинация от опции, „--threads“ ще се пренебрегне"
 
-#: builtin/grep.c:1068 builtin/pack-objects.c:3416
+#: builtin/grep.c:1070 builtin/pack-objects.c:3400
 msgid "no threads support, ignoring --threads"
 msgstr "липсва поддръжка за нишки.  „--threads“ ще се пренебрегне"
 
-#: builtin/grep.c:1071 builtin/index-pack.c:1531 builtin/pack-objects.c:2725
+#: builtin/grep.c:1073 builtin/index-pack.c:1531 builtin/pack-objects.c:2705
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "зададен е неправилен брой нишки: %d"
 
-#: builtin/grep.c:1094
+#: builtin/grep.c:1096
 msgid "--open-files-in-pager only works on the worktree"
 msgstr ""
 "опцията „--open-files-in-pager“ е съвместима само с търсене в работното дърво"
 
-#: builtin/grep.c:1117
+#: builtin/grep.c:1119
 msgid "option not supported with --recurse-submodules"
 msgstr "опцията е несъвместима с „--recurse-submodules“"
 
-#: builtin/grep.c:1123
+#: builtin/grep.c:1125
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr "опциите „--cached“ и „--untracked“ са несъвместими с „--no-index“"
 
-#: builtin/grep.c:1129
+#: builtin/grep.c:1131
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr ""
 "опциите „--(no-)exclude-standard“ са несъвместими с търсене по следени "
 "файлове"
 
-#: builtin/grep.c:1137
+#: builtin/grep.c:1139
 msgid "both --cached and trees are given"
 msgstr "опцията „--cached“ е несъвместима със задаване на дърво"
 
@@ -14446,7 +14530,7 @@
 msgid "Resolving deltas"
 msgstr "Откриване на съответните разлики"
 
-#: builtin/index-pack.c:1205 builtin/pack-objects.c:2497
+#: builtin/index-pack.c:1205 builtin/pack-objects.c:2481
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "не може да се създаде нишка: %s"
@@ -14516,7 +14600,7 @@
 msgid "cannot store index file"
 msgstr "файлът за индекса не може да бъде съхранен"
 
-#: builtin/index-pack.c:1525 builtin/pack-objects.c:2736
+#: builtin/index-pack.c:1525 builtin/pack-objects.c:2716
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "зададена е неправилна версия пакетиране: „pack.indexversion=%<PRIu32>“"
@@ -14804,74 +14888,74 @@
 msgid "git show %s: bad file"
 msgstr "git show %s: повреден файл"
 
-#: builtin/log.c:549 builtin/log.c:643
+#: builtin/log.c:549 builtin/log.c:644
 #, c-format
 msgid "could not read object %s"
 msgstr "обектът не може да бъде прочетен: %s"
 
-#: builtin/log.c:668
+#: builtin/log.c:669
 #, c-format
 msgid "unknown type: %d"
 msgstr "неизвестен вид: %d"
 
-#: builtin/log.c:791
+#: builtin/log.c:792
 msgid "format.headers without value"
 msgstr "не е зададена стойност на „format.headers“"
 
-#: builtin/log.c:908
+#: builtin/log.c:909
 msgid "name of output directory is too long"
 msgstr "прекалено дълго име на директорията за изходната информация"
 
-#: builtin/log.c:924
+#: builtin/log.c:925
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "файлът-кръпка „%s“ не може да бъде отворен"
 
-#: builtin/log.c:941
+#: builtin/log.c:942
 msgid "need exactly one range"
 msgstr "трябва да зададете точно един диапазон"
 
-#: builtin/log.c:951
+#: builtin/log.c:952
 msgid "not a range"
 msgstr "не е диапазон"
 
-#: builtin/log.c:1074
+#: builtin/log.c:1075
 msgid "cover letter needs email format"
 msgstr "придружаващото писмо трябва да е форматирано като е-писмо"
 
-#: builtin/log.c:1080
+#: builtin/log.c:1081
 msgid "failed to create cover-letter file"
 msgstr "неуспешно създаване на придружаващо писмо"
 
-#: builtin/log.c:1159
+#: builtin/log.c:1160
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "неправилен формат на заглавната част за отговор „in-reply-to“: %s"
 
-#: builtin/log.c:1186
+#: builtin/log.c:1187
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [ОПЦИЯ…] [ОТ | ДИАПАЗОН_НА_ВЕРСИИТЕ]"
 
-#: builtin/log.c:1244
+#: builtin/log.c:1245
 msgid "two output directories?"
 msgstr "може да укажете максимум една директория за изход"
 
-#: builtin/log.c:1355 builtin/log.c:2099 builtin/log.c:2101 builtin/log.c:2113
+#: builtin/log.c:1356 builtin/log.c:2116 builtin/log.c:2118 builtin/log.c:2130
 #, c-format
 msgid "unknown commit %s"
 msgstr "непознато подаване: „%s“"
 
-#: builtin/log.c:1365 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1366 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "„%s“ не е указател или не сочи към нищо"
 
-#: builtin/log.c:1370
+#: builtin/log.c:1371
 msgid "could not find exact merge base"
 msgstr "точната база за сливане не може да бъде открита"
 
-#: builtin/log.c:1374
+#: builtin/log.c:1375
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -14881,281 +14965,281 @@
 "зададете, използвайте „git branch --set-upstream-to“.\n"
 "Можете ръчно да зададете базово подаване чрез „--base=<base-commit-id>“."
 
-#: builtin/log.c:1394
+#: builtin/log.c:1395
 msgid "failed to find exact merge base"
 msgstr "точната база при сливане не може да бъде открита"
 
-#: builtin/log.c:1405
+#: builtin/log.c:1406
 msgid "base commit should be the ancestor of revision list"
 msgstr "базовото подаване трябва да е предшественикът на списъка с версиите"
 
-#: builtin/log.c:1409
+#: builtin/log.c:1410
 msgid "base commit shouldn't be in revision list"
 msgstr "базовото подаване не може да е в списъка с версиите"
 
-#: builtin/log.c:1462
+#: builtin/log.c:1463
 msgid "cannot get patch id"
 msgstr "идентификаторът на кръпката не може да бъде получен"
 
-#: builtin/log.c:1514
+#: builtin/log.c:1515
 msgid "failed to infer range-diff ranges"
 msgstr "неуспешно определяне на диапазоните за разлика"
 
-#: builtin/log.c:1559
+#: builtin/log.c:1560
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "номерация „[PATCH n/m]“ дори и при единствена кръпка"
 
-#: builtin/log.c:1562
+#: builtin/log.c:1563
 msgid "use [PATCH] even with multiple patches"
 msgstr "номерация „[PATCH]“ дори и при множество кръпки"
 
-#: builtin/log.c:1566
+#: builtin/log.c:1567
 msgid "print patches to standard out"
 msgstr "извеждане на кръпките на стандартния изход"
 
-#: builtin/log.c:1568
+#: builtin/log.c:1569
 msgid "generate a cover letter"
 msgstr "създаване на придружаващо писмо"
 
-#: builtin/log.c:1570
+#: builtin/log.c:1571
 msgid "use simple number sequence for output file names"
 msgstr "проста числова последователност за имената на файловете-кръпки"
 
-#: builtin/log.c:1571
+#: builtin/log.c:1572
 msgid "sfx"
 msgstr "ЗНАЦИ"
 
-#: builtin/log.c:1572
+#: builtin/log.c:1573
 msgid "use <sfx> instead of '.patch'"
 msgstr "използване на тези ЗНАЦИ за суфикс вместо „.patch“"
 
-#: builtin/log.c:1574
+#: builtin/log.c:1575
 msgid "start numbering patches at <n> instead of 1"
 msgstr "номерирането на кръпките да започва от този БРОЙ, а не с 1"
 
-#: builtin/log.c:1576
+#: builtin/log.c:1577
 msgid "mark the series as Nth re-roll"
 msgstr "отбелязване, че това е N-тата поредна редакция на поредицата от кръпки"
 
-#: builtin/log.c:1578
+#: builtin/log.c:1579
 msgid "Use [RFC PATCH] instead of [PATCH]"
 msgstr "Използване на „[RFC PATCH]“ вместо „[PATCH]“"
 
-#: builtin/log.c:1581
+#: builtin/log.c:1582
 msgid "Use [<prefix>] instead of [PATCH]"
 msgstr "Използване на този „[ПРЕФИКС]“ вместо „[PATCH]“"
 
-#: builtin/log.c:1584
+#: builtin/log.c:1585
 msgid "store resulting files in <dir>"
 msgstr "запазване на изходните файлове в тази ДИРЕКТОРИЯ"
 
-#: builtin/log.c:1587
+#: builtin/log.c:1588
 msgid "don't strip/add [PATCH]"
 msgstr "без добавяне/махане на префикса „[PATCH]“"
 
-#: builtin/log.c:1590
+#: builtin/log.c:1591
 msgid "don't output binary diffs"
 msgstr "без извеждане на разлики между двоични файлове"
 
-#: builtin/log.c:1592
+#: builtin/log.c:1593
 msgid "output all-zero hash in From header"
 msgstr "в заглавната част „From:“ (от) контролната сума да е само от нули"
 
-#: builtin/log.c:1594
+#: builtin/log.c:1595
 msgid "don't include a patch matching a commit upstream"
 msgstr "без кръпки, които присъстват в следения клон"
 
-#: builtin/log.c:1596
+#: builtin/log.c:1597
 msgid "show patch format instead of default (patch + stat)"
 msgstr ""
 "извеждане във формат за кръпки, а на в стандартния (кръпка и статистика)"
 
-#: builtin/log.c:1598
+#: builtin/log.c:1599
 msgid "Messaging"
 msgstr "Опции при изпращане"
 
-#: builtin/log.c:1599
+#: builtin/log.c:1600
 msgid "header"
 msgstr "ЗАГЛАВНА_ЧАСТ"
 
-#: builtin/log.c:1600
+#: builtin/log.c:1601
 msgid "add email header"
 msgstr "добавяне на тази ЗАГЛАВНА_ЧАСТ"
 
-#: builtin/log.c:1601 builtin/log.c:1603
+#: builtin/log.c:1602 builtin/log.c:1604
 msgid "email"
 msgstr "Е-ПОЩА"
 
-#: builtin/log.c:1601
+#: builtin/log.c:1602
 msgid "add To: header"
 msgstr "добавяне на заглавна част „To:“ (до)"
 
-#: builtin/log.c:1603
+#: builtin/log.c:1604
 msgid "add Cc: header"
 msgstr "добавяне на заглавна част „Cc:“ (и до)"
 
-#: builtin/log.c:1605
+#: builtin/log.c:1606
 msgid "ident"
 msgstr "ИДЕНТИЧНОСТ"
 
-#: builtin/log.c:1606
+#: builtin/log.c:1607
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 "задаване на адреса в заглавната част „From“ (от) да е тази ИДЕНТИЧНОСТ.  Ако "
 "не е зададена такава, се взима адреса на подаващия"
 
-#: builtin/log.c:1608
+#: builtin/log.c:1609
 msgid "message-id"
 msgstr "ИДЕНТИФИКАТОР_НА_СЪОБЩЕНИЕ"
 
-#: builtin/log.c:1609
+#: builtin/log.c:1610
 msgid "make first mail a reply to <message-id>"
 msgstr ""
 "първото съобщение да е в отговор на е-писмото с този "
 "ИДЕНТИФИКАТОР_НА_СЪОБЩЕНИЕ"
 
-#: builtin/log.c:1610 builtin/log.c:1613
+#: builtin/log.c:1611 builtin/log.c:1614
 msgid "boundary"
 msgstr "граница"
 
-#: builtin/log.c:1611
+#: builtin/log.c:1612
 msgid "attach the patch"
 msgstr "прикрепяне на кръпката"
 
-#: builtin/log.c:1614
+#: builtin/log.c:1615
 msgid "inline the patch"
 msgstr "включване на кръпката в текста на писмата"
 
-#: builtin/log.c:1618
+#: builtin/log.c:1619
 msgid "enable message threading, styles: shallow, deep"
 msgstr ""
 "използване на нишки за съобщенията.  СТИЛът е „shallow“ (плитък) или "
 "„deep“ (дълбок)"
 
-#: builtin/log.c:1620
+#: builtin/log.c:1621
 msgid "signature"
 msgstr "подпис"
 
-#: builtin/log.c:1621
+#: builtin/log.c:1622
 msgid "add a signature"
 msgstr "добавяне на поле за подпис"
 
-#: builtin/log.c:1622
+#: builtin/log.c:1623
 msgid "base-commit"
 msgstr "БАЗОВО_ПОДАВАНЕ"
 
-#: builtin/log.c:1623
+#: builtin/log.c:1624
 msgid "add prerequisite tree info to the patch series"
 msgstr "добавяне на необходимото БАЗово дърво към поредицата от кръпки"
 
-#: builtin/log.c:1625
+#: builtin/log.c:1626
 msgid "add a signature from a file"
 msgstr "добавяне на подпис от файл"
 
-#: builtin/log.c:1626
+#: builtin/log.c:1627
 msgid "don't print the patch filenames"
 msgstr "без извеждане на имената на кръпките"
 
-#: builtin/log.c:1628
+#: builtin/log.c:1629
 msgid "show progress while generating patches"
 msgstr "извеждане на напредъка във фазата на създаване на кръпките"
 
-#: builtin/log.c:1630
+#: builtin/log.c:1631
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr ""
 "показване на промените спрямо ВЕРСията в придружаващото писмо или единствена "
 "кръпка"
 
-#: builtin/log.c:1633
+#: builtin/log.c:1634
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
 "показване на промените спрямо указателя на ВЕРСията в придружаващото писмо "
 "или единствена кръпка"
 
-#: builtin/log.c:1635
+#: builtin/log.c:1636
 msgid "percentage by which creation is weighted"
 msgstr "процент за претегляне при оценка на създаването"
 
-#: builtin/log.c:1710
+#: builtin/log.c:1711
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "грешна идентичност: %s"
 
-#: builtin/log.c:1725
+#: builtin/log.c:1726
 msgid "-n and -k are mutually exclusive"
 msgstr "опциите „-n“ и „-k“ са несъвместими"
 
-#: builtin/log.c:1727
+#: builtin/log.c:1728
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr "опциите „--subject-prefix“/„-rfc“ и „-k“ са несъвместими"
 
-#: builtin/log.c:1735
+#: builtin/log.c:1736
 msgid "--name-only does not make sense"
 msgstr "опцията „--name-only“ е несъвместима с генерирането на кръпки"
 
-#: builtin/log.c:1737
+#: builtin/log.c:1738
 msgid "--name-status does not make sense"
 msgstr "опцията „--name-status“ е несъвместима с генерирането на кръпки"
 
-#: builtin/log.c:1739
+#: builtin/log.c:1740
 msgid "--check does not make sense"
 msgstr "опцията „--check“ е несъвместима с генерирането на кръпки"
 
-#: builtin/log.c:1771
+#: builtin/log.c:1773
 msgid "standard output, or directory, which one?"
 msgstr ""
 "изходът може да или стандартният, или да е в директория, но не и двете."
 
-#: builtin/log.c:1860
+#: builtin/log.c:1877
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr ""
 "опцията „--interdiff“ изисква опция „--cover-letter“ или единствена кръпка"
 
-#: builtin/log.c:1864
+#: builtin/log.c:1881
 msgid "Interdiff:"
 msgstr "Разлика в разликите:"
 
-#: builtin/log.c:1865
+#: builtin/log.c:1882
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Разлика в разликите спрямо v%d:"
 
-#: builtin/log.c:1871
+#: builtin/log.c:1888
 msgid "--creation-factor requires --range-diff"
 msgstr "опцията „--creation-factor“ изисква опция „--range-diff“"
 
-#: builtin/log.c:1875
+#: builtin/log.c:1892
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr ""
 "опцията „--range-diff“ изисква опция „--cover-letter“ или единствена кръпка"
 
-#: builtin/log.c:1883
+#: builtin/log.c:1900
 msgid "Range-diff:"
 msgstr "Диапазонна разлика:"
 
-#: builtin/log.c:1884
+#: builtin/log.c:1901
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "Диапазонна разлика спрямо v%d:"
 
-#: builtin/log.c:1895
+#: builtin/log.c:1912
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "файлът „%s“ с подпис не може да бъде прочетен"
 
-#: builtin/log.c:1931
+#: builtin/log.c:1948
 msgid "Generating patches"
 msgstr "Създаване на кръпки"
 
-#: builtin/log.c:1975
+#: builtin/log.c:1992
 msgid "failed to create output files"
 msgstr "неуспешно създаване на изходни файлове"
 
-#: builtin/log.c:2034
+#: builtin/log.c:2051
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [ОТДАЛЕЧЕН_КЛОН [ВРЪХ [ПРЕДЕЛ]]]"
 
-#: builtin/log.c:2088
+#: builtin/log.c:2105
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -15283,7 +15367,7 @@
 msgid "do not print remote URL"
 msgstr "без извеждане на адресите на отдалечените хранилища"
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1464
+#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1488
 msgid "exec"
 msgstr "КОМАНДА"
 
@@ -15394,33 +15478,33 @@
 msgid "Available custom strategies are:"
 msgstr "Допълнителните стратегии са:"
 
-#: builtin/merge.c:244 builtin/pull.c:151
+#: builtin/merge.c:244 builtin/pull.c:152
 msgid "do not show a diffstat at the end of the merge"
 msgstr "без извеждане на статистиката след завършване на сливане"
 
-#: builtin/merge.c:247 builtin/pull.c:154
+#: builtin/merge.c:247 builtin/pull.c:155
 msgid "show a diffstat at the end of the merge"
 msgstr "извеждане на статистиката след завършване на сливане"
 
-#: builtin/merge.c:248 builtin/pull.c:157
+#: builtin/merge.c:248 builtin/pull.c:158
 msgid "(synonym to --stat)"
 msgstr "(псевдоним на „--stat“)"
 
-#: builtin/merge.c:250 builtin/pull.c:160
+#: builtin/merge.c:250 builtin/pull.c:161
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr ""
 "добавяне (на максимум такъв БРОЙ) записи от съкратения журнал в съобщението "
 "за подаване"
 
-#: builtin/merge.c:253 builtin/pull.c:166
+#: builtin/merge.c:253 builtin/pull.c:167
 msgid "create a single commit instead of doing a merge"
 msgstr "създаване на едно подаване вместо извършване на сливане"
 
-#: builtin/merge.c:255 builtin/pull.c:169
+#: builtin/merge.c:255 builtin/pull.c:170
 msgid "perform a commit if the merge succeeds (default)"
 msgstr "извършване на подаване при успешно сливане (стандартно действие)"
 
-#: builtin/merge.c:257 builtin/pull.c:172
+#: builtin/merge.c:257 builtin/pull.c:173
 msgid "edit message before committing"
 msgstr "редактиране на съобщението преди подаване"
 
@@ -15428,28 +15512,28 @@
 msgid "allow fast-forward (default)"
 msgstr "позволяване на превъртане (стандартно действие)"
 
-#: builtin/merge.c:261 builtin/pull.c:179
+#: builtin/merge.c:261 builtin/pull.c:180
 msgid "abort if fast-forward is not possible"
 msgstr "преустановяване, ако превъртането е невъзможно"
 
-#: builtin/merge.c:265 builtin/pull.c:182
+#: builtin/merge.c:265 builtin/pull.c:183
 msgid "verify that the named commit has a valid GPG signature"
 msgstr "проверка, че указаното подаване е с правилен подпис на GPG"
 
-#: builtin/merge.c:266 builtin/notes.c:787 builtin/pull.c:186
-#: builtin/rebase.c:492 builtin/rebase.c:1477 builtin/revert.c:114
+#: builtin/merge.c:266 builtin/notes.c:787 builtin/pull.c:187
+#: builtin/rebase.c:493 builtin/rebase.c:1501 builtin/revert.c:114
 msgid "strategy"
 msgstr "СТРАТЕГИЯ"
 
-#: builtin/merge.c:267 builtin/pull.c:187
+#: builtin/merge.c:267 builtin/pull.c:188
 msgid "merge strategy to use"
 msgstr "СТРАТЕГИЯ за сливане, която да се ползва"
 
-#: builtin/merge.c:268 builtin/pull.c:190
+#: builtin/merge.c:268 builtin/pull.c:191
 msgid "option=value"
 msgstr "ОПЦИЯ=СТОЙНОСТ"
 
-#: builtin/merge.c:269 builtin/pull.c:191
+#: builtin/merge.c:269 builtin/pull.c:192
 msgid "option for selected merge strategy"
 msgstr "ОПЦИЯ за избраната стратегия за сливане"
 
@@ -15469,14 +15553,15 @@
 msgid "continue the current in-progress merge"
 msgstr "продължаване на текущото сливане"
 
-#: builtin/merge.c:284 builtin/pull.c:198
+#: builtin/merge.c:284 builtin/pull.c:199
 msgid "allow merging unrelated histories"
 msgstr "позволяване на сливане на независими истории"
 
 #: builtin/merge.c:290
-msgid "verify commit-msg hook"
+msgid "bypass pre-merge-commit and commit-msg hooks"
 msgstr ""
-"проверка на куката при промяна на съобщението при подаване (commit-msg)"
+"без изпълнение на куките преди подаване и сливане и при промяна на "
+"съобщението за подаване (pre-merge-commit и commit-msg)"
 
 #: builtin/merge.c:307
 msgid "could not run stash."
@@ -15520,33 +15605,33 @@
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "Неправилен низ за настройката „branch.%s.mergeoptions“: „%s“"
 
-#: builtin/merge.c:708
+#: builtin/merge.c:705
 msgid "Not handling anything other than two heads merge."
 msgstr "Поддържа се само сливане на точно две истории."
 
-#: builtin/merge.c:722
+#: builtin/merge.c:719
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr "Непозната опция за рекурсивното сливане „merge-recursive“: „-X%s“"
 
-#: builtin/merge.c:737
+#: builtin/merge.c:734
 #, c-format
 msgid "unable to write %s"
 msgstr "„%s“ не може да бъде записан"
 
-#: builtin/merge.c:789
+#: builtin/merge.c:786
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "От „%s“ не може да се чете"
 
-#: builtin/merge.c:798
+#: builtin/merge.c:795
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr ""
 "Сливането няма да бъде подадено.  За завършването му и подаването му "
 "използвайте командата „git commit“.\n"
 
-#: builtin/merge.c:804
+#: builtin/merge.c:801
 msgid ""
 "Please enter a commit message to explain why this merge is necessary,\n"
 "especially if it merges an updated upstream into a topic branch.\n"
@@ -15555,11 +15640,11 @@
 "В съобщението при подаване добавете информация за причината за\n"
 "сливането, особено ако сливате обновен отдалечен клон в тематичен клон.\n"
 
-#: builtin/merge.c:809
+#: builtin/merge.c:806
 msgid "An empty message aborts the commit.\n"
 msgstr "Празно съобщение предотвратява подаването.\n"
 
-#: builtin/merge.c:812
+#: builtin/merge.c:809
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -15568,76 +15653,76 @@
 "Редовете, които започват с „%c“, ще бъдат пропуснати, а празно\n"
 "съобщение преустановява подаването.\n"
 
-#: builtin/merge.c:853
+#: builtin/merge.c:862
 msgid "Empty commit message."
 msgstr "Празно съобщение при подаване."
 
-#: builtin/merge.c:872
+#: builtin/merge.c:877
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Първият етап на сливането завърши.\n"
 
-#: builtin/merge.c:933
+#: builtin/merge.c:938
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 "Неуспешно автоматично сливане — коригирайте конфликтите и подайте "
 "резултата.\n"
 
-#: builtin/merge.c:972
+#: builtin/merge.c:977
 msgid "No current branch."
 msgstr "Няма текущ клон."
 
-#: builtin/merge.c:974
+#: builtin/merge.c:979
 msgid "No remote for the current branch."
 msgstr "Текущият клон не следи никой."
 
-#: builtin/merge.c:976
+#: builtin/merge.c:981
 msgid "No default upstream defined for the current branch."
 msgstr "Текущият клон не следи никой клон."
 
-#: builtin/merge.c:981
+#: builtin/merge.c:986
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "Никой клон не следи клона „%s“ от хранилището „%s“"
 
-#: builtin/merge.c:1038
+#: builtin/merge.c:1043
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Неправилна стойност „%s“ в средата „%s“"
 
-#: builtin/merge.c:1141
+#: builtin/merge.c:1146
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "не може да се слее в „%s“: %s"
 
-#: builtin/merge.c:1175
+#: builtin/merge.c:1180
 msgid "not something we can merge"
 msgstr "не може да се слее"
 
-#: builtin/merge.c:1278
+#: builtin/merge.c:1283
 msgid "--abort expects no arguments"
 msgstr "опцията „--abort“ не приема аргументи"
 
-#: builtin/merge.c:1282
+#: builtin/merge.c:1287
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr ""
 "Не може да преустановите сливане, защото в момента не се извършва такова "
 "(липсва указател „MERGE_HEAD“)."
 
-#: builtin/merge.c:1291
+#: builtin/merge.c:1296
 msgid "--quit expects no arguments"
 msgstr "опцията „--quit“ не приема аргументи"
 
-#: builtin/merge.c:1304
+#: builtin/merge.c:1309
 msgid "--continue expects no arguments"
 msgstr "опцията „--continue“ не приема аргументи"
 
-#: builtin/merge.c:1308
+#: builtin/merge.c:1313
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "В момента не се извършва сливане (липсва указател „MERGE_HEAD“)."
 
-#: builtin/merge.c:1324
+#: builtin/merge.c:1329
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -15645,7 +15730,7 @@
 "Не сте завършили сливане.  (Указателят „MERGE_HEAD“ съществува).\n"
 "Подайте промените си, преди да започнете ново сливане."
 
-#: builtin/merge.c:1331
+#: builtin/merge.c:1336
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -15653,103 +15738,103 @@
 "Не сте завършили отбиране на подаване (указателят „CHERRY_PICK_HEAD“\n"
 "съществува).  Подайте промените си, преди да започнете ново сливане."
 
-#: builtin/merge.c:1334
+#: builtin/merge.c:1339
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr ""
 "Не сте завършили отбиране на подаване (указателят „CHERRY_PICK_HEAD“\n"
 "съществува)."
 
-#: builtin/merge.c:1348
+#: builtin/merge.c:1353
 msgid "You cannot combine --squash with --no-ff."
 msgstr "Опцията „--squash“ е несъвместима с „--no-ff“."
 
-#: builtin/merge.c:1350
+#: builtin/merge.c:1355
 msgid "You cannot combine --squash with --commit."
 msgstr "Опцията „--squash“ е несъвместима с „--commit“."
 
-#: builtin/merge.c:1366
+#: builtin/merge.c:1371
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr ""
 "Не е указано подаване и настройката „merge.defaultToUpstream“ не е зададена."
 
-#: builtin/merge.c:1383
+#: builtin/merge.c:1388
 msgid "Squash commit into empty head not supported yet"
 msgstr "Вкарване на подаване във връх без история все още не се поддържа"
 
-#: builtin/merge.c:1385
+#: builtin/merge.c:1390
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr ""
 "Понеже върхът е без история, всички сливания са превъртания, не може да се "
 "извърши същинско сливане изисквано от опцията „--no-ff“"
 
-#: builtin/merge.c:1390
+#: builtin/merge.c:1395
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "„%s“ — не е нещо, което може да се слее"
 
-#: builtin/merge.c:1392
+#: builtin/merge.c:1397
 msgid "Can merge only exactly one commit into empty head"
 msgstr "Можете да слеете точно едно подаване във връх без история"
 
-#: builtin/merge.c:1471
+#: builtin/merge.c:1476
 msgid "refusing to merge unrelated histories"
 msgstr "независими истории не може да се слеят"
 
-#: builtin/merge.c:1480
+#: builtin/merge.c:1485
 msgid "Already up to date."
 msgstr "Вече е обновено."
 
-#: builtin/merge.c:1490
+#: builtin/merge.c:1495
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Обновяване „%s..%s“\n"
 
-#: builtin/merge.c:1532
+#: builtin/merge.c:1537
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "Проба със сливане в рамките на индекса…\n"
 
-#: builtin/merge.c:1539
+#: builtin/merge.c:1544
 #, c-format
 msgid "Nope.\n"
 msgstr "Неуспешно сливане.\n"
 
-#: builtin/merge.c:1564
+#: builtin/merge.c:1569
 msgid "Already up to date. Yeeah!"
 msgstr "Вече е обновено!"
 
-#: builtin/merge.c:1570
+#: builtin/merge.c:1575
 msgid "Not possible to fast-forward, aborting."
 msgstr "Не може да се извърши превъртане, преустановяване на действието."
 
-#: builtin/merge.c:1593 builtin/merge.c:1658
+#: builtin/merge.c:1598 builtin/merge.c:1663
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Привеждане на дървото към първоначалното…\n"
 
-#: builtin/merge.c:1597
+#: builtin/merge.c:1602
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Пробване със стратегията за сливане „%s“…\n"
 
-#: builtin/merge.c:1649
+#: builtin/merge.c:1654
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Никоя стратегия за сливане не може да извърши сливането.\n"
 
-#: builtin/merge.c:1651
+#: builtin/merge.c:1656
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "Неуспешно сливане със стратегия „%s“.\n"
 
-#: builtin/merge.c:1660
+#: builtin/merge.c:1665
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr ""
 "Ползва се стратегията „%s“, която ще подготви дървото за коригиране на "
 "ръка.\n"
 
-#: builtin/merge.c:1672
+#: builtin/merge.c:1677
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
@@ -15837,33 +15922,33 @@
 msgid "set labels for file1/orig-file/file2"
 msgstr "задаване на етикети за ФАЙЛ_1/ОРИГИНАЛ/ФАЙЛ_2"
 
-#: builtin/merge-recursive.c:46
+#: builtin/merge-recursive.c:47
 #, c-format
 msgid "unknown option %s"
 msgstr "непозната опция: „%s“"
 
-#: builtin/merge-recursive.c:52
+#: builtin/merge-recursive.c:53
 #, c-format
 msgid "could not parse object '%s'"
 msgstr "неуспешен анализ на обекта „%s“"
 
-#: builtin/merge-recursive.c:56
+#: builtin/merge-recursive.c:57
 #, c-format
 msgid "cannot handle more than %d base. Ignoring %s."
 msgid_plural "cannot handle more than %d bases. Ignoring %s."
 msgstr[0] "не се поддържа повече от %d база.  „%s“ се прескача."
 msgstr[1] "не се поддържат повече от %d бази.  „%s“ се прескача."
 
-#: builtin/merge-recursive.c:64
+#: builtin/merge-recursive.c:65
 msgid "not handling anything other than two heads merge."
 msgstr "поддържа се само сливане на точно две истории."
 
-#: builtin/merge-recursive.c:70 builtin/merge-recursive.c:72
+#: builtin/merge-recursive.c:74 builtin/merge-recursive.c:76
 #, c-format
 msgid "could not resolve ref '%s'"
 msgstr "указателят „%s“ не може да бъде изтрит"
 
-#: builtin/merge-recursive.c:78
+#: builtin/merge-recursive.c:82
 #, c-format
 msgid "Merging %s with %s\n"
 msgstr "Сливане на „%s“ с „%s“\n"
@@ -16008,54 +16093,54 @@
 msgid "Renaming %s to %s\n"
 msgstr "Преименуване на „%s“ на „%s“\n"
 
-#: builtin/mv.c:277 builtin/remote.c:717 builtin/repack.c:510
+#: builtin/mv.c:277 builtin/remote.c:717 builtin/repack.c:511
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "неуспешно преименуване на „%s“"
 
-#: builtin/name-rev.c:352
+#: builtin/name-rev.c:356
 msgid "git name-rev [<options>] <commit>..."
 msgstr "git name-rev [ОПЦИЯ…] ПОДАВАНЕ…"
 
-#: builtin/name-rev.c:353
+#: builtin/name-rev.c:357
 msgid "git name-rev [<options>] --all"
 msgstr "git name-rev [ОПЦИЯ…] --all"
 
-#: builtin/name-rev.c:354
+#: builtin/name-rev.c:358
 msgid "git name-rev [<options>] --stdin"
 msgstr "git name-rev [ОПЦИЯ…] --stdin"
 
-#: builtin/name-rev.c:411
+#: builtin/name-rev.c:415
 msgid "print only names (no SHA-1)"
 msgstr "извеждане само на имената (без сумите по SHA1)"
 
-#: builtin/name-rev.c:412
+#: builtin/name-rev.c:416
 msgid "only use tags to name the commits"
 msgstr "използване само на етикетите за именуване на подаванията"
 
-#: builtin/name-rev.c:414
+#: builtin/name-rev.c:418
 msgid "only use refs matching <pattern>"
 msgstr "използване само на указателите напасващи на ШАБЛОНа"
 
-#: builtin/name-rev.c:416
+#: builtin/name-rev.c:420
 msgid "ignore refs matching <pattern>"
 msgstr "игнориране на указателите напасващи на ШАБЛОНа"
 
-#: builtin/name-rev.c:418
+#: builtin/name-rev.c:422
 msgid "list all commits reachable from all refs"
 msgstr ""
 "извеждане на всички подавания, които могат да бъдат достигнати от всички "
 "указатели"
 
-#: builtin/name-rev.c:419
+#: builtin/name-rev.c:423
 msgid "read from stdin"
 msgstr "четене от стандартния вход"
 
-#: builtin/name-rev.c:420
+#: builtin/name-rev.c:424
 msgid "allow to print `undefined` names (default)"
 msgstr "да се извеждат и недефинираните имена (стандартна стойност на опцията)"
 
-#: builtin/name-rev.c:426
+#: builtin/name-rev.c:430
 msgid "dereference tags in the input (internal use)"
 msgstr "извеждане на идентификаторите на обекти-етикети (за вътрешни нужди)"
 
@@ -16461,7 +16546,7 @@
 msgid "read object names from the standard input"
 msgstr "изчитане на имената на обектите от стандартния вход"
 
-#: builtin/notes.c:954 builtin/prune.c:130 builtin/worktree.c:165
+#: builtin/notes.c:954 builtin/prune.c:130 builtin/worktree.c:164
 msgid "do not remove, show only"
 msgstr "само извеждане без действително окастряне"
 
@@ -16477,7 +16562,7 @@
 msgid "use notes from <notes-ref>"
 msgstr "да се използва бележката сочена от този УКАЗАТЕЛ_ЗА_БЕЛЕЖКА"
 
-#: builtin/notes.c:1034 builtin/stash.c:1598
+#: builtin/notes.c:1034 builtin/stash.c:1607
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "непозната подкоманда: %s"
@@ -16553,72 +16638,72 @@
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "бяха записани %<PRIu32> обекти, а се очакваха %<PRIu32>"
 
-#: builtin/pack-objects.c:1166
+#: builtin/pack-objects.c:1164
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr ""
 "изключване на записването на битовата маска, защото някои обекти няма да се "
 "пакетират"
 
-#: builtin/pack-objects.c:1597
+#: builtin/pack-objects.c:1592
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "прекалено далечно начало на отместването за обектите-разлика за „%s“"
 
-#: builtin/pack-objects.c:1606
+#: builtin/pack-objects.c:1601
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "недостижимо начало на отместването за обектите-разлика за „%s“"
 
-#: builtin/pack-objects.c:1875
+#: builtin/pack-objects.c:1870
 msgid "Counting objects"
 msgstr "Преброяване на обектите"
 
-#: builtin/pack-objects.c:2005
+#: builtin/pack-objects.c:2000
 #, c-format
 msgid "unable to get size of %s"
 msgstr "размерът на „%s“ не може да бъде получен"
 
-#: builtin/pack-objects.c:2020
+#: builtin/pack-objects.c:2015
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "заглавната част на „%s“ не може да бъде анализирана"
 
-#: builtin/pack-objects.c:2090 builtin/pack-objects.c:2106
-#: builtin/pack-objects.c:2116
+#: builtin/pack-objects.c:2085 builtin/pack-objects.c:2101
+#: builtin/pack-objects.c:2111
 #, c-format
 msgid "object %s cannot be read"
 msgstr "обектът „%s“ не може да се прочете"
 
-#: builtin/pack-objects.c:2093 builtin/pack-objects.c:2120
+#: builtin/pack-objects.c:2088 builtin/pack-objects.c:2115
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr "обектът „%s“ е с неправилна дължина (%<PRIuMAX>, а не %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2130
+#: builtin/pack-objects.c:2125
 msgid "suboptimal pack - out of memory"
 msgstr "неоптимизиран пакет — паметта свърши"
 
-#: builtin/pack-objects.c:2456
+#: builtin/pack-objects.c:2440
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Делта компресията ще използва до %d нишки"
 
-#: builtin/pack-objects.c:2588
+#: builtin/pack-objects.c:2572
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr ""
 "обектите, които могат да бъдат достигнати от етикета „%s“, не може да бъдат "
 "пакетирани"
 
-#: builtin/pack-objects.c:2675
+#: builtin/pack-objects.c:2659
 msgid "Compressing objects"
 msgstr "Компресиране на обектите"
 
-#: builtin/pack-objects.c:2681
+#: builtin/pack-objects.c:2665
 msgid "inconsistency with delta count"
 msgstr "неправилен брой разлики"
 
-#: builtin/pack-objects.c:2762
+#: builtin/pack-objects.c:2742
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -16627,7 +16712,7 @@
 "очаква се идентификатор на краен обект, а не:\n"
 " %s"
 
-#: builtin/pack-objects.c:2768
+#: builtin/pack-objects.c:2748
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -16636,262 +16721,262 @@
 "очаква се идентификатор на обект, а не:\n"
 " %s"
 
-#: builtin/pack-objects.c:2866
+#: builtin/pack-objects.c:2846
 msgid "invalid value for --missing"
 msgstr "неправилна стойност за „--missing“"
 
-#: builtin/pack-objects.c:2925 builtin/pack-objects.c:3033
+#: builtin/pack-objects.c:2905 builtin/pack-objects.c:3013
 msgid "cannot open pack index"
 msgstr "индексът на пакетния файл не може да бъде отворен"
 
-#: builtin/pack-objects.c:2956
+#: builtin/pack-objects.c:2936
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "непакетираният обект в „%s“ не може да бъде анализиран"
 
-#: builtin/pack-objects.c:3041
+#: builtin/pack-objects.c:3021
 msgid "unable to force loose object"
 msgstr "оставането на обекта непакетиран не може да бъде наложено"
 
-#: builtin/pack-objects.c:3133
+#: builtin/pack-objects.c:3113
 #, c-format
 msgid "not a rev '%s'"
 msgstr "„%s“ не е версия"
 
-#: builtin/pack-objects.c:3136
+#: builtin/pack-objects.c:3116
 #, c-format
 msgid "bad revision '%s'"
 msgstr "неправилна версия „%s“"
 
-#: builtin/pack-objects.c:3161
+#: builtin/pack-objects.c:3141
 msgid "unable to add recent objects"
 msgstr "скорошните обекти не могат да бъдат добавени"
 
-#: builtin/pack-objects.c:3214
+#: builtin/pack-objects.c:3194
 #, c-format
 msgid "unsupported index version %s"
 msgstr "неподдържана версия на индекса „%s“"
 
-#: builtin/pack-objects.c:3218
+#: builtin/pack-objects.c:3198
 #, c-format
 msgid "bad index version '%s'"
 msgstr "неправилна версия на индекса „%s“"
 
-#: builtin/pack-objects.c:3248
+#: builtin/pack-objects.c:3228
 msgid "do not show progress meter"
 msgstr "без извеждане на напредъка"
 
-#: builtin/pack-objects.c:3250
+#: builtin/pack-objects.c:3230
 msgid "show progress meter"
 msgstr "извеждане на напредъка"
 
-#: builtin/pack-objects.c:3252
+#: builtin/pack-objects.c:3232
 msgid "show progress meter during object writing phase"
 msgstr "извеждане на напредъка във фазата на запазване на обектите"
 
-#: builtin/pack-objects.c:3255
+#: builtin/pack-objects.c:3235
 msgid "similar to --all-progress when progress meter is shown"
 msgstr ""
 "същото действие като опцията „--all-progress“ при извеждането на напредъка"
 
-#: builtin/pack-objects.c:3256
+#: builtin/pack-objects.c:3236
 msgid "<version>[,<offset>]"
 msgstr "ВЕРСИЯ[,ОТМЕСТВАНЕ]"
 
-#: builtin/pack-objects.c:3257
+#: builtin/pack-objects.c:3237
 msgid "write the pack index file in the specified idx format version"
 msgstr ""
 "запазване на индекса на пакетните файлове във форма̀та с указаната версия"
 
-#: builtin/pack-objects.c:3260
+#: builtin/pack-objects.c:3240
 msgid "maximum size of each output pack file"
 msgstr "максимален размер на всеки пакетен файл"
 
-#: builtin/pack-objects.c:3262
+#: builtin/pack-objects.c:3242
 msgid "ignore borrowed objects from alternate object store"
 msgstr "игнориране на обектите заети от други хранилища на обекти"
 
-#: builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3244
 msgid "ignore packed objects"
 msgstr "игнориране на пакетираните обекти"
 
-#: builtin/pack-objects.c:3266
+#: builtin/pack-objects.c:3246
 msgid "limit pack window by objects"
 msgstr "ограничаване на прозореца за пакетиране по брой обекти"
 
-#: builtin/pack-objects.c:3268
+#: builtin/pack-objects.c:3248
 msgid "limit pack window by memory in addition to object limit"
 msgstr ""
 "ограничаване на прозореца за пакетиране и по памет освен по брой обекти"
 
-#: builtin/pack-objects.c:3270
+#: builtin/pack-objects.c:3250
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr ""
 "максимална дължина на веригата от разлики, която е позволена в пакетния файл"
 
-#: builtin/pack-objects.c:3272
+#: builtin/pack-objects.c:3252
 msgid "reuse existing deltas"
 msgstr "преизползване на съществуващите разлики"
 
-#: builtin/pack-objects.c:3274
+#: builtin/pack-objects.c:3254
 msgid "reuse existing objects"
 msgstr "преизползване на съществуващите обекти"
 
-#: builtin/pack-objects.c:3276
+#: builtin/pack-objects.c:3256
 msgid "use OFS_DELTA objects"
 msgstr "използване на обекти „OFS_DELTA“"
 
-#: builtin/pack-objects.c:3278
+#: builtin/pack-objects.c:3258
 msgid "use threads when searching for best delta matches"
 msgstr ""
 "стартиране на нишки за претърсване на най-добрите съвпадения на разликите"
 
-#: builtin/pack-objects.c:3280
+#: builtin/pack-objects.c:3260
 msgid "do not create an empty pack output"
 msgstr "без създаване на празен пакетен файл"
 
-#: builtin/pack-objects.c:3282
+#: builtin/pack-objects.c:3262
 msgid "read revision arguments from standard input"
 msgstr "изчитане на версиите от стандартния вход"
 
-#: builtin/pack-objects.c:3284
+#: builtin/pack-objects.c:3264
 msgid "limit the objects to those that are not yet packed"
 msgstr "ограничаване до все още непакетираните обекти"
 
-#: builtin/pack-objects.c:3287
+#: builtin/pack-objects.c:3267
 msgid "include objects reachable from any reference"
 msgstr ""
 "включване на всички обекти, които могат да се достигнат от произволен "
 "указател"
 
-#: builtin/pack-objects.c:3290
+#: builtin/pack-objects.c:3270
 msgid "include objects referred by reflog entries"
 msgstr "включване и на обектите сочени от записите в журнала на указателите"
 
-#: builtin/pack-objects.c:3293
+#: builtin/pack-objects.c:3273
 msgid "include objects referred to by the index"
 msgstr "включване и на обектите сочени от индекса"
 
-#: builtin/pack-objects.c:3296
+#: builtin/pack-objects.c:3276
 msgid "output pack to stdout"
 msgstr "извеждане на пакета на стандартния изход"
 
-#: builtin/pack-objects.c:3298
+#: builtin/pack-objects.c:3278
 msgid "include tag objects that refer to objects to be packed"
 msgstr ""
 "включване и на обектите-етикети, които сочат към обектите, които ще бъдат "
 "пакетирани"
 
-#: builtin/pack-objects.c:3300
+#: builtin/pack-objects.c:3280
 msgid "keep unreachable objects"
 msgstr "запазване на недостижимите обекти"
 
-#: builtin/pack-objects.c:3302
+#: builtin/pack-objects.c:3282
 msgid "pack loose unreachable objects"
 msgstr "пакетиране и на недостижимите обекти"
 
-#: builtin/pack-objects.c:3304
+#: builtin/pack-objects.c:3284
 msgid "unpack unreachable objects newer than <time>"
 msgstr "разпакетиране на недостижимите обекти, които са по-нови от това ВРЕМЕ"
 
-#: builtin/pack-objects.c:3307
+#: builtin/pack-objects.c:3287
 msgid "use the sparse reachability algorithm"
 msgstr "използване на алгоритъм за частична достижимост"
 
-#: builtin/pack-objects.c:3309
+#: builtin/pack-objects.c:3289
 msgid "create thin packs"
 msgstr "създаване на съкратени пакети"
 
-#: builtin/pack-objects.c:3311
+#: builtin/pack-objects.c:3291
 msgid "create packs suitable for shallow fetches"
 msgstr "пакетиране подходящо за плитко доставяне"
 
-#: builtin/pack-objects.c:3313
+#: builtin/pack-objects.c:3293
 msgid "ignore packs that have companion .keep file"
 msgstr "игнориране на пакетите, които са придружени от файл „.keep“"
 
-#: builtin/pack-objects.c:3315
+#: builtin/pack-objects.c:3295
 msgid "ignore this pack"
 msgstr "пропускане на този пакет"
 
-#: builtin/pack-objects.c:3317
+#: builtin/pack-objects.c:3297
 msgid "pack compression level"
 msgstr "ниво на компресиране при пакетиране"
 
-#: builtin/pack-objects.c:3319
+#: builtin/pack-objects.c:3299
 msgid "do not hide commits by grafts"
 msgstr ""
 "извеждане на всички родители — дори и тези, които нормално са скрити при "
 "присажданията"
 
-#: builtin/pack-objects.c:3321
+#: builtin/pack-objects.c:3301
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr ""
 "използване на съществуващи индекси на база битови маски за ускоряване на "
 "преброяването на обектите"
 
-#: builtin/pack-objects.c:3323
+#: builtin/pack-objects.c:3303
 msgid "write a bitmap index together with the pack index"
 msgstr ""
 "запазване и на индекс на база побитова маска, заедно с индекса за пакета"
 
-#: builtin/pack-objects.c:3327
+#: builtin/pack-objects.c:3307
 msgid "write a bitmap index if possible"
 msgstr "записване на индекси на база битови маски при възможност"
 
-#: builtin/pack-objects.c:3331
+#: builtin/pack-objects.c:3311
 msgid "handling for missing objects"
 msgstr "как да се обработват липсващите обекти"
 
-#: builtin/pack-objects.c:3334
+#: builtin/pack-objects.c:3314
 msgid "do not pack objects in promisor packfiles"
 msgstr "без пакетиране на обекти в гарантиращи пакети"
 
-#: builtin/pack-objects.c:3336
+#: builtin/pack-objects.c:3316
 msgid "respect islands during delta compression"
 msgstr "без промяна на групите при делта компресия"
 
-#: builtin/pack-objects.c:3361
+#: builtin/pack-objects.c:3345
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "веригата с разлики е прекалено дълбока — %d, ще се ползва %d"
 
-#: builtin/pack-objects.c:3366
+#: builtin/pack-objects.c:3350
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr ""
 "Стойността на настройката „pack.deltaCacheLimit“ е прекалено голяма.  Ще се "
 "ползва %d"
 
-#: builtin/pack-objects.c:3420
+#: builtin/pack-objects.c:3404
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 "опцията „--max-pack-size“ не може да се използва за създаване на пакетни "
 "файлове за пренос"
 
-#: builtin/pack-objects.c:3422
+#: builtin/pack-objects.c:3406
 msgid "minimum pack size limit is 1 MiB"
 msgstr "минималният размер на пакетите е 1 MiB"
 
-#: builtin/pack-objects.c:3427
+#: builtin/pack-objects.c:3411
 msgid "--thin cannot be used to build an indexable pack"
 msgstr ""
 "опцията „--thin“не може да се използва за създаване на пакетни файлове с "
 "индекс"
 
-#: builtin/pack-objects.c:3430
+#: builtin/pack-objects.c:3414
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr "опциите „--keep-unreachable“ и „--unpack-unreachable“ са несъвместими"
 
-#: builtin/pack-objects.c:3436
+#: builtin/pack-objects.c:3420
 msgid "cannot use --filter without --stdout"
 msgstr "опцията „-filter“ изисква „-stdout“"
 
-#: builtin/pack-objects.c:3497
+#: builtin/pack-objects.c:3481
 msgid "Enumerating objects"
 msgstr "Изброяване на обектите"
 
-#: builtin/pack-objects.c:3527
+#: builtin/pack-objects.c:3511
 #, c-format
 msgid "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>)"
 msgstr ""
@@ -16947,44 +17032,44 @@
 msgid "git pull [<options>] [<repository> [<refspec>...]]"
 msgstr "git push [ОПЦИЯ…] [ХРАНИЛИЩЕ [УКАЗАТЕЛ_НА_ВЕРСИЯ…]]"
 
-#: builtin/pull.c:141
+#: builtin/pull.c:142
 msgid "control for recursive fetching of submodules"
 msgstr "управление на рекурсивното доставяне на подмодулите"
 
-#: builtin/pull.c:145
+#: builtin/pull.c:146
 msgid "Options related to merging"
 msgstr "Опции при сливане"
 
-#: builtin/pull.c:148
+#: builtin/pull.c:149
 msgid "incorporate changes by rebasing rather than merging"
 msgstr "внасяне на промените чрез пребазиране, а не чрез сливане"
 
-#: builtin/pull.c:176 builtin/rebase.c:447 builtin/revert.c:126
+#: builtin/pull.c:177 builtin/rebase.c:448 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "позволяване на превъртания"
 
-#: builtin/pull.c:185
+#: builtin/pull.c:186
 msgid "automatically stash/stash pop before and after rebase"
 msgstr "автоматично скатаване/прилагане на скатаното преди и след пребазиране"
 
-#: builtin/pull.c:201
+#: builtin/pull.c:202
 msgid "Options related to fetching"
 msgstr "Опции при доставяне"
 
-#: builtin/pull.c:211
+#: builtin/pull.c:212
 msgid "force overwrite of local branch"
 msgstr "принудително презаписване на локалния клон"
 
-#: builtin/pull.c:219
+#: builtin/pull.c:220
 msgid "number of submodules pulled in parallel"
 msgstr "брой подмодули издърпани паралелно"
 
-#: builtin/pull.c:316
+#: builtin/pull.c:320
 #, c-format
 msgid "Invalid value for pull.ff: %s"
 msgstr "Неправилна стойност за „pull.ff“: „%s“"
 
-#: builtin/pull.c:433
+#: builtin/pull.c:437
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
 "fetched."
@@ -16992,14 +17077,14 @@
 "Между указателите, които току що доставихте, няма подходящ кандидат, върху "
 "който да пребазирате."
 
-#: builtin/pull.c:435
+#: builtin/pull.c:439
 msgid ""
 "There are no candidates for merging among the refs that you just fetched."
 msgstr ""
 "Между указателите, които току що доставихте, няма подходящ кандидат, който "
 "да слеете."
 
-#: builtin/pull.c:436
+#: builtin/pull.c:440
 msgid ""
 "Generally this means that you provided a wildcard refspec which had no\n"
 "matches on the remote end."
@@ -17007,7 +17092,7 @@
 "Най вероятно сте подали шаблон за указатели, който не е напаснал с нищо в "
 "отдалеченото хранилище."
 
-#: builtin/pull.c:439
+#: builtin/pull.c:443
 #, c-format
 msgid ""
 "You asked to pull from the remote '%s', but did not specify\n"
@@ -17018,44 +17103,44 @@
 "Понеже това не е хранилището по подразбиране на текущия клон, трябва\n"
 "да укажете отдалечения клон на командния ред."
 
-#: builtin/pull.c:444 builtin/rebase.c:1326 git-parse-remote.sh:73
+#: builtin/pull.c:448 builtin/rebase.c:1347 git-parse-remote.sh:73
 msgid "You are not currently on a branch."
 msgstr "Извън всички клони."
 
-#: builtin/pull.c:446 builtin/pull.c:461 git-parse-remote.sh:79
+#: builtin/pull.c:450 builtin/pull.c:465 git-parse-remote.sh:79
 msgid "Please specify which branch you want to rebase against."
 msgstr "Укажете върху кой клон искате да пребазирате."
 
-#: builtin/pull.c:448 builtin/pull.c:463 git-parse-remote.sh:82
+#: builtin/pull.c:452 builtin/pull.c:467 git-parse-remote.sh:82
 msgid "Please specify which branch you want to merge with."
 msgstr "Укажете кой клон искате да слеете."
 
-#: builtin/pull.c:449 builtin/pull.c:464
+#: builtin/pull.c:453 builtin/pull.c:468
 msgid "See git-pull(1) for details."
 msgstr "За повече информация погледнете ръководството „git-pull(1)“"
 
-#: builtin/pull.c:451 builtin/pull.c:457 builtin/pull.c:466
-#: builtin/rebase.c:1332 git-parse-remote.sh:64
+#: builtin/pull.c:455 builtin/pull.c:461 builtin/pull.c:470
+#: builtin/rebase.c:1353 git-parse-remote.sh:64
 msgid "<remote>"
 msgstr "ОТДАЛЕЧЕНО_ХРАНИЛИЩЕ"
 
-#: builtin/pull.c:451 builtin/pull.c:466 builtin/pull.c:471
+#: builtin/pull.c:455 builtin/pull.c:470 builtin/pull.c:475
 #: git-parse-remote.sh:65
 msgid "<branch>"
 msgstr "КЛОН"
 
-#: builtin/pull.c:459 builtin/rebase.c:1324 git-parse-remote.sh:75
+#: builtin/pull.c:463 builtin/rebase.c:1345 git-parse-remote.sh:75
 msgid "There is no tracking information for the current branch."
 msgstr "Текущият клон не следи никой."
 
-#: builtin/pull.c:468 git-parse-remote.sh:95
+#: builtin/pull.c:472 git-parse-remote.sh:95
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:"
 msgstr ""
 "Ако искате да зададете информация за следен клон, можете да направите това с "
 "командата:"
 
-#: builtin/pull.c:473
+#: builtin/pull.c:477
 #, c-format
 msgid ""
 "Your configuration specifies to merge with the ref '%s'\n"
@@ -17064,32 +17149,32 @@
 "За сливане е указан отдалеченият указател „%s“,\n"
 "но такъв не е доставен."
 
-#: builtin/pull.c:581
+#: builtin/pull.c:587
 #, c-format
 msgid "unable to access commit %s"
 msgstr "недостъпно подаване: %s"
 
-#: builtin/pull.c:861
+#: builtin/pull.c:867
 msgid "ignoring --verify-signatures for rebase"
 msgstr "без „--verify-signatures“ при пребазиране"
 
-#: builtin/pull.c:916
+#: builtin/pull.c:922
 msgid "--[no-]autostash option is only valid with --rebase."
 msgstr "опцията „--[no-]autostash“ изисква „--rebase“"
 
-#: builtin/pull.c:924
+#: builtin/pull.c:930
 msgid "Updating an unborn branch with changes added to the index."
 msgstr "Обновяване на все още несъздаден клон с промените от индекса"
 
-#: builtin/pull.c:928
+#: builtin/pull.c:934
 msgid "pull with rebase"
 msgstr "издърпване с пребазиране"
 
-#: builtin/pull.c:929
+#: builtin/pull.c:935
 msgid "please commit or stash them."
 msgstr "трябва да подадете или скатаете промените."
 
-#: builtin/pull.c:954
+#: builtin/pull.c:960
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -17099,7 +17184,7 @@
 "доставянето обнови върха на текущия клон.  Работното\n"
 "ви копие бе превъртяно от подаване „%s“."
 
-#: builtin/pull.c:960
+#: builtin/pull.c:966
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -17116,15 +17201,15 @@
 "    git reset --hard\n"
 "за връщане към нормално състояние."
 
-#: builtin/pull.c:975
+#: builtin/pull.c:981
 msgid "Cannot merge multiple branches into empty head."
 msgstr "Не може да сливате множество клони в празен върхов указател."
 
-#: builtin/pull.c:979
+#: builtin/pull.c:985
 msgid "Cannot rebase onto multiple branches."
 msgstr "Не може да пребазирате върху повече от един клон."
 
-#: builtin/pull.c:986
+#: builtin/pull.c:992
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 "пребазирането е невъзможно заради локално записаните промени по подмодулите"
@@ -17298,17 +17383,97 @@
 msgid "Pushing to %s\n"
 msgstr "Изтласкване към „%s“\n"
 
-#: builtin/push.c:364
+#: builtin/push.c:366
 #, c-format
 msgid "failed to push some refs to '%s'"
 msgstr "част от указателите не бяха изтласкани към „%s“"
 
-#: builtin/push.c:398
+#: builtin/push.c:541
+msgid "repository"
+msgstr "хранилище"
+
+#: builtin/push.c:542 builtin/send-pack.c:164
+msgid "push all refs"
+msgstr "изтласкване на всички указатели"
+
+#: builtin/push.c:543 builtin/send-pack.c:166
+msgid "mirror all refs"
+msgstr "огледално копие на всички указатели"
+
+#: builtin/push.c:545
+msgid "delete refs"
+msgstr "изтриване на указателите"
+
+#: builtin/push.c:546
+msgid "push tags (can't be used with --all or --mirror)"
+msgstr "изтласкване на етикетите (несъвместимо с опциите „--all“ и „--mirror“)"
+
+#: builtin/push.c:549 builtin/send-pack.c:167
+msgid "force updates"
+msgstr "принудително обновяване"
+
+#: builtin/push.c:551 builtin/send-pack.c:181
+msgid "<refname>:<expect>"
+msgstr "УКАЗАТЕЛ:ОЧАКВАНА_СТОЙНОСТ"
+
+#: builtin/push.c:552 builtin/send-pack.c:182
+msgid "require old value of ref to be at this value"
+msgstr "УКАЗАТЕЛят трябва първоначално да е с тази ОЧАКВАНА_СТОЙНОСТ"
+
+#: builtin/push.c:555
+msgid "control recursive pushing of submodules"
+msgstr "управление на рекурсивното изтласкване на подмодулите"
+
+#: builtin/push.c:557 builtin/send-pack.c:175
+msgid "use thin pack"
+msgstr "използване на съкратени пакети"
+
+#: builtin/push.c:558 builtin/push.c:559 builtin/send-pack.c:161
+#: builtin/send-pack.c:162
+msgid "receive pack program"
+msgstr "програма за получаването на пакети"
+
+#: builtin/push.c:560
+msgid "set upstream for git pull/status"
+msgstr "задаване на отдалеченото хранилище за командите „git pull/status“"
+
+#: builtin/push.c:563
+msgid "prune locally removed refs"
+msgstr "окастряне на указателите, които са премахнати от локалното хранилище"
+
+#: builtin/push.c:565
+msgid "bypass pre-push hook"
+msgstr "без изпълнение на куката преди изтласкване (pre-push)"
+
+#: builtin/push.c:566
+msgid "push missing but relevant tags"
+msgstr ""
+"изтласкване на липсващите в отдалеченото хранилище, но свързани с текущото "
+"изтласкване, етикети"
+
+#: builtin/push.c:569 builtin/send-pack.c:169
+msgid "GPG sign the push"
+msgstr "подписване на изтласкването с GPG"
+
+#: builtin/push.c:571 builtin/send-pack.c:176
+msgid "request atomic transaction on remote side"
+msgstr "изискване на атомарни операции от отсрещната страна"
+
+#: builtin/push.c:589
+msgid "--delete is incompatible with --all, --mirror and --tags"
+msgstr ""
+"опцията „--delete“ е несъвместима с опциите  „--all“, „--mirror“ и „--tags“"
+
+#: builtin/push.c:591
+msgid "--delete doesn't make sense without any refs"
+msgstr "опцията „--delete“ изисква поне един указател на версия"
+
+#: builtin/push.c:611
 #, c-format
 msgid "bad repository '%s'"
 msgstr "неправилно указано хранилище „%s“"
 
-#: builtin/push.c:399
+#: builtin/push.c:612
 msgid ""
 "No configured push destination.\n"
 "Either specify the URL from the command-line or configure a remote "
@@ -17330,107 +17495,27 @@
 "\n"
 "    git push ИМЕ\n"
 
-#: builtin/push.c:554
-msgid "repository"
-msgstr "хранилище"
-
-#: builtin/push.c:555 builtin/send-pack.c:164
-msgid "push all refs"
-msgstr "изтласкване на всички указатели"
-
-#: builtin/push.c:556 builtin/send-pack.c:166
-msgid "mirror all refs"
-msgstr "огледално копие на всички указатели"
-
-#: builtin/push.c:558
-msgid "delete refs"
-msgstr "изтриване на указателите"
-
-#: builtin/push.c:559
-msgid "push tags (can't be used with --all or --mirror)"
-msgstr "изтласкване на етикетите (несъвместимо с опциите „--all“ и „--mirror“)"
-
-#: builtin/push.c:562 builtin/send-pack.c:167
-msgid "force updates"
-msgstr "принудително обновяване"
-
-#: builtin/push.c:564 builtin/send-pack.c:181
-msgid "<refname>:<expect>"
-msgstr "УКАЗАТЕЛ:ОЧАКВАНА_СТОЙНОСТ"
-
-#: builtin/push.c:565 builtin/send-pack.c:182
-msgid "require old value of ref to be at this value"
-msgstr "УКАЗАТЕЛят трябва първоначално да е с тази ОЧАКВАНА_СТОЙНОСТ"
-
-#: builtin/push.c:568
-msgid "control recursive pushing of submodules"
-msgstr "управление на рекурсивното изтласкване на подмодулите"
-
-#: builtin/push.c:570 builtin/send-pack.c:175
-msgid "use thin pack"
-msgstr "използване на съкратени пакети"
-
-#: builtin/push.c:571 builtin/push.c:572 builtin/send-pack.c:161
-#: builtin/send-pack.c:162
-msgid "receive pack program"
-msgstr "програма за получаването на пакети"
-
-#: builtin/push.c:573
-msgid "set upstream for git pull/status"
-msgstr "задаване на отдалеченото хранилище за командите „git pull/status“"
-
-#: builtin/push.c:576
-msgid "prune locally removed refs"
-msgstr "окастряне на указателите, които са премахнати от локалното хранилище"
-
-#: builtin/push.c:578
-msgid "bypass pre-push hook"
-msgstr "без изпълнение на куката преди изтласкване (pre-push)"
-
-#: builtin/push.c:579
-msgid "push missing but relevant tags"
-msgstr ""
-"изтласкване на липсващите в отдалеченото хранилище, но свързани с текущото "
-"изтласкване, етикети"
-
-#: builtin/push.c:582 builtin/send-pack.c:169
-msgid "GPG sign the push"
-msgstr "подписване на изтласкването с GPG"
-
-#: builtin/push.c:584 builtin/send-pack.c:176
-msgid "request atomic transaction on remote side"
-msgstr "изискване на атомарни операции от отсрещната страна"
-
-#: builtin/push.c:602
-msgid "--delete is incompatible with --all, --mirror and --tags"
-msgstr ""
-"опцията „--delete“ е несъвместима с опциите  „--all“, „--mirror“ и „--tags“"
-
-#: builtin/push.c:604
-msgid "--delete doesn't make sense without any refs"
-msgstr "опцията „--delete“ изисква поне един указател на версия"
-
-#: builtin/push.c:607
+#: builtin/push.c:627
 msgid "--all and --tags are incompatible"
 msgstr "опциите „--all“ и „--tags“ са несъвместими"
 
-#: builtin/push.c:609
+#: builtin/push.c:629
 msgid "--all can't be combined with refspecs"
 msgstr "опцията „--all“ е несъвместима с указването на версия"
 
-#: builtin/push.c:613
+#: builtin/push.c:633
 msgid "--mirror and --tags are incompatible"
 msgstr "опциите „--mirror“ и „--tags“ са несъвместими"
 
-#: builtin/push.c:615
+#: builtin/push.c:635
 msgid "--mirror can't be combined with refspecs"
 msgstr "опцията „--mirror“ е несъвместима с указването на версия"
 
-#: builtin/push.c:618
+#: builtin/push.c:638
 msgid "--all and --mirror are incompatible"
 msgstr "опциите „--all“ и „--mirror“ са несъвместими"
 
-#: builtin/push.c:637
+#: builtin/push.c:642
 msgid "push options must not have new line characters"
 msgstr "опциите за изтласкване не трябва да съдържат знак за нов ред"
 
@@ -17548,11 +17633,11 @@
 
 #: builtin/rebase.c:32
 msgid ""
-"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] "
-"[<branch>]"
+"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
+"[<upstream> [<branch>]]"
 msgstr ""
-"git rebase [-i] [ОПЦИЯ…] [--exec КОМАНДА] [--onto НОВА_БАЗА] [КЛОН_ИЗТОЧНИК] "
-"[КЛОН]"
+"git rebase [-i] [ОПЦИЯ…] [--exec КОМАНДА] [--onto НОВА_БАЗА | --keep-base] "
+"[КЛОН_ИЗТОЧНИК [КЛОН]]"
 
 #: builtin/rebase.c:34
 msgid ""
@@ -17591,193 +17676,193 @@
 msgid "could not generate todo list"
 msgstr "файлът с командите не може да се генерира"
 
-#: builtin/rebase.c:382
+#: builtin/rebase.c:383
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "опциите „--upstream“ и „--onto“ изискват базово подаване"
 
-#: builtin/rebase.c:437
+#: builtin/rebase.c:438
 msgid "git rebase--interactive [<options>]"
 msgstr "git rebase--interactive [ОПЦИЯ…]"
 
-#: builtin/rebase.c:449
+#: builtin/rebase.c:450
 msgid "keep empty commits"
 msgstr "запазване на празните подавания"
 
-#: builtin/rebase.c:451 builtin/revert.c:128
+#: builtin/rebase.c:452 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr "позволяване на празни съобщения при подаване"
 
-#: builtin/rebase.c:452
+#: builtin/rebase.c:453
 msgid "rebase merge commits"
 msgstr "пребазиране на подаванията със сливания"
 
-#: builtin/rebase.c:454
+#: builtin/rebase.c:455
 msgid "keep original branch points of cousins"
 msgstr ""
 "запазване на първоначалните точки на разклоняване на сестринските клони"
 
-#: builtin/rebase.c:456
+#: builtin/rebase.c:457
 msgid "move commits that begin with squash!/fixup!"
 msgstr "преместване на подаванията, които започват със „squash!“/“fixup!“"
 
-#: builtin/rebase.c:457
+#: builtin/rebase.c:458
 msgid "sign commits"
 msgstr "подписване на подаванията"
 
-#: builtin/rebase.c:459 builtin/rebase.c:1403
+#: builtin/rebase.c:460 builtin/rebase.c:1427
 msgid "display a diffstat of what changed upstream"
 msgstr "извеждане на статистика с промените в следения клон"
 
-#: builtin/rebase.c:461
+#: builtin/rebase.c:462
 msgid "continue rebase"
 msgstr "продължаване на пребазирането"
 
-#: builtin/rebase.c:463
+#: builtin/rebase.c:464
 msgid "skip commit"
 msgstr "прескачане на подаване"
 
-#: builtin/rebase.c:464
+#: builtin/rebase.c:465
 msgid "edit the todo list"
 msgstr "редактиране на списъка с команди за изпълнение"
 
-#: builtin/rebase.c:466
+#: builtin/rebase.c:467
 msgid "show the current patch"
 msgstr "извеждане на текущата кръпка"
 
-#: builtin/rebase.c:469
+#: builtin/rebase.c:470
 msgid "shorten commit ids in the todo list"
 msgstr "съкратени идентификатори в списъка за изпълнение"
 
-#: builtin/rebase.c:471
+#: builtin/rebase.c:472
 msgid "expand commit ids in the todo list"
 msgstr "пълни идентификатори в списъка за изпълнение"
 
-#: builtin/rebase.c:473
+#: builtin/rebase.c:474
 msgid "check the todo list"
 msgstr "проверка на списъка за изпълнение"
 
-#: builtin/rebase.c:475
+#: builtin/rebase.c:476
 msgid "rearrange fixup/squash lines"
 msgstr ""
 "преподреждане на редовете за вкарване на подаванията подаванията в "
 "предходните им със и без смени на съобщението"
 
-#: builtin/rebase.c:477
+#: builtin/rebase.c:478
 msgid "insert exec commands in todo list"
 msgstr "вмъкване на командите за изпълнение в списъка за изпълнение"
 
-#: builtin/rebase.c:478
+#: builtin/rebase.c:479
 msgid "onto"
 msgstr "върху"
 
-#: builtin/rebase.c:481
+#: builtin/rebase.c:482
 msgid "restrict-revision"
 msgstr "ограничена версия"
 
-#: builtin/rebase.c:481
+#: builtin/rebase.c:482
 msgid "restrict revision"
 msgstr "ограничена версия"
 
-#: builtin/rebase.c:483
+#: builtin/rebase.c:484
 msgid "squash-onto"
 msgstr "подаване, в което другите да се вкарат"
 
-#: builtin/rebase.c:484
+#: builtin/rebase.c:485
 msgid "squash onto"
 msgstr "подаване, в което другите да се вкарат"
 
-#: builtin/rebase.c:486
+#: builtin/rebase.c:487
 msgid "the upstream commit"
 msgstr "подаване на източника"
 
-#: builtin/rebase.c:488
+#: builtin/rebase.c:489
 msgid "head-name"
 msgstr "име на върха"
 
-#: builtin/rebase.c:488
+#: builtin/rebase.c:489
 msgid "head name"
 msgstr "име на върха"
 
-#: builtin/rebase.c:493
+#: builtin/rebase.c:494
 msgid "rebase strategy"
 msgstr "стратегия на пребазиране"
 
-#: builtin/rebase.c:494
+#: builtin/rebase.c:495
 msgid "strategy-opts"
 msgstr "опции на стратегията"
 
-#: builtin/rebase.c:495
+#: builtin/rebase.c:496
 msgid "strategy options"
 msgstr "опции на стратегията"
 
-#: builtin/rebase.c:496
+#: builtin/rebase.c:497
 msgid "switch-to"
 msgstr "преминаване към"
 
-#: builtin/rebase.c:497
+#: builtin/rebase.c:498
 msgid "the branch or commit to checkout"
 msgstr "клонът, към който да се премине"
 
-#: builtin/rebase.c:498
+#: builtin/rebase.c:499
 msgid "onto-name"
 msgstr "име на база"
 
-#: builtin/rebase.c:498
+#: builtin/rebase.c:499
 msgid "onto name"
 msgstr "име на база"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "cmd"
 msgstr "команда"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "the command to run"
 msgstr "команда за изпълнение"
 
-#: builtin/rebase.c:502 builtin/rebase.c:1486
+#: builtin/rebase.c:503 builtin/rebase.c:1510
 msgid "automatically re-schedule any `exec` that fails"
 msgstr ""
 "автоматично подаване за повторно изпълнение на командите завършили с неуспех"
 
-#: builtin/rebase.c:518
+#: builtin/rebase.c:519
 msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
 msgstr "опциите „--[no-]rebase-cousins“ изискват опцията „--rebase-merges“"
 
-#: builtin/rebase.c:534
+#: builtin/rebase.c:535
 #, c-format
 msgid "%s requires an interactive rebase"
 msgstr "„%s“ изисква интерактивно пребазиране"
 
-#: builtin/rebase.c:586
+#: builtin/rebase.c:587
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "не може да се премине към новата база, зададена с „onto“: „%s“"
 
-#: builtin/rebase.c:601
+#: builtin/rebase.c:602
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "неправилен указател към първоначален връх „orig-head“: „%s“"
 
-#: builtin/rebase.c:626
+#: builtin/rebase.c:627
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "неправилната стойност на „allow_rerere_autoupdate“ се прескача: „%s“"
 
-#: builtin/rebase.c:702
+#: builtin/rebase.c:703
 #, c-format
 msgid "Could not read '%s'"
 msgstr "Пътят „%s“ не може да бъде прочетен"
 
-#: builtin/rebase.c:720
+#: builtin/rebase.c:721
 #, c-format
 msgid "Cannot store %s"
 msgstr "„%s“ не може да бъде запазен"
 
-#: builtin/rebase.c:827
+#: builtin/rebase.c:828
 msgid "could not determine HEAD revision"
 msgstr "не може да се определи към какво да сочи указателят „HEAD“"
 
-#: builtin/rebase.c:950 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:951 git-rebase--preserve-merges.sh:81
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -17791,7 +17876,7 @@
 "За да откажете пребазирането и да се върнете към първоначалното състояние,\n"
 "изпълнете „git rebase --abort“."
 
-#: builtin/rebase.c:1031
+#: builtin/rebase.c:1032
 #, c-format
 msgid ""
 "\n"
@@ -17809,7 +17894,7 @@
 "\n"
 "В резултат те не могат да се пребазират."
 
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1339
 #, c-format
 msgid ""
 "%s\n"
@@ -17826,7 +17911,7 @@
 "    git rebase КЛОН\n"
 "\n"
 
-#: builtin/rebase.c:1334
+#: builtin/rebase.c:1355
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -17839,135 +17924,139 @@
 "\n"
 "    git branch --set-upstream-to=%s/КЛОН %s\n"
 
-#: builtin/rebase.c:1364
+#: builtin/rebase.c:1385
 msgid "exec commands cannot contain newlines"
 msgstr "командите за изпълнение не може да съдържат нови редове"
 
-#: builtin/rebase.c:1368
+#: builtin/rebase.c:1389
 msgid "empty exec command"
 msgstr "празна команда за изпълнение"
 
-#: builtin/rebase.c:1396
+#: builtin/rebase.c:1418
 msgid "rebase onto given branch instead of upstream"
 msgstr "пребазиране върху зададения, а не следения клон"
 
-#: builtin/rebase.c:1398
+#: builtin/rebase.c:1420
+msgid "use the merge-base of upstream and branch as the current base"
+msgstr "за текуща база да се ползва базата за сливане на клона и следеното"
+
+#: builtin/rebase.c:1422
 msgid "allow pre-rebase hook to run"
 msgstr "позволяване на куката преди пребазиране да се изпълни"
 
-#: builtin/rebase.c:1400
+#: builtin/rebase.c:1424
 msgid "be quiet. implies --no-stat"
 msgstr "без извеждане на информация.  Включва опцията „--no-stat“"
 
-#: builtin/rebase.c:1406
+#: builtin/rebase.c:1430
 msgid "do not show diffstat of what changed upstream"
 msgstr "без извеждане на статистика с промените в следения клон"
 
-#: builtin/rebase.c:1409
+#: builtin/rebase.c:1433
 msgid "add a Signed-off-by: line to each commit"
 msgstr ""
 "добавяне на ред за подпис „Signed-off-by“ в съобщението на всяко подаване"
 
-#: builtin/rebase.c:1411 builtin/rebase.c:1415 builtin/rebase.c:1417
+#: builtin/rebase.c:1435 builtin/rebase.c:1439 builtin/rebase.c:1441
 msgid "passed to 'git am'"
 msgstr "подава се на командата „git am“"
 
-#: builtin/rebase.c:1419 builtin/rebase.c:1421
+#: builtin/rebase.c:1443 builtin/rebase.c:1445
 msgid "passed to 'git apply'"
 msgstr "подава се на командата „git apply“"
 
-#: builtin/rebase.c:1423 builtin/rebase.c:1426
+#: builtin/rebase.c:1447 builtin/rebase.c:1450
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "отбиране на всички подавания дори да няма промени"
 
-#: builtin/rebase.c:1428
+#: builtin/rebase.c:1452
 msgid "continue"
 msgstr "продължаване"
 
-#: builtin/rebase.c:1431
+#: builtin/rebase.c:1455
 msgid "skip current patch and continue"
 msgstr "прескачане на текущата кръпка и продължаване"
 
-#: builtin/rebase.c:1433
+#: builtin/rebase.c:1457
 msgid "abort and check out the original branch"
 msgstr "преустановяване и възстановяване на първоначалния клон"
 
-#: builtin/rebase.c:1436
+#: builtin/rebase.c:1460
 msgid "abort but keep HEAD where it is"
 msgstr "преустановяване без промяна към какво сочи „HEAD“"
 
-#: builtin/rebase.c:1437
+#: builtin/rebase.c:1461
 msgid "edit the todo list during an interactive rebase"
 msgstr "редактиране на файла с команди при интерактивно пребазиране"
 
-#: builtin/rebase.c:1440
+#: builtin/rebase.c:1464
 msgid "show the patch file being applied or merged"
 msgstr "показване на кръпката, която се прилага или слива"
 
-#: builtin/rebase.c:1443
+#: builtin/rebase.c:1467
 msgid "use merging strategies to rebase"
 msgstr "при пребазиране да се ползва стратегия за сливане"
 
-#: builtin/rebase.c:1447
+#: builtin/rebase.c:1471
 msgid "let the user edit the list of commits to rebase"
 msgstr ""
 "позволяване на потребителя да редактира списъка с подавания за пребазиране"
 
-#: builtin/rebase.c:1451
+#: builtin/rebase.c:1475
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr "(остаряло) пресъздаване на сливанията вместо да се прескачат"
 
-#: builtin/rebase.c:1455
+#: builtin/rebase.c:1479
 msgid "preserve empty commits during rebase"
 msgstr "запазване на празните подавания при пребазиране"
 
-#: builtin/rebase.c:1457
+#: builtin/rebase.c:1481
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr ""
 "преместване на подаванията, които започват със „squash!“/“fixup!“ при „-i“"
 
-#: builtin/rebase.c:1463
+#: builtin/rebase.c:1487
 msgid "automatically stash/stash pop before and after"
 msgstr "автоматично скатаване/прилагане на скатаното преди и след пребазиране"
 
-#: builtin/rebase.c:1465
+#: builtin/rebase.c:1489
 msgid "add exec lines after each commit of the editable list"
 msgstr ""
 "добавяне на редове с команди за изпълнение след всяко подаване в "
 "редактирания списък"
 
-#: builtin/rebase.c:1469
+#: builtin/rebase.c:1493
 msgid "allow rebasing commits with empty messages"
 msgstr "позволяване на пребазиране на подавания с празни съобщения"
 
-#: builtin/rebase.c:1472
+#: builtin/rebase.c:1496
 msgid "try to rebase merges instead of skipping them"
 msgstr "опит за пребазиране на сливанията вместо те да се прескачат"
 
-#: builtin/rebase.c:1475
+#: builtin/rebase.c:1499
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr ""
 "за доуточняването на следения клон, използвайте:\n"
 "\n"
 "    git merge-base --fork-point"
 
-#: builtin/rebase.c:1477
+#: builtin/rebase.c:1501
 msgid "use the given merge strategy"
 msgstr "използване на зададената стратегията на сливане"
 
-#: builtin/rebase.c:1479 builtin/revert.c:115
+#: builtin/rebase.c:1503 builtin/revert.c:115
 msgid "option"
 msgstr "опция"
 
-#: builtin/rebase.c:1480
+#: builtin/rebase.c:1504
 msgid "pass the argument through to the merge strategy"
 msgstr "аргументът да се подаде на стратегията за сливане"
 
-#: builtin/rebase.c:1483
+#: builtin/rebase.c:1507
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "пребазиране на всички достижими подавания до началното им подаване"
 
-#: builtin/rebase.c:1500
+#: builtin/rebase.c:1524
 msgid ""
 "the rebase.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
@@ -17975,33 +18064,41 @@
 "поддръжката на „rebase.useBuiltin“ е премахната.\n"
 "За повече информация вижте „git help config“."
 
-#: builtin/rebase.c:1506
+#: builtin/rebase.c:1530
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr ""
 "Изглежда, че сега се прилагат кръпки чрез командата „git-am“.  Не може да "
 "пребазирате в момента."
 
-#: builtin/rebase.c:1547
+#: builtin/rebase.c:1571
 msgid ""
 "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
 msgstr ""
 "Опцията „--preserve-merges“ е остаряла.  Ползвайте „--rebase-merges“ вместо "
 "нея."
 
-#: builtin/rebase.c:1551
+#: builtin/rebase.c:1576
+msgid "cannot combine '--keep-base' with '--onto'"
+msgstr "опциите „--keep-base“ и „--onto“ са несъвместими"
+
+#: builtin/rebase.c:1578
+msgid "cannot combine '--keep-base' with '--root'"
+msgstr "опциите „--keep-base“ и „--root“ са несъвместими"
+
+#: builtin/rebase.c:1582
 msgid "No rebase in progress?"
 msgstr "Изглежда в момента не тече пребазиране"
 
-#: builtin/rebase.c:1555
+#: builtin/rebase.c:1586
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr ""
 "Опцията „--edit-todo“ е достъпна само по време на интерактивно пребазиране."
 
-#: builtin/rebase.c:1578
+#: builtin/rebase.c:1609
 msgid "Cannot read HEAD"
 msgstr "Указателят „HEAD“ не може да бъде прочетен"
 
-#: builtin/rebase.c:1590
+#: builtin/rebase.c:1621
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -18009,16 +18106,16 @@
 "Трябва да редактирате всички конфликти при сливането.  След това\n"
 "отбележете коригирането им чрез командата „git add“"
 
-#: builtin/rebase.c:1609
+#: builtin/rebase.c:1640
 msgid "could not discard worktree changes"
 msgstr "промените в работното дърво не могат да бъдат занулени"
 
-#: builtin/rebase.c:1628
+#: builtin/rebase.c:1659
 #, c-format
 msgid "could not move back to %s"
 msgstr "връщането към „%s“ е невъзможно"
 
-#: builtin/rebase.c:1673
+#: builtin/rebase.c:1704
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -18039,171 +18136,163 @@
 "за\n"
 "да не загубите случайно промени.\n"
 
-#: builtin/rebase.c:1694
+#: builtin/rebase.c:1725
 msgid "switch `C' expects a numerical value"
 msgstr "опцията „C“ очаква число за аргумент"
 
-#: builtin/rebase.c:1735
+#: builtin/rebase.c:1766
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Неизвестна стратегия: „%s“"
 
-#: builtin/rebase.c:1757
+#: builtin/rebase.c:1788
 msgid "--strategy requires --merge or --interactive"
 msgstr ""
 "опцията „--strategy“ изисква някоя от опциите „--merge“ или „--interactive“"
 
-#: builtin/rebase.c:1797
+#: builtin/rebase.c:1828
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr ""
 "опцията „--reschedule-failed-exec“ изисква някоя от опциите „--exec“ или „--"
 "interactive“"
 
-#: builtin/rebase.c:1809
+#: builtin/rebase.c:1840
 msgid "cannot combine am options with either interactive or merge options"
 msgstr ""
 "опциите за „am“ са несъвместими с опциите за сливане или за интерактивна "
 "работа"
 
-#: builtin/rebase.c:1828
+#: builtin/rebase.c:1859
 msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
 msgstr "опциите „--preserve-merges“ и „--rebase-merges“ са несъвместими"
 
-#: builtin/rebase.c:1832
+#: builtin/rebase.c:1863
 msgid ""
 "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
 msgstr ""
 "ГРЕШКА: опциите „--preserve-merges“ и „--reschedule-failed-exec“ са "
 "несъвместими"
 
-#: builtin/rebase.c:1838
-msgid "cannot combine '--rebase-merges' with '--strategy-option'"
-msgstr "опциите „--rebase-merges“ и „--strategy-option“ са несъвместими"
-
-#: builtin/rebase.c:1841
-msgid "cannot combine '--rebase-merges' with '--strategy'"
-msgstr "опциите „--rebase-merges“ и „--strategy“ са несъвместими"
-
-#: builtin/rebase.c:1865
+#: builtin/rebase.c:1887
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "неправилен следен клон: „%s“"
 
-#: builtin/rebase.c:1871
+#: builtin/rebase.c:1893
 msgid "Could not create new root commit"
 msgstr "Не може да се създаде ново начално подаване"
 
-#: builtin/rebase.c:1889
+#: builtin/rebase.c:1919
+#, c-format
+msgid "'%s': need exactly one merge base with branch"
+msgstr "„%s“: изисква се точно една база за сливане с клона"
+
+#: builtin/rebase.c:1922
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "„%s“: изисква се точно една база за пребазиране"
 
-#: builtin/rebase.c:1896
+#: builtin/rebase.c:1930
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "Указателят „%s“ не сочи към подаване"
 
-#: builtin/rebase.c:1921
+#: builtin/rebase.c:1955
 #, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr "ФАТАЛНА ГРЕШКА: не съществува клон „%s“"
 
-#: builtin/rebase.c:1929 builtin/submodule--helper.c:38
+#: builtin/rebase.c:1963 builtin/submodule--helper.c:38
 #: builtin/submodule--helper.c:1934
 #, c-format
 msgid "No such ref: %s"
 msgstr "Такъв указател няма: %s"
 
-#: builtin/rebase.c:1940
+#: builtin/rebase.c:1974
 msgid "Could not resolve HEAD to a revision"
 msgstr "Подаването, сочено от указателя „HEAD“, не може да бъде открито"
 
-#: builtin/rebase.c:1981
+#: builtin/rebase.c:2012
 msgid "Cannot autostash"
 msgstr "Не може да се скатае автоматично"
 
-#: builtin/rebase.c:1984
+#: builtin/rebase.c:2015
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Неочакван резултат при скатаване: „%s“"
 
-#: builtin/rebase.c:1990
+#: builtin/rebase.c:2021
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "Директорията за „%s“ не може да бъде създадена"
 
-#: builtin/rebase.c:1993
+#: builtin/rebase.c:2024
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Автоматично скатано: „%s“\n"
 
-#: builtin/rebase.c:1996
+#: builtin/rebase.c:2027
 msgid "could not reset --hard"
 msgstr "неуспешно изпълнение на „git reset --hard“"
 
-#: builtin/rebase.c:1997 builtin/reset.c:114
-#, c-format
-msgid "HEAD is now at %s"
-msgstr "Указателят „HEAD“ сочи към „%s“"
-
-#: builtin/rebase.c:2013
+#: builtin/rebase.c:2036
 msgid "Please commit or stash them."
 msgstr "Промените трябва или да се подадат, или да се скатаят."
 
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:2063
 #, c-format
 msgid "could not parse '%s'"
 msgstr "„%s“ не може да се анализира"
 
-#: builtin/rebase.c:2053
+#: builtin/rebase.c:2076
 #, c-format
 msgid "could not switch to %s"
 msgstr "не може да се премине към „%s“"
 
-#: builtin/rebase.c:2064
+#: builtin/rebase.c:2087
 msgid "HEAD is up to date."
 msgstr "Указателят „HEAD“ е напълно актуален."
 
-#: builtin/rebase.c:2066
+#: builtin/rebase.c:2089
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "Текущият клон „%s“ е напълно актуален.\n"
 
-#: builtin/rebase.c:2074
+#: builtin/rebase.c:2097
 msgid "HEAD is up to date, rebase forced."
 msgstr "Указателят „HEAD“ е напълно актуален — принудително пребазиране"
 
-#: builtin/rebase.c:2076
+#: builtin/rebase.c:2099
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "Текущият клон „%s“ е напълно актуален — принудително пребазиране\n"
 
-#: builtin/rebase.c:2084
+#: builtin/rebase.c:2107
 msgid "The pre-rebase hook refused to rebase."
 msgstr "Куката за изпълнение преди пребазиране отхвърли пребазирането."
 
-#: builtin/rebase.c:2091
+#: builtin/rebase.c:2114
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Промените в „%s“:\n"
 
-#: builtin/rebase.c:2094
+#: builtin/rebase.c:2117
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Промените от „%s“ към „%s“:\n"
 
-#: builtin/rebase.c:2119
+#: builtin/rebase.c:2142
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 "Първо, указателят „HEAD“ започва да сочи към базата, върху която "
 "пребазирате…\n"
 
-#: builtin/rebase.c:2128
+#: builtin/rebase.c:2151
 msgid "Could not detach HEAD"
 msgstr "Указателят „HEAD“ не може да се отделѝ"
 
-#: builtin/rebase.c:2137
+#: builtin/rebase.c:2160
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Превъртане на „%s“ към „%s“.\n"
@@ -18212,7 +18301,7 @@
 msgid "git receive-pack <git-dir>"
 msgstr "git receive-pack ДИРЕКТОРИЯ_НА_GIT"
 
-#: builtin/receive-pack.c:832
+#: builtin/receive-pack.c:830
 msgid ""
 "By default, updating the current branch in a non-bare repository\n"
 "is denied, because it will make the index and work tree inconsistent\n"
@@ -18245,7 +18334,7 @@
 "За да заглушите това съобщение, като запазите стандартното поведение,\n"
 "задайте настройката „receive.denyCurrentBranch“ да е „refuse“ (отказ)."
 
-#: builtin/receive-pack.c:852
+#: builtin/receive-pack.c:850
 msgid ""
 "By default, deleting the current branch is denied, because the next\n"
 "'git clone' won't result in any file checked out, causing confusion.\n"
@@ -18266,11 +18355,11 @@
 "За да заглушите това съобщение, задайте настройката\n"
 "„receive.denyDeleteCurrent“ да е „refuse“ (отказ)."
 
-#: builtin/receive-pack.c:1938
+#: builtin/receive-pack.c:1936
 msgid "quiet"
 msgstr "без извеждане на информация"
 
-#: builtin/receive-pack.c:1952
+#: builtin/receive-pack.c:1950
 msgid "You must specify a directory."
 msgstr "Трябва да укажете директория."
 
@@ -18851,11 +18940,11 @@
 msgid "Unknown subcommand: %s"
 msgstr "Непозната подкоманда: %s"
 
-#: builtin/repack.c:22
+#: builtin/repack.c:23
 msgid "git repack [<options>]"
 msgstr "git repack [ОПЦИЯ…]"
 
-#: builtin/repack.c:27
+#: builtin/repack.c:28
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -18864,126 +18953,126 @@
 "Ползвайте опцията --no-write-bitmap-index или изключете настройката\n"
 "„pack.writebitmaps“."
 
-#: builtin/repack.c:190
+#: builtin/repack.c:191
 msgid "could not start pack-objects to repack promisor objects"
 msgstr ""
 "командата „pack-objects“ не може да се стартира за препакетирането на "
 "гарантиращите обекти"
 
-#: builtin/repack.c:229 builtin/repack.c:408
+#: builtin/repack.c:230 builtin/repack.c:409
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 "repack: от „pack-objects“ се очакват редове само с пълни шестнайсетични "
 "указатели."
 
-#: builtin/repack.c:246
+#: builtin/repack.c:247
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr ""
 "командата „pack-objects“ не може да завърши за препакетирането на "
 "гарантиращите обекти"
 
-#: builtin/repack.c:284
+#: builtin/repack.c:285
 msgid "pack everything in a single pack"
 msgstr "пакетиране на всичко в пакет"
 
-#: builtin/repack.c:286
+#: builtin/repack.c:287
 msgid "same as -a, and turn unreachable objects loose"
 msgstr ""
 "същото като опцията „-a“.  Допълнително — недостижимите обекти да станат "
 "непакетирани"
 
-#: builtin/repack.c:289
+#: builtin/repack.c:290
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr ""
 "премахване на ненужните пакетирани файлове и изпълнение на командата „git-"
 "prune-packed“"
 
-#: builtin/repack.c:291
+#: builtin/repack.c:292
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "подаване на опцията „--no-reuse-delta“ на командата „git-pack-objects“"
 
-#: builtin/repack.c:293
+#: builtin/repack.c:294
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr ""
 "подаване на опцията „--no-reuse-object“ на командата „git-pack-objects“"
 
-#: builtin/repack.c:295
+#: builtin/repack.c:296
 msgid "do not run git-update-server-info"
 msgstr "без изпълнение на командата „git-update-server-info“"
 
-#: builtin/repack.c:298
+#: builtin/repack.c:299
 msgid "pass --local to git-pack-objects"
 msgstr "подаване на опцията „--local“ на командата „git-pack-objects“"
 
-#: builtin/repack.c:300
+#: builtin/repack.c:301
 msgid "write bitmap index"
 msgstr "създаване и записване на индекси на база битови маски"
 
-#: builtin/repack.c:302
+#: builtin/repack.c:303
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "подаване на опцията „--delta-islands“ на командата „git-pack-objects“"
 
-#: builtin/repack.c:303
+#: builtin/repack.c:304
 msgid "approxidate"
 msgstr "евристична дата"
 
-#: builtin/repack.c:304
+#: builtin/repack.c:305
 msgid "with -A, do not loosen objects older than this"
 msgstr ""
 "при комбинирането с опцията „-A“ — без разпакетиране на обектите по стари от "
 "това"
 
-#: builtin/repack.c:306
+#: builtin/repack.c:307
 msgid "with -a, repack unreachable objects"
 msgstr "с „-a“ — препакетиране на недостижимите обекти"
 
-#: builtin/repack.c:308
+#: builtin/repack.c:309
 msgid "size of the window used for delta compression"
 msgstr "размер на прозореца за делта компресията"
 
-#: builtin/repack.c:309 builtin/repack.c:315
+#: builtin/repack.c:310 builtin/repack.c:316
 msgid "bytes"
 msgstr "байтове"
 
-#: builtin/repack.c:310
+#: builtin/repack.c:311
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr ""
 "същото като горната опция, но ограничението да е по размер на паметта, а не "
 "по броя на обектите"
 
-#: builtin/repack.c:312
+#: builtin/repack.c:313
 msgid "limits the maximum delta depth"
 msgstr "ограничаване на максималната дълбочина на делтата"
 
-#: builtin/repack.c:314
+#: builtin/repack.c:315
 msgid "limits the maximum number of threads"
 msgstr "ограничаване на максималния брой нишки"
 
-#: builtin/repack.c:316
+#: builtin/repack.c:317
 msgid "maximum size of each packfile"
 msgstr "максимален размер на всеки пакет"
 
-#: builtin/repack.c:318
+#: builtin/repack.c:319
 msgid "repack objects in packs marked with .keep"
 msgstr "препакетиране на обектите в пакети белязани с „.keep“"
 
-#: builtin/repack.c:320
+#: builtin/repack.c:321
 msgid "do not repack this pack"
 msgstr "без препакетиране на този пакет"
 
-#: builtin/repack.c:330
+#: builtin/repack.c:331
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "пакетите в хранилище с важни обекти не може да се трият"
 
-#: builtin/repack.c:334
+#: builtin/repack.c:335
 msgid "--keep-unreachable and -A are incompatible"
 msgstr "Опциите „--keep-unreachable“ и „-A“ са несъвместими"
 
-#: builtin/repack.c:417
+#: builtin/repack.c:418
 msgid "Nothing new to pack."
 msgstr "Нищо ново за пакетиране"
 
-#: builtin/repack.c:478
+#: builtin/repack.c:479
 #, c-format
 msgid ""
 "WARNING: Some packs in use have been renamed by\n"
@@ -19001,7 +19090,7 @@
 "ПРЕДУПРЕЖДЕНИЕ: ѝ — за връщането на първоначалните имена.\n"
 "ПРЕДУПРЕЖДЕНИЕ: Преименувайте файловете в „%s“ ръчно:\n"
 
-#: builtin/repack.c:526
+#: builtin/repack.c:527
 #, c-format
 msgid "failed to remove '%s'"
 msgstr "директорията „%s“ не може да бъде изтрита"
@@ -19109,8 +19198,8 @@
 msgid "unable to write object to database"
 msgstr "обектът не може да бъде записан в базата от данни"
 
-#: builtin/replace.c:322 builtin/replace.c:377 builtin/replace.c:422
-#: builtin/replace.c:452
+#: builtin/replace.c:322 builtin/replace.c:378 builtin/replace.c:423
+#: builtin/replace.c:453
 #, c-format
 msgid "not a valid object name: '%s'"
 msgstr "неправилно име на обект: „%s“"
@@ -19129,22 +19218,22 @@
 msgid "new object is the same as the old one: '%s'"
 msgstr "новият и старият обект са един и същ: „%s“"
 
-#: builtin/replace.c:383
+#: builtin/replace.c:384
 #, c-format
 msgid "could not parse %s as a commit"
 msgstr "„%s“ не може да се анализира като подаване"
 
-#: builtin/replace.c:414
+#: builtin/replace.c:415
 #, c-format
 msgid "bad mergetag in commit '%s'"
 msgstr "етикетът при сливане в подаването „%s“ e неправилен"
 
-#: builtin/replace.c:416
+#: builtin/replace.c:417
 #, c-format
 msgid "malformed mergetag in commit '%s'"
 msgstr "етикетът при сливане в подаването „%s“ e неправилен"
 
-#: builtin/replace.c:428
+#: builtin/replace.c:429
 #, c-format
 msgid ""
 "original commit '%s' contains mergetag '%s' that is discarded; use --edit "
@@ -19153,31 +19242,31 @@
 "Първоначалното подаване „%s“ съдържа етикета при сливане „%s“, който е "
 "изхвърлен, затова използвайте опцията „--edit“, а не „--graft“."
 
-#: builtin/replace.c:467
+#: builtin/replace.c:468
 #, c-format
 msgid "the original commit '%s' has a gpg signature"
 msgstr "първоначалното подаване „%s“ е с подпис на GPG"
 
-#: builtin/replace.c:468
+#: builtin/replace.c:469
 msgid "the signature will be removed in the replacement commit!"
 msgstr "Подписът ще бъде премахнат в заменящото подаване!"
 
-#: builtin/replace.c:478
+#: builtin/replace.c:479
 #, c-format
 msgid "could not write replacement commit for: '%s'"
 msgstr "заменящото подаване за „%s“ не може да бъде записано"
 
-#: builtin/replace.c:486
+#: builtin/replace.c:487
 #, c-format
 msgid "graft for '%s' unnecessary"
 msgstr "присадката за „%s“ е излишна"
 
-#: builtin/replace.c:490
+#: builtin/replace.c:491
 #, c-format
 msgid "new commit is the same as the old one: '%s'"
 msgstr "новото и старото подаване са едно и също: „%s“"
 
-#: builtin/replace.c:525
+#: builtin/replace.c:526
 #, c-format
 msgid ""
 "could not convert the following graft(s):\n"
@@ -19186,71 +19275,71 @@
 "следните присадки не могат да се преобразуват:\n"
 "%s"
 
-#: builtin/replace.c:546
+#: builtin/replace.c:547
 msgid "list replace refs"
 msgstr "извеждане на списъка с указателите за замяна"
 
-#: builtin/replace.c:547
+#: builtin/replace.c:548
 msgid "delete replace refs"
 msgstr "изтриване на указателите за замяна"
 
-#: builtin/replace.c:548
+#: builtin/replace.c:549
 msgid "edit existing object"
 msgstr "редактиране на съществуващ обект"
 
-#: builtin/replace.c:549
+#: builtin/replace.c:550
 msgid "change a commit's parents"
 msgstr "смяна на родителите на подаване"
 
-#: builtin/replace.c:550
+#: builtin/replace.c:551
 msgid "convert existing graft file"
 msgstr "преобразуване на файла за присадките"
 
-#: builtin/replace.c:551
+#: builtin/replace.c:552
 msgid "replace the ref if it exists"
 msgstr "замяна на указателя, ако съществува"
 
-#: builtin/replace.c:553
+#: builtin/replace.c:554
 msgid "do not pretty-print contents for --edit"
 msgstr "без форматирано извеждане на съдържанието — за опцията „--edit“"
 
-#: builtin/replace.c:554
+#: builtin/replace.c:555
 msgid "use this format"
 msgstr "използване на този ФОРМАТ"
 
-#: builtin/replace.c:567
+#: builtin/replace.c:568
 msgid "--format cannot be used when not listing"
 msgstr "опцията „--format“ изисква извеждане на списък"
 
-#: builtin/replace.c:575
+#: builtin/replace.c:576
 msgid "-f only makes sense when writing a replacement"
 msgstr "опцията „-f“ изисква запазването на заместител"
 
-#: builtin/replace.c:579
+#: builtin/replace.c:580
 msgid "--raw only makes sense with --edit"
 msgstr "опцията „--raw“ изисква „--edit“"
 
-#: builtin/replace.c:585
+#: builtin/replace.c:586
 msgid "-d needs at least one argument"
 msgstr "опцията „-d“ изисква поне един аргумент"
 
-#: builtin/replace.c:591
+#: builtin/replace.c:592
 msgid "bad number of arguments"
 msgstr "неправилен брой аргументи"
 
-#: builtin/replace.c:597
+#: builtin/replace.c:598
 msgid "-e needs exactly one argument"
 msgstr "опцията „-e“ изисква поне един аргумент"
 
-#: builtin/replace.c:603
+#: builtin/replace.c:604
 msgid "-g needs at least one argument"
 msgstr "опцията „-g“ изисква поне един аргумент"
 
-#: builtin/replace.c:609
+#: builtin/replace.c:610
 msgid "--convert-graft-file takes no argument"
 msgstr "опцията „--convert-graft-file“ не приема аргументи"
 
-#: builtin/replace.c:615
+#: builtin/replace.c:616
 msgid "only one pattern can be given with -l"
 msgstr "опцията „-l“ приема точно един шаблон"
 
@@ -19318,13 +19407,18 @@
 msgid "Failed to find tree of %s."
 msgstr "Дървото, сочено от „%s“, не може да бъде открито."
 
+#: builtin/reset.c:114
+#, c-format
+msgid "HEAD is now at %s"
+msgstr "Указателят „HEAD“ сочи към „%s“"
+
 #: builtin/reset.c:193
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Не може да се извърши %s зануляване по време на сливане."
 
-#: builtin/reset.c:293 builtin/stash.c:514 builtin/stash.c:589
-#: builtin/stash.c:613
+#: builtin/reset.c:293 builtin/stash.c:520 builtin/stash.c:595
+#: builtin/stash.c:619
 msgid "be quiet, only report errors"
 msgstr "по-малко подробности, да се извеждат само грешките"
 
@@ -19410,24 +19504,19 @@
 msgid "Could not write new index file."
 msgstr "Новият индекс не може да бъде записан."
 
-#: builtin/rev-list.c:412
+#: builtin/rev-list.c:411
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr "опциите „--exclude-promisor-objects“ и „--missing“ и са несъвместими"
 
-#: builtin/rev-list.c:473
+#: builtin/rev-list.c:472
 msgid "object filtering requires --objects"
 msgstr "филтрирането на обекти изисква опцията „--objects“"
 
-#: builtin/rev-list.c:476
-#, c-format
-msgid "invalid sparse value '%s'"
-msgstr "неправилна частична стойност: %s"
-
-#: builtin/rev-list.c:527
+#: builtin/rev-list.c:522
 msgid "rev-list does not support display of notes"
 msgstr "командата „rev-list“ не поддържа извеждането на бележки"
 
-#: builtin/rev-list.c:530
+#: builtin/rev-list.c:525
 msgid "cannot combine --use-bitmap-index with object filtering"
 msgstr "опцията „--use-bitmap-index“ е несъвместима с филтриране на обектите"
 
@@ -19982,134 +20071,134 @@
 msgid "could not save index tree"
 msgstr "дървото сочено от индекса не може да бъде запазено"
 
-#: builtin/stash.c:434
+#: builtin/stash.c:436
 msgid "could not restore untracked files from stash"
 msgstr "неследени файлове не могат да се възстановят от скатаното"
 
-#: builtin/stash.c:448
+#: builtin/stash.c:450
 #, c-format
 msgid "Merging %s with %s"
 msgstr "Сливане на „%s“ с „%s“"
 
-#: builtin/stash.c:458 git-legacy-stash.sh:680
+#: builtin/stash.c:460 git-legacy-stash.sh:680
 msgid "Index was not unstashed."
 msgstr "Индексът не е изваден от скатаното."
 
-#: builtin/stash.c:516 builtin/stash.c:615
+#: builtin/stash.c:522 builtin/stash.c:621
 msgid "attempt to recreate the index"
 msgstr "опит за повторно създаване на индекса"
 
-#: builtin/stash.c:549
+#: builtin/stash.c:555
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "Изтрито: „%s“ (%s)"
 
-#: builtin/stash.c:552
+#: builtin/stash.c:558
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "Скатаното „%s“ не може да бъде изтрито"
 
-#: builtin/stash.c:577
+#: builtin/stash.c:583
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "„%s“ не е указател към нещо скатано"
 
-#: builtin/stash.c:627 git-legacy-stash.sh:694
+#: builtin/stash.c:633 git-legacy-stash.sh:694
 msgid "The stash entry is kept in case you need it again."
 msgstr "Скатаното е запазено в случай, че ви потрябва отново."
 
-#: builtin/stash.c:650 git-legacy-stash.sh:712
+#: builtin/stash.c:656 git-legacy-stash.sh:712
 msgid "No branch name specified"
 msgstr "Не е указано име на клон"
 
-#: builtin/stash.c:790 builtin/stash.c:827
+#: builtin/stash.c:796 builtin/stash.c:833
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "Указателят „%s“ не може да бъде обновен да сочи към „%s“"
 
-#: builtin/stash.c:808 builtin/stash.c:1461 builtin/stash.c:1497
+#: builtin/stash.c:814 builtin/stash.c:1470 builtin/stash.c:1506
 msgid "stash message"
 msgstr "съобщение при скатаване"
 
-#: builtin/stash.c:818
+#: builtin/stash.c:824
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "командата „git stash store“ изисква точно един аргумент-ПОДАВАНЕ"
 
-#: builtin/stash.c:1040 git-legacy-stash.sh:217
+#: builtin/stash.c:1046 git-legacy-stash.sh:217
 msgid "No changes selected"
 msgstr "Не са избрани никакви промени"
 
-#: builtin/stash.c:1136 git-legacy-stash.sh:150
+#: builtin/stash.c:1145 git-legacy-stash.sh:150
 msgid "You do not have the initial commit yet"
 msgstr "Все още липсва първоначално подаване"
 
-#: builtin/stash.c:1163 git-legacy-stash.sh:165
+#: builtin/stash.c:1172 git-legacy-stash.sh:165
 msgid "Cannot save the current index state"
 msgstr "Състоянието на текущия индекс не може да бъде запазено"
 
-#: builtin/stash.c:1172 git-legacy-stash.sh:180
+#: builtin/stash.c:1181 git-legacy-stash.sh:180
 msgid "Cannot save the untracked files"
 msgstr "Неследените файлове не могат да се запазят"
 
-#: builtin/stash.c:1183 builtin/stash.c:1192 git-legacy-stash.sh:200
+#: builtin/stash.c:1192 builtin/stash.c:1201 git-legacy-stash.sh:200
 #: git-legacy-stash.sh:213
 msgid "Cannot save the current worktree state"
 msgstr "Състоянието на работното дърво не може да бъде запазено"
 
-#: builtin/stash.c:1220 git-legacy-stash.sh:233
+#: builtin/stash.c:1229 git-legacy-stash.sh:233
 msgid "Cannot record working tree state"
 msgstr "Състоянието на работното дърво не може да бъде запазено"
 
-#: builtin/stash.c:1269 git-legacy-stash.sh:337
+#: builtin/stash.c:1278 git-legacy-stash.sh:337
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr "Опцията „--patch“ е несъвместима с „--include-untracked“ и „--all“"
 
-#: builtin/stash.c:1285
+#: builtin/stash.c:1294
 msgid "Did you forget to 'git add'?"
 msgstr "Пробвайте да използвате „git add“"
 
-#: builtin/stash.c:1300 git-legacy-stash.sh:345
+#: builtin/stash.c:1309 git-legacy-stash.sh:345
 msgid "No local changes to save"
 msgstr "Няма никакви локални промени за скатаване"
 
-#: builtin/stash.c:1307 git-legacy-stash.sh:350
+#: builtin/stash.c:1316 git-legacy-stash.sh:350
 msgid "Cannot initialize stash"
 msgstr "Скатаването не може да стартира"
 
-#: builtin/stash.c:1322 git-legacy-stash.sh:354
+#: builtin/stash.c:1331 git-legacy-stash.sh:354
 msgid "Cannot save the current status"
 msgstr "Текущото състояние не може да бъде запазено"
 
-#: builtin/stash.c:1327
+#: builtin/stash.c:1336
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Състоянието на работната директория и индекса e запазено: „%s“"
 
-#: builtin/stash.c:1417 git-legacy-stash.sh:384
+#: builtin/stash.c:1426 git-legacy-stash.sh:384
 msgid "Cannot remove worktree changes"
 msgstr "Промените в работното дърво не могат да бъдат занулени"
 
-#: builtin/stash.c:1452 builtin/stash.c:1488
+#: builtin/stash.c:1461 builtin/stash.c:1497
 msgid "keep index"
 msgstr "запазване на индекса"
 
-#: builtin/stash.c:1454 builtin/stash.c:1490
+#: builtin/stash.c:1463 builtin/stash.c:1499
 msgid "stash in patch mode"
 msgstr "скатаване в режим за кръпки"
 
-#: builtin/stash.c:1455 builtin/stash.c:1491
+#: builtin/stash.c:1464 builtin/stash.c:1500
 msgid "quiet mode"
 msgstr "без извеждане на информация"
 
-#: builtin/stash.c:1457 builtin/stash.c:1493
+#: builtin/stash.c:1466 builtin/stash.c:1502
 msgid "include untracked files in stash"
 msgstr "скатаване и на неследените файлове"
 
-#: builtin/stash.c:1459 builtin/stash.c:1495
+#: builtin/stash.c:1468 builtin/stash.c:1504
 msgid "include ignore files"
 msgstr "скатаване и на игнорираните файлове"
 
-#: builtin/stash.c:1555
+#: builtin/stash.c:1564
 #, c-format
 msgid "could not exec %s"
 msgstr "„%s“ не може да се изпълни"
@@ -20485,8 +20574,8 @@
 msgstr "без извеждане на напредъка на клонирането"
 
 #: builtin/submodule--helper.c:1877
-msgid "git submodule--helper update_clone [--prefix=<path>] [<path>...]"
-msgstr "git submodule--helper update_clone [--prefix=ПЪТ] [ПЪТ…]"
+msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
+msgstr "git submodule--helper update-clone [--prefix=ПЪТ] [ПЪТ…]"
 
 #: builtin/submodule--helper.c:1890
 msgid "bad value for update parameter"
@@ -20539,7 +20628,7 @@
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr "файлът „.gitmodules“ трябва да е в работното дърво"
 
-#: builtin/submodule--helper.c:2235 git.c:434 git.c:684
+#: builtin/submodule--helper.c:2235 git.c:433 git.c:683
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "„%s“ не поддържа опцията „--super-prefix“"
@@ -20871,149 +20960,149 @@
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [ОПЦИЯ…] [--] [ФАЙЛ…]"
 
-#: builtin/update-index.c:971
+#: builtin/update-index.c:972
 msgid "continue refresh even when index needs update"
 msgstr ""
 "продължаване с обновяването, дори когато индексът трябва да бъде обновен"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:975
 msgid "refresh: ignore submodules"
 msgstr "подмодулите да се игнорират при обновяването"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:978
 msgid "do not ignore new files"
 msgstr "новите файлове да не се игнорират"
 
-#: builtin/update-index.c:979
+#: builtin/update-index.c:980
 msgid "let files replace directories and vice-versa"
 msgstr "файлове да могат да заменят директории и обратно"
 
-#: builtin/update-index.c:981
+#: builtin/update-index.c:982
 msgid "notice files missing from worktree"
 msgstr "предупреждаване при липсващи в работното дърво файлове"
 
-#: builtin/update-index.c:983
+#: builtin/update-index.c:984
 msgid "refresh even if index contains unmerged entries"
 msgstr "обновяване дори и индексът да съдържа неслети обекти"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:987
 msgid "refresh stat information"
 msgstr "обновяване на информацията от функцията „stat“"
 
-#: builtin/update-index.c:990
+#: builtin/update-index.c:991
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr ""
 "като опцията „--refresh“, но да се проверят и обектите, които са били приети "
 "за непроменени"
 
-#: builtin/update-index.c:994
+#: builtin/update-index.c:995
 msgid "<mode>,<object>,<path>"
 msgstr "РЕЖИМ,ОБЕКТ,ПЪТ"
 
-#: builtin/update-index.c:995
+#: builtin/update-index.c:996
 msgid "add the specified entry to the index"
 msgstr "добавяне на изброените обекти към индекса"
 
-#: builtin/update-index.c:1005
+#: builtin/update-index.c:1006
 msgid "mark files as \"not changing\""
 msgstr "задаване на флаг, че файлът не се променя"
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1009
 msgid "clear assumed-unchanged bit"
 msgstr "изчистване на флага, че файлът не се променя"
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1012
 msgid "mark files as \"index-only\""
 msgstr "задаване на флаг, че файловете са само за индекса"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1015
 msgid "clear skip-worktree bit"
 msgstr "изчистване на флага,  че файловете са само за индекса"
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1018
 msgid "add to index only; do not add content to object database"
 msgstr "добавяне само към индекса без добавяне към базата от данни за обектите"
 
-#: builtin/update-index.c:1019
+#: builtin/update-index.c:1020
 msgid "remove named paths even if present in worktree"
 msgstr "изтриване на указаните пътища, дори и да съществуват в работното дърво"
 
-#: builtin/update-index.c:1021
+#: builtin/update-index.c:1022
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr ""
 "при комбиниране с опцията „--stdin“ — входните редове са разделени с нулевия "
 "байт"
 
-#: builtin/update-index.c:1023
+#: builtin/update-index.c:1024
 msgid "read list of paths to be updated from standard input"
 msgstr "изчитане на списъка с пътища за обновяване от стандартния вход"
 
-#: builtin/update-index.c:1027
+#: builtin/update-index.c:1028
 msgid "add entries from standard input to the index"
 msgstr "добавяне на елементите от стандартния вход към индекса"
 
-#: builtin/update-index.c:1031
+#: builtin/update-index.c:1032
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr ""
 "възстановяване на състоянието преди сливане или нужда от обновяване за "
 "изброените пътища"
 
-#: builtin/update-index.c:1035
+#: builtin/update-index.c:1036
 msgid "only update entries that differ from HEAD"
 msgstr "добавяне само на съдържанието, което се различава от това в „HEAD“"
 
-#: builtin/update-index.c:1039
+#: builtin/update-index.c:1040
 msgid "ignore files missing from worktree"
 msgstr "игнориране на файловете, които липсват в работното дърво"
 
-#: builtin/update-index.c:1042
+#: builtin/update-index.c:1043
 msgid "report actions to standard output"
 msgstr "извеждане на действията на стандартния изход"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1045
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr ""
 "забравяне на записаната информация за неразрешени конфликти — за командите "
 "от потребителско ниво"
 
-#: builtin/update-index.c:1048
+#: builtin/update-index.c:1049
 msgid "write index in this format"
 msgstr "записване на индекса в този формат"
 
-#: builtin/update-index.c:1050
+#: builtin/update-index.c:1051
 msgid "enable or disable split index"
 msgstr "включване или изключване на разделянето на индекса"
 
-#: builtin/update-index.c:1052
+#: builtin/update-index.c:1053
 msgid "enable/disable untracked cache"
 msgstr "включване/изключване на кеша за неследените файлове"
 
-#: builtin/update-index.c:1054
+#: builtin/update-index.c:1055
 msgid "test if the filesystem supports untracked cache"
 msgstr "проверка дали файловата система поддържа кеш за неследени файлове"
 
-#: builtin/update-index.c:1056
+#: builtin/update-index.c:1057
 msgid "enable untracked cache without testing the filesystem"
 msgstr ""
 "включване на кеша за неследените файлове без проверка на файловата система"
 
-#: builtin/update-index.c:1058
+#: builtin/update-index.c:1059
 msgid "write out the index even if is not flagged as changed"
 msgstr "запис на индекса, дори да не е отбелязан като променен"
 
-#: builtin/update-index.c:1060
+#: builtin/update-index.c:1061
 msgid "enable or disable file system monitor"
 msgstr "включване или изключване на наблюдението на файловата система"
 
-#: builtin/update-index.c:1062
+#: builtin/update-index.c:1063
 msgid "mark files as fsmonitor valid"
 msgstr "отбелязване на файловете, че могат да се следят чрез файловата система"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1066
 msgid "clear fsmonitor valid bit"
 msgstr "изчистване на флага за следенето чрез файловата система"
 
-#: builtin/update-index.c:1168
+#: builtin/update-index.c:1169
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
@@ -21021,7 +21110,7 @@
 "Настройката „core.splitIndex“ е зададена на „false“ (лъжа).  Сменете я или я "
 "изтрийте, за да включите разделянето на индекса"
 
-#: builtin/update-index.c:1177
+#: builtin/update-index.c:1178
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
@@ -21029,7 +21118,7 @@
 "Настройката „core.splitIndex“ е зададена на „true“ (истина).  Сменете я или "
 "я изтрийте, за да изключите разделянето на индекса."
 
-#: builtin/update-index.c:1188
+#: builtin/update-index.c:1190
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -21037,11 +21126,11 @@
 "Настройката „core.untrackedCache“ е зададена на „true“ (истина).  Сменете я "
 "или я изтрийте, за да изключите кеша за неследените файлове"
 
-#: builtin/update-index.c:1192
+#: builtin/update-index.c:1194
 msgid "Untracked cache disabled"
 msgstr "Кешът за неследените файлове е изключен"
 
-#: builtin/update-index.c:1200
+#: builtin/update-index.c:1202
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -21049,29 +21138,29 @@
 "Настройката „core.untrackedCache“ е зададена на „false“ (лъжа).  Сменете я "
 "или я изтрийте, за да включите кеша за неследените файлове"
 
-#: builtin/update-index.c:1204
+#: builtin/update-index.c:1206
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "Кешът за неследените файлове е включен за „%s“"
 
-#: builtin/update-index.c:1212
+#: builtin/update-index.c:1214
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr ""
 "Настройката „core.fsmonitor“ не е зададена.  Задайте я, за да включите "
 "следенето чрез файловата система."
 
-#: builtin/update-index.c:1216
+#: builtin/update-index.c:1218
 msgid "fsmonitor enabled"
 msgstr "следенето чрез файловата система е включено"
 
-#: builtin/update-index.c:1219
+#: builtin/update-index.c:1221
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 "Настройката „core.fsmonitor“ е зададена.  Изтрийте я, за да изключите "
 "следенето чрез файловата система."
 
-#: builtin/update-index.c:1223
+#: builtin/update-index.c:1225
 msgid "fsmonitor disabled"
 msgstr "следенето чрез файловата система е изключено"
 
@@ -21166,56 +21255,56 @@
 msgid "print tag contents"
 msgstr "извеждане на съдържанието на ЕТИКЕТи"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:17
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [ОПЦИЯ…] ПЪТ [УКАЗАТЕЛ_КЪМ_ПОДАВАНЕ]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:18
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [ОПЦИЯ…]"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:19
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [ОПЦИЯ…] [ПЪТ]"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:20
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move [ДЪРВО] [НОВ_ПЪТ]"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:21
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [ОПЦИЯ…]"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:22
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [ОПЦИЯ…] [ДЪРВО]"
 
-#: builtin/worktree.c:24
+#: builtin/worktree.c:23
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock [ПЪТ]"
 
-#: builtin/worktree.c:61 builtin/worktree.c:899
+#: builtin/worktree.c:60 builtin/worktree.c:898
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "неуспешно изтриване на „%s“"
 
-#: builtin/worktree.c:80
+#: builtin/worktree.c:79
 #, c-format
 msgid "Removing worktrees/%s: not a valid directory"
 msgstr "Изтриване на „worktrees/%s“: не е правилна поддиректория"
 
-#: builtin/worktree.c:86
+#: builtin/worktree.c:85
 #, c-format
 msgid "Removing worktrees/%s: gitdir file does not exist"
 msgstr "Изтриване на „worktrees/%s“: файлът „gitdir“ не съществува"
 
-#: builtin/worktree.c:91 builtin/worktree.c:100
+#: builtin/worktree.c:90 builtin/worktree.c:99
 #, c-format
 msgid "Removing worktrees/%s: unable to read gitdir file (%s)"
 msgstr ""
 "Изтриване на „worktrees/%s“: файлът „gitdir“ (%s) не може да бъде прочетен"
 
-#: builtin/worktree.c:110
+#: builtin/worktree.c:109
 #, c-format
 msgid ""
 "Removing worktrees/%s: short read (expected %<PRIuMAX> bytes, read "
@@ -21224,37 +21313,37 @@
 "Изтриване на „worktrees/%s“: изчитането върна по-малко байтове от очакваното "
 "(очаквани: %<PRIuMAX> байта, получени: %<PRIuMAX>)"
 
-#: builtin/worktree.c:118
+#: builtin/worktree.c:117
 #, c-format
 msgid "Removing worktrees/%s: invalid gitdir file"
 msgstr "Изтриване на „worktrees/%s“: неправилен файл „gitdir“"
 
-#: builtin/worktree.c:127
+#: builtin/worktree.c:126
 #, c-format
 msgid "Removing worktrees/%s: gitdir file points to non-existent location"
 msgstr ""
 "Изтриване на „worktrees/%s“: файлът „gitdir“ сочи несъществуващо "
 "местоположение"
 
-#: builtin/worktree.c:166
+#: builtin/worktree.c:165
 msgid "report pruned working trees"
 msgstr "докладване на окастрените работни дървета"
 
-#: builtin/worktree.c:168
+#: builtin/worktree.c:167
 msgid "expire working trees older than <time>"
 msgstr "обявяване на работните копия по-стари от това ВРЕМЕ за остарели"
 
-#: builtin/worktree.c:235
+#: builtin/worktree.c:234
 #, c-format
 msgid "'%s' already exists"
 msgstr "„%s“ вече съществува"
 
-#: builtin/worktree.c:252
+#: builtin/worktree.c:251
 #, c-format
 msgid "unable to re-add worktree '%s'"
 msgstr "дървото „%s“ не може да бъде добавено наново"
 
-#: builtin/worktree.c:257
+#: builtin/worktree.c:256
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -21264,7 +21353,7 @@
 "За изрично задаване ползвайте „add -f“, а за изчистване — „prune“ или "
 "„remove“"
 
-#: builtin/worktree.c:259
+#: builtin/worktree.c:258
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -21274,125 +21363,125 @@
 "За изрично задаване ползвайте „add -f“, а за изчистване — „prune“ или "
 "„remove“"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:308
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "директорията „%s“ не може да бъде създадена"
 
-#: builtin/worktree.c:440 builtin/worktree.c:446
+#: builtin/worktree.c:439 builtin/worktree.c:445
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "Приготвяне на работното дърво (нов клон „%s“)"
 
-#: builtin/worktree.c:442
+#: builtin/worktree.c:441
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr ""
 "Приготвяне на работното дърво (зануляване на клона „%s“, който сочеше към "
 "„%s“)"
 
-#: builtin/worktree.c:451
+#: builtin/worktree.c:450
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "Приготвяне на работното дърво (изтегляне на „%s“)"
 
-#: builtin/worktree.c:457
+#: builtin/worktree.c:456
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "Подготвяне на работно дърво (указателят „HEAD“ не свързан: %s)"
 
-#: builtin/worktree.c:498
+#: builtin/worktree.c:497
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr "Изтегляне КЛОНа, дори и да е изтеглен в друго работно дърво"
 
-#: builtin/worktree.c:501
+#: builtin/worktree.c:500
 msgid "create a new branch"
 msgstr "създаване на нов клон"
 
-#: builtin/worktree.c:503
+#: builtin/worktree.c:502
 msgid "create or reset a branch"
 msgstr "създаване или зануляване на клони"
 
-#: builtin/worktree.c:505
+#: builtin/worktree.c:504
 msgid "populate the new working tree"
 msgstr "подготвяне на новото работно дърво"
 
-#: builtin/worktree.c:506
+#: builtin/worktree.c:505
 msgid "keep the new working tree locked"
 msgstr "новото работно дърво да остане заключено"
 
-#: builtin/worktree.c:509
+#: builtin/worktree.c:508
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "задаване на режима на следене (виж git-branch(1))"
 
-#: builtin/worktree.c:512
+#: builtin/worktree.c:511
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr "опит за напасване на името на новия клон с това на следящ клон"
 
-#: builtin/worktree.c:520
+#: builtin/worktree.c:519
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr "Опциите „-b“, „-B“ и „--detach“ са несъвместими една с друга"
 
-#: builtin/worktree.c:581
+#: builtin/worktree.c:580
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "„--[no-]track“ може да се използва само при създаването на нов клон"
 
-#: builtin/worktree.c:681
+#: builtin/worktree.c:680
 msgid "reason for locking"
 msgstr "причина за заключване"
 
-#: builtin/worktree.c:693 builtin/worktree.c:726 builtin/worktree.c:800
-#: builtin/worktree.c:927
+#: builtin/worktree.c:692 builtin/worktree.c:725 builtin/worktree.c:799
+#: builtin/worktree.c:926
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "„%s“ не е работно дърво"
 
-#: builtin/worktree.c:695 builtin/worktree.c:728
+#: builtin/worktree.c:694 builtin/worktree.c:727
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "Основното дърво не може да се отключи или заключи"
 
-#: builtin/worktree.c:700
+#: builtin/worktree.c:699
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "„%s“ вече е заключено, защото „%s“"
 
-#: builtin/worktree.c:702
+#: builtin/worktree.c:701
 #, c-format
 msgid "'%s' is already locked"
 msgstr "„%s“ вече е заключено"
 
-#: builtin/worktree.c:730
+#: builtin/worktree.c:729
 #, c-format
 msgid "'%s' is not locked"
 msgstr "„%s“ не е заключено"
 
-#: builtin/worktree.c:771
+#: builtin/worktree.c:770
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr ""
 "не може да местите или изтривате работни дървета, в които има подмодули"
 
-#: builtin/worktree.c:779
+#: builtin/worktree.c:778
 msgid "force move even if worktree is dirty or locked"
 msgstr ""
 "принудително преместване, дори работното дърво да не е чисто или да е "
 "заключено"
 
-#: builtin/worktree.c:802 builtin/worktree.c:929
+#: builtin/worktree.c:801 builtin/worktree.c:928
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "„%s“ е основно работно дърво"
 
-#: builtin/worktree.c:807
+#: builtin/worktree.c:806
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "името на целта не може да се определи от „%s“"
 
-#: builtin/worktree.c:813
+#: builtin/worktree.c:812
 #, c-format
 msgid "target '%s' already exists"
 msgstr "целта „%s“ вече съществува"
 
-#: builtin/worktree.c:821
+#: builtin/worktree.c:820
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -21401,7 +21490,7 @@
 "не може да преместите заключено работно дърво, причина за заключването: %s\n"
 "или го отключете, или го преместете принудително с „move -f -f“"
 
-#: builtin/worktree.c:823
+#: builtin/worktree.c:822
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -21409,41 +21498,41 @@
 "не може да преместите заключено работно дърво:\n"
 "или го отключете, или го преместете принудително с „move -f -f“"
 
-#: builtin/worktree.c:826
+#: builtin/worktree.c:825
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr ""
 "проверките са неуспешни, работното дърво не може да бъде преместено: %s"
 
-#: builtin/worktree.c:831
+#: builtin/worktree.c:830
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "„%s“ не може да се премести в „%s“"
 
-#: builtin/worktree.c:879
+#: builtin/worktree.c:878
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "не може да изпълни „git status“ върху „%s“"
 
-#: builtin/worktree.c:883
+#: builtin/worktree.c:882
 #, c-format
-msgid "'%s' is dirty, use --force to delete it"
+msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
-"работното дърво „%s“ не е чисто, за принудително изтриване е необходима "
-"опцията „--force“ "
+"„%s“ съдържа провенени или нови файлове, за принудително изтриване е "
+"необходима опцията „--force“"
 
-#: builtin/worktree.c:888
+#: builtin/worktree.c:887
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr ""
 "командата „git status“ не може да се изпълни за „%s“, код за грешка: %d"
 
-#: builtin/worktree.c:911
+#: builtin/worktree.c:910
 msgid "force removal even if worktree is dirty or locked"
 msgstr ""
 "принудително изтриване, дори работното дърво да не е чисто или да е заключено"
 
-#: builtin/worktree.c:934
+#: builtin/worktree.c:933
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -21452,7 +21541,7 @@
 "не може да изтриете заключено работно дърво, причина за заключването: %s\n"
 "или го отключете, или го изтрийте принудително с „remove -f -f“"
 
-#: builtin/worktree.c:936
+#: builtin/worktree.c:935
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -21460,7 +21549,7 @@
 "не може да изтриете заключено работно дърво:\n"
 "или го отключете, или го изтрийте принудително с „remove -f -f“"
 
-#: builtin/worktree.c:939
+#: builtin/worktree.c:938
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "проверките са неуспешни, работното дърво не може да бъде изтрито: %s"
@@ -21481,6 +21570,16 @@
 msgid "only useful for debugging"
 msgstr "само за изчистване на грешки"
 
+#: fast-import.c:3118
+#, c-format
+msgid "Expected 'mark' command, got %s"
+msgstr "очаква се команда „mark“, а бе получена: „%s“"
+
+#: fast-import.c:3123
+#, c-format
+msgid "Expected 'to' command, got %s"
+msgstr "очаква се команда „to“, а бе получена: „%s“"
+
 #: credential-cache--daemon.c:223
 #, c-format
 msgid ""
@@ -21598,39 +21697,39 @@
 "псевдонимът „%s“ променя променливи на средата.\n"
 "За това може да ползвате „!git“ в псевдонима"
 
-#: git.c:377
+#: git.c:376
 #, c-format
 msgid "empty alias for %s"
 msgstr "празен псевдоним за „%s“"
 
-#: git.c:380
+#: git.c:379
 #, c-format
 msgid "recursive alias: %s"
 msgstr "зациклен псевдоним: „%s“"
 
-#: git.c:460
+#: git.c:459
 msgid "write failure on standard output"
 msgstr "грешка при запис на стандартния изход"
 
-#: git.c:462
+#: git.c:461
 msgid "unknown write failure on standard output"
 msgstr "неизвестна грешка при запис на стандартния изход"
 
-#: git.c:464
+#: git.c:463
 msgid "close failed on standard output"
 msgstr "грешка при затваряне на стандартния изход"
 
-#: git.c:793
+#: git.c:792
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr "зацикляне в псевдонимите: заместванията на „%s“ не приключват:%s"
 
-#: git.c:843
+#: git.c:842
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "„%s“ не може да се обработи като вградена команда"
 
-#: git.c:856
+#: git.c:855
 #, c-format
 msgid ""
 "usage: %s\n"
@@ -21639,14 +21738,14 @@
 "употреба: %s\n"
 "\n"
 
-#: git.c:876
+#: git.c:875
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr ""
 "неуспешно заместване на псевдонима „%s“ — резултатът „%s“ не е команда на "
 "git\n"
 
-#: git.c:888
+#: git.c:887
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr "командата „%s“ не може да се изпълни: %s\n"
@@ -21665,34 +21764,34 @@
 msgid "Public key pinning not supported with cURL < 7.44.0"
 msgstr "Задаването на постоянен публичен ключ не се поддържа от cURL < 7.44.0"
 
-#: http.c:876
+#: http.c:878
 msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
 msgstr "„CURLSSLOPT_NO_REVOKE“ не се поддържа от cURL < 7.44.0"
 
-#: http.c:949
+#: http.c:951
 msgid "Protocol restrictions not supported with cURL < 7.19.4"
 msgstr "Ограничаването на протоколите не се поддържа от cURL < 7.44.0"
 
-#: http.c:1085
+#: http.c:1088
 #, c-format
 msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
 msgstr "Неподдържана реализация на SSL „%s“. Поддържат се:"
 
-#: http.c:1092
+#: http.c:1095
 #, c-format
 msgid "Could not set SSL backend to '%s': cURL was built without SSL backends"
 msgstr ""
 "Реализацията на SSL не може да се зададе да е „%s“: cURL е компилиран без "
 "поддръжка на SSL"
 
-#: http.c:1096
+#: http.c:1099
 #, c-format
 msgid "Could not set SSL backend to '%s': already set"
 msgstr ""
 "Реализацията на SSL не може да се зададе да е „%s“, защото вече е зададена "
 "друга"
 
-#: http.c:1965
+#: http.c:1968
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -21703,137 +21802,137 @@
 "    ● заявен адрес: %s\n"
 "    ● пренасочване: %s"
 
-#: remote-curl.c:157
+#: remote-curl.c:166
 #, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr ""
 "неправилно екраниране или цитиране в стойността към опция за изтласкване: "
 "„%s“"
 
-#: remote-curl.c:254
+#: remote-curl.c:263
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr "„%sinfo/refs“ е неизползваемо, проверете дали е хранилище на git"
 
-#: remote-curl.c:355
+#: remote-curl.c:364
 msgid "invalid server response; expected service, got flush packet"
 msgstr ""
 "неправилен отговор от сървъра: очакваше се услуга, а бе получен изчистващ "
 "пакет „flush“"
 
-#: remote-curl.c:386
+#: remote-curl.c:395
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr "неправилен отговор от сървъра, бе получено: „%s“"
 
-#: remote-curl.c:446
+#: remote-curl.c:455
 #, c-format
 msgid "repository '%s' not found"
 msgstr "хранилището „%s“ липсва"
 
-#: remote-curl.c:450
+#: remote-curl.c:459
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr "Неуспешна идентификация към „%s“"
 
-#: remote-curl.c:454
+#: remote-curl.c:463
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "няма достъп до „%s“: %s"
 
-#: remote-curl.c:460
+#: remote-curl.c:469
 #, c-format
 msgid "redirecting to %s"
 msgstr "пренасочване към „%s“"
 
-#: remote-curl.c:584
+#: remote-curl.c:593
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr "получен е EOF, в режим без поддръжка за това"
 
-#: remote-curl.c:664
+#: remote-curl.c:673
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr ""
 "данните за POST не могат да се прочетат наново, пробвайте да увеличите "
 "настройката „http.postBuffer“"
 
-#: remote-curl.c:724
+#: remote-curl.c:733
 #, c-format
 msgid "RPC failed; %s"
 msgstr "Неуспешно отдалечено извикване.  %s"
 
-#: remote-curl.c:764
+#: remote-curl.c:773
 msgid "cannot handle pushes this big"
 msgstr "толкова големи изтласквания не може да се изпълнят"
 
-#: remote-curl.c:879
+#: remote-curl.c:888
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr ""
 "заявката не може да бъде декомпресирана, грешка от „zlib“ при "
 "декомпресиране: %d"
 
-#: remote-curl.c:883
+#: remote-curl.c:892
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr ""
 "заявката не може да бъде декомпресирана; грешка от „zlib“ при завършване: %d<"
 
-#: remote-curl.c:1014
+#: remote-curl.c:1023
 msgid "dumb http transport does not support shallow capabilities"
 msgstr "опростеният транспорт по http не поддържа плитки клиенти"
 
-#: remote-curl.c:1028
+#: remote-curl.c:1037
 msgid "fetch failed."
 msgstr "неуспешно доставяне."
 
-#: remote-curl.c:1076
+#: remote-curl.c:1085
 msgid "cannot fetch by sha1 over smart http"
 msgstr "умният вариант на http не може да доставя по SHA1"
 
-#: remote-curl.c:1120 remote-curl.c:1126
+#: remote-curl.c:1129 remote-curl.c:1135
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr "протоколна грешка: очаква се SHA1 или указател, а бе получено: „%s“"
 
-#: remote-curl.c:1138 remote-curl.c:1252
+#: remote-curl.c:1147 remote-curl.c:1261
 #, c-format
 msgid "http transport does not support %s"
 msgstr "транспортът по http не поддържа „%s“"
 
-#: remote-curl.c:1174
+#: remote-curl.c:1183
 msgid "git-http-push failed"
 msgstr "неуспешно изпълнение на „git-http-push“"
 
-#: remote-curl.c:1360
+#: remote-curl.c:1367
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr "remote-curl: употреба: git remote-curl ХРАНИЛИЩЕ [АДРЕС]"
 
-#: remote-curl.c:1392
+#: remote-curl.c:1399
 msgid "remote-curl: error reading command stream from git"
 msgstr "remote-curl: грешка при изчитането на потока команди от git"
 
-#: remote-curl.c:1399
+#: remote-curl.c:1406
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr "remote-curl: опит за доставяне без локално хранилище"
 
-#: remote-curl.c:1439
+#: remote-curl.c:1446
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr "remote-curl: непозната команда „%s“ от git"
 
-#: list-objects-filter-options.h:61
+#: list-objects-filter-options.h:85
 msgid "args"
 msgstr "АРГУМЕНТИ"
 
-#: list-objects-filter-options.h:62
+#: list-objects-filter-options.h:86
 msgid "object filtering"
 msgstr "филтриране по вид на обекта"
 
-#: parse-options.h:170
+#: parse-options.h:179
 msgid "expiry-date"
 msgstr "период на валидност/запазване"
 
-#: parse-options.h:184
+#: parse-options.h:193
 msgid "no-op (backward compatibility)"
 msgstr "нулева операция (за съвместимост с предишни версии)"
 
diff --git a/po/ca.po b/po/ca.po
index 73a0824..3c878ce 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -1332,7 +1332,7 @@
 
 #: bundle.c:143
 msgid "Repository lacks these prerequisite commits:"
-msgstr "Al dipòsit li manquen aquestes comissions prerequisits:"
+msgstr "Al dipòsit li manquen aquestes comissions prerequerides:"
 
 #: bundle.c:146
 msgid "need a repository to verify a bundle"
@@ -2552,7 +2552,7 @@
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
 msgstr ""
-"l'opció diff-algorithm accepta «myers», «minimalminimal», \"patience\" and "
+"l'opció diff-algorithm accepta «myers», «minimal», «patience» i "
 "«histogram»"
 
 #: diff.c:5033 diff.c:5053
@@ -4582,7 +4582,7 @@
 #: read-cache.c:718
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
-msgstr "%s: només pot afegir fitxers normals, enllaços simbolics o directoris git"
+msgstr "%s: només pot afegir fitxers normals, enllaços simbòlics o directoris git"
 
 #: read-cache.c:723
 #, fuzzy, c-format
@@ -7817,9 +7817,8 @@
 msgstr "S'està avortant\n"
 
 #: unpack-trees.c:318
-#, fuzzy
 msgid "Updating files"
-msgstr "S'està actualitzant %s"
+msgstr "S'estan actualitzant els fitxers"
 
 #: unpack-trees.c:350
 msgid ""
@@ -8307,7 +8306,7 @@
 
 #: wt-status.c:1727
 msgid "No commits yet"
-msgstr "No s'ha fet cap comissió encara."
+msgstr "No s'ha fet cap comissió encara"
 
 #: wt-status.c:1741
 msgid "Untracked files"
@@ -10215,11 +10214,11 @@
 msgstr[1] "actualitzats %d camins\n"
 
 #: builtin/checkout.c:386
-#, fuzzy, c-format
+#, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
-msgstr[0] "S'ha produït un error en llegir l'índex"
-msgstr[1] "S'ha produït un error en llegir l'índex"
+msgstr[0] "S'ha actualitzat un camí des de l'índex"
+msgstr[1] "S'ha actualitzat %d camins des de l'índex"
 
 #: builtin/checkout.c:409 builtin/checkout.c:412 builtin/checkout.c:415
 #: builtin/checkout.c:419
@@ -15848,7 +15847,7 @@
 "existing notes"
 msgstr ""
 "No es poden afegir les notes. S'han trobat notes existents de l'objecte %s. "
-"Useu '-f' per a sobreescriure les notes existents."
+"Useu '-f' per a sobreescriure les notes existents"
 
 #: builtin/notes.c:463 builtin/notes.c:544
 #, c-format
@@ -19570,7 +19569,7 @@
 
 #: builtin/stash.c:1269 git-legacy-stash.sh:337
 msgid "Can't use --patch and --include-untracked or --all at the same time"
-msgstr "No es poden usar --patch i --include-untracked o --all a la vegada."
+msgstr "No es poden usar --patch i --include-untracked o --all a la vegada"
 
 #: builtin/stash.c:1285
 #, fuzzy
@@ -19698,7 +19697,7 @@
 
 #: builtin/submodule--helper.c:565 builtin/submodule--helper.c:1050
 msgid "Recurse into nested submodules"
-msgstr "Inclou recursivament els submòduls imbrincats"
+msgstr "Inclou recursivament els submòduls imbricats"
 
 #: builtin/submodule--helper.c:570
 #, fuzzy
@@ -21487,7 +21486,7 @@
 #: command-list.h:86
 msgid "Show changes between commits, commit and working tree, etc"
 msgstr ""
-"Mostra els canvis entre comissions, la comissió i l'arbre de treball, etc."
+"Mostra els canvis entre comissions, la comissió i l'arbre de treball, etc"
 
 #: command-list.h:87
 msgid "Compares files in the working tree and the index"
@@ -21800,7 +21799,7 @@
 
 #: command-list.h:161
 msgid "Send a collection of patches as emails"
-msgstr "Envia una col·leció de pedaços com a correus electrònics"
+msgstr "Envia una col·lecció de pedaços com a correus electrònics"
 
 #: command-list.h:162
 msgid "Push objects over Git protocol to another repository"
@@ -22321,11 +22320,12 @@
 "camí de submòdul '$sm_path'"
 
 #: git-submodule.sh:606
-#, fuzzy, sh-format
+#, sh-format
 msgid ""
 "Unable to fetch in submodule path '$displaypath'; trying to directly fetch "
 "$sha1:"
-msgstr "No s'ha pogut obtenir en el camí de submòdul '$displaypath'"
+msgstr "No s'ha pogut obtenir en el camí de submòdul «$displaypath»; s'està intentant "
+"obtenir directament $sha1:"
 
 #: git-submodule.sh:612
 #, sh-format
@@ -22333,58 +22333,58 @@
 "Fetched in submodule path '$displaypath', but it did not contain $sha1. "
 "Direct fetching of that commit failed."
 msgstr ""
-"S'ha obtingut en el camí de submòdul '$displaypath', però no contenia $sha1. "
+"S'ha obtingut en el camí de submòdul «$displaypath», però no contenia $sha1. "
 "L'obtenció directa d'aquella comissió ha fallat."
 
 #: git-submodule.sh:619
 #, sh-format
 msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
-msgstr "No s'ha pogut agafar '$sha1' en el camí de submòdul '$displaypath'"
+msgstr "No s'ha pogut agafar «$sha1» en el camí de submòdul «$displaypath»"
 
 #: git-submodule.sh:620
 #, sh-format
 msgid "Submodule path '$displaypath': checked out '$sha1'"
-msgstr "Camí de submòdul '$displaypath': s'ha agafat '$sha1'"
+msgstr "Camí de submòdul «$displaypath»: s'ha agafat «$sha1»"
 
 #: git-submodule.sh:624
 #, sh-format
 msgid "Unable to rebase '$sha1' in submodule path '$displaypath'"
 msgstr ""
-"No s'ha pogut fer «rebase» '$sha1' en el camí de submòdul '$displaypath'"
+"No s'ha pogut fer «rebase» «$sha1»' en el camí de submòdul «$displaypath»"
 
 #: git-submodule.sh:625
 #, sh-format
 msgid "Submodule path '$displaypath': rebased into '$sha1'"
-msgstr "Camí de submòdul '$displaypath': s'ha fet «rebase» en '$sha1'"
+msgstr "Camí de submòdul «$displaypath»: s'ha fet «rebase» en «$sha1»"
 
 #: git-submodule.sh:630
 #, sh-format
 msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
-msgstr "No s'ha pogut fusionar '$sha1' en el camí de submòdul '$displaypath'"
+msgstr "No s'ha pogut fusionar «$sha1» en el camí de submòdul «$displaypath»"
 
 #: git-submodule.sh:631
 #, sh-format
 msgid "Submodule path '$displaypath': merged in '$sha1'"
-msgstr "Camí de submòdul '$displaypath': s'ha fusionat en '$sha1'"
+msgstr "Camí de submòdul «$displaypath»: s'ha fusionat en «$sha1»"
 
 #: git-submodule.sh:636
 #, sh-format
 msgid "Execution of '$command $sha1' failed in submodule path '$displaypath'"
 msgstr ""
-"L'execució de '$command $sha1' ha fallat en el camí de submòdul "
-"'$displaypath'"
+"L'execució de «$command $sha1» ha fallat en el camí de submòdul "
+"«$displaypath»"
 
 #: git-submodule.sh:637
 #, sh-format
 msgid "Submodule path '$displaypath': '$command $sha1'"
-msgstr "Camí de submòdul '$displaypath': '$command $sha1'"
+msgstr "Camí de submòdul «$displaypath»: «$command $sha1»"
 
 #: git-submodule.sh:668
 #, sh-format
 msgid "Failed to recurse into submodule path '$displaypath'"
 msgstr ""
 "S'ha produït un error en recorre recursivament dins del camí de submòdul "
-"'$displaypath'"
+"«$displaypath»"
 
 #: git-submodule.sh:830
 msgid "The --cached option cannot be used with the --files option"
@@ -22421,7 +22421,7 @@
 msgstr "S'ha aplicat el magatzem automàtic."
 
 #: git-rebase--preserve-merges.sh:112
-#, fuzzy, sh-format
+#, sh-format
 msgid "Cannot store $stash_sha1"
 msgstr "No es pot emmagatzemar $stash_sha1"
 
@@ -22719,8 +22719,8 @@
 #, sh-format
 msgid "Rebase $shortrevisions onto $shortonto ($todocount command)"
 msgid_plural "Rebase $shortrevisions onto $shortonto ($todocount commands)"
-msgstr[0] "Rebasa $shortrevisions sobre $shortonto ($todocount ordre)"
-msgstr[1] "Rebasa $shortrevisions sobre $shortonto ($todocount ordres)"
+msgstr[0] "Fes «rebase» $shortrevisions sobre $shortonto ($todocount ordre)"
+msgstr[1] "Fes «rebase» $shortrevisions sobre $shortonto ($todocount ordres)"
 
 #: git-rebase--preserve-merges.sh:997 git-rebase--preserve-merges.sh:1002
 msgid "Could not init rewritten commits"
diff --git a/po/de.po b/po/de.po
index 6d80cfb..066326a 100644
--- a/po/de.po
+++ b/po/de.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: Git\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2019-08-10 20:12+0800\n"
+"POT-Creation-Date: 2019-10-28 13:19+0800\n"
 "PO-Revision-Date: 2016-11-28 18:10+0100\n"
 "Last-Translator: Matthias Rüster <matthias.ruester@gmail.com>\n"
 "Language-Team: Matthias Rüster <matthias.ruester@gmail.com>\n"
@@ -67,7 +67,7 @@
 msgid "Exiting because of an unresolved conflict."
 msgstr "Beende wegen unaufgelöstem Konflikt."
 
-#: advice.c:193 builtin/merge.c:1327
+#: advice.c:193 builtin/merge.c:1332
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Sie haben Ihren Merge nicht abgeschlossen (MERGE_HEAD existiert)."
 
@@ -212,17 +212,7 @@
 msgid "inconsistent header lines %d and %d"
 msgstr "Inkonsistente Kopfzeilen %d und %d."
 
-#: apply.c:1460
-#, c-format
-msgid "recount: unexpected line: %.*s"
-msgstr "recount: unerwartete Zeile: %.*s"
-
-#: apply.c:1529
-#, c-format
-msgid "patch fragment without header at line %d: %.*s"
-msgstr "Patch-Fragment ohne Kopfbereich bei Zeile %d: %.*s"
-
-#: apply.c:1551
+#: apply.c:1372
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -237,72 +227,82 @@
 "Dem Kopfbereich von \"git diff\" fehlen Informationen zum Dateinamen, wenn "
 "%d vorangestellte Teile des Pfades entfernt werden (Zeile %d)"
 
-#: apply.c:1564
+#: apply.c:1385
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr ""
 "Dem Kopfbereich von \"git diff\" fehlen Informationen zum Dateinamen (Zeile "
 "%d)"
 
-#: apply.c:1752
+#: apply.c:1481
+#, c-format
+msgid "recount: unexpected line: %.*s"
+msgstr "recount: unerwartete Zeile: %.*s"
+
+#: apply.c:1550
+#, c-format
+msgid "patch fragment without header at line %d: %.*s"
+msgstr "Patch-Fragment ohne Kopfbereich bei Zeile %d: %.*s"
+
+#: apply.c:1753
 msgid "new file depends on old contents"
 msgstr "neue Datei hängt von alten Inhalten ab"
 
-#: apply.c:1754
+#: apply.c:1755
 msgid "deleted file still has contents"
 msgstr "entfernte Datei hat noch Inhalte"
 
-#: apply.c:1788
+#: apply.c:1789
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "fehlerhafter Patch bei Zeile %d"
 
-#: apply.c:1825
+#: apply.c:1826
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "neue Datei %s hängt von alten Inhalten ab"
 
-#: apply.c:1827
+#: apply.c:1828
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "entfernte Datei %s hat noch Inhalte"
 
-#: apply.c:1830
+#: apply.c:1831
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** Warnung: Datei %s wird leer, aber nicht entfernt."
 
-#: apply.c:1977
+#: apply.c:1978
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "fehlerhafter Binär-Patch bei Zeile %d: %.*s"
 
-#: apply.c:2014
+#: apply.c:2015
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "nicht erkannter Binär-Patch bei Zeile %d"
 
-#: apply.c:2176
+#: apply.c:2177
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "Patch mit nutzlosen Informationen bei Zeile %d"
 
-#: apply.c:2262
+#: apply.c:2263
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "konnte symbolische Verknüpfung %s nicht lesen"
 
-#: apply.c:2266
+#: apply.c:2267
 #, c-format
 msgid "unable to open or read %s"
 msgstr "konnte %s nicht öffnen oder lesen"
 
-#: apply.c:2925
+#: apply.c:2926
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "Ungültiger Zeilenanfang: '%c'"
 
-#: apply.c:3046
+#: apply.c:3047
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
@@ -310,12 +310,12 @@
 msgstr[1] ""
 "Patch-Bereich #%d erfolgreich angewendet bei %d (%d Zeilen versetzt)"
 
-#: apply.c:3058
+#: apply.c:3059
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "Kontext reduziert zu (%ld/%ld), um Patch-Bereich bei %d anzuwenden"
 
-#: apply.c:3064
+#: apply.c:3065
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -324,25 +324,25 @@
 "bei der Suche nach:\n"
 "%.*s"
 
-#: apply.c:3086
+#: apply.c:3087
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "keine Daten in Binär-Patch für '%s'"
 
-#: apply.c:3094
+#: apply.c:3095
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr ""
 "kann binären Patch nicht in umgekehrter Reihenfolge anwenden ohne einen\n"
 "umgekehrten Patch-Block auf '%s'"
 
-#: apply.c:3141
+#: apply.c:3142
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr ""
 "kann binären Patch auf '%s' nicht ohne eine vollständige Index-Zeile anwenden"
 
-#: apply.c:3151
+#: apply.c:3152
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
@@ -350,441 +350,441 @@
 "der Patch wird angewendet auf '%s' (%s), was nicht den aktuellen Inhalten\n"
 "entspricht"
 
-#: apply.c:3159
+#: apply.c:3160
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "der Patch wird auf ein leeres '%s' angewendet, was aber nicht leer ist"
 
-#: apply.c:3177
+#: apply.c:3178
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "das erforderliche Postimage %s für '%s' kann nicht gelesen werden"
 
-#: apply.c:3190
+#: apply.c:3191
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "Konnte Binär-Patch nicht auf '%s' anwenden"
 
-#: apply.c:3196
+#: apply.c:3197
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
 "Binär-Patch für '%s' erzeugt falsches Ergebnis (erwartete %s, bekam %s)"
 
-#: apply.c:3217
+#: apply.c:3218
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "Anwendung des Patches fehlgeschlagen: %s:%ld"
 
-#: apply.c:3340
+#: apply.c:3341
 #, c-format
 msgid "cannot checkout %s"
 msgstr "kann %s nicht auschecken"
 
-#: apply.c:3392 apply.c:3403 apply.c:3449 midx.c:62 setup.c:279
+#: apply.c:3393 apply.c:3404 apply.c:3450 midx.c:61 setup.c:280
 #, c-format
 msgid "failed to read %s"
 msgstr "Fehler beim Lesen von %s"
 
-#: apply.c:3400
+#: apply.c:3401
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "'%s' ist hinter einer symbolischen Verknüpfung"
 
-#: apply.c:3429 apply.c:3672
+#: apply.c:3430 apply.c:3673
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "Pfad %s wurde umbenannt/gelöscht"
 
-#: apply.c:3515 apply.c:3687
+#: apply.c:3516 apply.c:3688
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s ist nicht im Index"
 
-#: apply.c:3524 apply.c:3695
+#: apply.c:3525 apply.c:3696
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s entspricht nicht der Version im Index"
 
-#: apply.c:3559
+#: apply.c:3560
 msgid "repository lacks the necessary blob to fall back on 3-way merge."
 msgstr ""
 "Dem Repository fehlt der notwendige Blob, um auf einen 3-Wege-Merge\n"
 "zurückzufallen."
 
-#: apply.c:3562
+#: apply.c:3563
 #, c-format
 msgid "Falling back to three-way merge...\n"
 msgstr "Falle zurück auf 3-Wege-Merge ...\n"
 
-#: apply.c:3578 apply.c:3582
+#: apply.c:3579 apply.c:3583
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "kann aktuelle Inhalte von '%s' nicht lesen"
 
-#: apply.c:3594
+#: apply.c:3595
 #, c-format
 msgid "Failed to fall back on three-way merge...\n"
 msgstr "Fehler beim Zurückfallen auf 3-Wege-Merge...\n"
 
-#: apply.c:3608
+#: apply.c:3609
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "Patch auf '%s' mit Konflikten angewendet.\n"
 
-#: apply.c:3613
+#: apply.c:3614
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "Patch auf '%s' sauber angewendet.\n"
 
-#: apply.c:3639
+#: apply.c:3640
 msgid "removal patch leaves file contents"
 msgstr "Lösch-Patch hinterlässt Dateiinhalte"
 
-#: apply.c:3712
+#: apply.c:3713
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s: falscher Typ"
 
-#: apply.c:3714
+#: apply.c:3715
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s ist vom Typ %o, erwartete %o"
 
-#: apply.c:3865 apply.c:3867 read-cache.c:830 read-cache.c:856
+#: apply.c:3866 apply.c:3868 read-cache.c:830 read-cache.c:856
 #: read-cache.c:1309
 #, c-format
 msgid "invalid path '%s'"
 msgstr "Ungültiger Pfad '%s'"
 
-#: apply.c:3923
+#: apply.c:3924
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s ist bereits bereitgestellt"
 
-#: apply.c:3926
+#: apply.c:3927
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s existiert bereits im Arbeitsverzeichnis"
 
-#: apply.c:3946
+#: apply.c:3947
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "neuer Modus (%o) von %s entspricht nicht dem alten Modus (%o)"
 
-#: apply.c:3951
+#: apply.c:3952
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "neuer Modus (%o) von %s entspricht nicht dem alten Modus (%o) von %s"
 
-#: apply.c:3971
+#: apply.c:3972
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "betroffene Datei '%s' ist hinter einer symbolischen Verknüpfung"
 
-#: apply.c:3975
+#: apply.c:3976
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s: Patch konnte nicht angewendet werden"
 
-#: apply.c:3990
+#: apply.c:3991
 #, c-format
 msgid "Checking patch %s..."
 msgstr "Prüfe Patch %s ..."
 
-#: apply.c:4082
+#: apply.c:4083
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "SHA-1 Information fehlt oder ist unbrauchbar für Submodul %s"
 
-#: apply.c:4089
+#: apply.c:4090
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "Modusänderung für %s, was sich nicht im aktuellen HEAD befindet"
 
-#: apply.c:4092
+#: apply.c:4093
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "SHA-1 Information fehlt oder ist unbrauchbar (%s)."
 
-#: apply.c:4097 builtin/checkout.c:278 builtin/reset.c:143
+#: apply.c:4098 builtin/checkout.c:279 builtin/reset.c:143
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "make_cache_entry für Pfad '%s' fehlgeschlagen"
 
-#: apply.c:4101
+#: apply.c:4102
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "konnte %s nicht zum temporären Index hinzufügen"
 
-#: apply.c:4111
+#: apply.c:4112
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "konnte temporären Index nicht nach %s schreiben"
 
-#: apply.c:4249
+#: apply.c:4250
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "konnte %s nicht aus dem Index entfernen"
 
-#: apply.c:4283
+#: apply.c:4284
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "fehlerhafter Patch für Submodul %s"
 
-#: apply.c:4289
+#: apply.c:4290
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "konnte neu erstellte Datei '%s' nicht lesen"
 
-#: apply.c:4297
+#: apply.c:4298
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr "kann internen Speicher für eben erstellte Datei %s nicht erzeugen"
 
-#: apply.c:4303 apply.c:4448
+#: apply.c:4304 apply.c:4449
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "kann für %s keinen Eintrag in den Zwischenspeicher hinzufügen"
 
-#: apply.c:4346
+#: apply.c:4347
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "Fehler beim Schreiben nach '%s'"
 
-#: apply.c:4350
+#: apply.c:4351
 #, c-format
 msgid "closing file '%s'"
 msgstr "schließe Datei '%s'"
 
-#: apply.c:4420
+#: apply.c:4421
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "konnte Datei '%s' mit Modus %o nicht schreiben"
 
-#: apply.c:4518
+#: apply.c:4519
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "Patch %s sauber angewendet"
 
-#: apply.c:4526
+#: apply.c:4527
 msgid "internal error"
 msgstr "interner Fehler"
 
-#: apply.c:4529
+#: apply.c:4530
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "Wende Patch %%s mit %d Zurückweisung an..."
 msgstr[1] "Wende Patch %%s mit %d Zurückweisungen an..."
 
-#: apply.c:4540
+#: apply.c:4541
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "Verkürze Name von .rej Datei zu %.*s.rej"
 
-#: apply.c:4548 builtin/fetch.c:878 builtin/fetch.c:1168
+#: apply.c:4549 builtin/fetch.c:898 builtin/fetch.c:1194
 #, c-format
 msgid "cannot open %s"
 msgstr "kann '%s' nicht öffnen"
 
-#: apply.c:4562
+#: apply.c:4563
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "Patch-Bereich #%d sauber angewendet."
 
-#: apply.c:4566
+#: apply.c:4567
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "Patch-Block #%d zurückgewiesen."
 
-#: apply.c:4676
+#: apply.c:4686
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Patch '%s' ausgelassen."
 
-#: apply.c:4684
+#: apply.c:4694
 msgid "unrecognized input"
 msgstr "nicht erkannte Eingabe"
 
-#: apply.c:4704
+#: apply.c:4714
 msgid "unable to read index file"
 msgstr "Konnte Index-Datei nicht lesen"
 
-#: apply.c:4859
+#: apply.c:4871
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "kann Patch '%s' nicht öffnen: %s"
 
-#: apply.c:4886
+#: apply.c:4898
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "unterdrückte %d Whitespace-Fehler"
 msgstr[1] "unterdrückte %d Whitespace-Fehler"
 
-#: apply.c:4892 apply.c:4907
+#: apply.c:4904 apply.c:4919
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d Zeile fügt Whitespace-Fehler hinzu."
 msgstr[1] "%d Zeilen fügen Whitespace-Fehler hinzu."
 
-#: apply.c:4900
+#: apply.c:4912
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] "%d Zeile nach Behebung von Whitespace-Fehlern angewendet."
 msgstr[1] "%d Zeilen nach Behebung von Whitespace-Fehlern angewendet."
 
-#: apply.c:4916 builtin/add.c:540 builtin/mv.c:301 builtin/rm.c:390
+#: apply.c:4928 builtin/add.c:540 builtin/mv.c:301 builtin/rm.c:390
 msgid "Unable to write new index file"
 msgstr "Konnte neue Index-Datei nicht schreiben."
 
-#: apply.c:4943 apply.c:4946 builtin/am.c:2208 builtin/am.c:2211
-#: builtin/clone.c:123 builtin/fetch.c:128 builtin/merge.c:273
-#: builtin/pull.c:208 builtin/submodule--helper.c:407
+#: apply.c:4955 apply.c:4958 builtin/am.c:2197 builtin/am.c:2200
+#: builtin/clone.c:122 builtin/fetch.c:143 builtin/merge.c:273
+#: builtin/pull.c:209 builtin/submodule--helper.c:407
 #: builtin/submodule--helper.c:1367 builtin/submodule--helper.c:1370
 #: builtin/submodule--helper.c:1850 builtin/submodule--helper.c:1853
 #: builtin/submodule--helper.c:2092 git-add--interactive.perl:211
 msgid "path"
 msgstr "Pfad"
 
-#: apply.c:4944
+#: apply.c:4956
 msgid "don't apply changes matching the given path"
 msgstr "keine Änderungen im angegebenen Pfad anwenden"
 
-#: apply.c:4947
+#: apply.c:4959
 msgid "apply changes matching the given path"
 msgstr "Änderungen nur im angegebenen Pfad anwenden"
 
-#: apply.c:4949 builtin/am.c:2217
+#: apply.c:4961 builtin/am.c:2206
 msgid "num"
 msgstr "Anzahl"
 
-#: apply.c:4950
+#: apply.c:4962
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr ""
 "<Anzahl> vorangestellte Schrägstriche von herkömmlichen Differenzpfaden "
 "entfernen"
 
-#: apply.c:4953
+#: apply.c:4965
 msgid "ignore additions made by the patch"
 msgstr "hinzugefügte Zeilen des Patches ignorieren"
 
-#: apply.c:4955
+#: apply.c:4967
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr ""
 "anstatt der Anwendung des Patches, den \"diffstat\" für die Eingabe "
 "ausgegeben"
 
-#: apply.c:4959
+#: apply.c:4971
 msgid "show number of added and deleted lines in decimal notation"
 msgstr ""
 "die Anzahl von hinzugefügten/entfernten Zeilen in Dezimalnotation anzeigen"
 
-#: apply.c:4961
+#: apply.c:4973
 msgid "instead of applying the patch, output a summary for the input"
 msgstr ""
 "anstatt der Anwendung des Patches, eine Zusammenfassung für die Eingabe "
 "ausgeben"
 
-#: apply.c:4963
+#: apply.c:4975
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr ""
 "anstatt der Anwendung des Patches, zeige ob Patch angewendet werden kann"
 
-#: apply.c:4965
+#: apply.c:4977
 msgid "make sure the patch is applicable to the current index"
 msgstr ""
 "sicherstellen, dass der Patch mit dem aktuellen Index angewendet werden kann"
 
-#: apply.c:4967
+#: apply.c:4979
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "neue Dateien mit `git add --intent-to-add` markieren"
 
-#: apply.c:4969
+#: apply.c:4981
 msgid "apply a patch without touching the working tree"
 msgstr "Patch anwenden, ohne Änderungen im Arbeitsverzeichnis vorzunehmen"
 
-#: apply.c:4971
+#: apply.c:4983
 msgid "accept a patch that touches outside the working area"
 msgstr ""
 "Patch anwenden, der Änderungen außerhalb des Arbeitsverzeichnisses vornimmt"
 
-#: apply.c:4974
+#: apply.c:4986
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "Patch anwenden (Benutzung mit --stat/--summary/--check)"
 
-#: apply.c:4976
+#: apply.c:4988
 msgid "attempt three-way merge if a patch does not apply"
 msgstr "versuche 3-Wege-Merge, wenn der Patch nicht angewendet werden konnte"
 
-#: apply.c:4978
+#: apply.c:4990
 msgid "build a temporary index based on embedded index information"
 msgstr ""
 "einen temporären Index, basierend auf den integrierten Index-Informationen, "
 "erstellen"
 
-#: apply.c:4981 builtin/checkout-index.c:173 builtin/ls-files.c:524
+#: apply.c:4993 builtin/checkout-index.c:173 builtin/ls-files.c:524
 msgid "paths are separated with NUL character"
 msgstr "Pfade sind getrennt durch NUL Zeichen"
 
-#: apply.c:4983
+#: apply.c:4995
 msgid "ensure at least <n> lines of context match"
 msgstr ""
 "sicher stellen, dass mindestens <n> Zeilen des Kontextes übereinstimmen"
 
-#: apply.c:4984 builtin/am.c:2196 builtin/interpret-trailers.c:98
+#: apply.c:4996 builtin/am.c:2185 builtin/interpret-trailers.c:98
 #: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3330 builtin/rebase.c:1421
+#: builtin/pack-objects.c:3310 builtin/rebase.c:1445
 msgid "action"
 msgstr "Aktion"
 
-#: apply.c:4985
+#: apply.c:4997
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "neue oder geänderte Zeilen, die Whitespace-Fehler haben, ermitteln"
 
-#: apply.c:4988 apply.c:4991
+#: apply.c:5000 apply.c:5003
 msgid "ignore changes in whitespace when finding context"
 msgstr "Änderungen im Whitespace bei der Suche des Kontextes ignorieren"
 
-#: apply.c:4994
+#: apply.c:5006
 msgid "apply the patch in reverse"
 msgstr "den Patch in umgekehrter Reihenfolge anwenden"
 
-#: apply.c:4996
+#: apply.c:5008
 msgid "don't expect at least one line of context"
 msgstr "keinen Kontext erwarten"
 
-#: apply.c:4998
+#: apply.c:5010
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr ""
 "zurückgewiesene Patch-Blöcke in entsprechenden *.rej Dateien hinterlassen"
 
-#: apply.c:5000
+#: apply.c:5012
 msgid "allow overlapping hunks"
 msgstr "sich überlappende Patch-Blöcke erlauben"
 
-#: apply.c:5001 builtin/add.c:291 builtin/check-ignore.c:22
+#: apply.c:5013 builtin/add.c:291 builtin/check-ignore.c:22
 #: builtin/commit.c:1337 builtin/count-objects.c:98 builtin/fsck.c:786
-#: builtin/log.c:2068 builtin/mv.c:123 builtin/read-tree.c:128
+#: builtin/log.c:2085 builtin/mv.c:123 builtin/read-tree.c:128
 msgid "be verbose"
 msgstr "erweiterte Ausgaben"
 
-#: apply.c:5003
+#: apply.c:5015
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr "fehlerhaft erkannten fehlenden Zeilenumbruch am Dateiende tolerieren"
 
-#: apply.c:5006
+#: apply.c:5018
 msgid "do not trust the line counts in the hunk headers"
 msgstr "den Zeilennummern im Kopf des Patch-Blocks nicht vertrauen"
 
-#: apply.c:5008 builtin/am.c:2205
+#: apply.c:5020 builtin/am.c:2194
 msgid "root"
 msgstr "Wurzelverzeichnis"
 
-#: apply.c:5009
+#: apply.c:5021
 msgid "prepend <root> to all filenames"
 msgstr "<Wurzelverzeichnis> vor alle Dateinamen stellen"
 
@@ -839,7 +839,7 @@
 msgid "archive format"
 msgstr "Archivformat"
 
-#: archive.c:458 builtin/log.c:1580
+#: archive.c:458 builtin/log.c:1581
 msgid "prefix"
 msgstr "Präfix"
 
@@ -847,11 +847,12 @@
 msgid "prepend prefix to each pathname in the archive"
 msgstr "einen Präfix vor jeden Pfadnamen in dem Archiv stellen"
 
-#: archive.c:460 builtin/blame.c:862 builtin/blame.c:874 builtin/blame.c:875
-#: builtin/commit-tree.c:117 builtin/config.c:129 builtin/fast-export.c:1134
-#: builtin/fast-export.c:1136 builtin/grep.c:897 builtin/hash-object.c:105
-#: builtin/ls-files.c:560 builtin/ls-files.c:563 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:177
+#: archive.c:460 builtin/blame.c:861 builtin/blame.c:873 builtin/blame.c:874
+#: builtin/commit-tree.c:117 builtin/config.c:129 builtin/fast-export.c:1162
+#: builtin/fast-export.c:1164 builtin/fast-export.c:1168 builtin/grep.c:899
+#: builtin/hash-object.c:105 builtin/ls-files.c:560 builtin/ls-files.c:563
+#: builtin/notes.c:412 builtin/notes.c:578 builtin/read-tree.c:123
+#: parse-options.h:186
 msgid "file"
 msgstr "Datei"
 
@@ -883,7 +884,7 @@
 msgid "list supported archive formats"
 msgstr "unterstützte Archivformate auflisten"
 
-#: archive.c:479 builtin/archive.c:91 builtin/clone.c:113 builtin/clone.c:116
+#: archive.c:479 builtin/archive.c:91 builtin/clone.c:112 builtin/clone.c:115
 #: builtin/submodule--helper.c:1379 builtin/submodule--helper.c:1859
 msgid "repo"
 msgstr "Repository"
@@ -892,7 +893,7 @@
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "Archiv vom Remote-Repository <Repository> abrufen"
 
-#: archive.c:481 builtin/archive.c:93 builtin/difftool.c:707
+#: archive.c:481 builtin/archive.c:93 builtin/difftool.c:715
 #: builtin/notes.c:498
 msgid "command"
 msgstr "Programm"
@@ -928,26 +929,26 @@
 msgid "cannot stream blob %s"
 msgstr "Kann Blob %s nicht streamen."
 
-#: archive-tar.c:260 archive-zip.c:363
+#: archive-tar.c:266 archive-zip.c:363
 #, c-format
 msgid "unsupported file mode: 0%o (SHA1: %s)"
 msgstr "Nicht unterstützter Dateimodus: 0%o (SHA1: %s)"
 
-#: archive-tar.c:287 archive-zip.c:353
+#: archive-tar.c:293 archive-zip.c:353
 #, c-format
 msgid "cannot read %s"
 msgstr "Kann %s nicht lesen."
 
-#: archive-tar.c:459
+#: archive-tar.c:465
 #, c-format
 msgid "unable to start '%s' filter"
 msgstr "Konnte '%s' Filter nicht starten."
 
-#: archive-tar.c:462
+#: archive-tar.c:468
 msgid "unable to redirect descriptor"
 msgstr "Konnte Descriptor nicht umleiten."
 
-#: archive-tar.c:469
+#: archive-tar.c:475
 #, c-format
 msgid "'%s' filter reported error"
 msgstr "'%s' Filter meldete Fehler."
@@ -972,17 +973,17 @@
 msgid "timestamp too large for this system: %<PRIuMAX>"
 msgstr "Timestamp zu groß für dieses System: %<PRIuMAX>"
 
-#: attr.c:211
+#: attr.c:213
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s ist kein gültiger Attributname"
 
-#: attr.c:368
+#: attr.c:370
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s nicht erlaubt: %s:%d"
 
-#: attr.c:408
+#: attr.c:410
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1110,43 +1111,43 @@
 msgstr[0] "binäre Suche: danach noch %d Commit zum Testen übrig %s\n"
 msgstr[1] "binäre Suche: danach noch %d Commits zum Testen übrig %s\n"
 
-#: blame.c:2697
+#: blame.c:2700
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents und --reverse funktionieren gemeinsam nicht."
 
-#: blame.c:2711
+#: blame.c:2714
 msgid "cannot use --contents with final commit object name"
 msgstr ""
 "kann --contents nicht mit endgültigem Namen des Commit-Objektes benutzen"
 
-#: blame.c:2732
+#: blame.c:2735
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "--reverse und --first-parent zusammen erfordern die Angabe eines "
 "endgültigen\n"
 "Commits"
 
-#: blame.c:2741 bundle.c:167 ref-filter.c:2196 remote.c:1938 sequencer.c:2033
-#: sequencer.c:4348 builtin/commit.c:1020 builtin/log.c:387 builtin/log.c:963
-#: builtin/log.c:1451 builtin/log.c:1827 builtin/log.c:2117 builtin/merge.c:411
-#: builtin/pack-objects.c:3148 builtin/pack-objects.c:3163
+#: blame.c:2744 bundle.c:167 ref-filter.c:2203 remote.c:1941 sequencer.c:1971
+#: sequencer.c:4305 builtin/commit.c:1020 builtin/log.c:387 builtin/log.c:964
+#: builtin/log.c:1452 builtin/log.c:1844 builtin/log.c:2134 builtin/merge.c:411
+#: builtin/pack-objects.c:3128 builtin/pack-objects.c:3143
 #: builtin/shortlog.c:192
 msgid "revision walk setup failed"
 msgstr "Einrichtung des Revisionsgangs fehlgeschlagen"
 
-#: blame.c:2759
+#: blame.c:2762
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "--reverse und --first-parent zusammen erfordern einen Bereich entlang der\n"
 "\"first-parent\"-Kette"
 
-#: blame.c:2770
+#: blame.c:2773
 #, c-format
 msgid "no such path %s in %s"
 msgstr "Pfad %s nicht in %s"
 
-#: blame.c:2781
+#: blame.c:2784
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "kann Blob %s für Pfad '%s' nicht lesen"
@@ -1303,7 +1304,7 @@
 msgid "unrecognized header: %s%s (%d)"
 msgstr "nicht erkannter Kopfbereich: %s%s (%d)"
 
-#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2283 sequencer.c:3024
+#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2221 sequencer.c:2962
 #: builtin/commit.c:791
 #, c-format
 msgid "could not open '%s'"
@@ -1356,7 +1357,7 @@
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "Referenz '%s' wird durch \"rev-list\" Optionen ausgeschlossen"
 
-#: bundle.c:460 builtin/log.c:202 builtin/log.c:1732 builtin/shortlog.c:306
+#: bundle.c:460 builtin/log.c:202 builtin/log.c:1733 builtin/shortlog.c:306
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "nicht erkanntes Argument: %s"
@@ -1379,8 +1380,8 @@
 msgid "invalid color value: %.*s"
 msgstr "Ungültiger Farbwert: %.*s"
 
-#: commit.c:50 sequencer.c:2727 builtin/am.c:355 builtin/am.c:399
-#: builtin/am.c:1378 builtin/am.c:2020 builtin/replace.c:455
+#: commit.c:50 sequencer.c:2665 builtin/am.c:354 builtin/am.c:398
+#: builtin/am.c:1366 builtin/am.c:2009 builtin/replace.c:456
 #, c-format
 msgid "could not parse %s"
 msgstr "konnte %s nicht parsen"
@@ -1411,28 +1412,28 @@
 "Sie können diese Meldung unterdrücken, indem Sie\n"
 "\"git config advice.graftFileDeprecated false\" ausführen."
 
-#: commit.c:1127
+#: commit.c:1128
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr ""
 "Commit %s hat eine nicht vertrauenswürdige GPG-Signatur, angeblich von %s."
 
-#: commit.c:1130
+#: commit.c:1131
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "Commit %s hat eine ungültige GPG-Signatur, angeblich von %s."
 
-#: commit.c:1133
+#: commit.c:1134
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "Commit %s hat keine GPG-Signatur."
 
-#: commit.c:1136
+#: commit.c:1137
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "Commit %s hat eine gültige GPG-Signatur von %s\n"
 
-#: commit.c:1390
+#: commit.c:1391
 msgid ""
 "Warning: commit message did not conform to UTF-8.\n"
 "You may want to amend it after fixing the message, or set the config\n"
@@ -1496,180 +1497,195 @@
 msgid "unable to find all commit-graph files"
 msgstr "Konnte nicht alle Commit-Graph-Dateien finden."
 
-#: commit-graph.c:554 commit-graph.c:614
+#: commit-graph.c:561 commit-graph.c:621
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr "Ungültige Commit-Position. Commit-Graph ist wahrscheinlich beschädigt."
 
-#: commit-graph.c:575
+#: commit-graph.c:582
 #, c-format
 msgid "could not find commit %s"
 msgstr "Konnte Commit %s nicht finden."
 
-#: commit-graph.c:1002 builtin/pack-objects.c:2657
+#: commit-graph.c:855 builtin/am.c:1287
+#, c-format
+msgid "unable to parse commit %s"
+msgstr "Konnte Commit '%s' nicht parsen."
+
+#: commit-graph.c:859
+#, c-format
+msgid "unable to get tree for %s"
+msgstr "Konnte Verzeichnis für %s nicht bestimmen."
+
+#: commit-graph.c:1017 builtin/pack-objects.c:2641
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "Konnte Art von Objekt '%s' nicht bestimmen."
 
-#: commit-graph.c:1034
+#: commit-graph.c:1049
 msgid "Loading known commits in commit graph"
 msgstr "Lade bekannte Commits in Commit-Graph"
 
-#: commit-graph.c:1051
+#: commit-graph.c:1066
 msgid "Expanding reachable commits in commit graph"
 msgstr "Erweitere erreichbare Commits in Commit-Graph"
 
-#: commit-graph.c:1070
+#: commit-graph.c:1085
 msgid "Clearing commit marks in commit graph"
 msgstr "Lösche Commit-Markierungen in Commit-Graph"
 
-#: commit-graph.c:1089
+#: commit-graph.c:1104
 msgid "Computing commit graph generation numbers"
 msgstr "Commit-Graph Generierungsnummern berechnen"
 
-#: commit-graph.c:1163
+#: commit-graph.c:1179
 #, c-format
 msgid "Finding commits for commit graph in %d pack"
 msgid_plural "Finding commits for commit graph in %d packs"
 msgstr[0] "Suche Commits für Commit-Graph in %d Paket"
 msgstr[1] "Suche Commits für Commit-Graph in %d Paketen"
 
-#: commit-graph.c:1176
+#: commit-graph.c:1192
 #, c-format
 msgid "error adding pack %s"
 msgstr "Fehler beim Hinzufügen von Paket %s."
 
-#: commit-graph.c:1180
+#: commit-graph.c:1196
 #, c-format
 msgid "error opening index for %s"
 msgstr "Fehler beim Öffnen des Index für %s."
 
-#: commit-graph.c:1204
+#: commit-graph.c:1220
 #, c-format
 msgid "Finding commits for commit graph from %d ref"
 msgid_plural "Finding commits for commit graph from %d refs"
 msgstr[0] "Suche Commits für Commit-Graph in %d Referenz"
 msgstr[1] "Suche Commits für Commit-Graph in %d Referenzen"
 
-#: commit-graph.c:1238
+#: commit-graph.c:1240
+#, c-format
+msgid "invalid commit object id: %s"
+msgstr "ungültige Commit-Objekt-ID: %s"
+
+#: commit-graph.c:1255
 msgid "Finding commits for commit graph among packed objects"
 msgstr "Suche Commits für Commit-Graph in gepackten Objekten"
 
-#: commit-graph.c:1253
+#: commit-graph.c:1270
 msgid "Counting distinct commits in commit graph"
 msgstr "Zähle Commits in Commit-Graph"
 
-#: commit-graph.c:1284
+#: commit-graph.c:1300
 msgid "Finding extra edges in commit graph"
 msgstr "Suche zusätzliche Ränder in Commit-Graph"
 
-#: commit-graph.c:1332
+#: commit-graph.c:1346
 msgid "failed to write correct number of base graph ids"
 msgstr "Fehler beim Schreiben der korrekten Anzahl von Basis-Graph-IDs."
 
-#: commit-graph.c:1365 midx.c:811
+#: commit-graph.c:1379 midx.c:810
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "Konnte führende Verzeichnisse von '%s' nicht erstellen."
 
-#: commit-graph.c:1377 builtin/index-pack.c:306 builtin/repack.c:240
+#: commit-graph.c:1391 builtin/index-pack.c:306 builtin/repack.c:241
 #, c-format
 msgid "unable to create '%s'"
 msgstr "konnte '%s' nicht erstellen"
 
-#: commit-graph.c:1437
+#: commit-graph.c:1451
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "Schreibe Commit-Graph in %d Durchgang"
 msgstr[1] "Schreibe Commit-Graph in %d Durchgängen"
 
-#: commit-graph.c:1478
+#: commit-graph.c:1492
 msgid "unable to open commit-graph chain file"
 msgstr "Konnte Commit-Graph Chain-Datei nicht öffnen."
 
-#: commit-graph.c:1490
+#: commit-graph.c:1504
 msgid "failed to rename base commit-graph file"
 msgstr "Konnte Basis-Commit-Graph-Datei nicht umbenennen."
 
-#: commit-graph.c:1510
+#: commit-graph.c:1524
 msgid "failed to rename temporary commit-graph file"
 msgstr "Konnte temporäre Commit-Graph-Datei nicht umbenennen."
 
-#: commit-graph.c:1621
+#: commit-graph.c:1635
 msgid "Scanning merged commits"
 msgstr "Durchsuche zusammengeführte Commits"
 
-#: commit-graph.c:1632
+#: commit-graph.c:1646
 #, c-format
 msgid "unexpected duplicate commit id %s"
 msgstr "Unerwartete doppelte Commit-ID %s"
 
-#: commit-graph.c:1657
+#: commit-graph.c:1670
 msgid "Merging commit-graph"
 msgstr "Zusammenführen von Commit-Graph"
 
-#: commit-graph.c:1844
+#: commit-graph.c:1860
 #, c-format
 msgid "the commit graph format cannot write %d commits"
 msgstr "Das Commit-Graph Format kann nicht %d Commits schreiben."
 
-#: commit-graph.c:1855
+#: commit-graph.c:1871
 msgid "too many commits to write graph"
 msgstr "Zu viele Commits zum Schreiben des Graphen."
 
-#: commit-graph.c:1945
+#: commit-graph.c:1961
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 "Die Commit-Graph-Datei hat eine falsche Prüfsumme und ist wahrscheinlich "
 "beschädigt."
 
-#: commit-graph.c:1955
+#: commit-graph.c:1971
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "Commit-Graph hat fehlerhafte OID-Reihenfolge: %s dann %s"
 
-#: commit-graph.c:1965 commit-graph.c:1980
+#: commit-graph.c:1981 commit-graph.c:1996
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr "Commit-Graph hat fehlerhaften Fanout-Wert: fanout[%d] = %u != %u"
 
-#: commit-graph.c:1972
+#: commit-graph.c:1988
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "Konnte Commit %s von Commit-Graph nicht parsen."
 
-#: commit-graph.c:1989
+#: commit-graph.c:2006
 msgid "Verifying commits in commit graph"
 msgstr "Commit in Commit-Graph überprüfen"
 
-#: commit-graph.c:2002
+#: commit-graph.c:2020
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 "Fehler beim Parsen des Commits %s von Objekt-Datenbank für Commit-Graph"
 
-#: commit-graph.c:2009
+#: commit-graph.c:2027
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr ""
 "OID des Wurzelverzeichnisses für Commit %s in Commit-Graph ist %s != %s"
 
-#: commit-graph.c:2019
+#: commit-graph.c:2037
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr "Commit-Graph Vorgänger-Liste für Commit %s ist zu lang"
 
-#: commit-graph.c:2028
+#: commit-graph.c:2046
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "Commit-Graph-Vorgänger für %s ist %s != %s"
 
-#: commit-graph.c:2041
+#: commit-graph.c:2059
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr "Commit-Graph Vorgänger-Liste für Commit %s endet zu früh"
 
-#: commit-graph.c:2046
+#: commit-graph.c:2064
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
@@ -1677,7 +1693,7 @@
 "Commit-Graph hat Generationsnummer null für Commit %s, aber sonst ungleich "
 "null"
 
-#: commit-graph.c:2050
+#: commit-graph.c:2068
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
@@ -1685,12 +1701,12 @@
 "Commit-Graph hat Generationsnummer ungleich null für Commit %s, aber sonst "
 "null"
 
-#: commit-graph.c:2065
+#: commit-graph.c:2083
 #, c-format
 msgid "commit-graph generation for commit %s is %u != %u"
 msgstr "Commit-Graph Erstellung für Commit %s ist %u != %u"
 
-#: commit-graph.c:2071
+#: commit-graph.c:2089
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
@@ -1742,7 +1758,7 @@
 msgid "key does not contain variable name: %s"
 msgstr "Schlüssel enthält keinen Variablennamen: %s"
 
-#: config.c:406 sequencer.c:2463
+#: config.c:406 sequencer.c:2401
 #, c-format
 msgid "invalid key: %s"
 msgstr "Ungültiger Schlüssel: %s"
@@ -1871,157 +1887,151 @@
 msgid "invalid mode for object creation: %s"
 msgstr "Ungültiger Modus für Objekterstellung: %s"
 
-#: config.c:1430
+#: config.c:1425
 #, c-format
 msgid "malformed value for %s"
 msgstr "Ungültiger Wert für %s."
 
-#: config.c:1456
+#: config.c:1451
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "Ungültiger Wert für %s: %s"
 
-#: config.c:1457
+#: config.c:1452
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr ""
 "Muss einer von diesen sein: nothing, matching, simple, upstream, current"
 
-#: config.c:1518 builtin/pack-objects.c:3410
+#: config.c:1513 builtin/pack-objects.c:3394
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "ungültiger Komprimierungsgrad (%d) für Paketierung"
 
-#: config.c:1639
+#: config.c:1634
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "Konnte Blob-Objekt '%s' für Konfiguration nicht laden."
 
-#: config.c:1642
+#: config.c:1637
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "Referenz '%s' zeigt auf keinen Blob."
 
-#: config.c:1659
+#: config.c:1654
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "Konnte Blob '%s' für Konfiguration nicht auflösen."
 
-#: config.c:1689
+#: config.c:1684
 #, c-format
 msgid "failed to parse %s"
 msgstr "Fehler beim Parsen von %s."
 
-#: config.c:1745
+#: config.c:1740
 msgid "unable to parse command-line config"
 msgstr ""
 "Konnte die über die Befehlszeile angegebene Konfiguration nicht parsen."
 
-#: config.c:2094
+#: config.c:2091
 msgid "unknown error occurred while reading the configuration files"
 msgstr ""
 "Es trat ein unbekannter Fehler beim Lesen der Konfigurationsdateien auf."
 
-#: config.c:2264
+#: config.c:2261
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "Ungültiger %s: '%s'"
 
-#: config.c:2307
-#, c-format
-msgid "unknown core.untrackedCache value '%s'; using 'keep' default value"
-msgstr ""
-"Unbekannter Wert '%s' in core.untrackedCache; benutze Standardwert 'keep'"
-
-#: config.c:2333
+#: config.c:2306
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr ""
 "Der Wert '%d' von splitIndex.maxPercentChange sollte zwischen 0 und 100 "
 "liegen."
 
-#: config.c:2379
+#: config.c:2352
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr ""
 "Konnte Wert '%s' aus der über die Befehlszeile angegebenen Konfiguration\n"
 "nicht parsen."
 
-#: config.c:2381
+#: config.c:2354
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "ungültige Konfigurationsvariable '%s' in Datei '%s' bei Zeile %d"
 
-#: config.c:2462
+#: config.c:2435
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "Ungültiger Sektionsname '%s'"
 
-#: config.c:2494
+#: config.c:2467
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s hat mehrere Werte"
 
-#: config.c:2523
+#: config.c:2496
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "Konnte neue Konfigurationsdatei '%s' nicht schreiben."
 
-#: config.c:2775 config.c:3099
+#: config.c:2748 config.c:3072
 #, c-format
 msgid "could not lock config file %s"
 msgstr "Konnte Konfigurationsdatei '%s' nicht sperren."
 
-#: config.c:2786
+#: config.c:2759
 #, c-format
 msgid "opening %s"
 msgstr "Öffne %s"
 
-#: config.c:2821 builtin/config.c:328
+#: config.c:2794 builtin/config.c:328
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "Ungültiges Muster: %s"
 
-#: config.c:2846
+#: config.c:2819
 #, c-format
 msgid "invalid config file %s"
 msgstr "Ungültige Konfigurationsdatei %s"
 
-#: config.c:2859 config.c:3112
+#: config.c:2832 config.c:3085
 #, c-format
 msgid "fstat on %s failed"
 msgstr "fstat auf %s fehlgeschlagen"
 
-#: config.c:2870
+#: config.c:2843
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr "mmap für '%s' fehlgeschlagen"
 
-#: config.c:2879 config.c:3117
+#: config.c:2852 config.c:3090
 #, c-format
 msgid "chmod on %s failed"
 msgstr "chmod auf %s fehlgeschlagen"
 
-#: config.c:2964 config.c:3214
+#: config.c:2937 config.c:3187
 #, c-format
 msgid "could not write config file %s"
 msgstr "Konnte Konfigurationsdatei %s nicht schreiben."
 
-#: config.c:2998
+#: config.c:2971
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "Konnte '%s' nicht zu '%s' setzen."
 
-#: config.c:3000 builtin/remote.c:782
+#: config.c:2973 builtin/remote.c:782
 #, c-format
 msgid "could not unset '%s'"
 msgstr "Konnte '%s' nicht aufheben."
 
-#: config.c:3090
+#: config.c:3063
 #, c-format
 msgid "invalid section name: %s"
 msgstr "Ungültiger Sektionsname: %s"
 
-#: config.c:3257
+#: config.c:3230
 #, c-format
 msgid "missing value for '%s'"
 msgstr "Fehlender Wert für '%s'"
@@ -2148,7 +2158,7 @@
 msgid "unknown port %s"
 msgstr "Unbekannter Port %s"
 
-#: connect.c:845 connect.c:1171
+#: connect.c:845 connect.c:1175
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr "Merkwürdigen Hostnamen '%s' blockiert."
@@ -2163,59 +2173,59 @@
 msgid "cannot start proxy %s"
 msgstr "Kann Proxy %s nicht starten."
 
-#: connect.c:924
+#: connect.c:928
 msgid "no path specified; see 'git help pull' for valid url syntax"
 msgstr ""
 "Kein Pfad angegeben; siehe 'git help pull' für eine gültige URL-Syntax."
 
-#: connect.c:1119
+#: connect.c:1123
 msgid "ssh variant 'simple' does not support -4"
 msgstr "SSH-Variante 'simple' unterstützt kein -4."
 
-#: connect.c:1131
+#: connect.c:1135
 msgid "ssh variant 'simple' does not support -6"
 msgstr "SSH-Variante 'simple' unterstützt kein -6."
 
-#: connect.c:1148
+#: connect.c:1152
 msgid "ssh variant 'simple' does not support setting port"
 msgstr "SSH-Variante 'simple' unterstützt nicht das Setzen eines Ports."
 
-#: connect.c:1260
+#: connect.c:1264
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr "Merkwürdigen Pfadnamen '%s' blockiert."
 
-#: connect.c:1307
+#: connect.c:1311
 msgid "unable to fork"
 msgstr "Kann Prozess nicht starten."
 
-#: connected.c:86 builtin/fsck.c:221 builtin/prune.c:43
+#: connected.c:88 builtin/fsck.c:221 builtin/prune.c:43
 msgid "Checking connectivity"
 msgstr "Prüfe Konnektivität"
 
-#: connected.c:98
+#: connected.c:100
 msgid "Could not run 'git rev-list'"
 msgstr "Konnte 'git rev-list' nicht ausführen"
 
-#: connected.c:118
+#: connected.c:120
 msgid "failed write to rev-list"
 msgstr "Fehler beim Schreiben nach rev-list"
 
-#: connected.c:125
+#: connected.c:127
 msgid "failed to close rev-list's stdin"
 msgstr "Fehler beim Schließen von rev-list's Standard-Eingabe"
 
-#: convert.c:193
+#: convert.c:194
 #, c-format
 msgid "illegal crlf_action %d"
 msgstr "Unerlaubte crlf_action %d"
 
-#: convert.c:206
+#: convert.c:207
 #, c-format
 msgid "CRLF would be replaced by LF in %s"
 msgstr "CRLF würde in %s durch LF ersetzt werden."
 
-#: convert.c:208
+#: convert.c:209
 #, c-format
 msgid ""
 "CRLF will be replaced by LF in %s.\n"
@@ -2225,12 +2235,12 @@
 "Die Datei wird ihre ursprünglichen Zeilenenden im Arbeitsverzeichnis "
 "behalten."
 
-#: convert.c:216
+#: convert.c:217
 #, c-format
 msgid "LF would be replaced by CRLF in %s"
 msgstr "LF würde in %s durch CRLF ersetzt werden."
 
-#: convert.c:218
+#: convert.c:219
 #, c-format
 msgid ""
 "LF will be replaced by CRLF in %s.\n"
@@ -2240,12 +2250,12 @@
 "Die Datei wird ihre ursprünglichen Zeilenenden im Arbeitsverzeichnis "
 "behalten."
 
-#: convert.c:279
+#: convert.c:280
 #, c-format
 msgid "BOM is prohibited in '%s' if encoded as %s"
 msgstr "BOM ist in '%s' unzulässig, wenn als %s codiert."
 
-#: convert.c:286
+#: convert.c:287
 #, c-format
 msgid ""
 "The file '%s' contains a byte order mark (BOM). Please use UTF-%s as working-"
@@ -2254,12 +2264,12 @@
 "Die Datei '%s' enthält ein Byte-Order-Mark (BOM). Bitte benutzen Sie UTF-%s\n"
 "als Codierung im Arbeitsverzeichnis."
 
-#: convert.c:304
+#: convert.c:305
 #, c-format
 msgid "BOM is required in '%s' if encoded as %s"
 msgstr "BOM ist erforderlich in '%s', wenn als %s codiert."
 
-#: convert.c:306
+#: convert.c:307
 #, c-format
 msgid ""
 "The file '%s' is missing a byte order mark (BOM). Please use UTF-%sBE or UTF-"
@@ -2269,50 +2279,50 @@
 "oder UTF-%sLE (abhängig von der Byte-Reihenfolge) als Codierung im\n"
 "Arbeitsverzeichnis."
 
-#: convert.c:424 convert.c:495
+#: convert.c:425 convert.c:496
 #, c-format
 msgid "failed to encode '%s' from %s to %s"
 msgstr "Fehler beim Codieren von '%s' von %s nach %s."
 
-#: convert.c:467
+#: convert.c:468
 #, c-format
 msgid "encoding '%s' from %s to %s and back is not the same"
 msgstr "Die Codierung '%s' von %s nach %s und zurück ist nicht dasselbe."
 
-#: convert.c:673
+#: convert.c:674
 #, c-format
 msgid "cannot fork to run external filter '%s'"
 msgstr "Kann externen Filter '%s' nicht starten."
 
-#: convert.c:693
+#: convert.c:694
 #, c-format
 msgid "cannot feed the input to external filter '%s'"
 msgstr "Kann Eingaben nicht an externen Filter '%s' übergeben."
 
-#: convert.c:700
+#: convert.c:701
 #, c-format
 msgid "external filter '%s' failed %d"
 msgstr "Externer Filter '%s' fehlgeschlagen %d"
 
-#: convert.c:735 convert.c:738
+#: convert.c:736 convert.c:739
 #, c-format
 msgid "read from external filter '%s' failed"
 msgstr "Lesen von externem Filter '%s' fehlgeschlagen."
 
-#: convert.c:741 convert.c:796
+#: convert.c:742 convert.c:797
 #, c-format
 msgid "external filter '%s' failed"
 msgstr "Externer Filter '%s' fehlgeschlagen."
 
-#: convert.c:844
+#: convert.c:845
 msgid "unexpected filter type"
 msgstr "Unerwartete Filterart."
 
-#: convert.c:855
+#: convert.c:856
 msgid "path name too long for external filter"
 msgstr "Pfadname zu lang für externen Filter."
 
-#: convert.c:929
+#: convert.c:930
 #, c-format
 msgid ""
 "external filter '%s' is not available anymore although not all paths have "
@@ -2320,67 +2330,67 @@
 msgstr ""
 "Externer Filter '%s' nicht mehr verfügbar. Nicht alle Pfade wurden gefiltert."
 
-#: convert.c:1228
+#: convert.c:1229
 msgid "true/false are no valid working-tree-encodings"
 msgstr "true/false sind keine gültigen Codierungen im Arbeitsverzeichnis."
 
-#: convert.c:1398 convert.c:1432
+#: convert.c:1417 convert.c:1451
 #, c-format
 msgid "%s: clean filter '%s' failed"
 msgstr "%s: clean-Filter '%s' fehlgeschlagen."
 
-#: convert.c:1476
+#: convert.c:1495
 #, c-format
 msgid "%s: smudge filter %s failed"
 msgstr "%s: smudge-Filter '%s' fehlgeschlagen."
 
-#: date.c:137
+#: date.c:138
 msgid "in the future"
 msgstr "in der Zukunft"
 
-#: date.c:143
+#: date.c:144
 #, c-format
 msgid "%<PRIuMAX> second ago"
 msgid_plural "%<PRIuMAX> seconds ago"
 msgstr[0] "vor %<PRIuMAX> Sekunde"
 msgstr[1] "vor %<PRIuMAX> Sekunden"
 
-#: date.c:150
+#: date.c:151
 #, c-format
 msgid "%<PRIuMAX> minute ago"
 msgid_plural "%<PRIuMAX> minutes ago"
 msgstr[0] "vor %<PRIuMAX> Minute"
 msgstr[1] "vor %<PRIuMAX> Minuten"
 
-#: date.c:157
+#: date.c:158
 #, c-format
 msgid "%<PRIuMAX> hour ago"
 msgid_plural "%<PRIuMAX> hours ago"
 msgstr[0] "vor %<PRIuMAX> Stunde"
 msgstr[1] "vor %<PRIuMAX> Stunden"
 
-#: date.c:164
+#: date.c:165
 #, c-format
 msgid "%<PRIuMAX> day ago"
 msgid_plural "%<PRIuMAX> days ago"
 msgstr[0] "vor %<PRIuMAX> Tag"
 msgstr[1] "vor %<PRIuMAX> Tagen"
 
-#: date.c:170
+#: date.c:171
 #, c-format
 msgid "%<PRIuMAX> week ago"
 msgid_plural "%<PRIuMAX> weeks ago"
 msgstr[0] "vor %<PRIuMAX> Woche"
 msgstr[1] "vor %<PRIuMAX> Wochen"
 
-#: date.c:177
+#: date.c:178
 #, c-format
 msgid "%<PRIuMAX> month ago"
 msgid_plural "%<PRIuMAX> months ago"
 msgstr[0] "vor %<PRIuMAX> Monat"
 msgstr[1] "vor %<PRIuMAX> Monaten"
 
-#: date.c:188
+#: date.c:189
 #, c-format
 msgid "%<PRIuMAX> year"
 msgid_plural "%<PRIuMAX> years"
@@ -2388,14 +2398,14 @@
 msgstr[1] "vor %<PRIuMAX> Jahren"
 
 #. TRANSLATORS: "%s" is "<n> years"
-#: date.c:191
+#: date.c:192
 #, c-format
 msgid "%s, %<PRIuMAX> month ago"
 msgid_plural "%s, %<PRIuMAX> months ago"
 msgstr[0] "%s, und %<PRIuMAX> Monat"
 msgstr[1] "%s, und %<PRIuMAX> Monaten"
 
-#: date.c:196 date.c:201
+#: date.c:197 date.c:202
 #, c-format
 msgid "%<PRIuMAX> year ago"
 msgid_plural "%<PRIuMAX> years ago"
@@ -2434,7 +2444,7 @@
 msgid "failed to read orderfile '%s'"
 msgstr "Fehler beim Lesen der Reihenfolgedatei '%s'."
 
-#: diffcore-rename.c:544
+#: diffcore-rename.c:543
 msgid "Performing inexact rename detection"
 msgstr "Führe Erkennung für ungenaue Umbenennung aus"
 
@@ -2500,36 +2510,36 @@
 "Fehler in 'diff.dirstat' Konfigurationsvariable gefunden:\n"
 "%s"
 
-#: diff.c:4215
+#: diff.c:4218
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "externes Diff-Programm unerwartet beendet, angehalten bei %s"
 
-#: diff.c:4560
+#: diff.c:4563
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr ""
 "--name-only, --name-status, --check und -s schließen sich gegenseitig aus"
 
-#: diff.c:4563
+#: diff.c:4566
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "-G, -S und --find-object schließen sich gegenseitig aus"
 
-#: diff.c:4641
+#: diff.c:4644
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow erfordert genau eine Pfadspezifikation"
 
-#: diff.c:4689
+#: diff.c:4692
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "Ungültiger --stat Wert: %s"
 
-#: diff.c:4694 diff.c:4699 diff.c:4704 diff.c:4709 diff.c:5222
+#: diff.c:4697 diff.c:4702 diff.c:4707 diff.c:4712 diff.c:5225
 #: parse-options.c:199 parse-options.c:203
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s erwartet einen numerischen Wert."
 
-#: diff.c:4726
+#: diff.c:4729
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -2538,42 +2548,42 @@
 "Fehler beim Parsen des --dirstat/-X Optionsparameters:\n"
 "%s"
 
-#: diff.c:4811
+#: diff.c:4814
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "Unbekannte Änderungsklasse '%c' in --diff-filter=%s"
 
-#: diff.c:4835
+#: diff.c:4838
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "Unbekannter Wert nach ws-error-highlight=%.*s"
 
-#: diff.c:4849
+#: diff.c:4852
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "konnte '%s' nicht auflösen"
 
-#: diff.c:4899 diff.c:4905
+#: diff.c:4902 diff.c:4908
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s erwartet die Form <n>/<m>"
 
-#: diff.c:4917
+#: diff.c:4920
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s erwartet ein Zeichen, '%s' bekommen"
 
-#: diff.c:4938
+#: diff.c:4941
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "Ungültiges --color-moved Argument: %s"
 
-#: diff.c:4957
+#: diff.c:4960
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "Ungültiger Modus '%s' in --color-moved-ws"
 
-#: diff.c:4997
+#: diff.c:5000
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
@@ -2581,152 +2591,152 @@
 "Option diff-algorithm akzeptiert: \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
 
-#: diff.c:5033 diff.c:5053
+#: diff.c:5036 diff.c:5056
 #, c-format
 msgid "invalid argument to %s"
 msgstr "Ungültiges Argument für %s"
 
-#: diff.c:5191
+#: diff.c:5194
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "Fehler beim Parsen des --submodule Optionsparameters: '%s'"
 
-#: diff.c:5247
+#: diff.c:5250
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "Ungültiges --word-diff Argument: %s"
 
-#: diff.c:5270
+#: diff.c:5273
 msgid "Diff output format options"
 msgstr "Diff-Optionen zu Ausgabeformaten"
 
-#: diff.c:5272 diff.c:5278
+#: diff.c:5275 diff.c:5281
 msgid "generate patch"
 msgstr "Erzeuge Patch"
 
-#: diff.c:5275 builtin/log.c:172
+#: diff.c:5278 builtin/log.c:172
 msgid "suppress diff output"
 msgstr "Ausgabe der Unterschiede unterdrücken"
 
-#: diff.c:5280 diff.c:5394 diff.c:5401
+#: diff.c:5283 diff.c:5397 diff.c:5404
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5281 diff.c:5284
+#: diff.c:5284 diff.c:5287
 msgid "generate diffs with <n> lines context"
 msgstr "Erstelle Unterschiede mit <n> Zeilen des Kontextes"
 
-#: diff.c:5286
+#: diff.c:5289
 msgid "generate the diff in raw format"
 msgstr "Erstelle Unterschiede im Rohformat"
 
-#: diff.c:5289
+#: diff.c:5292
 msgid "synonym for '-p --raw'"
 msgstr "Synonym für '-p --raw'"
 
-#: diff.c:5293
+#: diff.c:5296
 msgid "synonym for '-p --stat'"
 msgstr "Synonym für '-p --stat'"
 
-#: diff.c:5297
+#: diff.c:5300
 msgid "machine friendly --stat"
 msgstr "maschinenlesbare Ausgabe von --stat"
 
-#: diff.c:5300
+#: diff.c:5303
 msgid "output only the last line of --stat"
 msgstr "nur die letzte Zeile von --stat ausgeben"
 
-#: diff.c:5302 diff.c:5310
+#: diff.c:5305 diff.c:5313
 msgid "<param1,param2>..."
 msgstr "<Parameter1,Parameter2>..."
 
-#: diff.c:5303
+#: diff.c:5306
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr ""
 "Gebe die Verteilung des relativen Umfangs der Änderungen für jedes "
 "Unterverzeichnis aus"
 
-#: diff.c:5307
+#: diff.c:5310
 msgid "synonym for --dirstat=cumulative"
 msgstr "Synonym für --dirstat=cumulative"
 
-#: diff.c:5311
+#: diff.c:5314
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "Synonym für --dirstat=files,Parameter1,Parameter2..."
 
-#: diff.c:5315
+#: diff.c:5318
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 "Warnen, wenn Änderungen Konfliktmarker oder Whitespace-Fehler einbringen"
 
-#: diff.c:5318
+#: diff.c:5321
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr ""
 "Gekürzte Zusammenfassung, wie z.B. Erstellungen, Umbenennungen und "
 "Änderungen der Datei-Rechte"
 
-#: diff.c:5321
+#: diff.c:5324
 msgid "show only names of changed files"
 msgstr "nur Dateinamen der geänderten Dateien anzeigen"
 
-#: diff.c:5324
+#: diff.c:5327
 msgid "show only names and status of changed files"
 msgstr "nur Dateinamen und Status der geänderten Dateien anzeigen"
 
-#: diff.c:5326
+#: diff.c:5329
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<Breite>[,<Namens-Breite>[,<Anzahl>]]"
 
-#: diff.c:5327
+#: diff.c:5330
 msgid "generate diffstat"
 msgstr "Generiere Zusammenfassung der Unterschiede"
 
-#: diff.c:5329 diff.c:5332 diff.c:5335
+#: diff.c:5332 diff.c:5335 diff.c:5338
 msgid "<width>"
 msgstr "<Breite>"
 
-#: diff.c:5330
+#: diff.c:5333
 msgid "generate diffstat with a given width"
 msgstr "Erzeuge Zusammenfassung der Unterschiede mit gegebener Breite"
 
-#: diff.c:5333
+#: diff.c:5336
 msgid "generate diffstat with a given name width"
 msgstr "Erzeuge Zusammenfassung der Unterschiede mit gegebener Namens-Breite"
 
-#: diff.c:5336
+#: diff.c:5339
 msgid "generate diffstat with a given graph width"
 msgstr "Erzeuge Zusammenfassung der Unterschiede mit gegebener Graph-Breite"
 
-#: diff.c:5338
+#: diff.c:5341
 msgid "<count>"
 msgstr "<Anzahl>"
 
-#: diff.c:5339
+#: diff.c:5342
 msgid "generate diffstat with limited lines"
 msgstr "Erzeuge Zusammenfassung der Unterschiede mit begrenzten Zeilen"
 
-#: diff.c:5342
+#: diff.c:5345
 msgid "generate compact summary in diffstat"
 msgstr "Erzeuge kompakte Zusammenstellung in Zusammenfassung der Unterschiede"
 
-#: diff.c:5345
+#: diff.c:5348
 msgid "output a binary diff that can be applied"
 msgstr "Gebe eine binäre Differenz aus, dass angewendet werden kann"
 
-#: diff.c:5348
+#: diff.c:5351
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr "Zeige vollständige Objekt-Namen in den \"index\"-Zeilen"
 
-#: diff.c:5350
+#: diff.c:5353
 msgid "show colored diff"
 msgstr "Zeige farbige Unterschiede"
 
-#: diff.c:5351
+#: diff.c:5354
 msgid "<kind>"
 msgstr "<Art>"
 
-#: diff.c:5352
+#: diff.c:5355
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
@@ -2734,7 +2744,7 @@
 "Hebe Whitespace-Fehler in den Zeilen 'context', 'old' oder 'new' bei den "
 "Unterschieden hervor"
 
-#: diff.c:5355
+#: diff.c:5358
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -2742,91 +2752,91 @@
 "Verschleiere nicht die Pfadnamen und nutze NUL-Zeichen als Schlusszeichen in "
 "Ausgabefeldern bei --raw oder --numstat"
 
-#: diff.c:5358 diff.c:5361 diff.c:5364 diff.c:5470
+#: diff.c:5361 diff.c:5364 diff.c:5367 diff.c:5473
 msgid "<prefix>"
 msgstr "<Präfix>"
 
-#: diff.c:5359
+#: diff.c:5362
 msgid "show the given source prefix instead of \"a/\""
 msgstr "Zeige den gegebenen Quell-Präfix statt \"a/\""
 
-#: diff.c:5362
+#: diff.c:5365
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "Zeige den gegebenen Ziel-Präfix statt \"b/\""
 
-#: diff.c:5365
+#: diff.c:5368
 msgid "prepend an additional prefix to every line of output"
 msgstr "Stelle einen zusätzlichen Präfix bei jeder Ausgabezeile voran"
 
-#: diff.c:5368
+#: diff.c:5371
 msgid "do not show any source or destination prefix"
 msgstr "Zeige keine Quell- oder Ziel-Präfixe an"
 
-#: diff.c:5371
+#: diff.c:5374
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr ""
 "Zeige Kontext zwischen Unterschied-Blöcken bis zur angegebenen Anzahl von "
 "Zeilen."
 
-#: diff.c:5375 diff.c:5380 diff.c:5385
+#: diff.c:5378 diff.c:5383 diff.c:5388
 msgid "<char>"
 msgstr "<Zeichen>"
 
-#: diff.c:5376
+#: diff.c:5379
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "Das Zeichen festlegen, das eine neue Zeile kennzeichnet (statt '+')"
 
-#: diff.c:5381
+#: diff.c:5384
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "Das Zeichen festlegen, das eine alte Zeile kennzeichnet (statt '-')"
 
-#: diff.c:5386
+#: diff.c:5389
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "Das Zeichen festlegen, das den Kontext kennzeichnet (statt ' ')"
 
-#: diff.c:5389
+#: diff.c:5392
 msgid "Diff rename options"
 msgstr "Diff-Optionen zur Umbenennung"
 
-#: diff.c:5390
+#: diff.c:5393
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5391
+#: diff.c:5394
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr ""
 "Teile komplette Rewrite-Änderungen in Änderungen mit \"löschen\" und "
 "\"erstellen\""
 
-#: diff.c:5395
+#: diff.c:5398
 msgid "detect renames"
 msgstr "Umbenennungen erkennen"
 
-#: diff.c:5399
+#: diff.c:5402
 msgid "omit the preimage for deletes"
 msgstr "Preimage für Löschungen weglassen."
 
-#: diff.c:5402
+#: diff.c:5405
 msgid "detect copies"
 msgstr "Kopien erkennen"
 
-#: diff.c:5406
+#: diff.c:5409
 msgid "use unmodified files as source to find copies"
 msgstr "Nutze ungeänderte Dateien als Quelle zum Finden von Kopien"
 
-#: diff.c:5408
+#: diff.c:5411
 msgid "disable rename detection"
 msgstr "Erkennung von Umbenennungen deaktivieren"
 
-#: diff.c:5411
+#: diff.c:5414
 msgid "use empty blobs as rename source"
 msgstr "Nutze leere Blobs als Quelle von Umbennungen"
 
-#: diff.c:5413
+#: diff.c:5416
 msgid "continue listing the history of a file beyond renames"
 msgstr "Fortführen der Auflistung der Historie einer Datei nach Umbennung"
 
-#: diff.c:5416
+#: diff.c:5419
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
@@ -2834,159 +2844,159 @@
 "Verhindere die Erkennung von Umbennungen und Kopien, wenn die Anzahl der "
 "Ziele für Umbennungen und Kopien das gegebene Limit überschreitet"
 
-#: diff.c:5418
+#: diff.c:5421
 msgid "Diff algorithm options"
 msgstr "Diff Algorithmus-Optionen"
 
-#: diff.c:5420
+#: diff.c:5423
 msgid "produce the smallest possible diff"
 msgstr "Erzeuge die kleinstmöglichen Änderungen"
 
-#: diff.c:5423
+#: diff.c:5426
 msgid "ignore whitespace when comparing lines"
 msgstr "Whitespace-Änderungen beim Vergleich von Zeilen ignorieren"
 
-#: diff.c:5426
+#: diff.c:5429
 msgid "ignore changes in amount of whitespace"
 msgstr "Änderungen bei der Anzahl von Whitespace ignorieren"
 
-#: diff.c:5429
+#: diff.c:5432
 msgid "ignore changes in whitespace at EOL"
 msgstr "Whitespace-Änderungen am Zeilenende ignorieren"
 
-#: diff.c:5432
+#: diff.c:5435
 msgid "ignore carrier-return at the end of line"
 msgstr "Ignoriere den Zeilenumbruch am Ende der Zeile"
 
-#: diff.c:5435
+#: diff.c:5438
 msgid "ignore changes whose lines are all blank"
 msgstr "Ignoriere Änderungen in leeren Zeilen"
 
-#: diff.c:5438
+#: diff.c:5441
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr ""
 "Heuristik, um Grenzen der Änderungsblöcke für bessere Lesbarkeit zu "
 "verschieben"
 
-#: diff.c:5441
+#: diff.c:5444
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "Erzeuge Änderungen durch Nutzung des Algorithmus \"Patience Diff\""
 
-#: diff.c:5445
+#: diff.c:5448
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "Erzeuge Änderungen durch Nutzung des Algorithmus \"Histogram Diff\""
 
-#: diff.c:5447
+#: diff.c:5450
 msgid "<algorithm>"
 msgstr "<Algorithmus>"
 
-#: diff.c:5448
+#: diff.c:5451
 msgid "choose a diff algorithm"
 msgstr "Ein Algorithmus für Änderungen wählen"
 
-#: diff.c:5450
+#: diff.c:5453
 msgid "<text>"
 msgstr "<Text>"
 
-#: diff.c:5451
+#: diff.c:5454
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "Erzeuge Änderungen durch Nutzung des Algorithmus \"Anchored Diff\""
 
-#: diff.c:5453 diff.c:5462 diff.c:5465
+#: diff.c:5456 diff.c:5465 diff.c:5468
 msgid "<mode>"
 msgstr "<Modus>"
 
-#: diff.c:5454
+#: diff.c:5457
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr "Zeige Wort-Änderungen, nutze <Modus>, um Wörter abzugrenzen"
 
-#: diff.c:5456 diff.c:5459 diff.c:5504
+#: diff.c:5459 diff.c:5462 diff.c:5507
 msgid "<regex>"
 msgstr "<Regex>"
 
-#: diff.c:5457
+#: diff.c:5460
 msgid "use <regex> to decide what a word is"
 msgstr "Nutze <Regex>, um zu entscheiden, was ein Wort ist"
 
-#: diff.c:5460
+#: diff.c:5463
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "Entsprechend wie --word-diff=color --word-diff-regex=<Regex>"
 
-#: diff.c:5463
+#: diff.c:5466
 msgid "moved lines of code are colored differently"
 msgstr "Verschobene Codezeilen sind andersfarbig"
 
-#: diff.c:5466
+#: diff.c:5469
 msgid "how white spaces are ignored in --color-moved"
 msgstr "Wie Whitespaces in --color-moved ignoriert werden"
 
-#: diff.c:5469
+#: diff.c:5472
 msgid "Other diff options"
 msgstr "Andere Diff-Optionen"
 
-#: diff.c:5471
+#: diff.c:5474
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 "Wenn vom Unterverzeichnis aufgerufen, schließe Änderungen außerhalb aus und "
 "zeige relative Pfade an"
 
-#: diff.c:5475
+#: diff.c:5478
 msgid "treat all files as text"
 msgstr "alle Dateien als Text behandeln"
 
-#: diff.c:5477
+#: diff.c:5480
 msgid "swap two inputs, reverse the diff"
 msgstr "Vertausche die beiden Eingaben und drehe die Änderungen um"
 
-#: diff.c:5479
+#: diff.c:5482
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr ""
 "Beende mit Exit-Status 1, wenn Änderungen vorhanden sind, andernfalls mit 0"
 
-#: diff.c:5481
+#: diff.c:5484
 msgid "disable all output of the program"
 msgstr "Keine Ausgaben vom Programm"
 
-#: diff.c:5483
+#: diff.c:5486
 msgid "allow an external diff helper to be executed"
 msgstr "Erlaube die Ausführung eines externes Programms für Änderungen"
 
-#: diff.c:5485
+#: diff.c:5488
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 "Führe externe Text-Konvertierungsfilter aus, wenn binäre Dateien vergleicht "
 "werden"
 
-#: diff.c:5487
+#: diff.c:5490
 msgid "<when>"
 msgstr "<wann>"
 
-#: diff.c:5488
+#: diff.c:5491
 msgid "ignore changes to submodules in the diff generation"
 msgstr ""
 "Änderungen in Submodulen während der Erstellung der Unterschiede ignorieren"
 
-#: diff.c:5491
+#: diff.c:5494
 msgid "<format>"
 msgstr "<Format>"
 
-#: diff.c:5492
+#: diff.c:5495
 msgid "specify how differences in submodules are shown"
 msgstr "Angeben, wie Unterschiede in Submodulen gezeigt werden"
 
-#: diff.c:5496
+#: diff.c:5499
 msgid "hide 'git add -N' entries from the index"
 msgstr "verstecke 'git add -N' Einträge vom Index"
 
-#: diff.c:5499
+#: diff.c:5502
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "Behandle 'git add -N' Einträge im Index als echt"
 
-#: diff.c:5501
+#: diff.c:5504
 msgid "<string>"
 msgstr "<Zeichenkette>"
 
-#: diff.c:5502
+#: diff.c:5505
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
@@ -2994,7 +3004,7 @@
 "Suche nach Unterschieden, welche die Anzahl des Vorkommens der angegebenen "
 "Zeichenkette verändern"
 
-#: diff.c:5505
+#: diff.c:5508
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
@@ -3002,25 +3012,25 @@
 "Suche nach Unterschieden, welche die Anzahl des Vorkommens des angegebenen "
 "regulären Ausdrucks verändern"
 
-#: diff.c:5508
+#: diff.c:5511
 msgid "show all changes in the changeset with -S or -G"
 msgstr "zeige alle Änderungen im Changeset mit -S oder -G"
 
-#: diff.c:5511
+#: diff.c:5514
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr ""
 "behandle <Zeichenkette> bei -S als erweiterten POSIX regulären Ausdruck"
 
-#: diff.c:5514
+#: diff.c:5517
 msgid "control the order in which files appear in the output"
 msgstr ""
 "kontrolliere die Reihenfolge, in der die Dateien in der Ausgabe erscheinen"
 
-#: diff.c:5515
+#: diff.c:5518
 msgid "<object-id>"
 msgstr "<Objekt-ID>"
 
-#: diff.c:5516
+#: diff.c:5519
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
@@ -3028,33 +3038,33 @@
 "Suche nach Unterschieden, welche die Anzahl des Vorkommens des angegebenen "
 "Objektes verändern"
 
-#: diff.c:5518
+#: diff.c:5521
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5519
+#: diff.c:5522
 msgid "select files by diff type"
 msgstr "Wähle Dateien anhand der Art der Änderung"
 
-#: diff.c:5521
+#: diff.c:5524
 msgid "<file>"
 msgstr "<Datei>"
 
-#: diff.c:5522
+#: diff.c:5525
 msgid "Output to a specific file"
 msgstr "Ausgabe zu einer bestimmten Datei"
 
-#: diff.c:6177
+#: diff.c:6180
 msgid "inexact rename detection was skipped due to too many files."
 msgstr ""
 "Ungenaue Erkennung für Umbenennungen wurde aufgrund zu vieler Dateien\n"
 "übersprungen."
 
-#: diff.c:6180
+#: diff.c:6183
 msgid "only found copies from modified paths due to too many files."
 msgstr "nur Kopien von geänderten Pfaden, aufgrund zu vieler Dateien, gefunden"
 
-#: diff.c:6183
+#: diff.c:6186
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -3062,43 +3072,43 @@
 "Sie könnten die Variable %s auf mindestens %d setzen und den Befehl\n"
 "erneut versuchen."
 
-#: dir.c:537
+#: dir.c:549
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
 msgstr ""
 "Pfadspezifikation '%s' stimmt mit keinen git-bekannten Dateien überein."
 
-#: dir.c:926
+#: dir.c:938
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr "Kann %s nicht als exclude-Filter benutzen."
 
-#: dir.c:1843
+#: dir.c:1877
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "Konnte Verzeichnis '%s' nicht öffnen."
 
-#: dir.c:2085
+#: dir.c:2128
 msgid "failed to get kernel name and information"
 msgstr "Fehler beim Sammeln von Namen und Informationen zum Kernel"
 
-#: dir.c:2209
+#: dir.c:2252
 msgid "untracked cache is disabled on this system or location"
 msgstr ""
 "Cache für unversionierte Dateien ist auf diesem System oder\n"
 "für dieses Verzeichnis deaktiviert."
 
-#: dir.c:3013
+#: dir.c:3056
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "Index-Datei in Repository %s beschädigt."
 
-#: dir.c:3058 dir.c:3063
+#: dir.c:3101 dir.c:3106
 #, c-format
 msgid "could not create directories for %s"
 msgstr "Konnte Verzeichnisse für '%s' nicht erstellen."
 
-#: dir.c:3092
+#: dir.c:3135
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "Konnte Git-Verzeichnis nicht von '%s' nach '%s' migrieren."
@@ -3117,12 +3127,12 @@
 msgid "could not stat file '%s'"
 msgstr "Konnte Datei '%s' nicht lesen."
 
-#: environment.c:150
+#: environment.c:148
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "Ungültiger Git-Namespace-Pfad \"%s\""
 
-#: environment.c:332
+#: environment.c:330
 #, c-format
 msgid "could not set GIT_DIR to '%s'"
 msgstr "Konnte GIT_DIR nicht zu '%s' setzen."
@@ -3132,158 +3142,154 @@
 msgid "too many args to run %s"
 msgstr "Zu viele Argumente angegeben, um %s auszuführen."
 
-#: fetch-object.c:17
-msgid "Remote with no URL"
-msgstr "Remote-Repository ohne URL"
-
-#: fetch-pack.c:151
+#: fetch-pack.c:150
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack: erwartete shallow-Liste"
 
-#: fetch-pack.c:154
+#: fetch-pack.c:153
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr "git fetch-pack: erwartete ein Flush-Paket nach der shallow-Liste"
 
-#: fetch-pack.c:165
+#: fetch-pack.c:164
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr "git fetch-pack: ACK/NAK erwartet, Flush-Paket bekommen"
 
-#: fetch-pack.c:185
+#: fetch-pack.c:184
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr "git fetch-pack: ACK/NAK erwartet, '%s' bekommen"
 
-#: fetch-pack.c:196
+#: fetch-pack.c:195
 msgid "unable to write to remote"
 msgstr "konnte nicht zum Remote schreiben"
 
-#: fetch-pack.c:258
+#: fetch-pack.c:257
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "--stateless-rpc benötigt multi_ack_detailed"
 
-#: fetch-pack.c:360 fetch-pack.c:1284
+#: fetch-pack.c:356 fetch-pack.c:1280
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "Ungültige shallow-Zeile: %s"
 
-#: fetch-pack.c:366 fetch-pack.c:1290
+#: fetch-pack.c:362 fetch-pack.c:1286
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "Ungültige unshallow-Zeile: %s"
 
-#: fetch-pack.c:368 fetch-pack.c:1292
+#: fetch-pack.c:364 fetch-pack.c:1288
 #, c-format
 msgid "object not found: %s"
 msgstr "Objekt nicht gefunden: %s"
 
-#: fetch-pack.c:371 fetch-pack.c:1295
+#: fetch-pack.c:367 fetch-pack.c:1291
 #, c-format
 msgid "error in object: %s"
 msgstr "Fehler in Objekt: %s"
 
-#: fetch-pack.c:373 fetch-pack.c:1297
+#: fetch-pack.c:369 fetch-pack.c:1293
 #, c-format
 msgid "no shallow found: %s"
 msgstr "Kein shallow-Objekt gefunden: %s"
 
-#: fetch-pack.c:376 fetch-pack.c:1301
+#: fetch-pack.c:372 fetch-pack.c:1297
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "shallow/unshallow erwartet, %s bekommen"
 
-#: fetch-pack.c:417
+#: fetch-pack.c:414
 #, c-format
 msgid "got %s %d %s"
 msgstr "%s %d %s bekommen"
 
-#: fetch-pack.c:434
+#: fetch-pack.c:431
 #, c-format
 msgid "invalid commit %s"
 msgstr "Ungültiger Commit %s"
 
-#: fetch-pack.c:465
+#: fetch-pack.c:462
 msgid "giving up"
 msgstr "Gebe auf"
 
-#: fetch-pack.c:477 progress.c:277
+#: fetch-pack.c:475 progress.c:312
 msgid "done"
 msgstr "Fertig"
 
-#: fetch-pack.c:489
+#: fetch-pack.c:487
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "%s (%d) %s bekommen"
 
-#: fetch-pack.c:535
+#: fetch-pack.c:533
 #, c-format
 msgid "Marking %s as complete"
 msgstr "Markiere %s als vollständig"
 
-#: fetch-pack.c:744
+#: fetch-pack.c:742
 #, c-format
 msgid "already have %s (%s)"
 msgstr "habe %s (%s) bereits"
 
-#: fetch-pack.c:783
+#: fetch-pack.c:781
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack: Fehler beim Starten des sideband demultiplexer"
 
-#: fetch-pack.c:791
+#: fetch-pack.c:789
 msgid "protocol error: bad pack header"
 msgstr "Protokollfehler: ungültiger Pack-Header"
 
-#: fetch-pack.c:859
+#: fetch-pack.c:857
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack: konnte %s nicht starten"
 
-#: fetch-pack.c:875
+#: fetch-pack.c:873
 #, c-format
 msgid "%s failed"
 msgstr "%s fehlgeschlagen"
 
-#: fetch-pack.c:877
+#: fetch-pack.c:875
 msgid "error in sideband demultiplexer"
 msgstr "Fehler in sideband demultiplexer"
 
-#: fetch-pack.c:908
+#: fetch-pack.c:907
 #, c-format
 msgid "Server version is %.*s"
 msgstr "Server-Version ist %.*s"
 
-#: fetch-pack.c:913 fetch-pack.c:919 fetch-pack.c:922 fetch-pack.c:928
-#: fetch-pack.c:932 fetch-pack.c:936 fetch-pack.c:940 fetch-pack.c:944
-#: fetch-pack.c:948 fetch-pack.c:952 fetch-pack.c:956 fetch-pack.c:960
-#: fetch-pack.c:966 fetch-pack.c:972 fetch-pack.c:977 fetch-pack.c:982
+#: fetch-pack.c:912 fetch-pack.c:918 fetch-pack.c:921 fetch-pack.c:927
+#: fetch-pack.c:931 fetch-pack.c:935 fetch-pack.c:939 fetch-pack.c:943
+#: fetch-pack.c:947 fetch-pack.c:951 fetch-pack.c:955 fetch-pack.c:959
+#: fetch-pack.c:965 fetch-pack.c:971 fetch-pack.c:976 fetch-pack.c:981
 #, c-format
 msgid "Server supports %s"
 msgstr "Server unterstützt %s"
 
-#: fetch-pack.c:915
+#: fetch-pack.c:914
 msgid "Server does not support shallow clients"
 msgstr "Server unterstützt keine shallow-Clients"
 
-#: fetch-pack.c:975
+#: fetch-pack.c:974
 msgid "Server does not support --shallow-since"
 msgstr "Server unterstützt kein --shallow-since"
 
-#: fetch-pack.c:980
+#: fetch-pack.c:979
 msgid "Server does not support --shallow-exclude"
 msgstr "Server unterstützt kein --shallow-exclude"
 
-#: fetch-pack.c:984
+#: fetch-pack.c:983
 msgid "Server does not support --deepen"
 msgstr "Server unterstützt kein --deepen"
 
-#: fetch-pack.c:1001
+#: fetch-pack.c:1000
 msgid "no common commits"
 msgstr "keine gemeinsamen Commits"
 
-#: fetch-pack.c:1013 fetch-pack.c:1462
+#: fetch-pack.c:1012 fetch-pack.c:1468
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: Abholen fehlgeschlagen."
 
-#: fetch-pack.c:1151
+#: fetch-pack.c:1150
 msgid "Server does not support shallow requests"
 msgstr "Server unterstützt keine shallow-Anfragen."
 
@@ -3291,72 +3297,72 @@
 msgid "Server supports filter"
 msgstr "Server unterstützt Filter"
 
-#: fetch-pack.c:1184
+#: fetch-pack.c:1180
 msgid "unable to write request to remote"
 msgstr "konnte Anfrage nicht zum Remote schreiben"
 
-#: fetch-pack.c:1202
+#: fetch-pack.c:1198
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "Fehler beim Lesen von Sektionskopf '%s'."
 
-#: fetch-pack.c:1208
+#: fetch-pack.c:1204
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "'%s' erwartet, '%s' empfangen"
 
-#: fetch-pack.c:1247
+#: fetch-pack.c:1243
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "Unerwartete Acknowledgment-Zeile: '%s'"
 
-#: fetch-pack.c:1252
+#: fetch-pack.c:1248
 #, c-format
 msgid "error processing acks: %d"
 msgstr "Fehler beim Verarbeiten von ACKS: %d"
 
-#: fetch-pack.c:1262
+#: fetch-pack.c:1258
 msgid "expected packfile to be sent after 'ready'"
 msgstr "Erwartete Versand einer Packdatei nach 'ready'."
 
-#: fetch-pack.c:1264
+#: fetch-pack.c:1260
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr "Erwartete keinen Versand einer anderen Sektion ohne 'ready'."
 
-#: fetch-pack.c:1306
+#: fetch-pack.c:1302
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "Fehler beim Verarbeiten von Shallow-Informationen: %d"
 
-#: fetch-pack.c:1353
+#: fetch-pack.c:1349
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "wanted-ref erwartet, '%s' bekommen"
 
-#: fetch-pack.c:1358
+#: fetch-pack.c:1354
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "Unerwartetes wanted-ref: '%s'"
 
-#: fetch-pack.c:1363
+#: fetch-pack.c:1359
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "Fehler beim Verarbeiten von wanted-refs: %d"
 
-#: fetch-pack.c:1689
+#: fetch-pack.c:1693
 msgid "no matching remote head"
 msgstr "kein übereinstimmender Remote-Branch"
 
-#: fetch-pack.c:1712 builtin/clone.c:686
+#: fetch-pack.c:1716 builtin/clone.c:685
 msgid "remote did not send all necessary objects"
 msgstr "Remote-Repository hat nicht alle erforderlichen Objekte gesendet."
 
-#: fetch-pack.c:1739
+#: fetch-pack.c:1743
 #, c-format
 msgid "no such remote ref %s"
 msgstr "keine solche Remote-Referenz %s"
 
-#: fetch-pack.c:1742
+#: fetch-pack.c:1746
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "Der Server lehnt Anfrage nach nicht angebotenem Objekt %s ab."
@@ -3379,18 +3385,26 @@
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr "Ignoriere ungültige Farbe '%.*s' in log.graphColors"
 
-#: grep.c:2117
+#: grep.c:668
+msgid ""
+"given pattern contains NULL byte (via -f <file>). This is only supported "
+"with -P under PCRE v2"
+msgstr ""
+"Angegebenes Muster enthält NULL Byte (über -f <Datei>). Das wird nur mit -P"
+"unter PCRE v2 unterstützt."
+
+#: grep.c:2124
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "'%s': konnte %s nicht lesen"
 
-#: grep.c:2134 setup.c:164 builtin/clone.c:409 builtin/diff.c:82
+#: grep.c:2141 setup.c:165 builtin/clone.c:408 builtin/diff.c:82
 #: builtin/rm.c:135
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "Konnte '%s' nicht lesen"
 
-#: grep.c:2145
+#: grep.c:2152
 #, c-format
 msgid "'%s': short read"
 msgstr "'%s': read() zu kurz"
@@ -3535,12 +3549,12 @@
 msgid "git version [<options>]"
 msgstr "git version [<Optionen>]"
 
-#: help.c:782
+#: help.c:783
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s: %s - %s"
 
-#: help.c:786
+#: help.c:787
 msgid ""
 "\n"
 "Did you mean this?"
@@ -3613,42 +3627,57 @@
 msgid "invalid date format: %s"
 msgstr "Ungültiges Datumsformat: %s"
 
-#: list-objects.c:129
+#: list-objects.c:127
 #, c-format
 msgid "entry '%s' in tree %s has tree mode, but is not a tree"
 msgstr ""
 "Eintrag '%s' im Tree-Objekt %s hat Tree-Modus, aber ist kein Tree-Objekt"
 
-#: list-objects.c:142
+#: list-objects.c:140
 #, c-format
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr "Eintrag '%s' im Tree-Objekt %s hat Blob-Modus, aber ist kein Blob"
 
-#: list-objects.c:378
+#: list-objects.c:375
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "Konnte Root-Tree-Objekt für Commit %s nicht laden."
 
-#: list-objects-filter-options.c:36
-msgid "multiple filter-specs cannot be combined"
-msgstr "Mehrere filter-specs können nicht kombiniert werden."
+#: list-objects-filter.c:492
+#, c-format
+msgid "unable to access sparse blob in '%s'"
+msgstr "konnte nicht auf partiellen Blob '%s' zugreifen"
+
+#: list-objects-filter.c:495
+#, c-format
+msgid "unable to parse sparse filter data in %s"
+msgstr "Konnte partielle Filter-Daten in %s nicht parsen."
 
 #: list-objects-filter-options.c:58
 msgid "expected 'tree:<depth>'"
 msgstr "'tree:<Tiefe>' erwartet"
 
-#: list-objects-filter-options.c:84
+#: list-objects-filter-options.c:73
 msgid "sparse:path filters support has been dropped"
 msgstr "Keine Unterstützung für sparse:path Filter mehr"
 
-#: list-objects-filter-options.c:94
+#: list-objects-filter-options.c:86
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "Ungültige filter-spec '%s'"
 
-#: list-objects-filter-options.c:158
-msgid "cannot change partial clone promisor remote"
-msgstr "Kann Remote-Repository für partielles Klonen nicht ändern."
+#: list-objects-filter-options.c:102
+#, c-format
+msgid "must escape char in sub-filter-spec: '%c'"
+msgstr "Zeichen in sub-filter-spec muss maskiert werden: '%c'"
+
+#: list-objects-filter-options.c:144
+msgid "expected something after combine:"
+msgstr "erwartete etwas nach 'combine:'"
+
+#: list-objects-filter-options.c:226
+msgid "multiple filter-specs cannot be combined"
+msgstr "Mehrere filter-specs können nicht kombiniert werden."
 
 #: lockfile.c:151
 #, c-format
@@ -3679,118 +3708,114 @@
 msgid "failed to read the cache"
 msgstr "Lesen des Zwischenspeichers fehlgeschlagen"
 
-#: merge.c:107 rerere.c:720 builtin/am.c:1885 builtin/am.c:1919
-#: builtin/checkout.c:536 builtin/checkout.c:796 builtin/clone.c:786
+#: merge.c:107 rerere.c:720 builtin/am.c:1874 builtin/am.c:1908
+#: builtin/checkout.c:537 builtin/checkout.c:796 builtin/clone.c:785
 #: builtin/stash.c:264
 msgid "unable to write new index file"
 msgstr "Konnte neue Index-Datei nicht schreiben."
 
-#: merge-recursive.c:322
+#: merge-recursive.c:367
 msgid "(bad commit)\n"
 msgstr "(ungültiger Commit)\n"
 
-#: merge-recursive.c:345
+#: merge-recursive.c:390
 #, c-format
 msgid "add_cacheinfo failed for path '%s'; merge aborting."
 msgstr "add_cacheinfo für Pfad '%s' fehlgeschlagen; Merge wird abgebrochen."
 
-#: merge-recursive.c:354
+#: merge-recursive.c:399
 #, c-format
 msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
 msgstr ""
 "add_cacheinfo zur Aktualisierung für Pfad '%s' fehlgeschlagen;\n"
 "Merge wird abgebrochen."
 
-#: merge-recursive.c:437
-msgid "error building trees"
-msgstr "Fehler beim Erstellen der \"Tree\"-Objekte"
-
-#: merge-recursive.c:863
+#: merge-recursive.c:885
 #, c-format
 msgid "failed to create path '%s'%s"
 msgstr "Fehler beim Erstellen des Pfades '%s'%s"
 
-#: merge-recursive.c:874
+#: merge-recursive.c:896
 #, c-format
 msgid "Removing %s to make room for subdirectory\n"
 msgstr "Entferne %s, um Platz für Unterverzeichnis zu schaffen\n"
 
-#: merge-recursive.c:888 merge-recursive.c:907
+#: merge-recursive.c:910 merge-recursive.c:929
 msgid ": perhaps a D/F conflict?"
 msgstr ": vielleicht ein Verzeichnis/Datei-Konflikt?"
 
-#: merge-recursive.c:897
+#: merge-recursive.c:919
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
 msgstr "verweigere, da unversionierte Dateien in '%s' verloren gehen würden"
 
-#: merge-recursive.c:938 builtin/cat-file.c:40
+#: merge-recursive.c:960 builtin/cat-file.c:41
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "kann Objekt %s '%s' nicht lesen"
 
-#: merge-recursive.c:941
+#: merge-recursive.c:965
 #, c-format
 msgid "blob expected for %s '%s'"
 msgstr "Blob erwartet für %s '%s'"
 
-#: merge-recursive.c:965
+#: merge-recursive.c:990
 #, c-format
 msgid "failed to open '%s': %s"
 msgstr "Fehler beim Öffnen von '%s': %s"
 
-#: merge-recursive.c:976
+#: merge-recursive.c:1001
 #, c-format
 msgid "failed to symlink '%s': %s"
 msgstr "Fehler beim Erstellen einer symbolischen Verknüpfung für '%s': %s"
 
-#: merge-recursive.c:981
+#: merge-recursive.c:1006
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "weiß nicht was mit %06o %s '%s' zu machen ist"
 
-#: merge-recursive.c:1177
+#: merge-recursive.c:1199
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "Fehler beim Merge von Submodul %s (nicht ausgecheckt)."
 
-#: merge-recursive.c:1184
+#: merge-recursive.c:1206
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr "Fehler beim Merge von Submodul %s (Commits nicht vorhanden)."
 
-#: merge-recursive.c:1191
+#: merge-recursive.c:1213
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr "Fehler beim Merge von Submodul %s (Commits folgen keiner Merge-Basis)"
 
-#: merge-recursive.c:1199 merge-recursive.c:1211
+#: merge-recursive.c:1221 merge-recursive.c:1233
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "Spule Submodul %s zu dem folgenden Commit vor:"
 
-#: merge-recursive.c:1202 merge-recursive.c:1214
+#: merge-recursive.c:1224 merge-recursive.c:1236
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "Spule Submodul %s vor"
 
-#: merge-recursive.c:1237
+#: merge-recursive.c:1259
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 "Fehler beim Merge von Submodule %s (dem Merge nachfolgende Commits nicht "
 "gefunden)"
 
-#: merge-recursive.c:1241
+#: merge-recursive.c:1263
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "Fehler beim Merge von Submodul %s (kein Vorspulen)"
 
-#: merge-recursive.c:1242
+#: merge-recursive.c:1264
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr "Mögliche Auflösung des Merges für Submodul gefunden:\n"
 
-#: merge-recursive.c:1245
+#: merge-recursive.c:1267
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -3807,33 +3832,33 @@
 "\n"
 "hinzu, um diesen Vorschlag zu akzeptieren.\n"
 
-#: merge-recursive.c:1254
+#: merge-recursive.c:1276
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr "Fehler beim Merge von Submodul %s (mehrere Merges gefunden)"
 
-#: merge-recursive.c:1327
+#: merge-recursive.c:1349
 msgid "Failed to execute internal merge"
 msgstr "Fehler bei Ausführung des internen Merges"
 
-#: merge-recursive.c:1332
+#: merge-recursive.c:1354
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "Konnte %s nicht zur Datenbank hinzufügen"
 
-#: merge-recursive.c:1364
+#: merge-recursive.c:1386
 #, c-format
 msgid "Auto-merging %s"
 msgstr "automatischer Merge von %s"
 
-#: merge-recursive.c:1387
+#: merge-recursive.c:1410
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr ""
 "Fehler: Verweigere unversionierte Datei bei %s zu verlieren;\n"
 "schreibe stattdessen nach %s."
 
-#: merge-recursive.c:1459
+#: merge-recursive.c:1482
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -3842,7 +3867,7 @@
 "KONFLIKT (%s/löschen): %s gelöscht in %s und %s in %s. Stand %s von %s wurde "
 "im Arbeitsbereich gelassen."
 
-#: merge-recursive.c:1464
+#: merge-recursive.c:1487
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -3851,7 +3876,7 @@
 "KONFLIKT (%s/löschen): %s gelöscht in %s und %s nach %s in %s. Stand %s von "
 "%s wurde im Arbeitsbereich gelassen."
 
-#: merge-recursive.c:1471
+#: merge-recursive.c:1494
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -3860,7 +3885,7 @@
 "KONFLIKT (%s/löschen): %s gelöscht in %s und %s in %s. Stand %s von %s wurde "
 "im Arbeitsbereich bei %s gelassen."
 
-#: merge-recursive.c:1476
+#: merge-recursive.c:1499
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -3869,46 +3894,46 @@
 "KONFLIKT (%s/löschen): %s gelöscht in %s und %s nach %s in %s. Stand %s von "
 "%s wurde im Arbeitsbereich bei %s gelassen."
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1534
 msgid "rename"
 msgstr "umbenennen"
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1534
 msgid "renamed"
 msgstr "umbenannt"
 
-#: merge-recursive.c:1591 merge-recursive.c:2450 merge-recursive.c:3094
+#: merge-recursive.c:1614 merge-recursive.c:2472 merge-recursive.c:3117
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "Verweigere geänderte Datei bei %s zu verlieren."
 
-#: merge-recursive.c:1601
+#: merge-recursive.c:1624
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr ""
 "Verweigere unversionierte Datei bei %s zu verlieren, auch wenn diese im Weg "
 "ist."
 
-#: merge-recursive.c:1659
+#: merge-recursive.c:1682
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 "KONFLIKT (umbenennen/hinzufügen): Benenne um %s->%s in %s. %s hinzugefügt in "
 "%s"
 
-#: merge-recursive.c:1690
+#: merge-recursive.c:1713
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s ist ein Verzeichnis in %s, füge es stattdessen als %s hinzu"
 
-#: merge-recursive.c:1695
+#: merge-recursive.c:1718
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr ""
 "Verweigere unversionierte Datei bei %s zu verlieren; füge stattdessen %s "
 "hinzu"
 
-#: merge-recursive.c:1714
+#: merge-recursive.c:1737
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -3917,18 +3942,18 @@
 "KONFLIKT (umbenennen/umbenennen): Benenne um \"%s\"->\"%s\" in Branch \"%s\" "
 "und \"%s\"->\"%s\" in Branch \"%s\"%s"
 
-#: merge-recursive.c:1719
+#: merge-recursive.c:1742
 msgid " (left unresolved)"
 msgstr " (bleibt unaufgelöst)"
 
-#: merge-recursive.c:1828
+#: merge-recursive.c:1851
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "KONFLIKT (umbenennen/umbenennen): Benenne um %s->%s in %s. Benenne um %s->%s "
 "in %s"
 
-#: merge-recursive.c:2035
+#: merge-recursive.c:2056
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -3941,7 +3966,7 @@
 "wobei\n"
 "keines dieser Ziele die Mehrheit der Dateien erhielt."
 
-#: merge-recursive.c:2067
+#: merge-recursive.c:2088
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -3952,7 +3977,7 @@
 "Weg von impliziter Verzeichnisumbenennung, die versucht, einen oder mehrere\n"
 "Pfade dahin zu setzen: %s."
 
-#: merge-recursive.c:2077
+#: merge-recursive.c:2098
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -3963,7 +3988,7 @@
 "%s mappen; implizite Verzeichnisumbenennungen versuchten diese Pfade dahin\n"
 "zu setzen: %s"
 
-#: merge-recursive.c:2169
+#: merge-recursive.c:2190
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -3972,7 +3997,7 @@
 "KONFLIKT (umbenennen/umbenennen): Benenne Verzeichnis um %s->%s in %s.\n"
 "Benenne Verzeichnis um %s->%s in %s"
 
-#: merge-recursive.c:2413
+#: merge-recursive.c:2435
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
@@ -3981,52 +4006,52 @@
 "WARNUNG: Vermeide Umbenennung %s -> %s von %s, weil %s selbst umbenannt "
 "wurde."
 
-#: merge-recursive.c:2938
+#: merge-recursive.c:2961
 #, c-format
 msgid "cannot read object %s"
 msgstr "kann Objekt %s nicht lesen"
 
-#: merge-recursive.c:2941
+#: merge-recursive.c:2964
 #, c-format
 msgid "object %s is not a blob"
 msgstr "Objekt %s ist kein Blob"
 
-#: merge-recursive.c:3005
+#: merge-recursive.c:3028
 msgid "modify"
 msgstr "ändern"
 
-#: merge-recursive.c:3005
+#: merge-recursive.c:3028
 msgid "modified"
 msgstr "geändert"
 
-#: merge-recursive.c:3017
+#: merge-recursive.c:3040
 msgid "content"
 msgstr "Inhalt"
 
-#: merge-recursive.c:3021
+#: merge-recursive.c:3044
 msgid "add/add"
 msgstr "hinzufügen/hinzufügen"
 
-#: merge-recursive.c:3044
+#: merge-recursive.c:3067
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "%s ausgelassen (Ergebnis des Merges existiert bereits)"
 
-#: merge-recursive.c:3066 git-submodule.sh:937
+#: merge-recursive.c:3089 git-submodule.sh:937
 msgid "submodule"
 msgstr "Submodul"
 
-#: merge-recursive.c:3067
+#: merge-recursive.c:3090
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "KONFLIKT (%s): Merge-Konflikt in %s"
 
-#: merge-recursive.c:3097
+#: merge-recursive.c:3120
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Füge stattdessen als %s hinzu"
 
-#: merge-recursive.c:3179
+#: merge-recursive.c:3203
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
@@ -4035,7 +4060,7 @@
 "Pfad aktualisiert: %s hinzugefügt in %s innerhalb eines Verzeichnisses, das "
 "umbenannt wurde in %s; Verschiebe es nach %s."
 
-#: merge-recursive.c:3182
+#: merge-recursive.c:3206
 #, c-format
 msgid ""
 "CONFLICT (file location): %s added in %s inside a directory that was renamed "
@@ -4044,7 +4069,7 @@
 "KONFLIKT (Speicherort): %s hinzugefügt in %s innerhalb eines Verzeichnisses, "
 "das umbenannt wurde in %s, es sollte vielleicht nach %s verschoben werden."
 
-#: merge-recursive.c:3186
+#: merge-recursive.c:3210
 #, c-format
 msgid ""
 "Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
@@ -4053,7 +4078,7 @@
 "Pfad aktualisiert: %s umbenannt nach %s in %s, innerhalb eines "
 "Verzeichnisses, das umbenannt wurde in %s; Verschiebe es nach %s."
 
-#: merge-recursive.c:3189
+#: merge-recursive.c:3213
 #, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
@@ -4063,37 +4088,61 @@
 "Verzeichnisses, das umbenannt wurde in %s, es sollte vielleicht nach %s "
 "verschoben werden."
 
-#: merge-recursive.c:3303
+#: merge-recursive.c:3327
 #, c-format
 msgid "Removing %s"
 msgstr "Entferne %s"
 
-#: merge-recursive.c:3326
+#: merge-recursive.c:3350
 msgid "file/directory"
 msgstr "Datei/Verzeichnis"
 
-#: merge-recursive.c:3331
+#: merge-recursive.c:3355
 msgid "directory/file"
 msgstr "Verzeichnis/Datei"
 
-#: merge-recursive.c:3338
+#: merge-recursive.c:3362
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
 "KONFLIKT (%s): Es existiert bereits ein Verzeichnis %s in %s. Füge %s als %s "
 "hinzu."
 
-#: merge-recursive.c:3347
+#: merge-recursive.c:3371
 #, c-format
 msgid "Adding %s"
 msgstr "Füge %s hinzu"
 
-#: merge-recursive.c:3356
+#: merge-recursive.c:3380
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "KONFLIKT (hinzufügen/hinzufügen): Merge-Konflikt in %s"
 
-#: merge-recursive.c:3394
+#: merge-recursive.c:3424
+msgid "Already up to date!"
+msgstr "Bereits aktuell!"
+
+#: merge-recursive.c:3433
+#, c-format
+msgid "merging of trees %s and %s failed"
+msgstr "Zusammenführen der \"Tree\"-Objekte %s und %s fehlgeschlagen"
+
+#: merge-recursive.c:3537
+msgid "Merging:"
+msgstr "Merge:"
+
+#: merge-recursive.c:3550
+#, c-format
+msgid "found %u common ancestor:"
+msgid_plural "found %u common ancestors:"
+msgstr[0] "%u gemeinsamen Vorgänger-Commit gefunden"
+msgstr[1] "%u gemeinsame Vorgänger-Commits gefunden"
+
+#: merge-recursive.c:3600
+msgid "merge returned no commit"
+msgstr "Merge hat keinen Commit zurückgegeben"
+
+#: merge-recursive.c:3659
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -4103,133 +4152,109 @@
 "überschrieben werden:\n"
 "  %s"
 
-#: merge-recursive.c:3405
-msgid "Already up to date!"
-msgstr "Bereits aktuell!"
-
-#: merge-recursive.c:3414
-#, c-format
-msgid "merging of trees %s and %s failed"
-msgstr "Zusammenführen der \"Tree\"-Objekte %s und %s fehlgeschlagen"
-
-#: merge-recursive.c:3513
-msgid "Merging:"
-msgstr "Merge:"
-
-#: merge-recursive.c:3526
-#, c-format
-msgid "found %u common ancestor:"
-msgid_plural "found %u common ancestors:"
-msgstr[0] "%u gemeinsamen Vorgänger-Commit gefunden"
-msgstr[1] "%u gemeinsame Vorgänger-Commits gefunden"
-
-#: merge-recursive.c:3565
-msgid "merge returned no commit"
-msgstr "Merge hat keinen Commit zurückgegeben"
-
-#: merge-recursive.c:3631
+#: merge-recursive.c:3756
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "Konnte Objekt '%s' nicht parsen."
 
-#: merge-recursive.c:3647 builtin/merge.c:698 builtin/merge.c:869
+#: merge-recursive.c:3774 builtin/merge.c:694 builtin/merge.c:874
 msgid "Unable to write index."
 msgstr "Konnte Index nicht schreiben."
 
-#: midx.c:69
+#: midx.c:68
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "multi-pack-index-Datei %s ist zu klein."
 
-#: midx.c:85
+#: midx.c:84
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr ""
 "multi-pack-index-Signatur 0x%08x stimmt nicht mit Signatur 0x%08x überein."
 
-#: midx.c:90
+#: midx.c:89
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "multi-pack-index-Version %d nicht erkannt."
 
-#: midx.c:95
+#: midx.c:94
 #, c-format
 msgid "hash version %u does not match"
 msgstr "Hash-Version %u stimmt nicht überein."
 
-#: midx.c:109
+#: midx.c:108
 msgid "invalid chunk offset (too large)"
 msgstr "Ungültiger Chunk-Offset (zu groß)"
 
-#: midx.c:133
+#: midx.c:132
 msgid "terminating multi-pack-index chunk id appears earlier than expected"
 msgstr "Abschließende multi-pack-index Chunk-Id erscheint eher als erwartet."
 
-#: midx.c:146
+#: midx.c:145
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "multi-pack-index fehlt erforderlicher pack-name Chunk."
 
-#: midx.c:148
+#: midx.c:147
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "multi-pack-index fehlt erforderlicher OID fanout Chunk."
 
-#: midx.c:150
+#: midx.c:149
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "multi-pack-index fehlt erforderlicher OID lookup Chunk."
 
-#: midx.c:152
+#: midx.c:151
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "multi-pack-index fehlt erforderlicher object offset Chunk."
 
-#: midx.c:166
+#: midx.c:165
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr "Falsche Reihenfolge bei multi-pack-index Pack-Namen: '%s' vor '%s'"
 
-#: midx.c:211
+#: midx.c:210
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "Ungültige pack-int-id: %u (%u Pakete insgesamt)"
 
-#: midx.c:261
+#: midx.c:260
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr ""
 "multi-pack-index speichert einen 64-Bit Offset, aber off_t ist zu klein."
 
-#: midx.c:289
+#: midx.c:288
 msgid "error preparing packfile from multi-pack-index"
 msgstr "Fehler bei Vorbereitung der Packdatei aus multi-pack-index."
 
-#: midx.c:470
+#: midx.c:469
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "Fehler beim Hinzufügen von Packdatei '%s'."
 
-#: midx.c:476
+#: midx.c:475
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "Fehler beim Öffnen von pack-index '%s'"
 
-#: midx.c:536
+#: midx.c:535
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "Fehler beim Lokalisieren von Objekt %d in Packdatei."
 
-#: midx.c:865
+#: midx.c:864
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "Pack-Datei %s zum Weglassen nicht gefunden"
 
-#: midx.c:1036
+#: midx.c:1035
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "Fehler beim Löschen des multi-pack-index bei %s"
 
-#: midx.c:1091
+#: midx.c:1090
 msgid "Looking for referenced packfiles"
 msgstr "Suche nach referenzierten Pack-Dateien"
 
-#: midx.c:1106
+#: midx.c:1105
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
@@ -4237,57 +4262,57 @@
 "Ungültige oid fanout Reihenfolge: fanout[%d] = %<PRIx32> > %<PRIx32> = "
 "fanout[%d]"
 
-#: midx.c:1110
+#: midx.c:1109
 msgid "Verifying OID order in MIDX"
 msgstr "Verifiziere OID-Reihenfolge in MIDX"
 
-#: midx.c:1119
+#: midx.c:1118
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "Ungültige oid lookup Reihenfolge: oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1138
+#: midx.c:1137
 msgid "Sorting objects by packfile"
 msgstr "Sortiere Objekte nach Pack-Datei"
 
-#: midx.c:1144
+#: midx.c:1143
 msgid "Verifying object offsets"
 msgstr "Überprüfe Objekt-Offsets"
 
-#: midx.c:1160
+#: midx.c:1159
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "Fehler beim Laden des Pack-Eintrags für oid[%d] = %s"
 
-#: midx.c:1166
+#: midx.c:1165
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "Fehler beim Laden des Pack-Index für Packdatei %s"
 
-#: midx.c:1175
+#: midx.c:1174
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "Falscher Objekt-Offset für oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 
-#: midx.c:1350
+#: midx.c:1349
 msgid "could not start pack-objects"
 msgstr "Konnte 'pack-objects' nicht ausführen"
 
-#: midx.c:1369
+#: midx.c:1368
 msgid "could not finish pack-objects"
 msgstr "Konnte 'pack-objects' nicht beenden"
 
-#: name-hash.c:532
+#: name-hash.c:537
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
 msgstr "Kann lazy_dir Thread nicht erzeugen: %s"
 
-#: name-hash.c:554
+#: name-hash.c:559
 #, c-format
 msgid "unable to create lazy_name thread: %s"
 msgstr "Kann lazy_name Thread nicht erzeugen: %s"
 
-#: name-hash.c:560
+#: name-hash.c:565
 #, c-format
 msgid "unable to join lazy_name thread: %s"
 msgstr "Kann lazy_name Thread nicht beitreten: %s"
@@ -4337,41 +4362,41 @@
 msgid "Bad %s value: '%s'"
 msgstr "Ungültiger %s Wert: '%s'"
 
-#: object.c:54
+#: object.c:53
 #, c-format
 msgid "invalid object type \"%s\""
 msgstr "Ungültiger Objekttyp \"%s\""
 
-#: object.c:174
+#: object.c:173
 #, c-format
 msgid "object %s is a %s, not a %s"
 msgstr "Objekt %s ist ein %s, kein %s"
 
-#: object.c:234
+#: object.c:233
 #, c-format
 msgid "object %s has unknown type id %d"
 msgstr "Objekt %s hat eine unbekannte Typ-Identifikation %d"
 
-#: object.c:247
+#: object.c:246
 #, c-format
 msgid "unable to parse object: %s"
 msgstr "Konnte Objekt '%s' nicht parsen."
 
-#: object.c:267 object.c:278
+#: object.c:266 object.c:277
 #, c-format
 msgid "hash mismatch %s"
 msgstr "Hash stimmt nicht mit %s überein."
 
-#: packfile.c:648
+#: packfile.c:641
 msgid "offset before end of packfile (broken .idx?)"
 msgstr "Offset vor Ende der Packdatei (fehlerhafte Indexdatei?)"
 
-#: packfile.c:1899
+#: packfile.c:1887
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr "Offset vor Beginn des Pack-Index für %s (beschädigter Index?)"
 
-#: packfile.c:1903
+#: packfile.c:1891
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr "Offset hinter Ende des Pack-Index für %s (abgeschnittener Index?)"
@@ -4418,26 +4443,26 @@
 msgid "did you mean `--%s` (with two dashes ?)"
 msgstr "Meinten Sie `--%s` (mit zwei Strichen?)"
 
-#: parse-options.c:859
+#: parse-options.c:860
 #, c-format
 msgid "unknown option `%s'"
 msgstr "Unbekannte Option: `%s'"
 
-#: parse-options.c:861
+#: parse-options.c:862
 #, c-format
 msgid "unknown switch `%c'"
 msgstr "Unbekannter Schalter `%c'"
 
-#: parse-options.c:863
+#: parse-options.c:864
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr "Unbekannte nicht-Ascii Option in String: `%s'"
 
-#: parse-options.c:887
+#: parse-options.c:888
 msgid "..."
 msgstr "..."
 
-#: parse-options.c:906
+#: parse-options.c:907
 #, c-format
 msgid "usage: %s"
 msgstr "Verwendung: %s"
@@ -4445,21 +4470,21 @@
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
 #.
-#: parse-options.c:912
+#: parse-options.c:913
 #, c-format
 msgid "   or: %s"
 msgstr "      oder: %s"
 
-#: parse-options.c:915
+#: parse-options.c:916
 #, c-format
 msgid "    %s"
 msgstr "    %s"
 
-#: parse-options.c:954
+#: parse-options.c:955
 msgid "-NUM"
 msgstr "-NUM"
 
-#: parse-options.c:968
+#: parse-options.c:969
 #, c-format
 msgid "alias of --%s"
 msgstr "Alias für --%s"
@@ -4630,29 +4655,38 @@
 msgid "unable to parse --pretty format"
 msgstr "Konnte --pretty Format nicht parsen."
 
-#: range-diff.c:70
+#: promisor-remote.c:25
+msgid "Remote with no URL"
+msgstr "Remote-Repository ohne URL"
+
+#: promisor-remote.c:61
+#, c-format
+msgid "promisor remote name cannot begin with '/': %s"
+msgstr "Promisor-Remote-Name kann nicht mit '/' beginnen: %s"
+
+#: range-diff.c:71
 msgid "could not start `log`"
 msgstr "Konnte `log` nicht starten."
 
-#: range-diff.c:72
+#: range-diff.c:73
 msgid "could not read `log` output"
 msgstr "Konnte Ausgabe von `log` nicht lesen."
 
-#: range-diff.c:91 sequencer.c:5021
+#: range-diff.c:92 sequencer.c:4985
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "Konnte Commit '%s' nicht parsen."
 
-#: range-diff.c:117
+#: range-diff.c:118
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "Konnte Git-Header '%.*s' nicht parsen."
 
-#: range-diff.c:274
+#: range-diff.c:275
 msgid "failed to generate diff"
 msgstr "Fehler beim Generieren des Diffs."
 
-#: range-diff.c:506 range-diff.c:508
+#: range-diff.c:507 range-diff.c:509
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "Konnte Log für '%s' nicht parsen."
@@ -4699,11 +4733,11 @@
 msgid "'%s' appears as both a file and as a directory"
 msgstr "'%s' scheint eine Datei und ein Verzeichnis zu sein."
 
-#: read-cache.c:1499
+#: read-cache.c:1520
 msgid "Refresh index"
 msgstr "Aktualisiere Index"
 
-#: read-cache.c:1613
+#: read-cache.c:1635
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -4712,7 +4746,7 @@
 "index.version gesetzt, aber Wert ungültig.\n"
 "Verwende Version %i"
 
-#: read-cache.c:1623
+#: read-cache.c:1645
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -4721,138 +4755,138 @@
 "GIT_INDEX_VERSION gesetzt, aber Wert ungültig.\n"
 "Verwende Version %i"
 
-#: read-cache.c:1679
+#: read-cache.c:1701
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "Ungültige Signatur 0x%08x"
 
-#: read-cache.c:1682
+#: read-cache.c:1704
 #, c-format
 msgid "bad index version %d"
 msgstr "Ungültige Index-Version %d"
 
-#: read-cache.c:1691
+#: read-cache.c:1713
 msgid "bad index file sha1 signature"
 msgstr "Ungültige SHA1-Signatur der Index-Datei."
 
-#: read-cache.c:1721
+#: read-cache.c:1743
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "Index verwendet Erweiterung %.4s, welche wir nicht unterstützen."
 
-#: read-cache.c:1723
+#: read-cache.c:1745
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "Ignoriere Erweiterung %.4s"
 
-#: read-cache.c:1760
+#: read-cache.c:1782
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "Unbekanntes Format für Index-Eintrag 0x%08x"
 
-#: read-cache.c:1776
+#: read-cache.c:1798
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "Ungültiges Namensfeld im Index, in der Nähe von Pfad '%s'."
 
-#: read-cache.c:1833
+#: read-cache.c:1855
 msgid "unordered stage entries in index"
 msgstr "Ungeordnete Stage-Einträge im Index."
 
-#: read-cache.c:1836
+#: read-cache.c:1858
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "Mehrere Stage-Einträge für zusammengeführte Datei '%s'."
 
-#: read-cache.c:1839
+#: read-cache.c:1861
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "Ungeordnete Stage-Einträge für '%s'."
 
-#: read-cache.c:1946 read-cache.c:2234 rerere.c:565 rerere.c:599 rerere.c:1111
-#: builtin/add.c:460 builtin/check-ignore.c:178 builtin/checkout.c:467
-#: builtin/checkout.c:651 builtin/clean.c:956 builtin/commit.c:347
+#: read-cache.c:1967 read-cache.c:2255 rerere.c:565 rerere.c:599 rerere.c:1111
+#: builtin/add.c:460 builtin/check-ignore.c:178 builtin/checkout.c:468
+#: builtin/checkout.c:652 builtin/clean.c:967 builtin/commit.c:347
 #: builtin/diff-tree.c:120 builtin/grep.c:499 builtin/mv.c:145
 #: builtin/reset.c:245 builtin/rm.c:271 builtin/submodule--helper.c:330
 msgid "index file corrupt"
 msgstr "Index-Datei beschädigt"
 
-#: read-cache.c:2087
+#: read-cache.c:2108
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "Kann Thread für load_cache_entries nicht erzeugen: %s"
 
-#: read-cache.c:2100
+#: read-cache.c:2121
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "Kann Thread für load_cache_entries nicht erzeugen: %s"
 
-#: read-cache.c:2133
+#: read-cache.c:2154
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s: Öffnen der Index-Datei fehlgeschlagen."
 
-#: read-cache.c:2137
+#: read-cache.c:2158
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s: Kann geöffneten Index nicht lesen."
 
-#: read-cache.c:2141
+#: read-cache.c:2162
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s: Index-Datei ist kleiner als erwartet."
 
-#: read-cache.c:2145
+#: read-cache.c:2166
 #, c-format
 msgid "%s: unable to map index file"
 msgstr "%s: Konnte Index-Datei nicht einlesen."
 
-#: read-cache.c:2187
+#: read-cache.c:2208
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "Kann Thread für load_index_extensions nicht erzeugen: %s"
 
-#: read-cache.c:2214
+#: read-cache.c:2235
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "Kann Thread für load_index_extensions nicht beitreten: %s"
 
-#: read-cache.c:2246
+#: read-cache.c:2267
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "Konnte geteilten Index '%s' nicht aktualisieren."
 
-#: read-cache.c:2293
+#: read-cache.c:2314
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "Fehlerhafter Index. Erwartete %s in %s, erhielt %s."
 
-#: read-cache.c:2989 wrapper.c:658 builtin/merge.c:1114
+#: read-cache.c:3010 wrapper.c:622 builtin/merge.c:1119
 #, c-format
 msgid "could not close '%s'"
 msgstr "Konnte '%s' nicht schließen."
 
-#: read-cache.c:3092 sequencer.c:2358 sequencer.c:3928
+#: read-cache.c:3113 sequencer.c:2296 sequencer.c:3917
 #, c-format
 msgid "could not stat '%s'"
 msgstr "Konnte '%s' nicht lesen."
 
-#: read-cache.c:3105
+#: read-cache.c:3126
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "konnte Git-Verzeichnis nicht öffnen: %s"
 
-#: read-cache.c:3117
+#: read-cache.c:3138
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "Konnte '%s' nicht entfernen."
 
-#: read-cache.c:3142
+#: read-cache.c:3163
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "Konnte Zugriffsberechtigung auf '%s' nicht setzen."
 
-#: read-cache.c:3291
+#: read-cache.c:3312
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s: Kann nicht auf Stufe #0 wechseln."
@@ -4962,8 +4996,8 @@
 msgid "Note that empty commits are commented out"
 msgstr "Leere Commits sind auskommentiert."
 
-#: rebase-interactive.c:105 rerere.c:485 rerere.c:692 sequencer.c:3447
-#: sequencer.c:3473 sequencer.c:5120 builtin/fsck.c:356 builtin/rebase.c:235
+#: rebase-interactive.c:105 rerere.c:485 rerere.c:692 sequencer.c:3388
+#: sequencer.c:3414 sequencer.c:5084 builtin/fsck.c:356 builtin/rebase.c:235
 #, c-format
 msgid "could not write '%s'"
 msgstr "Konnte '%s' nicht schreiben."
@@ -5009,7 +5043,7 @@
 msgid "ignoring dangling symref %s"
 msgstr "Ignoriere unreferenzierte symbolische Referenz %s"
 
-#: refs.c:669 ref-filter.c:2092
+#: refs.c:669 ref-filter.c:2098
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "Ignoriere fehlerhafte Referenz %s"
@@ -5034,14 +5068,14 @@
 msgid "unexpected object ID when writing '%s'"
 msgstr "Unerwartete Objekt-ID beim Schreiben von '%s'."
 
-#: refs.c:833 sequencer.c:403 sequencer.c:2709 sequencer.c:2913
-#: sequencer.c:2927 sequencer.c:3184 sequencer.c:5037 wrapper.c:656
+#: refs.c:833 sequencer.c:403 sequencer.c:2647 sequencer.c:2851
+#: sequencer.c:2865 sequencer.c:3122 sequencer.c:5001 wrapper.c:620
 #, c-format
 msgid "could not write to '%s'"
 msgstr "Konnte nicht nach '%s' schreiben."
 
-#: refs.c:860 wrapper.c:225 wrapper.c:395 builtin/am.c:715
-#: builtin/rebase.c:1003
+#: refs.c:860 wrapper.c:188 wrapper.c:358 builtin/am.c:714
+#: builtin/rebase.c:1004
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "Konnte '%s' nicht zum Schreiben öffnen."
@@ -5076,23 +5110,23 @@
 msgid "update_ref failed for ref '%s': %s"
 msgstr "update_ref für Referenz '%s' fehlgeschlagen: %s"
 
-#: refs.c:2012
+#: refs.c:2023
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "Mehrere Aktualisierungen für Referenz '%s' nicht erlaubt."
 
-#: refs.c:2044
+#: refs.c:2055
 msgid "ref updates forbidden inside quarantine environment"
 msgstr ""
 "Aktualisierungen von Referenzen ist innerhalb der Quarantäne-Umgebung "
 "verboten."
 
-#: refs.c:2140 refs.c:2170
+#: refs.c:2151 refs.c:2181
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "'%s' existiert; kann '%s' nicht erstellen"
 
-#: refs.c:2146 refs.c:2181
+#: refs.c:2157 refs.c:2192
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "Kann '%s' und '%s' nicht zur selben Zeit verarbeiten."
@@ -5102,13 +5136,13 @@
 msgid "could not remove reference %s"
 msgstr "Konnte Referenz %s nicht löschen"
 
-#: refs/files-backend.c:1248 refs/packed-backend.c:1532
-#: refs/packed-backend.c:1542
+#: refs/files-backend.c:1248 refs/packed-backend.c:1541
+#: refs/packed-backend.c:1551
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr "Konnte Referenz %s nicht entfernen: %s"
 
-#: refs/files-backend.c:1251 refs/packed-backend.c:1545
+#: refs/files-backend.c:1251 refs/packed-backend.c:1554
 #, c-format
 msgid "could not delete references: %s"
 msgstr "Konnte Referenzen nicht entfernen: %s"
@@ -5118,7 +5152,7 @@
 msgid "invalid refspec '%s'"
 msgstr "Ungültige Refspec '%s'"
 
-#: ref-filter.c:42 wt-status.c:1934
+#: ref-filter.c:42 wt-status.c:1938
 msgid "gone"
 msgstr "entfernt"
 
@@ -5137,283 +5171,283 @@
 msgid "ahead %d, behind %d"
 msgstr "%d voraus, %d hinterher"
 
-#: ref-filter.c:162
+#: ref-filter.c:165
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr "Erwartetes Format: %%(color:<Farbe>)"
 
-#: ref-filter.c:164
+#: ref-filter.c:167
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr "nicht erkannte Farbe: %%(color:%s)"
 
-#: ref-filter.c:186
+#: ref-filter.c:189
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr "Positiver Wert erwartet refname:lstrip=%s"
 
-#: ref-filter.c:190
+#: ref-filter.c:193
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr "Positiver Wert erwartet refname:rstrip=%s"
 
-#: ref-filter.c:192
+#: ref-filter.c:195
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr "nicht erkanntes %%(%s) Argument: %s"
 
-#: ref-filter.c:247
+#: ref-filter.c:250
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr "%%(objecttype) akzeptiert keine Argumente"
 
-#: ref-filter.c:269
+#: ref-filter.c:272
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr "nicht erkanntes %%(objectsize) Argument: %s"
 
-#: ref-filter.c:277
+#: ref-filter.c:280
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr "%%(deltabase) akzeptiert keine Argumente"
 
-#: ref-filter.c:289
+#: ref-filter.c:292
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr "%%(body) akzeptiert keine Argumente"
 
-#: ref-filter.c:298
+#: ref-filter.c:301
 #, c-format
 msgid "%%(subject) does not take arguments"
 msgstr "%%(subject) akzeptiert keine Argumente"
 
-#: ref-filter.c:320
+#: ref-filter.c:323
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr "unbekanntes %%(trailers) Argument: %s"
 
-#: ref-filter.c:349
+#: ref-filter.c:352
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr "Positiver Wert erwartet contents:lines=%s"
 
-#: ref-filter.c:351
+#: ref-filter.c:354
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr "nicht erkanntes %%(contents) Argument: %s"
 
-#: ref-filter.c:366
+#: ref-filter.c:369
 #, c-format
 msgid "positive value expected objectname:short=%s"
 msgstr "Positiver Wert erwartet objectname:short=%s"
 
-#: ref-filter.c:370
+#: ref-filter.c:373
 #, c-format
 msgid "unrecognized %%(objectname) argument: %s"
 msgstr "nicht erkanntes %%(objectname) Argument: %s"
 
-#: ref-filter.c:400
+#: ref-filter.c:403
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr "Erwartetes Format: %%(align:<Breite>,<Position>)"
 
-#: ref-filter.c:412
+#: ref-filter.c:415
 #, c-format
 msgid "unrecognized position:%s"
 msgstr "nicht erkannte Position:%s"
 
-#: ref-filter.c:419
+#: ref-filter.c:422
 #, c-format
 msgid "unrecognized width:%s"
 msgstr "nicht erkannte Breite:%s"
 
-#: ref-filter.c:428
+#: ref-filter.c:431
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr "nicht erkanntes %%(align) Argument: %s"
 
-#: ref-filter.c:436
+#: ref-filter.c:439
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr "Positive Breitenangabe für %%(align) erwartet"
 
-#: ref-filter.c:454
+#: ref-filter.c:457
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr "nicht erkanntes %%(if) Argument: %s"
 
-#: ref-filter.c:556
+#: ref-filter.c:559
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "Fehlerhafter Feldname: %.*s"
 
-#: ref-filter.c:583
+#: ref-filter.c:586
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "Unbekannter Feldname: %.*s"
 
-#: ref-filter.c:587
+#: ref-filter.c:590
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
 msgstr ""
 "Kein Git-Repository, aber das Feld '%.*s' erfordert Zugriff auf Objektdaten."
 
-#: ref-filter.c:711
+#: ref-filter.c:714
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr "format: %%(if) Atom ohne ein %%(then) Atom verwendet"
 
-#: ref-filter.c:774
+#: ref-filter.c:777
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr "format: %%(then) Atom ohne ein %%(if) Atom verwendet"
 
-#: ref-filter.c:776
+#: ref-filter.c:779
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr "format: %%(then) Atom mehr als einmal verwendet"
 
-#: ref-filter.c:778
+#: ref-filter.c:781
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "format: %%(then) Atom nach %%(else) verwendet"
 
-#: ref-filter.c:806
+#: ref-filter.c:809
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr "format: %%(else) Atom ohne ein %%(if) Atom verwendet"
 
-#: ref-filter.c:808
+#: ref-filter.c:811
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr "Format: %%(else) Atom ohne ein %%(then) Atom verwendet"
 
-#: ref-filter.c:810
+#: ref-filter.c:813
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr "Format: %%(end) Atom mehr als einmal verwendet"
 
-#: ref-filter.c:825
+#: ref-filter.c:828
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr "Format: %%(end) Atom ohne zugehöriges Atom verwendet"
 
-#: ref-filter.c:882
+#: ref-filter.c:885
 #, c-format
 msgid "malformed format string %s"
 msgstr "Fehlerhafter Formatierungsstring %s"
 
-#: ref-filter.c:1485
+#: ref-filter.c:1488
 #, c-format
 msgid "no branch, rebasing %s"
 msgstr "kein Branch, Rebase von %s"
 
-#: ref-filter.c:1488
+#: ref-filter.c:1491
 #, c-format
 msgid "no branch, rebasing detached HEAD %s"
 msgstr "kein Branch, Rebase von losgelöstem HEAD %s"
 
-#: ref-filter.c:1491
+#: ref-filter.c:1494
 #, c-format
 msgid "no branch, bisect started on %s"
 msgstr "kein Branch, binäre Suche begonnen bei %s"
 
-#: ref-filter.c:1501
+#: ref-filter.c:1504
 msgid "no branch"
 msgstr "kein Branch"
 
-#: ref-filter.c:1537 ref-filter.c:1743
+#: ref-filter.c:1540 ref-filter.c:1749
 #, c-format
 msgid "missing object %s for %s"
 msgstr "Objekt %s fehlt für %s"
 
-#: ref-filter.c:1547
+#: ref-filter.c:1550
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "parse_object_buffer bei %s für %s fehlgeschlagen"
 
-#: ref-filter.c:1998
+#: ref-filter.c:2004
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "fehlerhaftes Objekt bei '%s'"
 
-#: ref-filter.c:2087
+#: ref-filter.c:2093
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "Ignoriere Referenz mit fehlerhaftem Namen %s"
 
-#: ref-filter.c:2382
+#: ref-filter.c:2389
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "Format: %%(end) Atom fehlt"
 
-#: ref-filter.c:2482
+#: ref-filter.c:2489
 #, c-format
 msgid "option `%s' is incompatible with --merged"
 msgstr "Die Option `%s' ist inkompatibel mit --merged."
 
-#: ref-filter.c:2485
+#: ref-filter.c:2492
 #, c-format
 msgid "option `%s' is incompatible with --no-merged"
 msgstr "Die Option `%s' ist inkompatibel mit --no-merged."
 
-#: ref-filter.c:2495
+#: ref-filter.c:2502
 #, c-format
 msgid "malformed object name %s"
 msgstr "Missgebildeter Objektname %s"
 
-#: ref-filter.c:2500
+#: ref-filter.c:2507
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "Die Option `%s' muss auf einen Commit zeigen."
 
-#: remote.c:363
+#: remote.c:366
 #, c-format
 msgid "config remote shorthand cannot begin with '/': %s"
 msgstr ""
 "Kürzel für Remote-Repository in der Konfiguration kann nicht mit '/' "
 "beginnen: %s"
 
-#: remote.c:410
+#: remote.c:413
 msgid "more than one receivepack given, using the first"
 msgstr "Mehr als ein receivepack-Befehl angegeben, benutze den ersten."
 
-#: remote.c:418
+#: remote.c:421
 msgid "more than one uploadpack given, using the first"
 msgstr "Mehr als ein uploadpack-Befehl angegeben, benutze den ersten."
 
-#: remote.c:608
+#: remote.c:611
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
 msgstr "Kann 'fetch' nicht für sowohl %s als auch %s nach %s ausführen."
 
-#: remote.c:612
+#: remote.c:615
 #, c-format
 msgid "%s usually tracks %s, not %s"
 msgstr "%s folgt üblicherweise %s, nicht %s"
 
-#: remote.c:616
+#: remote.c:619
 #, c-format
 msgid "%s tracks both %s and %s"
 msgstr "%s folgt sowohl %s als auch %s"
 
-#: remote.c:684
+#: remote.c:687
 #, c-format
 msgid "key '%s' of pattern had no '*'"
 msgstr "Schlüssel '%s' des Musters hatte kein '*'."
 
-#: remote.c:694
+#: remote.c:697
 #, c-format
 msgid "value '%s' of pattern has no '*'"
 msgstr "Wert '%s' des Musters hat kein '*'."
 
-#: remote.c:1000
+#: remote.c:1003
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "Src-Refspec %s entspricht keiner Referenz."
 
-#: remote.c:1005
+#: remote.c:1008
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr "Src-Refspec %s entspricht mehr als einer Referenz."
@@ -5422,7 +5456,7 @@
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1020
+#: remote.c:1023
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -5449,7 +5483,7 @@
 "Keines hat funktioniert, sodass wir aufgegeben haben. Sie müssen die\n"
 "Referenz mit vollqualifizierten Namen angeben."
 
-#: remote.c:1040
+#: remote.c:1043
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -5460,7 +5494,7 @@
 "Meinten Sie, einen neuen Branch mittels Push nach\n"
 "'%s:refs/heads/%s' zu erstellen?"
 
-#: remote.c:1045
+#: remote.c:1048
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -5471,7 +5505,7 @@
 "Meinten Sie, einen neuen Tag mittels Push nach\n"
 "'%s:refs/tags/%s' zu erstellen?"
 
-#: remote.c:1050
+#: remote.c:1053
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -5482,7 +5516,7 @@
 "Meinten Sie, einen Tag für ein neues Tree-Objekt\n"
 "mittels Push nach '%s:refs/tags/'%s' zu erstellen?"
 
-#: remote.c:1055
+#: remote.c:1058
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -5493,117 +5527,117 @@
 "Meinten Sie, einen Tag für ein neues Blob-Objekt\n"
 "mittels Push nach '%s:refs/tags/%s' zu erstellen?"
 
-#: remote.c:1091
+#: remote.c:1094
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "%s kann nicht zu Branch aufgelöst werden."
 
-#: remote.c:1102
+#: remote.c:1105
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "Konnte '%s' nicht löschen: Remote-Referenz existiert nicht."
 
-#: remote.c:1114
+#: remote.c:1117
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr "Dst-Refspec %s entspricht mehr als einer Referenz."
 
-#: remote.c:1121
+#: remote.c:1124
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "Dst-Referenz %s empfängt von mehr als einer Quelle"
 
-#: remote.c:1624 remote.c:1725
+#: remote.c:1627 remote.c:1728
 msgid "HEAD does not point to a branch"
 msgstr "HEAD zeigt auf keinen Branch"
 
-#: remote.c:1633
+#: remote.c:1636
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "Kein solcher Branch: '%s'"
 
-#: remote.c:1636
+#: remote.c:1639
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "Kein Upstream-Branch für Branch '%s' konfiguriert."
 
-#: remote.c:1642
+#: remote.c:1645
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "Upstream-Branch '%s' nicht als Remote-Tracking-Branch gespeichert"
 
-#: remote.c:1657
+#: remote.c:1660
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr ""
 "Ziel für \"push\" '%s' auf Remote-Repository '%s' hat keinen lokal gefolgten "
 "Branch"
 
-#: remote.c:1669
+#: remote.c:1672
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "Branch '%s' hat keinen Upstream-Branch gesetzt"
 
-#: remote.c:1679
+#: remote.c:1682
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "Push-Refspecs für '%s' beinhalten nicht '%s'"
 
-#: remote.c:1692
+#: remote.c:1695
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "kein Ziel für \"push\" (push.default ist 'nothing')"
 
-#: remote.c:1714
+#: remote.c:1717
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "kann einzelnes Ziel für \"push\" im Modus 'simple' nicht auflösen"
 
-#: remote.c:1840
+#: remote.c:1843
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "Konnte Remote-Referenz %s nicht finden."
 
-#: remote.c:1853
+#: remote.c:1856
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* Ignoriere sonderbare Referenz '%s' lokal"
 
-#: remote.c:2016
+#: remote.c:2019
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr ""
 "Ihr Branch basiert auf '%s', aber der Upstream-Branch wurde entfernt.\n"
 
-#: remote.c:2020
+#: remote.c:2023
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (benutzen Sie \"git branch --unset-upstream\" zum Beheben)\n"
 
-#: remote.c:2023
+#: remote.c:2026
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Ihr Branch ist auf demselben Stand wie '%s'.\n"
 
-#: remote.c:2027
+#: remote.c:2030
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Ihr Branch und '%s' zeigen auf unterschiedliche Commits.\n"
 
-#: remote.c:2030
+#: remote.c:2033
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (benutzen Sie \"%s\" für Details)\n"
 
-#: remote.c:2034
+#: remote.c:2037
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "Ihr Branch ist %2$d Commit vor '%1$s'.\n"
 msgstr[1] "Ihr Branch ist %2$d Commits vor '%1$s'.\n"
 
-#: remote.c:2040
+#: remote.c:2043
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (benutzen Sie \"git push\", um lokale Commits zu publizieren)\n"
 
-#: remote.c:2043
+#: remote.c:2046
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -5613,12 +5647,12 @@
 msgstr[1] ""
 "Ihr Branch ist %2$d Commits hinter '%1$s', und kann vorgespult werden.\n"
 
-#: remote.c:2051
+#: remote.c:2054
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr ""
 "  (benutzen Sie \"git pull\", um Ihren lokalen Branch zu aktualisieren)\n"
 
-#: remote.c:2054
+#: remote.c:2057
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -5633,13 +5667,13 @@
 "Ihr Branch und '%s' sind divergiert,\n"
 "und haben jeweils %d und %d unterschiedliche Commits.\n"
 
-#: remote.c:2064
+#: remote.c:2067
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr ""
 "  (benutzen Sie \"git pull\", um Ihren Branch mit dem Remote-Branch "
 "zusammenzuführen)\n"
 
-#: remote.c:2247
+#: remote.c:2250
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "Kann erwarteten Objektnamen '%s' nicht parsen."
@@ -5717,7 +5751,7 @@
 msgid "Recorded preimage for '%s'"
 msgstr "Preimage für '%s' aufgezeichnet."
 
-#: rerere.c:881 submodule.c:2023 builtin/log.c:1773
+#: rerere.c:881 submodule.c:2023 builtin/log.c:1790
 #: builtin/submodule--helper.c:1418 builtin/submodule--helper.c:1428
 #, c-format
 msgid "could not create directory '%s'"
@@ -5752,20 +5786,20 @@
 msgid "unable to open rr-cache directory"
 msgstr "Konnte rr-cache Verzeichnis nicht öffnen."
 
-#: revision.c:2507
+#: revision.c:2509
 msgid "your current branch appears to be broken"
 msgstr "Ihr aktueller Branch scheint fehlerhaft zu sein."
 
-#: revision.c:2510
+#: revision.c:2512
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "Ihr aktueller Branch '%s' hat noch keine Commits."
 
-#: revision.c:2710
+#: revision.c:2720
 msgid "--first-parent is incompatible with --bisect"
 msgstr "Die Optionen --first-parent und --bisect sind inkompatibel."
 
-#: revision.c:2714
+#: revision.c:2724
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L unterstützt noch keine anderen Diff-Formate außer -p und -s"
 
@@ -5788,30 +5822,30 @@
 "Sie können diese Warnung mit `git config advice.ignoredHook false` "
 "deaktivieren."
 
-#: send-pack.c:141
+#: send-pack.c:142
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr "Unerwartetes Flush-Paket beim Lesen des Remote-Unpack-Status."
 
-#: send-pack.c:143
+#: send-pack.c:144
 #, c-format
 msgid "unable to parse remote unpack status: %s"
 msgstr "Konnte Status des Entpackens der Gegenseite nicht parsen: %s"
 
-#: send-pack.c:145
+#: send-pack.c:146
 #, c-format
 msgid "remote unpack failed: %s"
 msgstr "Entpacken auf der Gegenseite fehlgeschlagen: %s"
 
-#: send-pack.c:306
+#: send-pack.c:307
 msgid "failed to sign the push certificate"
 msgstr "Fehler beim Signieren des \"push\"-Zertifikates"
 
-#: send-pack.c:420
+#: send-pack.c:421
 msgid "the receiving end does not support --signed push"
 msgstr ""
 "die Gegenseite unterstützt keinen signierten Versand (\"--signed push\")"
 
-#: send-pack.c:422
+#: send-pack.c:423
 msgid ""
 "not sending a push certificate since the receiving end does not support --"
 "signed push"
@@ -5819,11 +5853,11 @@
 "kein Versand des \"push\"-Zertifikates, da die Gegenseite keinen signierten\n"
 "Versand (\"--signed push\") unterstützt"
 
-#: send-pack.c:434
+#: send-pack.c:435
 msgid "the receiving end does not support --atomic push"
 msgstr "die Gegenseite unterstützt keinen atomaren Versand (\"--atomic push\")"
 
-#: send-pack.c:439
+#: send-pack.c:440
 msgid "the receiving end does not support push options"
 msgstr "die Gegenseite unterstützt keine Push-Optionen"
 
@@ -5837,7 +5871,7 @@
 msgid "could not delete '%s'"
 msgstr "Konnte '%s' nicht löschen."
 
-#: sequencer.c:311 builtin/rebase.c:759 builtin/rebase.c:1645 builtin/rm.c:369
+#: sequencer.c:311 builtin/rebase.c:760 builtin/rebase.c:1676 builtin/rm.c:369
 #, c-format
 msgid "could not remove '%s'"
 msgstr "Konnte '%s' nicht löschen"
@@ -5877,7 +5911,7 @@
 "mit 'git add <Pfade>' oder 'git rm <Pfade>' und tragen Sie das Ergebnis mit\n"
 "'git commit' ein"
 
-#: sequencer.c:401 sequencer.c:2909
+#: sequencer.c:401 sequencer.c:2847
 #, c-format
 msgid "could not lock '%s'"
 msgstr "Konnte '%s' nicht sperren"
@@ -5887,15 +5921,15 @@
 msgid "could not write eol to '%s'"
 msgstr "Konnte EOL nicht nach '%s' schreiben."
 
-#: sequencer.c:413 sequencer.c:2714 sequencer.c:2915 sequencer.c:2929
-#: sequencer.c:3192
+#: sequencer.c:413 sequencer.c:2652 sequencer.c:2853 sequencer.c:2867
+#: sequencer.c:3130
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "Fehler beim Fertigstellen von '%s'."
 
-#: sequencer.c:436 sequencer.c:981 sequencer.c:1655 sequencer.c:2734
-#: sequencer.c:3174 sequencer.c:3283 builtin/am.c:245 builtin/commit.c:763
-#: builtin/merge.c:1112 builtin/rebase.c:567
+#: sequencer.c:436 sequencer.c:1585 sequencer.c:2672 sequencer.c:3112
+#: sequencer.c:3221 builtin/am.c:244 builtin/commit.c:763 builtin/merge.c:1117
+#: builtin/rebase.c:568
 #, c-format
 msgid "could not read '%s'"
 msgstr "Konnte '%s' nicht lesen"
@@ -5923,70 +5957,65 @@
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase -i".
 #.
-#: sequencer.c:632
+#: sequencer.c:631
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s: Konnte neue Index-Datei nicht schreiben"
 
-#: sequencer.c:649
+#: sequencer.c:648
 msgid "unable to update cache tree"
 msgstr "Konnte Cache-Verzeichnis nicht aktualisieren."
 
-#: sequencer.c:663
+#: sequencer.c:662
 msgid "could not resolve HEAD commit"
 msgstr "Konnte HEAD-Commit nicht auflösen."
 
-#: sequencer.c:743
+#: sequencer.c:742
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr "Kein Schlüssel in '%.*s' vorhanden."
 
-#: sequencer.c:754
+#: sequencer.c:753
 #, c-format
 msgid "unable to dequote value of '%s'"
 msgstr "Konnte Anführungszeichen von '%s' nicht entfernen."
 
-#: sequencer.c:791 wrapper.c:227 wrapper.c:397 builtin/am.c:706
-#: builtin/am.c:798 builtin/merge.c:1109 builtin/rebase.c:1045
+#: sequencer.c:790 wrapper.c:190 wrapper.c:360 builtin/am.c:705
+#: builtin/am.c:797 builtin/merge.c:1114 builtin/rebase.c:1046
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "Konnte '%s' nicht zum Lesen öffnen."
 
-#: sequencer.c:801
+#: sequencer.c:800
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr "'GIT_AUTHOR_NAME' bereits angegeben."
 
-#: sequencer.c:806
+#: sequencer.c:805
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr "'GIT_AUTHOR_EMAIL' bereits angegeben."
 
-#: sequencer.c:811
+#: sequencer.c:810
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr "'GIT_AUTHOR_DATE' bereits angegeben."
 
-#: sequencer.c:815
+#: sequencer.c:814
 #, c-format
 msgid "unknown variable '%s'"
 msgstr "Unbekannte Variable '%s'"
 
-#: sequencer.c:820
+#: sequencer.c:819
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr "'GIT_AUTHOR_NAME' fehlt."
 
-#: sequencer.c:822
+#: sequencer.c:821
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr "'GIT_AUTHOR_EMAIL' fehlt."
 
-#: sequencer.c:824
+#: sequencer.c:823
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr "'GIT_AUTHOR_DATE' fehlt."
 
-#: sequencer.c:884
-#, c-format
-msgid "invalid date format '%s' in '%s'"
-msgstr "Ungültiges Datumsformat '%s' in '%s'"
-
-#: sequencer.c:901
+#: sequencer.c:872
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -6017,15 +6046,11 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:995
-msgid "writing root commit"
-msgstr "Root-Commit schreiben"
-
-#: sequencer.c:1216
+#: sequencer.c:1146
 msgid "'prepare-commit-msg' hook failed"
 msgstr "'prepare-commit-msg' Hook fehlgeschlagen."
 
-#: sequencer.c:1223
+#: sequencer.c:1153
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -6053,7 +6078,7 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1236
+#: sequencer.c:1166
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -6079,327 +6104,327 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1278
+#: sequencer.c:1208
 msgid "couldn't look up newly created commit"
 msgstr "Konnte neu erstellten Commit nicht nachschlagen."
 
-#: sequencer.c:1280
+#: sequencer.c:1210
 msgid "could not parse newly created commit"
 msgstr "Konnte neu erstellten Commit nicht analysieren."
 
-#: sequencer.c:1326
+#: sequencer.c:1256
 msgid "unable to resolve HEAD after creating commit"
 msgstr "Konnte HEAD nicht auflösen, nachdem der Commit erstellt wurde."
 
-#: sequencer.c:1328
+#: sequencer.c:1258
 msgid "detached HEAD"
 msgstr "losgelöster HEAD"
 
-#: sequencer.c:1332
+#: sequencer.c:1262
 msgid " (root-commit)"
 msgstr " (Root-Commit)"
 
-#: sequencer.c:1353
+#: sequencer.c:1283
 msgid "could not parse HEAD"
 msgstr "Konnte HEAD nicht parsen."
 
-#: sequencer.c:1355
+#: sequencer.c:1285
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s ist kein Commit!"
 
-#: sequencer.c:1359 builtin/commit.c:1571
+#: sequencer.c:1289 builtin/commit.c:1571
 msgid "could not parse HEAD commit"
 msgstr "Konnte Commit von HEAD nicht analysieren."
 
-#: sequencer.c:1411 sequencer.c:2004
+#: sequencer.c:1341 sequencer.c:1933
 msgid "unable to parse commit author"
 msgstr "Konnte Commit-Autor nicht parsen."
 
-#: sequencer.c:1421 builtin/am.c:1573 builtin/merge.c:684
+#: sequencer.c:1352 builtin/am.c:1561 builtin/merge.c:684
 msgid "git write-tree failed to write a tree"
 msgstr "\"git write-tree\" schlug beim Schreiben eines \"Tree\"-Objektes fehl"
 
-#: sequencer.c:1438 sequencer.c:1499
+#: sequencer.c:1369 sequencer.c:1429
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "Konnte Commit-Beschreibung von '%s' nicht lesen."
 
-#: sequencer.c:1465 builtin/am.c:1595 builtin/commit.c:1670 builtin/merge.c:878
-#: builtin/merge.c:903
+#: sequencer.c:1396 builtin/am.c:1583 builtin/commit.c:1670 builtin/merge.c:883
+#: builtin/merge.c:908
 msgid "failed to write commit object"
 msgstr "Fehler beim Schreiben des Commit-Objektes."
 
-#: sequencer.c:1526
+#: sequencer.c:1456
 #, c-format
 msgid "could not parse commit %s"
 msgstr "Konnte Commit %s nicht parsen."
 
-#: sequencer.c:1531
+#: sequencer.c:1461
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "Konnte Eltern-Commit %s nicht parsen."
 
-#: sequencer.c:1605 sequencer.c:1715
+#: sequencer.c:1535 sequencer.c:1645
 #, c-format
 msgid "unknown command: %d"
 msgstr "Unbekannter Befehl: %d"
 
-#: sequencer.c:1662 sequencer.c:1687
+#: sequencer.c:1592 sequencer.c:1617
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr "Das ist eine Kombination aus %d Commits."
 
-#: sequencer.c:1672
+#: sequencer.c:1602
 msgid "need a HEAD to fixup"
 msgstr "benötige HEAD für fixup"
 
-#: sequencer.c:1674 sequencer.c:3219
+#: sequencer.c:1604 sequencer.c:3157
 msgid "could not read HEAD"
 msgstr "Konnte HEAD nicht lesen"
 
-#: sequencer.c:1676
+#: sequencer.c:1606
 msgid "could not read HEAD's commit message"
 msgstr "Konnte Commit-Beschreibung von HEAD nicht lesen"
 
-#: sequencer.c:1682
+#: sequencer.c:1612
 #, c-format
 msgid "cannot write '%s'"
 msgstr "kann '%s' nicht schreiben"
 
-#: sequencer.c:1689 git-rebase--preserve-merges.sh:496
+#: sequencer.c:1619 git-rebase--preserve-merges.sh:496
 msgid "This is the 1st commit message:"
 msgstr "Das ist die erste Commit-Beschreibung:"
 
-#: sequencer.c:1697
+#: sequencer.c:1627
 #, c-format
 msgid "could not read commit message of %s"
 msgstr "Konnte Commit-Beschreibung von %s nicht lesen."
 
-#: sequencer.c:1704
+#: sequencer.c:1634
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Das ist Commit-Beschreibung #%d:"
 
-#: sequencer.c:1710
+#: sequencer.c:1640
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "Die Commit-Beschreibung #%d wird ausgelassen:"
 
-#: sequencer.c:1798
+#: sequencer.c:1728
 msgid "your index file is unmerged."
 msgstr "Ihre Index-Datei ist nicht zusammengeführt."
 
-#: sequencer.c:1805
+#: sequencer.c:1735
 msgid "cannot fixup root commit"
 msgstr "kann fixup nicht auf Root-Commit anwenden"
 
-#: sequencer.c:1824
+#: sequencer.c:1754
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "Commit %s ist ein Merge, aber die Option -m wurde nicht angegeben."
 
-#: sequencer.c:1832 sequencer.c:1840
+#: sequencer.c:1762 sequencer.c:1770
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "Commit %s hat keinen Eltern-Commit %d"
 
-#: sequencer.c:1846
+#: sequencer.c:1776
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "Kann keine Commit-Beschreibung für %s bekommen."
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:1865
+#: sequencer.c:1795
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: kann Eltern-Commit %s nicht parsen"
 
-#: sequencer.c:1930
+#: sequencer.c:1860
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "Konnte '%s' nicht zu '%s' umbenennen."
 
-#: sequencer.c:1985
+#: sequencer.c:1915
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "Konnte \"revert\" nicht auf %s... (%s) ausführen"
 
-#: sequencer.c:1986
+#: sequencer.c:1916
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "Konnte %s... (%s) nicht anwenden"
 
-#: sequencer.c:2045
+#: sequencer.c:1983
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: Fehler beim Lesen des Index"
 
-#: sequencer.c:2052
+#: sequencer.c:1990
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: Fehler beim Aktualisieren des Index"
 
-#: sequencer.c:2128
+#: sequencer.c:2066
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s akzeptiert keine Argumente: '%s'"
 
-#: sequencer.c:2137
+#: sequencer.c:2075
 #, c-format
 msgid "missing arguments for %s"
 msgstr "Fehlende Argumente für %s."
 
-#: sequencer.c:2174
+#: sequencer.c:2112
 #, c-format
 msgid "could not parse '%.*s'"
 msgstr "Konnte '%.*s' nicht parsen."
 
-#: sequencer.c:2228
+#: sequencer.c:2166
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "Ungültige Zeile %d: %.*s"
 
-#: sequencer.c:2239
+#: sequencer.c:2177
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "Kann '%s' nicht ohne vorherigen Commit ausführen"
 
-#: sequencer.c:2287 builtin/rebase.c:153 builtin/rebase.c:178
+#: sequencer.c:2225 builtin/rebase.c:153 builtin/rebase.c:178
 #: builtin/rebase.c:204 builtin/rebase.c:229
 #, c-format
 msgid "could not read '%s'."
 msgstr "Konnte '%s' nicht lesen."
 
-#: sequencer.c:2323
+#: sequencer.c:2261
 msgid "cancelling a cherry picking in progress"
 msgstr "Abbrechen eines laufenden \"cherry-pick\""
 
-#: sequencer.c:2330
+#: sequencer.c:2268
 msgid "cancelling a revert in progress"
 msgstr "Abbrechen eines laufenden \"revert\""
 
-#: sequencer.c:2364
+#: sequencer.c:2302
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr ""
 "Bitte beheben Sie dieses, indem Sie 'git rebase --edit-todo' ausführen."
 
-#: sequencer.c:2366
+#: sequencer.c:2304
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "Unbenutzbares Instruktionsblatt: '%s'"
 
-#: sequencer.c:2371
+#: sequencer.c:2309
 msgid "no commits parsed."
 msgstr "Keine Commits geparst."
 
-#: sequencer.c:2382
+#: sequencer.c:2320
 msgid "cannot cherry-pick during a revert."
 msgstr "Kann Cherry-Pick nicht während eines Reverts ausführen."
 
-#: sequencer.c:2384
+#: sequencer.c:2322
 msgid "cannot revert during a cherry-pick."
 msgstr "Kann Revert nicht während eines Cherry-Picks ausführen."
 
-#: sequencer.c:2466
+#: sequencer.c:2404
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr "Ungültiger Wert für %s: %s"
 
-#: sequencer.c:2553
+#: sequencer.c:2491
 msgid "unusable squash-onto"
 msgstr "Unbenutzbares squash-onto."
 
-#: sequencer.c:2569
+#: sequencer.c:2507
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "Fehlerhaftes Optionsblatt: '%s'"
 
-#: sequencer.c:2652 sequencer.c:4351
+#: sequencer.c:2590 sequencer.c:4308
 msgid "empty commit set passed"
 msgstr "leere Menge von Commits übergeben"
 
-#: sequencer.c:2668
+#: sequencer.c:2606
 msgid "revert is already in progress"
 msgstr "\"revert\" ist bereits im Gange"
 
-#: sequencer.c:2670
+#: sequencer.c:2608
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "Versuchen Sie \"git revert (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2673
+#: sequencer.c:2611
 msgid "cherry-pick is already in progress"
 msgstr "\"cherry-pick\" wird bereits durchgeführt"
 
-#: sequencer.c:2675
+#: sequencer.c:2613
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "Versuchen Sie \"git cherry-pick (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2689
+#: sequencer.c:2627
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "Konnte \"sequencer\"-Verzeichnis '%s' nicht erstellen."
 
-#: sequencer.c:2704
+#: sequencer.c:2642
 msgid "could not lock HEAD"
 msgstr "Konnte HEAD nicht sperren"
 
-#: sequencer.c:2764 sequencer.c:4103
+#: sequencer.c:2702 sequencer.c:4057
 msgid "no cherry-pick or revert in progress"
 msgstr "kein \"cherry-pick\" oder \"revert\" im Gange"
 
-#: sequencer.c:2766 sequencer.c:2777
+#: sequencer.c:2704 sequencer.c:2715
 msgid "cannot resolve HEAD"
 msgstr "kann HEAD nicht auflösen"
 
-#: sequencer.c:2768 sequencer.c:2812
+#: sequencer.c:2706 sequencer.c:2750
 msgid "cannot abort from a branch yet to be born"
 msgstr "kann nicht abbrechen: bin auf einem Branch, der noch nicht geboren ist"
 
-#: sequencer.c:2798 builtin/grep.c:734
+#: sequencer.c:2736 builtin/grep.c:736
 #, c-format
 msgid "cannot open '%s'"
 msgstr "kann '%s' nicht öffnen"
 
-#: sequencer.c:2800
+#: sequencer.c:2738
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "Kann '%s' nicht lesen: %s"
 
-#: sequencer.c:2801
+#: sequencer.c:2739
 msgid "unexpected end of file"
 msgstr "Unerwartetes Dateiende"
 
-#: sequencer.c:2807
+#: sequencer.c:2745
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "gespeicherte \"pre-cherry-pick\" HEAD Datei '%s' ist beschädigt"
 
-#: sequencer.c:2818
+#: sequencer.c:2756
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr ""
 "Sie scheinen HEAD verändert zu haben. Keine Rückspulung, prüfen Sie HEAD."
 
-#: sequencer.c:2859
+#: sequencer.c:2797
 msgid "no revert in progress"
 msgstr "Kein Revert im Gange"
 
-#: sequencer.c:2867
+#: sequencer.c:2805
 msgid "no cherry-pick in progress"
 msgstr "kein \"cherry-pick\" im Gange"
 
-#: sequencer.c:2877
+#: sequencer.c:2815
 msgid "failed to skip the commit"
 msgstr "Überspringen des Commits fehlgeschlagen"
 
-#: sequencer.c:2884
+#: sequencer.c:2822
 msgid "there is nothing to skip"
 msgstr "Nichts zum Überspringen vorhanden"
 
-#: sequencer.c:2887
+#: sequencer.c:2825
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -6408,21 +6433,21 @@
 "Haben Sie bereits committet?\n"
 "Versuchen Sie \"git %s --continue\""
 
-#: sequencer.c:3011 sequencer.c:4015
+#: sequencer.c:2949 sequencer.c:3969
 #, c-format
 msgid "could not update %s"
 msgstr "Konnte %s nicht aktualisieren."
 
-#: sequencer.c:3049 sequencer.c:3995
+#: sequencer.c:2987 sequencer.c:3949
 msgid "cannot read HEAD"
 msgstr "Kann HEAD nicht lesen"
 
-#: sequencer.c:3066
+#: sequencer.c:3004
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "Konnte '%s' nicht nach '%s' kopieren."
 
-#: sequencer.c:3074
+#: sequencer.c:3012
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -6441,27 +6466,27 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:3084
+#: sequencer.c:3022
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "Konnte %s... (%.*s) nicht anwenden"
 
-#: sequencer.c:3091
+#: sequencer.c:3029
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "Konnte \"%.*s\" nicht zusammenführen."
 
-#: sequencer.c:3105 sequencer.c:3109 builtin/difftool.c:633
+#: sequencer.c:3043 sequencer.c:3047 builtin/difftool.c:641
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "Konnte '%s' nicht nach '%s' kopieren."
 
-#: sequencer.c:3131 sequencer.c:3558 builtin/rebase.c:849 builtin/rebase.c:1582
-#: builtin/rebase.c:1953 builtin/rebase.c:2008
+#: sequencer.c:3069 sequencer.c:3506 builtin/rebase.c:850 builtin/rebase.c:1613
+#: builtin/rebase.c:1987 builtin/rebase.c:2031
 msgid "could not read index"
 msgstr "Konnte den Index nicht lesen."
 
-#: sequencer.c:3136
+#: sequencer.c:3074
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -6477,11 +6502,11 @@
 "\n"
 "ausführen.\n"
 
-#: sequencer.c:3142
+#: sequencer.c:3080
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "Der Index und/oder das Arbeitsverzeichnis wurde geändert.\n"
 
-#: sequencer.c:3148
+#: sequencer.c:3086
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -6499,77 +6524,77 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3209
+#: sequencer.c:3147
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "Unerlaubter Beschriftungsname: '%.*s'"
 
-#: sequencer.c:3263
+#: sequencer.c:3201
 msgid "writing fake root commit"
 msgstr "unechten Root-Commit schreiben"
 
-#: sequencer.c:3268
+#: sequencer.c:3206
 msgid "writing squash-onto"
 msgstr "squash-onto schreiben"
 
-#: sequencer.c:3306 builtin/rebase.c:854 builtin/rebase.c:860
+#: sequencer.c:3244 builtin/rebase.c:855 builtin/rebase.c:861
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "Fehler beim Finden des \"Tree\"-Objektes von %s."
 
-#: sequencer.c:3324 builtin/rebase.c:873
+#: sequencer.c:3262 builtin/rebase.c:874
 msgid "could not write index"
 msgstr "Konnte Index nicht schreiben."
 
-#: sequencer.c:3351
+#: sequencer.c:3289
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "Konnte '%s' nicht auflösen."
 
-#: sequencer.c:3379
+#: sequencer.c:3320
 msgid "cannot merge without a current revision"
 msgstr "Kann nicht ohne einen aktuellen Commit mergen."
 
-#: sequencer.c:3401
+#: sequencer.c:3342
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "Konnte '%.*s' nicht parsen."
 
-#: sequencer.c:3410
+#: sequencer.c:3351
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "Nichts zum Zusammenführen: '%.*s'"
 
-#: sequencer.c:3422
+#: sequencer.c:3363
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr ""
 "Octupus-Merge kann nicht auf Basis von [neuem Root-Commit] ausgeführt werden."
 
-#: sequencer.c:3437
+#: sequencer.c:3378
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "Konnte keine Commit-Beschreibung von '%s' bekommen."
 
-#: sequencer.c:3590
+#: sequencer.c:3538
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "Konnte nicht einmal versuchen '%.*s' zu mergen."
 
-#: sequencer.c:3606
+#: sequencer.c:3554
 msgid "merge: Unable to write new index file"
 msgstr "merge: Konnte neue Index-Datei nicht schreiben."
 
-#: sequencer.c:3675 builtin/rebase.c:711
+#: sequencer.c:3623 builtin/rebase.c:712
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Automatischen Stash angewendet.\n"
 
-#: sequencer.c:3687
+#: sequencer.c:3635
 #, c-format
 msgid "cannot store %s"
 msgstr "kann %s nicht speichern"
 
-#: sequencer.c:3690 builtin/rebase.c:727 git-rebase--preserve-merges.sh:113
+#: sequencer.c:3638 builtin/rebase.c:728 git-rebase--preserve-merges.sh:113
 #, c-format
 msgid ""
 "Applying autostash resulted in conflicts.\n"
@@ -6580,31 +6605,31 @@
 "Ihre Änderungen sind im Stash sicher.\n"
 "Sie können jederzeit \"git stash pop\" oder \"git stash drop\" ausführen.\n"
 
-#: sequencer.c:3751
+#: sequencer.c:3699
 #, c-format
 msgid "could not checkout %s"
 msgstr "Konnte %s nicht auschecken."
 
-#: sequencer.c:3765
+#: sequencer.c:3713
 #, c-format
 msgid "%s: not a valid OID"
 msgstr "%s: keine gültige OID"
 
-#: sequencer.c:3770 git-rebase--preserve-merges.sh:779
+#: sequencer.c:3718 git-rebase--preserve-merges.sh:779
 msgid "could not detach HEAD"
 msgstr "Konnte HEAD nicht loslösen"
 
-#: sequencer.c:3785
+#: sequencer.c:3733
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "Angehalten bei HEAD\n"
 
-#: sequencer.c:3787
+#: sequencer.c:3735
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Angehalten bei %s\n"
 
-#: sequencer.c:3795
+#: sequencer.c:3743
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -6626,50 +6651,50 @@
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:3877
+#: sequencer.c:3827
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Angehalten bei %s... %.*s\n"
 
-#: sequencer.c:3958
+#: sequencer.c:3898
 #, c-format
 msgid "unknown command %d"
 msgstr "Unbekannter Befehl %d"
 
-#: sequencer.c:4003
+#: sequencer.c:3957
 msgid "could not read orig-head"
 msgstr "Konnte orig-head nicht lesen."
 
-#: sequencer.c:4008
+#: sequencer.c:3962
 msgid "could not read 'onto'"
 msgstr "Konnte 'onto' nicht lesen."
 
-#: sequencer.c:4022
+#: sequencer.c:3976
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "Konnte HEAD nicht auf %s aktualisieren."
 
-#: sequencer.c:4115
+#: sequencer.c:4069
 msgid "cannot rebase: You have unstaged changes."
 msgstr ""
 "Rebase nicht möglich: Sie haben Änderungen, die nicht zum Commit\n"
 "vorgemerkt sind."
 
-#: sequencer.c:4124
+#: sequencer.c:4078
 msgid "cannot amend non-existing commit"
 msgstr "Kann nicht existierenden Commit nicht nachbessern."
 
-#: sequencer.c:4126
+#: sequencer.c:4080
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "Ungültige Datei: '%s'"
 
-#: sequencer.c:4128
+#: sequencer.c:4082
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "Ungültige Inhalte: '%s'"
 
-#: sequencer.c:4131
+#: sequencer.c:4085
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -6680,42 +6705,42 @@
 "committen Sie diese zuerst und führen Sie dann 'git rebase --continue'\n"
 "erneut aus."
 
-#: sequencer.c:4167 sequencer.c:4205
+#: sequencer.c:4121 sequencer.c:4159
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "Konnte Datei nicht schreiben: '%s'"
 
-#: sequencer.c:4220
+#: sequencer.c:4174
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "Konnte CHERRY_PICK_HEAD nicht löschen."
 
-#: sequencer.c:4227
+#: sequencer.c:4181
 msgid "could not commit staged changes."
 msgstr "Konnte Änderungen aus der Staging-Area nicht committen."
 
-#: sequencer.c:4328
+#: sequencer.c:4285
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: %s kann nicht in \"cherry-pick\" benutzt werden"
 
-#: sequencer.c:4332
+#: sequencer.c:4289
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: ungültiger Commit"
 
-#: sequencer.c:4367
+#: sequencer.c:4324
 msgid "can't revert as initial commit"
 msgstr "Kann nicht als allerersten Commit einen Revert ausführen."
 
-#: sequencer.c:4810
+#: sequencer.c:4774
 msgid "make_script: unhandled options"
 msgstr "make_script: unbehandelte Optionen"
 
-#: sequencer.c:4813
+#: sequencer.c:4777
 msgid "make_script: error preparing revisions"
 msgstr "make_script: Fehler beim Vorbereiten der Commits"
 
-#: sequencer.c:4971
+#: sequencer.c:4935
 msgid ""
 "You can fix this with 'git rebase --edit-todo' and then run 'git rebase --"
 "continue'.\n"
@@ -6725,24 +6750,24 @@
 "'git rebase --continue' aus.\n"
 "Oder Sie können den Rebase mit 'git rebase --abort' abbrechen.\n"
 
-#: sequencer.c:5083 sequencer.c:5100
+#: sequencer.c:5047 sequencer.c:5064
 msgid "nothing to do"
 msgstr "Nichts zu tun."
 
-#: sequencer.c:5114
+#: sequencer.c:5078
 msgid "could not skip unnecessary pick commands"
 msgstr "Konnte unnötige \"pick\"-Befehle nicht auslassen."
 
-#: sequencer.c:5197
+#: sequencer.c:5166
 msgid "the script was already rearranged."
 msgstr "Das Script wurde bereits umgeordnet."
 
-#: setup.c:123
+#: setup.c:124
 #, c-format
 msgid "'%s' is outside repository"
 msgstr "'%s' liegt außerhalb des Repositories."
 
-#: setup.c:173
+#: setup.c:174
 #, c-format
 msgid ""
 "%s: no such path in the working tree.\n"
@@ -6752,7 +6777,7 @@
 "Benutzen Sie 'git <Befehl> -- <Pfad>...' zur Angabe von Pfaden, die lokal\n"
 "nicht existieren."
 
-#: setup.c:186
+#: setup.c:187
 #, c-format
 msgid ""
 "ambiguous argument '%s': unknown revision or path not in the working tree.\n"
@@ -6764,13 +6789,13 @@
 "Benutzen Sie '--', um Pfade und Commits zu trennen, ähnlich wie:\n"
 "'git <Befehl> [<Commit>...] -- [<Datei>...]'"
 
-#: setup.c:235
+#: setup.c:236
 #, c-format
 msgid "option '%s' must come before non-option arguments"
 msgstr ""
 "Die Option '%s' muss vor den Argumenten kommen, die keine Optionen sind."
 
-#: setup.c:254
+#: setup.c:255
 #, c-format
 msgid ""
 "ambiguous argument '%s': both revision and filename\n"
@@ -6781,93 +6806,93 @@
 "Benutzen Sie '--', um Pfade und Commits zu trennen, ähnlich wie:\n"
 "'git <Befehl> [<Commit>...] -- [<Datei>...]'"
 
-#: setup.c:390
+#: setup.c:391
 msgid "unable to set up work tree using invalid config"
 msgstr ""
 "Konnte Arbeitsverzeichnis mit ungültiger Konfiguration nicht einrichten."
 
-#: setup.c:394
+#: setup.c:395
 msgid "this operation must be run in a work tree"
 msgstr "Diese Operation muss in einem Arbeitsverzeichnis ausgeführt werden."
 
-#: setup.c:540
+#: setup.c:541
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
 msgstr "Erwartete Git-Repository-Version <= %d, %d gefunden"
 
-#: setup.c:548
+#: setup.c:549
 msgid "unknown repository extensions found:"
 msgstr "Unbekannte Repository-Erweiterungen gefunden:"
 
-#: setup.c:567
+#: setup.c:568
 #, c-format
 msgid "error opening '%s'"
 msgstr "Fehler beim Öffnen von '%s'."
 
-#: setup.c:569
+#: setup.c:570
 #, c-format
 msgid "too large to be a .git file: '%s'"
 msgstr "Zu groß, um eine .git-Datei zu sein: '%s'"
 
-#: setup.c:571
+#: setup.c:572
 #, c-format
 msgid "error reading %s"
 msgstr "Fehler beim Lesen von '%s'."
 
-#: setup.c:573
+#: setup.c:574
 #, c-format
 msgid "invalid gitfile format: %s"
 msgstr "Ungültiges gitfile-Format: %s"
 
-#: setup.c:575
+#: setup.c:576
 #, c-format
 msgid "no path in gitfile: %s"
 msgstr "Kein Pfad in gitfile: %s"
 
-#: setup.c:577
+#: setup.c:578
 #, c-format
 msgid "not a git repository: %s"
 msgstr "Kein Git-Repository: %s"
 
-#: setup.c:676
+#: setup.c:677
 #, c-format
 msgid "'$%s' too big"
 msgstr "'$%s' zu groß"
 
-#: setup.c:690
+#: setup.c:691
 #, c-format
 msgid "not a git repository: '%s'"
 msgstr "Kein Git-Repository: '%s'"
 
-#: setup.c:719 setup.c:721 setup.c:752
+#: setup.c:720 setup.c:722 setup.c:753
 #, c-format
 msgid "cannot chdir to '%s'"
 msgstr "Kann nicht in Verzeichnis '%s' wechseln."
 
-#: setup.c:724 setup.c:780 setup.c:790 setup.c:829 setup.c:837
+#: setup.c:725 setup.c:781 setup.c:791 setup.c:830 setup.c:838
 msgid "cannot come back to cwd"
 msgstr "Kann nicht zum aktuellen Arbeitsverzeichnis zurückwechseln."
 
-#: setup.c:851
+#: setup.c:852
 #, c-format
 msgid "failed to stat '%*s%s%s'"
 msgstr "Konnte '%*s%s%s' nicht lesen."
 
-#: setup.c:1083
+#: setup.c:1090
 msgid "Unable to read current working directory"
 msgstr "Konnte aktuelles Arbeitsverzeichnis nicht lesen."
 
-#: setup.c:1092 setup.c:1098
+#: setup.c:1099 setup.c:1105
 #, c-format
 msgid "cannot change to '%s'"
 msgstr "Kann nicht nach '%s' wechseln."
 
-#: setup.c:1103
+#: setup.c:1110
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
 msgstr "Kein Git-Repository (oder irgendeines der Elternverzeichnisse): %s"
 
-#: setup.c:1109
+#: setup.c:1116
 #, c-format
 msgid ""
 "not a git repository (or any parent up to mount point %s)\n"
@@ -6877,7 +6902,7 @@
 "%s)\n"
 "Stoppe bei Dateisystemgrenze (GIT_DISCOVERY_ACROSS_FILESYSTEM nicht gesetzt)."
 
-#: setup.c:1220
+#: setup.c:1227
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -6886,290 +6911,290 @@
 "Problem mit Wert für Dateimodus (0%.3o) von core.sharedRepository.\n"
 "Der Besitzer der Dateien muss immer Lese- und Schreibrechte haben."
 
-#: setup.c:1264
+#: setup.c:1271
 msgid "open /dev/null or dup failed"
 msgstr "Öffnen von /dev/null oder dup fehlgeschlagen."
 
-#: setup.c:1279
+#: setup.c:1286
 msgid "fork failed"
 msgstr "fork fehlgeschlagen"
 
-#: setup.c:1284
+#: setup.c:1291
 msgid "setsid failed"
 msgstr "setsid fehlgeschlagen"
 
-#: sha1-file.c:453
+#: sha1-file.c:452
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr ""
 "Objektverzeichnis %s existiert nicht; prüfe .git/objects/info/alternates"
 
-#: sha1-file.c:504
+#: sha1-file.c:503
 #, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr "Konnte alternativen Objektpfad '%s' nicht normalisieren."
 
-#: sha1-file.c:576
+#: sha1-file.c:575
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr "%s: ignoriere alternative Objektspeicher - Verschachtelung zu tief"
 
-#: sha1-file.c:583
+#: sha1-file.c:582
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr "Konnte Objektverzeichnis '%s' nicht normalisieren."
 
-#: sha1-file.c:626
+#: sha1-file.c:625
 msgid "unable to fdopen alternates lockfile"
 msgstr "Konnte fdopen nicht auf Lock-Datei für \"alternates\" aufrufen."
 
-#: sha1-file.c:644
+#: sha1-file.c:643
 msgid "unable to read alternates file"
 msgstr "Konnte \"alternates\"-Datei nicht lesen."
 
-#: sha1-file.c:651
+#: sha1-file.c:650
 msgid "unable to move new alternates file into place"
 msgstr "Konnte neue \"alternates\"-Datei nicht übernehmen."
 
-#: sha1-file.c:686
+#: sha1-file.c:685
 #, c-format
 msgid "path '%s' does not exist"
 msgstr "Pfad '%s' existiert nicht"
 
-#: sha1-file.c:712
+#: sha1-file.c:711
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr ""
 "Referenziertes Repository '%s' wird noch nicht als verknüpftes\n"
 "Arbeitsverzeichnis unterstützt."
 
-#: sha1-file.c:718
+#: sha1-file.c:717
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "Referenziertes Repository '%s' ist kein lokales Repository."
 
-#: sha1-file.c:724
+#: sha1-file.c:723
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr ""
 "Referenziertes Repository '%s' hat eine unvollständige Historie (shallow)."
 
-#: sha1-file.c:732
+#: sha1-file.c:731
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr ""
 "Referenziertes Repository '%s' ist mit künstlichen Vorgängern (\"grafts\") "
 "eingehängt."
 
-#: sha1-file.c:792
+#: sha1-file.c:791
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr "Ungültige Zeile beim Parsen alternativer Referenzen: %s"
 
-#: sha1-file.c:944
+#: sha1-file.c:943
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr "Versuche mmap %<PRIuMAX> über Limit %<PRIuMAX>."
 
-#: sha1-file.c:969
+#: sha1-file.c:964
 msgid "mmap failed"
 msgstr "mmap fehlgeschlagen"
 
-#: sha1-file.c:1133
+#: sha1-file.c:1128
 #, c-format
 msgid "object file %s is empty"
 msgstr "Objektdatei %s ist leer."
 
-#: sha1-file.c:1257 sha1-file.c:2396
+#: sha1-file.c:1252 sha1-file.c:2392
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr "Fehlerhaftes loses Objekt '%s'."
 
-#: sha1-file.c:1259 sha1-file.c:2400
+#: sha1-file.c:1254 sha1-file.c:2396
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr "Nutzlose Daten am Ende von losem Objekt '%s'."
 
-#: sha1-file.c:1301
+#: sha1-file.c:1296
 msgid "invalid object type"
 msgstr "ungültiger Objekt-Typ"
 
-#: sha1-file.c:1385
+#: sha1-file.c:1380
 #, c-format
 msgid "unable to unpack %s header with --allow-unknown-type"
 msgstr "Konnte %s Kopfbereich nicht mit --allow-unknown-type entpacken."
 
-#: sha1-file.c:1388
+#: sha1-file.c:1383
 #, c-format
 msgid "unable to unpack %s header"
 msgstr "Konnte %s Kopfbereich nicht entpacken."
 
-#: sha1-file.c:1394
+#: sha1-file.c:1389
 #, c-format
 msgid "unable to parse %s header with --allow-unknown-type"
 msgstr "Konnte %s Kopfbereich mit --allow-unknown-type nicht parsen."
 
-#: sha1-file.c:1397
+#: sha1-file.c:1392
 #, c-format
 msgid "unable to parse %s header"
 msgstr "Konnte %s Kopfbereich nicht parsen."
 
-#: sha1-file.c:1588
+#: sha1-file.c:1584
 #, c-format
 msgid "failed to read object %s"
 msgstr "Konnte Objekt %s nicht lesen."
 
-#: sha1-file.c:1592
+#: sha1-file.c:1588
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr "Ersetzung %s für %s nicht gefunden."
 
-#: sha1-file.c:1596
+#: sha1-file.c:1592
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr "Loses Objekt %s (gespeichert in %s) ist beschädigt."
 
-#: sha1-file.c:1600
+#: sha1-file.c:1596
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr "Gepacktes Objekt %s (gespeichert in %s) ist beschädigt."
 
-#: sha1-file.c:1703
+#: sha1-file.c:1699
 #, c-format
 msgid "unable to write file %s"
 msgstr "Konnte Datei %s nicht schreiben."
 
-#: sha1-file.c:1710
+#: sha1-file.c:1706
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr "Konnte Zugriffsberechtigung auf '%s' nicht setzen."
 
-#: sha1-file.c:1717
+#: sha1-file.c:1713
 msgid "file write error"
 msgstr "Fehler beim Schreiben einer Datei."
 
-#: sha1-file.c:1736
+#: sha1-file.c:1732
 msgid "error when closing loose object file"
 msgstr "Fehler beim Schließen der Datei für lose Objekte."
 
-#: sha1-file.c:1801
+#: sha1-file.c:1797
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr ""
 "Unzureichende Berechtigung zum Hinzufügen eines Objektes zur Repository-"
 "Datenbank %s"
 
-#: sha1-file.c:1803
+#: sha1-file.c:1799
 msgid "unable to create temporary file"
 msgstr "Konnte temporäre Datei nicht erstellen."
 
-#: sha1-file.c:1827
+#: sha1-file.c:1823
 msgid "unable to write loose object file"
 msgstr "Fehler beim Schreiben der Datei für lose Objekte."
 
-#: sha1-file.c:1833
+#: sha1-file.c:1829
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr "Konnte neues Objekt %s (%d) nicht komprimieren."
 
-#: sha1-file.c:1837
+#: sha1-file.c:1833
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr "deflateEnd auf Objekt %s fehlgeschlagen (%d)"
 
-#: sha1-file.c:1841
+#: sha1-file.c:1837
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr "Fehler wegen instabilen Objektquelldaten für %s"
 
-#: sha1-file.c:1851 builtin/pack-objects.c:925
+#: sha1-file.c:1847 builtin/pack-objects.c:925
 #, c-format
 msgid "failed utime() on %s"
 msgstr "Fehler beim Aufruf von utime() auf '%s'."
 
-#: sha1-file.c:1926
+#: sha1-file.c:1922
 #, c-format
 msgid "cannot read object for %s"
 msgstr "Kann Objekt für %s nicht lesen."
 
-#: sha1-file.c:1966
+#: sha1-file.c:1962
 msgid "corrupt commit"
 msgstr "fehlerhafter Commit"
 
-#: sha1-file.c:1974
+#: sha1-file.c:1970
 msgid "corrupt tag"
 msgstr "fehlerhaftes Tag"
 
-#: sha1-file.c:2073
+#: sha1-file.c:2069
 #, c-format
 msgid "read error while indexing %s"
 msgstr "Lesefehler beim Indizieren von '%s'."
 
-#: sha1-file.c:2076
+#: sha1-file.c:2072
 #, c-format
 msgid "short read while indexing %s"
 msgstr "read() zu kurz beim Indizieren von '%s'."
 
-#: sha1-file.c:2149 sha1-file.c:2158
+#: sha1-file.c:2145 sha1-file.c:2154
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr "%s: Fehler beim Einfügen in die Datenbank"
 
-#: sha1-file.c:2164
+#: sha1-file.c:2160
 #, c-format
 msgid "%s: unsupported file type"
 msgstr "%s: nicht unterstützte Dateiart"
 
-#: sha1-file.c:2188
+#: sha1-file.c:2184
 #, c-format
 msgid "%s is not a valid object"
 msgstr "%s ist kein gültiges Objekt"
 
-#: sha1-file.c:2190
+#: sha1-file.c:2186
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr "%s ist kein gültiges '%s' Objekt"
 
-#: sha1-file.c:2217 builtin/index-pack.c:155
+#: sha1-file.c:2213 builtin/index-pack.c:155
 #, c-format
 msgid "unable to open %s"
 msgstr "kann %s nicht öffnen"
 
-#: sha1-file.c:2407 sha1-file.c:2459
+#: sha1-file.c:2403 sha1-file.c:2455
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr "Hash für %s stimmt nicht überein (%s erwartet)."
 
-#: sha1-file.c:2431
+#: sha1-file.c:2427
 #, c-format
 msgid "unable to mmap %s"
 msgstr "Konnte mmap nicht auf %s ausführen."
 
-#: sha1-file.c:2436
+#: sha1-file.c:2432
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr "Konnte Kopfbereich von %s nicht entpacken."
 
-#: sha1-file.c:2442
+#: sha1-file.c:2438
 #, c-format
 msgid "unable to parse header of %s"
 msgstr "Konnte Kopfbereich von %s nicht parsen."
 
-#: sha1-file.c:2453
+#: sha1-file.c:2449
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr "Konnte Inhalt von %s nicht entpacken."
 
-#: sha1-name.c:490
+#: sha1-name.c:487
 #, c-format
 msgid "short SHA1 %s is ambiguous"
 msgstr "Kurzer SHA-1 %s ist mehrdeutig."
 
-#: sha1-name.c:501
+#: sha1-name.c:498
 msgid "The candidates are:"
 msgstr "Die Kandidaten sind:"
 
-#: sha1-name.c:800
+#: sha1-name.c:797
 msgid ""
 "Git normally never creates a ref that ends with 40 hex characters\n"
 "because it will be ignored when you just specify 40-hex. These refs\n"
@@ -7195,43 +7220,43 @@
 "ausführen."
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:821
+#: strbuf.c:822
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:823
+#: strbuf.c:824
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u GiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:831
+#: strbuf.c:832
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:833
+#: strbuf.c:834
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u MiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:840
+#: strbuf.c:841
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:842
+#: strbuf.c:843
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u KiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:848
+#: strbuf.c:849
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -7239,7 +7264,7 @@
 msgstr[1] "%u Bytes"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:850
+#: strbuf.c:851
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
@@ -7358,28 +7383,28 @@
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree mit unerwartetem Rückgabewert %d beendet"
 
-#: submodule-config.c:232
+#: submodule-config.c:236
 #, c-format
 msgid "ignoring suspicious submodule name: %s"
 msgstr "Ignoriere verdächtigen Submodulnamen: %s"
 
-#: submodule-config.c:299
+#: submodule-config.c:303
 msgid "negative values not allowed for submodule.fetchjobs"
 msgstr "Negative Werte für submodule.fetchjobs nicht erlaubt."
 
-#: submodule-config.c:397
+#: submodule-config.c:401
 #, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
 msgstr ""
 "Ignoriere '%s', was als eine Befehlszeilenoption '%s' interpretiert werden "
 "würde."
 
-#: submodule-config.c:486
+#: submodule-config.c:490
 #, c-format
 msgid "invalid value for %s"
 msgstr "Ungültiger Wert für %s"
 
-#: submodule-config.c:755
+#: submodule-config.c:761
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr "Konnte Eintrag '%s' in .gitmodules nicht aktualisieren"
@@ -7414,7 +7439,7 @@
 msgid "could not read from stdin"
 msgstr "konnte nicht von der Standard-Eingabe lesen"
 
-#: trailer.c:1011 wrapper.c:701
+#: trailer.c:1011 wrapper.c:665
 #, c-format
 msgid "could not stat %s"
 msgstr "Konnte '%s' nicht lesen"
@@ -7443,47 +7468,47 @@
 msgid "Would set upstream of '%s' to '%s' of '%s'\n"
 msgstr "Würde Upstream-Branch von '%s' zu '%s' von '%s' setzen\n"
 
-#: transport.c:142
+#: transport.c:145
 #, c-format
 msgid "could not read bundle '%s'"
 msgstr "Konnte Paket '%s' nicht lesen."
 
-#: transport.c:208
+#: transport.c:214
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr "transport: ungültige --depth Option '%s'"
 
-#: transport.c:259
+#: transport.c:266
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "Siehe protocol.version in 'git help config' für weitere Informationen"
 
-#: transport.c:260
+#: transport.c:267
 msgid "server options require protocol version 2 or later"
 msgstr "Server-Optionen benötigen Protokoll-Version 2 oder höher"
 
-#: transport.c:625
+#: transport.c:632
 msgid "could not parse transport.color.* config"
 msgstr "Konnte transport.color.* Konfiguration nicht parsen."
 
-#: transport.c:698
+#: transport.c:705
 msgid "support for protocol v2 not implemented yet"
 msgstr "Unterstützung für Protokoll v2 noch nicht implementiert."
 
-#: transport.c:825
+#: transport.c:831
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "Unbekannter Wert für Konfiguration '%s': %s"
 
-#: transport.c:891
+#: transport.c:897
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "Übertragungsart '%s' nicht erlaubt."
 
-#: transport.c:945
+#: transport.c:949
 msgid "git-over-rsync is no longer supported"
 msgstr "git-over-rsync wird nicht länger unterstützt."
 
-#: transport.c:1040
+#: transport.c:1044
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -7492,7 +7517,7 @@
 "Die folgenden Submodul-Pfade enthalten Änderungen, die in keinem\n"
 "Remote-Repository gefunden wurden:\n"
 
-#: transport.c:1044
+#: transport.c:1048
 #, c-format
 msgid ""
 "\n"
@@ -7519,34 +7544,34 @@
 "zum Versenden zu einem Remote-Repository.\n"
 "\n"
 
-#: transport.c:1052
+#: transport.c:1056
 msgid "Aborting."
 msgstr "Abbruch."
 
-#: transport.c:1193
+#: transport.c:1201
 msgid "failed to push all needed submodules"
 msgstr "Fehler beim Versand aller erforderlichen Submodule."
 
-#: transport.c:1340 transport-helper.c:645
+#: transport.c:1345 transport-helper.c:655
 msgid "operation not supported by protocol"
 msgstr "Die Operation wird von dem Protokoll nicht unterstützt."
 
-#: transport-helper.c:51 transport-helper.c:80
+#: transport-helper.c:61 transport-helper.c:90
 msgid "full write to remote helper failed"
 msgstr "Vollständiges Schreiben zu Remote-Helper fehlgeschlagen."
 
-#: transport-helper.c:134
+#: transport-helper.c:144
 #, c-format
 msgid "unable to find remote helper for '%s'"
 msgstr "Konnte Remote-Helper für '%s' nicht finden."
 
-#: transport-helper.c:150 transport-helper.c:559
+#: transport-helper.c:160 transport-helper.c:569
 msgid "can't dup helper output fd"
 msgstr ""
 "Konnte dup() auf Dateideskriptor für Ausgaben des Remote-Helpers nicht "
 "ausführen."
 
-#: transport-helper.c:201
+#: transport-helper.c:211
 #, c-format
 msgid ""
 "unknown mandatory capability %s; this remote helper probably needs newer "
@@ -7555,100 +7580,105 @@
 "Unbekannte erforderliche Fähigkeit %s; dieser Remote-Helper benötigt\n"
 "wahrscheinlich eine neuere Version von Git."
 
-#: transport-helper.c:207
+#: transport-helper.c:217
 msgid "this remote helper should implement refspec capability"
 msgstr "Dieser Remote-Helper sollte die \"refspec\"-Fähigkeit implementieren."
 
-#: transport-helper.c:274 transport-helper.c:414
+#: transport-helper.c:284 transport-helper.c:424
 #, c-format
 msgid "%s unexpectedly said: '%s'"
 msgstr "unerwartete Ausgabe von %s: '%s'"
 
-#: transport-helper.c:403
+#: transport-helper.c:413
 #, c-format
 msgid "%s also locked %s"
 msgstr "%s sperrte auch %s"
 
-#: transport-helper.c:481
+#: transport-helper.c:491
 msgid "couldn't run fast-import"
 msgstr "Konnte \"fast-import\" nicht ausführen."
 
-#: transport-helper.c:504
+#: transport-helper.c:514
 msgid "error while running fast-import"
 msgstr "Fehler beim Ausführen von 'fast-import'."
 
-#: transport-helper.c:533 transport-helper.c:1105
+#: transport-helper.c:543 transport-helper.c:1132
 #, c-format
 msgid "could not read ref %s"
 msgstr "Konnte Referenz %s nicht lesen."
 
-#: transport-helper.c:578
+#: transport-helper.c:588
 #, c-format
 msgid "unknown response to connect: %s"
 msgstr "Unbekannte Antwort auf 'connect': %s"
 
-#: transport-helper.c:600
+#: transport-helper.c:610
 msgid "setting remote service path not supported by protocol"
 msgstr ""
 "Setzen des Remote-Service Pfads wird von dem Protokoll nicht unterstützt."
 
-#: transport-helper.c:602
+#: transport-helper.c:612
 msgid "invalid remote service path"
 msgstr "Ungültiger Remote-Service Pfad."
 
-#: transport-helper.c:648
+#: transport-helper.c:658
 #, c-format
 msgid "can't connect to subservice %s"
 msgstr "Kann keine Verbindung zu Subservice %s herstellen."
 
-#: transport-helper.c:720
+#: transport-helper.c:734
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "Erwartete ok/error, Remote-Helper gab '%s' aus."
 
-#: transport-helper.c:773
+#: transport-helper.c:787
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "Remote-Helper meldete unerwarteten Status von %s."
 
-#: transport-helper.c:834
+#: transport-helper.c:848
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "Remote-Helper %s unterstützt kein Trockenlauf."
 
-#: transport-helper.c:837
+#: transport-helper.c:851
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "Remote-Helper %s unterstützt kein --signed."
 
-#: transport-helper.c:840
+#: transport-helper.c:854
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "Remote-Helper %s unterstützt kein --signed=if-asked."
 
-#: transport-helper.c:847
+#: transport-helper.c:859
+#, c-format
+msgid "helper %s does not support --atomic"
+msgstr "Remote-Helper %s unterstützt kein --atomic."
+
+#: transport-helper.c:865
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "Remote-Helper %s unterstützt nicht 'push-option'."
 
-#: transport-helper.c:945
+#: transport-helper.c:963
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr "Remote-Helper unterstützt kein Push; Refspec benötigt"
 
-#: transport-helper.c:950
+#: transport-helper.c:968
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "Remote-Helper %s unterstützt kein 'force'."
 
-#: transport-helper.c:997
+#: transport-helper.c:1015
 msgid "couldn't run fast-export"
 msgstr "Konnte \"fast-export\" nicht ausführen."
 
-#: transport-helper.c:1002
+#: transport-helper.c:1020
 msgid "error while running fast-export"
 msgstr "Fehler beim Ausführen von \"fast-export\"."
 
-#: transport-helper.c:1027
+#: transport-helper.c:1045
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -7657,47 +7687,47 @@
 "Keine gemeinsamen Referenzen und nichts spezifiziert; keine Ausführung.\n"
 "Vielleicht sollten Sie einen Branch wie 'master' angeben.\n"
 
-#: transport-helper.c:1091
+#: transport-helper.c:1118
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "Ungültige Antwort in Referenzliste: %s"
 
-#: transport-helper.c:1244
+#: transport-helper.c:1270
 #, c-format
 msgid "read(%s) failed"
 msgstr "Lesen von %s fehlgeschlagen."
 
-#: transport-helper.c:1271
+#: transport-helper.c:1297
 #, c-format
 msgid "write(%s) failed"
 msgstr "Schreiben von %s fehlgeschlagen."
 
-#: transport-helper.c:1320
+#: transport-helper.c:1346
 #, c-format
 msgid "%s thread failed"
 msgstr "Thread %s fehlgeschlagen."
 
-#: transport-helper.c:1324
+#: transport-helper.c:1350
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "Fehler beim Beitreten zu Thread %s: %s"
 
-#: transport-helper.c:1343 transport-helper.c:1347
+#: transport-helper.c:1369 transport-helper.c:1373
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "Kann Thread zum Kopieren von Daten nicht starten: %s"
 
-#: transport-helper.c:1384
+#: transport-helper.c:1410
 #, c-format
 msgid "%s process failed to wait"
 msgstr "Fehler beim Warten von Prozess %s."
 
-#: transport-helper.c:1388
+#: transport-helper.c:1414
 #, c-format
 msgid "%s process failed"
 msgstr "Prozess %s fehlgeschlagen"
 
-#: transport-helper.c:1406 transport-helper.c:1415
+#: transport-helper.c:1432 transport-helper.c:1441
 msgid "can't start thread for copying data"
 msgstr "Kann Thread zum Kopieren von Daten nicht starten."
 
@@ -7717,7 +7747,7 @@
 msgid "too-short tree file"
 msgstr "zu kurze Tree-Datei"
 
-#: unpack-trees.c:111
+#: unpack-trees.c:110
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -7728,7 +7758,7 @@
 "%%sBitte committen oder stashen Sie Ihre Änderungen, bevor Sie Branches\n"
 "wechseln."
 
-#: unpack-trees.c:113
+#: unpack-trees.c:112
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -7738,7 +7768,7 @@
 "überschrieben werden:\n"
 "%%s"
 
-#: unpack-trees.c:116
+#: unpack-trees.c:115
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -7748,7 +7778,7 @@
 "überschrieben werden:\n"
 "%%sBitte committen oder stashen Sie Ihre Änderungen, bevor Sie mergen."
 
-#: unpack-trees.c:118
+#: unpack-trees.c:117
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -7758,7 +7788,7 @@
 "überschrieben werden:\n"
 "%%s"
 
-#: unpack-trees.c:121
+#: unpack-trees.c:120
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -7768,7 +7798,7 @@
 "überschrieben werden:\n"
 "%%sBitte committen oder stashen Sie Ihre Änderungen, bevor Sie %s ausführen."
 
-#: unpack-trees.c:123
+#: unpack-trees.c:122
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -7777,7 +7807,7 @@
 "Ihre lokalen Änderungen würden durch %s überschrieben werden.\n"
 "%%s"
 
-#: unpack-trees.c:128
+#: unpack-trees.c:127
 #, c-format
 msgid ""
 "Updating the following directories would lose untracked files in them:\n"
@@ -7787,7 +7817,7 @@
 "Dateien in diesen Verzeichnissen verloren gehen:\n"
 "%s"
 
-#: unpack-trees.c:132
+#: unpack-trees.c:131
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -7797,7 +7827,7 @@
 "den Checkout entfernt werden:\n"
 "%%sBitte verschieben oder entfernen Sie diese, bevor Sie Branches wechseln."
 
-#: unpack-trees.c:134
+#: unpack-trees.c:133
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -7808,7 +7838,7 @@
 "Checkout entfernt werden:\n"
 "%%s"
 
-#: unpack-trees.c:137
+#: unpack-trees.c:136
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -7818,7 +7848,7 @@
 "den Merge entfernt werden:\n"
 "%%sBitte verschieben oder entfernen Sie diese, bevor sie mergen."
 
-#: unpack-trees.c:139
+#: unpack-trees.c:138
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -7829,7 +7859,7 @@
 "Merge entfernt werden:\n"
 "%%s"
 
-#: unpack-trees.c:142
+#: unpack-trees.c:141
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -7839,7 +7869,7 @@
 "den %s entfernt werden:\n"
 "%%sBitte verschieben oder entfernen Sie diese, bevor sie %s ausführen."
 
-#: unpack-trees.c:144
+#: unpack-trees.c:143
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -7849,7 +7879,7 @@
 "den %s entfernt werden:\n"
 "%%s"
 
-#: unpack-trees.c:150
+#: unpack-trees.c:149
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -7860,7 +7890,7 @@
 "den Checkout überschrieben werden:\n"
 "%%sBitte verschieben oder entfernen Sie diese, bevor Sie Branches wechseln."
 
-#: unpack-trees.c:152
+#: unpack-trees.c:151
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -7872,7 +7902,7 @@
 "Checkout überschrieben werden:\n"
 "%%s"
 
-#: unpack-trees.c:155
+#: unpack-trees.c:154
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -7882,7 +7912,7 @@
 "den Merge überschrieben werden:\n"
 "%%sBitte verschieben oder entfernen Sie diese, bevor Sie mergen."
 
-#: unpack-trees.c:157
+#: unpack-trees.c:156
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -7892,7 +7922,7 @@
 "den Merge überschrieben werden:\n"
 "%%s"
 
-#: unpack-trees.c:160
+#: unpack-trees.c:159
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -7902,7 +7932,7 @@
 "den %s überschrieben werden:\n"
 "%%sBitte verschieben oder entfernen Sie diese, bevor sie %s ausführen."
 
-#: unpack-trees.c:162
+#: unpack-trees.c:161
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -7913,12 +7943,12 @@
 "%s überschrieben werden:\n"
 "%%s"
 
-#: unpack-trees.c:170
+#: unpack-trees.c:169
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
 msgstr "Eintrag '%s' überschneidet sich mit '%s'. Kann nicht verbinden."
 
-#: unpack-trees.c:173
+#: unpack-trees.c:172
 #, c-format
 msgid ""
 "Cannot update sparse checkout: the following entries are not up to date:\n"
@@ -7928,7 +7958,7 @@
 "sind nicht aktuell:\n"
 "%s"
 
-#: unpack-trees.c:175
+#: unpack-trees.c:174
 #, c-format
 msgid ""
 "The following working tree files would be overwritten by sparse checkout "
@@ -7939,7 +7969,7 @@
 "über einen partiellen Checkout überschrieben werden:\n"
 "%s"
 
-#: unpack-trees.c:177
+#: unpack-trees.c:176
 #, c-format
 msgid ""
 "The following working tree files would be removed by sparse checkout "
@@ -7950,7 +7980,7 @@
 "über einen partiellen Checkout entfernt werden:\n"
 "%s"
 
-#: unpack-trees.c:179
+#: unpack-trees.c:178
 #, c-format
 msgid ""
 "Cannot update submodule:\n"
@@ -7959,16 +7989,16 @@
 "Kann Submodul nicht aktualisieren:\n"
 "%s"
 
-#: unpack-trees.c:256
+#: unpack-trees.c:255
 #, c-format
 msgid "Aborting\n"
 msgstr "Abbruch\n"
 
-#: unpack-trees.c:318
+#: unpack-trees.c:317
 msgid "Updating files"
 msgstr "Aktualisiere Dateien"
 
-#: unpack-trees.c:350
+#: unpack-trees.c:349
 msgid ""
 "the following paths have collided (e.g. case-sensitive paths\n"
 "on a case-insensitive filesystem) and only one from the same\n"
@@ -8007,7 +8037,7 @@
 msgid "invalid '..' path segment"
 msgstr "ungültiges '..' Pfadsegment"
 
-#: worktree.c:258 builtin/am.c:2095
+#: worktree.c:258 builtin/am.c:2084
 #, c-format
 msgid "failed to read '%s'"
 msgstr "Fehler beim Lesen von '%s'"
@@ -8037,17 +8067,17 @@
 msgid "'%s' does not point back to '%s'"
 msgstr "'%s' zeigt nicht zurück auf '%s'"
 
-#: wrapper.c:223 wrapper.c:393
+#: wrapper.c:186 wrapper.c:356
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr "Konnte '%s' nicht zum Lesen und Schreiben öffnen."
 
-#: wrapper.c:424 wrapper.c:624
+#: wrapper.c:387 wrapper.c:588
 #, c-format
 msgid "unable to access '%s'"
 msgstr "konnte nicht auf '%s' zugreifen"
 
-#: wrapper.c:632
+#: wrapper.c:596
 msgid "unable to get current working directory"
 msgstr "Konnte aktuelles Arbeitsverzeichnis nicht bekommen."
 
@@ -8411,87 +8441,96 @@
 "  (alle Konflikte behoben: führen Sie \"git cherry-pick --continue\" aus)"
 
 #: wt-status.c:1437
+msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
+msgstr ""
+"  (benutzen Sie \"git cherry-pick --skip\", um diesen Patch auszulassen)"
+
+#: wt-status.c:1439
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr ""
 "  (benutzen Sie \"git cherry-pick --abort\", um die Cherry-Pick-Operation "
 "abzubrechen)"
 
-#: wt-status.c:1447
+#: wt-status.c:1449
 msgid "Revert currently in progress."
 msgstr "Revert zurzeit im Gange."
 
-#: wt-status.c:1450
+#: wt-status.c:1452
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Sie sind gerade beim Revert von Commit '%s'."
 
-#: wt-status.c:1456
+#: wt-status.c:1458
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr ""
 "  (beheben Sie die Konflikte und führen Sie dann \"git revert --continue\" "
 "aus)"
 
-#: wt-status.c:1459
+#: wt-status.c:1461
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (Führen Sie \"git revert --continue\", um weiterzumachen)"
 
-#: wt-status.c:1462
+#: wt-status.c:1464
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (alle Konflikte behoben: führen Sie \"git revert --continue\" aus)"
 
-#: wt-status.c:1464
+#: wt-status.c:1466
+msgid "  (use \"git revert --skip\" to skip this patch)"
+msgstr "  (benutzen Sie \"git revert --skip\", um diesen Patch auszulassen)"
+
+#: wt-status.c:1468
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr ""
 "  (benutzen Sie \"git revert --abort\", um die Revert-Operation abzubrechen)"
 
-#: wt-status.c:1474
+#: wt-status.c:1478
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "Sie sind gerade bei einer binären Suche, gestartet von Branch '%s'."
 
-#: wt-status.c:1478
+#: wt-status.c:1482
 msgid "You are currently bisecting."
 msgstr "Sie sind gerade bei einer binären Suche."
 
-#: wt-status.c:1481
+#: wt-status.c:1485
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr ""
 "  (benutzen Sie \"git bisect reset\", um zum ursprünglichen Branch "
 "zurückzukehren)"
 
-#: wt-status.c:1690
+#: wt-status.c:1694
 msgid "On branch "
 msgstr "Auf Branch "
 
-#: wt-status.c:1697
+#: wt-status.c:1701
 msgid "interactive rebase in progress; onto "
 msgstr "interaktives Rebase im Gange; auf "
 
-#: wt-status.c:1699
+#: wt-status.c:1703
 msgid "rebase in progress; onto "
 msgstr "Rebase im Gange; auf "
 
-#: wt-status.c:1709
+#: wt-status.c:1713
 msgid "Not currently on any branch."
 msgstr "Im Moment auf keinem Branch."
 
-#: wt-status.c:1726
+#: wt-status.c:1730
 msgid "Initial commit"
 msgstr "Initialer Commit"
 
-#: wt-status.c:1727
+#: wt-status.c:1731
 msgid "No commits yet"
 msgstr "Noch keine Commits"
 
-#: wt-status.c:1741
+#: wt-status.c:1745
 msgid "Untracked files"
 msgstr "Unversionierte Dateien"
 
-#: wt-status.c:1743
+#: wt-status.c:1747
 msgid "Ignored files"
 msgstr "Ignorierte Dateien"
 
-#: wt-status.c:1747
+#: wt-status.c:1751
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -8502,32 +8541,32 @@
 "'status -uno' könnte das beschleunigen, aber Sie müssen darauf achten,\n"
 "neue Dateien selbstständig hinzuzufügen (siehe 'git help status')."
 
-#: wt-status.c:1753
+#: wt-status.c:1757
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Unversionierte Dateien nicht aufgelistet%s"
 
-#: wt-status.c:1755
+#: wt-status.c:1759
 msgid " (use -u option to show untracked files)"
 msgstr " (benutzen Sie die Option -u, um unversionierte Dateien anzuzeigen)"
 
-#: wt-status.c:1761
+#: wt-status.c:1765
 msgid "No changes"
 msgstr "Keine Änderungen"
 
-#: wt-status.c:1766
+#: wt-status.c:1770
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 "keine Änderungen zum Commit vorgemerkt (benutzen Sie \"git add\" und/oder "
 "\"git commit -a\")\n"
 
-#: wt-status.c:1769
+#: wt-status.c:1773
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "keine Änderungen zum Commit vorgemerkt\n"
 
-#: wt-status.c:1772
+#: wt-status.c:1776
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -8536,72 +8575,77 @@
 "nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien\n"
 "(benutzen Sie \"git add\" zum Versionieren)\n"
 
-#: wt-status.c:1775
+#: wt-status.c:1779
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr "nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien\n"
 
-#: wt-status.c:1778
+#: wt-status.c:1782
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr ""
 "nichts zu committen (erstellen/kopieren Sie Dateien und benutzen\n"
 "Sie \"git add\" zum Versionieren)\n"
 
-#: wt-status.c:1781 wt-status.c:1786
+#: wt-status.c:1785 wt-status.c:1790
 #, c-format
 msgid "nothing to commit\n"
 msgstr "nichts zu committen\n"
 
-#: wt-status.c:1784
+#: wt-status.c:1788
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr ""
 "nichts zu committen (benutzen Sie die Option -u, um unversionierte Dateien "
 "anzuzeigen)\n"
 
-#: wt-status.c:1788
+#: wt-status.c:1792
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "nichts zu committen, Arbeitsverzeichnis unverändert\n"
 
-#: wt-status.c:1901
+#: wt-status.c:1905
 msgid "No commits yet on "
 msgstr "Noch keine Commits in "
 
-#: wt-status.c:1905
+#: wt-status.c:1909
 msgid "HEAD (no branch)"
 msgstr "HEAD (kein Branch)"
 
-#: wt-status.c:1936
+#: wt-status.c:1940
 msgid "different"
 msgstr "unterschiedlich"
 
-#: wt-status.c:1938 wt-status.c:1946
+#: wt-status.c:1942 wt-status.c:1950
 msgid "behind "
 msgstr "hinterher "
 
-#: wt-status.c:1941 wt-status.c:1944
+#: wt-status.c:1945 wt-status.c:1948
 msgid "ahead "
 msgstr "voraus "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2466
+#: wt-status.c:2470
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr ""
 "%s nicht möglich: Sie haben Änderungen, die nicht zum Commit vorgemerkt sind."
 
-#: wt-status.c:2472
+#: wt-status.c:2476
 msgid "additionally, your index contains uncommitted changes."
 msgstr "Zusätzlich enthält die Staging-Area nicht committete Änderungen."
 
-#: wt-status.c:2474
+#: wt-status.c:2478
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr ""
 "%s nicht möglich: Die Staging-Area enthält nicht committete Änderungen."
 
+#: compat/precompose_utf8.c:58 builtin/clone.c:452
+#, c-format
+msgid "failed to unlink '%s'"
+msgstr "Konnte '%s' nicht entfernen."
+
 #: builtin/add.c:25
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<Optionen>] [--] <Pfadspezifikation>..."
@@ -8625,7 +8669,7 @@
 msgstr ""
 "Nicht zum Commit vorgemerkte Änderungen nach Aktualisierung der Staging-Area:"
 
-#: builtin/add.c:234 builtin/rev-parse.c:896
+#: builtin/add.c:234 builtin/rev-parse.c:897
 msgid "Could not read the index"
 msgstr "Konnte den Index nicht lesen"
 
@@ -8662,8 +8706,8 @@
 "Die folgenden Pfade werden durch eine Ihrer \".gitignore\" Dateien "
 "ignoriert:\n"
 
-#: builtin/add.c:290 builtin/clean.c:909 builtin/fetch.c:147 builtin/mv.c:124
-#: builtin/prune-packed.c:56 builtin/pull.c:222 builtin/push.c:560
+#: builtin/add.c:290 builtin/clean.c:910 builtin/fetch.c:162 builtin/mv.c:124
+#: builtin/prune-packed.c:56 builtin/pull.c:223 builtin/push.c:547
 #: builtin/remote.c:1345 builtin/rm.c:241 builtin/send-pack.c:165
 msgid "dry run"
 msgstr "Probelauf"
@@ -8721,7 +8765,7 @@
 msgid "check if - even missing - files are ignored in dry run"
 msgstr "prüfen ob - auch fehlende - Dateien im Probelauf ignoriert werden"
 
-#: builtin/add.c:309 builtin/update-index.c:1001
+#: builtin/add.c:309 builtin/update-index.c:1002
 msgid "override the executable bit of the listed files"
 msgstr "das \"ausführbar\"-Bit der aufgelisteten Dateien überschreiben"
 
@@ -8801,120 +8845,116 @@
 msgid "Maybe you wanted to say 'git add .'?\n"
 msgstr "Meinten Sie vielleicht 'git add .'?\n"
 
-#: builtin/am.c:348
+#: builtin/am.c:347
 msgid "could not parse author script"
 msgstr "konnte Autor-Skript nicht parsen"
 
-#: builtin/am.c:432
+#: builtin/am.c:431
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "'%s' wurde durch den applypatch-msg Hook entfernt"
 
-#: builtin/am.c:474
+#: builtin/am.c:473
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Fehlerhafte Eingabezeile: '%s'."
 
-#: builtin/am.c:512
+#: builtin/am.c:511
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Fehler beim Kopieren der Notizen von '%s' nach '%s'"
 
-#: builtin/am.c:538
+#: builtin/am.c:537
 msgid "fseek failed"
 msgstr "\"fseek\" fehlgeschlagen"
 
-#: builtin/am.c:726
+#: builtin/am.c:725
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "konnte Patch '%s' nicht parsen"
 
-#: builtin/am.c:791
+#: builtin/am.c:790
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Es kann nur eine StGIT Patch-Serie auf einmal angewendet werden."
 
-#: builtin/am.c:839
+#: builtin/am.c:838
 msgid "invalid timestamp"
 msgstr "ungültiger Zeitstempel"
 
-#: builtin/am.c:844 builtin/am.c:856
+#: builtin/am.c:843 builtin/am.c:855
 msgid "invalid Date line"
 msgstr "Ungültige \"Date\"-Zeile"
 
-#: builtin/am.c:851
+#: builtin/am.c:850
 msgid "invalid timezone offset"
 msgstr "Ungültiger Offset in der Zeitzone"
 
-#: builtin/am.c:944
+#: builtin/am.c:943
 msgid "Patch format detection failed."
 msgstr "Patch-Formaterkennung fehlgeschlagen."
 
-#: builtin/am.c:949 builtin/clone.c:407
+#: builtin/am.c:948 builtin/clone.c:406
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "Fehler beim Erstellen von Verzeichnis '%s'"
 
-#: builtin/am.c:954
+#: builtin/am.c:953
 msgid "Failed to split patches."
 msgstr "Fehler beim Aufteilen der Patches."
 
-#: builtin/am.c:1084 builtin/commit.c:374
-msgid "unable to write index file"
-msgstr "Konnte Index-Datei nicht schreiben."
-
-#: builtin/am.c:1098
+#: builtin/am.c:1084
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr ""
 "Wenn Sie das Problem aufgelöst haben, führen Sie \"%s --continue\" aus."
 
-#: builtin/am.c:1099
+#: builtin/am.c:1085
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr ""
 "Falls Sie diesen Patch auslassen möchten, führen Sie stattdessen \"%s --skip"
 "\" aus."
 
-#: builtin/am.c:1100
+#: builtin/am.c:1086
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr ""
 "Um den ursprünglichen Branch wiederherzustellen und die Anwendung der "
 "Patches abzubrechen, führen Sie \"%s --abort\" aus."
 
-#: builtin/am.c:1183
+#: builtin/am.c:1169
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 "Patch mit format=flowed versendet; Leerzeichen am Ende von Zeilen könnte "
 "verloren gehen."
 
-#: builtin/am.c:1211
+#: builtin/am.c:1197
 msgid "Patch is empty."
 msgstr "Patch ist leer."
 
-#: builtin/am.c:1277
+#: builtin/am.c:1262
+#, c-format
+msgid "missing author line in commit %s"
+msgstr "Autor-Zeile fehlt in Commit %s"
+
+#: builtin/am.c:1265
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "Ungültige Identifikationszeile: %.*s"
 
-#: builtin/am.c:1299
-#, c-format
-msgid "unable to parse commit %s"
-msgstr "Konnte Commit '%s' nicht parsen."
-
-#: builtin/am.c:1496
+#: builtin/am.c:1484
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
 "Dem Repository fehlen notwendige Blobs um auf einen 3-Wege-Merge "
 "zurückzufallen."
 
-#: builtin/am.c:1498
+#: builtin/am.c:1486
 msgid "Using index info to reconstruct a base tree..."
 msgstr ""
 "Verwende Informationen aus der Staging-Area, um ein Basisverzeichnis "
 "nachzustellen ..."
 
-#: builtin/am.c:1517
+#: builtin/am.c:1505
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -8922,24 +8962,24 @@
 "Haben Sie den Patch per Hand editiert?\n"
 "Er kann nicht auf die Blobs in seiner 'index' Zeile angewendet werden."
 
-#: builtin/am.c:1523
+#: builtin/am.c:1511
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "Falle zurück zum Patchen der Basis und zum 3-Wege-Merge ..."
 
-#: builtin/am.c:1549
+#: builtin/am.c:1537
 msgid "Failed to merge in the changes."
 msgstr "Merge der Änderungen fehlgeschlagen."
 
-#: builtin/am.c:1581
+#: builtin/am.c:1569
 msgid "applying to an empty history"
 msgstr "auf leere Historie anwenden"
 
-#: builtin/am.c:1628 builtin/am.c:1632
+#: builtin/am.c:1616 builtin/am.c:1620
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "Kann nicht fortsetzen: %s existiert nicht"
 
-#: builtin/am.c:1650
+#: builtin/am.c:1638
 msgid "Commit Body is:"
 msgstr "Commit-Beschreibung ist:"
 
@@ -8947,37 +8987,41 @@
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1660
+#: builtin/am.c:1648
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr "Anwenden? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 
-#: builtin/am.c:1710
+#: builtin/am.c:1695 builtin/commit.c:374
+msgid "unable to write index file"
+msgstr "Konnte Index-Datei nicht schreiben."
+
+#: builtin/am.c:1699
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Geänderter Index: kann Patches nicht anwenden (geändert: %s)"
 
-#: builtin/am.c:1750 builtin/am.c:1818
+#: builtin/am.c:1739 builtin/am.c:1807
 #, c-format
 msgid "Applying: %.*s"
 msgstr "Wende an: %.*s"
 
-#: builtin/am.c:1767
+#: builtin/am.c:1756
 msgid "No changes -- Patch already applied."
 msgstr "Keine Änderungen -- Patches bereits angewendet."
 
-#: builtin/am.c:1773
+#: builtin/am.c:1762
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "Anwendung des Patches fehlgeschlagen bei %s %.*s"
 
-#: builtin/am.c:1777
+#: builtin/am.c:1766
 msgid "Use 'git am --show-current-patch' to see the failed patch"
 msgstr ""
 "Benutzen Sie 'git am --show-current-patch', um den\n"
 "fehlgeschlagenen Patch zu sehen."
 
-#: builtin/am.c:1821
+#: builtin/am.c:1810
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -8988,7 +9032,7 @@
 "diese bereits anderweitig eingefügt worden sein; Sie könnten diesen Patch\n"
 "auslassen."
 
-#: builtin/am.c:1828
+#: builtin/am.c:1817
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -9001,17 +9045,17 @@
 "Sie können 'git rm' auf Dateien ausführen, um \"von denen gelöscht\" für\n"
 "diese zu akzeptieren."
 
-#: builtin/am.c:1935 builtin/am.c:1939 builtin/am.c:1951 builtin/reset.c:329
+#: builtin/am.c:1924 builtin/am.c:1928 builtin/am.c:1940 builtin/reset.c:329
 #: builtin/reset.c:337
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "Konnte Objekt '%s' nicht parsen."
 
-#: builtin/am.c:1987
+#: builtin/am.c:1976
 msgid "failed to clean index"
 msgstr "Fehler beim Bereinigen des Index"
 
-#: builtin/am.c:2031
+#: builtin/am.c:2020
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -9019,144 +9063,144 @@
 "Sie scheinen seit dem letzten gescheiterten 'am' HEAD geändert zu haben.\n"
 "Keine Zurücksetzung zu ORIG_HEAD."
 
-#: builtin/am.c:2128
+#: builtin/am.c:2117
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr "Ungültiger Wert für --patch-format: %s"
 
-#: builtin/am.c:2164
+#: builtin/am.c:2153
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<Optionen>] [(<mbox> | <E-Mail-Verzeichnis>)...]"
 
-#: builtin/am.c:2165
+#: builtin/am.c:2154
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<Optionen>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2171
+#: builtin/am.c:2160
 msgid "run interactively"
 msgstr "interaktiv ausführen"
 
-#: builtin/am.c:2173
+#: builtin/am.c:2162
 msgid "historical option -- no-op"
 msgstr "historische Option -- kein Effekt"
 
-#: builtin/am.c:2175
+#: builtin/am.c:2164
 msgid "allow fall back on 3way merging if needed"
 msgstr "erlaube, falls notwendig, das Zurückfallen auf einen 3-Wege-Merge"
 
-#: builtin/am.c:2176 builtin/init-db.c:494 builtin/prune-packed.c:58
-#: builtin/repack.c:296 builtin/stash.c:806
+#: builtin/am.c:2165 builtin/init-db.c:494 builtin/prune-packed.c:58
+#: builtin/repack.c:297 builtin/stash.c:812
 msgid "be quiet"
 msgstr "weniger Ausgaben"
 
-#: builtin/am.c:2178
+#: builtin/am.c:2167
 msgid "add a Signed-off-by line to the commit message"
 msgstr "der Commit-Beschreibung eine Signed-off-by Zeile hinzufügen"
 
-#: builtin/am.c:2181
+#: builtin/am.c:2170
 msgid "recode into utf8 (default)"
 msgstr "nach UTF-8 umkodieren (Standard)"
 
-#: builtin/am.c:2183
+#: builtin/am.c:2172
 msgid "pass -k flag to git-mailinfo"
 msgstr "-k an git-mailinfo übergeben"
 
-#: builtin/am.c:2185
+#: builtin/am.c:2174
 msgid "pass -b flag to git-mailinfo"
 msgstr "-b an git-mailinfo übergeben"
 
-#: builtin/am.c:2187
+#: builtin/am.c:2176
 msgid "pass -m flag to git-mailinfo"
 msgstr "-m an git-mailinfo übergeben"
 
-#: builtin/am.c:2189
+#: builtin/am.c:2178
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "--keep-cr an git-mailsplit für mbox-Format übergeben"
 
-#: builtin/am.c:2192
+#: builtin/am.c:2181
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr "kein --keep-cr an git-mailsplit übergeben, unabhängig von am.keepcr"
 
-#: builtin/am.c:2195
+#: builtin/am.c:2184
 msgid "strip everything before a scissors line"
 msgstr "alles vor einer Scheren-Zeile entfernen"
 
-#: builtin/am.c:2197 builtin/am.c:2200 builtin/am.c:2203 builtin/am.c:2206
-#: builtin/am.c:2209 builtin/am.c:2212 builtin/am.c:2215 builtin/am.c:2218
-#: builtin/am.c:2224
+#: builtin/am.c:2186 builtin/am.c:2189 builtin/am.c:2192 builtin/am.c:2195
+#: builtin/am.c:2198 builtin/am.c:2201 builtin/am.c:2204 builtin/am.c:2207
+#: builtin/am.c:2213
 msgid "pass it through git-apply"
 msgstr "an git-apply übergeben"
 
-#: builtin/am.c:2214 builtin/commit.c:1368 builtin/fmt-merge-msg.c:671
-#: builtin/fmt-merge-msg.c:674 builtin/grep.c:881 builtin/merge.c:249
-#: builtin/pull.c:159 builtin/pull.c:218 builtin/rebase.c:1418
-#: builtin/repack.c:307 builtin/repack.c:311 builtin/repack.c:313
+#: builtin/am.c:2203 builtin/commit.c:1368 builtin/fmt-merge-msg.c:671
+#: builtin/fmt-merge-msg.c:674 builtin/grep.c:883 builtin/merge.c:249
+#: builtin/pull.c:160 builtin/pull.c:219 builtin/rebase.c:1442
+#: builtin/repack.c:308 builtin/repack.c:312 builtin/repack.c:314
 #: builtin/show-branch.c:650 builtin/show-ref.c:172 builtin/tag.c:403
-#: parse-options.h:141 parse-options.h:162 parse-options.h:312
+#: parse-options.h:150 parse-options.h:171 parse-options.h:312
 msgid "n"
 msgstr "Anzahl"
 
-#: builtin/am.c:2220 builtin/branch.c:661 builtin/for-each-ref.c:38
-#: builtin/replace.c:554 builtin/tag.c:437 builtin/verify-tag.c:38
+#: builtin/am.c:2209 builtin/branch.c:661 builtin/for-each-ref.c:38
+#: builtin/replace.c:555 builtin/tag.c:437 builtin/verify-tag.c:38
 msgid "format"
 msgstr "Format"
 
-#: builtin/am.c:2221
+#: builtin/am.c:2210
 msgid "format the patch(es) are in"
 msgstr "Patch-Format"
 
-#: builtin/am.c:2227
+#: builtin/am.c:2216
 msgid "override error message when patch failure occurs"
 msgstr "Meldung bei fehlerhafter Patch-Anwendung überschreiben"
 
-#: builtin/am.c:2229
+#: builtin/am.c:2218
 msgid "continue applying patches after resolving a conflict"
 msgstr "Anwendung der Patches nach Auflösung eines Konfliktes fortsetzen"
 
-#: builtin/am.c:2232
+#: builtin/am.c:2221
 msgid "synonyms for --continue"
 msgstr "Synonyme für --continue"
 
-#: builtin/am.c:2235
+#: builtin/am.c:2224
 msgid "skip the current patch"
 msgstr "den aktuellen Patch auslassen"
 
-#: builtin/am.c:2238
+#: builtin/am.c:2227
 msgid "restore the original branch and abort the patching operation."
 msgstr ""
 "ursprünglichen Branch wiederherstellen und Anwendung der Patches abbrechen"
 
-#: builtin/am.c:2241
+#: builtin/am.c:2230
 msgid "abort the patching operation but keep HEAD where it is."
 msgstr "Patch-Operation abbrechen, aber HEAD an aktueller Stelle belassen"
 
-#: builtin/am.c:2244
+#: builtin/am.c:2233
 msgid "show the patch being applied."
 msgstr "den Patch, der gerade angewendet wird, anzeigen"
 
-#: builtin/am.c:2248
+#: builtin/am.c:2237
 msgid "lie about committer date"
 msgstr "Autor-Datum als Commit-Datum verwenden"
 
-#: builtin/am.c:2250
+#: builtin/am.c:2239
 msgid "use current timestamp for author date"
 msgstr "aktuellen Zeitstempel als Autor-Datum verwenden"
 
-#: builtin/am.c:2252 builtin/commit-tree.c:120 builtin/commit.c:1511
-#: builtin/merge.c:286 builtin/pull.c:193 builtin/rebase.c:489
-#: builtin/rebase.c:1459 builtin/revert.c:117 builtin/tag.c:418
+#: builtin/am.c:2241 builtin/commit-tree.c:120 builtin/commit.c:1511
+#: builtin/merge.c:286 builtin/pull.c:194 builtin/rebase.c:490
+#: builtin/rebase.c:1483 builtin/revert.c:117 builtin/tag.c:418
 msgid "key-id"
 msgstr "GPG-Schlüsselkennung"
 
-#: builtin/am.c:2253 builtin/rebase.c:490 builtin/rebase.c:1460
+#: builtin/am.c:2242 builtin/rebase.c:491 builtin/rebase.c:1484
 msgid "GPG-sign commits"
 msgstr "Commits mit GPG signieren"
 
-#: builtin/am.c:2256
+#: builtin/am.c:2245
 msgid "(internal use for git-rebase)"
 msgstr "(intern für git-rebase verwendet)"
 
-#: builtin/am.c:2274
+#: builtin/am.c:2263
 msgid ""
 "The -b/--binary option has been a no-op for long time, and\n"
 "it will be removed. Please do not use it anymore."
@@ -9164,16 +9208,16 @@
 "Die -b/--binary Option hat seit Langem keinen Effekt und wird\n"
 "entfernt. Bitte verwenden Sie diese nicht mehr."
 
-#: builtin/am.c:2281
+#: builtin/am.c:2270
 msgid "failed to read the index"
 msgstr "Fehler beim Lesen des Index"
 
-#: builtin/am.c:2296
+#: builtin/am.c:2285
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr "Vorheriges Rebase-Verzeichnis %s existiert noch, aber mbox gegeben."
 
-#: builtin/am.c:2320
+#: builtin/am.c:2309
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -9182,11 +9226,11 @@
 "Stray %s Verzeichnis gefunden.\n"
 "Benutzen Sie \"git am --abort\", um es zu entfernen."
 
-#: builtin/am.c:2326
+#: builtin/am.c:2315
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "Es ist keine Auflösung im Gange, es wird nicht fortgesetzt."
 
-#: builtin/am.c:2336
+#: builtin/am.c:2325
 msgid "interactive mode requires patches on the command line"
 msgstr "Interaktiver Modus benötigt Patches über die Kommandozeile"
 
@@ -9505,159 +9549,159 @@
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms benötigt 0 oder 1 Argument."
 
-#: builtin/blame.c:32
+#: builtin/blame.c:31
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
 msgstr "git blame [<Optionen>] [<rev-opts>] [<Commit>] [--] <Datei>"
 
-#: builtin/blame.c:37
+#: builtin/blame.c:36
 msgid "<rev-opts> are documented in git-rev-list(1)"
 msgstr "<rev-opts> sind dokumentiert in git-rev-list(1)"
 
-#: builtin/blame.c:410
+#: builtin/blame.c:409
 #, c-format
 msgid "expecting a color: %s"
 msgstr "Erwarte eine Farbe: %s"
 
-#: builtin/blame.c:417
+#: builtin/blame.c:416
 msgid "must end with a color"
 msgstr "Muss mit einer Farbe enden."
 
-#: builtin/blame.c:730
+#: builtin/blame.c:729
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr "Ungültige Farbe '%s' in color.blame.repeatedLines."
 
-#: builtin/blame.c:748
+#: builtin/blame.c:747
 msgid "invalid value for blame.coloring"
 msgstr "Ungültiger Wert für blame.coloring."
 
-#: builtin/blame.c:823
+#: builtin/blame.c:822
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "Konnte Commit %s zum Ignorieren nicht finden"
 
-#: builtin/blame.c:845
+#: builtin/blame.c:844
 msgid "Show blame entries as we find them, incrementally"
 msgstr "\"blame\"-Einträge schrittweise anzeigen, während wir sie generieren"
 
-#: builtin/blame.c:846
+#: builtin/blame.c:845
 msgid "Show blank SHA-1 for boundary commits (Default: off)"
 msgstr "leere SHA-1 für Grenz-Commits anzeigen (Standard: aus)"
 
-#: builtin/blame.c:847
+#: builtin/blame.c:846
 msgid "Do not treat root commits as boundaries (Default: off)"
 msgstr "Root-Commits nicht als Grenzen behandeln (Standard: aus)"
 
-#: builtin/blame.c:848
+#: builtin/blame.c:847
 msgid "Show work cost statistics"
 msgstr "Statistiken zum Arbeitsaufwand anzeigen"
 
-#: builtin/blame.c:849
+#: builtin/blame.c:848
 msgid "Force progress reporting"
 msgstr "Fortschrittsanzeige erzwingen"
 
-#: builtin/blame.c:850
+#: builtin/blame.c:849
 msgid "Show output score for blame entries"
 msgstr "Ausgabebewertung für \"blame\"-Einträge anzeigen"
 
-#: builtin/blame.c:851
+#: builtin/blame.c:850
 msgid "Show original filename (Default: auto)"
 msgstr "ursprünglichen Dateinamen anzeigen (Standard: auto)"
 
-#: builtin/blame.c:852
+#: builtin/blame.c:851
 msgid "Show original linenumber (Default: off)"
 msgstr "ursprüngliche Zeilennummer anzeigen (Standard: aus)"
 
-#: builtin/blame.c:853
+#: builtin/blame.c:852
 msgid "Show in a format designed for machine consumption"
 msgstr "Anzeige in einem Format für maschinelle Auswertung"
 
-#: builtin/blame.c:854
+#: builtin/blame.c:853
 msgid "Show porcelain format with per-line commit information"
 msgstr ""
 "Anzeige in Format für Fremdprogramme mit Commit-Informationen pro Zeile"
 
-#: builtin/blame.c:855
+#: builtin/blame.c:854
 msgid "Use the same output mode as git-annotate (Default: off)"
 msgstr ""
 "Den gleichen Ausgabemodus benutzen wie \"git-annotate\" (Standard: aus)"
 
-#: builtin/blame.c:856
+#: builtin/blame.c:855
 msgid "Show raw timestamp (Default: off)"
 msgstr "Unbearbeiteten Zeitstempel anzeigen (Standard: aus)"
 
-#: builtin/blame.c:857
+#: builtin/blame.c:856
 msgid "Show long commit SHA1 (Default: off)"
 msgstr "Langen Commit-SHA1 anzeigen (Standard: aus)"
 
-#: builtin/blame.c:858
+#: builtin/blame.c:857
 msgid "Suppress author name and timestamp (Default: off)"
 msgstr "Den Namen des Autors und den Zeitstempel unterdrücken (Standard: aus)"
 
-#: builtin/blame.c:859
+#: builtin/blame.c:858
 msgid "Show author email instead of name (Default: off)"
 msgstr ""
 "Anstatt des Namens die E-Mail-Adresse des Autors anzeigen (Standard: aus)"
 
-#: builtin/blame.c:860
+#: builtin/blame.c:859
 msgid "Ignore whitespace differences"
 msgstr "Unterschiede im Whitespace ignorieren"
 
-#: builtin/blame.c:861 builtin/log.c:1629
+#: builtin/blame.c:860 builtin/log.c:1630
 msgid "rev"
 msgstr "Commit"
 
-#: builtin/blame.c:861
+#: builtin/blame.c:860
 msgid "Ignore <rev> when blaming"
 msgstr "Ignoriere <rev> beim Ausführen von 'blame'"
 
-#: builtin/blame.c:862
+#: builtin/blame.c:861
 msgid "Ignore revisions from <file>"
 msgstr "Ignoriere Commits aus <Datei>"
 
-#: builtin/blame.c:863
+#: builtin/blame.c:862
 msgid "color redundant metadata from previous line differently"
 msgstr "redundante Metadaten der vorherigen Zeile unterschiedlich einfärben"
 
-#: builtin/blame.c:864
+#: builtin/blame.c:863
 msgid "color lines by age"
 msgstr "Zeilen nach Alter einfärben"
 
-#: builtin/blame.c:871
+#: builtin/blame.c:870
 msgid "Use an experimental heuristic to improve diffs"
 msgstr ""
 "eine experimentelle Heuristik zur Verbesserung der Darstellung\n"
 "von Unterschieden verwenden"
 
-#: builtin/blame.c:873
+#: builtin/blame.c:872
 msgid "Spend extra cycles to find better match"
 msgstr "Länger arbeiten, um bessere Übereinstimmungen zu finden"
 
-#: builtin/blame.c:874
+#: builtin/blame.c:873
 msgid "Use revisions from <file> instead of calling git-rev-list"
 msgstr "Commits von <Datei> benutzen, anstatt \"git-rev-list\" aufzurufen"
 
-#: builtin/blame.c:875
+#: builtin/blame.c:874
 msgid "Use <file>'s contents as the final image"
 msgstr "Inhalte der <Datei>en als endgültiges Abbild benutzen"
 
-#: builtin/blame.c:876 builtin/blame.c:877
+#: builtin/blame.c:875 builtin/blame.c:876
 msgid "score"
 msgstr "Bewertung"
 
-#: builtin/blame.c:876
+#: builtin/blame.c:875
 msgid "Find line copies within and across files"
 msgstr "kopierte Zeilen innerhalb oder zwischen Dateien finden"
 
-#: builtin/blame.c:877
+#: builtin/blame.c:876
 msgid "Find line movements within and across files"
 msgstr "verschobene Zeilen innerhalb oder zwischen Dateien finden"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:877
 msgid "n,m"
 msgstr "n,m"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:877
 msgid "Process only line range n,m, counting from 1"
 msgstr "nur Zeilen im Bereich n,m verarbeiten, gezählt von 1"
 
@@ -9903,7 +9947,7 @@
 msgid "do not use"
 msgstr "nicht verwenden"
 
-#: builtin/branch.c:626 builtin/rebase.c:485
+#: builtin/branch.c:626 builtin/rebase.c:486
 msgid "upstream"
 msgstr "Upstream"
 
@@ -10015,7 +10059,7 @@
 msgid "format to use for the output"
 msgstr "für die Ausgabe zu verwendendes Format"
 
-#: builtin/branch.c:684 builtin/clone.c:761
+#: builtin/branch.c:684 builtin/clone.c:760
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD wurde nicht unter \"refs/heads\" gefunden!"
 
@@ -10122,7 +10166,7 @@
 msgid "Need a repository to unbundle."
 msgstr "Zum Entpacken wird ein Repository benötigt."
 
-#: builtin/cat-file.c:594
+#: builtin/cat-file.c:595
 msgid ""
 "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
 "p | <type> | --textconv | --filters) [--path=<path>] <object>"
@@ -10130,7 +10174,7 @@
 "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
 "p | <Art> | --textconv | --filters) [--path=<Pfad>] <Objekt>"
 
-#: builtin/cat-file.c:595
+#: builtin/cat-file.c:596
 msgid ""
 "git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
 "filters]"
@@ -10138,76 +10182,76 @@
 "git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
 "filters]"
 
-#: builtin/cat-file.c:616
+#: builtin/cat-file.c:617
 msgid "only one batch option may be specified"
 msgstr "Nur eine Batch-Option erlaubt."
 
-#: builtin/cat-file.c:634
+#: builtin/cat-file.c:635
 msgid "<type> can be one of: blob, tree, commit, tag"
 msgstr "<Art> kann sein: blob, tree, commit, tag"
 
-#: builtin/cat-file.c:635
+#: builtin/cat-file.c:636
 msgid "show object type"
 msgstr "Objektart anzeigen"
 
-#: builtin/cat-file.c:636
+#: builtin/cat-file.c:637
 msgid "show object size"
 msgstr "Objektgröße anzeigen"
 
-#: builtin/cat-file.c:638
+#: builtin/cat-file.c:639
 msgid "exit with zero when there's no error"
 msgstr "mit Rückgabewert 0 beenden, wenn kein Fehler aufgetreten ist"
 
-#: builtin/cat-file.c:639
+#: builtin/cat-file.c:640
 msgid "pretty-print object's content"
 msgstr "ansprechende Anzeige des Objektinhaltes"
 
-#: builtin/cat-file.c:641
+#: builtin/cat-file.c:642
 msgid "for blob objects, run textconv on object's content"
 msgstr "eine Textkonvertierung auf den Inhalt von Blob-Objekten ausführen"
 
-#: builtin/cat-file.c:643
+#: builtin/cat-file.c:644
 msgid "for blob objects, run filters on object's content"
 msgstr "für Blob-Objekte, Filter auf Objekt-Inhalte ausführen"
 
-#: builtin/cat-file.c:644 git-submodule.sh:936
+#: builtin/cat-file.c:645 git-submodule.sh:936
 msgid "blob"
 msgstr "Blob"
 
-#: builtin/cat-file.c:645
+#: builtin/cat-file.c:646
 msgid "use a specific path for --textconv/--filters"
 msgstr "einen bestimmten Pfad für --textconv/--filters verwenden"
 
-#: builtin/cat-file.c:647
+#: builtin/cat-file.c:648
 msgid "allow -s and -t to work with broken/corrupt objects"
 msgstr "-s und -t mit beschädigten Objekten erlauben"
 
-#: builtin/cat-file.c:648
+#: builtin/cat-file.c:649
 msgid "buffer --batch output"
 msgstr "Ausgabe von --batch puffern"
 
-#: builtin/cat-file.c:650
+#: builtin/cat-file.c:651
 msgid "show info and content of objects fed from the standard input"
 msgstr ""
 "Anzeige von Informationen und Inhalt von Objekten, gelesen von der Standard-"
 "Eingabe"
 
-#: builtin/cat-file.c:654
+#: builtin/cat-file.c:655
 msgid "show info about objects fed from the standard input"
 msgstr ""
 "Anzeige von Informationen über Objekte, gelesen von der Standard-Eingabe"
 
-#: builtin/cat-file.c:658
+#: builtin/cat-file.c:659
 msgid "follow in-tree symlinks (used with --batch or --batch-check)"
 msgstr ""
 "symbolischen Verknüpfungen innerhalb des Repositories folgen (verwendet mit "
 "--batch oder --batch-check)"
 
-#: builtin/cat-file.c:660
+#: builtin/cat-file.c:661
 msgid "show all objects with --batch or --batch-check"
 msgstr "alle Objekte mit --batch oder --batch-check anzeigen"
 
-#: builtin/cat-file.c:662
+#: builtin/cat-file.c:663
 msgid "do not order --batch-all-objects output"
 msgstr "Ausgabe von --batch-all-objects nicht ordnen"
 
@@ -10235,8 +10279,8 @@
 msgid "terminate input and output records by a NUL character"
 msgstr "Einträge von Ein- und Ausgabe mit NUL-Zeichen abschließen"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1433 builtin/gc.c:538
-#: builtin/worktree.c:507
+#: builtin/check-ignore.c:21 builtin/checkout.c:1433 builtin/gc.c:537
+#: builtin/worktree.c:506
 msgid "suppress progress reporting"
 msgstr "Fortschrittsanzeige unterdrücken"
 
@@ -10331,7 +10375,7 @@
 #: builtin/checkout-index.c:178 builtin/column.c:31
 #: builtin/submodule--helper.c:1373 builtin/submodule--helper.c:1376
 #: builtin/submodule--helper.c:1384 builtin/submodule--helper.c:1857
-#: builtin/worktree.c:680
+#: builtin/worktree.c:679
 msgid "string"
 msgstr "Zeichenkette"
 
@@ -10360,99 +10404,99 @@
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<Optionen>] [--source=<Branch>] <Datei>..."
 
-#: builtin/checkout.c:172 builtin/checkout.c:211
+#: builtin/checkout.c:173 builtin/checkout.c:212
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "Pfad '%s' hat nicht unsere Version."
 
-#: builtin/checkout.c:174 builtin/checkout.c:213
+#: builtin/checkout.c:175 builtin/checkout.c:214
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "Pfad '%s' hat nicht deren Version."
 
-#: builtin/checkout.c:190
+#: builtin/checkout.c:191
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "Pfad '%s' hat nicht alle notwendigen Versionen."
 
-#: builtin/checkout.c:240
+#: builtin/checkout.c:241
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "Pfad '%s' hat nicht die notwendigen Versionen."
 
-#: builtin/checkout.c:258
+#: builtin/checkout.c:259
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "Pfad '%s': kann nicht zusammenführen"
 
-#: builtin/checkout.c:274
+#: builtin/checkout.c:275
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "Konnte Merge-Ergebnis von '%s' nicht hinzufügen."
 
-#: builtin/checkout.c:374
+#: builtin/checkout.c:375
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "%d Merge-Konflikt wieder erstellt"
 msgstr[1] "%d Merge-Konflikte wieder erstellt"
 
-#: builtin/checkout.c:379
+#: builtin/checkout.c:380
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "%d Pfad von %s aktualisiert"
 msgstr[1] "%d Pfade von %s aktualisiert"
 
-#: builtin/checkout.c:386
+#: builtin/checkout.c:387
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "%d Pfad vom Index aktualisiert"
 msgstr[1] "%d Pfade vom Index aktualisiert"
 
-#: builtin/checkout.c:409 builtin/checkout.c:412 builtin/checkout.c:415
-#: builtin/checkout.c:419
+#: builtin/checkout.c:410 builtin/checkout.c:413 builtin/checkout.c:416
+#: builtin/checkout.c:420
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "'%s' kann nicht mit der Aktualisierung von Pfaden verwendet werden"
 
-#: builtin/checkout.c:422 builtin/checkout.c:425
+#: builtin/checkout.c:423 builtin/checkout.c:426
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr "'%s' kann nicht mit '%s' verwendet werden"
 
-#: builtin/checkout.c:429
+#: builtin/checkout.c:430
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr ""
 "Kann nicht gleichzeitig Pfade aktualisieren und zu Branch '%s' wechseln"
 
-#: builtin/checkout.c:433
+#: builtin/checkout.c:434
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "Weder '%s' noch '%s' ist angegeben"
 
-#: builtin/checkout.c:437
+#: builtin/checkout.c:438
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "'%s' kann nur genutzt werden, wenn '%s' nicht verwendet wird"
 
-#: builtin/checkout.c:442 builtin/checkout.c:447
+#: builtin/checkout.c:443 builtin/checkout.c:448
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "'%s' oder '%s' kann nicht mit %s verwendet werden"
 
-#: builtin/checkout.c:506 builtin/checkout.c:513
+#: builtin/checkout.c:507 builtin/checkout.c:514
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "Pfad '%s' ist nicht zusammengeführt."
 
-#: builtin/checkout.c:679
+#: builtin/checkout.c:680
 msgid "you need to resolve your current index first"
 msgstr "Sie müssen zuerst die Konflikte in Ihrem aktuellen Index auflösen."
 
-#: builtin/checkout.c:729
+#: builtin/checkout.c:730
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -10461,13 +10505,6 @@
 "Kann nicht mit vorgemerkten Änderungen in folgenden Dateien fortsetzen:\n"
 "%s"
 
-#: builtin/checkout.c:736
-#, c-format
-msgid "staged changes in the following files may be lost: %s"
-msgstr ""
-"Zum Commit vorgemerkte Änderungen in den folgenden Dateien gehen eventuell "
-"verloren: %s"
-
 #: builtin/checkout.c:833
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
@@ -10477,7 +10514,7 @@
 msgid "HEAD is now at"
 msgstr "HEAD ist jetzt bei"
 
-#: builtin/checkout.c:879 builtin/clone.c:714
+#: builtin/checkout.c:879 builtin/clone.c:713
 msgid "unable to update HEAD"
 msgstr "Konnte HEAD nicht aktualisieren."
 
@@ -10592,7 +10629,7 @@
 "Bitte benutzen Sie -- (und optional --no-guess), um diese\n"
 "eindeutig voneinander zu unterscheiden."
 
-#: builtin/checkout.c:1243 builtin/worktree.c:291 builtin/worktree.c:456
+#: builtin/checkout.c:1243 builtin/worktree.c:290 builtin/worktree.c:455
 #, c-format
 msgid "invalid reference: %s"
 msgstr "Ungültige Referenz: %s"
@@ -10699,9 +10736,9 @@
 msgid "missing branch or commit argument"
 msgstr "Branch- oder Commit-Argument fehlt"
 
-#: builtin/checkout.c:1437 builtin/clone.c:91 builtin/fetch.c:151
-#: builtin/merge.c:285 builtin/pull.c:137 builtin/push.c:575
-#: builtin/send-pack.c:174
+#: builtin/checkout.c:1437 builtin/clone.c:90 builtin/commit-graph.c:59
+#: builtin/commit-graph.c:180 builtin/fetch.c:166 builtin/merge.c:285
+#: builtin/pull.c:138 builtin/push.c:562 builtin/send-pack.c:174
 msgid "force progress reporting"
 msgstr "Fortschrittsanzeige erzwingen"
 
@@ -10709,7 +10746,7 @@
 msgid "perform a 3-way merge with the new branch"
 msgstr "einen 3-Wege-Merge mit dem neuen Branch ausführen"
 
-#: builtin/checkout.c:1439 builtin/log.c:1617 parse-options.h:318
+#: builtin/checkout.c:1439 builtin/log.c:1618 parse-options.h:318
 msgid "style"
 msgstr "Stil"
 
@@ -10717,7 +10754,7 @@
 msgid "conflict style (merge or diff3)"
 msgstr "Konfliktstil (merge oder diff3)"
 
-#: builtin/checkout.c:1452 builtin/worktree.c:504
+#: builtin/checkout.c:1452 builtin/worktree.c:503
 msgid "detach HEAD at named commit"
 msgstr "HEAD bei benanntem Commit loslösen"
 
@@ -10839,9 +10876,9 @@
 "bevorzugen möchten, z.B. 'origin', könnten Sie die Einstellung\n"
 "checkout.defaultRemote=origin in Ihrer Konfiguration setzen."
 
-#: builtin/checkout.c:1691 builtin/checkout.c:1693 builtin/checkout.c:1733
-#: builtin/checkout.c:1735 builtin/clone.c:121 builtin/remote.c:169
-#: builtin/remote.c:171 builtin/worktree.c:500 builtin/worktree.c:502
+#: builtin/checkout.c:1691 builtin/checkout.c:1693 builtin/checkout.c:1742
+#: builtin/checkout.c:1744 builtin/clone.c:120 builtin/remote.c:169
+#: builtin/remote.c:171 builtin/worktree.c:499 builtin/worktree.c:501
 msgid "branch"
 msgstr "Branch"
 
@@ -10859,46 +10896,45 @@
 
 #: builtin/checkout.c:1697
 msgid "second guess 'git checkout <no-such-branch>' (default)"
-msgstr ""
-"Zweite Vermutung 'git checkout <kein-solcher-Branch>' (Standard)"
+msgstr "Zweite Vermutung 'git checkout <kein-solcher-Branch>' (Standard)"
 
 #: builtin/checkout.c:1698
 msgid "use overlay mode (default)"
 msgstr "benutze Overlay-Modus (Standard)"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1743
 msgid "create and switch to a new branch"
 msgstr "einen neuen Branch erzeugen und dahin wechseln"
 
-#: builtin/checkout.c:1736
+#: builtin/checkout.c:1745
 msgid "create/reset and switch to a branch"
 msgstr "einen Branch erstellen/umsetzen und dahin wechseln"
 
-#: builtin/checkout.c:1738
+#: builtin/checkout.c:1747
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "Zweite Vermutung 'git switch <kein-solcher-Branch>'"
 
-#: builtin/checkout.c:1740
+#: builtin/checkout.c:1749
 msgid "throw away local modifications"
 msgstr "lokale Änderungen verwerfen"
 
-#: builtin/checkout.c:1772
+#: builtin/checkout.c:1781
 msgid "which tree-ish to checkout from"
 msgstr "Von welcher Commit-Referenz ausgecheckt werden soll"
 
-#: builtin/checkout.c:1774
+#: builtin/checkout.c:1783
 msgid "restore the index"
 msgstr "Index wiederherstellen"
 
-#: builtin/checkout.c:1776
+#: builtin/checkout.c:1785
 msgid "restore the working tree (default)"
 msgstr "das Arbeitsverzeichnis wiederherstellen (Standard)"
 
-#: builtin/checkout.c:1778
+#: builtin/checkout.c:1787
 msgid "ignore unmerged entries"
 msgstr "ignoriere nicht zusammengeführte Einträge"
 
-#: builtin/checkout.c:1779
+#: builtin/checkout.c:1788
 msgid "use overlay mode"
 msgstr "benutze Overlay-Modus"
 
@@ -10938,7 +10974,7 @@
 msgid "could not lstat %s\n"
 msgstr "Konnte 'lstat' nicht für %s ausführen\n"
 
-#: builtin/clean.c:300 git-add--interactive.perl:593
+#: builtin/clean.c:301 git-add--interactive.perl:593
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -10951,7 +10987,7 @@
 "foo        - Element anhand eines eindeutigen Präfix auswählen\n"
 "           - (leer) nichts auswählen\n"
 
-#: builtin/clean.c:304 git-add--interactive.perl:602
+#: builtin/clean.c:305 git-add--interactive.perl:602
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -10972,38 +11008,38 @@
 "*          - alle Elemente auswählen\n"
 "           - (leer) Auswahl beenden\n"
 
-#: builtin/clean.c:520 git-add--interactive.perl:568
+#: builtin/clean.c:521 git-add--interactive.perl:568
 #: git-add--interactive.perl:573
 #, c-format, perl-format
 msgid "Huh (%s)?\n"
 msgstr "Wie bitte (%s)?\n"
 
-#: builtin/clean.c:662
+#: builtin/clean.c:663
 #, c-format
 msgid "Input ignore patterns>> "
 msgstr "Ignorier-Muster eingeben>> "
 
-#: builtin/clean.c:699
+#: builtin/clean.c:700
 #, c-format
 msgid "WARNING: Cannot find items matched by: %s"
 msgstr "WARNUNG: Kann keine Einträge finden die Muster entsprechen: %s"
 
-#: builtin/clean.c:720
+#: builtin/clean.c:721
 msgid "Select items to delete"
 msgstr "Wählen Sie Einträge zum Löschen"
 
 #. TRANSLATORS: Make sure to keep [y/N] as is
-#: builtin/clean.c:761
+#: builtin/clean.c:762
 #, c-format
 msgid "Remove %s [y/N]? "
 msgstr "'%s' löschen [y/N]? "
 
-#: builtin/clean.c:786 git-add--interactive.perl:1763
+#: builtin/clean.c:787 git-add--interactive.perl:1763
 #, c-format
 msgid "Bye.\n"
 msgstr "Tschüss.\n"
 
-#: builtin/clean.c:794
+#: builtin/clean.c:795
 msgid ""
 "clean               - start cleaning\n"
 "filter by pattern   - exclude items from deletion\n"
@@ -11021,64 +11057,64 @@
 "help                - diese Meldung anzeigen\n"
 "?                   - Hilfe zur Auswahl mittels Eingabe anzeigen"
 
-#: builtin/clean.c:821 git-add--interactive.perl:1849
+#: builtin/clean.c:822 git-add--interactive.perl:1849
 msgid "*** Commands ***"
 msgstr "*** Befehle ***"
 
-#: builtin/clean.c:822 git-add--interactive.perl:1846
+#: builtin/clean.c:823 git-add--interactive.perl:1846
 msgid "What now"
 msgstr "Was nun"
 
-#: builtin/clean.c:830
+#: builtin/clean.c:831
 msgid "Would remove the following item:"
 msgid_plural "Would remove the following items:"
 msgstr[0] "Würde das folgende Element entfernen:"
 msgstr[1] "Würde die folgenden Elemente entfernen:"
 
-#: builtin/clean.c:846
+#: builtin/clean.c:847
 msgid "No more files to clean, exiting."
 msgstr "Keine Dateien mehr zum Löschen, beende."
 
-#: builtin/clean.c:908
+#: builtin/clean.c:909
 msgid "do not print names of files removed"
 msgstr "keine Namen von gelöschten Dateien ausgeben"
 
-#: builtin/clean.c:910
+#: builtin/clean.c:911
 msgid "force"
 msgstr "Aktion erzwingen"
 
-#: builtin/clean.c:911
+#: builtin/clean.c:912
 msgid "interactive cleaning"
 msgstr "interaktives Clean"
 
-#: builtin/clean.c:913
+#: builtin/clean.c:914
 msgid "remove whole directories"
 msgstr "ganze Verzeichnisse löschen"
 
-#: builtin/clean.c:914 builtin/describe.c:546 builtin/describe.c:548
-#: builtin/grep.c:899 builtin/log.c:176 builtin/log.c:178
-#: builtin/ls-files.c:557 builtin/name-rev.c:413 builtin/name-rev.c:415
+#: builtin/clean.c:915 builtin/describe.c:548 builtin/describe.c:550
+#: builtin/grep.c:901 builtin/log.c:176 builtin/log.c:178
+#: builtin/ls-files.c:557 builtin/name-rev.c:417 builtin/name-rev.c:419
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr "Muster"
 
-#: builtin/clean.c:915
+#: builtin/clean.c:916
 msgid "add <pattern> to ignore rules"
 msgstr "<Muster> zu den Regeln für ignorierte Pfade hinzufügen"
 
-#: builtin/clean.c:916
+#: builtin/clean.c:917
 msgid "remove ignored files, too"
 msgstr "auch ignorierte Dateien löschen"
 
-#: builtin/clean.c:918
+#: builtin/clean.c:919
 msgid "remove only ignored files"
 msgstr "nur ignorierte Dateien löschen"
 
-#: builtin/clean.c:936
+#: builtin/clean.c:937
 msgid "-x and -X cannot be used together"
 msgstr "Die Optionen -x und -X können nicht gemeinsam verwendet werden."
 
-#: builtin/clean.c:940
+#: builtin/clean.c:941
 msgid ""
 "clean.requireForce set to true and neither -i, -n, nor -f given; refusing to "
 "clean"
@@ -11086,7 +11122,7 @@
 "clean.requireForce auf \"true\" gesetzt und weder -i, -n noch -f gegeben; "
 "\"clean\" verweigert"
 
-#: builtin/clean.c:943
+#: builtin/clean.c:944
 msgid ""
 "clean.requireForce defaults to true and neither -i, -n, nor -f given; "
 "refusing to clean"
@@ -11094,166 +11130,166 @@
 "clean.requireForce standardmäßig auf \"true\" gesetzt und weder -i, -n noch -"
 "f gegeben; \"clean\" verweigert"
 
-#: builtin/clone.c:46
+#: builtin/clone.c:45
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<Optionen>] [--] <Repository> [<Verzeichnis>]"
 
-#: builtin/clone.c:93
+#: builtin/clone.c:92
 msgid "don't create a checkout"
 msgstr "kein Auschecken"
 
-#: builtin/clone.c:94 builtin/clone.c:96 builtin/init-db.c:489
+#: builtin/clone.c:93 builtin/clone.c:95 builtin/init-db.c:489
 msgid "create a bare repository"
 msgstr "ein Bare-Repository erstellen"
 
-#: builtin/clone.c:98
+#: builtin/clone.c:97
 msgid "create a mirror repository (implies bare)"
 msgstr "ein Spiegelarchiv erstellen (impliziert --bare)"
 
-#: builtin/clone.c:100
+#: builtin/clone.c:99
 msgid "to clone from a local repository"
 msgstr "von einem lokalen Repository klonen"
 
-#: builtin/clone.c:102
+#: builtin/clone.c:101
 msgid "don't use local hardlinks, always copy"
 msgstr "lokal keine harten Verweise verwenden, immer Kopien"
 
-#: builtin/clone.c:104
+#: builtin/clone.c:103
 msgid "setup as shared repository"
 msgstr "als verteiltes Repository einrichten"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:106
 msgid "pathspec"
 msgstr "Pfadspezifikation"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:106
 msgid "initialize submodules in the clone"
 msgstr "Submodule im Klon initialisieren"
 
-#: builtin/clone.c:110
+#: builtin/clone.c:109
 msgid "number of submodules cloned in parallel"
 msgstr "Anzahl der parallel zu klonenden Submodule"
 
-#: builtin/clone.c:111 builtin/init-db.c:486
+#: builtin/clone.c:110 builtin/init-db.c:486
 msgid "template-directory"
 msgstr "Vorlagenverzeichnis"
 
-#: builtin/clone.c:112 builtin/init-db.c:487
+#: builtin/clone.c:111 builtin/init-db.c:487
 msgid "directory from which templates will be used"
 msgstr "Verzeichnis, von welchem die Vorlagen verwendet werden"
 
-#: builtin/clone.c:114 builtin/clone.c:116 builtin/submodule--helper.c:1380
+#: builtin/clone.c:113 builtin/clone.c:115 builtin/submodule--helper.c:1380
 #: builtin/submodule--helper.c:1860
 msgid "reference repository"
 msgstr "Repository referenzieren"
 
-#: builtin/clone.c:118 builtin/submodule--helper.c:1382
+#: builtin/clone.c:117 builtin/submodule--helper.c:1382
 #: builtin/submodule--helper.c:1862
 msgid "use --reference only while cloning"
 msgstr "--reference nur während des Klonens benutzen"
 
-#: builtin/clone.c:119 builtin/column.c:27 builtin/merge-file.c:46
-#: builtin/pack-objects.c:3314 builtin/repack.c:319
+#: builtin/clone.c:118 builtin/column.c:27 builtin/merge-file.c:46
+#: builtin/pack-objects.c:3294 builtin/repack.c:320
 msgid "name"
 msgstr "Name"
 
-#: builtin/clone.c:120
+#: builtin/clone.c:119
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "<Name> statt 'origin' für Upstream-Repository verwenden"
 
-#: builtin/clone.c:122
+#: builtin/clone.c:121
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "<Branch> auschecken, anstatt HEAD des Remote-Repositories"
 
-#: builtin/clone.c:124
+#: builtin/clone.c:123
 msgid "path to git-upload-pack on the remote"
 msgstr "Pfad zu \"git-upload-pack\" auf der Gegenseite"
 
-#: builtin/clone.c:125 builtin/fetch.c:152 builtin/grep.c:838
-#: builtin/pull.c:226
+#: builtin/clone.c:124 builtin/fetch.c:167 builtin/grep.c:840
+#: builtin/pull.c:227
 msgid "depth"
 msgstr "Tiefe"
 
-#: builtin/clone.c:126
+#: builtin/clone.c:125
 msgid "create a shallow clone of that depth"
 msgstr ""
 "einen Klon mit unvollständiger Historie (shallow) in dieser Tiefe erstellen"
 
-#: builtin/clone.c:127 builtin/fetch.c:154 builtin/pack-objects.c:3303
+#: builtin/clone.c:126 builtin/fetch.c:169 builtin/pack-objects.c:3283
 msgid "time"
 msgstr "Zeit"
 
-#: builtin/clone.c:128
+#: builtin/clone.c:127
 msgid "create a shallow clone since a specific time"
 msgstr ""
 "einen Klon mit unvollständiger Historie (shallow) seit einer bestimmten "
 "Zeit\n"
 "erstellen"
 
-#: builtin/clone.c:129 builtin/fetch.c:156 builtin/fetch.c:179
-#: builtin/rebase.c:1395
+#: builtin/clone.c:128 builtin/fetch.c:171 builtin/fetch.c:194
+#: builtin/rebase.c:1417
 msgid "revision"
 msgstr "Commit"
 
-#: builtin/clone.c:130 builtin/fetch.c:157
+#: builtin/clone.c:129 builtin/fetch.c:172
 msgid "deepen history of shallow clone, excluding rev"
 msgstr ""
 "die Historie eines Klons mit unvollständiger Historie (shallow) mittels\n"
 "Ausschluss eines Commits vertiefen"
 
-#: builtin/clone.c:132
+#: builtin/clone.c:131
 msgid "clone only one branch, HEAD or --branch"
 msgstr "nur einen Branch klonen, HEAD oder --branch"
 
-#: builtin/clone.c:134
+#: builtin/clone.c:133
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr "keine Tags klonen, und auch bei späteren Abrufen nicht beachten"
 
-#: builtin/clone.c:136
+#: builtin/clone.c:135
 msgid "any cloned submodules will be shallow"
 msgstr "jedes geklonte Submodul mit unvollständiger Historie (shallow)"
 
-#: builtin/clone.c:137 builtin/init-db.c:495
+#: builtin/clone.c:136 builtin/init-db.c:495
 msgid "gitdir"
 msgstr ".git-Verzeichnis"
 
-#: builtin/clone.c:138 builtin/init-db.c:496
+#: builtin/clone.c:137 builtin/init-db.c:496
 msgid "separate git dir from working tree"
 msgstr "Git-Verzeichnis vom Arbeitsverzeichnis separieren"
 
-#: builtin/clone.c:139
+#: builtin/clone.c:138
 msgid "key=value"
 msgstr "Schlüssel=Wert"
 
-#: builtin/clone.c:140
+#: builtin/clone.c:139
 msgid "set config inside the new repository"
 msgstr "Konfiguration innerhalb des neuen Repositories setzen"
 
-#: builtin/clone.c:142 builtin/fetch.c:174 builtin/ls-remote.c:76
-#: builtin/push.c:585 builtin/send-pack.c:172
+#: builtin/clone.c:141 builtin/fetch.c:189 builtin/ls-remote.c:76
+#: builtin/push.c:572 builtin/send-pack.c:172
 msgid "server-specific"
 msgstr "serverspezifisch"
 
-#: builtin/clone.c:142 builtin/fetch.c:174 builtin/ls-remote.c:76
-#: builtin/push.c:585 builtin/send-pack.c:173
+#: builtin/clone.c:141 builtin/fetch.c:189 builtin/ls-remote.c:76
+#: builtin/push.c:572 builtin/send-pack.c:173
 msgid "option to transmit"
 msgstr "Option übertragen"
 
-#: builtin/clone.c:143 builtin/fetch.c:175 builtin/pull.c:239
-#: builtin/push.c:586
+#: builtin/clone.c:142 builtin/fetch.c:190 builtin/pull.c:240
+#: builtin/push.c:573
 msgid "use IPv4 addresses only"
 msgstr "nur IPv4-Adressen benutzen"
 
-#: builtin/clone.c:145 builtin/fetch.c:177 builtin/pull.c:242
-#: builtin/push.c:588
+#: builtin/clone.c:144 builtin/fetch.c:192 builtin/pull.c:243
+#: builtin/push.c:575
 msgid "use IPv6 addresses only"
 msgstr "nur IPv6-Adressen benutzen"
 
-#: builtin/clone.c:149
+#: builtin/clone.c:148
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "jedes geklonte Submodul nutzt seinen Remote-Tracking-Branch"
 
-#: builtin/clone.c:285
+#: builtin/clone.c:284
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -11261,47 +11297,42 @@
 "Konnte keinen Verzeichnisnamen erraten.\n"
 "Bitte geben Sie ein Verzeichnis auf der Befehlszeile an."
 
-#: builtin/clone.c:338
+#: builtin/clone.c:337
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "info: Konnte Alternative für '%s' nicht hinzufügen: %s\n"
 
-#: builtin/clone.c:411
+#: builtin/clone.c:410
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s existiert und ist kein Verzeichnis"
 
-#: builtin/clone.c:428
+#: builtin/clone.c:427
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "Fehler beim Starten der Iteration über '%s'"
 
-#: builtin/clone.c:453
-#, c-format
-msgid "failed to unlink '%s'"
-msgstr "Konnte '%s' nicht entfernen."
-
-#: builtin/clone.c:458
+#: builtin/clone.c:457
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "Konnte Verweis '%s' nicht erstellen"
 
-#: builtin/clone.c:462
+#: builtin/clone.c:461
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "Konnte Datei nicht nach '%s' kopieren"
 
-#: builtin/clone.c:467
+#: builtin/clone.c:466
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "Fehler beim Iterieren über '%s'"
 
-#: builtin/clone.c:492
+#: builtin/clone.c:491
 #, c-format
 msgid "done.\n"
 msgstr "Fertig.\n"
 
-#: builtin/clone.c:506
+#: builtin/clone.c:505
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -11311,97 +11342,97 @@
 "Sie können mit 'git status' prüfen, was ausgecheckt worden ist\n"
 "und das Auschecken mit 'git restore --source=HEAD :/' erneut versuchen.\n"
 
-#: builtin/clone.c:583
+#: builtin/clone.c:582
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "Konnte zu klonenden Remote-Branch %s nicht finden."
 
-#: builtin/clone.c:702
+#: builtin/clone.c:701
 #, c-format
 msgid "unable to update %s"
 msgstr "kann %s nicht aktualisieren"
 
-#: builtin/clone.c:752
+#: builtin/clone.c:751
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 "Externer HEAD bezieht sich auf eine nicht existierende Referenz und kann "
 "nicht ausgecheckt werden.\n"
 
-#: builtin/clone.c:783
+#: builtin/clone.c:782
 msgid "unable to checkout working tree"
 msgstr "Arbeitsverzeichnis konnte nicht ausgecheckt werden"
 
-#: builtin/clone.c:833
+#: builtin/clone.c:832
 msgid "unable to write parameters to config file"
 msgstr "konnte Parameter nicht in Konfigurationsdatei schreiben"
 
-#: builtin/clone.c:896
+#: builtin/clone.c:895
 msgid "cannot repack to clean up"
 msgstr "Kann \"repack\" zum Aufräumen nicht aufrufen"
 
-#: builtin/clone.c:898
+#: builtin/clone.c:897
 msgid "cannot unlink temporary alternates file"
 msgstr "Kann temporäre \"alternates\"-Datei nicht entfernen"
 
-#: builtin/clone.c:938 builtin/receive-pack.c:1950
+#: builtin/clone.c:937 builtin/receive-pack.c:1948
 msgid "Too many arguments."
 msgstr "Zu viele Argumente."
 
-#: builtin/clone.c:942
+#: builtin/clone.c:941
 msgid "You must specify a repository to clone."
 msgstr "Sie müssen ein Repository zum Klonen angeben."
 
-#: builtin/clone.c:955
+#: builtin/clone.c:954
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "Die Optionen --bare und --origin %s sind inkompatibel."
 
-#: builtin/clone.c:958
+#: builtin/clone.c:957
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "Die Optionen --bare und --separate-git-dir sind inkompatibel."
 
-#: builtin/clone.c:971
+#: builtin/clone.c:970
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "Repository '%s' existiert nicht."
 
-#: builtin/clone.c:977 builtin/fetch.c:1660
+#: builtin/clone.c:976 builtin/fetch.c:1790
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "Tiefe %s ist keine positive Zahl"
 
-#: builtin/clone.c:987
+#: builtin/clone.c:986
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "Zielpfad '%s' existiert bereits und ist kein leeres Verzeichnis."
 
-#: builtin/clone.c:997
+#: builtin/clone.c:996
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "Arbeitsverzeichnis '%s' existiert bereits."
 
-#: builtin/clone.c:1012 builtin/clone.c:1033 builtin/difftool.c:264
-#: builtin/worktree.c:303 builtin/worktree.c:335
+#: builtin/clone.c:1011 builtin/clone.c:1032 builtin/difftool.c:271
+#: builtin/log.c:1785 builtin/worktree.c:302 builtin/worktree.c:334
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "Konnte führende Verzeichnisse von '%s' nicht erstellen."
 
-#: builtin/clone.c:1017
+#: builtin/clone.c:1016
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "Konnte Arbeitsverzeichnis '%s' nicht erstellen"
 
-#: builtin/clone.c:1037
+#: builtin/clone.c:1036
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Klone in Bare-Repository '%s' ...\n"
 
-#: builtin/clone.c:1039
+#: builtin/clone.c:1038
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Klone nach '%s' ...\n"
 
-#: builtin/clone.c:1063
+#: builtin/clone.c:1062
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
@@ -11409,45 +11440,45 @@
 "'clone --recursive' ist nicht kompatibel mit --reference und --reference-if-"
 "able"
 
-#: builtin/clone.c:1124
+#: builtin/clone.c:1123
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr ""
 "Die Option --depth wird in lokalen Klonen ignoriert; benutzen Sie "
 "stattdessen file://"
 
-#: builtin/clone.c:1126
+#: builtin/clone.c:1125
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-since wird in lokalen Klonen ignoriert; benutzen Sie stattdessen "
 "file://"
 
-#: builtin/clone.c:1128
+#: builtin/clone.c:1127
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-exclude wird in lokalen Klonen ignoriert; benutzen Sie stattdessen "
 "file://"
 
-#: builtin/clone.c:1130
+#: builtin/clone.c:1129
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr ""
 "--filter wird in lokalen Klonen ignoriert; benutzen Sie stattdessen file://"
 
-#: builtin/clone.c:1133
+#: builtin/clone.c:1132
 msgid "source repository is shallow, ignoring --local"
 msgstr ""
 "Quelle ist ein Repository mit unvollständiger Historie (shallow),\n"
 "ignoriere --local"
 
-#: builtin/clone.c:1138
+#: builtin/clone.c:1137
 msgid "--local is ignored"
 msgstr "--local wird ignoriert"
 
-#: builtin/clone.c:1215 builtin/clone.c:1223
+#: builtin/clone.c:1212 builtin/clone.c:1220
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "Remote-Branch %s nicht im Upstream-Repository %s gefunden"
 
-#: builtin/clone.c:1226
+#: builtin/clone.c:1223
 msgid "You appear to have cloned an empty repository."
 msgstr "Sie scheinen ein leeres Repository geklont zu haben."
 
@@ -11525,7 +11556,7 @@
 msgstr "ID eines Eltern-Commit-Objektes."
 
 #: builtin/commit-tree.c:114 builtin/commit.c:1500 builtin/merge.c:270
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1460
+#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1469
 #: builtin/tag.c:412
 msgid "message"
 msgstr "Beschreibung"
@@ -11539,7 +11570,7 @@
 msgstr "Commit-Beschreibung von Datei lesen"
 
 #: builtin/commit-tree.c:121 builtin/commit.c:1512 builtin/merge.c:287
-#: builtin/pull.c:194 builtin/revert.c:118
+#: builtin/pull.c:195 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "Commit mit GPG signieren"
 
@@ -11880,8 +11911,8 @@
 msgid "version"
 msgstr "Version"
 
-#: builtin/commit.c:1347 builtin/commit.c:1529 builtin/push.c:561
-#: builtin/worktree.c:651
+#: builtin/commit.c:1347 builtin/commit.c:1529 builtin/push.c:548
+#: builtin/worktree.c:650
 msgid "machine-readable output"
 msgstr "maschinenlesbare Ausgabe"
 
@@ -11894,8 +11925,8 @@
 msgstr "Einträge mit NUL-Zeichen abschließen"
 
 #: builtin/commit.c:1355 builtin/commit.c:1359 builtin/commit.c:1537
-#: builtin/fast-export.c:1125 builtin/fast-export.c:1128
-#: builtin/fast-export.c:1131 builtin/rebase.c:1471 parse-options.h:332
+#: builtin/fast-export.c:1153 builtin/fast-export.c:1156
+#: builtin/fast-export.c:1159 builtin/rebase.c:1495 parse-options.h:332
 msgid "mode"
 msgstr "Modus"
 
@@ -11913,7 +11944,7 @@
 "ignorierte Dateien anzeigen, optionale Modi: traditional, matching, no. "
 "(Standard: traditional)"
 
-#: builtin/commit.c:1362 parse-options.h:179
+#: builtin/commit.c:1362 parse-options.h:188
 msgid "when"
 msgstr "wann"
 
@@ -11966,7 +11997,7 @@
 msgid "override author for commit"
 msgstr "Autor eines Commits überschreiben"
 
-#: builtin/commit.c:1499 builtin/gc.c:539
+#: builtin/commit.c:1499 builtin/gc.c:538
 msgid "date"
 msgstr "Datum"
 
@@ -12003,8 +12034,8 @@
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr "Sie als Autor des Commits setzen (verwendet mit -C/-c/--amend)"
 
-#: builtin/commit.c:1506 builtin/log.c:1564 builtin/merge.c:289
-#: builtin/pull.c:163 builtin/revert.c:110
+#: builtin/commit.c:1506 builtin/log.c:1565 builtin/merge.c:289
+#: builtin/pull.c:164 builtin/revert.c:110
 msgid "add Signed-off-by:"
 msgstr "'Signed-off-by:'-Zeile hinzufügen"
 
@@ -12112,71 +12143,75 @@
 msgstr "git commit-graph read [--object-dir <Objektverzeichnis>]"
 
 #: builtin/commit-graph.c:13 builtin/commit-graph.c:19
-msgid "git commit-graph verify [--object-dir <objdir>] [--shallow]"
-msgstr "git commit-graph verify [--object-dir <Objektverzeichnis>] [--shallow]"
+msgid ""
+"git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
+msgstr ""
+"git commit-graph verify [--object-dir <Objektverzeichnis>] [--shallow] [--"
+"[no-]progress]"
 
 #: builtin/commit-graph.c:14 builtin/commit-graph.c:29
 msgid ""
 "git commit-graph write [--object-dir <objdir>] [--append|--split] [--"
-"reachable|--stdin-packs|--stdin-commits] <split options>"
+"reachable|--stdin-packs|--stdin-commits] [--[no-]progress] <split options>"
 msgstr ""
 "git commit-graph write [--object-dir <Objektverzeichnis>] [--append|split] "
-"[--reachable|--stdin-packs|--stdin-commits] <Split-Optionen>"
+"[--reachable|--stdin-packs|--stdin-commits] [--[no-]progress] <Split-"
+"Optionen>"
 
-#: builtin/commit-graph.c:54 builtin/commit-graph.c:100
-#: builtin/commit-graph.c:161 builtin/commit-graph.c:237 builtin/fetch.c:163
-#: builtin/log.c:1584
+#: builtin/commit-graph.c:55 builtin/commit-graph.c:107
+#: builtin/commit-graph.c:170 builtin/commit-graph.c:254 builtin/fetch.c:178
+#: builtin/log.c:1585
 msgid "dir"
 msgstr "Verzeichnis"
 
-#: builtin/commit-graph.c:55 builtin/commit-graph.c:101
-#: builtin/commit-graph.c:162 builtin/commit-graph.c:238
+#: builtin/commit-graph.c:56 builtin/commit-graph.c:108
+#: builtin/commit-graph.c:171 builtin/commit-graph.c:255
 msgid "The object directory to store the graph"
 msgstr "Das Objektverzeichnis zum Speichern des Graphen."
 
-#: builtin/commit-graph.c:57
+#: builtin/commit-graph.c:58
 msgid "if the commit-graph is split, only verify the tip file"
 msgstr ""
 "Wenn der Commit-Graph aufgeteilt ist, nur die Datei an der Spitze überprüfen"
 
-#: builtin/commit-graph.c:73 builtin/commit-graph.c:116
+#: builtin/commit-graph.c:80 builtin/commit-graph.c:125
 #, c-format
 msgid "Could not open commit-graph '%s'"
 msgstr "Konnte Commit-Graph '%s' nicht öffnen."
 
-#: builtin/commit-graph.c:164
+#: builtin/commit-graph.c:173
 msgid "start walk at all refs"
 msgstr "Durchlauf auf allen Referenzen beginnen"
 
-#: builtin/commit-graph.c:166
+#: builtin/commit-graph.c:175
 msgid "scan pack-indexes listed by stdin for commits"
 msgstr "durch Standard-Eingabe gelistete Pack-Indexe nach Commits scannen"
 
-#: builtin/commit-graph.c:168
+#: builtin/commit-graph.c:177
 msgid "start walk at commits listed by stdin"
 msgstr "Lauf bei Commits beginnen, die über die Standard-Eingabe gelistet sind"
 
-#: builtin/commit-graph.c:170
+#: builtin/commit-graph.c:179
 msgid "include all commits already in the commit-graph file"
 msgstr ""
 "alle Commits einschließen, die sich bereits in der Commit-Graph-Datei "
 "befinden"
 
-#: builtin/commit-graph.c:172
+#: builtin/commit-graph.c:182
 msgid "allow writing an incremental commit-graph file"
 msgstr "Erlaube das Schreiben einer inkrementellen Commit-Graph-Datei"
 
-#: builtin/commit-graph.c:174 builtin/commit-graph.c:178
+#: builtin/commit-graph.c:184 builtin/commit-graph.c:188
 msgid "maximum number of commits in a non-base split commit-graph"
 msgstr ""
 "Maximale Anzahl von Commits in einem aufgeteilten Commit-Graph ohne Basis"
 
-#: builtin/commit-graph.c:176
+#: builtin/commit-graph.c:186
 msgid "maximum ratio between two levels of a split commit-graph"
 msgstr ""
 "Maximales Verhältnis zwischen zwei Ebenen eines aufgeteilten Commit-Graph"
 
-#: builtin/commit-graph.c:191
+#: builtin/commit-graph.c:204
 msgid "use at most one of --reachable, --stdin-commits, or --stdin-packs"
 msgstr ""
 "Benutzen Sie mindestens eins von --reachable, --stdin-commits, oder --stdin-"
@@ -12497,59 +12532,59 @@
 msgid "print sizes in human readable format"
 msgstr "gibt Größenangaben in menschenlesbaren Format aus"
 
-#: builtin/describe.c:27
+#: builtin/describe.c:26
 msgid "git describe [<options>] [<commit-ish>...]"
 msgstr "git describe [<Optionen>] [<Commit-Angabe>...]"
 
-#: builtin/describe.c:28
+#: builtin/describe.c:27
 msgid "git describe [<options>] --dirty"
 msgstr "git describe [<Optionen>] --dirty"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "head"
 msgstr "Branch"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "lightweight"
 msgstr "nicht-annotiert"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "annotated"
 msgstr "annotiert"
 
-#: builtin/describe.c:273
+#: builtin/describe.c:275
 #, c-format
 msgid "annotated tag %s not available"
 msgstr "annotiertes Tag %s ist nicht verfügbar"
 
-#: builtin/describe.c:277
+#: builtin/describe.c:279
 #, c-format
 msgid "annotated tag %s has no embedded name"
 msgstr "annotiertes Tag %s hat keinen eingebetteten Namen"
 
-#: builtin/describe.c:279
+#: builtin/describe.c:281
 #, c-format
 msgid "tag '%s' is really '%s' here"
 msgstr "Tag '%s' ist eigentlich '%s' hier"
 
-#: builtin/describe.c:323
+#: builtin/describe.c:325
 #, c-format
 msgid "no tag exactly matches '%s'"
 msgstr "kein Tag entspricht exakt '%s'"
 
-#: builtin/describe.c:325
+#: builtin/describe.c:327
 #, c-format
 msgid "No exact match on refs or tags, searching to describe\n"
 msgstr ""
 "Keine exakte Übereinstimmung bei Referenzen oder Tags, Suche zum "
 "Beschreiben\n"
 
-#: builtin/describe.c:379
+#: builtin/describe.c:381
 #, c-format
 msgid "finished search at %s\n"
 msgstr "beendete Suche bei %s\n"
 
-#: builtin/describe.c:405
+#: builtin/describe.c:407
 #, c-format
 msgid ""
 "No annotated tags can describe '%s'.\n"
@@ -12558,7 +12593,7 @@
 "Keine annotierten Tags können '%s' beschreiben.\n"
 "Jedoch gab es nicht-annotierte Tags: versuchen Sie --tags."
 
-#: builtin/describe.c:409
+#: builtin/describe.c:411
 #, c-format
 msgid ""
 "No tags can describe '%s'.\n"
@@ -12567,12 +12602,12 @@
 "Keine Tags können '%s' beschreiben.\n"
 "Versuchen Sie --always oder erstellen Sie einige Tags."
 
-#: builtin/describe.c:439
+#: builtin/describe.c:441
 #, c-format
 msgid "traversed %lu commits\n"
 msgstr "%lu Commits durchlaufen\n"
 
-#: builtin/describe.c:442
+#: builtin/describe.c:444
 #, c-format
 msgid ""
 "more than %i tags found; listed %i most recent\n"
@@ -12581,94 +12616,93 @@
 "mehr als %i Tags gefunden; führe die ersten %i auf\n"
 "Suche bei %s aufgegeben\n"
 
-#: builtin/describe.c:510
+#: builtin/describe.c:512
 #, c-format
 msgid "describe %s\n"
 msgstr "Beschreibe %s\n"
 
-#: builtin/describe.c:513
+#: builtin/describe.c:515
 #, c-format
 msgid "Not a valid object name %s"
 msgstr "%s ist kein gültiger Objekt-Name"
 
-#: builtin/describe.c:521
+#: builtin/describe.c:523
 #, c-format
 msgid "%s is neither a commit nor blob"
 msgstr "%s ist weder ein Commit, noch ein Blob."
 
-#: builtin/describe.c:535
+#: builtin/describe.c:537
 msgid "find the tag that comes after the commit"
 msgstr "das Tag finden, das nach dem Commit kommt"
 
-#: builtin/describe.c:536
+#: builtin/describe.c:538
 msgid "debug search strategy on stderr"
 msgstr "die Suchstrategie in der Standard-Fehlerausgabe protokollieren"
 
-#: builtin/describe.c:537
+#: builtin/describe.c:539
 msgid "use any ref"
 msgstr "alle Referenzen verwenden"
 
-#: builtin/describe.c:538
+#: builtin/describe.c:540
 msgid "use any tag, even unannotated"
 msgstr "jedes Tag verwenden, auch nicht-annotierte"
 
-#: builtin/describe.c:539
+#: builtin/describe.c:541
 msgid "always use long format"
 msgstr "immer langes Format verwenden"
 
-#: builtin/describe.c:540
+#: builtin/describe.c:542
 msgid "only follow first parent"
 msgstr "nur erstem Elternteil folgen"
 
-#: builtin/describe.c:543
+#: builtin/describe.c:545
 msgid "only output exact matches"
 msgstr "nur exakte Übereinstimmungen ausgeben"
 
-#: builtin/describe.c:545
+#: builtin/describe.c:547
 msgid "consider <n> most recent tags (default: 10)"
 msgstr "die jüngsten <n> Tags betrachten (Standard: 10)"
 
-#: builtin/describe.c:547
+#: builtin/describe.c:549
 msgid "only consider tags matching <pattern>"
 msgstr "nur Tags, die <Muster> entsprechen, betrachten"
 
-#: builtin/describe.c:549
+#: builtin/describe.c:551
 msgid "do not consider tags matching <pattern>"
 msgstr "keine Tags betrachten, die <Muster> entsprechen"
 
-#: builtin/describe.c:551 builtin/name-rev.c:422
+#: builtin/describe.c:553 builtin/name-rev.c:426
 msgid "show abbreviated commit object as fallback"
 msgstr "gekürztes Commit-Objekt anzeigen, wenn sonst nichts zutrifft"
 
-#: builtin/describe.c:552 builtin/describe.c:555
+#: builtin/describe.c:554 builtin/describe.c:557
 msgid "mark"
-msgstr "Kennzeichen"
+msgstr "Markierung"
 
-#: builtin/describe.c:553
+#: builtin/describe.c:555
 msgid "append <mark> on dirty working tree (default: \"-dirty\")"
 msgstr ""
-"<Kennzeichen> bei geändertem Arbeitsverzeichnis anhängen (Standard: \"-dirty"
+"<Markierung> bei geändertem Arbeitsverzeichnis anhängen (Standard: \"-dirty"
 "\")"
 
-#: builtin/describe.c:556
+#: builtin/describe.c:558
 msgid "append <mark> on broken working tree (default: \"-broken\")"
 msgstr ""
-"<Kennzeichen> bei defektem Arbeitsverzeichnis anhängen (Standard: \"-broken"
-"\")"
+"<Markierung> bei defektem Arbeitsverzeichnis anhängen (Standard: \"-broken\")"
 
-#: builtin/describe.c:574
+#: builtin/describe.c:576
 msgid "--long is incompatible with --abbrev=0"
 msgstr "Die Optionen --long und --abbrev=0 sind inkompatibel."
 
-#: builtin/describe.c:603
+#: builtin/describe.c:605
 msgid "No names found, cannot describe anything."
 msgstr "Keine Namen gefunden, kann nichts beschreiben."
 
-#: builtin/describe.c:654
+#: builtin/describe.c:656
 msgid "--dirty is incompatible with commit-ishes"
 msgstr "Die Option --dirty kann nicht mit Commits verwendet werden."
 
-#: builtin/describe.c:656
+#: builtin/describe.c:658
 msgid "--broken is incompatible with commit-ishes"
 msgstr "Die Option --broken kann nicht mit Commits verwendet werden."
 
@@ -12705,27 +12739,27 @@
 msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
 msgstr "git difftool [<Optionen>] [<Commit> [<Commit>]] [--] [<Pfad>...]"
 
-#: builtin/difftool.c:253
+#: builtin/difftool.c:260
 #, c-format
 msgid "failed: %d"
 msgstr "fehlgeschlagen: %d"
 
-#: builtin/difftool.c:295
+#: builtin/difftool.c:302
 #, c-format
 msgid "could not read symlink %s"
 msgstr "konnte symbolische Verknüpfung %s nicht lesen"
 
-#: builtin/difftool.c:297
+#: builtin/difftool.c:304
 #, c-format
 msgid "could not read symlink file %s"
 msgstr "Konnte Datei von symbolischer Verknüpfung '%s' nicht lesen."
 
-#: builtin/difftool.c:305
+#: builtin/difftool.c:312
 #, c-format
 msgid "could not read object %s for symlink %s"
 msgstr "Konnte Objekt '%s' für symbolische Verknüpfung '%s' nicht lesen."
 
-#: builtin/difftool.c:406
+#: builtin/difftool.c:413
 msgid ""
 "combined diff formats('-c' and '--cc') are not supported in\n"
 "directory diff mode('-d' and '--dir-diff')."
@@ -12733,54 +12767,54 @@
 "Kombinierte Diff-Formate('-c' und '--cc') werden im Verzeichnis-\n"
 "Diff-Modus('-d' und '--dir-diff') nicht unterstützt."
 
-#: builtin/difftool.c:626
+#: builtin/difftool.c:634
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "beide Dateien geändert: '%s' und '%s'."
 
-#: builtin/difftool.c:628
+#: builtin/difftool.c:636
 msgid "working tree file has been left."
 msgstr "Datei im Arbeitsverzeichnis belassen."
 
-#: builtin/difftool.c:639
+#: builtin/difftool.c:647
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "Es existieren temporäre Dateien in '%s'."
 
-#: builtin/difftool.c:640
+#: builtin/difftool.c:648
 msgid "you may want to cleanup or recover these."
 msgstr "Sie könnten diese aufräumen oder wiederherstellen."
 
-#: builtin/difftool.c:689
+#: builtin/difftool.c:697
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr "`diff.guitool` anstatt `diff.tool` benutzen"
 
-#: builtin/difftool.c:691
+#: builtin/difftool.c:699
 msgid "perform a full-directory diff"
 msgstr "Diff über ganzes Verzeichnis ausführen"
 
-#: builtin/difftool.c:693
+#: builtin/difftool.c:701
 msgid "do not prompt before launching a diff tool"
 msgstr "keine Eingabeaufforderung vor Ausführung eines Diff-Tools"
 
-#: builtin/difftool.c:698
+#: builtin/difftool.c:706
 msgid "use symlinks in dir-diff mode"
 msgstr "symbolische Verknüpfungen im dir-diff Modus verwenden"
 
-#: builtin/difftool.c:699
+#: builtin/difftool.c:707
 msgid "tool"
 msgstr "Tool"
 
-#: builtin/difftool.c:700
+#: builtin/difftool.c:708
 msgid "use the specified diff tool"
 msgstr "das angegebene Diff-Tool benutzen"
 
-#: builtin/difftool.c:702
+#: builtin/difftool.c:710
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr ""
 "eine Liste mit Diff-Tools darstellen, die mit `--tool` benutzt werden können"
 
-#: builtin/difftool.c:705
+#: builtin/difftool.c:713
 msgid ""
 "make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
 "code"
@@ -12789,31 +12823,31 @@
 "Rückkehrwert\n"
 "verschieden 0 ausgeführt wurde"
 
-#: builtin/difftool.c:708
+#: builtin/difftool.c:716
 msgid "specify a custom command for viewing diffs"
 msgstr "eigenen Befehl zur Anzeige von Unterschieden angeben"
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:717
 msgid "passed to `diff`"
 msgstr "an 'diff' übergeben"
 
-#: builtin/difftool.c:724
+#: builtin/difftool.c:732
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool benötigt Arbeitsverzeichnis oder --no-index"
 
-#: builtin/difftool.c:731
+#: builtin/difftool.c:739
 msgid "--dir-diff is incompatible with --no-index"
 msgstr "--dir-diff kann nicht mit --no-index verwendet werden"
 
-#: builtin/difftool.c:734
+#: builtin/difftool.c:742
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr "--gui, --tool und --extcmd schließen sich gegenseitig aus"
 
-#: builtin/difftool.c:742
+#: builtin/difftool.c:750
 msgid "no <tool> given for --tool=<tool>"
 msgstr "kein <Tool> für --tool=<Tool> angegeben"
 
-#: builtin/difftool.c:749
+#: builtin/difftool.c:757
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "kein <Programm> für --extcmd=<Programm> angegeben"
 
@@ -12853,166 +12887,194 @@
 msgid "git fast-export [rev-list-opts]"
 msgstr "git fast-export [rev-list-opts]"
 
-#: builtin/fast-export.c:1124
+#: builtin/fast-export.c:852
+msgid "Error: Cannot export nested tags unless --mark-tags is specified."
+msgstr ""
+"Fehler: Verschachtelte Tags können nicht exportiert werden, außer --mark-"
+"tags wurde angegeben."
+
+#: builtin/fast-export.c:1152
 msgid "show progress after <n> objects"
 msgstr "Fortschritt nach <n> Objekten anzeigen"
 
-#: builtin/fast-export.c:1126
+#: builtin/fast-export.c:1154
 msgid "select handling of signed tags"
 msgstr "Behandlung von signierten Tags wählen"
 
-#: builtin/fast-export.c:1129
+#: builtin/fast-export.c:1157
 msgid "select handling of tags that tag filtered objects"
 msgstr "Behandlung von Tags wählen, die gefilterte Objekte markieren"
 
-#: builtin/fast-export.c:1132
+#: builtin/fast-export.c:1160
 msgid "select handling of commit messages in an alternate encoding"
 msgstr ""
 "Auswählen der Behandlung von Commit-Beschreibungen bei wechselndem Encoding"
 
-#: builtin/fast-export.c:1135
+#: builtin/fast-export.c:1163
 msgid "Dump marks to this file"
-msgstr "Kennzeichen in diese Datei schreiben"
+msgstr "Markierungen in diese Datei schreiben"
 
-#: builtin/fast-export.c:1137
+#: builtin/fast-export.c:1165
 msgid "Import marks from this file"
-msgstr "Kennzeichen von dieser Datei importieren"
+msgstr "Markierungen von dieser Datei importieren"
 
-#: builtin/fast-export.c:1139
+#: builtin/fast-export.c:1169
+msgid "Import marks from this file if it exists"
+msgstr "Markierungen von dieser Datei importieren, wenn diese existiert"
+
+#: builtin/fast-export.c:1171
 msgid "Fake a tagger when tags lack one"
 msgstr "künstlich einen Tag-Ersteller erzeugen, wenn das Tag keinen hat"
 
-#: builtin/fast-export.c:1141
+#: builtin/fast-export.c:1173
 msgid "Output full tree for each commit"
 msgstr "für jeden Commit das gesamte Verzeichnis ausgeben"
 
-#: builtin/fast-export.c:1143
+#: builtin/fast-export.c:1175
 msgid "Use the done feature to terminate the stream"
 msgstr "die \"done\"-Funktion benutzen, um den Datenstrom abzuschließen"
 
-#: builtin/fast-export.c:1144
+#: builtin/fast-export.c:1176
 msgid "Skip output of blob data"
 msgstr "Ausgabe von Blob-Daten überspringen"
 
-#: builtin/fast-export.c:1145 builtin/log.c:1632
+#: builtin/fast-export.c:1177 builtin/log.c:1633
 msgid "refspec"
 msgstr "Refspec"
 
-#: builtin/fast-export.c:1146
+#: builtin/fast-export.c:1178
 msgid "Apply refspec to exported refs"
 msgstr "Refspec auf exportierte Referenzen anwenden"
 
-#: builtin/fast-export.c:1147
+#: builtin/fast-export.c:1179
 msgid "anonymize output"
 msgstr "Ausgabe anonymisieren"
 
-#: builtin/fast-export.c:1149
+#: builtin/fast-export.c:1181
 msgid "Reference parents which are not in fast-export stream by object id"
 msgstr ""
 "Eltern, die nicht im Fast-Export-Stream sind, anhand ihrer Objekt-ID "
 "referenzieren"
 
-#: builtin/fast-export.c:1151
+#: builtin/fast-export.c:1183
 msgid "Show original object ids of blobs/commits"
 msgstr "originale Objekt-IDs von Blobs/Commits anzeigen"
 
-#: builtin/fetch.c:30
+#: builtin/fast-export.c:1185
+msgid "Label tags with mark ids"
+msgstr "Tags mit Markierungs-IDs beschriften"
+
+#: builtin/fast-export.c:1220
+msgid "Cannot pass both --import-marks and --import-marks-if-exists"
+msgstr ""
+"--import-marks und --import-marks-if-exists können nicht zusammen "
+"weitergegeben werden"
+
+#: builtin/fetch.c:34
 msgid "git fetch [<options>] [<repository> [<refspec>...]]"
 msgstr "git fetch [<Optionen>] [<Repository> [<Refspec>...]]"
 
-#: builtin/fetch.c:31
+#: builtin/fetch.c:35
 msgid "git fetch [<options>] <group>"
 msgstr "git fetch [<Optionen>] <Gruppe>"
 
-#: builtin/fetch.c:32
+#: builtin/fetch.c:36
 msgid "git fetch --multiple [<options>] [(<repository> | <group>)...]"
 msgstr "git fetch --multiple [<Optionen>] [(<Repository> | <Gruppe>)...]"
 
-#: builtin/fetch.c:33
+#: builtin/fetch.c:37
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<Optionen>]"
 
-#: builtin/fetch.c:125 builtin/pull.c:203
+#: builtin/fetch.c:115
+msgid "fetch.parallel cannot be negative"
+msgstr "fetch.parallel kann nicht negativ sein"
+
+#: builtin/fetch.c:138 builtin/pull.c:204
 msgid "fetch from all remotes"
 msgstr "fordert von allen Remote-Repositories an"
 
-#: builtin/fetch.c:127 builtin/pull.c:206
+#: builtin/fetch.c:140 builtin/pull.c:248
+msgid "set upstream for git pull/fetch"
+msgstr "Upstream für \"git pull/fetch\" setzen"
+
+#: builtin/fetch.c:142 builtin/pull.c:207
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "an .git/FETCH_HEAD anhängen, anstatt zu überschreiben"
 
-#: builtin/fetch.c:129 builtin/pull.c:209
+#: builtin/fetch.c:144 builtin/pull.c:210
 msgid "path to upload pack on remote end"
 msgstr "Pfad des Programms zum Hochladen von Paketen auf der Gegenseite"
 
-#: builtin/fetch.c:130
+#: builtin/fetch.c:145
 msgid "force overwrite of local reference"
 msgstr "das Überschreiben einer lokalen Referenz erzwingen"
 
-#: builtin/fetch.c:132
+#: builtin/fetch.c:147
 msgid "fetch from multiple remotes"
 msgstr "von mehreren Remote-Repositories anfordern"
 
-#: builtin/fetch.c:134 builtin/pull.c:213
+#: builtin/fetch.c:149 builtin/pull.c:214
 msgid "fetch all tags and associated objects"
 msgstr "alle Tags und verbundene Objekte anfordern"
 
-#: builtin/fetch.c:136
+#: builtin/fetch.c:151
 msgid "do not fetch all tags (--no-tags)"
 msgstr "nicht alle Tags anfordern (--no-tags)"
 
-#: builtin/fetch.c:138
+#: builtin/fetch.c:153
 msgid "number of submodules fetched in parallel"
 msgstr "Anzahl der parallel anzufordernden Submodule"
 
-#: builtin/fetch.c:140 builtin/pull.c:216
+#: builtin/fetch.c:155 builtin/pull.c:217
 msgid "prune remote-tracking branches no longer on remote"
 msgstr ""
 "Remote-Tracking-Branches entfernen, die sich nicht mehr im Remote-Repository "
 "befinden"
 
-#: builtin/fetch.c:142
+#: builtin/fetch.c:157
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
 "lokale Tags entfernen, die sich nicht mehr im Remote-Repository befinden, "
 "und geänderte Tags aktualisieren"
 
-#: builtin/fetch.c:143 builtin/fetch.c:166 builtin/pull.c:140
+#: builtin/fetch.c:158 builtin/fetch.c:181 builtin/pull.c:141
 msgid "on-demand"
 msgstr "bei-Bedarf"
 
-#: builtin/fetch.c:144
+#: builtin/fetch.c:159
 msgid "control recursive fetching of submodules"
 msgstr "rekursive Anforderungen von Submodulen kontrollieren"
 
-#: builtin/fetch.c:148 builtin/pull.c:224
+#: builtin/fetch.c:163 builtin/pull.c:225
 msgid "keep downloaded pack"
 msgstr "heruntergeladenes Paket behalten"
 
-#: builtin/fetch.c:150
+#: builtin/fetch.c:165
 msgid "allow updating of HEAD ref"
 msgstr "Aktualisierung der \"HEAD\"-Referenz erlauben"
 
-#: builtin/fetch.c:153 builtin/fetch.c:159 builtin/pull.c:227
+#: builtin/fetch.c:168 builtin/fetch.c:174 builtin/pull.c:228
 msgid "deepen history of shallow clone"
 msgstr ""
 "die Historie eines Klons mit unvollständiger Historie (shallow) vertiefen"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:170
 msgid "deepen history of shallow repository based on time"
 msgstr ""
 "die Historie eines Klons mit unvollständiger Historie (shallow) auf "
 "Zeitbasis\n"
 "vertiefen"
 
-#: builtin/fetch.c:161 builtin/pull.c:230
+#: builtin/fetch.c:176 builtin/pull.c:231
 msgid "convert to a complete repository"
 msgstr "zu einem vollständigen Repository konvertieren"
 
-#: builtin/fetch.c:164
+#: builtin/fetch.c:179
 msgid "prepend this to submodule path output"
 msgstr "dies an die Ausgabe der Submodul-Pfade voranstellen"
 
-#: builtin/fetch.c:167
+#: builtin/fetch.c:182
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
@@ -13020,92 +13082,92 @@
 "Standard für die rekursive Anforderung von Submodulen (geringere Priorität\n"
 "als Konfigurationsdateien)"
 
-#: builtin/fetch.c:171 builtin/pull.c:233
+#: builtin/fetch.c:186 builtin/pull.c:234
 msgid "accept refs that update .git/shallow"
 msgstr "Referenzen, die .git/shallow aktualisieren, akzeptieren"
 
-#: builtin/fetch.c:172 builtin/pull.c:235
+#: builtin/fetch.c:187 builtin/pull.c:236
 msgid "refmap"
 msgstr "Refmap"
 
-#: builtin/fetch.c:173 builtin/pull.c:236
+#: builtin/fetch.c:188 builtin/pull.c:237
 msgid "specify fetch refmap"
 msgstr "Refmap für 'fetch' angeben"
 
-#: builtin/fetch.c:180
+#: builtin/fetch.c:195
 msgid "report that we have only objects reachable from this object"
 msgstr ""
 "ausgeben, dass wir nur Objekte haben, die von diesem Objekt aus erreichbar "
 "sind"
 
-#: builtin/fetch.c:183
+#: builtin/fetch.c:198
 msgid "run 'gc --auto' after fetching"
 msgstr "Führe 'gc --auto' nach \"fetch\" aus"
 
-#: builtin/fetch.c:185 builtin/pull.c:245
+#: builtin/fetch.c:200 builtin/pull.c:246
 msgid "check for forced-updates on all updated branches"
 msgstr "Prüfe auf erzwungene Aktualisierungen in allen aktualisierten Branches"
 
-#: builtin/fetch.c:491
+#: builtin/fetch.c:510
 msgid "Couldn't find remote ref HEAD"
 msgstr "Konnte Remote-Referenz von HEAD nicht finden."
 
-#: builtin/fetch.c:630
+#: builtin/fetch.c:650
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
 msgstr "Konfiguration fetch.output enthält ungültigen Wert %s"
 
-#: builtin/fetch.c:728
+#: builtin/fetch.c:748
 #, c-format
 msgid "object %s not found"
 msgstr "Objekt %s nicht gefunden"
 
-#: builtin/fetch.c:732
+#: builtin/fetch.c:752
 msgid "[up to date]"
 msgstr "[aktuell]"
 
-#: builtin/fetch.c:745 builtin/fetch.c:761 builtin/fetch.c:833
+#: builtin/fetch.c:765 builtin/fetch.c:781 builtin/fetch.c:853
 msgid "[rejected]"
 msgstr "[zurückgewiesen]"
 
-#: builtin/fetch.c:746
+#: builtin/fetch.c:766
 msgid "can't fetch in current branch"
 msgstr "kann \"fetch\" im aktuellen Branch nicht ausführen"
 
-#: builtin/fetch.c:756
+#: builtin/fetch.c:776
 msgid "[tag update]"
 msgstr "[Tag Aktualisierung]"
 
-#: builtin/fetch.c:757 builtin/fetch.c:794 builtin/fetch.c:816
-#: builtin/fetch.c:828
+#: builtin/fetch.c:777 builtin/fetch.c:814 builtin/fetch.c:836
+#: builtin/fetch.c:848
 msgid "unable to update local ref"
 msgstr "kann lokale Referenz nicht aktualisieren"
 
-#: builtin/fetch.c:761
+#: builtin/fetch.c:781
 msgid "would clobber existing tag"
 msgstr "würde bestehende Tags verändern"
 
-#: builtin/fetch.c:783
+#: builtin/fetch.c:803
 msgid "[new tag]"
 msgstr "[neues Tag]"
 
-#: builtin/fetch.c:786
+#: builtin/fetch.c:806
 msgid "[new branch]"
 msgstr "[neuer Branch]"
 
-#: builtin/fetch.c:789
+#: builtin/fetch.c:809
 msgid "[new ref]"
 msgstr "[neue Referenz]"
 
-#: builtin/fetch.c:828
+#: builtin/fetch.c:848
 msgid "forced update"
 msgstr "Aktualisierung erzwungen"
 
-#: builtin/fetch.c:833
+#: builtin/fetch.c:853
 msgid "non-fast-forward"
 msgstr "kein Vorspulen"
 
-#: builtin/fetch.c:854
+#: builtin/fetch.c:874
 msgid ""
 "Fetch normally indicates which branches had a forced update,\n"
 "but that check has been disabled. To re-enable, use '--show-forced-updates'\n"
@@ -13116,7 +13178,7 @@
 "aktivieren, nutzen Sie die Option '--show-forced-updated' oder führen\n"
 "Sie 'git config fetch.showForcedUpdates true' aus."
 
-#: builtin/fetch.c:858
+#: builtin/fetch.c:878
 #, c-format
 msgid ""
 "It took %.2f seconds to check forced updates. You can use\n"
@@ -13129,12 +13191,12 @@
 "'git config fetch.showForcedUpdates false' ausführen, um diese Überprüfung\n"
 "zu umgehen.\n"
 
-#: builtin/fetch.c:888
+#: builtin/fetch.c:908
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s hat nicht alle erforderlichen Objekte gesendet\n"
 
-#: builtin/fetch.c:909
+#: builtin/fetch.c:929
 #, c-format
 msgid "reject %s because shallow roots are not allowed to be updated"
 msgstr ""
@@ -13142,12 +13204,12 @@
 "unvollständiger\n"
 "Historie (shallow) nicht aktualisiert werden dürfen."
 
-#: builtin/fetch.c:1000 builtin/fetch.c:1131
+#: builtin/fetch.c:1020 builtin/fetch.c:1157
 #, c-format
 msgid "From %.*s\n"
 msgstr "Von %.*s\n"
 
-#: builtin/fetch.c:1011
+#: builtin/fetch.c:1031
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -13156,60 +13218,81 @@
 "Einige lokale Referenzen konnten nicht aktualisiert werden; versuchen Sie\n"
 "'git remote prune %s', um jeden älteren, widersprüchlichen Branch zu löschen."
 
-#: builtin/fetch.c:1101
+#: builtin/fetch.c:1127
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s wird unreferenziert)"
 
-#: builtin/fetch.c:1102
+#: builtin/fetch.c:1128
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s wurde unreferenziert)"
 
-#: builtin/fetch.c:1134
+#: builtin/fetch.c:1160
 msgid "[deleted]"
 msgstr "[gelöscht]"
 
-#: builtin/fetch.c:1135 builtin/remote.c:1036
+#: builtin/fetch.c:1161 builtin/remote.c:1036
 msgid "(none)"
 msgstr "(nichts)"
 
-#: builtin/fetch.c:1158
+#: builtin/fetch.c:1184
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr ""
 "Der \"fetch\" in den aktuellen Branch %s von einem Nicht-Bare-Repository "
 "wurde verweigert."
 
-#: builtin/fetch.c:1177
+#: builtin/fetch.c:1203
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr "Option \"%s\" Wert \"%s\" ist nicht gültig für %s"
 
-#: builtin/fetch.c:1180
+#: builtin/fetch.c:1206
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr "Option \"%s\" wird ignoriert für %s\n"
 
-#: builtin/fetch.c:1484
+#: builtin/fetch.c:1414
+msgid "multiple branch detected, incompatible with --set-upstream"
+msgstr "mehrere Branches erkannt, inkompatibel mit --set-upstream"
+
+#: builtin/fetch.c:1429
+msgid "not setting upstream for a remote remote-tracking branch"
+msgstr "Setze keinen Upstream für einen entfernten Remote-Tracking-Branch."
+
+#: builtin/fetch.c:1431
+msgid "not setting upstream for a remote tag"
+msgstr "Setze keinen Upstream für einen Tag eines Remote-Repositories."
+
+#: builtin/fetch.c:1433
+msgid "unknown branch type"
+msgstr "Unbekannter Branch-Typ"
+
+#: builtin/fetch.c:1435
+msgid ""
+"no source branch found.\n"
+"you need to specify exactly one branch with the --set-upstream option."
+msgstr ""
+"Keinen Quell-Branch gefunden.\n"
+"Sie müssen bei der Option --set-upstream genau einen Branch angeben."
+
+#: builtin/fetch.c:1561 builtin/fetch.c:1623
 #, c-format
 msgid "Fetching %s\n"
 msgstr "Fordere an von %s\n"
 
-#: builtin/fetch.c:1486 builtin/remote.c:100
+#: builtin/fetch.c:1571 builtin/fetch.c:1625 builtin/remote.c:100
 #, c-format
 msgid "Could not fetch %s"
 msgstr "Konnte nicht von %s anfordern"
 
-#: builtin/fetch.c:1532
-msgid ""
-"--filter can only be used with the remote configured in extensions."
-"partialClone"
-msgstr ""
-"--filter kann nur mit den Remote-Repositories verwendet werden,\n"
-"die in core.partialClone konfiguriert sind."
+#: builtin/fetch.c:1583
+#, c-format
+msgid "could not fetch '%s' (exit code: %d)\n"
+msgstr "Konnte '%s' nicht anfordern (Exit-Code: %d)\n"
 
-#: builtin/fetch.c:1556
+#: builtin/fetch.c:1685
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
@@ -13218,49 +13301,49 @@
 "oder den Namen des Remote-Repositories an, von welchem neue\n"
 "Commits angefordert werden sollen."
 
-#: builtin/fetch.c:1593
+#: builtin/fetch.c:1722
 msgid "You need to specify a tag name."
 msgstr "Sie müssen den Namen des Tags angeben."
 
-#: builtin/fetch.c:1644
+#: builtin/fetch.c:1774
 msgid "Negative depth in --deepen is not supported"
 msgstr "Negative Tiefe wird von --deepen nicht unterstützt."
 
-#: builtin/fetch.c:1646
+#: builtin/fetch.c:1776
 msgid "--deepen and --depth are mutually exclusive"
 msgstr "--deepen und --depth schließen sich gegenseitig aus"
 
-#: builtin/fetch.c:1651
+#: builtin/fetch.c:1781
 msgid "--depth and --unshallow cannot be used together"
 msgstr ""
 "Die Optionen --depth und --unshallow können nicht gemeinsam verwendet werden."
 
-#: builtin/fetch.c:1653
+#: builtin/fetch.c:1783
 msgid "--unshallow on a complete repository does not make sense"
 msgstr ""
 "Die Option --unshallow kann nicht in einem Repository mit vollständiger "
 "Historie verwendet werden."
 
-#: builtin/fetch.c:1669
+#: builtin/fetch.c:1799
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all akzeptiert kein Repository als Argument"
 
-#: builtin/fetch.c:1671
+#: builtin/fetch.c:1801
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all kann nicht mit Refspecs verwendet werden."
 
-#: builtin/fetch.c:1680
+#: builtin/fetch.c:1810
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr "Kein Remote-Repository (einzeln oder Gruppe): %s"
 
-#: builtin/fetch.c:1687
+#: builtin/fetch.c:1817
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr ""
 "Das Abholen einer Gruppe von Remote-Repositories kann nicht mit der Angabe\n"
 "von Refspecs verwendet werden."
 
-#: builtin/fetch.c:1703
+#: builtin/fetch.c:1835
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
@@ -13598,7 +13681,7 @@
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "Ungültiger Parameter: SHA-1 erwartet, '%s' bekommen"
 
-#: builtin/gc.c:34
+#: builtin/gc.c:35
 msgid "git gc [<options>]"
 msgstr "git gc [<Optionen>]"
 
@@ -13612,17 +13695,17 @@
 msgid "failed to parse '%s' value '%s'"
 msgstr "Fehler beim Parsen von '%s' mit dem Wert '%s'"
 
-#: builtin/gc.c:476 builtin/init-db.c:55
+#: builtin/gc.c:475 builtin/init-db.c:55
 #, c-format
 msgid "cannot stat '%s'"
 msgstr "Kann '%s' nicht lesen"
 
-#: builtin/gc.c:485 builtin/notes.c:240 builtin/tag.c:529
+#: builtin/gc.c:484 builtin/notes.c:240 builtin/tag.c:529
 #, c-format
 msgid "cannot read '%s'"
 msgstr "kann '%s' nicht lesen"
 
-#: builtin/gc.c:492
+#: builtin/gc.c:491
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -13638,58 +13721,58 @@
 "\n"
 "%s"
 
-#: builtin/gc.c:540
+#: builtin/gc.c:539
 msgid "prune unreferenced objects"
 msgstr "unreferenzierte Objekte entfernen"
 
-#: builtin/gc.c:542
+#: builtin/gc.c:541
 msgid "be more thorough (increased runtime)"
 msgstr "mehr Gründlichkeit (erhöht Laufzeit)"
 
-#: builtin/gc.c:543
+#: builtin/gc.c:542
 msgid "enable auto-gc mode"
 msgstr "\"auto-gc\" Modus aktivieren"
 
-#: builtin/gc.c:546
+#: builtin/gc.c:545
 msgid "force running gc even if there may be another gc running"
 msgstr ""
 "Ausführung von \"git gc\" erzwingen, selbst wenn ein anderes\n"
 "\"git gc\" bereits ausgeführt wird"
 
-#: builtin/gc.c:549
+#: builtin/gc.c:548
 msgid "repack all other packs except the largest pack"
 msgstr "alle anderen Pakete, außer das größte Paket, neu packen"
 
-#: builtin/gc.c:566
+#: builtin/gc.c:565
 #, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr "Fehler beim Parsen des Wertes '%s' von gc.logexpiry."
 
-#: builtin/gc.c:577
+#: builtin/gc.c:576
 #, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr "Fehler beim Parsen des \"prune expiry\" Wertes %s"
 
-#: builtin/gc.c:597
+#: builtin/gc.c:596
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr ""
 "Die Datenbank des Repositories wird für eine optimale Performance im\n"
 "Hintergrund komprimiert.\n"
 
-#: builtin/gc.c:599
+#: builtin/gc.c:598
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr ""
 "Die Datenbank des Projektarchivs wird für eine optimale Performance "
 "komprimiert.\n"
 
-#: builtin/gc.c:600
+#: builtin/gc.c:599
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr "Siehe \"git help gc\" für manuelles Aufräumen.\n"
 
-#: builtin/gc.c:640
+#: builtin/gc.c:639
 #, c-format
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
@@ -13697,7 +13780,7 @@
 "\"git gc\" wird bereits auf Maschine '%s' pid %<PRIuMAX> ausgeführt\n"
 "(benutzen Sie --force falls nicht)"
 
-#: builtin/gc.c:695
+#: builtin/gc.c:694
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr ""
@@ -13723,265 +13806,265 @@
 #. grep.threads
 #.
 #: builtin/grep.c:287 builtin/index-pack.c:1534 builtin/index-pack.c:1727
-#: builtin/pack-objects.c:2728
+#: builtin/pack-objects.c:2708
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "keine Unterstützung von Threads, '%s' wird ignoriert"
 
-#: builtin/grep.c:467 builtin/grep.c:591 builtin/grep.c:633
+#: builtin/grep.c:467 builtin/grep.c:592 builtin/grep.c:635
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "konnte \"Tree\"-Objekt (%s) nicht lesen"
 
-#: builtin/grep.c:648
+#: builtin/grep.c:650
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "kann \"grep\" nicht mit Objekten des Typs %s durchführen"
 
-#: builtin/grep.c:714
+#: builtin/grep.c:716
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "Schalter '%c' erwartet einen numerischen Wert"
 
-#: builtin/grep.c:813
+#: builtin/grep.c:815
 msgid "search in index instead of in the work tree"
 msgstr "im Index anstatt im Arbeitsverzeichnis suchen"
 
-#: builtin/grep.c:815
+#: builtin/grep.c:817
 msgid "find in contents not managed by git"
 msgstr "auch in Inhalten finden, die nicht von Git verwaltet werden"
 
-#: builtin/grep.c:817
+#: builtin/grep.c:819
 msgid "search in both tracked and untracked files"
 msgstr "in versionierten und unversionierten Dateien suchen"
 
-#: builtin/grep.c:819
+#: builtin/grep.c:821
 msgid "ignore files specified via '.gitignore'"
 msgstr "Dateien, die über '.gitignore' angegeben sind, ignorieren"
 
-#: builtin/grep.c:821
+#: builtin/grep.c:823
 msgid "recursively search in each submodule"
 msgstr "rekursive Suche in jedem Submodul"
 
-#: builtin/grep.c:824
+#: builtin/grep.c:826
 msgid "show non-matching lines"
 msgstr "Zeilen ohne Übereinstimmungen anzeigen"
 
-#: builtin/grep.c:826
+#: builtin/grep.c:828
 msgid "case insensitive matching"
 msgstr "Übereinstimmungen unabhängig von Groß- und Kleinschreibung finden"
 
-#: builtin/grep.c:828
+#: builtin/grep.c:830
 msgid "match patterns only at word boundaries"
 msgstr "nur ganze Wörter suchen"
 
-#: builtin/grep.c:830
+#: builtin/grep.c:832
 msgid "process binary files as text"
 msgstr "binäre Dateien als Text verarbeiten"
 
-#: builtin/grep.c:832
+#: builtin/grep.c:834
 msgid "don't match patterns in binary files"
 msgstr "keine Muster in Binärdateien finden"
 
-#: builtin/grep.c:835
+#: builtin/grep.c:837
 msgid "process binary files with textconv filters"
 msgstr "binäre Dateien mit \"textconv\"-Filtern verarbeiten"
 
-#: builtin/grep.c:837
+#: builtin/grep.c:839
 msgid "search in subdirectories (default)"
 msgstr "in Unterverzeichnissen suchen (Standard)"
 
-#: builtin/grep.c:839
+#: builtin/grep.c:841
 msgid "descend at most <depth> levels"
 msgstr "höchstens <Tiefe> Ebenen durchlaufen"
 
-#: builtin/grep.c:843
+#: builtin/grep.c:845
 msgid "use extended POSIX regular expressions"
 msgstr "erweiterte reguläre Ausdrücke aus POSIX verwenden"
 
-#: builtin/grep.c:846
+#: builtin/grep.c:848
 msgid "use basic POSIX regular expressions (default)"
 msgstr "grundlegende reguläre Ausdrücke aus POSIX verwenden (Standard)"
 
-#: builtin/grep.c:849
+#: builtin/grep.c:851
 msgid "interpret patterns as fixed strings"
 msgstr "Muster als feste Zeichenketten interpretieren"
 
-#: builtin/grep.c:852
+#: builtin/grep.c:854
 msgid "use Perl-compatible regular expressions"
 msgstr "Perl-kompatible reguläre Ausdrücke verwenden"
 
-#: builtin/grep.c:855
+#: builtin/grep.c:857
 msgid "show line numbers"
 msgstr "Zeilennummern anzeigen"
 
-#: builtin/grep.c:856
+#: builtin/grep.c:858
 msgid "show column number of first match"
 msgstr "Nummer der Spalte des ersten Treffers anzeigen"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:859
 msgid "don't show filenames"
 msgstr "keine Dateinamen anzeigen"
 
-#: builtin/grep.c:858
+#: builtin/grep.c:860
 msgid "show filenames"
 msgstr "Dateinamen anzeigen"
 
-#: builtin/grep.c:860
+#: builtin/grep.c:862
 msgid "show filenames relative to top directory"
 msgstr "Dateinamen relativ zum Projektverzeichnis anzeigen"
 
-#: builtin/grep.c:862
+#: builtin/grep.c:864
 msgid "show only filenames instead of matching lines"
 msgstr "nur Dateinamen anzeigen anstatt übereinstimmende Zeilen"
 
-#: builtin/grep.c:864
+#: builtin/grep.c:866
 msgid "synonym for --files-with-matches"
 msgstr "Synonym für --files-with-matches"
 
-#: builtin/grep.c:867
+#: builtin/grep.c:869
 msgid "show only the names of files without match"
 msgstr "nur die Dateinamen ohne Übereinstimmungen anzeigen"
 
-#: builtin/grep.c:869
+#: builtin/grep.c:871
 msgid "print NUL after filenames"
 msgstr "NUL-Zeichen nach Dateinamen ausgeben"
 
-#: builtin/grep.c:872
+#: builtin/grep.c:874
 msgid "show only matching parts of a line"
 msgstr "nur übereinstimmende Teile der Zeile anzeigen"
 
-#: builtin/grep.c:874
+#: builtin/grep.c:876
 msgid "show the number of matches instead of matching lines"
 msgstr "anstatt der Zeilen, die Anzahl der übereinstimmenden Zeilen anzeigen"
 
-#: builtin/grep.c:875
+#: builtin/grep.c:877
 msgid "highlight matches"
 msgstr "Übereinstimmungen hervorheben"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:879
 msgid "print empty line between matches from different files"
 msgstr ""
 "eine Leerzeile zwischen Übereinstimmungen in verschiedenen Dateien ausgeben"
 
-#: builtin/grep.c:879
+#: builtin/grep.c:881
 msgid "show filename only once above matches from same file"
 msgstr ""
 "den Dateinamen nur einmal oberhalb der Übereinstimmungen aus dieser Datei "
 "anzeigen"
 
-#: builtin/grep.c:882
+#: builtin/grep.c:884
 msgid "show <n> context lines before and after matches"
 msgstr "<n> Zeilen vor und nach den Übereinstimmungen anzeigen"
 
-#: builtin/grep.c:885
+#: builtin/grep.c:887
 msgid "show <n> context lines before matches"
 msgstr "<n> Zeilen vor den Übereinstimmungen anzeigen"
 
-#: builtin/grep.c:887
+#: builtin/grep.c:889
 msgid "show <n> context lines after matches"
 msgstr "<n> Zeilen nach den Übereinstimmungen anzeigen"
 
-#: builtin/grep.c:889
+#: builtin/grep.c:891
 msgid "use <n> worker threads"
 msgstr "<n> Threads benutzen"
 
-#: builtin/grep.c:890
+#: builtin/grep.c:892
 msgid "shortcut for -C NUM"
 msgstr "Kurzform für -C NUM"
 
-#: builtin/grep.c:893
+#: builtin/grep.c:895
 msgid "show a line with the function name before matches"
 msgstr "eine Zeile mit dem Funktionsnamen vor Übereinstimmungen anzeigen"
 
-#: builtin/grep.c:895
+#: builtin/grep.c:897
 msgid "show the surrounding function"
 msgstr "die umgebende Funktion anzeigen"
 
-#: builtin/grep.c:898
+#: builtin/grep.c:900
 msgid "read patterns from file"
 msgstr "Muster von einer Datei lesen"
 
-#: builtin/grep.c:900
+#: builtin/grep.c:902
 msgid "match <pattern>"
 msgstr "<Muster> finden"
 
-#: builtin/grep.c:902
+#: builtin/grep.c:904
 msgid "combine patterns specified with -e"
 msgstr "Muster kombinieren, die mit -e angegeben wurden"
 
-#: builtin/grep.c:914
+#: builtin/grep.c:916
 msgid "indicate hit with exit status without output"
 msgstr "Übereinstimmungen nur durch Beendigungsstatus anzeigen"
 
-#: builtin/grep.c:916
+#: builtin/grep.c:918
 msgid "show only matches from files that match all patterns"
 msgstr ""
 "nur Übereinstimmungen von Dateien anzeigen, die allen Mustern entsprechen"
 
-#: builtin/grep.c:918
+#: builtin/grep.c:920
 msgid "show parse tree for grep expression"
 msgstr "geparstes Verzeichnis für \"grep\"-Ausdruck anzeigen"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:924
 msgid "pager"
 msgstr "Anzeigeprogramm"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:924
 msgid "show matching files in the pager"
 msgstr "Dateien mit Übereinstimmungen im Anzeigeprogramm anzeigen"
 
-#: builtin/grep.c:926
+#: builtin/grep.c:928
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "den Aufruf von grep(1) erlauben (von dieser Programmversion ignoriert)"
 
-#: builtin/grep.c:990
+#: builtin/grep.c:992
 msgid "no pattern given"
 msgstr "Kein Muster angegeben."
 
-#: builtin/grep.c:1026
+#: builtin/grep.c:1028
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr "--no-index oder --untracked können nicht mit Commits verwendet werden"
 
-#: builtin/grep.c:1034
+#: builtin/grep.c:1036
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "Konnte Commit nicht auflösen: %s"
 
-#: builtin/grep.c:1065
+#: builtin/grep.c:1067
 msgid "invalid option combination, ignoring --threads"
 msgstr "Ungültige Kombination von Optionen, --threads wird ignoriert."
 
-#: builtin/grep.c:1068 builtin/pack-objects.c:3416
+#: builtin/grep.c:1070 builtin/pack-objects.c:3400
 msgid "no threads support, ignoring --threads"
 msgstr "Keine Unterstützung für Threads, --threads wird ignoriert."
 
-#: builtin/grep.c:1071 builtin/index-pack.c:1531 builtin/pack-objects.c:2725
+#: builtin/grep.c:1073 builtin/index-pack.c:1531 builtin/pack-objects.c:2705
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "ungültige Anzahl von Threads angegeben (%d)"
 
-#: builtin/grep.c:1094
+#: builtin/grep.c:1096
 msgid "--open-files-in-pager only works on the worktree"
 msgstr ""
 "Die Option --open-files-in-pager kann nur innerhalb des "
 "Arbeitsverzeichnisses verwendet werden."
 
-#: builtin/grep.c:1117
+#: builtin/grep.c:1119
 msgid "option not supported with --recurse-submodules"
 msgstr "Die Option wird mit --recurse-submodules nicht unterstützt."
 
-#: builtin/grep.c:1123
+#: builtin/grep.c:1125
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr "--cached und --untracked können nicht mit --no-index verwendet werden."
 
-#: builtin/grep.c:1129
+#: builtin/grep.c:1131
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr ""
 "--[no-]exclude-standard kann nicht mit versionierten Inhalten verwendet "
 "werden."
 
-#: builtin/grep.c:1137
+#: builtin/grep.c:1139
 msgid "both --cached and trees are given"
 msgstr "--cached und \"Tree\"-Objekte angegeben"
 
@@ -14296,7 +14379,7 @@
 msgid "Resolving deltas"
 msgstr "Löse Unterschiede auf"
 
-#: builtin/index-pack.c:1205 builtin/pack-objects.c:2497
+#: builtin/index-pack.c:1205 builtin/pack-objects.c:2481
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "kann Thread nicht erzeugen: %s"
@@ -14361,7 +14444,7 @@
 msgid "cannot store index file"
 msgstr "Kann Indexdatei nicht speichern"
 
-#: builtin/index-pack.c:1525 builtin/pack-objects.c:2736
+#: builtin/index-pack.c:1525 builtin/pack-objects.c:2716
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "\"pack.indexversion=%<PRIu32>\" ist ungültig"
@@ -14644,74 +14727,74 @@
 msgid "git show %s: bad file"
 msgstr "git show %s: ungültige Datei"
 
-#: builtin/log.c:549 builtin/log.c:643
+#: builtin/log.c:549 builtin/log.c:644
 #, c-format
 msgid "could not read object %s"
 msgstr "Konnte Objekt %s nicht lesen."
 
-#: builtin/log.c:668
+#: builtin/log.c:669
 #, c-format
 msgid "unknown type: %d"
 msgstr "Unbekannter Typ: %d"
 
-#: builtin/log.c:791
+#: builtin/log.c:792
 msgid "format.headers without value"
 msgstr "format.headers ohne Wert"
 
-#: builtin/log.c:908
+#: builtin/log.c:909
 msgid "name of output directory is too long"
 msgstr "Name des Ausgabeverzeichnisses ist zu lang."
 
-#: builtin/log.c:924
+#: builtin/log.c:925
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "Kann Patch-Datei %s nicht öffnen"
 
-#: builtin/log.c:941
+#: builtin/log.c:942
 msgid "need exactly one range"
 msgstr "Brauche genau einen Commit-Bereich."
 
-#: builtin/log.c:951
+#: builtin/log.c:952
 msgid "not a range"
 msgstr "Kein Commit-Bereich."
 
-#: builtin/log.c:1074
+#: builtin/log.c:1075
 msgid "cover letter needs email format"
 msgstr "Anschreiben benötigt E-Mail-Format"
 
-#: builtin/log.c:1080
+#: builtin/log.c:1081
 msgid "failed to create cover-letter file"
 msgstr "Fehler beim Erstellen der Datei für das Anschreiben."
 
-#: builtin/log.c:1159
+#: builtin/log.c:1160
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "ungültiges in-reply-to: %s"
 
-#: builtin/log.c:1186
+#: builtin/log.c:1187
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<Optionen>] [<seit> | <Commitbereich>]"
 
-#: builtin/log.c:1244
+#: builtin/log.c:1245
 msgid "two output directories?"
 msgstr "Zwei Ausgabeverzeichnisse?"
 
-#: builtin/log.c:1355 builtin/log.c:2099 builtin/log.c:2101 builtin/log.c:2113
+#: builtin/log.c:1356 builtin/log.c:2116 builtin/log.c:2118 builtin/log.c:2130
 #, c-format
 msgid "unknown commit %s"
 msgstr "Unbekannter Commit %s"
 
-#: builtin/log.c:1365 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1366 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "Konnte '%s' nicht als gültige Referenz auflösen."
 
-#: builtin/log.c:1370
+#: builtin/log.c:1371
 msgid "could not find exact merge base"
 msgstr "Konnte keine exakte Merge-Basis finden."
 
-#: builtin/log.c:1374
+#: builtin/log.c:1375
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -14722,272 +14805,272 @@
 "'git branch --set-upstream-to', um einem Remote-Branch zu folgen.\n"
 "Oder geben Sie den Basis-Commit mit '--base=<Basis-Commit-Id>' manuell an."
 
-#: builtin/log.c:1394
+#: builtin/log.c:1395
 msgid "failed to find exact merge base"
 msgstr "Fehler beim Finden einer exakten Merge-Basis."
 
-#: builtin/log.c:1405
+#: builtin/log.c:1406
 msgid "base commit should be the ancestor of revision list"
 msgstr "Basis-Commit sollte der Vorgänger der Revisionsliste sein."
 
-#: builtin/log.c:1409
+#: builtin/log.c:1410
 msgid "base commit shouldn't be in revision list"
 msgstr "Basis-Commit sollte nicht in der Revisionsliste enthalten sein."
 
-#: builtin/log.c:1462
+#: builtin/log.c:1463
 msgid "cannot get patch id"
 msgstr "kann Patch-Id nicht lesen"
 
-#: builtin/log.c:1514
+#: builtin/log.c:1515
 msgid "failed to infer range-diff ranges"
 msgstr "Fehler beim Ableiten des range-diff-Bereichs."
 
-#: builtin/log.c:1559
+#: builtin/log.c:1560
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "[PATCH n/m] auch mit einzelnem Patch verwenden"
 
-#: builtin/log.c:1562
+#: builtin/log.c:1563
 msgid "use [PATCH] even with multiple patches"
 msgstr "[PATCH] auch mit mehreren Patches verwenden"
 
-#: builtin/log.c:1566
+#: builtin/log.c:1567
 msgid "print patches to standard out"
 msgstr "Ausgabe der Patches in Standard-Ausgabe"
 
-#: builtin/log.c:1568
+#: builtin/log.c:1569
 msgid "generate a cover letter"
 msgstr "ein Deckblatt erzeugen"
 
-#: builtin/log.c:1570
+#: builtin/log.c:1571
 msgid "use simple number sequence for output file names"
 msgstr "einfache Nummernfolge für die Namen der Ausgabedateien verwenden"
 
-#: builtin/log.c:1571
+#: builtin/log.c:1572
 msgid "sfx"
 msgstr "Dateiendung"
 
-#: builtin/log.c:1572
+#: builtin/log.c:1573
 msgid "use <sfx> instead of '.patch'"
 msgstr "<Dateiendung> anstatt '.patch' verwenden"
 
-#: builtin/log.c:1574
+#: builtin/log.c:1575
 msgid "start numbering patches at <n> instead of 1"
 msgstr "die Nummerierung der Patches bei <n> anstatt bei 1 beginnen"
 
-#: builtin/log.c:1576
+#: builtin/log.c:1577
 msgid "mark the series as Nth re-roll"
 msgstr "die Serie als n-te Fassung kennzeichnen"
 
-#: builtin/log.c:1578
+#: builtin/log.c:1579
 msgid "Use [RFC PATCH] instead of [PATCH]"
 msgstr "[RFC PATCH] anstatt [PATCH] verwenden"
 
-#: builtin/log.c:1581
+#: builtin/log.c:1582
 msgid "Use [<prefix>] instead of [PATCH]"
 msgstr "[<Präfix>] anstatt [PATCH] verwenden"
 
-#: builtin/log.c:1584
+#: builtin/log.c:1585
 msgid "store resulting files in <dir>"
 msgstr "erzeugte Dateien in <Verzeichnis> speichern"
 
-#: builtin/log.c:1587
+#: builtin/log.c:1588
 msgid "don't strip/add [PATCH]"
 msgstr "[PATCH] nicht entfernen/hinzufügen"
 
-#: builtin/log.c:1590
+#: builtin/log.c:1591
 msgid "don't output binary diffs"
 msgstr "keine binären Unterschiede ausgeben"
 
-#: builtin/log.c:1592
+#: builtin/log.c:1593
 msgid "output all-zero hash in From header"
 msgstr "Hash mit Nullen in \"From\"-Header ausgeben"
 
-#: builtin/log.c:1594
+#: builtin/log.c:1595
 msgid "don't include a patch matching a commit upstream"
 msgstr ""
 "keine Patches einschließen, die einem Commit im Upstream-Branch entsprechen"
 
-#: builtin/log.c:1596
+#: builtin/log.c:1597
 msgid "show patch format instead of default (patch + stat)"
 msgstr "Patchformat anstatt des Standards anzeigen (Patch + Zusammenfassung)"
 
-#: builtin/log.c:1598
+#: builtin/log.c:1599
 msgid "Messaging"
 msgstr "E-Mail-Einstellungen"
 
-#: builtin/log.c:1599
+#: builtin/log.c:1600
 msgid "header"
 msgstr "Header"
 
-#: builtin/log.c:1600
+#: builtin/log.c:1601
 msgid "add email header"
 msgstr "E-Mail-Header hinzufügen"
 
-#: builtin/log.c:1601 builtin/log.c:1603
+#: builtin/log.c:1602 builtin/log.c:1604
 msgid "email"
 msgstr "E-Mail"
 
-#: builtin/log.c:1601
+#: builtin/log.c:1602
 msgid "add To: header"
 msgstr "\"To:\"-Header hinzufügen"
 
-#: builtin/log.c:1603
+#: builtin/log.c:1604
 msgid "add Cc: header"
 msgstr "\"Cc:\"-Header hinzufügen"
 
-#: builtin/log.c:1605
+#: builtin/log.c:1606
 msgid "ident"
 msgstr "Ident"
 
-#: builtin/log.c:1606
+#: builtin/log.c:1607
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 "\"From\"-Adresse auf <Ident> setzen (oder Ident des Commit-Erstellers, wenn "
 "fehlend)"
 
-#: builtin/log.c:1608
+#: builtin/log.c:1609
 msgid "message-id"
 msgstr "message-id"
 
-#: builtin/log.c:1609
+#: builtin/log.c:1610
 msgid "make first mail a reply to <message-id>"
 msgstr "aus erster E-Mail eine Antwort zu <message-id> machen"
 
-#: builtin/log.c:1610 builtin/log.c:1613
+#: builtin/log.c:1611 builtin/log.c:1614
 msgid "boundary"
 msgstr "Grenze"
 
-#: builtin/log.c:1611
+#: builtin/log.c:1612
 msgid "attach the patch"
 msgstr "den Patch anhängen"
 
-#: builtin/log.c:1614
+#: builtin/log.c:1615
 msgid "inline the patch"
 msgstr "den Patch direkt in die Nachricht einfügen"
 
-#: builtin/log.c:1618
+#: builtin/log.c:1619
 msgid "enable message threading, styles: shallow, deep"
 msgstr "Nachrichtenverkettung aktivieren, Stile: shallow, deep"
 
-#: builtin/log.c:1620
+#: builtin/log.c:1621
 msgid "signature"
 msgstr "Signatur"
 
-#: builtin/log.c:1621
+#: builtin/log.c:1622
 msgid "add a signature"
 msgstr "eine Signatur hinzufügen"
 
-#: builtin/log.c:1622
+#: builtin/log.c:1623
 msgid "base-commit"
 msgstr "Basis-Commit"
 
-#: builtin/log.c:1623
+#: builtin/log.c:1624
 msgid "add prerequisite tree info to the patch series"
 msgstr "erforderliche Revisions-Informationen der Patch-Serie hinzufügen"
 
-#: builtin/log.c:1625
+#: builtin/log.c:1626
 msgid "add a signature from a file"
 msgstr "eine Signatur aus einer Datei hinzufügen"
 
-#: builtin/log.c:1626
+#: builtin/log.c:1627
 msgid "don't print the patch filenames"
 msgstr "keine Dateinamen der Patches anzeigen"
 
-#: builtin/log.c:1628
+#: builtin/log.c:1629
 msgid "show progress while generating patches"
 msgstr "Forschrittsanzeige während der Erzeugung der Patches"
 
-#: builtin/log.c:1630
+#: builtin/log.c:1631
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr ""
 "Änderungen gegenüber <Commit> im Deckblatt oder einzelnem Patch anzeigen"
 
-#: builtin/log.c:1633
+#: builtin/log.c:1634
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
 "Änderungen gegenüber <Refspec> im Deckblatt oder einzelnem Patch anzeigen"
 
-#: builtin/log.c:1635
+#: builtin/log.c:1636
 msgid "percentage by which creation is weighted"
 msgstr "Prozentsatz mit welchem Erzeugung gewichtet wird"
 
-#: builtin/log.c:1710
+#: builtin/log.c:1711
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "Ungültige Identifikationszeile: %s"
 
-#: builtin/log.c:1725
+#: builtin/log.c:1726
 msgid "-n and -k are mutually exclusive"
 msgstr "-n und -k schließen sich gegenseitig aus."
 
-#: builtin/log.c:1727
+#: builtin/log.c:1728
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr "--subject-prefix/--rfc und -k schließen sich gegenseitig aus."
 
-#: builtin/log.c:1735
+#: builtin/log.c:1736
 msgid "--name-only does not make sense"
 msgstr "Die Option --name-only kann nicht verwendet werden."
 
-#: builtin/log.c:1737
+#: builtin/log.c:1738
 msgid "--name-status does not make sense"
 msgstr "Die Option --name-status kann nicht verwendet werden."
 
-#: builtin/log.c:1739
+#: builtin/log.c:1740
 msgid "--check does not make sense"
 msgstr "Die Option --check kann nicht verwendet werden."
 
-#: builtin/log.c:1771
+#: builtin/log.c:1773
 msgid "standard output, or directory, which one?"
 msgstr "Standard-Ausgabe oder Verzeichnis, welches von beidem?"
 
-#: builtin/log.c:1860
+#: builtin/log.c:1877
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff erfordert --cover-letter oder einzelnen Patch."
 
-#: builtin/log.c:1864
+#: builtin/log.c:1881
 msgid "Interdiff:"
 msgstr "Interdiff:"
 
-#: builtin/log.c:1865
+#: builtin/log.c:1882
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Interdiff gegen v%d:"
 
-#: builtin/log.c:1871
+#: builtin/log.c:1888
 msgid "--creation-factor requires --range-diff"
 msgstr "--creation-factor erfordert --range-diff"
 
-#: builtin/log.c:1875
+#: builtin/log.c:1892
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff erfordert --cover-letter oder einzelnen Patch."
 
-#: builtin/log.c:1883
+#: builtin/log.c:1900
 msgid "Range-diff:"
 msgstr "Range-Diff:"
 
-#: builtin/log.c:1884
+#: builtin/log.c:1901
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "Range-Diff gegen v%d:"
 
-#: builtin/log.c:1895
+#: builtin/log.c:1912
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "Konnte Signatur-Datei '%s' nicht lesen"
 
-#: builtin/log.c:1931
+#: builtin/log.c:1948
 msgid "Generating patches"
 msgstr "Erzeuge Patches"
 
-#: builtin/log.c:1975
+#: builtin/log.c:1992
 msgid "failed to create output files"
 msgstr "Fehler beim Erstellen der Ausgabedateien."
 
-#: builtin/log.c:2034
+#: builtin/log.c:2051
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<Upstream> [<Branch> [<Limit>]]]"
 
-#: builtin/log.c:2088
+#: builtin/log.c:2105
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -15118,7 +15201,7 @@
 msgid "do not print remote URL"
 msgstr "URL des Remote-Repositories nicht ausgeben"
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1464
+#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1488
 msgid "exec"
 msgstr "Programm"
 
@@ -15231,33 +15314,33 @@
 msgid "Available custom strategies are:"
 msgstr "Verfügbare benutzerdefinierte Strategien sind:"
 
-#: builtin/merge.c:244 builtin/pull.c:151
+#: builtin/merge.c:244 builtin/pull.c:152
 msgid "do not show a diffstat at the end of the merge"
 msgstr "keine Zusammenfassung der Unterschiede am Schluss des Merges anzeigen"
 
-#: builtin/merge.c:247 builtin/pull.c:154
+#: builtin/merge.c:247 builtin/pull.c:155
 msgid "show a diffstat at the end of the merge"
 msgstr "eine Zusammenfassung der Unterschiede am Schluss des Merges anzeigen"
 
-#: builtin/merge.c:248 builtin/pull.c:157
+#: builtin/merge.c:248 builtin/pull.c:158
 msgid "(synonym to --stat)"
 msgstr "(Synonym für --stat)"
 
-#: builtin/merge.c:250 builtin/pull.c:160
+#: builtin/merge.c:250 builtin/pull.c:161
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr ""
 "(höchstens <n>) Einträge von \"shortlog\" zur Beschreibung des Merge-Commits "
 "hinzufügen"
 
-#: builtin/merge.c:253 builtin/pull.c:166
+#: builtin/merge.c:253 builtin/pull.c:167
 msgid "create a single commit instead of doing a merge"
 msgstr "einen einzelnen Commit anstatt eines Merges erzeugen"
 
-#: builtin/merge.c:255 builtin/pull.c:169
+#: builtin/merge.c:255 builtin/pull.c:170
 msgid "perform a commit if the merge succeeds (default)"
 msgstr "einen Commit durchführen, wenn der Merge erfolgreich war (Standard)"
 
-#: builtin/merge.c:257 builtin/pull.c:172
+#: builtin/merge.c:257 builtin/pull.c:173
 msgid "edit message before committing"
 msgstr "Bearbeitung der Beschreibung vor dem Commit"
 
@@ -15265,28 +15348,28 @@
 msgid "allow fast-forward (default)"
 msgstr "Vorspulen erlauben (Standard)"
 
-#: builtin/merge.c:261 builtin/pull.c:179
+#: builtin/merge.c:261 builtin/pull.c:180
 msgid "abort if fast-forward is not possible"
 msgstr "abbrechen, wenn kein Vorspulen möglich ist"
 
-#: builtin/merge.c:265 builtin/pull.c:182
+#: builtin/merge.c:265 builtin/pull.c:183
 msgid "verify that the named commit has a valid GPG signature"
 msgstr "den genannten Commit auf eine gültige GPG-Signatur überprüfen"
 
-#: builtin/merge.c:266 builtin/notes.c:787 builtin/pull.c:186
-#: builtin/rebase.c:492 builtin/rebase.c:1477 builtin/revert.c:114
+#: builtin/merge.c:266 builtin/notes.c:787 builtin/pull.c:187
+#: builtin/rebase.c:493 builtin/rebase.c:1501 builtin/revert.c:114
 msgid "strategy"
 msgstr "Strategie"
 
-#: builtin/merge.c:267 builtin/pull.c:187
+#: builtin/merge.c:267 builtin/pull.c:188
 msgid "merge strategy to use"
 msgstr "zu verwendende Merge-Strategie"
 
-#: builtin/merge.c:268 builtin/pull.c:190
+#: builtin/merge.c:268 builtin/pull.c:191
 msgid "option=value"
 msgstr "Option=Wert"
 
-#: builtin/merge.c:269 builtin/pull.c:191
+#: builtin/merge.c:269 builtin/pull.c:192
 msgid "option for selected merge strategy"
 msgstr "Option für ausgewählte Merge-Strategie"
 
@@ -15307,13 +15390,13 @@
 msgid "continue the current in-progress merge"
 msgstr "den sich im Gange befindlichen Merge fortsetzen"
 
-#: builtin/merge.c:284 builtin/pull.c:198
+#: builtin/merge.c:284 builtin/pull.c:199
 msgid "allow merging unrelated histories"
 msgstr "erlaube das Zusammenführen von nicht zusammenhängenden Historien"
 
 #: builtin/merge.c:290
-msgid "verify commit-msg hook"
-msgstr "commit-msg Hook überprüfen"
+msgid "bypass pre-merge-commit and commit-msg hooks"
+msgstr "Hooks pre-merge-commit und commit-msg umgehen"
 
 #: builtin/merge.c:307
 msgid "could not run stash."
@@ -15356,33 +15439,33 @@
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "Ungültiger branch.%s.mergeoptions String: %s"
 
-#: builtin/merge.c:708
+#: builtin/merge.c:705
 msgid "Not handling anything other than two heads merge."
 msgstr "Es wird nur der Merge von zwei Branches behandelt."
 
-#: builtin/merge.c:722
+#: builtin/merge.c:719
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr "Unbekannte Option für merge-recursive: -X%s"
 
-#: builtin/merge.c:737
+#: builtin/merge.c:734
 #, c-format
 msgid "unable to write %s"
 msgstr "konnte %s nicht schreiben"
 
-#: builtin/merge.c:789
+#: builtin/merge.c:786
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "konnte nicht von '%s' lesen"
 
-#: builtin/merge.c:798
+#: builtin/merge.c:795
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr ""
 "Merge wurde nicht committet; benutzen Sie 'git commit', um den Merge "
 "abzuschließen.\n"
 
-#: builtin/merge.c:804
+#: builtin/merge.c:801
 msgid ""
 "Please enter a commit message to explain why this merge is necessary,\n"
 "especially if it merges an updated upstream into a topic branch.\n"
@@ -15393,11 +15476,11 @@
 "Upstream-Branch mit einem Thema-Branch zusammenführt.\n"
 "\n"
 
-#: builtin/merge.c:809
+#: builtin/merge.c:806
 msgid "An empty message aborts the commit.\n"
 msgstr "Eine leere Commit-Beschreibung bricht den Commit ab.\n"
 
-#: builtin/merge.c:812
+#: builtin/merge.c:809
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -15406,75 +15489,75 @@
 "Zeilen, die mit '%c' beginnen, werden ignoriert,\n"
 "und eine leere Beschreibung bricht den Commit ab.\n"
 
-#: builtin/merge.c:853
+#: builtin/merge.c:862
 msgid "Empty commit message."
 msgstr "Leere Commit-Beschreibung"
 
-#: builtin/merge.c:872
+#: builtin/merge.c:877
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Wunderbar.\n"
 
-#: builtin/merge.c:933
+#: builtin/merge.c:938
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 "Automatischer Merge fehlgeschlagen; beheben Sie die Konflikte und committen "
 "Sie dann das Ergebnis.\n"
 
-#: builtin/merge.c:972
+#: builtin/merge.c:977
 msgid "No current branch."
 msgstr "Sie befinden sich auf keinem Branch."
 
-#: builtin/merge.c:974
+#: builtin/merge.c:979
 msgid "No remote for the current branch."
 msgstr "Kein Remote-Repository für den aktuellen Branch."
 
-#: builtin/merge.c:976
+#: builtin/merge.c:981
 msgid "No default upstream defined for the current branch."
 msgstr ""
 "Es ist kein Standard-Upstream-Branch für den aktuellen Branch definiert."
 
-#: builtin/merge.c:981
+#: builtin/merge.c:986
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "Kein Remote-Tracking-Branch für %s von %s"
 
-#: builtin/merge.c:1038
+#: builtin/merge.c:1043
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Fehlerhafter Wert '%s' in Umgebungsvariable '%s'"
 
-#: builtin/merge.c:1141
+#: builtin/merge.c:1146
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "nichts was wir in %s zusammenführen können: %s"
 
-#: builtin/merge.c:1175
+#: builtin/merge.c:1180
 msgid "not something we can merge"
 msgstr "nichts was wir zusammenführen können"
 
-#: builtin/merge.c:1278
+#: builtin/merge.c:1283
 msgid "--abort expects no arguments"
 msgstr "--abort akzeptiert keine Argumente"
 
-#: builtin/merge.c:1282
+#: builtin/merge.c:1287
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "Es gibt keinen Merge abzubrechen (MERGE_HEAD fehlt)"
 
-#: builtin/merge.c:1291
+#: builtin/merge.c:1296
 msgid "--quit expects no arguments"
 msgstr "--quit erwartet keine Argumente"
 
-#: builtin/merge.c:1304
+#: builtin/merge.c:1309
 msgid "--continue expects no arguments"
 msgstr "--continue erwartet keine Argumente"
 
-#: builtin/merge.c:1308
+#: builtin/merge.c:1313
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "Es ist kein Merge im Gange (MERGE_HEAD fehlt)."
 
-#: builtin/merge.c:1324
+#: builtin/merge.c:1329
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -15482,7 +15565,7 @@
 "Sie haben Ihren Merge nicht abgeschlossen (MERGE_HEAD existiert).\n"
 "Bitte committen Sie Ihre Änderungen, bevor Sie den Merge ausführen."
 
-#: builtin/merge.c:1331
+#: builtin/merge.c:1336
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -15490,100 +15573,100 @@
 "Sie haben \"cherry-pick\" nicht abgeschlossen (CHERRY_PICK_HEAD existiert).\n"
 "Bitte committen Sie Ihre Änderungen, bevor Sie den Merge ausführen."
 
-#: builtin/merge.c:1334
+#: builtin/merge.c:1339
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr ""
 "Sie haben \"cherry-pick\" nicht abgeschlossen (CHERRY_PICK_HEAD existiert)."
 
-#: builtin/merge.c:1348
+#: builtin/merge.c:1353
 msgid "You cannot combine --squash with --no-ff."
 msgstr "Sie können --squash nicht mit --no-ff kombinieren."
 
-#: builtin/merge.c:1350
+#: builtin/merge.c:1355
 msgid "You cannot combine --squash with --commit."
 msgstr "Sie können --squash nicht mit --commit kombinieren."
 
-#: builtin/merge.c:1366
+#: builtin/merge.c:1371
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr "Kein Commit angegeben und merge.defaultToUpstream ist nicht gesetzt."
 
-#: builtin/merge.c:1383
+#: builtin/merge.c:1388
 msgid "Squash commit into empty head not supported yet"
 msgstr ""
 "Bin auf einem Commit, der noch geboren wird; kann \"squash\" nicht ausführen."
 
-#: builtin/merge.c:1385
+#: builtin/merge.c:1390
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr ""
 "Nicht vorzuspulender Commit kann nicht in einem leeren Branch verwendet "
 "werden."
 
-#: builtin/merge.c:1390
+#: builtin/merge.c:1395
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - nichts was wir zusammenführen können"
 
-#: builtin/merge.c:1392
+#: builtin/merge.c:1397
 msgid "Can merge only exactly one commit into empty head"
 msgstr "Kann nur exakt einen Commit in einem leeren Branch zusammenführen."
 
-#: builtin/merge.c:1471
+#: builtin/merge.c:1476
 msgid "refusing to merge unrelated histories"
 msgstr "Verweigere den Merge von nicht zusammenhängenden Historien."
 
-#: builtin/merge.c:1480
+#: builtin/merge.c:1485
 msgid "Already up to date."
 msgstr "Bereits aktuell."
 
-#: builtin/merge.c:1490
+#: builtin/merge.c:1495
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Aktualisiere %s..%s\n"
 
-#: builtin/merge.c:1532
+#: builtin/merge.c:1537
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "Probiere wirklich trivialen \"in-index\"-Merge ...\n"
 
-#: builtin/merge.c:1539
+#: builtin/merge.c:1544
 #, c-format
 msgid "Nope.\n"
 msgstr "Nein.\n"
 
-#: builtin/merge.c:1564
+#: builtin/merge.c:1569
 msgid "Already up to date. Yeeah!"
 msgstr "Bereits aktuell."
 
-#: builtin/merge.c:1570
+#: builtin/merge.c:1575
 msgid "Not possible to fast-forward, aborting."
 msgstr "Vorspulen nicht möglich, breche ab."
 
-#: builtin/merge.c:1593 builtin/merge.c:1658
+#: builtin/merge.c:1598 builtin/merge.c:1663
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Rücklauf des Verzeichnisses bis zum Ursprung ...\n"
 
-#: builtin/merge.c:1597
+#: builtin/merge.c:1602
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Probiere Merge-Strategie %s ...\n"
 
-#: builtin/merge.c:1649
+#: builtin/merge.c:1654
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Keine Merge-Strategie behandelt diesen Merge.\n"
 
-#: builtin/merge.c:1651
+#: builtin/merge.c:1656
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "Merge mit Strategie %s fehlgeschlagen.\n"
 
-#: builtin/merge.c:1660
+#: builtin/merge.c:1665
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr "Benutzen Sie \"%s\", um die Auflösung per Hand vorzubereiten.\n"
 
-#: builtin/merge.c:1672
+#: builtin/merge.c:1677
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
@@ -15669,33 +15752,33 @@
 msgid "set labels for file1/orig-file/file2"
 msgstr "Beschriftung für Datei1/orig-Datei/Datei2 setzen"
 
-#: builtin/merge-recursive.c:46
+#: builtin/merge-recursive.c:47
 #, c-format
 msgid "unknown option %s"
 msgstr "unbekannte Option: %s"
 
-#: builtin/merge-recursive.c:52
+#: builtin/merge-recursive.c:53
 #, c-format
 msgid "could not parse object '%s'"
 msgstr "Konnte Objekt '%s' nicht parsen."
 
-#: builtin/merge-recursive.c:56
+#: builtin/merge-recursive.c:57
 #, c-format
 msgid "cannot handle more than %d base. Ignoring %s."
 msgid_plural "cannot handle more than %d bases. Ignoring %s."
 msgstr[0] "kann nicht mit mehr als %d Merge-Basis umgehen. Ignoriere %s."
 msgstr[1] "kann nicht mit mehr als %d Merge-Basen umgehen. Ignoriere %s."
 
-#: builtin/merge-recursive.c:64
+#: builtin/merge-recursive.c:65
 msgid "not handling anything other than two heads merge."
 msgstr "Es wird nur der Merge von zwei Branches behandelt."
 
-#: builtin/merge-recursive.c:70 builtin/merge-recursive.c:72
+#: builtin/merge-recursive.c:74 builtin/merge-recursive.c:76
 #, c-format
 msgid "could not resolve ref '%s'"
 msgstr "Konnte Referenz '%s' nicht auflösen"
 
-#: builtin/merge-recursive.c:78
+#: builtin/merge-recursive.c:82
 #, c-format
 msgid "Merging %s with %s\n"
 msgstr "Führe %s mit %s zusammen\n"
@@ -15840,52 +15923,52 @@
 msgid "Renaming %s to %s\n"
 msgstr "Benenne %s nach %s um\n"
 
-#: builtin/mv.c:277 builtin/remote.c:717 builtin/repack.c:510
+#: builtin/mv.c:277 builtin/remote.c:717 builtin/repack.c:511
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "Umbenennung von '%s' fehlgeschlagen"
 
-#: builtin/name-rev.c:352
+#: builtin/name-rev.c:356
 msgid "git name-rev [<options>] <commit>..."
 msgstr "git name-rev [<Optionen>] <Commit>..."
 
-#: builtin/name-rev.c:353
+#: builtin/name-rev.c:357
 msgid "git name-rev [<options>] --all"
 msgstr "git name-rev [<Optionen>] --all"
 
-#: builtin/name-rev.c:354
+#: builtin/name-rev.c:358
 msgid "git name-rev [<options>] --stdin"
 msgstr "git name-rev [<Optionen>] --stdin"
 
-#: builtin/name-rev.c:411
+#: builtin/name-rev.c:415
 msgid "print only names (no SHA-1)"
 msgstr "nur Namen anzeigen (keine SHA-1)"
 
-#: builtin/name-rev.c:412
+#: builtin/name-rev.c:416
 msgid "only use tags to name the commits"
 msgstr "nur Tags verwenden, um die Commits zu benennen"
 
-#: builtin/name-rev.c:414
+#: builtin/name-rev.c:418
 msgid "only use refs matching <pattern>"
 msgstr "nur Referenzen verwenden, die <Muster> entsprechen"
 
-#: builtin/name-rev.c:416
+#: builtin/name-rev.c:420
 msgid "ignore refs matching <pattern>"
 msgstr "ignoriere Referenzen die <Muster> entsprechen"
 
-#: builtin/name-rev.c:418
+#: builtin/name-rev.c:422
 msgid "list all commits reachable from all refs"
 msgstr "alle Commits auflisten, die von allen Referenzen erreichbar sind"
 
-#: builtin/name-rev.c:419
+#: builtin/name-rev.c:423
 msgid "read from stdin"
 msgstr "von der Standard-Eingabe lesen"
 
-#: builtin/name-rev.c:420
+#: builtin/name-rev.c:424
 msgid "allow to print `undefined` names (default)"
 msgstr "Ausgabe von `undefinierten` Namen erlauben (Standard)"
 
-#: builtin/name-rev.c:426
+#: builtin/name-rev.c:430
 msgid "dereference tags in the input (internal use)"
 msgstr "Tags in der Eingabe dereferenzieren (interne Verwendung)"
 
@@ -16291,7 +16374,7 @@
 msgid "read object names from the standard input"
 msgstr "Objektnamen von der Standard-Eingabe lesen"
 
-#: builtin/notes.c:954 builtin/prune.c:130 builtin/worktree.c:165
+#: builtin/notes.c:954 builtin/prune.c:130 builtin/worktree.c:164
 msgid "do not remove, show only"
 msgstr "nicht löschen, nur anzeigen"
 
@@ -16307,7 +16390,7 @@
 msgid "use notes from <notes-ref>"
 msgstr "Notizen von <Notiz-Referenz> verwenden"
 
-#: builtin/notes.c:1034 builtin/stash.c:1598
+#: builtin/notes.c:1034 builtin/stash.c:1607
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "Unbekannter Unterbefehl: %s"
@@ -16384,71 +16467,71 @@
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "Schrieb %<PRIu32> Objekte während %<PRIu32> erwartet waren."
 
-#: builtin/pack-objects.c:1166
+#: builtin/pack-objects.c:1164
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr ""
 "Deaktiviere Schreiben der Bitmap, da einige Objekte nicht in eine Pack-"
 "Datei\n"
 "geschrieben wurden."
 
-#: builtin/pack-objects.c:1597
+#: builtin/pack-objects.c:1592
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "\"delta base offset\" Überlauf in Paket für %s"
 
-#: builtin/pack-objects.c:1606
+#: builtin/pack-objects.c:1601
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "\"delta base offset\" liegt außerhalb des gültigen Bereichs für %s"
 
-#: builtin/pack-objects.c:1875
+#: builtin/pack-objects.c:1870
 msgid "Counting objects"
 msgstr "Zähle Objekte"
 
-#: builtin/pack-objects.c:2005
+#: builtin/pack-objects.c:2000
 #, c-format
 msgid "unable to get size of %s"
 msgstr "Konnte Größe von %s nicht bestimmen."
 
-#: builtin/pack-objects.c:2020
+#: builtin/pack-objects.c:2015
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "Konnte Kopfbereich von Objekt '%s' nicht parsen."
 
-#: builtin/pack-objects.c:2090 builtin/pack-objects.c:2106
-#: builtin/pack-objects.c:2116
+#: builtin/pack-objects.c:2085 builtin/pack-objects.c:2101
+#: builtin/pack-objects.c:2111
 #, c-format
 msgid "object %s cannot be read"
 msgstr "Objekt %s kann nicht gelesen werden."
 
-#: builtin/pack-objects.c:2093 builtin/pack-objects.c:2120
+#: builtin/pack-objects.c:2088 builtin/pack-objects.c:2115
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr "Inkonsistente Objektlänge bei Objekt %s (%<PRIuMAX> vs %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2130
+#: builtin/pack-objects.c:2125
 msgid "suboptimal pack - out of memory"
 msgstr "ungünstiges Packet - Speicher voll"
 
-#: builtin/pack-objects.c:2456
+#: builtin/pack-objects.c:2440
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Delta-Kompression verwendet bis zu %d Threads."
 
-#: builtin/pack-objects.c:2588
+#: builtin/pack-objects.c:2572
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "Konnte keine Objekte packen, die von Tag %s erreichbar sind."
 
-#: builtin/pack-objects.c:2675
+#: builtin/pack-objects.c:2659
 msgid "Compressing objects"
 msgstr "Komprimiere Objekte"
 
-#: builtin/pack-objects.c:2681
+#: builtin/pack-objects.c:2665
 msgid "inconsistency with delta count"
 msgstr "Inkonsistenz mit der Anzahl von Deltas"
 
-#: builtin/pack-objects.c:2762
+#: builtin/pack-objects.c:2742
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -16457,7 +16540,7 @@
 "Erwartete Randobjekt-ID, erhielt nutzlose Daten:\n"
 " %s"
 
-#: builtin/pack-objects.c:2768
+#: builtin/pack-objects.c:2748
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -16466,256 +16549,256 @@
 "Erwartete Objekt-ID, erhielt nutzlose Daten:\n"
 " %s"
 
-#: builtin/pack-objects.c:2866
+#: builtin/pack-objects.c:2846
 msgid "invalid value for --missing"
 msgstr "Ungültiger Wert für --missing."
 
-#: builtin/pack-objects.c:2925 builtin/pack-objects.c:3033
+#: builtin/pack-objects.c:2905 builtin/pack-objects.c:3013
 msgid "cannot open pack index"
 msgstr "Kann Paketindex nicht öffnen."
 
-#: builtin/pack-objects.c:2956
+#: builtin/pack-objects.c:2936
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "Loses Objekt bei %s konnte nicht untersucht werden."
 
-#: builtin/pack-objects.c:3041
+#: builtin/pack-objects.c:3021
 msgid "unable to force loose object"
 msgstr "Konnte loses Objekt nicht erzwingen."
 
-#: builtin/pack-objects.c:3133
+#: builtin/pack-objects.c:3113
 #, c-format
 msgid "not a rev '%s'"
 msgstr "'%s' ist kein Commit."
 
-#: builtin/pack-objects.c:3136
+#: builtin/pack-objects.c:3116
 #, c-format
 msgid "bad revision '%s'"
 msgstr "Ungültiger Commit '%s'."
 
-#: builtin/pack-objects.c:3161
+#: builtin/pack-objects.c:3141
 msgid "unable to add recent objects"
 msgstr "Konnte jüngste Objekte nicht hinzufügen."
 
-#: builtin/pack-objects.c:3214
+#: builtin/pack-objects.c:3194
 #, c-format
 msgid "unsupported index version %s"
 msgstr "Nicht unterstützte Index-Version %s"
 
-#: builtin/pack-objects.c:3218
+#: builtin/pack-objects.c:3198
 #, c-format
 msgid "bad index version '%s'"
 msgstr "Ungültige Index-Version '%s'"
 
-#: builtin/pack-objects.c:3248
+#: builtin/pack-objects.c:3228
 msgid "do not show progress meter"
 msgstr "keine Fortschrittsanzeige anzeigen"
 
-#: builtin/pack-objects.c:3250
+#: builtin/pack-objects.c:3230
 msgid "show progress meter"
 msgstr "Fortschrittsanzeige anzeigen"
 
-#: builtin/pack-objects.c:3252
+#: builtin/pack-objects.c:3232
 msgid "show progress meter during object writing phase"
 msgstr "Forschrittsanzeige während des Schreibens von Objekten anzeigen"
 
-#: builtin/pack-objects.c:3255
+#: builtin/pack-objects.c:3235
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "ähnlich zu --all-progress wenn Fortschrittsanzeige darstellt wird"
 
-#: builtin/pack-objects.c:3256
+#: builtin/pack-objects.c:3236
 msgid "<version>[,<offset>]"
 msgstr "<Version>[,<Offset>]"
 
-#: builtin/pack-objects.c:3257
+#: builtin/pack-objects.c:3237
 msgid "write the pack index file in the specified idx format version"
 msgstr ""
 "die Index-Datei des Paketes in der angegebenen Indexformat-Version schreiben"
 
-#: builtin/pack-objects.c:3260
+#: builtin/pack-objects.c:3240
 msgid "maximum size of each output pack file"
 msgstr "maximale Größe für jede ausgegebene Paketdatei"
 
-#: builtin/pack-objects.c:3262
+#: builtin/pack-objects.c:3242
 msgid "ignore borrowed objects from alternate object store"
 msgstr "geliehene Objekte von alternativem Objektspeicher ignorieren"
 
-#: builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3244
 msgid "ignore packed objects"
 msgstr "gepackte Objekte ignorieren"
 
-#: builtin/pack-objects.c:3266
+#: builtin/pack-objects.c:3246
 msgid "limit pack window by objects"
 msgstr "Paketfenster durch Objekte begrenzen"
 
-#: builtin/pack-objects.c:3268
+#: builtin/pack-objects.c:3248
 msgid "limit pack window by memory in addition to object limit"
 msgstr ""
 "Paketfenster, zusätzlich zur Objektbegrenzung, durch Speicher begrenzen"
 
-#: builtin/pack-objects.c:3270
+#: builtin/pack-objects.c:3250
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr ""
 "maximale Länge der erlaubten Differenzverkettung im resultierenden Paket"
 
-#: builtin/pack-objects.c:3272
+#: builtin/pack-objects.c:3252
 msgid "reuse existing deltas"
 msgstr "existierende Unterschiede wiederverwenden"
 
-#: builtin/pack-objects.c:3274
+#: builtin/pack-objects.c:3254
 msgid "reuse existing objects"
 msgstr "existierende Objekte wiederverwenden"
 
-#: builtin/pack-objects.c:3276
+#: builtin/pack-objects.c:3256
 msgid "use OFS_DELTA objects"
 msgstr "OFS_DELTA Objekte verwenden"
 
-#: builtin/pack-objects.c:3278
+#: builtin/pack-objects.c:3258
 msgid "use threads when searching for best delta matches"
 msgstr ""
 "Threads bei der Suche nach den besten Übereinstimmungen bei Unterschieden "
 "verwenden"
 
-#: builtin/pack-objects.c:3280
+#: builtin/pack-objects.c:3260
 msgid "do not create an empty pack output"
 msgstr "keine leeren Pakete erzeugen"
 
-#: builtin/pack-objects.c:3282
+#: builtin/pack-objects.c:3262
 msgid "read revision arguments from standard input"
 msgstr "Argumente bezüglich Commits von der Standard-Eingabe lesen"
 
-#: builtin/pack-objects.c:3284
+#: builtin/pack-objects.c:3264
 msgid "limit the objects to those that are not yet packed"
 msgstr "die Objekte zu solchen, die noch nicht gepackt wurden, begrenzen"
 
-#: builtin/pack-objects.c:3287
+#: builtin/pack-objects.c:3267
 msgid "include objects reachable from any reference"
 msgstr "Objekte einschließen, die von jeder Referenz erreichbar sind"
 
-#: builtin/pack-objects.c:3290
+#: builtin/pack-objects.c:3270
 msgid "include objects referred by reflog entries"
 msgstr ""
 "Objekte einschließen, die von Einträgen des Reflogs referenziert werden"
 
-#: builtin/pack-objects.c:3293
+#: builtin/pack-objects.c:3273
 msgid "include objects referred to by the index"
 msgstr "Objekte einschließen, die vom Index referenziert werden"
 
-#: builtin/pack-objects.c:3296
+#: builtin/pack-objects.c:3276
 msgid "output pack to stdout"
 msgstr "Paket in die Standard-Ausgabe schreiben"
 
-#: builtin/pack-objects.c:3298
+#: builtin/pack-objects.c:3278
 msgid "include tag objects that refer to objects to be packed"
 msgstr "Tag-Objekte einschließen, die auf gepackte Objekte referenzieren"
 
-#: builtin/pack-objects.c:3300
+#: builtin/pack-objects.c:3280
 msgid "keep unreachable objects"
 msgstr "nicht erreichbare Objekte behalten"
 
-#: builtin/pack-objects.c:3302
+#: builtin/pack-objects.c:3282
 msgid "pack loose unreachable objects"
 msgstr "nicht erreichbare lose Objekte packen"
 
-#: builtin/pack-objects.c:3304
+#: builtin/pack-objects.c:3284
 msgid "unpack unreachable objects newer than <time>"
 msgstr "nicht erreichbare Objekte entpacken, die neuer als <Zeit> sind"
 
-#: builtin/pack-objects.c:3307
+#: builtin/pack-objects.c:3287
 msgid "use the sparse reachability algorithm"
 msgstr "den \"sparse\" Algorithmus zur Bestimmung der Erreichbarkeit benutzen"
 
-#: builtin/pack-objects.c:3309
+#: builtin/pack-objects.c:3289
 msgid "create thin packs"
 msgstr "dünnere Pakete erzeugen"
 
-#: builtin/pack-objects.c:3311
+#: builtin/pack-objects.c:3291
 msgid "create packs suitable for shallow fetches"
 msgstr ""
 "Pakete geeignet für Abholung mit unvollständiger Historie (shallow) erzeugen"
 
-#: builtin/pack-objects.c:3313
+#: builtin/pack-objects.c:3293
 msgid "ignore packs that have companion .keep file"
 msgstr "Pakete ignorieren, die .keep Dateien haben"
 
-#: builtin/pack-objects.c:3315
+#: builtin/pack-objects.c:3295
 msgid "ignore this pack"
 msgstr "dieses Paket ignorieren"
 
-#: builtin/pack-objects.c:3317
+#: builtin/pack-objects.c:3297
 msgid "pack compression level"
 msgstr "Komprimierungsgrad für Paketierung"
 
-#: builtin/pack-objects.c:3319
+#: builtin/pack-objects.c:3299
 msgid "do not hide commits by grafts"
 msgstr "keine künstlichen Vorgänger-Commits (\"grafts\") verbergen"
 
-#: builtin/pack-objects.c:3321
+#: builtin/pack-objects.c:3301
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr ""
 "Bitmap-Index (falls verfügbar) zur Optimierung der Objektzählung benutzen"
 
-#: builtin/pack-objects.c:3323
+#: builtin/pack-objects.c:3303
 msgid "write a bitmap index together with the pack index"
 msgstr "Bitmap-Index zusammen mit Pack-Index schreiben"
 
-#: builtin/pack-objects.c:3327
+#: builtin/pack-objects.c:3307
 msgid "write a bitmap index if possible"
 msgstr "Bitmap-Index schreiben, wenn möglich"
 
-#: builtin/pack-objects.c:3331
+#: builtin/pack-objects.c:3311
 msgid "handling for missing objects"
 msgstr "Behandlung für fehlende Objekte"
 
-#: builtin/pack-objects.c:3334
+#: builtin/pack-objects.c:3314
 msgid "do not pack objects in promisor packfiles"
 msgstr ""
 "keine Objekte aus Packdateien von partiell geklonten Remote-Repositories "
 "packen"
 
-#: builtin/pack-objects.c:3336
+#: builtin/pack-objects.c:3316
 msgid "respect islands during delta compression"
 msgstr "Delta-Islands bei Delta-Kompression beachten"
 
-#: builtin/pack-objects.c:3361
+#: builtin/pack-objects.c:3345
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "Tiefe für Verkettung von Unterschieden %d ist zu tief, erzwinge %d"
 
-#: builtin/pack-objects.c:3366
+#: builtin/pack-objects.c:3350
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "pack.deltaCacheLimit ist zu hoch, erzwinge %d"
 
-#: builtin/pack-objects.c:3420
+#: builtin/pack-objects.c:3404
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 "--max-pack-size kann nicht für die Erstellung eines Pakets für eine "
 "Übertragung\n"
 "benutzt werden."
 
-#: builtin/pack-objects.c:3422
+#: builtin/pack-objects.c:3406
 msgid "minimum pack size limit is 1 MiB"
 msgstr "Minimales Limit für die Paketgröße ist 1 MiB."
 
-#: builtin/pack-objects.c:3427
+#: builtin/pack-objects.c:3411
 msgid "--thin cannot be used to build an indexable pack"
 msgstr ""
 "--thin kann nicht benutzt werden, um ein indizierbares Paket zu erstellen."
 
-#: builtin/pack-objects.c:3430
+#: builtin/pack-objects.c:3414
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr "--keep-unreachable und --unpack-unreachable sind inkompatibel"
 
-#: builtin/pack-objects.c:3436
+#: builtin/pack-objects.c:3420
 msgid "cannot use --filter without --stdout"
 msgstr "Kann --filter nicht ohne --stdout benutzen."
 
-#: builtin/pack-objects.c:3497
+#: builtin/pack-objects.c:3481
 msgid "Enumerating objects"
 msgstr "Objekte aufzählen"
 
-#: builtin/pack-objects.c:3527
+#: builtin/pack-objects.c:3511
 #, c-format
 msgid "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>)"
 msgstr ""
@@ -16773,44 +16856,44 @@
 msgid "git pull [<options>] [<repository> [<refspec>...]]"
 msgstr "git pull [<Optionen>] [<Repository> [<Refspec>...]]"
 
-#: builtin/pull.c:141
+#: builtin/pull.c:142
 msgid "control for recursive fetching of submodules"
 msgstr "rekursive Anforderungen von Submodulen kontrollieren"
 
-#: builtin/pull.c:145
+#: builtin/pull.c:146
 msgid "Options related to merging"
 msgstr "Optionen bezogen auf Merge"
 
-#: builtin/pull.c:148
+#: builtin/pull.c:149
 msgid "incorporate changes by rebasing rather than merging"
 msgstr "Integration von Änderungen durch Rebase statt Merge"
 
-#: builtin/pull.c:176 builtin/rebase.c:447 builtin/revert.c:126
+#: builtin/pull.c:177 builtin/rebase.c:448 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "Vorspulen erlauben"
 
-#: builtin/pull.c:185
+#: builtin/pull.c:186
 msgid "automatically stash/stash pop before and after rebase"
 msgstr "automatischer Stash/Stash-Pop vor und nach eines Rebase"
 
-#: builtin/pull.c:201
+#: builtin/pull.c:202
 msgid "Options related to fetching"
 msgstr "Optionen bezogen auf Fetch"
 
-#: builtin/pull.c:211
+#: builtin/pull.c:212
 msgid "force overwrite of local branch"
 msgstr "das Überschreiben von lokalen Branches erzwingen"
 
-#: builtin/pull.c:219
+#: builtin/pull.c:220
 msgid "number of submodules pulled in parallel"
 msgstr "Anzahl der parallel mit 'pull' zu verarbeitenden Submodule"
 
-#: builtin/pull.c:316
+#: builtin/pull.c:320
 #, c-format
 msgid "Invalid value for pull.ff: %s"
 msgstr "Ungültiger Wert für pull.ff: %s"
 
-#: builtin/pull.c:433
+#: builtin/pull.c:437
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
 "fetched."
@@ -16818,14 +16901,14 @@
 "Es gibt keinen Kandidaten für Rebase innerhalb der Referenzen, die eben "
 "angefordert wurden."
 
-#: builtin/pull.c:435
+#: builtin/pull.c:439
 msgid ""
 "There are no candidates for merging among the refs that you just fetched."
 msgstr ""
 "Es gibt keine Kandidaten für Merge innerhalb der Referenzen, die eben "
 "angefordert wurden."
 
-#: builtin/pull.c:436
+#: builtin/pull.c:440
 msgid ""
 "Generally this means that you provided a wildcard refspec which had no\n"
 "matches on the remote end."
@@ -16833,7 +16916,7 @@
 "Im Allgemeinen bedeutet das, dass Sie einen Refspec mit Wildcards angegeben\n"
 "haben, der auf der Gegenseite mit keinen Referenzen übereinstimmt."
 
-#: builtin/pull.c:439
+#: builtin/pull.c:443
 #, c-format
 msgid ""
 "You asked to pull from the remote '%s', but did not specify\n"
@@ -16845,39 +16928,39 @@
 "Repository für den aktuellen Branch ist, müssen Sie einen Branch auf\n"
 "der Befehlszeile angeben."
 
-#: builtin/pull.c:444 builtin/rebase.c:1326 git-parse-remote.sh:73
+#: builtin/pull.c:448 builtin/rebase.c:1347 git-parse-remote.sh:73
 msgid "You are not currently on a branch."
 msgstr "Im Moment auf keinem Branch."
 
-#: builtin/pull.c:446 builtin/pull.c:461 git-parse-remote.sh:79
+#: builtin/pull.c:450 builtin/pull.c:465 git-parse-remote.sh:79
 msgid "Please specify which branch you want to rebase against."
 msgstr ""
 "Bitte geben Sie den Branch an, gegen welchen Sie \"rebase\" ausführen "
 "möchten."
 
-#: builtin/pull.c:448 builtin/pull.c:463 git-parse-remote.sh:82
+#: builtin/pull.c:452 builtin/pull.c:467 git-parse-remote.sh:82
 msgid "Please specify which branch you want to merge with."
 msgstr "Bitte geben Sie den Branch an, welchen Sie zusammenführen möchten."
 
-#: builtin/pull.c:449 builtin/pull.c:464
+#: builtin/pull.c:453 builtin/pull.c:468
 msgid "See git-pull(1) for details."
 msgstr "Siehe git-pull(1) für weitere Details."
 
-#: builtin/pull.c:451 builtin/pull.c:457 builtin/pull.c:466
-#: builtin/rebase.c:1332 git-parse-remote.sh:64
+#: builtin/pull.c:455 builtin/pull.c:461 builtin/pull.c:470
+#: builtin/rebase.c:1353 git-parse-remote.sh:64
 msgid "<remote>"
 msgstr "<Remote-Repository>"
 
-#: builtin/pull.c:451 builtin/pull.c:466 builtin/pull.c:471
+#: builtin/pull.c:455 builtin/pull.c:470 builtin/pull.c:475
 #: git-parse-remote.sh:65
 msgid "<branch>"
 msgstr "<Branch>"
 
-#: builtin/pull.c:459 builtin/rebase.c:1324 git-parse-remote.sh:75
+#: builtin/pull.c:463 builtin/rebase.c:1345 git-parse-remote.sh:75
 msgid "There is no tracking information for the current branch."
 msgstr "Es gibt keine Tracking-Informationen für den aktuellen Branch."
 
-#: builtin/pull.c:468 git-parse-remote.sh:95
+#: builtin/pull.c:472 git-parse-remote.sh:95
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:"
 msgstr ""
@@ -16885,7 +16968,7 @@
 "Sie\n"
 "dies tun mit:"
 
-#: builtin/pull.c:473
+#: builtin/pull.c:477
 #, c-format
 msgid ""
 "Your configuration specifies to merge with the ref '%s'\n"
@@ -16895,34 +16978,34 @@
 "des Remote-Repositories durchzuführen, aber diese Referenz\n"
 "wurde nicht angefordert."
 
-#: builtin/pull.c:581
+#: builtin/pull.c:587
 #, c-format
 msgid "unable to access commit %s"
 msgstr "Konnte nicht auf Commit '%s' zugreifen."
 
-#: builtin/pull.c:861
+#: builtin/pull.c:867
 msgid "ignoring --verify-signatures for rebase"
 msgstr "Ignoriere --verify-signatures für Rebase"
 
-#: builtin/pull.c:916
+#: builtin/pull.c:922
 msgid "--[no-]autostash option is only valid with --rebase."
 msgstr "--[no-]autostash ist nur mit --rebase zulässig."
 
-#: builtin/pull.c:924
+#: builtin/pull.c:930
 msgid "Updating an unborn branch with changes added to the index."
 msgstr ""
 "Aktualisiere einen ungeborenen Branch mit Änderungen, die zum Commit "
 "vorgemerkt sind."
 
-#: builtin/pull.c:928
+#: builtin/pull.c:934
 msgid "pull with rebase"
 msgstr "Pull mit Rebase"
 
-#: builtin/pull.c:929
+#: builtin/pull.c:935
 msgid "please commit or stash them."
 msgstr "Bitte committen Sie die Änderungen oder benutzen Sie \"stash\"."
 
-#: builtin/pull.c:954
+#: builtin/pull.c:960
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -16932,7 +17015,7 @@
 "\"fetch\" aktualisierte die Spitze des aktuellen Branches.\n"
 "Spule Ihr Arbeitsverzeichnis von Commit %s vor."
 
-#: builtin/pull.c:960
+#: builtin/pull.c:966
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -16949,15 +17032,15 @@
 "$ git reset --hard\n"
 "zur Wiederherstellung aus."
 
-#: builtin/pull.c:975
+#: builtin/pull.c:981
 msgid "Cannot merge multiple branches into empty head."
 msgstr "Kann nicht mehrere Branches in einen leeren Branch zusammenführen."
 
-#: builtin/pull.c:979
+#: builtin/pull.c:985
 msgid "Cannot rebase onto multiple branches."
 msgstr "Kann Rebase nicht auf mehrere Branches ausführen."
 
-#: builtin/pull.c:986
+#: builtin/pull.c:992
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 "Kann Rebase nicht mit lokal aufgezeichneten Änderungen in Submodulen "
@@ -17131,17 +17214,94 @@
 msgid "Pushing to %s\n"
 msgstr "Versende nach %s\n"
 
-#: builtin/push.c:364
+#: builtin/push.c:366
 #, c-format
 msgid "failed to push some refs to '%s'"
 msgstr "Fehler beim Versenden einiger Referenzen nach '%s'"
 
-#: builtin/push.c:398
+#: builtin/push.c:541
+msgid "repository"
+msgstr "Repository"
+
+#: builtin/push.c:542 builtin/send-pack.c:164
+msgid "push all refs"
+msgstr "alle Referenzen versenden"
+
+#: builtin/push.c:543 builtin/send-pack.c:166
+msgid "mirror all refs"
+msgstr "alle Referenzen spiegeln"
+
+#: builtin/push.c:545
+msgid "delete refs"
+msgstr "Referenzen löschen"
+
+#: builtin/push.c:546
+msgid "push tags (can't be used with --all or --mirror)"
+msgstr "Tags versenden (kann nicht mit --all oder --mirror verwendet werden)"
+
+#: builtin/push.c:549 builtin/send-pack.c:167
+msgid "force updates"
+msgstr "Aktualisierung erzwingen"
+
+#: builtin/push.c:551 builtin/send-pack.c:181
+msgid "<refname>:<expect>"
+msgstr "<Referenzname>:<Erwartungswert>"
+
+#: builtin/push.c:552 builtin/send-pack.c:182
+msgid "require old value of ref to be at this value"
+msgstr "Referenz muss sich auf dem angegebenen Wert befinden"
+
+#: builtin/push.c:555
+msgid "control recursive pushing of submodules"
+msgstr "rekursiven \"push\" von Submodulen steuern"
+
+#: builtin/push.c:557 builtin/send-pack.c:175
+msgid "use thin pack"
+msgstr "kleinere Pakete verwenden"
+
+#: builtin/push.c:558 builtin/push.c:559 builtin/send-pack.c:161
+#: builtin/send-pack.c:162
+msgid "receive pack program"
+msgstr "'receive pack' Programm"
+
+#: builtin/push.c:560
+msgid "set upstream for git pull/status"
+msgstr "Upstream für \"git pull/status\" setzen"
+
+#: builtin/push.c:563
+msgid "prune locally removed refs"
+msgstr "lokal gelöschte Referenzen entfernen"
+
+#: builtin/push.c:565
+msgid "bypass pre-push hook"
+msgstr "\"pre-push hook\" umgehen"
+
+#: builtin/push.c:566
+msgid "push missing but relevant tags"
+msgstr "fehlende, aber relevante Tags versenden"
+
+#: builtin/push.c:569 builtin/send-pack.c:169
+msgid "GPG sign the push"
+msgstr "signiert \"push\" mit GPG"
+
+#: builtin/push.c:571 builtin/send-pack.c:176
+msgid "request atomic transaction on remote side"
+msgstr "Referenzen atomar versenden"
+
+#: builtin/push.c:589
+msgid "--delete is incompatible with --all, --mirror and --tags"
+msgstr "Die Option --delete ist inkompatibel mit --all, --mirror und --tags."
+
+#: builtin/push.c:591
+msgid "--delete doesn't make sense without any refs"
+msgstr "Die Option --delete kann nur mit Referenzen verwendet werden."
+
+#: builtin/push.c:611
 #, c-format
 msgid "bad repository '%s'"
 msgstr "ungültiges Repository '%s'"
 
-#: builtin/push.c:399
+#: builtin/push.c:612
 msgid ""
 "No configured push destination.\n"
 "Either specify the URL from the command-line or configure a remote "
@@ -17163,104 +17323,27 @@
 "\n"
 "    git push <Name>\n"
 
-#: builtin/push.c:554
-msgid "repository"
-msgstr "Repository"
-
-#: builtin/push.c:555 builtin/send-pack.c:164
-msgid "push all refs"
-msgstr "alle Referenzen versenden"
-
-#: builtin/push.c:556 builtin/send-pack.c:166
-msgid "mirror all refs"
-msgstr "alle Referenzen spiegeln"
-
-#: builtin/push.c:558
-msgid "delete refs"
-msgstr "Referenzen löschen"
-
-#: builtin/push.c:559
-msgid "push tags (can't be used with --all or --mirror)"
-msgstr "Tags versenden (kann nicht mit --all oder --mirror verwendet werden)"
-
-#: builtin/push.c:562 builtin/send-pack.c:167
-msgid "force updates"
-msgstr "Aktualisierung erzwingen"
-
-#: builtin/push.c:564 builtin/send-pack.c:181
-msgid "<refname>:<expect>"
-msgstr "<Referenzname>:<Erwartungswert>"
-
-#: builtin/push.c:565 builtin/send-pack.c:182
-msgid "require old value of ref to be at this value"
-msgstr "Referenz muss sich auf dem angegebenen Wert befinden"
-
-#: builtin/push.c:568
-msgid "control recursive pushing of submodules"
-msgstr "rekursiven \"push\" von Submodulen steuern"
-
-#: builtin/push.c:570 builtin/send-pack.c:175
-msgid "use thin pack"
-msgstr "kleinere Pakete verwenden"
-
-#: builtin/push.c:571 builtin/push.c:572 builtin/send-pack.c:161
-#: builtin/send-pack.c:162
-msgid "receive pack program"
-msgstr "'receive pack' Programm"
-
-#: builtin/push.c:573
-msgid "set upstream for git pull/status"
-msgstr "Upstream für \"git pull/status\" setzen"
-
-#: builtin/push.c:576
-msgid "prune locally removed refs"
-msgstr "lokal gelöschte Referenzen entfernen"
-
-#: builtin/push.c:578
-msgid "bypass pre-push hook"
-msgstr "\"pre-push hook\" umgehen"
-
-#: builtin/push.c:579
-msgid "push missing but relevant tags"
-msgstr "fehlende, aber relevante Tags versenden"
-
-#: builtin/push.c:582 builtin/send-pack.c:169
-msgid "GPG sign the push"
-msgstr "signiert \"push\" mit GPG"
-
-#: builtin/push.c:584 builtin/send-pack.c:176
-msgid "request atomic transaction on remote side"
-msgstr "Referenzen atomar versenden"
-
-#: builtin/push.c:602
-msgid "--delete is incompatible with --all, --mirror and --tags"
-msgstr "Die Option --delete ist inkompatibel mit --all, --mirror und --tags."
-
-#: builtin/push.c:604
-msgid "--delete doesn't make sense without any refs"
-msgstr "Die Option --delete kann nur mit Referenzen verwendet werden."
-
-#: builtin/push.c:607
+#: builtin/push.c:627
 msgid "--all and --tags are incompatible"
 msgstr "Die Optionen --all und --tags sind inkompatibel."
 
-#: builtin/push.c:609
+#: builtin/push.c:629
 msgid "--all can't be combined with refspecs"
 msgstr "Die Option --all kann nicht mit Refspecs kombiniert werden."
 
-#: builtin/push.c:613
+#: builtin/push.c:633
 msgid "--mirror and --tags are incompatible"
 msgstr "Die Optionen --mirror und --tags sind inkompatibel."
 
-#: builtin/push.c:615
+#: builtin/push.c:635
 msgid "--mirror can't be combined with refspecs"
 msgstr "Die Option --mirror kann nicht mit Refspecs kombiniert werden."
 
-#: builtin/push.c:618
+#: builtin/push.c:638
 msgid "--all and --mirror are incompatible"
 msgstr "Die Optionen --all und --mirror sind inkompatibel."
 
-#: builtin/push.c:637
+#: builtin/push.c:642
 msgid "push options must not have new line characters"
 msgstr "Push-Optionen dürfen keine Zeilenvorschubzeichen haben"
 
@@ -17380,11 +17463,11 @@
 
 #: builtin/rebase.c:32
 msgid ""
-"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] "
-"[<branch>]"
+"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
+"[<upstream> [<branch>]]"
 msgstr ""
-"git rebase [-i] [<Optionen>] [--exec <Programm>] [--onto <neue-Basis>] "
-"[<Upstream>] [<Branch>]"
+"git rebase [-i] [<Optionen>] [--exec <Programm>] [--onto <neue-Basis> | --"
+"keep-base] [<Upstream> [<Branch>]]"
 
 #: builtin/rebase.c:34
 msgid ""
@@ -17424,190 +17507,190 @@
 msgid "could not generate todo list"
 msgstr "Konnte TODO-Liste nicht erzeugen."
 
-#: builtin/rebase.c:382
+#: builtin/rebase.c:383
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "Ein Basis-Commit muss mit --upstream oder --onto angegeben werden."
 
-#: builtin/rebase.c:437
+#: builtin/rebase.c:438
 msgid "git rebase--interactive [<options>]"
 msgstr "git rebase--interactive [<Optionen>]"
 
-#: builtin/rebase.c:449
+#: builtin/rebase.c:450
 msgid "keep empty commits"
 msgstr "leere Commits behalten"
 
-#: builtin/rebase.c:451 builtin/revert.c:128
+#: builtin/rebase.c:452 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr "Commits mit leerer Beschreibung erlauben"
 
-#: builtin/rebase.c:452
+#: builtin/rebase.c:453
 msgid "rebase merge commits"
 msgstr "Rebase auf Merge-Commits ausführen"
 
-#: builtin/rebase.c:454
+#: builtin/rebase.c:455
 msgid "keep original branch points of cousins"
 msgstr "originale Branch-Punkte der Cousins behalten"
 
-#: builtin/rebase.c:456
+#: builtin/rebase.c:457
 msgid "move commits that begin with squash!/fixup!"
 msgstr "Commits verschieben, die mit squash!/fixup! beginnen"
 
-#: builtin/rebase.c:457
+#: builtin/rebase.c:458
 msgid "sign commits"
 msgstr "Commits signieren"
 
-#: builtin/rebase.c:459 builtin/rebase.c:1403
+#: builtin/rebase.c:460 builtin/rebase.c:1427
 msgid "display a diffstat of what changed upstream"
 msgstr ""
 "Zusammenfassung der Unterschiede gegenüber dem Upstream-Branch anzeigen"
 
-#: builtin/rebase.c:461
+#: builtin/rebase.c:462
 msgid "continue rebase"
 msgstr "Rebase fortsetzen"
 
-#: builtin/rebase.c:463
+#: builtin/rebase.c:464
 msgid "skip commit"
 msgstr "Commit auslassen"
 
-#: builtin/rebase.c:464
+#: builtin/rebase.c:465
 msgid "edit the todo list"
 msgstr "die TODO-Liste bearbeiten"
 
-#: builtin/rebase.c:466
+#: builtin/rebase.c:467
 msgid "show the current patch"
 msgstr "den aktuellen Patch anzeigen"
 
-#: builtin/rebase.c:469
+#: builtin/rebase.c:470
 msgid "shorten commit ids in the todo list"
 msgstr "Commit-IDs in der TODO-Liste verkürzen"
 
-#: builtin/rebase.c:471
+#: builtin/rebase.c:472
 msgid "expand commit ids in the todo list"
 msgstr "Commit-IDs in der TODO-Liste erweitern"
 
-#: builtin/rebase.c:473
+#: builtin/rebase.c:474
 msgid "check the todo list"
 msgstr "die TODO-Liste prüfen"
 
-#: builtin/rebase.c:475
+#: builtin/rebase.c:476
 msgid "rearrange fixup/squash lines"
 msgstr "fixup/squash-Zeilen umordnen"
 
-#: builtin/rebase.c:477
+#: builtin/rebase.c:478
 msgid "insert exec commands in todo list"
 msgstr "\"exec\"-Befehle in TODO-Liste einfügen"
 
-#: builtin/rebase.c:478
+#: builtin/rebase.c:479
 msgid "onto"
 msgstr "auf"
 
-#: builtin/rebase.c:481
+#: builtin/rebase.c:482
 msgid "restrict-revision"
 msgstr "Begrenzungscommit"
 
-#: builtin/rebase.c:481
+#: builtin/rebase.c:482
 msgid "restrict revision"
 msgstr "Begrenzungscommit"
 
-#: builtin/rebase.c:483
+#: builtin/rebase.c:484
 msgid "squash-onto"
 msgstr "squash-onto"
 
-#: builtin/rebase.c:484
+#: builtin/rebase.c:485
 msgid "squash onto"
 msgstr "squash onto"
 
-#: builtin/rebase.c:486
+#: builtin/rebase.c:487
 msgid "the upstream commit"
 msgstr "der Upstream-Commit"
 
-#: builtin/rebase.c:488
+#: builtin/rebase.c:489
 msgid "head-name"
 msgstr "head-Name"
 
-#: builtin/rebase.c:488
+#: builtin/rebase.c:489
 msgid "head name"
 msgstr "head-Name"
 
-#: builtin/rebase.c:493
+#: builtin/rebase.c:494
 msgid "rebase strategy"
 msgstr "Rebase-Strategie"
 
-#: builtin/rebase.c:494
+#: builtin/rebase.c:495
 msgid "strategy-opts"
 msgstr "Strategie-Optionen"
 
-#: builtin/rebase.c:495
+#: builtin/rebase.c:496
 msgid "strategy options"
 msgstr "Strategie-Optionen"
 
-#: builtin/rebase.c:496
+#: builtin/rebase.c:497
 msgid "switch-to"
 msgstr "wechseln zu"
 
-#: builtin/rebase.c:497
+#: builtin/rebase.c:498
 msgid "the branch or commit to checkout"
 msgstr "der Branch oder Commit zum Auschecken"
 
-#: builtin/rebase.c:498
+#: builtin/rebase.c:499
 msgid "onto-name"
 msgstr "onto-Name"
 
-#: builtin/rebase.c:498
+#: builtin/rebase.c:499
 msgid "onto name"
 msgstr "onto-Name"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "cmd"
 msgstr "Befehl"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "the command to run"
 msgstr "auszuführender Befehl"
 
-#: builtin/rebase.c:502 builtin/rebase.c:1486
+#: builtin/rebase.c:503 builtin/rebase.c:1510
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "jeden fehlgeschlagenen `exec`-Befehl neu ansetzen"
 
-#: builtin/rebase.c:518
+#: builtin/rebase.c:519
 msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
 msgstr "--[no-]rebase-cousins hat ohne --rebase-merges keine Auswirkung"
 
-#: builtin/rebase.c:534
+#: builtin/rebase.c:535
 #, c-format
 msgid "%s requires an interactive rebase"
 msgstr "%s erfordert ein interaktives Rebase"
 
-#: builtin/rebase.c:586
+#: builtin/rebase.c:587
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "Konnte 'onto' nicht bestimmen: '%s'"
 
-#: builtin/rebase.c:601
+#: builtin/rebase.c:602
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "Ungültiges orig-head: '%s'"
 
-#: builtin/rebase.c:626
+#: builtin/rebase.c:627
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "Ignoriere ungültiges allow_rerere_autoupdate: '%s'"
 
-#: builtin/rebase.c:702
+#: builtin/rebase.c:703
 #, c-format
 msgid "Could not read '%s'"
 msgstr "Konnte '%s' nicht lesen."
 
-#: builtin/rebase.c:720
+#: builtin/rebase.c:721
 #, c-format
 msgid "Cannot store %s"
 msgstr "Kann %s nicht speichern."
 
-#: builtin/rebase.c:827
+#: builtin/rebase.c:828
 msgid "could not determine HEAD revision"
 msgstr "Konnte HEAD-Commit nicht bestimmen."
 
-#: builtin/rebase.c:950 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:951 git-rebase--preserve-merges.sh:81
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -17623,7 +17706,7 @@
 "Um abzubrechen und zurück zum Zustand vor \"git rebase\" zu gelangen,\n"
 "führen Sie \"git rebase --abort\" aus."
 
-#: builtin/rebase.c:1031
+#: builtin/rebase.c:1032
 #, c-format
 msgid ""
 "\n"
@@ -17643,7 +17726,7 @@
 "Infolge dessen kann Git auf diesen Revisionen Rebase nicht\n"
 "ausführen."
 
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1339
 #, c-format
 msgid ""
 "%s\n"
@@ -17661,7 +17744,7 @@
 "    git rebase '<Branch>'\n"
 "\n"
 
-#: builtin/rebase.c:1334
+#: builtin/rebase.c:1355
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -17675,132 +17758,136 @@
 "    git branch --set-upstream-to=%s/<Branch> %s\n"
 "\n"
 
-#: builtin/rebase.c:1364
+#: builtin/rebase.c:1385
 msgid "exec commands cannot contain newlines"
 msgstr "\"exec\"-Befehle können keine neuen Zeilen enthalten"
 
-#: builtin/rebase.c:1368
+#: builtin/rebase.c:1389
 msgid "empty exec command"
 msgstr "Leerer \"exec\"-Befehl."
 
-#: builtin/rebase.c:1396
+#: builtin/rebase.c:1418
 msgid "rebase onto given branch instead of upstream"
 msgstr "Rebase auf angegebenen Branch anstelle des Upstream-Branches ausführen"
 
-#: builtin/rebase.c:1398
+#: builtin/rebase.c:1420
+msgid "use the merge-base of upstream and branch as the current base"
+msgstr "Nutze die Merge-Basis von Upstream und Branch als die aktuelle Basis"
+
+#: builtin/rebase.c:1422
 msgid "allow pre-rebase hook to run"
 msgstr "Ausführung des pre-rebase-Hooks erlauben"
 
-#: builtin/rebase.c:1400
+#: builtin/rebase.c:1424
 msgid "be quiet. implies --no-stat"
 msgstr "weniger Ausgaben (impliziert --no-stat)"
 
-#: builtin/rebase.c:1406
+#: builtin/rebase.c:1430
 msgid "do not show diffstat of what changed upstream"
 msgstr ""
 "Zusammenfassung der Unterschiede gegenüber dem Upstream-Branch verbergen"
 
-#: builtin/rebase.c:1409
+#: builtin/rebase.c:1433
 msgid "add a Signed-off-by: line to each commit"
 msgstr "eine \"Signed-off-by:\"-Zeile zu jedem Commit hinzufügen"
 
-#: builtin/rebase.c:1411 builtin/rebase.c:1415 builtin/rebase.c:1417
+#: builtin/rebase.c:1435 builtin/rebase.c:1439 builtin/rebase.c:1441
 msgid "passed to 'git am'"
 msgstr "an 'git am' übergeben"
 
-#: builtin/rebase.c:1419 builtin/rebase.c:1421
+#: builtin/rebase.c:1443 builtin/rebase.c:1445
 msgid "passed to 'git apply'"
 msgstr "an 'git apply' übergeben"
 
-#: builtin/rebase.c:1423 builtin/rebase.c:1426
+#: builtin/rebase.c:1447 builtin/rebase.c:1450
 msgid "cherry-pick all commits, even if unchanged"
 msgstr ""
 "Cherry-Pick auf alle Commits ausführen, auch wenn diese unverändert sind"
 
-#: builtin/rebase.c:1428
+#: builtin/rebase.c:1452
 msgid "continue"
 msgstr "fortsetzen"
 
-#: builtin/rebase.c:1431
+#: builtin/rebase.c:1455
 msgid "skip current patch and continue"
 msgstr "den aktuellen Patch auslassen und fortfahren"
 
-#: builtin/rebase.c:1433
+#: builtin/rebase.c:1457
 msgid "abort and check out the original branch"
 msgstr "abbrechen und den ursprünglichen Branch auschecken"
 
-#: builtin/rebase.c:1436
+#: builtin/rebase.c:1460
 msgid "abort but keep HEAD where it is"
 msgstr "abbrechen, aber HEAD an aktueller Stelle belassen"
 
-#: builtin/rebase.c:1437
+#: builtin/rebase.c:1461
 msgid "edit the todo list during an interactive rebase"
 msgstr "TODO-Liste während eines interaktiven Rebase bearbeiten"
 
-#: builtin/rebase.c:1440
+#: builtin/rebase.c:1464
 msgid "show the patch file being applied or merged"
 msgstr "den Patch, der gerade angewendet oder zusammengeführt wird, anzeigen"
 
-#: builtin/rebase.c:1443
+#: builtin/rebase.c:1467
 msgid "use merging strategies to rebase"
 msgstr "Merge-Strategien beim Rebase verwenden"
 
-#: builtin/rebase.c:1447
+#: builtin/rebase.c:1471
 msgid "let the user edit the list of commits to rebase"
 msgstr "den Benutzer die Liste der Commits für den Rebase bearbeiten lassen"
 
-#: builtin/rebase.c:1451
+#: builtin/rebase.c:1475
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr ""
 "(VERALTET) Versuche, Merges wiederherzustellen anstatt sie zu ignorieren"
 
-#: builtin/rebase.c:1455
+#: builtin/rebase.c:1479
 msgid "preserve empty commits during rebase"
 msgstr "leere Commits während des Rebase erhalten"
 
-#: builtin/rebase.c:1457
+#: builtin/rebase.c:1481
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "bei -i Commits verschieben, die mit squash!/fixup! beginnen"
 
-#: builtin/rebase.c:1463
+#: builtin/rebase.c:1487
 msgid "automatically stash/stash pop before and after"
 msgstr "automatischer Stash/Stash-Pop davor und danach"
 
-#: builtin/rebase.c:1465
+#: builtin/rebase.c:1489
 msgid "add exec lines after each commit of the editable list"
 msgstr "exec-Zeilen nach jedem Commit der editierbaren Liste hinzufügen"
 
-#: builtin/rebase.c:1469
+#: builtin/rebase.c:1493
 msgid "allow rebasing commits with empty messages"
 msgstr "Rebase von Commits mit leerer Beschreibung erlauben"
 
-#: builtin/rebase.c:1472
+#: builtin/rebase.c:1496
 msgid "try to rebase merges instead of skipping them"
 msgstr ""
 "versuchen, Rebase mit Merges auszuführen, anstatt diese zu überspringen"
 
-#: builtin/rebase.c:1475
+#: builtin/rebase.c:1499
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr ""
 "'git merge-base --fork-point' benutzen, um Upstream-Branch zu bestimmen"
 
-#: builtin/rebase.c:1477
+#: builtin/rebase.c:1501
 msgid "use the given merge strategy"
 msgstr "angegebene Merge-Strategie verwenden"
 
-#: builtin/rebase.c:1479 builtin/revert.c:115
+#: builtin/rebase.c:1503 builtin/revert.c:115
 msgid "option"
 msgstr "Option"
 
-#: builtin/rebase.c:1480
+#: builtin/rebase.c:1504
 msgid "pass the argument through to the merge strategy"
 msgstr "Argument zur Merge-Strategie durchreichen"
 
-#: builtin/rebase.c:1483
+#: builtin/rebase.c:1507
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "Rebase auf alle erreichbaren Commits bis zum Root-Commit ausführen"
 
-#: builtin/rebase.c:1500
+#: builtin/rebase.c:1524
 msgid ""
 "the rebase.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
@@ -17808,32 +17895,40 @@
 "Die Unterstützung für rebase.useBuiltin wurde entfernt!\n"
 "Siehe dessen Eintrag in 'git help config' für Details."
 
-#: builtin/rebase.c:1506
+#: builtin/rebase.c:1530
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "'git-am' scheint im Gange zu sein. Kann Rebase nicht durchführen."
 
-#: builtin/rebase.c:1547
+#: builtin/rebase.c:1571
 msgid ""
 "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
 msgstr ""
 "'git rebase --preserve-merges' ist veraltet. Benutzen Sie stattdessen '--"
 "rebase-merges'."
 
-#: builtin/rebase.c:1551
+#: builtin/rebase.c:1576
+msgid "cannot combine '--keep-base' with '--onto'"
+msgstr "'--keep-base' kann nicht mit '--onto' kombiniert werden"
+
+#: builtin/rebase.c:1578
+msgid "cannot combine '--keep-base' with '--root'"
+msgstr "'--keep-base' kann nicht mit '--root' kombiniert werden"
+
+#: builtin/rebase.c:1582
 msgid "No rebase in progress?"
 msgstr "Kein Rebase im Gange?"
 
-#: builtin/rebase.c:1555
+#: builtin/rebase.c:1586
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr ""
 "Die --edit-todo Aktion kann nur während eines interaktiven Rebase verwendet "
 "werden."
 
-#: builtin/rebase.c:1578
+#: builtin/rebase.c:1609
 msgid "Cannot read HEAD"
 msgstr "Kann HEAD nicht lesen"
 
-#: builtin/rebase.c:1590
+#: builtin/rebase.c:1621
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -17841,16 +17936,16 @@
 "Sie müssen alle Merge-Konflikte editieren und diese dann\n"
 "mittels \"git add\" als aufgelöst markieren"
 
-#: builtin/rebase.c:1609
+#: builtin/rebase.c:1640
 msgid "could not discard worktree changes"
 msgstr "Konnte Änderungen im Arbeitsverzeichnis nicht verwerfen."
 
-#: builtin/rebase.c:1628
+#: builtin/rebase.c:1659
 #, c-format
 msgid "could not move back to %s"
 msgstr "Konnte nicht zu %s zurückgehen."
 
-#: builtin/rebase.c:1673
+#: builtin/rebase.c:1704
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -17871,170 +17966,161 @@
 "und führen Sie diesen Befehl nochmal aus. Es wird angehalten, falls noch\n"
 "etwas Schützenswertes vorhanden ist.\n"
 
-#: builtin/rebase.c:1694
+#: builtin/rebase.c:1725
 msgid "switch `C' expects a numerical value"
 msgstr "Schalter `C' erwartet einen numerischen Wert."
 
-#: builtin/rebase.c:1735
+#: builtin/rebase.c:1766
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Unbekannter Modus: %s"
 
-#: builtin/rebase.c:1757
+#: builtin/rebase.c:1788
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy erfordert --merge oder --interactive"
 
-#: builtin/rebase.c:1797
+#: builtin/rebase.c:1828
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec erfordert --exec oder --interactive"
 
-#: builtin/rebase.c:1809
+#: builtin/rebase.c:1840
 msgid "cannot combine am options with either interactive or merge options"
 msgstr ""
 "Optionen für \"am\" können nicht mit Optionen für \"interactive\" oder "
 "\"merge\" kombiniert werden."
 
-#: builtin/rebase.c:1828
+#: builtin/rebase.c:1859
 msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
 msgstr ""
 "'--preserve-merges' kann nicht mit '--rebase-merges' kombiniert werden."
 
-#: builtin/rebase.c:1832
+#: builtin/rebase.c:1863
 msgid ""
 "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
 msgstr ""
 "Fehler: '--preserve-merges' kann nicht mit '--reschedule-failed-exec' "
 "kombiniert werden."
 
-#: builtin/rebase.c:1838
-msgid "cannot combine '--rebase-merges' with '--strategy-option'"
-msgstr ""
-"'--rebase-merges' kann nicht mit '--strategy-option' kombiniert werden."
-
-#: builtin/rebase.c:1841
-msgid "cannot combine '--rebase-merges' with '--strategy'"
-msgstr "'--rebase-merges' kann nicht mit '--strategy' kombiniert werden."
-
-#: builtin/rebase.c:1865
+#: builtin/rebase.c:1887
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "Ungültiger Upstream '%s'"
 
-#: builtin/rebase.c:1871
+#: builtin/rebase.c:1893
 msgid "Could not create new root commit"
 msgstr "Konnte neuen Root-Commit nicht erstellen."
 
-#: builtin/rebase.c:1889
+#: builtin/rebase.c:1919
+#, c-format
+msgid "'%s': need exactly one merge base with branch"
+msgstr "'%s': benötige genau eine Merge-Basis mit dem Branch"
+
+#: builtin/rebase.c:1922
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "'%s': benötige genau eine Merge-Basis"
 
-#: builtin/rebase.c:1896
+#: builtin/rebase.c:1930
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "'%s' zeigt auf keinen gültigen Commit."
 
-#: builtin/rebase.c:1921
+#: builtin/rebase.c:1955
 #, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr "fatal: Branch/Commit '%s' nicht gefunden"
 
-#: builtin/rebase.c:1929 builtin/submodule--helper.c:38
+#: builtin/rebase.c:1963 builtin/submodule--helper.c:38
 #: builtin/submodule--helper.c:1934
 #, c-format
 msgid "No such ref: %s"
 msgstr "Referenz nicht gefunden: %s"
 
-#: builtin/rebase.c:1940
+#: builtin/rebase.c:1974
 msgid "Could not resolve HEAD to a revision"
 msgstr "Konnte HEAD zu keinem Commit auflösen."
 
-#: builtin/rebase.c:1981
+#: builtin/rebase.c:2012
 msgid "Cannot autostash"
 msgstr "Kann automatischen Stash nicht erzeugen."
 
-#: builtin/rebase.c:1984
+#: builtin/rebase.c:2015
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Unerwartete 'stash'-Antwort: '%s'"
 
-#: builtin/rebase.c:1990
+#: builtin/rebase.c:2021
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "Konnte Verzeichnis für '%s' nicht erstellen."
 
-#: builtin/rebase.c:1993
+#: builtin/rebase.c:2024
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Automatischen Stash erzeugt: %s\n"
 
-#: builtin/rebase.c:1996
+#: builtin/rebase.c:2027
 msgid "could not reset --hard"
 msgstr "Konnte 'reset --hard' nicht ausführen."
 
-#: builtin/rebase.c:1997 builtin/reset.c:114
-#, c-format
-msgid "HEAD is now at %s"
-msgstr "HEAD ist jetzt bei %s"
-
-#: builtin/rebase.c:2013
+#: builtin/rebase.c:2036
 msgid "Please commit or stash them."
 msgstr "Bitte committen Sie die Änderungen oder benutzen Sie \"stash\"."
 
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:2063
 #, c-format
 msgid "could not parse '%s'"
 msgstr "Konnte '%s' nicht parsen."
 
-#: builtin/rebase.c:2053
+#: builtin/rebase.c:2076
 #, c-format
 msgid "could not switch to %s"
 msgstr "Konnte nicht zu %s wechseln."
 
-#: builtin/rebase.c:2064
+#: builtin/rebase.c:2087
 msgid "HEAD is up to date."
 msgstr "HEAD ist aktuell."
 
-#: builtin/rebase.c:2066
+#: builtin/rebase.c:2089
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "Aktueller Branch %s ist auf dem neuesten Stand.\n"
 
-#: builtin/rebase.c:2074
+#: builtin/rebase.c:2097
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD ist aktuell, Rebase erzwungen."
 
-#: builtin/rebase.c:2076
+#: builtin/rebase.c:2099
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "Aktueller Branch %s ist auf dem neuesten Stand, Rebase erzwungen.\n"
 
-#: builtin/rebase.c:2084
+#: builtin/rebase.c:2107
 msgid "The pre-rebase hook refused to rebase."
 msgstr "Der \"pre-rebase hook\" hat den Rebase zurückgewiesen."
 
-#: builtin/rebase.c:2091
+#: builtin/rebase.c:2114
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Änderungen zu %s:\n"
 
-#: builtin/rebase.c:2094
+#: builtin/rebase.c:2117
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Änderungen von %s zu %s:\n"
 
-#: builtin/rebase.c:2119
+#: builtin/rebase.c:2142
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 "Zunächst wird der Branch zurückgespult, um Ihre Änderungen darauf neu "
 "anzuwenden...\n"
 
-#: builtin/rebase.c:2128
+#: builtin/rebase.c:2151
 msgid "Could not detach HEAD"
 msgstr "Konnte HEAD nicht loslösen."
 
-#: builtin/rebase.c:2137
+#: builtin/rebase.c:2160
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Spule %s vor zu %s.\n"
@@ -18043,7 +18129,7 @@
 msgid "git receive-pack <git-dir>"
 msgstr "git receive-pack <Git-Verzeichnis>"
 
-#: builtin/receive-pack.c:832
+#: builtin/receive-pack.c:830
 msgid ""
 "By default, updating the current branch in a non-bare repository\n"
 "is denied, because it will make the index and work tree inconsistent\n"
@@ -18075,7 +18161,7 @@
 "setzen Sie die Konfigurationsvariable 'receive.denyCurrentBranch' auf\n"
 "'refuse'."
 
-#: builtin/receive-pack.c:852
+#: builtin/receive-pack.c:850
 msgid ""
 "By default, deleting the current branch is denied, because the next\n"
 "'git clone' won't result in any file checked out, causing confusion.\n"
@@ -18096,11 +18182,11 @@
 "\n"
 "Um diese Meldung zu unterdrücken, setzen Sie die Variable auf 'refuse'."
 
-#: builtin/receive-pack.c:1938
+#: builtin/receive-pack.c:1936
 msgid "quiet"
 msgstr "weniger Ausgaben"
 
-#: builtin/receive-pack.c:1952
+#: builtin/receive-pack.c:1950
 msgid "You must specify a directory."
 msgstr "Sie müssen ein Repository angeben."
 
@@ -18683,11 +18769,11 @@
 msgid "Unknown subcommand: %s"
 msgstr "Unbekannter Unterbefehl: %s"
 
-#: builtin/repack.c:22
+#: builtin/repack.c:23
 msgid "git repack [<options>]"
 msgstr "git repack [<Optionen>]"
 
-#: builtin/repack.c:27
+#: builtin/repack.c:28
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -18696,119 +18782,119 @@
 "--no-write-bitmap-index oder deaktivieren Sie die pack.writebitmaps\n"
 "Konfiguration."
 
-#: builtin/repack.c:190
+#: builtin/repack.c:191
 msgid "could not start pack-objects to repack promisor objects"
 msgstr ""
 "Konnte 'pack-objects' für das Neupacken von Objekten aus partiell geklonten\n"
 "Remote-Repositories nicht starten."
 
-#: builtin/repack.c:229 builtin/repack.c:408
+#: builtin/repack.c:230 builtin/repack.c:409
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 "repack: Erwarte Zeilen mit vollständiger Hex-Objekt-ID nur von pack-objects."
 
-#: builtin/repack.c:246
+#: builtin/repack.c:247
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr ""
 "Konnte 'pack-objects' für das Neupacken von Objekten aus partiell geklonten\n"
 "Remote-Repositories nicht abschließen."
 
-#: builtin/repack.c:284
+#: builtin/repack.c:285
 msgid "pack everything in a single pack"
 msgstr "alles in eine einzige Pack-Datei packen"
 
-#: builtin/repack.c:286
+#: builtin/repack.c:287
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "genau wie -a, unerreichbare Objekte werden aber nicht gelöscht"
 
-#: builtin/repack.c:289
+#: builtin/repack.c:290
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "redundante Pakete entfernen und \"git-prune-packed\" ausführen"
 
-#: builtin/repack.c:291
+#: builtin/repack.c:292
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "--no-reuse-delta an git-pack-objects übergeben"
 
-#: builtin/repack.c:293
+#: builtin/repack.c:294
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "--no-reuse-object an git-pack-objects übergeben"
 
-#: builtin/repack.c:295
+#: builtin/repack.c:296
 msgid "do not run git-update-server-info"
 msgstr "git-update-server-info nicht ausführen"
 
-#: builtin/repack.c:298
+#: builtin/repack.c:299
 msgid "pass --local to git-pack-objects"
 msgstr "--local an git-pack-objects übergeben"
 
-#: builtin/repack.c:300
+#: builtin/repack.c:301
 msgid "write bitmap index"
 msgstr "Bitmap-Index schreiben"
 
-#: builtin/repack.c:302
+#: builtin/repack.c:303
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "--delta-islands an git-pack-objects übergeben"
 
-#: builtin/repack.c:303
+#: builtin/repack.c:304
 msgid "approxidate"
 msgstr "Datumsangabe"
 
-#: builtin/repack.c:304
+#: builtin/repack.c:305
 msgid "with -A, do not loosen objects older than this"
 msgstr "mit -A, keine Objekte älter als dieses Datum löschen"
 
-#: builtin/repack.c:306
+#: builtin/repack.c:307
 msgid "with -a, repack unreachable objects"
 msgstr "mit -a, nicht erreichbare Objekte neu packen"
 
-#: builtin/repack.c:308
+#: builtin/repack.c:309
 msgid "size of the window used for delta compression"
 msgstr "Größe des Fensters für die Delta-Kompression"
 
-#: builtin/repack.c:309 builtin/repack.c:315
+#: builtin/repack.c:310 builtin/repack.c:316
 msgid "bytes"
 msgstr "Bytes"
 
-#: builtin/repack.c:310
+#: builtin/repack.c:311
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr ""
 "gleiches wie oben, aber die Speichergröße anstatt der\n"
 "Anzahl der Einträge limitieren"
 
-#: builtin/repack.c:312
+#: builtin/repack.c:313
 msgid "limits the maximum delta depth"
 msgstr "die maximale Delta-Tiefe limitieren"
 
-#: builtin/repack.c:314
+#: builtin/repack.c:315
 msgid "limits the maximum number of threads"
 msgstr "maximale Anzahl von Threads limitieren"
 
-#: builtin/repack.c:316
+#: builtin/repack.c:317
 msgid "maximum size of each packfile"
 msgstr "maximale Größe für jede Paketdatei"
 
-#: builtin/repack.c:318
+#: builtin/repack.c:319
 msgid "repack objects in packs marked with .keep"
 msgstr ""
 "Objekte umpacken, die sich in mit .keep markierten Pack-Dateien befinden"
 
-#: builtin/repack.c:320
+#: builtin/repack.c:321
 msgid "do not repack this pack"
 msgstr "dieses Paket nicht neu packen"
 
-#: builtin/repack.c:330
+#: builtin/repack.c:331
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "kann Pack-Dateien in precious-objects Repository nicht löschen"
 
-#: builtin/repack.c:334
+#: builtin/repack.c:335
 msgid "--keep-unreachable and -A are incompatible"
 msgstr "--keep-unreachable und -A sind inkompatibel"
 
-#: builtin/repack.c:417
+#: builtin/repack.c:418
 msgid "Nothing new to pack."
 msgstr "Nichts Neues zum Packen."
 
-#: builtin/repack.c:478
+#: builtin/repack.c:479
 #, c-format
 msgid ""
 "WARNING: Some packs in use have been renamed by\n"
@@ -18827,7 +18913,7 @@
 "WARNUNG: ebenfalls fehl.\n"
 "WARNUNG: Bitte benennen Sie diese manuell nach %s um:\n"
 
-#: builtin/repack.c:526
+#: builtin/repack.c:527
 #, c-format
 msgid "failed to remove '%s'"
 msgstr "Fehler beim Löschen von '%s'"
@@ -18936,8 +19022,8 @@
 msgid "unable to write object to database"
 msgstr "Konnte Objekt nicht in Datenbank schreiben."
 
-#: builtin/replace.c:322 builtin/replace.c:377 builtin/replace.c:422
-#: builtin/replace.c:452
+#: builtin/replace.c:322 builtin/replace.c:378 builtin/replace.c:423
+#: builtin/replace.c:453
 #, c-format
 msgid "not a valid object name: '%s'"
 msgstr "Kein gültiger Objektname: '%s'"
@@ -18956,22 +19042,22 @@
 msgid "new object is the same as the old one: '%s'"
 msgstr "Neues Objekt ist dasselbe wie das alte: '%s'"
 
-#: builtin/replace.c:383
+#: builtin/replace.c:384
 #, c-format
 msgid "could not parse %s as a commit"
 msgstr "Konnte nicht %s als Commit parsen."
 
-#: builtin/replace.c:414
+#: builtin/replace.c:415
 #, c-format
 msgid "bad mergetag in commit '%s'"
 msgstr "ungültiger Merge-Tag in Commit '%s'"
 
-#: builtin/replace.c:416
+#: builtin/replace.c:417
 #, c-format
 msgid "malformed mergetag in commit '%s'"
 msgstr "fehlerhafter Merge-Tag in Commit '%s'"
 
-#: builtin/replace.c:428
+#: builtin/replace.c:429
 #, c-format
 msgid ""
 "original commit '%s' contains mergetag '%s' that is discarded; use --edit "
@@ -18980,31 +19066,31 @@
 "Der ursprüngliche Commit '%s' enthält Merge-Tag '%s', der verworfen\n"
 "wird; benutzen Sie --edit anstatt --graft"
 
-#: builtin/replace.c:467
+#: builtin/replace.c:468
 #, c-format
 msgid "the original commit '%s' has a gpg signature"
 msgstr "Der originale Commit '%s' hat eine GPG-Signatur."
 
-#: builtin/replace.c:468
+#: builtin/replace.c:469
 msgid "the signature will be removed in the replacement commit!"
 msgstr "Die Signatur wird in dem Ersetzungs-Commit entfernt!"
 
-#: builtin/replace.c:478
+#: builtin/replace.c:479
 #, c-format
 msgid "could not write replacement commit for: '%s'"
 msgstr "Konnte Ersetzungs-Commit für '%s' nicht schreiben"
 
-#: builtin/replace.c:486
+#: builtin/replace.c:487
 #, c-format
 msgid "graft for '%s' unnecessary"
 msgstr "Künstlicher Vorgänger (\"graft\") für '%s' nicht notwendig."
 
-#: builtin/replace.c:490
+#: builtin/replace.c:491
 #, c-format
 msgid "new commit is the same as the old one: '%s'"
 msgstr "Neuer Commit ist derselbe wie der alte: '%s'"
 
-#: builtin/replace.c:525
+#: builtin/replace.c:526
 #, c-format
 msgid ""
 "could not convert the following graft(s):\n"
@@ -19013,71 +19099,71 @@
 "Konnte die folgenden künstlichen Vorgänger (\"grafts\") nicht konvertieren:\n"
 "%s"
 
-#: builtin/replace.c:546
+#: builtin/replace.c:547
 msgid "list replace refs"
 msgstr "ersetzende Referenzen auflisten"
 
-#: builtin/replace.c:547
+#: builtin/replace.c:548
 msgid "delete replace refs"
 msgstr "ersetzende Referenzen löschen"
 
-#: builtin/replace.c:548
+#: builtin/replace.c:549
 msgid "edit existing object"
 msgstr "existierendes Objekt bearbeiten"
 
-#: builtin/replace.c:549
+#: builtin/replace.c:550
 msgid "change a commit's parents"
 msgstr "Eltern-Commits eines Commits ändern"
 
-#: builtin/replace.c:550
+#: builtin/replace.c:551
 msgid "convert existing graft file"
 msgstr "existierende Datei des künstlichen Vorgängers (\"graft\") konvertieren"
 
-#: builtin/replace.c:551
+#: builtin/replace.c:552
 msgid "replace the ref if it exists"
 msgstr "die Referenz ersetzen, wenn sie existiert"
 
-#: builtin/replace.c:553
+#: builtin/replace.c:554
 msgid "do not pretty-print contents for --edit"
 msgstr "keine ansprechende Anzeige des Objektinhaltes für --edit"
 
-#: builtin/replace.c:554
+#: builtin/replace.c:555
 msgid "use this format"
 msgstr "das angegebene Format benutzen"
 
-#: builtin/replace.c:567
+#: builtin/replace.c:568
 msgid "--format cannot be used when not listing"
 msgstr "--format kann nicht beim Auflisten verwendet werden."
 
-#: builtin/replace.c:575
+#: builtin/replace.c:576
 msgid "-f only makes sense when writing a replacement"
 msgstr "-f macht nur beim Schreiben einer Ersetzung Sinn."
 
-#: builtin/replace.c:579
+#: builtin/replace.c:580
 msgid "--raw only makes sense with --edit"
 msgstr "--raw macht nur mit --edit Sinn."
 
-#: builtin/replace.c:585
+#: builtin/replace.c:586
 msgid "-d needs at least one argument"
 msgstr "-d benötigt mindestens ein Argument."
 
-#: builtin/replace.c:591
+#: builtin/replace.c:592
 msgid "bad number of arguments"
 msgstr "Ungültige Anzahl von Argumenten."
 
-#: builtin/replace.c:597
+#: builtin/replace.c:598
 msgid "-e needs exactly one argument"
 msgstr "-e benötigt genau ein Argument."
 
-#: builtin/replace.c:603
+#: builtin/replace.c:604
 msgid "-g needs at least one argument"
 msgstr "-g benötigt mindestens ein Argument."
 
-#: builtin/replace.c:609
+#: builtin/replace.c:610
 msgid "--convert-graft-file takes no argument"
 msgstr "--convert-graft-file erwartet keine Argumente"
 
-#: builtin/replace.c:615
+#: builtin/replace.c:616
 msgid "only one pattern can be given with -l"
 msgstr "Mit -l kann nur ein Muster angegeben werden."
 
@@ -19145,13 +19231,18 @@
 msgid "Failed to find tree of %s."
 msgstr "Fehler beim Finden des \"Tree\"-Objektes von %s."
 
+#: builtin/reset.c:114
+#, c-format
+msgid "HEAD is now at %s"
+msgstr "HEAD ist jetzt bei %s"
+
 #: builtin/reset.c:193
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Kann keinen '%s'-Reset durchführen, während ein Merge im Gange ist."
 
-#: builtin/reset.c:293 builtin/stash.c:514 builtin/stash.c:589
-#: builtin/stash.c:613
+#: builtin/reset.c:293 builtin/stash.c:520 builtin/stash.c:595
+#: builtin/stash.c:619
 msgid "be quiet, only report errors"
 msgstr "weniger Ausgaben, nur Fehler melden"
 
@@ -19236,25 +19327,20 @@
 msgid "Could not write new index file."
 msgstr "Konnte neue Index-Datei nicht schreiben."
 
-#: builtin/rev-list.c:412
+#: builtin/rev-list.c:411
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr ""
 "--exclude-promisor-objects und --missing können nicht kombiniert werden."
 
-#: builtin/rev-list.c:473
+#: builtin/rev-list.c:472
 msgid "object filtering requires --objects"
 msgstr "Das Filtern von Objekten erfordert --objects."
 
-#: builtin/rev-list.c:476
-#, c-format
-msgid "invalid sparse value '%s'"
-msgstr "Ungültiger \"sparse\"-Wert '%s'."
-
-#: builtin/rev-list.c:527
+#: builtin/rev-list.c:522
 msgid "rev-list does not support display of notes"
 msgstr "rev-list unterstützt keine Anzeige von Notizen"
 
-#: builtin/rev-list.c:530
+#: builtin/rev-list.c:525
 msgid "cannot combine --use-bitmap-index with object filtering"
 msgstr ""
 "--use-bitmap-index kann nicht mit dem Filtern von Objekten kombiniert werden."
@@ -19805,137 +19891,137 @@
 msgid "could not save index tree"
 msgstr "Konnte Index-Verzeichnis nicht speichern"
 
-#: builtin/stash.c:434
+#: builtin/stash.c:436
 msgid "could not restore untracked files from stash"
 msgstr "Konnte unversionierte Dateien vom Stash nicht wiederherstellen."
 
-#: builtin/stash.c:448
+#: builtin/stash.c:450
 #, c-format
 msgid "Merging %s with %s"
 msgstr "Führe %s mit %s zusammen"
 
-#: builtin/stash.c:458 git-legacy-stash.sh:680
+#: builtin/stash.c:460 git-legacy-stash.sh:680
 msgid "Index was not unstashed."
 msgstr "Index wurde nicht aus dem Stash zurückgeladen."
 
-#: builtin/stash.c:516 builtin/stash.c:615
+#: builtin/stash.c:522 builtin/stash.c:621
 msgid "attempt to recreate the index"
 msgstr "Versuche Index wiederherzustellen."
 
-#: builtin/stash.c:549
+#: builtin/stash.c:555
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "%s (%s) gelöscht"
 
-#: builtin/stash.c:552
+#: builtin/stash.c:558
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s: Konnte Stash-Eintrag nicht löschen"
 
-#: builtin/stash.c:577
+#: builtin/stash.c:583
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "'%s' ist keine Stash-Referenz"
 
-#: builtin/stash.c:627 git-legacy-stash.sh:694
+#: builtin/stash.c:633 git-legacy-stash.sh:694
 msgid "The stash entry is kept in case you need it again."
 msgstr ""
 "Der Stash-Eintrag wird für den Fall behalten, dass Sie diesen nochmal "
 "benötigen."
 
-#: builtin/stash.c:650 git-legacy-stash.sh:712
+#: builtin/stash.c:656 git-legacy-stash.sh:712
 msgid "No branch name specified"
 msgstr "Kein Branchname spezifiziert"
 
-#: builtin/stash.c:790 builtin/stash.c:827
+#: builtin/stash.c:796 builtin/stash.c:833
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "Kann nicht %s mit %s aktualisieren."
 
-#: builtin/stash.c:808 builtin/stash.c:1461 builtin/stash.c:1497
+#: builtin/stash.c:814 builtin/stash.c:1470 builtin/stash.c:1506
 msgid "stash message"
 msgstr "Stash-Beschreibung"
 
-#: builtin/stash.c:818
+#: builtin/stash.c:824
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" erwartet ein Argument <Commit>"
 
-#: builtin/stash.c:1040 git-legacy-stash.sh:217
+#: builtin/stash.c:1046 git-legacy-stash.sh:217
 msgid "No changes selected"
 msgstr "Keine Änderungen ausgewählt"
 
-#: builtin/stash.c:1136 git-legacy-stash.sh:150
+#: builtin/stash.c:1145 git-legacy-stash.sh:150
 msgid "You do not have the initial commit yet"
 msgstr "Sie haben bisher noch keinen initialen Commit"
 
-#: builtin/stash.c:1163 git-legacy-stash.sh:165
+#: builtin/stash.c:1172 git-legacy-stash.sh:165
 msgid "Cannot save the current index state"
 msgstr "Kann den aktuellen Zustand des Index nicht speichern"
 
-#: builtin/stash.c:1172 git-legacy-stash.sh:180
+#: builtin/stash.c:1181 git-legacy-stash.sh:180
 msgid "Cannot save the untracked files"
 msgstr "Kann die unversionierten Dateien nicht speichern"
 
-#: builtin/stash.c:1183 builtin/stash.c:1192 git-legacy-stash.sh:200
+#: builtin/stash.c:1192 builtin/stash.c:1201 git-legacy-stash.sh:200
 #: git-legacy-stash.sh:213
 msgid "Cannot save the current worktree state"
 msgstr "Kann den aktuellen Zustand des Arbeitsverzeichnisses nicht speichern"
 
-#: builtin/stash.c:1220 git-legacy-stash.sh:233
+#: builtin/stash.c:1229 git-legacy-stash.sh:233
 msgid "Cannot record working tree state"
 msgstr "Kann Zustand des Arbeitsverzeichnisses nicht aufzeichnen"
 
-#: builtin/stash.c:1269 git-legacy-stash.sh:337
+#: builtin/stash.c:1278 git-legacy-stash.sh:337
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr ""
 "Kann nicht gleichzeitig --patch und --include-untracked oder --all verwenden"
 
-#: builtin/stash.c:1285
+#: builtin/stash.c:1294
 msgid "Did you forget to 'git add'?"
 msgstr "Haben Sie vielleicht 'git add' vergessen?"
 
-#: builtin/stash.c:1300 git-legacy-stash.sh:345
+#: builtin/stash.c:1309 git-legacy-stash.sh:345
 msgid "No local changes to save"
 msgstr "Keine lokalen Änderungen zum Speichern"
 
-#: builtin/stash.c:1307 git-legacy-stash.sh:350
+#: builtin/stash.c:1316 git-legacy-stash.sh:350
 msgid "Cannot initialize stash"
 msgstr "Kann \"stash\" nicht initialisieren"
 
-#: builtin/stash.c:1322 git-legacy-stash.sh:354
+#: builtin/stash.c:1331 git-legacy-stash.sh:354
 msgid "Cannot save the current status"
 msgstr "Kann den aktuellen Status nicht speichern"
 
-#: builtin/stash.c:1327
+#: builtin/stash.c:1336
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Arbeitsverzeichnis und Index-Status %s gespeichert."
 
-#: builtin/stash.c:1417 git-legacy-stash.sh:384
+#: builtin/stash.c:1426 git-legacy-stash.sh:384
 msgid "Cannot remove worktree changes"
 msgstr "Kann Änderungen im Arbeitsverzeichnis nicht löschen"
 
-#: builtin/stash.c:1452 builtin/stash.c:1488
+#: builtin/stash.c:1461 builtin/stash.c:1497
 msgid "keep index"
 msgstr "behalte Index"
 
-#: builtin/stash.c:1454 builtin/stash.c:1490
+#: builtin/stash.c:1463 builtin/stash.c:1499
 msgid "stash in patch mode"
 msgstr "Stash in Patch-Modus"
 
-#: builtin/stash.c:1455 builtin/stash.c:1491
+#: builtin/stash.c:1464 builtin/stash.c:1500
 msgid "quiet mode"
 msgstr "weniger Ausgaben"
 
-#: builtin/stash.c:1457 builtin/stash.c:1493
+#: builtin/stash.c:1466 builtin/stash.c:1502
 msgid "include untracked files in stash"
 msgstr "unversionierte Dateien in Stash einbeziehen"
 
-#: builtin/stash.c:1459 builtin/stash.c:1495
+#: builtin/stash.c:1468 builtin/stash.c:1504
 msgid "include ignore files"
 msgstr "ignorierte Dateien einbeziehen"
 
-#: builtin/stash.c:1555
+#: builtin/stash.c:1564
 #, c-format
 msgid "could not exec %s"
 msgstr "Konnte 'exec %s' nicht ausführen."
@@ -20322,8 +20408,8 @@
 msgstr "keine Fortschrittsanzeige beim Klonen"
 
 #: builtin/submodule--helper.c:1877
-msgid "git submodule--helper update_clone [--prefix=<path>] [<path>...]"
-msgstr "git submodule--helper update_clone [--prefix=<Pfad>] [<Pfad>...]"
+msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
+msgstr "git submodule--helper update-clone [--prefix=<Pfad>] [<Pfad>...]"
 
 #: builtin/submodule--helper.c:1890
 msgid "bad value for update parameter"
@@ -20378,7 +20464,7 @@
 "Bitte stellen Sie sicher, dass sich die Datei .gitmodules im "
 "Arbeitsverzeichnis befindet."
 
-#: builtin/submodule--helper.c:2235 git.c:434 git.c:684
+#: builtin/submodule--helper.c:2235 git.c:433 git.c:683
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s unterstützt kein --super-prefix"
@@ -20711,147 +20797,147 @@
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<Optionen>] [--] [<Datei>...]"
 
-#: builtin/update-index.c:971
+#: builtin/update-index.c:972
 msgid "continue refresh even when index needs update"
 msgstr ""
 "Aktualisierung fortsetzen, auch wenn der Index aktualisiert werden muss"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:975
 msgid "refresh: ignore submodules"
 msgstr "Aktualisierung: ignoriert Submodule"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:978
 msgid "do not ignore new files"
 msgstr "keine neuen Dateien ignorieren"
 
-#: builtin/update-index.c:979
+#: builtin/update-index.c:980
 msgid "let files replace directories and vice-versa"
 msgstr "Dateien Verzeichnisse ersetzen lassen, und umgedreht"
 
-#: builtin/update-index.c:981
+#: builtin/update-index.c:982
 msgid "notice files missing from worktree"
 msgstr "fehlende Dateien im Arbeitsverzeichnis beachten"
 
-#: builtin/update-index.c:983
+#: builtin/update-index.c:984
 msgid "refresh even if index contains unmerged entries"
 msgstr ""
 "aktualisieren, auch wenn der Index nicht zusammengeführte Einträge beinhaltet"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:987
 msgid "refresh stat information"
 msgstr "Dateiinformationen aktualisieren"
 
-#: builtin/update-index.c:990
+#: builtin/update-index.c:991
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "wie --refresh, ignoriert aber \"assume-unchanged\" Einstellung"
 
-#: builtin/update-index.c:994
+#: builtin/update-index.c:995
 msgid "<mode>,<object>,<path>"
 msgstr "<Modus>,<Objekt>,<Pfad>"
 
-#: builtin/update-index.c:995
+#: builtin/update-index.c:996
 msgid "add the specified entry to the index"
 msgstr "den angegebenen Eintrag zum Commit vormerken"
 
-#: builtin/update-index.c:1005
+#: builtin/update-index.c:1006
 msgid "mark files as \"not changing\""
 msgstr "diese Datei immer als unverändert betrachten"
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1009
 msgid "clear assumed-unchanged bit"
 msgstr "\"assumed-unchanged\"-Bit löschen"
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1012
 msgid "mark files as \"index-only\""
 msgstr "Dateien als \"index-only\" markieren"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1015
 msgid "clear skip-worktree bit"
 msgstr "\"skip-worktree\"-Bit löschen"
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1018
 msgid "add to index only; do not add content to object database"
 msgstr ""
 "die Änderungen nur zum Commit vormerken; Inhalt wird nicht der Objekt-"
 "Datenbank hinzugefügt"
 
-#: builtin/update-index.c:1019
+#: builtin/update-index.c:1020
 msgid "remove named paths even if present in worktree"
 msgstr ""
 "benannte Pfade löschen, auch wenn sie sich im Arbeitsverzeichnis befinden"
 
-#: builtin/update-index.c:1021
+#: builtin/update-index.c:1022
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "mit --stdin: eingegebene Zeilen sind durch NUL-Bytes abgeschlossen"
 
-#: builtin/update-index.c:1023
+#: builtin/update-index.c:1024
 msgid "read list of paths to be updated from standard input"
 msgstr "Liste der zu aktualisierenden Pfade von der Standard-Eingabe lesen"
 
-#: builtin/update-index.c:1027
+#: builtin/update-index.c:1028
 msgid "add entries from standard input to the index"
 msgstr "Einträge von der Standard-Eingabe zum Commit vormerken"
 
-#: builtin/update-index.c:1031
+#: builtin/update-index.c:1032
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr ""
 "wiederholtes Einpflegen der Zustände #2 und #3 für die aufgelisteten Pfade"
 
-#: builtin/update-index.c:1035
+#: builtin/update-index.c:1036
 msgid "only update entries that differ from HEAD"
 msgstr "nur Einträge aktualisieren, die unterschiedlich zu HEAD sind"
 
-#: builtin/update-index.c:1039
+#: builtin/update-index.c:1040
 msgid "ignore files missing from worktree"
 msgstr "fehlende Dateien im Arbeitsverzeichnis ignorieren"
 
-#: builtin/update-index.c:1042
+#: builtin/update-index.c:1043
 msgid "report actions to standard output"
 msgstr "die Aktionen in der Standard-Ausgabe ausgeben"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1045
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(für Fremdprogramme) keine gespeicherten, nicht aufgelöste Konflikte"
 
-#: builtin/update-index.c:1048
+#: builtin/update-index.c:1049
 msgid "write index in this format"
 msgstr "Index-Datei in diesem Format schreiben"
 
-#: builtin/update-index.c:1050
+#: builtin/update-index.c:1051
 msgid "enable or disable split index"
 msgstr "Splitting des Index aktivieren oder deaktivieren"
 
-#: builtin/update-index.c:1052
+#: builtin/update-index.c:1053
 msgid "enable/disable untracked cache"
 msgstr "Cache für unversionierte Dateien aktivieren oder deaktivieren"
 
-#: builtin/update-index.c:1054
+#: builtin/update-index.c:1055
 msgid "test if the filesystem supports untracked cache"
 msgstr ""
 "prüfen, ob das Dateisystem einen Cache für unversionierte Dateien unterstützt"
 
-#: builtin/update-index.c:1056
+#: builtin/update-index.c:1057
 msgid "enable untracked cache without testing the filesystem"
 msgstr ""
 "Cache für unversionierte Dateien ohne Prüfung des Dateisystems aktivieren"
 
-#: builtin/update-index.c:1058
+#: builtin/update-index.c:1059
 msgid "write out the index even if is not flagged as changed"
 msgstr "Index rausschreiben, auch wenn dieser nicht als geändert markiert ist"
 
-#: builtin/update-index.c:1060
+#: builtin/update-index.c:1061
 msgid "enable or disable file system monitor"
 msgstr "Dateisystem-Monitor aktivieren oder deaktivieren"
 
-#: builtin/update-index.c:1062
+#: builtin/update-index.c:1063
 msgid "mark files as fsmonitor valid"
 msgstr "Dateien als \"fsmonitor valid\" markieren"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1066
 msgid "clear fsmonitor valid bit"
 msgstr "\"fsmonitor valid\"-Bit löschen"
 
-#: builtin/update-index.c:1168
+#: builtin/update-index.c:1169
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
@@ -20859,7 +20945,7 @@
 "core.splitIndex ist auf 'false' gesetzt. Entfernen oder ändern Sie dies,\n"
 "wenn sie wirklich das Splitting des Index aktivieren möchten."
 
-#: builtin/update-index.c:1177
+#: builtin/update-index.c:1178
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
@@ -20867,7 +20953,7 @@
 "core.splitIndex ist auf 'true' gesetzt. Entfernen oder ändern Sie dies,\n"
 "wenn Sie wirklich das Splitting des Index deaktivieren möchten."
 
-#: builtin/update-index.c:1188
+#: builtin/update-index.c:1190
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -20875,11 +20961,11 @@
 "core.untrackedCache ist auf 'true' gesetzt. Entfernen oder ändern Sie dies,\n"
 "wenn Sie wirklich den Cache für unversionierte Dateien deaktivieren möchten."
 
-#: builtin/update-index.c:1192
+#: builtin/update-index.c:1194
 msgid "Untracked cache disabled"
 msgstr "Cache für unversionierte Dateien deaktiviert"
 
-#: builtin/update-index.c:1200
+#: builtin/update-index.c:1202
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -20888,23 +20974,23 @@
 "dies,\n"
 "wenn sie wirklich den Cache für unversionierte Dateien aktivieren möchten."
 
-#: builtin/update-index.c:1204
+#: builtin/update-index.c:1206
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "Cache für unversionierte Dateien für '%s' aktiviert"
 
-#: builtin/update-index.c:1212
+#: builtin/update-index.c:1214
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr ""
 "core.fsmonitor nicht gesetzt. Setzen Sie es, wenn Sie den Dateisystem-"
 "Monitor\n"
 "wirklich aktivieren möchten."
 
-#: builtin/update-index.c:1216
+#: builtin/update-index.c:1218
 msgid "fsmonitor enabled"
 msgstr "Dateisystem-Monitor aktiviert"
 
-#: builtin/update-index.c:1219
+#: builtin/update-index.c:1221
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
@@ -20912,7 +20998,7 @@
 "Monitor\n"
 "wirklich deaktivieren möchten."
 
-#: builtin/update-index.c:1223
+#: builtin/update-index.c:1225
 msgid "fsmonitor disabled"
 msgstr "Dateisystem-Monitor deaktiviert"
 
@@ -21007,55 +21093,55 @@
 msgid "print tag contents"
 msgstr "Tag-Inhalte ausgeben"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:17
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [<Optionen>] <Pfad> [<Commit-Angabe>]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:18
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [<Optionen>]"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:19
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [<Optionen>] <Pfad>"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:20
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move <Arbeitsverzeichnis> <neuer-Pfad>"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:21
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [<Optionen>]"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:22
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<Optionen>] <Arbeitsverzeichnis>"
 
-#: builtin/worktree.c:24
+#: builtin/worktree.c:23
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <Pfad>"
 
-#: builtin/worktree.c:61 builtin/worktree.c:899
+#: builtin/worktree.c:60 builtin/worktree.c:898
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "Fehler beim Löschen von '%s'"
 
-#: builtin/worktree.c:80
+#: builtin/worktree.c:79
 #, c-format
 msgid "Removing worktrees/%s: not a valid directory"
 msgstr "Lösche worktrees/%s: kein gültiges Verzeichnis"
 
-#: builtin/worktree.c:86
+#: builtin/worktree.c:85
 #, c-format
 msgid "Removing worktrees/%s: gitdir file does not exist"
 msgstr "Lösche worktrees/%s: gitdir-Datei existiert nicht"
 
-#: builtin/worktree.c:91 builtin/worktree.c:100
+#: builtin/worktree.c:90 builtin/worktree.c:99
 #, c-format
 msgid "Removing worktrees/%s: unable to read gitdir file (%s)"
 msgstr "Lösche worktrees/%s: konnte gitdir-Datei (%s) nicht lesen"
 
-#: builtin/worktree.c:110
+#: builtin/worktree.c:109
 #, c-format
 msgid ""
 "Removing worktrees/%s: short read (expected %<PRIuMAX> bytes, read "
@@ -21064,35 +21150,35 @@
 "Lösche worktrees/%s: read() zu kurz (%<PRIuMAX> Bytes erwartet, %<PRIuMAX> "
 "gelesen)"
 
-#: builtin/worktree.c:118
+#: builtin/worktree.c:117
 #, c-format
 msgid "Removing worktrees/%s: invalid gitdir file"
 msgstr "Lösche worktrees/%s: ungültige gitdir-Datei"
 
-#: builtin/worktree.c:127
+#: builtin/worktree.c:126
 #, c-format
 msgid "Removing worktrees/%s: gitdir file points to non-existent location"
 msgstr "Lösche worktrees/%s: gitdir-Datei verweist auf nicht existierenden Ort"
 
-#: builtin/worktree.c:166
+#: builtin/worktree.c:165
 msgid "report pruned working trees"
 msgstr "entfernte Arbeitsverzeichnisse ausgeben"
 
-#: builtin/worktree.c:168
+#: builtin/worktree.c:167
 msgid "expire working trees older than <time>"
 msgstr "Arbeitsverzeichnisse älter als <Zeit> verfallen lassen"
 
-#: builtin/worktree.c:235
+#: builtin/worktree.c:234
 #, c-format
 msgid "'%s' already exists"
 msgstr "'%s' existiert bereits"
 
-#: builtin/worktree.c:252
+#: builtin/worktree.c:251
 #, c-format
 msgid "unable to re-add worktree '%s'"
 msgstr "Konnte Arbeitsverzeichnis '%s' nicht neu hinzufügen."
 
-#: builtin/worktree.c:257
+#: builtin/worktree.c:256
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -21102,7 +21188,7 @@
 "Benutzen Sie 'add -f -f' zum Überschrieben, oder 'unlock' und 'prune'\n"
 "oder 'remove' zum Löschen."
 
-#: builtin/worktree.c:259
+#: builtin/worktree.c:258
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -21112,129 +21198,129 @@
 "Benutzen Sie 'add -f' zum Überschreiben, oder 'prune' oder 'remove' zum\n"
 "Löschen."
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:308
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "Konnte Verzeichnis '%s' nicht erstellen."
 
-#: builtin/worktree.c:440 builtin/worktree.c:446
+#: builtin/worktree.c:439 builtin/worktree.c:445
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "Bereite Arbeitsverzeichnis vor (neuer Branch '%s')"
 
-#: builtin/worktree.c:442
+#: builtin/worktree.c:441
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr "Bereite Arbeitsverzeichnis vor (setze Branch '%s' um; war bei %s)"
 
-#: builtin/worktree.c:451
+#: builtin/worktree.c:450
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "Bereite Arbeitsverzeichnis vor (checke '%s' aus)"
 
-#: builtin/worktree.c:457
+#: builtin/worktree.c:456
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "Bereite Arbeitsverzeichnis vor (losgelöster HEAD %s)"
 
-#: builtin/worktree.c:498
+#: builtin/worktree.c:497
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr ""
 "<Branch> auschecken, auch wenn dieser bereits in einem anderen "
 "Arbeitsverzeichnis ausgecheckt ist"
 
-#: builtin/worktree.c:501
+#: builtin/worktree.c:500
 msgid "create a new branch"
 msgstr "neuen Branch erstellen"
 
-#: builtin/worktree.c:503
+#: builtin/worktree.c:502
 msgid "create or reset a branch"
 msgstr "Branch erstellen oder umsetzen"
 
-#: builtin/worktree.c:505
+#: builtin/worktree.c:504
 msgid "populate the new working tree"
 msgstr "das neue Arbeitsverzeichnis auschecken"
 
-#: builtin/worktree.c:506
+#: builtin/worktree.c:505
 msgid "keep the new working tree locked"
 msgstr "das neue Arbeitsverzeichnis gesperrt lassen"
 
-#: builtin/worktree.c:509
+#: builtin/worktree.c:508
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "Modus zum Folgen von Branches einstellen (siehe git-branch(1))"
 
-#: builtin/worktree.c:512
+#: builtin/worktree.c:511
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr ""
 "versuchen, eine Übereinstimmung des Branch-Namens mit einem\n"
 "Remote-Tracking-Branch herzustellen"
 
-#: builtin/worktree.c:520
+#: builtin/worktree.c:519
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr "-b, -B und --detach schließen sich gegenseitig aus"
 
-#: builtin/worktree.c:581
+#: builtin/worktree.c:580
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr ""
 "--[no]-track kann nur verwendet werden, wenn ein neuer Branch erstellt wird."
 
-#: builtin/worktree.c:681
+#: builtin/worktree.c:680
 msgid "reason for locking"
 msgstr "Sperrgrund"
 
-#: builtin/worktree.c:693 builtin/worktree.c:726 builtin/worktree.c:800
-#: builtin/worktree.c:927
+#: builtin/worktree.c:692 builtin/worktree.c:725 builtin/worktree.c:799
+#: builtin/worktree.c:926
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "'%s' ist kein Arbeitsverzeichnis"
 
-#: builtin/worktree.c:695 builtin/worktree.c:728
+#: builtin/worktree.c:694 builtin/worktree.c:727
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "Das Hauptarbeitsverzeichnis kann nicht gesperrt oder entsperrt werden."
 
-#: builtin/worktree.c:700
+#: builtin/worktree.c:699
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "'%s' ist bereits gesperrt, Grund: %s"
 
-#: builtin/worktree.c:702
+#: builtin/worktree.c:701
 #, c-format
 msgid "'%s' is already locked"
 msgstr "'%s' ist bereits gesperrt"
 
-#: builtin/worktree.c:730
+#: builtin/worktree.c:729
 #, c-format
 msgid "'%s' is not locked"
 msgstr "'%s' ist nicht gesperrt"
 
-#: builtin/worktree.c:771
+#: builtin/worktree.c:770
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr ""
 "Arbeitsverzeichnisse, die Submodule enthalten, können nicht verschoben oder\n"
 "entfernt werden."
 
-#: builtin/worktree.c:779
+#: builtin/worktree.c:778
 msgid "force move even if worktree is dirty or locked"
 msgstr ""
 "Verschieben erzwingen, auch wenn das Arbeitsverzeichnis geändert oder "
 "gesperrt ist"
 
-#: builtin/worktree.c:802 builtin/worktree.c:929
+#: builtin/worktree.c:801 builtin/worktree.c:928
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "'%s' ist ein Hauptarbeitsverzeichnis"
 
-#: builtin/worktree.c:807
+#: builtin/worktree.c:806
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "Konnte Zielname aus '%s' nicht bestimmen."
 
-#: builtin/worktree.c:813
+#: builtin/worktree.c:812
 #, c-format
 msgid "target '%s' already exists"
 msgstr "Ziel '%s' existiert bereits."
 
-#: builtin/worktree.c:821
+#: builtin/worktree.c:820
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -21244,7 +21330,7 @@
 "Benutzen Sie 'move -f -f' zum Überschreiben oder entsperren Sie zuerst\n"
 "das Arbeitsverzeichnis."
 
-#: builtin/worktree.c:823
+#: builtin/worktree.c:822
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -21253,38 +21339,40 @@
 "Benutzen Sie 'move -f -f' zum Überschreiben oder entsperren Sie zuerst\n"
 "das Arbeitsverzeichnis."
 
-#: builtin/worktree.c:826
+#: builtin/worktree.c:825
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "Validierung fehlgeschlagen, kann Arbeitszeichnis nicht verschieben: %s"
 
-#: builtin/worktree.c:831
+#: builtin/worktree.c:830
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "Fehler beim Verschieben von '%s' nach '%s'"
 
-#: builtin/worktree.c:879
+#: builtin/worktree.c:878
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "Fehler beim Ausführen von 'git status' auf '%s'"
 
-#: builtin/worktree.c:883
+#: builtin/worktree.c:882
 #, c-format
-msgid "'%s' is dirty, use --force to delete it"
-msgstr "'%s' ist verändert, benutzen Sie --force zum Löschen"
+msgid "'%s' contains modified or untracked files, use --force to delete it"
+msgstr ""
+"'%s' enthält geänderte oder nicht versionierte Dateien, benutzen Sie --force "
+"zum Löschen"
 
-#: builtin/worktree.c:888
+#: builtin/worktree.c:887
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "Fehler beim Ausführen von 'git status' auf '%s'. Code: %d"
 
-#: builtin/worktree.c:911
+#: builtin/worktree.c:910
 msgid "force removal even if worktree is dirty or locked"
 msgstr ""
 "Löschen erzwingen, auch wenn das Arbeitsverzeichnis geändert oder gesperrt "
 "ist"
 
-#: builtin/worktree.c:934
+#: builtin/worktree.c:933
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -21294,7 +21382,7 @@
 "Benutzen Sie 'remove -f -f' zum Überschreiben oder entsperren Sie zuerst\n"
 "das Arbeitsverzeichnis."
 
-#: builtin/worktree.c:936
+#: builtin/worktree.c:935
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -21303,7 +21391,7 @@
 "Benutzen Sie 'remove -f -f' zum Überschreiben oder entsperren Sie zuerst\n"
 "das Arbeitsverzeichnis."
 
-#: builtin/worktree.c:939
+#: builtin/worktree.c:938
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "Validierung fehlgeschlagen, kann Arbeitsverzeichnis nicht löschen: %s"
@@ -21324,6 +21412,16 @@
 msgid "only useful for debugging"
 msgstr "nur nützlich für Fehlersuche"
 
+#: fast-import.c:3118
+#, c-format
+msgid "Expected 'mark' command, got %s"
+msgstr "'mark' Befehl erwartet, '%s' bekommen"
+
+#: fast-import.c:3123
+#, c-format
+msgid "Expected 'to' command, got %s"
+msgstr "'to' Befehl erwartet, '%s' bekommen"
+
 #: credential-cache--daemon.c:223
 #, c-format
 msgid ""
@@ -21439,39 +21537,39 @@
 "Alias '%s' ändert Umgebungsvariablen.\n"
 "Sie können '!git' im Alias benutzen, um dies zu tun."
 
-#: git.c:377
+#: git.c:376
 #, c-format
 msgid "empty alias for %s"
 msgstr "leerer Alias für %s"
 
-#: git.c:380
+#: git.c:379
 #, c-format
 msgid "recursive alias: %s"
 msgstr "rekursiver Alias: %s"
 
-#: git.c:460
+#: git.c:459
 msgid "write failure on standard output"
 msgstr "Fehler beim Schreiben in die Standard-Ausgabe."
 
-#: git.c:462
+#: git.c:461
 msgid "unknown write failure on standard output"
 msgstr "Unbekannter Fehler beim Schreiben in die Standard-Ausgabe."
 
-#: git.c:464
+#: git.c:463
 msgid "close failed on standard output"
 msgstr "Fehler beim Schließen der Standard-Ausgabe."
 
-#: git.c:793
+#: git.c:792
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr "Alias-Schleife erkannt: Erweiterung von '%s' schließt nicht ab:%s"
 
-#: git.c:843
+#: git.c:842
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "Kann %s nicht als eingebauten Befehl behandeln."
 
-#: git.c:856
+#: git.c:855
 #, c-format
 msgid ""
 "usage: %s\n"
@@ -21480,12 +21578,12 @@
 "Verwendung: %s\n"
 "\n"
 
-#: git.c:876
+#: git.c:875
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr "Erweiterung von Alias '%s' fehlgeschlagen; '%s' ist kein Git-Befehl.\n"
 
-#: git.c:888
+#: git.c:887
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr "Fehler beim Ausführen von Befehl '%s': %s\n"
@@ -21505,31 +21603,31 @@
 "Das Anheften des öffentlichen Schlüssels wird mit cURL < 7.44.0\n"
 "nicht unterstützt."
 
-#: http.c:876
+#: http.c:878
 msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
 msgstr "CURLSSLOPT_NO_REVOKE wird mit cURL < 7.44.0 nicht unterstützt."
 
-#: http.c:949
+#: http.c:951
 msgid "Protocol restrictions not supported with cURL < 7.19.4"
 msgstr "Protokollbeschränkungen werden mit cURL < 7.19.4 nicht unterstützt."
 
-#: http.c:1085
+#: http.c:1088
 #, c-format
 msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
 msgstr "Nicht unterstütztes SSL-Backend '%s'. Unterstützte SSL-Backends:"
 
-#: http.c:1092
+#: http.c:1095
 #, c-format
 msgid "Could not set SSL backend to '%s': cURL was built without SSL backends"
 msgstr ""
 "Konnte SSL-Backend nicht zu '%s' setzen: cURL wurde ohne SSL-Backends gebaut."
 
-#: http.c:1096
+#: http.c:1099
 #, c-format
 msgid "Could not set SSL backend to '%s': already set"
 msgstr "Konnte SSL-Backend nicht zu '%s' setzen: bereits gesetzt"
 
-#: http.c:1965
+#: http.c:1968
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -21540,130 +21638,130 @@
 "  gefragt nach: %s\n"
 "    umgeleitet: %s"
 
-#: remote-curl.c:157
+#: remote-curl.c:166
 #, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr "Ungültiges Quoting beim \"push-option\"-Wert: '%s'"
 
-#: remote-curl.c:254
+#: remote-curl.c:263
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr "%sinfo/refs nicht gültig: Ist das ein Git-Repository?"
 
-#: remote-curl.c:355
+#: remote-curl.c:364
 msgid "invalid server response; expected service, got flush packet"
 msgstr "Ungültige Antwort des Servers. Service erwartet, Flush-Paket bekommen"
 
-#: remote-curl.c:386
+#: remote-curl.c:395
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr "Ungültige Serverantwort; '%s' bekommen"
 
-#: remote-curl.c:446
+#: remote-curl.c:455
 #, c-format
 msgid "repository '%s' not found"
 msgstr "Repository '%s' nicht gefunden."
 
-#: remote-curl.c:450
+#: remote-curl.c:459
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr "Authentifizierung fehlgeschlagen für '%s'"
 
-#: remote-curl.c:454
+#: remote-curl.c:463
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "konnte nicht auf '%s' zugreifen: %s"
 
-#: remote-curl.c:460
+#: remote-curl.c:469
 #, c-format
 msgid "redirecting to %s"
 msgstr "Leite nach %s um"
 
-#: remote-curl.c:584
+#: remote-curl.c:593
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr "sollte kein EOF haben, wenn nicht behutsam mit EOF"
 
-#: remote-curl.c:664
+#: remote-curl.c:673
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr ""
 "Konnte nicht RPC-POST-Daten zurückspulen - Versuchen Sie http.postBuffer zu "
 "erhöhen"
 
-#: remote-curl.c:724
+#: remote-curl.c:733
 #, c-format
 msgid "RPC failed; %s"
 msgstr "RPC fehlgeschlagen; %s"
 
-#: remote-curl.c:764
+#: remote-curl.c:773
 msgid "cannot handle pushes this big"
 msgstr "Kann solche großen Übertragungen nicht verarbeiten."
 
-#: remote-curl.c:879
+#: remote-curl.c:888
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr "Kann Request nicht komprimieren; \"zlib deflate\"-Fehler %d"
 
-#: remote-curl.c:883
+#: remote-curl.c:892
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr "Kann Request nicht komprimieren; \"zlib end\"-Fehler %d"
 
-#: remote-curl.c:1014
+#: remote-curl.c:1023
 msgid "dumb http transport does not support shallow capabilities"
 msgstr "Dumb HTTP-Transport unterstützt keine shallow-Funktionen"
 
-#: remote-curl.c:1028
+#: remote-curl.c:1037
 msgid "fetch failed."
 msgstr "\"fetch\" fehlgeschlagen."
 
-#: remote-curl.c:1076
+#: remote-curl.c:1085
 msgid "cannot fetch by sha1 over smart http"
 msgstr "Kann SHA-1 nicht über Smart-HTTP anfordern"
 
-#: remote-curl.c:1120 remote-curl.c:1126
+#: remote-curl.c:1129 remote-curl.c:1135
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr "Protokollfehler: SHA-1/Referenz erwartet, '%s' bekommen"
 
-#: remote-curl.c:1138 remote-curl.c:1252
+#: remote-curl.c:1147 remote-curl.c:1261
 #, c-format
 msgid "http transport does not support %s"
 msgstr "HTTP-Transport unterstützt nicht %s"
 
-#: remote-curl.c:1174
+#: remote-curl.c:1183
 msgid "git-http-push failed"
 msgstr "\"git-http-push\" fehlgeschlagen"
 
-#: remote-curl.c:1360
+#: remote-curl.c:1367
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr "remote-curl: Verwendung: git remote-curl <Remote-Repository> [<URL>]"
 
-#: remote-curl.c:1392
+#: remote-curl.c:1399
 msgid "remote-curl: error reading command stream from git"
 msgstr "remote-curl: Fehler beim Lesen des Kommando-Streams von Git"
 
-#: remote-curl.c:1399
+#: remote-curl.c:1406
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr "remote-curl: \"fetch\" ohne lokales Repository versucht"
 
-#: remote-curl.c:1439
+#: remote-curl.c:1446
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr "remote-curl: Unbekannter Befehl '%s' von Git"
 
-#: list-objects-filter-options.h:61
+#: list-objects-filter-options.h:85
 msgid "args"
 msgstr "Argumente"
 
-#: list-objects-filter-options.h:62
+#: list-objects-filter-options.h:86
 msgid "object filtering"
 msgstr "Filtern nach Objekten"
 
-#: parse-options.h:170
+#: parse-options.h:179
 msgid "expiry-date"
 msgstr "Verfallsdatum"
 
-#: parse-options.h:184
+#: parse-options.h:193
 msgid "no-op (backward compatibility)"
 msgstr "Kein Effekt (Rückwärtskompatibilität)"
 
@@ -24162,6 +24260,44 @@
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "Wollen Sie %s wirklich versenden? [y|N]: "
 
+#~ msgid "unknown core.untrackedCache value '%s'; using 'keep' default value"
+#~ msgstr ""
+#~ "Unbekannter Wert '%s' in core.untrackedCache; benutze Standardwert 'keep'"
+
+#~ msgid "cannot change partial clone promisor remote"
+#~ msgstr "Kann Remote-Repository für partielles Klonen nicht ändern."
+
+#~ msgid "error building trees"
+#~ msgstr "Fehler beim Erstellen der \"Tree\"-Objekte"
+
+#~ msgid "invalid date format '%s' in '%s'"
+#~ msgstr "Ungültiges Datumsformat '%s' in '%s'"
+
+#~ msgid "writing root commit"
+#~ msgstr "Root-Commit schreiben"
+
+#~ msgid "staged changes in the following files may be lost: %s"
+#~ msgstr ""
+#~ "Zum Commit vorgemerkte Änderungen in den folgenden Dateien gehen "
+#~ "eventuell verloren: %s"
+
+#~ msgid ""
+#~ "--filter can only be used with the remote configured in extensions."
+#~ "partialClone"
+#~ msgstr ""
+#~ "--filter kann nur mit den Remote-Repositories verwendet werden,\n"
+#~ "die in core.partialClone konfiguriert sind."
+
+#~ msgid "verify commit-msg hook"
+#~ msgstr "commit-msg Hook überprüfen"
+
+#~ msgid "cannot combine '--rebase-merges' with '--strategy-option'"
+#~ msgstr ""
+#~ "'--rebase-merges' kann nicht mit '--strategy-option' kombiniert werden."
+
+#~ msgid "invalid sparse value '%s'"
+#~ msgstr "Ungültiger \"sparse\"-Wert '%s'."
+
 #~ msgid ""
 #~ "Fetch normally indicates which branches had a forced update, but that "
 #~ "check has been disabled."
diff --git a/po/es.po b/po/es.po
index 87c77ff..a0063f0 100644
--- a/po/es.po
+++ b/po/es.po
@@ -7,8 +7,8 @@
 msgstr ""
 "Project-Id-Version: Git\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2019-08-10 20:12+0800\n"
-"PO-Revision-Date: 2019-08-10 12:55-0500\n"
+"POT-Creation-Date: 2019-10-28 13:19+0800\n"
+"PO-Revision-Date: 2019-10-28 19:20-0500\n"
 "Last-Translator: christopher.diaz.riv@gmail.com\n"
 "Language-Team: CodeLabora <codelabora@gmail.com>\n"
 "Language: es\n"
@@ -61,7 +61,7 @@
 msgid "Exiting because of an unresolved conflict."
 msgstr "Saliendo porque existe un conflicto sin resolver."
 
-#: advice.c:193 builtin/merge.c:1327
+#: advice.c:193 builtin/merge.c:1332
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "No has concluido tu fusión (MERGE_HEAD existe)."
 
@@ -206,17 +206,7 @@
 msgid "inconsistent header lines %d and %d"
 msgstr "header inconsistente en las líneas %d y %d"
 
-#: apply.c:1460
-#, c-format
-msgid "recount: unexpected line: %.*s"
-msgstr "recount: línea inesperada: %.*s"
-
-#: apply.c:1529
-#, c-format
-msgid "patch fragment without header at line %d: %.*s"
-msgstr "fragmento de parche sin header en la línea %d: %.*s"
-
-#: apply.c:1551
+#: apply.c:1372
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -231,83 +221,93 @@
 "los headers de git diff carecen de información de los nombres de los "
 "archivos %d cuando los eliminan de la ruta principal componentes (línea %d)"
 
-#: apply.c:1564
+#: apply.c:1385
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr ""
 "el header de git diff carece de información del nombre del archivo (línea %d)"
 
-#: apply.c:1752
+#: apply.c:1481
+#, c-format
+msgid "recount: unexpected line: %.*s"
+msgstr "recount: línea inesperada: %.*s"
+
+#: apply.c:1550
+#, c-format
+msgid "patch fragment without header at line %d: %.*s"
+msgstr "fragmento de parche sin header en la línea %d: %.*s"
+
+#: apply.c:1753
 msgid "new file depends on old contents"
 msgstr "el nuevo archivo depende de contenidos viejos"
 
-#: apply.c:1754
+#: apply.c:1755
 msgid "deleted file still has contents"
 msgstr "el archivo eliminado todavía tiene contenido"
 
-#: apply.c:1788
+#: apply.c:1789
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "parche corrupto en la línea %d"
 
-#: apply.c:1825
+#: apply.c:1826
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "nuevo archivo %s depende en contenidos viejos"
 
-#: apply.c:1827
+#: apply.c:1828
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "el archivo borrado %s todavía tiene contenido"
 
-#: apply.c:1830
+#: apply.c:1831
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** peligro: el archivo %s está vacío pero no es borrado"
 
-#: apply.c:1977
+#: apply.c:1978
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "parche binario corrupto en la línea %d: %.*s"
 
-#: apply.c:2014
+#: apply.c:2015
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "parche binario no reconocido en la línea %d"
 
-#: apply.c:2176
+#: apply.c:2177
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "parche que solo contiene basura en la línea %d"
 
-#: apply.c:2262
+#: apply.c:2263
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "no es posible leer el enlace simbólico %s"
 
-#: apply.c:2266
+#: apply.c:2267
 #, c-format
 msgid "unable to open or read %s"
 msgstr "no es posible abrir o leer %s"
 
-#: apply.c:2925
+#: apply.c:2926
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "comienzo inválido de línea: '%c'"
 
-#: apply.c:3046
+#: apply.c:3047
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "Hunk #%d tuvo éxito en %d (%d línea compensada)."
 msgstr[1] "Hunk #%d tuvo éxito en %d (%d líneas compensadas)."
 
-#: apply.c:3058
+#: apply.c:3059
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "Contexto reducido a (%ld/%ld) para aplicar el fragmento en %d"
 
-#: apply.c:3064
+#: apply.c:3065
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -316,23 +316,23 @@
 "mientras se busca:\n"
 "%.*s"
 
-#: apply.c:3086
+#: apply.c:3087
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "data perdida en parche binario para '%s'"
 
-#: apply.c:3094
+#: apply.c:3095
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr ""
 "no se puede revertir-aplicar un parche binario sin el hunk revertido a '%s'"
 
-#: apply.c:3141
+#: apply.c:3142
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr "no se puede aplicar el parche binario a '%s' sin un índice completo"
 
-#: apply.c:3151
+#: apply.c:3152
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
@@ -340,289 +340,289 @@
 "el parche aplica a '%s' (%s), lo cual no concuerda con los contenidos "
 "actuales."
 
-#: apply.c:3159
+#: apply.c:3160
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "el parche aplica a un '%s' vacío, pero este no lo esta"
 
-#: apply.c:3177
+#: apply.c:3178
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "la postimagen necesaria %s para '%s' no se puede leer"
 
-#: apply.c:3190
+#: apply.c:3191
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "el parche binario no aplica para '%s'"
 
-#: apply.c:3196
+#: apply.c:3197
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
 "el parche binario para '%s' crea un resultado incorrecto (saliendo %s, se "
 "obtuvo %s)"
 
-#: apply.c:3217
+#: apply.c:3218
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "el parche falló: %s:%ld"
 
-#: apply.c:3340
+#: apply.c:3341
 #, c-format
 msgid "cannot checkout %s"
 msgstr "no se puede hacer checkout a %s"
 
-#: apply.c:3392 apply.c:3403 apply.c:3449 midx.c:62 setup.c:279
+#: apply.c:3393 apply.c:3404 apply.c:3450 midx.c:61 setup.c:280
 #, c-format
 msgid "failed to read %s"
 msgstr "no se pudo leer %s"
 
-#: apply.c:3400
+#: apply.c:3401
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "leyendo de '%s' tras un enlace simbólico"
 
-#: apply.c:3429 apply.c:3672
+#: apply.c:3430 apply.c:3673
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "la ruta %s ha sido renombrada/suprimida"
 
-#: apply.c:3515 apply.c:3687
+#: apply.c:3516 apply.c:3688
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s: no existe en el índice"
 
-#: apply.c:3524 apply.c:3695
+#: apply.c:3525 apply.c:3696
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s: no concuerda con el índice"
 
-#: apply.c:3559
+#: apply.c:3560
 msgid "repository lacks the necessary blob to fall back on 3-way merge."
 msgstr ""
 "el repositorio carece del blob necesario para regresar en un merge de tres-"
 "vías."
 
-#: apply.c:3562
+#: apply.c:3563
 #, c-format
 msgid "Falling back to three-way merge...\n"
 msgstr "Retrocediendo en un merge de tres-vías...\n"
 
-#: apply.c:3578 apply.c:3582
+#: apply.c:3579 apply.c:3583
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "no se pueden leer los contenidos actuales de '%s'"
 
-#: apply.c:3594
+#: apply.c:3595
 #, c-format
 msgid "Failed to fall back on three-way merge...\n"
 msgstr "Falló el merge en retroceso de tres-vías...\n"
 
-#: apply.c:3608
+#: apply.c:3609
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "Parche aplicado a '%s' con conflictos.\n"
 
-#: apply.c:3613
+#: apply.c:3614
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "Parche aplicado a '%s' limpiamente\n"
 
-#: apply.c:3639
+#: apply.c:3640
 msgid "removal patch leaves file contents"
-msgstr "parche de remoción deja contenidos en el archivo"
+msgstr "parche de eliminación deja contenidos en el archivo"
 
-#: apply.c:3712
+#: apply.c:3713
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s: tipo incorrecto"
 
-#: apply.c:3714
+#: apply.c:3715
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s tiene tipo %o, se esperaba %o"
 
-#: apply.c:3865 apply.c:3867 read-cache.c:830 read-cache.c:856
+#: apply.c:3866 apply.c:3868 read-cache.c:830 read-cache.c:856
 #: read-cache.c:1309
 #, c-format
 msgid "invalid path '%s'"
 msgstr "ruta inválida '%s'"
 
-#: apply.c:3923
+#: apply.c:3924
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s: ya existe en el índice"
 
-#: apply.c:3926
+#: apply.c:3927
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s: ya existe en el directorio de trabajo"
 
-#: apply.c:3946
+#: apply.c:3947
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "nuevo modo (%o) de %s no concuerda con el viejo modo (%o)"
 
-#: apply.c:3951
+#: apply.c:3952
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "nuevo modo (%o) de %s no concuerda con el viejo modo (%o) de %s"
 
-#: apply.c:3971
+#: apply.c:3972
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "archivo afectado '%s' está tras un enlace simbólico"
 
-#: apply.c:3975
+#: apply.c:3976
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s: el parche no aplica"
 
-#: apply.c:3990
+#: apply.c:3991
 #, c-format
 msgid "Checking patch %s..."
 msgstr "Revisando el parche %s..."
 
-#: apply.c:4082
+#: apply.c:4083
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "falta información del sha1 o es inútil para el submódulo %s"
 
-#: apply.c:4089
+#: apply.c:4090
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "modo cambiado para %s, el cual no se encuentra en el HEAD actual"
 
-#: apply.c:4092
+#: apply.c:4093
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "falta información sha1 o es inútil (%s)."
 
-#: apply.c:4097 builtin/checkout.c:278 builtin/reset.c:143
+#: apply.c:4098 builtin/checkout.c:279 builtin/reset.c:143
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "make_cache_entry falló para la ruta '%s'"
 
-#: apply.c:4101
+#: apply.c:4102
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "no se pudo añadir %s al índice temporal"
 
-#: apply.c:4111
+#: apply.c:4112
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "no se pudo escribir un índice temporal para %s"
 
-#: apply.c:4249
+#: apply.c:4250
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "no se puede eliminar %s del índice"
 
-#: apply.c:4283
+#: apply.c:4284
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "parche corrupto para el submódulo %s"
 
-#: apply.c:4289
+#: apply.c:4290
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "no es posible establecer el archivo recién creado '%s'"
 
-#: apply.c:4297
+#: apply.c:4298
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr ""
 "no es posible crear una copia de seguridad para el archivo recién creado %s"
 
-#: apply.c:4303 apply.c:4448
+#: apply.c:4304 apply.c:4449
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "no es posible agregar una entrada en el cache para %s"
 
-#: apply.c:4346
+#: apply.c:4347
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "falló escribir para '%s'"
 
-#: apply.c:4350
+#: apply.c:4351
 #, c-format
 msgid "closing file '%s'"
 msgstr "cerrando archivo '%s'"
 
-#: apply.c:4420
+#: apply.c:4421
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "no es posible escribir el archivo '%s' modo %o"
 
-#: apply.c:4518
+#: apply.c:4519
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "Parche %s aplicado limpiamente."
 
-#: apply.c:4526
+#: apply.c:4527
 msgid "internal error"
 msgstr "error interno"
 
-#: apply.c:4529
+#: apply.c:4530
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "Aplicando parche %%s con %d rechazo..."
 msgstr[1] "Aplicando parche %%s con %d rechazos..."
 
-#: apply.c:4540
+#: apply.c:4541
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "truncando el nombre de archivo .rej a %.*s.rej"
 
-#: apply.c:4548 builtin/fetch.c:878 builtin/fetch.c:1168
+#: apply.c:4549 builtin/fetch.c:898 builtin/fetch.c:1194
 #, c-format
 msgid "cannot open %s"
 msgstr "no se puede abrir %s"
 
-#: apply.c:4562
+#: apply.c:4563
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "Hunk #%d aplicado limpiamente."
 
-#: apply.c:4566
+#: apply.c:4567
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "Hunk #%d rechazado."
 
-#: apply.c:4676
+#: apply.c:4686
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Parche '%s' saltado."
 
-#: apply.c:4684
+#: apply.c:4694
 msgid "unrecognized input"
 msgstr "input no reconocido"
 
-#: apply.c:4704
+#: apply.c:4714
 msgid "unable to read index file"
 msgstr "no es posible leer el archivo índice"
 
-#: apply.c:4859
+#: apply.c:4871
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "no se puede abrir el parche '%s': %s"
 
-#: apply.c:4886
+#: apply.c:4898
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "%d error de espacios en blanco aplastado"
 msgstr[1] "%d errores de espacios en blanco aplastados"
 
-#: apply.c:4892 apply.c:4907
+#: apply.c:4904 apply.c:4919
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d línea agrega errores de espacios en blanco."
 msgstr[1] "%d líneas agregan errores de espacios en blanco."
 
-#: apply.c:4900
+#: apply.c:4912
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
@@ -631,146 +631,146 @@
 msgstr[1] ""
 "%d líneas aplicadas después de arreglar los errores de espacios en blanco."
 
-#: apply.c:4916 builtin/add.c:540 builtin/mv.c:301 builtin/rm.c:390
+#: apply.c:4928 builtin/add.c:540 builtin/mv.c:301 builtin/rm.c:390
 msgid "Unable to write new index file"
 msgstr "No es posible escribir el archivo índice"
 
-#: apply.c:4943 apply.c:4946 builtin/am.c:2208 builtin/am.c:2211
-#: builtin/clone.c:123 builtin/fetch.c:128 builtin/merge.c:273
-#: builtin/pull.c:208 builtin/submodule--helper.c:407
+#: apply.c:4955 apply.c:4958 builtin/am.c:2197 builtin/am.c:2200
+#: builtin/clone.c:122 builtin/fetch.c:143 builtin/merge.c:273
+#: builtin/pull.c:209 builtin/submodule--helper.c:407
 #: builtin/submodule--helper.c:1367 builtin/submodule--helper.c:1370
 #: builtin/submodule--helper.c:1850 builtin/submodule--helper.c:1853
 #: builtin/submodule--helper.c:2092 git-add--interactive.perl:211
 msgid "path"
 msgstr "ruta"
 
-#: apply.c:4944
+#: apply.c:4956
 msgid "don't apply changes matching the given path"
 msgstr "no aplicar cambios que concuerden con la ruta suministrada"
 
-#: apply.c:4947
+#: apply.c:4959
 msgid "apply changes matching the given path"
 msgstr "aplicar cambios que concuerden con la ruta suministrada"
 
-#: apply.c:4949 builtin/am.c:2217
+#: apply.c:4961 builtin/am.c:2206
 msgid "num"
 msgstr "num"
 
-#: apply.c:4950
+#: apply.c:4962
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "eliminar <num> slashes iniciales de las rutas diff tradicionales"
 
-#: apply.c:4953
+#: apply.c:4965
 msgid "ignore additions made by the patch"
 msgstr "ignorar adiciones hechas por el parche"
 
-#: apply.c:4955
+#: apply.c:4967
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "en lugar de aplicar el parche, mostrar diffstat para la entrada"
 
-#: apply.c:4959
+#: apply.c:4971
 msgid "show number of added and deleted lines in decimal notation"
 msgstr "mostrar el numero de líneas agregadas y eliminadas en notación decimal"
 
-#: apply.c:4961
+#: apply.c:4973
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "en lugar de aplicar el parche, mostrar un resumen para la entrada"
 
-#: apply.c:4963
+#: apply.c:4975
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "en lugar de aplicar el parche, ver si el parche es aplicable"
 
-#: apply.c:4965
+#: apply.c:4977
 msgid "make sure the patch is applicable to the current index"
 msgstr "asegurar que el parche es aplicable al índice actual"
 
-#: apply.c:4967
+#: apply.c:4979
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "marca los nuevos archivos con `git add --intent-to-add`"
 
-#: apply.c:4969
+#: apply.c:4981
 msgid "apply a patch without touching the working tree"
 msgstr "aplicar un parche sin tocar el árbol de trabajo"
 
-#: apply.c:4971
+#: apply.c:4983
 msgid "accept a patch that touches outside the working area"
 msgstr "aceptar un parche que toca fuera del área de trabajo"
 
-#: apply.c:4974
+#: apply.c:4986
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "también aplicar el parche ( usar con --stat/--summary/--check"
 
-#: apply.c:4976
+#: apply.c:4988
 msgid "attempt three-way merge if a patch does not apply"
 msgstr "intentar merge de tres-vías si el parche no aplica"
 
-#: apply.c:4978
+#: apply.c:4990
 msgid "build a temporary index based on embedded index information"
 msgstr ""
 "construir un índice temporal basado en la información del índice incrustado"
 
-#: apply.c:4981 builtin/checkout-index.c:173 builtin/ls-files.c:524
+#: apply.c:4993 builtin/checkout-index.c:173 builtin/ls-files.c:524
 msgid "paths are separated with NUL character"
 msgstr "rutas están separadas con un carácter NULL"
 
-#: apply.c:4983
+#: apply.c:4995
 msgid "ensure at least <n> lines of context match"
 msgstr "asegure que por lo menos <n> líneas del contexto concuerden"
 
-#: apply.c:4984 builtin/am.c:2196 builtin/interpret-trailers.c:98
+#: apply.c:4996 builtin/am.c:2185 builtin/interpret-trailers.c:98
 #: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3330 builtin/rebase.c:1421
+#: builtin/pack-objects.c:3310 builtin/rebase.c:1445
 msgid "action"
 msgstr "acción"
 
-#: apply.c:4985
+#: apply.c:4997
 msgid "detect new or modified lines that have whitespace errors"
 msgstr ""
 "detectar líneas nuevas o modificadas que contienen errores de espacios en "
 "blanco"
 
-#: apply.c:4988 apply.c:4991
+#: apply.c:5000 apply.c:5003
 msgid "ignore changes in whitespace when finding context"
 msgstr ""
 "ignorar cambios en los espacios en blanco cuando se encuentra el contexto"
 
-#: apply.c:4994
+#: apply.c:5006
 msgid "apply the patch in reverse"
 msgstr "aplicar el parche en reversa"
 
-#: apply.c:4996
+#: apply.c:5008
 msgid "don't expect at least one line of context"
 msgstr "no espera al menos una línea del contexto"
 
-#: apply.c:4998
+#: apply.c:5010
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "dejar los hunks rechazados en los archivos *.rej correspontientes"
 
-#: apply.c:5000
+#: apply.c:5012
 msgid "allow overlapping hunks"
 msgstr "permitir solapamiento de hunks"
 
-#: apply.c:5001 builtin/add.c:291 builtin/check-ignore.c:22
+#: apply.c:5013 builtin/add.c:291 builtin/check-ignore.c:22
 #: builtin/commit.c:1337 builtin/count-objects.c:98 builtin/fsck.c:786
-#: builtin/log.c:2068 builtin/mv.c:123 builtin/read-tree.c:128
+#: builtin/log.c:2085 builtin/mv.c:123 builtin/read-tree.c:128
 msgid "be verbose"
 msgstr "ser verboso"
 
-#: apply.c:5003
+#: apply.c:5015
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr ""
 "tolerar nuevas líneas faltantes detectadas incorrectamente al final del "
 "archivo"
 
-#: apply.c:5006
+#: apply.c:5018
 msgid "do not trust the line counts in the hunk headers"
 msgstr "no confiar en el conteo de líneas en los headers del hunk"
 
-#: apply.c:5008 builtin/am.c:2205
+#: apply.c:5020 builtin/am.c:2194
 msgid "root"
 msgstr "raíz"
 
-#: apply.c:5009
+#: apply.c:5021
 msgid "prepend <root> to all filenames"
 msgstr "anteponer <root> a todos los nombres de archivos"
 
@@ -825,7 +825,7 @@
 msgid "archive format"
 msgstr "formato del archivo"
 
-#: archive.c:458 builtin/log.c:1580
+#: archive.c:458 builtin/log.c:1581
 msgid "prefix"
 msgstr "prefijo"
 
@@ -833,11 +833,12 @@
 msgid "prepend prefix to each pathname in the archive"
 msgstr "anteponer prefijo a cada ruta en el archivo"
 
-#: archive.c:460 builtin/blame.c:862 builtin/blame.c:874 builtin/blame.c:875
-#: builtin/commit-tree.c:117 builtin/config.c:129 builtin/fast-export.c:1134
-#: builtin/fast-export.c:1136 builtin/grep.c:897 builtin/hash-object.c:105
-#: builtin/ls-files.c:560 builtin/ls-files.c:563 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:177
+#: archive.c:460 builtin/blame.c:861 builtin/blame.c:873 builtin/blame.c:874
+#: builtin/commit-tree.c:117 builtin/config.c:129 builtin/fast-export.c:1162
+#: builtin/fast-export.c:1164 builtin/fast-export.c:1168 builtin/grep.c:899
+#: builtin/hash-object.c:105 builtin/ls-files.c:560 builtin/ls-files.c:563
+#: builtin/notes.c:412 builtin/notes.c:578 builtin/read-tree.c:123
+#: parse-options.h:186
 msgid "file"
 msgstr "carpeta"
 
@@ -869,7 +870,7 @@
 msgid "list supported archive formats"
 msgstr "listar los formatos de carpeta soportados"
 
-#: archive.c:479 builtin/archive.c:91 builtin/clone.c:113 builtin/clone.c:116
+#: archive.c:479 builtin/archive.c:91 builtin/clone.c:112 builtin/clone.c:115
 #: builtin/submodule--helper.c:1379 builtin/submodule--helper.c:1859
 msgid "repo"
 msgstr "repo"
@@ -878,7 +879,7 @@
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "obtener la carpeta del repositorio remoto <repo>"
 
-#: archive.c:481 builtin/archive.c:93 builtin/difftool.c:707
+#: archive.c:481 builtin/archive.c:93 builtin/difftool.c:715
 #: builtin/notes.c:498
 msgid "command"
 msgstr "comando"
@@ -914,26 +915,26 @@
 msgid "cannot stream blob %s"
 msgstr "no se puede transmitir el blob %s"
 
-#: archive-tar.c:260 archive-zip.c:363
+#: archive-tar.c:266 archive-zip.c:363
 #, c-format
 msgid "unsupported file mode: 0%o (SHA1: %s)"
 msgstr "modo de archivo no soportado: 0%o (SHA1: %s)"
 
-#: archive-tar.c:287 archive-zip.c:353
+#: archive-tar.c:293 archive-zip.c:353
 #, c-format
 msgid "cannot read %s"
 msgstr "no se puede leer %s"
 
-#: archive-tar.c:459
+#: archive-tar.c:465
 #, c-format
 msgid "unable to start '%s' filter"
 msgstr "no se puede comenzar filtro '%s'"
 
-#: archive-tar.c:462
+#: archive-tar.c:468
 msgid "unable to redirect descriptor"
 msgstr "incapaz de redirigir descriptor"
 
-#: archive-tar.c:469
+#: archive-tar.c:475
 #, c-format
 msgid "'%s' filter reported error"
 msgstr "filtro '%s' reportó un error"
@@ -958,17 +959,17 @@
 msgid "timestamp too large for this system: %<PRIuMAX>"
 msgstr "timestamp muy largo para este sistema: %<PRIuMAX>"
 
-#: attr.c:211
+#: attr.c:213
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s no es un nombre de atributo válido"
 
-#: attr.c:368
+#: attr.c:370
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s no permitido: %s:%d"
 
-#: attr.c:408
+#: attr.c:410
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1027,7 +1028,7 @@
 msgstr ""
 "Algunas %s revisiones no son ancestros de la revisión %s.\n"
 "git bisect no puede trabajar bien en este caso.\n"
-"Tal vez confundiste la revisión %s y %s?\n"
+"¿Tal vez confundiste la revisión %s y %s?\n"
 
 #: bisect.c:789
 #, c-format
@@ -1095,40 +1096,40 @@
 msgstr[0] "Biseccionando: falta %d revisión por probar después de esto %s\n"
 msgstr[1] "Biseccionando: faltan %d revisiones por probar después de esto %s\n"
 
-#: blame.c:2697
+#: blame.c:2700
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents y --reverse no se mezclan bien."
 
-#: blame.c:2711
+#: blame.c:2714
 msgid "cannot use --contents with final commit object name"
 msgstr "no se puede usar --contents con el nombre de objeto commit final"
 
-#: blame.c:2732
+#: blame.c:2735
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "--reverse y --first-parent juntos requieren especificar el último commit"
 
-#: blame.c:2741 bundle.c:167 ref-filter.c:2196 remote.c:1938 sequencer.c:2033
-#: sequencer.c:4348 builtin/commit.c:1020 builtin/log.c:387 builtin/log.c:963
-#: builtin/log.c:1451 builtin/log.c:1827 builtin/log.c:2117 builtin/merge.c:411
-#: builtin/pack-objects.c:3148 builtin/pack-objects.c:3163
+#: blame.c:2744 bundle.c:167 ref-filter.c:2203 remote.c:1941 sequencer.c:1971
+#: sequencer.c:4305 builtin/commit.c:1020 builtin/log.c:387 builtin/log.c:964
+#: builtin/log.c:1452 builtin/log.c:1844 builtin/log.c:2134 builtin/merge.c:411
+#: builtin/pack-objects.c:3128 builtin/pack-objects.c:3143
 #: builtin/shortlog.c:192
 msgid "revision walk setup failed"
 msgstr "falló la configuración del camino de revisión"
 
-#: blame.c:2759
+#: blame.c:2762
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "--reverse --first-parent juntos requieren un rango a lo largo de la cadena "
 "del primer padre"
 
-#: blame.c:2770
+#: blame.c:2773
 #, c-format
 msgid "no such path %s in %s"
 msgstr "no hay una ruta %s en %s"
 
-#: blame.c:2781
+#: blame.c:2784
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "no se puede leer el blob %s para la ruta %s"
@@ -1292,7 +1293,7 @@
 msgid "unrecognized header: %s%s (%d)"
 msgstr "header no reconocido %s%s (%d)"
 
-#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2283 sequencer.c:3024
+#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2221 sequencer.c:2962
 #: builtin/commit.c:791
 #, c-format
 msgid "could not open '%s'"
@@ -1345,7 +1346,7 @@
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "referencia '%s' es excluida por las opciones de rev-list"
 
-#: bundle.c:460 builtin/log.c:202 builtin/log.c:1732 builtin/shortlog.c:306
+#: bundle.c:460 builtin/log.c:202 builtin/log.c:1733 builtin/shortlog.c:306
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "argumento no reconocido: %s"
@@ -1368,8 +1369,8 @@
 msgid "invalid color value: %.*s"
 msgstr "color inválido: %.*s"
 
-#: commit.c:50 sequencer.c:2727 builtin/am.c:355 builtin/am.c:399
-#: builtin/am.c:1378 builtin/am.c:2020 builtin/replace.c:455
+#: commit.c:50 sequencer.c:2665 builtin/am.c:354 builtin/am.c:398
+#: builtin/am.c:1366 builtin/am.c:2009 builtin/replace.c:456
 #, c-format
 msgid "could not parse %s"
 msgstr "no se puede analizar %s"
@@ -1377,7 +1378,7 @@
 #: commit.c:52
 #, c-format
 msgid "%s %s is not a commit!"
-msgstr "%s %s no es un commit!"
+msgstr "¡%s %s no es un commit!"
 
 #: commit.c:192
 msgid ""
@@ -1399,27 +1400,27 @@
 "Apapa este mensaje ejecutando\n"
 "\"git config advice.graftFileDeprecated false\""
 
-#: commit.c:1127
+#: commit.c:1128
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr "Commit %s tiene una firma GPG no confiable, pretendidamente por %s."
 
-#: commit.c:1130
+#: commit.c:1131
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "Commit %s tiene una mala firma GPG pretendidamente por %s."
 
-#: commit.c:1133
+#: commit.c:1134
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "Commit %s no tiene una firma GPG."
 
-#: commit.c:1136
+#: commit.c:1137
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "El Commit %s tiene una buena firma GPG por %s\n"
 
-#: commit.c:1390
+#: commit.c:1391
 msgid ""
 "Warning: commit message did not conform to UTF-8.\n"
 "You may want to amend it after fixing the message, or set the config\n"
@@ -1482,199 +1483,214 @@
 msgid "unable to find all commit-graph files"
 msgstr "no es posible encontrar los archivos commit-graph"
 
-#: commit-graph.c:554 commit-graph.c:614
+#: commit-graph.c:561 commit-graph.c:621
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr "posición de commit inválida. commit-graph está probablemente corrupto"
 
-#: commit-graph.c:575
+#: commit-graph.c:582
 #, c-format
 msgid "could not find commit %s"
 msgstr "no se pudo encontrar commit %s"
 
-#: commit-graph.c:1002 builtin/pack-objects.c:2657
+#: commit-graph.c:855 builtin/am.c:1287
+#, c-format
+msgid "unable to parse commit %s"
+msgstr "no es posible analizar el commit %s"
+
+#: commit-graph.c:859
+#, c-format
+msgid "unable to get tree for %s"
+msgstr "no se pudo obtener árbol para %s"
+
+#: commit-graph.c:1017 builtin/pack-objects.c:2641
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "incapaz de obtener el tipo de objeto: %s"
 
-#: commit-graph.c:1034
+#: commit-graph.c:1049
 msgid "Loading known commits in commit graph"
 msgstr "Cargando commits conocidos en commit graph"
 
-#: commit-graph.c:1051
+#: commit-graph.c:1066
 msgid "Expanding reachable commits in commit graph"
 msgstr "Expandiendo commits alcanzables en commit graph"
 
-#: commit-graph.c:1070
+#: commit-graph.c:1085
 msgid "Clearing commit marks in commit graph"
 msgstr "Limpiando marcas de commits en commit graph"
 
-#: commit-graph.c:1089
+#: commit-graph.c:1104
 msgid "Computing commit graph generation numbers"
 msgstr "Calculando números de generación de commit graph"
 
-#: commit-graph.c:1163
+#: commit-graph.c:1179
 #, c-format
 msgid "Finding commits for commit graph in %d pack"
 msgid_plural "Finding commits for commit graph in %d packs"
 msgstr[0] "Encontrando commits para commit graph en %d pack"
 msgstr[1] "Encontrando commits para commit graph en %d packs"
 
-#: commit-graph.c:1176
+#: commit-graph.c:1192
 #, c-format
 msgid "error adding pack %s"
 msgstr "error agregando pack %s"
 
-#: commit-graph.c:1180
+#: commit-graph.c:1196
 #, c-format
 msgid "error opening index for %s"
 msgstr "error abriendo index para %s"
 
-#: commit-graph.c:1204
+#: commit-graph.c:1220
 #, c-format
 msgid "Finding commits for commit graph from %d ref"
 msgid_plural "Finding commits for commit graph from %d refs"
 msgstr[0] "Encontrando commits para commit graph de %d ref"
 msgstr[1] "Encontrando commits para commit graph de %d refs"
 
-#: commit-graph.c:1238
+#: commit-graph.c:1240
+#, c-format
+msgid "invalid commit object id: %s"
+msgstr "id de objeto commit: %s inválido"
+
+#: commit-graph.c:1255
 msgid "Finding commits for commit graph among packed objects"
 msgstr "Encontrando commits para commit graph entre los objetos empaquetados"
 
-#: commit-graph.c:1253
+#: commit-graph.c:1270
 msgid "Counting distinct commits in commit graph"
 msgstr "Contando commits distintos en commit graph"
 
-#: commit-graph.c:1284
+#: commit-graph.c:1300
 msgid "Finding extra edges in commit graph"
 msgstr "Encontrando esquinas extra en commit graph"
 
-#: commit-graph.c:1332
+#: commit-graph.c:1346
 msgid "failed to write correct number of base graph ids"
 msgstr "falló al escribir el número correcto de ids de base graph"
 
-#: commit-graph.c:1365 midx.c:811
+#: commit-graph.c:1379 midx.c:810
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "no se pudo crear directorios principales para %s"
 
-#: commit-graph.c:1377 builtin/index-pack.c:306 builtin/repack.c:240
+#: commit-graph.c:1391 builtin/index-pack.c:306 builtin/repack.c:241
 #, c-format
 msgid "unable to create '%s'"
 msgstr "no se puede crear '%s'"
 
-#: commit-graph.c:1437
+#: commit-graph.c:1451
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "Escribiendo commit graph en %d paso"
 msgstr[1] "Escribiendo commit graph en %d pasos"
 
-#: commit-graph.c:1478
+#: commit-graph.c:1492
 msgid "unable to open commit-graph chain file"
 msgstr "no se pudo abrir la cadena de archivos commit-graph"
 
-#: commit-graph.c:1490
+#: commit-graph.c:1504
 msgid "failed to rename base commit-graph file"
 msgstr "no se pudo renombrar el archivo base commit-graph"
 
-#: commit-graph.c:1510
+#: commit-graph.c:1524
 msgid "failed to rename temporary commit-graph file"
 msgstr "falló al renombrar el archivo temporal commit-graph"
 
-#: commit-graph.c:1621
+#: commit-graph.c:1635
 msgid "Scanning merged commits"
 msgstr "Escaneando commits fusionados"
 
-#: commit-graph.c:1632
+#: commit-graph.c:1646
 #, c-format
 msgid "unexpected duplicate commit id %s"
 msgstr "id de commit duplicado inesperado %s"
 
-#: commit-graph.c:1657
+#: commit-graph.c:1670
 msgid "Merging commit-graph"
 msgstr "Fusionando commit-graph"
 
-#: commit-graph.c:1844
+#: commit-graph.c:1860
 #, c-format
 msgid "the commit graph format cannot write %d commits"
 msgstr "el formato de gráficos de commit no pudede escribir %d commits"
 
-#: commit-graph.c:1855
+#: commit-graph.c:1871
 msgid "too many commits to write graph"
 msgstr "demasiados commits para escribir el gráfico"
 
-#: commit-graph.c:1945
+#: commit-graph.c:1961
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 "el archivo de commit-graph tiene checksums incorrectos y probablemente está "
 "corrupto"
 
-#: commit-graph.c:1955
+#: commit-graph.c:1971
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "commit-graph tiene un orden de OID incorrecto: %s luego %s"
 
-#: commit-graph.c:1965 commit-graph.c:1980
+#: commit-graph.c:1981 commit-graph.c:1996
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr "commit-graph tiene un valor fanout incorrecto: fanout[%d] = %u != %u"
 
-#: commit-graph.c:1972
+#: commit-graph.c:1988
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "falló al analizar commit %s para commit-graph"
 
-#: commit-graph.c:1989
+#: commit-graph.c:2006
 msgid "Verifying commits in commit graph"
 msgstr "Verificando commits en commit graph"
 
-#: commit-graph.c:2002
+#: commit-graph.c:2020
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 "falló al analizar el commit %s de la base de datos de objetos para commit-"
 "graph"
 
-#: commit-graph.c:2009
+#: commit-graph.c:2027
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr "árbol raíz OID para commit %s en commit-graph es %s != %s"
 
-#: commit-graph.c:2019
+#: commit-graph.c:2037
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr "lista padre de commit-graph para commit %s es muy larga"
 
-#: commit-graph.c:2028
+#: commit-graph.c:2046
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "padre de commit-graph para %s es %s != %s"
 
-#: commit-graph.c:2041
+#: commit-graph.c:2059
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr "lista padre de commit-graph para commit %s termina antes"
 
-#: commit-graph.c:2046
+#: commit-graph.c:2064
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
 msgstr ""
 "commit-graph ha generado número cero para %s, pero no-cero para los demás"
 
-#: commit-graph.c:2050
+#: commit-graph.c:2068
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
 msgstr ""
 "commit-graph tiene generación no-cero para %s, pero cero para los demás"
 
-#: commit-graph.c:2065
+#: commit-graph.c:2083
 #, c-format
 msgid "commit-graph generation for commit %s is %u != %u"
 msgstr "generación commit-graph para commit %s es %u != %u"
 
-#: commit-graph.c:2071
+#: commit-graph.c:2089
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
@@ -1723,7 +1739,7 @@
 msgid "key does not contain variable name: %s"
 msgstr "llave no contiene el nombre de variable: %s"
 
-#: config.c:406 sequencer.c:2463
+#: config.c:406 sequencer.c:2401
 #, c-format
 msgid "invalid key: %s"
 msgstr "llave inválida: %s"
@@ -1847,152 +1863,145 @@
 msgid "invalid mode for object creation: %s"
 msgstr "modo inválido de creación de objetos: %s"
 
-#: config.c:1430
+#: config.c:1425
 #, c-format
 msgid "malformed value for %s"
 msgstr "valor malformado para %s"
 
-#: config.c:1456
+#: config.c:1451
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "valor malformado para %s: %s"
 
-#: config.c:1457
+#: config.c:1452
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr "debe ser uno de nothing, matching, simple, upstream o current"
 
-#: config.c:1518 builtin/pack-objects.c:3410
+#: config.c:1513 builtin/pack-objects.c:3394
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "nivel de compresión de pack erróneo %d"
 
-#: config.c:1639
+#: config.c:1634
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "incapaz de cargar configuración de objeto blob '%s'"
 
-#: config.c:1642
+#: config.c:1637
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "referencia '%s' no apunta a un blob"
 
-#: config.c:1659
+#: config.c:1654
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "no se posible resolver configuración de blob '%s'"
 
-#: config.c:1689
+#: config.c:1684
 #, c-format
 msgid "failed to parse %s"
 msgstr "no se pudo analizar %s"
 
-#: config.c:1745
+#: config.c:1740
 msgid "unable to parse command-line config"
 msgstr "no es posible analizar la configuración de la línea de comando"
 
-#: config.c:2094
+#: config.c:2091
 msgid "unknown error occurred while reading the configuration files"
 msgstr ""
 "error desconocido ocurrió mientras se leían los archivos de configuración"
 
-#: config.c:2264
+#: config.c:2261
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "Inválido %s: '%s'"
 
-#: config.c:2307
-#, c-format
-msgid "unknown core.untrackedCache value '%s'; using 'keep' default value"
-msgstr ""
-"valor core.untrackedCache '%s' desconocido; usando 'keep' como valor por "
-"defecto"
-
-#: config.c:2333
+#: config.c:2306
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr "valor splitIndex.maxPercentChange '%d' debe estar entre 0 y 100"
 
-#: config.c:2379
+#: config.c:2352
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "no es posible analizar '%s' de la configuración de la línea de comando"
 
-#: config.c:2381
+#: config.c:2354
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "mala variable de config '%s' en el archivo '%s' en la línea %d"
 
-#: config.c:2462
+#: config.c:2435
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "nombre de sección inválido '%s'"
 
-#: config.c:2494
+#: config.c:2467
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s tiene múltiples valores"
 
-#: config.c:2523
+#: config.c:2496
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "falló al escribir nuevo archivo de configuración %s"
 
-#: config.c:2775 config.c:3099
+#: config.c:2748 config.c:3072
 #, c-format
 msgid "could not lock config file %s"
 msgstr "no se pudo bloquear archivo de configuración %s"
 
-#: config.c:2786
+#: config.c:2759
 #, c-format
 msgid "opening %s"
 msgstr "abriendo %s"
 
-#: config.c:2821 builtin/config.c:328
+#: config.c:2794 builtin/config.c:328
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "patrón inválido: %s"
 
-#: config.c:2846
+#: config.c:2819
 #, c-format
 msgid "invalid config file %s"
 msgstr "archivo de configuración inválido: %s"
 
-#: config.c:2859 config.c:3112
+#: config.c:2832 config.c:3085
 #, c-format
 msgid "fstat on %s failed"
 msgstr "fstat en %s falló"
 
-#: config.c:2870
+#: config.c:2843
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr "no es posible hacer mmap '%s'"
 
-#: config.c:2879 config.c:3117
+#: config.c:2852 config.c:3090
 #, c-format
 msgid "chmod on %s failed"
 msgstr "chmod en %s falló"
 
-#: config.c:2964 config.c:3214
+#: config.c:2937 config.c:3187
 #, c-format
 msgid "could not write config file %s"
 msgstr "no se pudo escribir el archivo de configuración %s"
 
-#: config.c:2998
+#: config.c:2971
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "no se pudo configurar '%s' a '%s'"
 
-#: config.c:3000 builtin/remote.c:782
+#: config.c:2973 builtin/remote.c:782
 #, c-format
 msgid "could not unset '%s'"
 msgstr "no se pudo desactivar '%s'"
 
-#: config.c:3090
+#: config.c:3063
 #, c-format
 msgid "invalid section name: %s"
 msgstr "sección de nombre inválida: %s"
 
-#: config.c:3257
+#: config.c:3230
 #, c-format
 msgid "missing value for '%s'"
 msgstr "valor faltante para '%s'"
@@ -2116,7 +2125,7 @@
 msgid "unknown port %s"
 msgstr "puerto desconocido %s"
 
-#: connect.c:845 connect.c:1171
+#: connect.c:845 connect.c:1175
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr "hostname extraño '%s' bloqueado"
@@ -2131,59 +2140,59 @@
 msgid "cannot start proxy %s"
 msgstr "no se puede comenzar proxy %s"
 
-#: connect.c:924
+#: connect.c:928
 msgid "no path specified; see 'git help pull' for valid url syntax"
 msgstr ""
 "no hay ruta especificada; vea 'git help pull' para sintaxis de url válidas"
 
-#: connect.c:1119
+#: connect.c:1123
 msgid "ssh variant 'simple' does not support -4"
 msgstr "variante 'simple' de ssh no soporta -4"
 
-#: connect.c:1131
+#: connect.c:1135
 msgid "ssh variant 'simple' does not support -6"
 msgstr "variante 'simple' de ssh no soporta -6"
 
-#: connect.c:1148
+#: connect.c:1152
 msgid "ssh variant 'simple' does not support setting port"
 msgstr "variante ssh 'simple' no soporta configurar puerto"
 
-#: connect.c:1260
+#: connect.c:1264
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr "ruta extraña '%s' bloqueada"
 
-#: connect.c:1307
+#: connect.c:1311
 msgid "unable to fork"
 msgstr "no es posible hacer fork"
 
-#: connected.c:86 builtin/fsck.c:221 builtin/prune.c:43
+#: connected.c:88 builtin/fsck.c:221 builtin/prune.c:43
 msgid "Checking connectivity"
 msgstr "Verificando conectividad"
 
-#: connected.c:98
+#: connected.c:100
 msgid "Could not run 'git rev-list'"
 msgstr "No se pudo correr 'git rev-list'"
 
-#: connected.c:118
+#: connected.c:120
 msgid "failed write to rev-list"
 msgstr "falló escribir a rev-list"
 
-#: connected.c:125
+#: connected.c:127
 msgid "failed to close rev-list's stdin"
 msgstr "falló al cerrar la entrada standard de rev-list"
 
-#: convert.c:193
+#: convert.c:194
 #, c-format
 msgid "illegal crlf_action %d"
 msgstr "crlf_action %d ilegal"
 
-#: convert.c:206
+#: convert.c:207
 #, c-format
 msgid "CRLF would be replaced by LF in %s"
 msgstr "CRLF será reemplazado por LF en %s"
 
-#: convert.c:208
+#: convert.c:209
 #, c-format
 msgid ""
 "CRLF will be replaced by LF in %s.\n"
@@ -2192,12 +2201,12 @@
 "CRLF será remplazado por LF en %s.\n"
 "El archivo tendrá sus finales de línea originales en tu directorio de trabajo"
 
-#: convert.c:216
+#: convert.c:217
 #, c-format
 msgid "LF would be replaced by CRLF in %s"
 msgstr "LF será reemplazado por CRLF en %s"
 
-#: convert.c:218
+#: convert.c:219
 #, c-format
 msgid ""
 "LF will be replaced by CRLF in %s.\n"
@@ -2206,12 +2215,12 @@
 "LF será reemplazado por CRLF en %s.\n"
 "El archivo tendrá sus finales de línea originales en tu directorio de trabajo"
 
-#: convert.c:279
+#: convert.c:280
 #, c-format
 msgid "BOM is prohibited in '%s' if encoded as %s"
 msgstr "BOM está prohibido en '%s' si es codificado como %s"
 
-#: convert.c:286
+#: convert.c:287
 #, c-format
 msgid ""
 "The file '%s' contains a byte order mark (BOM). Please use UTF-%s as working-"
@@ -2220,12 +2229,12 @@
 "El archivo '%s' contiene una marca de byte (BOM). Por favor usa UTF-%s como "
 "working-tree-encoding."
 
-#: convert.c:304
+#: convert.c:305
 #, c-format
 msgid "BOM is required in '%s' if encoded as %s"
 msgstr "BOM es requerido en '%s' si es codificado como %s"
 
-#: convert.c:306
+#: convert.c:307
 #, c-format
 msgid ""
 "The file '%s' is missing a byte order mark (BOM). Please use UTF-%sBE or UTF-"
@@ -2234,50 +2243,50 @@
 "Al archivo '%s' le falta una marca de byte (BOM). Por favor usa UTF-%sBE o "
 "UTF-%sLE (dependiendo en el orden de byte) como working-tree-encoding."
 
-#: convert.c:424 convert.c:495
+#: convert.c:425 convert.c:496
 #, c-format
 msgid "failed to encode '%s' from %s to %s"
 msgstr "falló al codificar '%s' de %s a %s"
 
-#: convert.c:467
+#: convert.c:468
 #, c-format
 msgid "encoding '%s' from %s to %s and back is not the same"
 msgstr "codificación '%s' de %s a %s y de vuelta no son iguales"
 
-#: convert.c:673
+#: convert.c:674
 #, c-format
 msgid "cannot fork to run external filter '%s'"
 msgstr "no se puede hacer fork para ejecutar filtros externos '%s'"
 
-#: convert.c:693
+#: convert.c:694
 #, c-format
 msgid "cannot feed the input to external filter '%s'"
 msgstr "no se pueden alimentar de input a los filtros externos '%s'"
 
-#: convert.c:700
+#: convert.c:701
 #, c-format
 msgid "external filter '%s' failed %d"
 msgstr "filtro externo '%s' falló %d"
 
-#: convert.c:735 convert.c:738
+#: convert.c:736 convert.c:739
 #, c-format
 msgid "read from external filter '%s' failed"
 msgstr "lectura de filtro externo '%s' falló"
 
-#: convert.c:741 convert.c:796
+#: convert.c:742 convert.c:797
 #, c-format
 msgid "external filter '%s' failed"
 msgstr "filtro externo '%s' falló"
 
-#: convert.c:844
+#: convert.c:845
 msgid "unexpected filter type"
 msgstr "tipo de filtro inesperado"
 
-#: convert.c:855
+#: convert.c:856
 msgid "path name too long for external filter"
 msgstr "nombre de ruta muy largo para filtro externo"
 
-#: convert.c:929
+#: convert.c:930
 #, c-format
 msgid ""
 "external filter '%s' is not available anymore although not all paths have "
@@ -2286,67 +2295,67 @@
 "filtro externo '%s' ya no está disponible aunque no todas las rutas han sido "
 "filtradas"
 
-#: convert.c:1228
+#: convert.c:1229
 msgid "true/false are no valid working-tree-encodings"
 msgstr "true/false no son working-tree-encodings válidos"
 
-#: convert.c:1398 convert.c:1432
+#: convert.c:1417 convert.c:1451
 #, c-format
 msgid "%s: clean filter '%s' failed"
 msgstr "%s: falló al limpiar filtro '%s'"
 
-#: convert.c:1476
+#: convert.c:1495
 #, c-format
 msgid "%s: smudge filter %s failed"
 msgstr "%s: filtro smudge %s falló"
 
-#: date.c:137
+#: date.c:138
 msgid "in the future"
 msgstr "en el futuro"
 
-#: date.c:143
+#: date.c:144
 #, c-format
 msgid "%<PRIuMAX> second ago"
 msgid_plural "%<PRIuMAX> seconds ago"
 msgstr[0] "hace %<PRIuMAX> segundo"
 msgstr[1] "hace %<PRIuMAX> segundos"
 
-#: date.c:150
+#: date.c:151
 #, c-format
 msgid "%<PRIuMAX> minute ago"
 msgid_plural "%<PRIuMAX> minutes ago"
 msgstr[0] "hace %<PRIuMAX> minuto"
 msgstr[1] "hace %<PRIuMAX> minutos"
 
-#: date.c:157
+#: date.c:158
 #, c-format
 msgid "%<PRIuMAX> hour ago"
 msgid_plural "%<PRIuMAX> hours ago"
 msgstr[0] "hace %<PRIuMAX> hora"
 msgstr[1] "hace %<PRIuMAX> horas"
 
-#: date.c:164
+#: date.c:165
 #, c-format
 msgid "%<PRIuMAX> day ago"
 msgid_plural "%<PRIuMAX> days ago"
 msgstr[0] "hace %<PRIuMAX> día"
 msgstr[1] "hace %<PRIuMAX> días"
 
-#: date.c:170
+#: date.c:171
 #, c-format
 msgid "%<PRIuMAX> week ago"
 msgid_plural "%<PRIuMAX> weeks ago"
 msgstr[0] "hace %<PRIuMAX> semana"
 msgstr[1] "hace %<PRIuMAX> semanas"
 
-#: date.c:177
+#: date.c:178
 #, c-format
 msgid "%<PRIuMAX> month ago"
 msgid_plural "%<PRIuMAX> months ago"
 msgstr[0] "hace %<PRIuMAX> mes"
 msgstr[1] "hace %<PRIuMAX> meses"
 
-#: date.c:188
+#: date.c:189
 #, c-format
 msgid "%<PRIuMAX> year"
 msgid_plural "%<PRIuMAX> years"
@@ -2354,14 +2363,14 @@
 msgstr[1] "%<PRIuMAX> años"
 
 #. TRANSLATORS: "%s" is "<n> years"
-#: date.c:191
+#: date.c:192
 #, c-format
 msgid "%s, %<PRIuMAX> month ago"
 msgid_plural "%s, %<PRIuMAX> months ago"
 msgstr[0] "%s, y %<PRIuMAX> mes atrás"
 msgstr[1] "%s, y %<PRIuMAX> meses atrás"
 
-#: date.c:196 date.c:201
+#: date.c:197 date.c:202
 #, c-format
 msgid "%<PRIuMAX> year ago"
 msgid_plural "%<PRIuMAX> years ago"
@@ -2397,7 +2406,7 @@
 msgid "failed to read orderfile '%s'"
 msgstr "falló al leer orden de archivos '%s'"
 
-#: diffcore-rename.c:544
+#: diffcore-rename.c:543
 msgid "Performing inexact rename detection"
 msgstr "Realizando una detección de cambios de nombre inexacta"
 
@@ -2464,35 +2473,35 @@
 "Errores en la variable de config 'diff.dirstat' encontrados:\n"
 "%s"
 
-#: diff.c:4215
+#: diff.c:4218
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "diff externo murió, deteniendo en %s"
 
-#: diff.c:4560
+#: diff.c:4563
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr "--name-only, --name-status, --check y -s son mutuamente exclusivas"
 
-#: diff.c:4563
+#: diff.c:4566
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "-G, -S y --find-object son mutuamente exclusivas"
 
-#: diff.c:4641
+#: diff.c:4644
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow requiere exactamente un pathspec"
 
-#: diff.c:4689
+#: diff.c:4692
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "valor --stat inválido: %s"
 
-#: diff.c:4694 diff.c:4699 diff.c:4704 diff.c:4709 diff.c:5222
+#: diff.c:4697 diff.c:4702 diff.c:4707 diff.c:4712 diff.c:5225
 #: parse-options.c:199 parse-options.c:203
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s espera un valor numérico"
 
-#: diff.c:4726
+#: diff.c:4729
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -2501,42 +2510,42 @@
 "Falló al analizar parámetro de opción --dirstat/-X:\n"
 "%s"
 
-#: diff.c:4811
+#: diff.c:4814
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "cambio de clase desconocido '%c' en --diff-filter=%s"
 
-#: diff.c:4835
+#: diff.c:4838
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "valor desconocido luego de ws-error-highlight=%.*s"
 
-#: diff.c:4849
+#: diff.c:4852
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "no se puede resolver '%s'"
 
-#: diff.c:4899 diff.c:4905
+#: diff.c:4902 diff.c:4908
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s espera forma <n>/<m>"
 
-#: diff.c:4917
+#: diff.c:4920
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s esperaba un char, se obtuvo '%s'"
 
-#: diff.c:4938
+#: diff.c:4941
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "mal argumento --color-moved: %s"
 
-#: diff.c:4957
+#: diff.c:4960
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "modo inválido '%s' en --color-moved-ws"
 
-#: diff.c:4997
+#: diff.c:5000
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
@@ -2544,154 +2553,154 @@
 "opción diff-algorithm acepta \"myers\", \"minimal\", \"patience\" e "
 "\"histogram\""
 
-#: diff.c:5033 diff.c:5053
+#: diff.c:5036 diff.c:5056
 #, c-format
 msgid "invalid argument to %s"
 msgstr "argumento inválido para %s"
 
-#: diff.c:5191
+#: diff.c:5194
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "falló al analizar parámetro de opción --submodule: '%s'"
 
-#: diff.c:5247
+#: diff.c:5250
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "mal argumento --word-diff: %s"
 
-#: diff.c:5270
+#: diff.c:5273
 msgid "Diff output format options"
 msgstr "Opciones de formato de salida para diff"
 
-#: diff.c:5272 diff.c:5278
+#: diff.c:5275 diff.c:5281
 msgid "generate patch"
 msgstr "generar parche"
 
-#: diff.c:5275 builtin/log.c:172
+#: diff.c:5278 builtin/log.c:172
 msgid "suppress diff output"
 msgstr "suprimir salida de diff"
 
-#: diff.c:5280 diff.c:5394 diff.c:5401
+#: diff.c:5283 diff.c:5397 diff.c:5404
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5281 diff.c:5284
+#: diff.c:5284 diff.c:5287
 msgid "generate diffs with <n> lines context"
 msgstr "genera diffs con <n> líneas de contexto"
 
-#: diff.c:5286
+#: diff.c:5289
 msgid "generate the diff in raw format"
 msgstr "genera el diff en formato raw"
 
-#: diff.c:5289
+#: diff.c:5292
 msgid "synonym for '-p --raw'"
 msgstr "sinónimo para '-p --stat'"
 
-#: diff.c:5293
+#: diff.c:5296
 msgid "synonym for '-p --stat'"
 msgstr "sinónimo para '-p --stat'"
 
-#: diff.c:5297
+#: diff.c:5300
 msgid "machine friendly --stat"
 msgstr "--stat amigable para máquina"
 
-#: diff.c:5300
+#: diff.c:5303
 msgid "output only the last line of --stat"
 msgstr "mostrar solo la última línea para --stat"
 
-#: diff.c:5302 diff.c:5310
+#: diff.c:5305 diff.c:5313
 msgid "<param1,param2>..."
 msgstr "<param1,param2>..."
 
-#: diff.c:5303
+#: diff.c:5306
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr ""
 "muestra la distribución de cantidades de cambios relativa para cada "
 "subdirectorio"
 
-#: diff.c:5307
+#: diff.c:5310
 msgid "synonym for --dirstat=cumulative"
 msgstr "sinónimo para --dirstat=cumulative"
 
-#: diff.c:5311
+#: diff.c:5314
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "sinonimo para --dirstat=archivos,param1,param2..."
 
-#: diff.c:5315
+#: diff.c:5318
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 "advierte si cambios introducen conflictos de markers o errores de espacios "
 "en blanco"
 
-#: diff.c:5318
+#: diff.c:5321
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr ""
 "resumen condensado de creaciones, cambios de nombres y cambios de modos"
 
-#: diff.c:5321
+#: diff.c:5324
 msgid "show only names of changed files"
 msgstr "mostrar solo nombres de archivos cambiados"
 
-#: diff.c:5324
+#: diff.c:5327
 msgid "show only names and status of changed files"
 msgstr "mostrar solo nombres y estados de archivos cambiados"
 
-#: diff.c:5326
+#: diff.c:5329
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<ancho>[,<nombre-ancho>[,<cantidad>]]"
 
-#: diff.c:5327
+#: diff.c:5330
 msgid "generate diffstat"
 msgstr "generar diffstat"
 
-#: diff.c:5329 diff.c:5332 diff.c:5335
+#: diff.c:5332 diff.c:5335 diff.c:5338
 msgid "<width>"
 msgstr "<ancho>"
 
-#: diff.c:5330
+#: diff.c:5333
 msgid "generate diffstat with a given width"
 msgstr "genera diffstat con un ancho dado"
 
-#: diff.c:5333
+#: diff.c:5336
 msgid "generate diffstat with a given name width"
 msgstr "genera diffstat con un nombre de ancho dado"
 
-#: diff.c:5336
+#: diff.c:5339
 msgid "generate diffstat with a given graph width"
 msgstr "genera diffstat con un ancho de graph dado"
 
-#: diff.c:5338
+#: diff.c:5341
 msgid "<count>"
 msgstr "<cantidad>"
 
-#: diff.c:5339
+#: diff.c:5342
 msgid "generate diffstat with limited lines"
 msgstr "genera diffstat con líneas limitadas"
 
-#: diff.c:5342
+#: diff.c:5345
 msgid "generate compact summary in diffstat"
 msgstr "genera un resumen compacto de diffstat"
 
-#: diff.c:5345
+#: diff.c:5348
 msgid "output a binary diff that can be applied"
 msgstr "muestra un diff binario que puede ser aplicado"
 
-#: diff.c:5348
+#: diff.c:5351
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr ""
 "mostrar todo un pre- y post-image de nombres de objetos en las líneas \"index"
 "\""
 
-#: diff.c:5350
+#: diff.c:5353
 msgid "show colored diff"
 msgstr "mostrar diff colorido"
 
-#: diff.c:5351
+#: diff.c:5354
 msgid "<kind>"
 msgstr "<tipo>"
 
-#: diff.c:5352
+#: diff.c:5355
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
@@ -2699,7 +2708,7 @@
 "resaltar errores de espacios en blanco en las líneas 'context', 'old' o "
 "'new' del diff"
 
-#: diff.c:5355
+#: diff.c:5358
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -2707,89 +2716,89 @@
 "no consolidar los pathnames y usar NULs como terminadores de campos en --raw "
 "o --numstat"
 
-#: diff.c:5358 diff.c:5361 diff.c:5364 diff.c:5470
+#: diff.c:5361 diff.c:5364 diff.c:5367 diff.c:5473
 msgid "<prefix>"
 msgstr "<prefijo>"
 
-#: diff.c:5359
+#: diff.c:5362
 msgid "show the given source prefix instead of \"a/\""
 msgstr "mostrar el prefijo de fuente dado en lugar de \"a/\""
 
-#: diff.c:5362
+#: diff.c:5365
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "mostrar el prefijo de destino en lugar de \"b/\""
 
-#: diff.c:5365
+#: diff.c:5368
 msgid "prepend an additional prefix to every line of output"
 msgstr "anteponer un prefijo adicional a cada línea mostrada"
 
-#: diff.c:5368
+#: diff.c:5371
 msgid "do not show any source or destination prefix"
 msgstr "no mostrar ningún prefijo de fuente o destino"
 
-#: diff.c:5371
+#: diff.c:5374
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr ""
 "muestra el contexto entre hunks de diff hasta el número especificado de "
 "líneas"
 
-#: diff.c:5375 diff.c:5380 diff.c:5385
+#: diff.c:5378 diff.c:5383 diff.c:5388
 msgid "<char>"
 msgstr "<char>"
 
-#: diff.c:5376
+#: diff.c:5379
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "especifica el char para indicar una nueva línea en lugar de '+'"
 
-#: diff.c:5381
+#: diff.c:5384
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "especifica el char para indicar una línea vieja en lugar de '-'"
 
-#: diff.c:5386
+#: diff.c:5389
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "especifica el char para indicar un contexto en lugar de ' '"
 
-#: diff.c:5389
+#: diff.c:5392
 msgid "Diff rename options"
 msgstr "Opciones de diff rename"
 
-#: diff.c:5390
+#: diff.c:5393
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5391
+#: diff.c:5394
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr "descomponer los cambios de reescritura en pares de borrar y crear"
 
-#: diff.c:5395
+#: diff.c:5398
 msgid "detect renames"
 msgstr "detectar renombrados"
 
-#: diff.c:5399
+#: diff.c:5402
 msgid "omit the preimage for deletes"
 msgstr "omite la preimage para borrados"
 
-#: diff.c:5402
+#: diff.c:5405
 msgid "detect copies"
 msgstr "detectar copias"
 
-#: diff.c:5406
+#: diff.c:5409
 msgid "use unmodified files as source to find copies"
 msgstr "usa archivos no modificados como fuente para encontrar copias"
 
-#: diff.c:5408
+#: diff.c:5411
 msgid "disable rename detection"
 msgstr "deshabilita detección de renombres"
 
-#: diff.c:5411
+#: diff.c:5414
 msgid "use empty blobs as rename source"
 msgstr "usa blobs vacíos como fuente de renombre"
 
-#: diff.c:5413
+#: diff.c:5416
 msgid "continue listing the history of a file beyond renames"
 msgstr "continua listando el historial de un archivo más allá de renombres"
 
-#: diff.c:5416
+#: diff.c:5419
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
@@ -2797,155 +2806,155 @@
 "previene detección de renombre/copias si el número de objetivos para "
 "renombres/copias excede el límite dado"
 
-#: diff.c:5418
+#: diff.c:5421
 msgid "Diff algorithm options"
 msgstr "Opciones de algoritmos de diff"
 
-#: diff.c:5420
+#: diff.c:5423
 msgid "produce the smallest possible diff"
 msgstr "produce el diff más pequeño posible"
 
-#: diff.c:5423
+#: diff.c:5426
 msgid "ignore whitespace when comparing lines"
 msgstr "ignorar espacios en blanco cuando comparando líneas"
 
-#: diff.c:5426
+#: diff.c:5429
 msgid "ignore changes in amount of whitespace"
 msgstr "ignorar cambios en la cantidad de líneas en blanco"
 
-#: diff.c:5429
+#: diff.c:5432
 msgid "ignore changes in whitespace at EOL"
 msgstr "ignorar cambios en espacios en blanco en EOL"
 
-#: diff.c:5432
+#: diff.c:5435
 msgid "ignore carrier-return at the end of line"
 msgstr "ignora carrier-return al final de la línea"
 
-#: diff.c:5435
+#: diff.c:5438
 msgid "ignore changes whose lines are all blank"
 msgstr "ignora cambios cuyas líneas son todas en blanco"
 
-#: diff.c:5438
+#: diff.c:5441
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr "heurística para cambiar los límites de hunk para una fácil lectura"
 
-#: diff.c:5441
+#: diff.c:5444
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "genera un diff usando algoritmo \"patience diff\""
 
-#: diff.c:5445
+#: diff.c:5448
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "genera un diff usando algoritmo \"histogram diff\""
 
-#: diff.c:5447
+#: diff.c:5450
 msgid "<algorithm>"
 msgstr "<algoritmo>"
 
-#: diff.c:5448
+#: diff.c:5451
 msgid "choose a diff algorithm"
 msgstr "escoge un algoritmo para diff"
 
-#: diff.c:5450
+#: diff.c:5453
 msgid "<text>"
 msgstr "<texto>"
 
-#: diff.c:5451
+#: diff.c:5454
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "genera un diff usando algoritmo \"anchored diff\""
 
-#: diff.c:5453 diff.c:5462 diff.c:5465
+#: diff.c:5456 diff.c:5465 diff.c:5468
 msgid "<mode>"
 msgstr "<modo>"
 
-#: diff.c:5454
+#: diff.c:5457
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr ""
 "muestra diff por palabras usando <modo> para delimitar las palabras cambiadas"
 
-#: diff.c:5456 diff.c:5459 diff.c:5504
+#: diff.c:5459 diff.c:5462 diff.c:5507
 msgid "<regex>"
 msgstr "<regex>"
 
-#: diff.c:5457
+#: diff.c:5460
 msgid "use <regex> to decide what a word is"
 msgstr "usa <regex> para decidir que palabra es"
 
-#: diff.c:5460
+#: diff.c:5463
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "equivalente a --word-diff=color --word-diff-regex=<regex>"
 
-#: diff.c:5463
+#: diff.c:5466
 msgid "moved lines of code are colored differently"
 msgstr "líneas movidas de código están coloreadas diferente"
 
-#: diff.c:5466
+#: diff.c:5469
 msgid "how white spaces are ignored in --color-moved"
 msgstr "como espacios en blanco son ignorados en --color-moved"
 
-#: diff.c:5469
+#: diff.c:5472
 msgid "Other diff options"
 msgstr "Otras opciones de diff"
 
-#: diff.c:5471
+#: diff.c:5474
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 "cuando ejecutado desde un subdir, excluye cambios del exterior y muestra "
 "paths relativos"
 
-#: diff.c:5475
+#: diff.c:5478
 msgid "treat all files as text"
 msgstr "tratar todos los archivos como texto"
 
-#: diff.c:5477
+#: diff.c:5480
 msgid "swap two inputs, reverse the diff"
 msgstr "cambia dos inputs, invierte el diff"
 
-#: diff.c:5479
+#: diff.c:5482
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "termina con 1 si hubieron diferencias, de lo contrario con 0"
 
-#: diff.c:5481
+#: diff.c:5484
 msgid "disable all output of the program"
 msgstr "deshabilita todo el output del programa"
 
-#: diff.c:5483
+#: diff.c:5486
 msgid "allow an external diff helper to be executed"
 msgstr "permite la ejecución de un diff helper externo"
 
-#: diff.c:5485
+#: diff.c:5488
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 "ejecuta filtros de conversión de texto externos cuando comparando binarios"
 
-#: diff.c:5487
+#: diff.c:5490
 msgid "<when>"
 msgstr "<cuando>"
 
-#: diff.c:5488
+#: diff.c:5491
 msgid "ignore changes to submodules in the diff generation"
 msgstr "ignorar cambios a submódulos en la generación de diff"
 
-#: diff.c:5491
+#: diff.c:5494
 msgid "<format>"
 msgstr "<formato>"
 
-#: diff.c:5492
+#: diff.c:5495
 msgid "specify how differences in submodules are shown"
 msgstr "especifica como son mostradas las diferencias en submódulos"
 
-#: diff.c:5496
+#: diff.c:5499
 msgid "hide 'git add -N' entries from the index"
 msgstr "ocultar entradas 'git add -N' del index"
 
-#: diff.c:5499
+#: diff.c:5502
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "trata entradas 'git add -N' como reales en el index"
 
-#: diff.c:5501
+#: diff.c:5504
 msgid "<string>"
 msgstr "<string>"
 
-#: diff.c:5502
+#: diff.c:5505
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
@@ -2953,7 +2962,7 @@
 "busca por diferencias que cambien el número de ocurrencias para el string "
 "especificado"
 
-#: diff.c:5505
+#: diff.c:5508
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
@@ -2961,23 +2970,23 @@
 "busca por diferencias que cambien el número de ocurrencias para el regex "
 "especificado"
 
-#: diff.c:5508
+#: diff.c:5511
 msgid "show all changes in the changeset with -S or -G"
 msgstr "mostrar todos los cambios en el changeset con -S o -G"
 
-#: diff.c:5511
+#: diff.c:5514
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "tratar <string> en -S como una expresión regular extendida de POSIX"
 
-#: diff.c:5514
+#: diff.c:5517
 msgid "control the order in which files appear in the output"
 msgstr "controlar el orden en el que los archivos aparecen en la salida"
 
-#: diff.c:5515
+#: diff.c:5518
 msgid "<object-id>"
 msgstr "<id-objeto>"
 
-#: diff.c:5516
+#: diff.c:5519
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
@@ -2985,33 +2994,33 @@
 "busca por diferencias que cambien el número de ocurrencias para el objeto "
 "especificado"
 
-#: diff.c:5518
+#: diff.c:5521
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5519
+#: diff.c:5522
 msgid "select files by diff type"
 msgstr "selecciona archivos por tipo de diff"
 
-#: diff.c:5521
+#: diff.c:5524
 msgid "<file>"
 msgstr "<archivo>"
 
-#: diff.c:5522
+#: diff.c:5525
 msgid "Output to a specific file"
 msgstr "Output a un archivo específico"
 
-#: diff.c:6177
+#: diff.c:6180
 msgid "inexact rename detection was skipped due to too many files."
 msgstr ""
 "detección de cambio de nombre inexacta fue saltada por haber muchos archivos."
 
-#: diff.c:6180
+#: diff.c:6183
 msgid "only found copies from modified paths due to too many files."
 msgstr ""
 "solo se encontraron copias de rutas modificadas por haber muchos archivos."
 
-#: diff.c:6183
+#: diff.c:6186
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -3019,41 +3028,41 @@
 "tal vez quieras configurar la variable %s para por lo menos %d y volver a "
 "intentar el comando."
 
-#: dir.c:537
+#: dir.c:549
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
 msgstr ""
 "ruta especificada '%s' no concordó con ningún archivo(s) conocido por git"
 
-#: dir.c:926
+#: dir.c:938
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr "no se puede usar %s como archivo de exclusión"
 
-#: dir.c:1843
+#: dir.c:1877
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "no se pudo abrir el directorio '%s'"
 
-#: dir.c:2085
+#: dir.c:2128
 msgid "failed to get kernel name and information"
 msgstr "falló al conseguir la información y nombre del kernel"
 
-#: dir.c:2209
+#: dir.c:2252
 msgid "untracked cache is disabled on this system or location"
 msgstr "untracked cache está desactivado en este sistema o ubicación"
 
-#: dir.c:3013
+#: dir.c:3056
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "archivo índice corrompido en repositorio %s"
 
-#: dir.c:3058 dir.c:3063
+#: dir.c:3101 dir.c:3106
 #, c-format
 msgid "could not create directories for %s"
 msgstr "no se pudo crear directorios para %s"
 
-#: dir.c:3092
+#: dir.c:3135
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "no se pudo migrar el directorio git de '%s' a '%s'"
@@ -3072,12 +3081,12 @@
 msgid "could not stat file '%s'"
 msgstr "no se pudo establecer el archivo '%s'"
 
-#: environment.c:150
+#: environment.c:148
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "ruta de namespace de git mala \"%s\""
 
-#: environment.c:332
+#: environment.c:330
 #, c-format
 msgid "could not set GIT_DIR to '%s'"
 msgstr "no se pudo configurar GIT_DIR a '%s'"
@@ -3087,159 +3096,155 @@
 msgid "too many args to run %s"
 msgstr "demasiados argumentos para correr %s"
 
-#: fetch-object.c:17
-msgid "Remote with no URL"
-msgstr "Remoto sin URL"
-
-#: fetch-pack.c:151
+#: fetch-pack.c:150
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack: lista poco profunda esperada"
 
-#: fetch-pack.c:154
+#: fetch-pack.c:153
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr ""
 "git fetch-pack: se esperaba un flush packet luego de la lista superficial"
 
-#: fetch-pack.c:165
+#: fetch-pack.c:164
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr "git fetch-pack: se esperaba ACK/NAK, se obtuvo un flush packet"
 
-#: fetch-pack.c:185
+#: fetch-pack.c:184
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr "git fetch-pack: se esperaba ACK/NAK, se obtuvo '%s'"
 
-#: fetch-pack.c:196
+#: fetch-pack.c:195
 msgid "unable to write to remote"
 msgstr "no se puede escribir al remoto"
 
-#: fetch-pack.c:258
+#: fetch-pack.c:257
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "--stateless-rpc requiere multi_ack_detailed"
 
-#: fetch-pack.c:360 fetch-pack.c:1284
+#: fetch-pack.c:356 fetch-pack.c:1280
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "línea poco profunda inválida: %s"
 
-#: fetch-pack.c:366 fetch-pack.c:1290
+#: fetch-pack.c:362 fetch-pack.c:1286
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "línea superficial inválida: %s"
 
-#: fetch-pack.c:368 fetch-pack.c:1292
+#: fetch-pack.c:364 fetch-pack.c:1288
 #, c-format
 msgid "object not found: %s"
 msgstr "objeto no encontrado: %s"
 
-#: fetch-pack.c:371 fetch-pack.c:1295
+#: fetch-pack.c:367 fetch-pack.c:1291
 #, c-format
 msgid "error in object: %s"
 msgstr "error en objeto: %s"
 
-#: fetch-pack.c:373 fetch-pack.c:1297
+#: fetch-pack.c:369 fetch-pack.c:1293
 #, c-format
 msgid "no shallow found: %s"
 msgstr "superficie no encontrada: %s"
 
-#: fetch-pack.c:376 fetch-pack.c:1301
+#: fetch-pack.c:372 fetch-pack.c:1297
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "se esperaba shallow/unshallow, se obtuvo %s"
 
-#: fetch-pack.c:417
+#: fetch-pack.c:414
 #, c-format
 msgid "got %s %d %s"
 msgstr "se obtuvo %s %d %s"
 
-#: fetch-pack.c:434
+#: fetch-pack.c:431
 #, c-format
 msgid "invalid commit %s"
 msgstr "commit inválido %s"
 
-#: fetch-pack.c:465
+#: fetch-pack.c:462
 msgid "giving up"
 msgstr "rindiéndose"
 
-#: fetch-pack.c:477 progress.c:277
+#: fetch-pack.c:475 progress.c:312
 msgid "done"
 msgstr "listo"
 
-#: fetch-pack.c:489
+#: fetch-pack.c:487
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "se obtuvo %s (%d) %s"
 
-#: fetch-pack.c:535
+#: fetch-pack.c:533
 #, c-format
 msgid "Marking %s as complete"
 msgstr "Marcando %s como completa"
 
-#: fetch-pack.c:744
+#: fetch-pack.c:742
 #, c-format
 msgid "already have %s (%s)"
 msgstr "ya se tiene %s (%s)"
 
-#: fetch-pack.c:783
+#: fetch-pack.c:781
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack: no se puede extraer un demultiplexor de banda lateral"
 
-#: fetch-pack.c:791
+#: fetch-pack.c:789
 msgid "protocol error: bad pack header"
 msgstr "error de protocolo: paquete de header erróneo"
 
-#: fetch-pack.c:859
+#: fetch-pack.c:857
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack: no se puede quitar %s"
 
-#: fetch-pack.c:875
+#: fetch-pack.c:873
 #, c-format
 msgid "%s failed"
 msgstr "%s falló"
 
-#: fetch-pack.c:877
+#: fetch-pack.c:875
 msgid "error in sideband demultiplexer"
 msgstr "error en demultiplexor de banda lateral"
 
-#: fetch-pack.c:908
+#: fetch-pack.c:907
 #, c-format
 msgid "Server version is %.*s"
 msgstr "Versión de servidor es %.*s"
 
-#: fetch-pack.c:913 fetch-pack.c:919 fetch-pack.c:922 fetch-pack.c:928
-#: fetch-pack.c:932 fetch-pack.c:936 fetch-pack.c:940 fetch-pack.c:944
-#: fetch-pack.c:948 fetch-pack.c:952 fetch-pack.c:956 fetch-pack.c:960
-#: fetch-pack.c:966 fetch-pack.c:972 fetch-pack.c:977 fetch-pack.c:982
+#: fetch-pack.c:912 fetch-pack.c:918 fetch-pack.c:921 fetch-pack.c:927
+#: fetch-pack.c:931 fetch-pack.c:935 fetch-pack.c:939 fetch-pack.c:943
+#: fetch-pack.c:947 fetch-pack.c:951 fetch-pack.c:955 fetch-pack.c:959
+#: fetch-pack.c:965 fetch-pack.c:971 fetch-pack.c:976 fetch-pack.c:981
 #, c-format
 msgid "Server supports %s"
 msgstr "El servidor soporta %s"
 
-#: fetch-pack.c:915
+#: fetch-pack.c:914
 msgid "Server does not support shallow clients"
 msgstr "El servidor no soporta clientes superficiales"
 
-#: fetch-pack.c:975
+#: fetch-pack.c:974
 msgid "Server does not support --shallow-since"
 msgstr "El servidor no soporta --shalow-since"
 
-#: fetch-pack.c:980
+#: fetch-pack.c:979
 msgid "Server does not support --shallow-exclude"
 msgstr "El servidor no soporta --shalow-exclude"
 
-#: fetch-pack.c:984
+#: fetch-pack.c:983
 msgid "Server does not support --deepen"
 msgstr "El servidor no soporta --deepen"
 
-#: fetch-pack.c:1001
+#: fetch-pack.c:1000
 msgid "no common commits"
 msgstr "no hay commits comunes"
 
-#: fetch-pack.c:1013 fetch-pack.c:1462
+#: fetch-pack.c:1012 fetch-pack.c:1468
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: fetch falló."
 
-#: fetch-pack.c:1151
+#: fetch-pack.c:1150
 msgid "Server does not support shallow requests"
 msgstr "El servidor no soporta peticiones superficiales"
 
@@ -3247,72 +3252,72 @@
 msgid "Server supports filter"
 msgstr "El servidor soporta filtro"
 
-#: fetch-pack.c:1184
+#: fetch-pack.c:1180
 msgid "unable to write request to remote"
 msgstr "no se puede escribir request al remoto"
 
-#: fetch-pack.c:1202
+#: fetch-pack.c:1198
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "error leyendo sección header '%s'"
 
-#: fetch-pack.c:1208
+#: fetch-pack.c:1204
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "se esperaba '%s', se recibió '%s'"
 
-#: fetch-pack.c:1247
+#: fetch-pack.c:1243
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "línea de confirmación inesperada: '%s'"
 
-#: fetch-pack.c:1252
+#: fetch-pack.c:1248
 #, c-format
 msgid "error processing acks: %d"
 msgstr "error procesando acks: %d"
 
-#: fetch-pack.c:1262
+#: fetch-pack.c:1258
 msgid "expected packfile to be sent after 'ready'"
 msgstr "espere que el packfile sea mandado luego del 'listo'"
 
-#: fetch-pack.c:1264
+#: fetch-pack.c:1260
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr "espere que ninguna otra sección sea enviada luego del 'listo'"
 
-#: fetch-pack.c:1306
+#: fetch-pack.c:1302
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "error procesando información superficial: %d"
 
-#: fetch-pack.c:1353
+#: fetch-pack.c:1349
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "se esperaba wanted-ref, se obtuvo '%s'"
 
-#: fetch-pack.c:1358
+#: fetch-pack.c:1354
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "wanted-ref inesperado: '%s'"
 
-#: fetch-pack.c:1363
+#: fetch-pack.c:1359
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "error procesando refs deseadas: %d"
 
-#: fetch-pack.c:1689
+#: fetch-pack.c:1693
 msgid "no matching remote head"
 msgstr "no concuerda el head remoto"
 
-#: fetch-pack.c:1712 builtin/clone.c:686
+#: fetch-pack.c:1716 builtin/clone.c:685
 msgid "remote did not send all necessary objects"
 msgstr "remoto no mando todos los objetos necesarios"
 
-#: fetch-pack.c:1739
+#: fetch-pack.c:1743
 #, c-format
 msgid "no such remote ref %s"
 msgstr "no existe ref remota %s"
 
-#: fetch-pack.c:1742
+#: fetch-pack.c:1746
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "El servidor no permite solicitudes de objetos inadvertidos %s"
@@ -3335,18 +3340,26 @@
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr "ignora color inválido '%.*s' en log.graphColors"
 
-#: grep.c:2117
+#: grep.c:668
+msgid ""
+"given pattern contains NULL byte (via -f <file>). This is only supported "
+"with -P under PCRE v2"
+msgstr ""
+"el patrón provisto contiene bytes NULL (via -f <archivo>). Esto solo es "
+"soportado con -P bajo PCRE v2"
+
+#: grep.c:2124
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "'%s': no es posible leer %s"
 
-#: grep.c:2134 setup.c:164 builtin/clone.c:409 builtin/diff.c:82
+#: grep.c:2141 setup.c:165 builtin/clone.c:408 builtin/diff.c:82
 #: builtin/rm.c:135
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "falló al marcar '%s'"
 
-#: grep.c:2145
+#: grep.c:2152
 #, c-format
 msgid "'%s': short read"
 msgstr "'%s': lectura corta"
@@ -3444,7 +3457,7 @@
 "able to execute it. Maybe git-%s is broken?"
 msgstr ""
 "'%s' parece ser un comando de git, pero no hemos\n"
-"podido ejecutarlo. Tal vez git-%s se ha roto?"
+"podido ejecutarlo. ¿Tal vez git-%s se ha roto?"
 
 #: help.c:655
 msgid "Uh oh. Your system reports no Git commands at all."
@@ -3488,12 +3501,12 @@
 msgid "git version [<options>]"
 msgstr "git versión [<opciones>]"
 
-#: help.c:782
+#: help.c:783
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s: %s - %s"
 
-#: help.c:786
+#: help.c:787
 msgid ""
 "\n"
 "Did you mean this?"
@@ -3566,41 +3579,56 @@
 msgid "invalid date format: %s"
 msgstr "formato de fecha inválido: %s"
 
-#: list-objects.c:129
+#: list-objects.c:127
 #, c-format
 msgid "entry '%s' in tree %s has tree mode, but is not a tree"
 msgstr "entrada '%s' en árbol %s tiene modo árbol, pero no es uno"
 
-#: list-objects.c:142
+#: list-objects.c:140
 #, c-format
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr "entrada '%s' en árbol %s tiene modo blob, pero no es uno"
 
-#: list-objects.c:378
+#: list-objects.c:375
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "no se puede cargar árbol raíz para commit %s"
 
-#: list-objects-filter-options.c:36
-msgid "multiple filter-specs cannot be combined"
-msgstr "no se pueden combinar múltiples tipos de especificaciones de filtro"
+#: list-objects-filter.c:492
+#, c-format
+msgid "unable to access sparse blob in '%s'"
+msgstr "no es posible acceder al blob en '%s'"
+
+#: list-objects-filter.c:495
+#, c-format
+msgid "unable to parse sparse filter data in %s"
+msgstr "incapaz de analizar filtro de data en %s"
 
 #: list-objects-filter-options.c:58
 msgid "expected 'tree:<depth>'"
 msgstr "se esperaba 'tree:<depth>'"
 
-#: list-objects-filter-options.c:84
+#: list-objects-filter-options.c:73
 msgid "sparse:path filters support has been dropped"
 msgstr "soporte para filtros sparse:path ha sido discontinuado"
 
-#: list-objects-filter-options.c:94
+#: list-objects-filter-options.c:86
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "filtro -spec inválido '%s'"
 
-#: list-objects-filter-options.c:158
-msgid "cannot change partial clone promisor remote"
-msgstr "no se puede cambiar un clon parcial remoto promisor"
+#: list-objects-filter-options.c:102
+#, c-format
+msgid "must escape char in sub-filter-spec: '%c'"
+msgstr "tienes que escapar el caracter en sub-filter-spec: '%c'"
+
+#: list-objects-filter-options.c:144
+msgid "expected something after combine:"
+msgstr "se espera algo luego de combine:"
+
+#: list-objects-filter-options.c:226
+msgid "multiple filter-specs cannot be combined"
+msgstr "no se pueden combinar múltiples tipos de especificaciones de filtro"
 
 #: lockfile.c:151
 #, c-format
@@ -3631,115 +3659,111 @@
 msgid "failed to read the cache"
 msgstr "falló al leer la cache"
 
-#: merge.c:107 rerere.c:720 builtin/am.c:1885 builtin/am.c:1919
-#: builtin/checkout.c:536 builtin/checkout.c:796 builtin/clone.c:786
+#: merge.c:107 rerere.c:720 builtin/am.c:1874 builtin/am.c:1908
+#: builtin/checkout.c:537 builtin/checkout.c:796 builtin/clone.c:785
 #: builtin/stash.c:264
 msgid "unable to write new index file"
 msgstr "no es posible escribir el archivo índice"
 
-#: merge-recursive.c:322
+#: merge-recursive.c:367
 msgid "(bad commit)\n"
 msgstr "(commit erróneo)\n"
 
-#: merge-recursive.c:345
+#: merge-recursive.c:390
 #, c-format
 msgid "add_cacheinfo failed for path '%s'; merge aborting."
 msgstr "add_cacheinfo falló para la ruta '%s'; abortando fusión."
 
-#: merge-recursive.c:354
+#: merge-recursive.c:399
 #, c-format
 msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
 msgstr "add_cacheinfo falló para refrescar la ruta '%s'; abortando fusión."
 
-#: merge-recursive.c:437
-msgid "error building trees"
-msgstr "error construyendo árboles"
-
-#: merge-recursive.c:863
+#: merge-recursive.c:885
 #, c-format
 msgid "failed to create path '%s'%s"
 msgstr "falló al crear la ruta '%s'%s"
 
-#: merge-recursive.c:874
+#: merge-recursive.c:896
 #, c-format
 msgid "Removing %s to make room for subdirectory\n"
 msgstr "Removiendo %s para hacer espacio para un subdirectorio\n"
 
-#: merge-recursive.c:888 merge-recursive.c:907
+#: merge-recursive.c:910 merge-recursive.c:929
 msgid ": perhaps a D/F conflict?"
-msgstr ": tal vez un conflicto D/F?"
+msgstr ": ¿tal vez un conflicto D/F?"
 
-#: merge-recursive.c:897
+#: merge-recursive.c:919
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
 msgstr "rehusando perder el archivo rastreado en '%s'"
 
-#: merge-recursive.c:938 builtin/cat-file.c:40
+#: merge-recursive.c:960 builtin/cat-file.c:41
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "no se puede leer el objeto %s '%s'"
 
-#: merge-recursive.c:941
+#: merge-recursive.c:965
 #, c-format
 msgid "blob expected for %s '%s'"
 msgstr "se esperaba blob para %s '%s'"
 
-#: merge-recursive.c:965
+#: merge-recursive.c:990
 #, c-format
 msgid "failed to open '%s': %s"
 msgstr "falló al abrir '%s': %s"
 
-#: merge-recursive.c:976
+#: merge-recursive.c:1001
 #, c-format
 msgid "failed to symlink '%s': %s"
 msgstr "falló al crear el enlace simbólico '%s': %s"
 
-#: merge-recursive.c:981
+#: merge-recursive.c:1006
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "no se que hacer con %06o %s '%s'"
 
-#: merge-recursive.c:1177
+#: merge-recursive.c:1199
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "Falló al fusionar el submódulo %s (no revisado)"
 
-#: merge-recursive.c:1184
+#: merge-recursive.c:1206
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr "Falló al fusionar el submódulo %s (commits no presentes)"
 
-#: merge-recursive.c:1191
+#: merge-recursive.c:1213
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr "Falló el fusionar submódulo %s (commits no siguen la fusión base)"
 
-#: merge-recursive.c:1199 merge-recursive.c:1211
+#: merge-recursive.c:1221 merge-recursive.c:1233
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "Haciendo fast-forward a submódulo %s para el siguiente commit:"
 
-#: merge-recursive.c:1202 merge-recursive.c:1214
+#: merge-recursive.c:1224 merge-recursive.c:1236
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "Avance rápido en submódulo %s"
 
-#: merge-recursive.c:1237
+#: merge-recursive.c:1259
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 "Falló al fusionar submódulo %s (los siguentes commits no fueron encontrados)"
 
-#: merge-recursive.c:1241
+#: merge-recursive.c:1263
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "Falló al fusionar el submódulo %s (no es posible avance rápido)"
 
-#: merge-recursive.c:1242
+#: merge-recursive.c:1264
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr "Se encontró una posible solución de fusión para el submódulo:\n"
 
-#: merge-recursive.c:1245
+#: merge-recursive.c:1267
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -3756,33 +3780,33 @@
 "\n"
 "el cual aceptará esta sugerencia.\n"
 
-#: merge-recursive.c:1254
+#: merge-recursive.c:1276
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr "Falló al fusionar el submódulo %s (fusiones múltiples encontradas)"
 
-#: merge-recursive.c:1327
+#: merge-recursive.c:1349
 msgid "Failed to execute internal merge"
 msgstr "Falló al ejecutar la fusión interna"
 
-#: merge-recursive.c:1332
+#: merge-recursive.c:1354
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "No es posible agregar %s a la base de datos"
 
-#: merge-recursive.c:1364
+#: merge-recursive.c:1386
 #, c-format
 msgid "Auto-merging %s"
 msgstr "Auto-fusionando %s"
 
-#: merge-recursive.c:1387
+#: merge-recursive.c:1410
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr ""
 "Error: Rehusando perder el archivo no rastreado en %s; escribiéndolo a %s en "
 "cambio."
 
-#: merge-recursive.c:1459
+#: merge-recursive.c:1482
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -3791,7 +3815,7 @@
 "CONFLICTO (%s/borrar): %s borrado en %s y %s en %s. Falta versión %s de %s "
 "en el árbol."
 
-#: merge-recursive.c:1464
+#: merge-recursive.c:1487
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -3800,7 +3824,7 @@
 "CONFLICTO (%s/borrar): %s borrado en %s y %s para %s en %s. Versión %s de %s "
 "permanece en el árbol."
 
-#: merge-recursive.c:1471
+#: merge-recursive.c:1494
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -3809,7 +3833,7 @@
 "CONFLICTO (%s/eliminar): %s eliminado en %s y %s en %s. Versión %s de %s "
 "dejada en el árbol, en %s."
 
-#: merge-recursive.c:1476
+#: merge-recursive.c:1499
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -3818,44 +3842,44 @@
 "CONFLICTO (%s/borrar): %s borrado en %s y %s para %s en %s. Versión %s de %s "
 "permanece en el árbol en %s."
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1534
 msgid "rename"
 msgstr "renombrar"
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1534
 msgid "renamed"
 msgstr "renombrado"
 
-#: merge-recursive.c:1591 merge-recursive.c:2450 merge-recursive.c:3094
+#: merge-recursive.c:1614 merge-recursive.c:2472 merge-recursive.c:3117
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "Rehusando perder el archivo sucio en %s"
 
-#: merge-recursive.c:1601
+#: merge-recursive.c:1624
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr ""
 "Rehusando perder el archivo no rastreado en %s, incluso aunque se está "
 "interponiendo."
 
-#: merge-recursive.c:1659
+#: merge-recursive.c:1682
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 "CONFLICTO (renombrar/agregar): Renombrar %s->%s en %s.  %s agregado en %s"
 
-#: merge-recursive.c:1690
+#: merge-recursive.c:1713
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s es un directorio en %s agregando como %s más bien"
 
-#: merge-recursive.c:1695
+#: merge-recursive.c:1718
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr ""
 "Rehusando perder el archivo no rastreado en %s; agregándolo como %s en cambio"
 
-#: merge-recursive.c:1714
+#: merge-recursive.c:1737
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -3864,18 +3888,18 @@
 "CONFLICTO (renombrar/renombrar): Renombrar \"%s\"->\"%s\" en la rama \"%s\" "
 "renombrar \"%s\"->\"%s\" en \"%s\"%s"
 
-#: merge-recursive.c:1719
+#: merge-recursive.c:1742
 msgid " (left unresolved)"
 msgstr " (dejado sin resolver)"
 
-#: merge-recursive.c:1828
+#: merge-recursive.c:1851
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "CONFLICTO (renombrar/renombrar): Renombrar %s->%s en %s. Renombrar %s->%s en "
 "%s"
 
-#: merge-recursive.c:2035
+#: merge-recursive.c:2056
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -3886,7 +3910,7 @@
 "colocar %s porque el directorio %s fue renombrado a otros múltiples "
 "directorios, sin ningún que contenga la mayoría de archivos."
 
-#: merge-recursive.c:2067
+#: merge-recursive.c:2088
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -3896,7 +3920,7 @@
 "existente en %s se interpone con el cambio de nombres implícito, poniendo "
 "la(s) siguiente(s) ruta(s) aquí: %s."
 
-#: merge-recursive.c:2077
+#: merge-recursive.c:2098
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -3905,7 +3929,7 @@
 "CONFLICTO (cambio de nombre implícito): No se puede mapear más de una ruta "
 "para %s; cambio de nombre implícito intentó poner estas rutas: %s"
 
-#: merge-recursive.c:2169
+#: merge-recursive.c:2190
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -3914,7 +3938,7 @@
 "CONFLICTO (renombrar/renombrar): Renombrar directorio %s->%s en %s. "
 "Renombrar directorio %s->%s en %s"
 
-#: merge-recursive.c:2413
+#: merge-recursive.c:2435
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
@@ -3923,52 +3947,52 @@
 "PELIGRO: Evitando aplicar %s -> %s renombrado a %s, porque %s mismo fue "
 "renombrado."
 
-#: merge-recursive.c:2938
+#: merge-recursive.c:2961
 #, c-format
 msgid "cannot read object %s"
 msgstr "no se pudo leer el objeto %s"
 
-#: merge-recursive.c:2941
+#: merge-recursive.c:2964
 #, c-format
 msgid "object %s is not a blob"
 msgstr "objeto %s no es un blob"
 
-#: merge-recursive.c:3005
+#: merge-recursive.c:3028
 msgid "modify"
 msgstr "modificar"
 
-#: merge-recursive.c:3005
+#: merge-recursive.c:3028
 msgid "modified"
 msgstr "modificado"
 
-#: merge-recursive.c:3017
+#: merge-recursive.c:3040
 msgid "content"
 msgstr "contenido"
 
-#: merge-recursive.c:3021
+#: merge-recursive.c:3044
 msgid "add/add"
 msgstr "agregar/agregar"
 
-#: merge-recursive.c:3044
+#: merge-recursive.c:3067
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "Saltado %s (fusionado como existente)"
 
-#: merge-recursive.c:3066 git-submodule.sh:937
+#: merge-recursive.c:3089 git-submodule.sh:937
 msgid "submodule"
 msgstr "submódulo"
 
-#: merge-recursive.c:3067
+#: merge-recursive.c:3090
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "CONFLICTO (%s): Conflicto de fusión en %s"
 
-#: merge-recursive.c:3097
+#: merge-recursive.c:3120
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Agregando más bien como %s"
 
-#: merge-recursive.c:3179
+#: merge-recursive.c:3203
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
@@ -3977,7 +4001,7 @@
 "Path actualizado: %s agregado en %s dentro de un directorio que fue "
 "renombrado en %s; moviéndolo a %s."
 
-#: merge-recursive.c:3182
+#: merge-recursive.c:3206
 #, c-format
 msgid ""
 "CONFLICT (file location): %s added in %s inside a directory that was renamed "
@@ -3986,7 +4010,7 @@
 "CONFLICTO (ubicación de archivo): %s agregado en %s dentro de un directorio "
 "que fue renombrado en %s, sugerimos que debería ser movido a %s."
 
-#: merge-recursive.c:3186
+#: merge-recursive.c:3210
 #, c-format
 msgid ""
 "Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
@@ -3995,7 +4019,7 @@
 "Path actualizado: %s renombrado a %s en %s, dentro de un directorio que fue "
 "renombrado en %s; moviéndolo a %s."
 
-#: merge-recursive.c:3189
+#: merge-recursive.c:3213
 #, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
@@ -4005,37 +4029,61 @@
 "directorio que fue renombrado en %s, sugiriendo que tal vez debería ser "
 "movido a %s."
 
-#: merge-recursive.c:3303
+#: merge-recursive.c:3327
 #, c-format
 msgid "Removing %s"
 msgstr "Eliminando %s"
 
-#: merge-recursive.c:3326
+#: merge-recursive.c:3350
 msgid "file/directory"
 msgstr "archivo/directorio"
 
-#: merge-recursive.c:3331
+#: merge-recursive.c:3355
 msgid "directory/file"
 msgstr "directorio/archivo"
 
-#: merge-recursive.c:3338
+#: merge-recursive.c:3362
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
 "CONFLICTO (%s): Hay un directorio con el nombre %s en %s. Agregando %s como "
 "%s"
 
-#: merge-recursive.c:3347
+#: merge-recursive.c:3371
 #, c-format
 msgid "Adding %s"
 msgstr "Agregando %s"
 
-#: merge-recursive.c:3356
+#: merge-recursive.c:3380
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "CONFLICTO (add/add): Conflicto de merge en %s"
 
-#: merge-recursive.c:3394
+#: merge-recursive.c:3424
+msgid "Already up to date!"
+msgstr "¡Ya está actualizado!"
+
+#: merge-recursive.c:3433
+#, c-format
+msgid "merging of trees %s and %s failed"
+msgstr "falló la fusión de los árboles %s y %s"
+
+#: merge-recursive.c:3537
+msgid "Merging:"
+msgstr "Fusionando:"
+
+#: merge-recursive.c:3550
+#, c-format
+msgid "found %u common ancestor:"
+msgid_plural "found %u common ancestors:"
+msgstr[0] "se encontró %u ancestro común:"
+msgstr[1] "se encontraron %u ancestros comunes:"
+
+#: merge-recursive.c:3600
+msgid "merge returned no commit"
+msgstr "la fusión no devolvió ningún commit"
+
+#: merge-recursive.c:3659
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -4045,190 +4093,166 @@
 "merge:\n"
 "  %s"
 
-#: merge-recursive.c:3405
-msgid "Already up to date!"
-msgstr "¡Ya está actualizado!"
-
-#: merge-recursive.c:3414
-#, c-format
-msgid "merging of trees %s and %s failed"
-msgstr "falló la fusión de los árboles %s y %s"
-
-#: merge-recursive.c:3513
-msgid "Merging:"
-msgstr "Fusionando:"
-
-#: merge-recursive.c:3526
-#, c-format
-msgid "found %u common ancestor:"
-msgid_plural "found %u common ancestors:"
-msgstr[0] "se encontró %u ancestro común:"
-msgstr[1] "se encontraron %u ancestros comunes:"
-
-#: merge-recursive.c:3565
-msgid "merge returned no commit"
-msgstr "la fusión no devolvió ningún commit"
-
-#: merge-recursive.c:3631
+#: merge-recursive.c:3756
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "No se pudo analizar el objeto '%s'"
 
-#: merge-recursive.c:3647 builtin/merge.c:698 builtin/merge.c:869
+#: merge-recursive.c:3774 builtin/merge.c:694 builtin/merge.c:874
 msgid "Unable to write index."
 msgstr "Incapaz de escribir el índice."
 
-#: midx.c:69
+#: midx.c:68
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "archivo multi-pack-index %s es muy pequeño"
 
-#: midx.c:85
+#: midx.c:84
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr "firma de multi-pack-index 0x%08x no concuerda con firma 0x%08x"
 
-#: midx.c:90
+#: midx.c:89
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "versión %d de multi-pack-index no reconocida"
 
-#: midx.c:95
+#: midx.c:94
 #, c-format
 msgid "hash version %u does not match"
 msgstr "versión de hash %u no concuerda"
 
-#: midx.c:109
+#: midx.c:108
 msgid "invalid chunk offset (too large)"
 msgstr "offset inválido del conjunto (muy grande)"
 
-#: midx.c:133
+#: midx.c:132
 msgid "terminating multi-pack-index chunk id appears earlier than expected"
 msgstr ""
 "terminando multi-pack-index porque el id del conjunto aparece antes de lo "
 "esperado"
 
-#: midx.c:146
+#: midx.c:145
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "multi-pack-index le falta el conjunto pack-name requerido"
 
-#: midx.c:148
+#: midx.c:147
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "multi-pack-index le falta el conjunto OID fanout requerido"
 
-#: midx.c:150
+#: midx.c:149
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "multi-pack-index le falta el conjunto OID fanout requerido"
 
-#: midx.c:152
+#: midx.c:151
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "multi-pack-index le falta el conjunto de offset del objeto requerido"
 
-#: midx.c:166
+#: midx.c:165
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr "multi-pack-index nombres de paquete fuera de orden:'%s' antes '%s'"
 
-#: midx.c:211
+#: midx.c:210
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "mal pack-int-id: %u (%u paquetes totales)"
 
-#: midx.c:261
+#: midx.c:260
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr "multi-pack-index guarda un offset de 64-bit, pero off_t es muy pequeño"
 
-#: midx.c:289
+#: midx.c:288
 msgid "error preparing packfile from multi-pack-index"
 msgstr "error preparando packfile de multi-pack-index"
 
-#: midx.c:470
+#: midx.c:469
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "falló al agregar packfile '%s'"
 
-#: midx.c:476
+#: midx.c:475
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "falló al abrir pack-index '%s'"
 
-#: midx.c:536
+#: midx.c:535
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "falló al ubicar objeto %d en packfile"
 
-#: midx.c:865
+#: midx.c:864
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "no se vió pack-file %s caer"
 
-#: midx.c:1036
+#: midx.c:1035
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "falló al limpiar multi-pack-index en %s"
 
-#: midx.c:1091
+#: midx.c:1090
 msgid "Looking for referenced packfiles"
 msgstr "Buscando por packfiles referidos"
 
-#: midx.c:1106
+#: midx.c:1105
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr ""
 "oid fanout fuera de orden: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 
-#: midx.c:1110
+#: midx.c:1109
 msgid "Verifying OID order in MIDX"
 msgstr "Verificando orden de OID en MIDX"
 
-#: midx.c:1119
+#: midx.c:1118
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "oid lookup fuera de orden: oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1138
+#: midx.c:1137
 msgid "Sorting objects by packfile"
 msgstr "Ordenando objetos por packfile"
 
-#: midx.c:1144
+#: midx.c:1143
 msgid "Verifying object offsets"
 msgstr "Verificando offsets de objetos"
 
-#: midx.c:1160
+#: midx.c:1159
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "fallo al cargar entrada pack para oid[%d] = %s"
 
-#: midx.c:1166
+#: midx.c:1165
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "falló al cargar el pack-index para packfile %s"
 
-#: midx.c:1175
+#: midx.c:1174
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "offset para objeto incorrecto oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 
-#: midx.c:1350
+#: midx.c:1349
 msgid "could not start pack-objects"
 msgstr "no se pudo empezar los pack-objetcts"
 
-#: midx.c:1369
+#: midx.c:1368
 msgid "could not finish pack-objects"
 msgstr "no se pudo finalizar pack-objetcts"
 
-#: name-hash.c:532
+#: name-hash.c:537
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
 msgstr "no es posible crear hilo lazy_dir: %s"
 
-#: name-hash.c:554
+#: name-hash.c:559
 #, c-format
 msgid "unable to create lazy_name thread: %s"
 msgstr "no es posible crear hilo lazy_name: %s"
 
-#: name-hash.c:560
+#: name-hash.c:565
 #, c-format
 msgid "unable to join lazy_name thread: %s"
 msgstr "no es posible unir hilo lazy_name: %s"
@@ -4275,46 +4299,46 @@
 msgid "Bad %s value: '%s'"
 msgstr "Valor erróneo para %s: '%s'"
 
-#: object.c:54
+#: object.c:53
 #, c-format
 msgid "invalid object type \"%s\""
 msgstr "tipo de objeto \"%s\" inválido"
 
-#: object.c:174
+#: object.c:173
 #, c-format
 msgid "object %s is a %s, not a %s"
 msgstr "objeto %s es un %s, no un %s"
 
-#: object.c:234
+#: object.c:233
 #, c-format
 msgid "object %s has unknown type id %d"
 msgstr "el objeto %s tiene un id de tipo desconocido %d"
 
-#: object.c:247
+#: object.c:246
 #, c-format
 msgid "unable to parse object: %s"
 msgstr "incapaz de analizar objeto: %s"
 
-#: object.c:267 object.c:278
+#: object.c:266 object.c:277
 #, c-format
 msgid "hash mismatch %s"
 msgstr "hash no concuerda %s"
 
-#: packfile.c:648
+#: packfile.c:641
 msgid "offset before end of packfile (broken .idx?)"
 msgstr "offset antes del final del paquete (broken .idx?)"
 
-#: packfile.c:1899
+#: packfile.c:1887
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr ""
-"offset antes del comienzo del índice del paquete para %s (índice corrupto?)"
+"offset antes del comienzo del índice del paquete para %s (¿índice corrupto?)"
 
-#: packfile.c:1903
+#: packfile.c:1891
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr ""
-"offset más allá del índice de fin de paquete para %s (índice truncado?)"
+"offset más allá del índice de fin de paquete para %s (¿índice truncado?)"
 
 #: parse-options.c:38
 #, c-format
@@ -4356,26 +4380,26 @@
 msgid "did you mean `--%s` (with two dashes ?)"
 msgstr "¿quisiste decir `--%s` (con dos guiones)?"
 
-#: parse-options.c:859
+#: parse-options.c:860
 #, c-format
 msgid "unknown option `%s'"
 msgstr "opción `%s' desconocida"
 
-#: parse-options.c:861
+#: parse-options.c:862
 #, c-format
 msgid "unknown switch `%c'"
 msgstr "switch desconocido `%c'"
 
-#: parse-options.c:863
+#: parse-options.c:864
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr "opción desconocida en string no ascii: `%s'"
 
-#: parse-options.c:887
+#: parse-options.c:888
 msgid "..."
 msgstr "..."
 
-#: parse-options.c:906
+#: parse-options.c:907
 #, c-format
 msgid "usage: %s"
 msgstr "uso: %s"
@@ -4383,21 +4407,21 @@
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
 #.
-#: parse-options.c:912
+#: parse-options.c:913
 #, c-format
 msgid "   or: %s"
 msgstr "   o: %s"
 
-#: parse-options.c:915
+#: parse-options.c:916
 #, c-format
 msgid "    %s"
 msgstr "    %s"
 
-#: parse-options.c:954
+#: parse-options.c:955
 msgid "-NUM"
 msgstr "-NUM"
 
-#: parse-options.c:968
+#: parse-options.c:969
 #, c-format
 msgid "alias of --%s"
 msgstr "alias de --%s"
@@ -4566,29 +4590,38 @@
 msgid "unable to parse --pretty format"
 msgstr "incapaz de analizar el formato --pretty"
 
-#: range-diff.c:70
+#: promisor-remote.c:25
+msgid "Remote with no URL"
+msgstr "Remoto sin URL"
+
+#: promisor-remote.c:61
+#, c-format
+msgid "promisor remote name cannot begin with '/': %s"
+msgstr "nombre remoto promisor no puede comenzar con '/': %s"
+
+#: range-diff.c:71
 msgid "could not start `log`"
 msgstr "no se pudo comenzar `log`"
 
-#: range-diff.c:72
+#: range-diff.c:73
 msgid "could not read `log` output"
 msgstr "no se pudo leer output de `log`"
 
-#: range-diff.c:91 sequencer.c:5021
+#: range-diff.c:92 sequencer.c:4985
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "no se pudo analizar commit '%s'"
 
-#: range-diff.c:117
+#: range-diff.c:118
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "no se puede analizar git header '%.*s'"
 
-#: range-diff.c:274
+#: range-diff.c:275
 msgid "failed to generate diff"
 msgstr "falló al generar diff"
 
-#: range-diff.c:506 range-diff.c:508
+#: range-diff.c:507 range-diff.c:509
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "no se pudo leer el log para '%s'"
@@ -4633,11 +4666,11 @@
 msgid "'%s' appears as both a file and as a directory"
 msgstr "'%s' parece ser un directorio y un archivo a la vez"
 
-#: read-cache.c:1499
+#: read-cache.c:1520
 msgid "Refresh index"
 msgstr "Refrescar index"
 
-#: read-cache.c:1613
+#: read-cache.c:1635
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -4646,7 +4679,7 @@
 "index.version configurado, pero el valor no es válido.\n"
 "Usando versión %i"
 
-#: read-cache.c:1623
+#: read-cache.c:1645
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -4655,138 +4688,138 @@
 "GIT_INDEX_VERSION configurado, pero el valor no es válido.\n"
 "Usando versión %i"
 
-#: read-cache.c:1679
+#: read-cache.c:1701
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "mala firma 0x%08x"
 
-#: read-cache.c:1682
+#: read-cache.c:1704
 #, c-format
 msgid "bad index version %d"
 msgstr "mala versión del índice %d"
 
-#: read-cache.c:1691
+#: read-cache.c:1713
 msgid "bad index file sha1 signature"
 msgstr "mala firma sha1 del archivo index"
 
-#: read-cache.c:1721
+#: read-cache.c:1743
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "index usa %.4s extensiones, cosa que no entendemos"
 
-#: read-cache.c:1723
+#: read-cache.c:1745
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "ignorando extensión %.4s"
 
-#: read-cache.c:1760
+#: read-cache.c:1782
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "formato de index desconocido 0x%08x"
 
-#: read-cache.c:1776
+#: read-cache.c:1798
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "campo nombre malformado en el index, cerca a ruta '%s'"
 
-#: read-cache.c:1833
+#: read-cache.c:1855
 msgid "unordered stage entries in index"
 msgstr "entradas en stage desordenadas en index"
 
-#: read-cache.c:1836
+#: read-cache.c:1858
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "múltiples entradas extrañas para archivo fusionado '%s'"
 
-#: read-cache.c:1839
+#: read-cache.c:1861
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "entradas de stage desordenadas para '%s'"
 
-#: read-cache.c:1946 read-cache.c:2234 rerere.c:565 rerere.c:599 rerere.c:1111
-#: builtin/add.c:460 builtin/check-ignore.c:178 builtin/checkout.c:467
-#: builtin/checkout.c:651 builtin/clean.c:956 builtin/commit.c:347
+#: read-cache.c:1967 read-cache.c:2255 rerere.c:565 rerere.c:599 rerere.c:1111
+#: builtin/add.c:460 builtin/check-ignore.c:178 builtin/checkout.c:468
+#: builtin/checkout.c:652 builtin/clean.c:967 builtin/commit.c:347
 #: builtin/diff-tree.c:120 builtin/grep.c:499 builtin/mv.c:145
 #: builtin/reset.c:245 builtin/rm.c:271 builtin/submodule--helper.c:330
 msgid "index file corrupt"
 msgstr "archivo índice corrompido"
 
-#: read-cache.c:2087
+#: read-cache.c:2108
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "no es posible crear hilo load_cache_entries: %s"
 
-#: read-cache.c:2100
+#: read-cache.c:2121
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "no es posible unir hilo load_cache_entires: %s"
 
-#: read-cache.c:2133
+#: read-cache.c:2154
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s: falló al abrir el archivo index"
 
-#: read-cache.c:2137
+#: read-cache.c:2158
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s: no se puede hacer stat del index abierto"
 
-#: read-cache.c:2141
+#: read-cache.c:2162
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s: archivo index más pequeño de lo esperado"
 
-#: read-cache.c:2145
+#: read-cache.c:2166
 #, c-format
 msgid "%s: unable to map index file"
 msgstr "%s: no se pudo mapear el archivo index"
 
-#: read-cache.c:2187
+#: read-cache.c:2208
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "no es posible crear hilo load_index_extensions: %s"
 
-#: read-cache.c:2214
+#: read-cache.c:2235
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "no es posible unir hilo load_index_extensions: %s"
 
-#: read-cache.c:2246
+#: read-cache.c:2267
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "no se pudo refrescar el index compartido '%s'"
 
-#: read-cache.c:2293
+#: read-cache.c:2314
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "index roto, se esperaba %s en %s, se obtuvo %s"
 
-#: read-cache.c:2989 wrapper.c:658 builtin/merge.c:1114
+#: read-cache.c:3010 wrapper.c:622 builtin/merge.c:1119
 #, c-format
 msgid "could not close '%s'"
 msgstr "no se pudo cerrar '%s'"
 
-#: read-cache.c:3092 sequencer.c:2358 sequencer.c:3928
+#: read-cache.c:3113 sequencer.c:2296 sequencer.c:3917
 #, c-format
 msgid "could not stat '%s'"
 msgstr "no se pudo definir '%s'"
 
-#: read-cache.c:3105
+#: read-cache.c:3126
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "no es posible abrir el directorio de git: %s"
 
-#: read-cache.c:3117
+#: read-cache.c:3138
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "no es posible eliminar el vinculo: %s"
 
-#: read-cache.c:3142
+#: read-cache.c:3163
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "no se pudo arreglar bits de permisos en '%s'"
 
-#: read-cache.c:3291
+#: read-cache.c:3312
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s: no se puede eliminar a stage #0"
@@ -4861,7 +4894,7 @@
 "If you remove a line here THAT COMMIT WILL BE LOST.\n"
 msgstr ""
 "\n"
-"Si remueves una línea aquí EL COMMIT SE PERDERÁ.\n"
+"Si eliminas una línea aquí EL COMMIT SE PERDERÁ.\n"
 
 #: rebase-interactive.c:74 git-rebase--preserve-merges.sh:871
 msgid ""
@@ -4891,8 +4924,8 @@
 msgid "Note that empty commits are commented out"
 msgstr "Tenga en cuenta que los commits vacíos están comentados"
 
-#: rebase-interactive.c:105 rerere.c:485 rerere.c:692 sequencer.c:3447
-#: sequencer.c:3473 sequencer.c:5120 builtin/fsck.c:356 builtin/rebase.c:235
+#: rebase-interactive.c:105 rerere.c:485 rerere.c:692 sequencer.c:3388
+#: sequencer.c:3414 sequencer.c:5084 builtin/fsck.c:356 builtin/rebase.c:235
 #, c-format
 msgid "could not write '%s'"
 msgstr "no se pudo escribir '%s'"
@@ -4932,14 +4965,14 @@
 #: refs.c:262
 #, c-format
 msgid "%s does not point to a valid object!"
-msgstr "%s no apunta a ningún objeto válido!"
+msgstr "¡%s no apunta a ningún objeto válido!"
 
 #: refs.c:667
 #, c-format
 msgid "ignoring dangling symref %s"
 msgstr "ignorando referencia rota %s"
 
-#: refs.c:669 ref-filter.c:2092
+#: refs.c:669 ref-filter.c:2098
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "ignorando referencia rota %s"
@@ -4964,14 +4997,14 @@
 msgid "unexpected object ID when writing '%s'"
 msgstr "ID de objecto inesperado cuando se escribía '%s'"
 
-#: refs.c:833 sequencer.c:403 sequencer.c:2709 sequencer.c:2913
-#: sequencer.c:2927 sequencer.c:3184 sequencer.c:5037 wrapper.c:656
+#: refs.c:833 sequencer.c:403 sequencer.c:2647 sequencer.c:2851
+#: sequencer.c:2865 sequencer.c:3122 sequencer.c:5001 wrapper.c:620
 #, c-format
 msgid "could not write to '%s'"
 msgstr "no se pudo escribir en '%s'"
 
-#: refs.c:860 wrapper.c:225 wrapper.c:395 builtin/am.c:715
-#: builtin/rebase.c:1003
+#: refs.c:860 wrapper.c:188 wrapper.c:358 builtin/am.c:714
+#: builtin/rebase.c:1004
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "no se pudo abrir '%s' para escritura"
@@ -5006,21 +5039,21 @@
 msgid "update_ref failed for ref '%s': %s"
 msgstr "update_ref falló para ref '%s': %s"
 
-#: refs.c:2012
+#: refs.c:2023
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "múltiples actualizaciones para ref '%s' no permitidas"
 
-#: refs.c:2044
+#: refs.c:2055
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "actualizaciones de ref prohibidas dentro de ambiente de cuarentena"
 
-#: refs.c:2140 refs.c:2170
+#: refs.c:2151 refs.c:2181
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "'%s' existe; no se puede crear '%s'"
 
-#: refs.c:2146 refs.c:2181
+#: refs.c:2157 refs.c:2192
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "no se puede procesar '%s' y '%s' al mismo tiempo"
@@ -5030,13 +5063,13 @@
 msgid "could not remove reference %s"
 msgstr "no se pudo eliminar la referencia %s"
 
-#: refs/files-backend.c:1248 refs/packed-backend.c:1532
-#: refs/packed-backend.c:1542
+#: refs/files-backend.c:1248 refs/packed-backend.c:1541
+#: refs/packed-backend.c:1551
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr "no se pudo eliminar la referencia %s: %s"
 
-#: refs/files-backend.c:1251 refs/packed-backend.c:1545
+#: refs/files-backend.c:1251 refs/packed-backend.c:1554
 #, c-format
 msgid "could not delete references: %s"
 msgstr "no se pudo eliminar la referencia: %s"
@@ -5046,7 +5079,7 @@
 msgid "invalid refspec '%s'"
 msgstr "refspec inválido: '%s'"
 
-#: ref-filter.c:42 wt-status.c:1934
+#: ref-filter.c:42 wt-status.c:1938
 msgid "gone"
 msgstr "desaparecido"
 
@@ -5065,281 +5098,281 @@
 msgid "ahead %d, behind %d"
 msgstr "delante %d, detrás %d"
 
-#: ref-filter.c:162
+#: ref-filter.c:165
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr "formato esperado: %%(color:<color>)"
 
-#: ref-filter.c:164
+#: ref-filter.c:167
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr "color no reconocido: %%(color:%s)"
 
-#: ref-filter.c:186
+#: ref-filter.c:189
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr "Valor entero esperado refname:lstrip=%s"
 
-#: ref-filter.c:190
+#: ref-filter.c:193
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr "Valor entero esperado refname:rstrip=%s"
 
-#: ref-filter.c:192
+#: ref-filter.c:195
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr "argumento: %s no reconocido %%(%s)"
 
-#: ref-filter.c:247
+#: ref-filter.c:250
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr "%%(objecttype) no toma ningún argumento"
 
-#: ref-filter.c:269
+#: ref-filter.c:272
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr "%%(objectsize) no reconocido argumento: %s"
 
-#: ref-filter.c:277
+#: ref-filter.c:280
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr "%%(deltabase) no toma argumentos"
 
-#: ref-filter.c:289
+#: ref-filter.c:292
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr "%%(body) no toma ningún argumento"
 
-#: ref-filter.c:298
+#: ref-filter.c:301
 #, c-format
 msgid "%%(subject) does not take arguments"
 msgstr "%%(subject) no toma ningún argumento"
 
-#: ref-filter.c:320
+#: ref-filter.c:323
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr "%%(trailers) desconocidos, argumento: %s"
 
-#: ref-filter.c:349
+#: ref-filter.c:352
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr "valor positivo esperado contents:lines=%s"
 
-#: ref-filter.c:351
+#: ref-filter.c:354
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr "argumento %s no reconocido %%(contents)"
 
-#: ref-filter.c:366
+#: ref-filter.c:369
 #, c-format
 msgid "positive value expected objectname:short=%s"
 msgstr "valor positivo esperado objectname:short=%s"
 
-#: ref-filter.c:370
+#: ref-filter.c:373
 #, c-format
 msgid "unrecognized %%(objectname) argument: %s"
 msgstr "argumento: %s no reconocido %%(objectname)"
 
-#: ref-filter.c:400
+#: ref-filter.c:403
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr "formato esperado: %%(align:<ancho>,<posición>)"
 
-#: ref-filter.c:412
+#: ref-filter.c:415
 #, c-format
 msgid "unrecognized position:%s"
 msgstr "posición desconocida: %s"
 
-#: ref-filter.c:419
+#: ref-filter.c:422
 #, c-format
 msgid "unrecognized width:%s"
 msgstr "ancho desconocido: %s"
 
-#: ref-filter.c:428
+#: ref-filter.c:431
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr "argumento no reconocido para %%(align): %s"
 
-#: ref-filter.c:436
+#: ref-filter.c:439
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr "se esperaba un ancho positivo con el átomo %%(align)"
 
-#: ref-filter.c:454
+#: ref-filter.c:457
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr "argumento: %s no reconocido %%(if)"
 
-#: ref-filter.c:556
+#: ref-filter.c:559
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "nombre mal formado de campo: %.*s"
 
-#: ref-filter.c:583
+#: ref-filter.c:586
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "nombre de campo desconocido: %.*s"
 
-#: ref-filter.c:587
+#: ref-filter.c:590
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
 msgstr ""
 "no es un repositorio git, pero el campo '%.*s' requiere acceso al objeto data"
 
-#: ref-filter.c:711
+#: ref-filter.c:714
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr "formato: átomo %%(if) usado sin un átomo %%(then)"
 
-#: ref-filter.c:774
+#: ref-filter.c:777
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr "formato: átomo %%(then) usado sin átomo %%(if)"
 
-#: ref-filter.c:776
+#: ref-filter.c:779
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr "formato: átomo %%(then) usado más de una vez"
 
-#: ref-filter.c:778
+#: ref-filter.c:781
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "formato: átomo %%(then) usado después de %%(else)"
 
-#: ref-filter.c:806
+#: ref-filter.c:809
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr "formato: átomo %%(else) usado sin un átomo %%(if)"
 
-#: ref-filter.c:808
+#: ref-filter.c:811
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr "formato: átomo %%(else) usado sin un átomo %%(then)"
 
-#: ref-filter.c:810
+#: ref-filter.c:813
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr "formato: átomo %%(else) usado más de una vez"
 
-#: ref-filter.c:825
+#: ref-filter.c:828
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr "formato: átomo %%(end) usado sin átomo correspondiente"
 
-#: ref-filter.c:882
+#: ref-filter.c:885
 #, c-format
 msgid "malformed format string %s"
 msgstr "formato de cadena mal formado %s"
 
-#: ref-filter.c:1485
+#: ref-filter.c:1488
 #, c-format
 msgid "no branch, rebasing %s"
 msgstr "no hay rama, rebasando %s"
 
-#: ref-filter.c:1488
+#: ref-filter.c:1491
 #, c-format
 msgid "no branch, rebasing detached HEAD %s"
 msgstr "(o hay rama, rebasando con HEAD desacoplado %s"
 
-#: ref-filter.c:1491
+#: ref-filter.c:1494
 #, c-format
 msgid "no branch, bisect started on %s"
 msgstr "no hay rama, comenzando biseccón en  %s"
 
-#: ref-filter.c:1501
+#: ref-filter.c:1504
 msgid "no branch"
 msgstr "sin rama"
 
-#: ref-filter.c:1537 ref-filter.c:1743
+#: ref-filter.c:1540 ref-filter.c:1749
 #, c-format
 msgid "missing object %s for %s"
 msgstr "falta objeto %s para %s"
 
-#: ref-filter.c:1547
+#: ref-filter.c:1550
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "parse_object_buffer falló en %s para %s"
 
-#: ref-filter.c:1998
+#: ref-filter.c:2004
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "objeto mal formado en '%s'"
 
-#: ref-filter.c:2087
+#: ref-filter.c:2093
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "ignorando referencia con nombre roto %s"
 
-#: ref-filter.c:2382
+#: ref-filter.c:2389
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "formato: falta átomo %%(end)"
 
-#: ref-filter.c:2482
+#: ref-filter.c:2489
 #, c-format
 msgid "option `%s' is incompatible with --merged"
 msgstr "opción `%s' es incompatible con --merged"
 
-#: ref-filter.c:2485
+#: ref-filter.c:2492
 #, c-format
 msgid "option `%s' is incompatible with --no-merged"
 msgstr "opción `%s' es incompatible con --no-merged"
 
-#: ref-filter.c:2495
+#: ref-filter.c:2502
 #, c-format
 msgid "malformed object name %s"
 msgstr "nombre de objeto mal formado %s"
 
-#: ref-filter.c:2500
+#: ref-filter.c:2507
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "opción '%s' debe apuntar a un commit"
 
-#: remote.c:363
+#: remote.c:366
 #, c-format
 msgid "config remote shorthand cannot begin with '/': %s"
 msgstr "config remote shorthand no puede comenzar con '/': %s"
 
-#: remote.c:410
+#: remote.c:413
 msgid "more than one receivepack given, using the first"
 msgstr "más de un receivepack dado, usando el primero"
 
-#: remote.c:418
+#: remote.c:421
 msgid "more than one uploadpack given, using the first"
 msgstr "más de un uploadpack dado, usando el primero"
 
-#: remote.c:608
+#: remote.c:611
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
 msgstr "No se pueden traer ambos %s y %s a %s"
 
-#: remote.c:612
+#: remote.c:615
 #, c-format
 msgid "%s usually tracks %s, not %s"
 msgstr "%s por lo general hace seguimiento a %s, no a %s"
 
-#: remote.c:616
+#: remote.c:619
 #, c-format
 msgid "%s tracks both %s and %s"
 msgstr "%s hace seguimiento tanto a %s como a %s"
 
-#: remote.c:684
+#: remote.c:687
 #, c-format
 msgid "key '%s' of pattern had no '*'"
 msgstr "llave '%s' de patrón no tuvo '*'"
 
-#: remote.c:694
+#: remote.c:697
 #, c-format
 msgid "value '%s' of pattern has no '*'"
 msgstr "valor '%s' del patrón no tiene '*'"
 
-#: remote.c:1000
+#: remote.c:1003
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "src refsoec %s: no concuerda con ninguno"
 
-#: remote.c:1005
+#: remote.c:1008
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr "src refspec %s concuerda con más de uno"
@@ -5348,7 +5381,7 @@
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1020
+#: remote.c:1023
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -5372,7 +5405,7 @@
 "Ninguno funcionó así que nos dimos por vencidos. Tienes que especificar el "
 "full ref."
 
-#: remote.c:1040
+#: remote.c:1043
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -5383,7 +5416,7 @@
 "¿Quisiste crear un branch nuevo mediante un push a\n"
 "'%s:refs/heads/%s'?"
 
-#: remote.c:1045
+#: remote.c:1048
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -5394,7 +5427,7 @@
 "Did you mean to create a new tag by pushing to\n"
 "'%s:refs/tags/%s'?"
 
-#: remote.c:1050
+#: remote.c:1053
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -5405,7 +5438,7 @@
 "¿Quisiste crear un tag nuevo mediante un push a\n"
 "'%s:refs/heads/%s'?"
 
-#: remote.c:1055
+#: remote.c:1058
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -5416,115 +5449,115 @@
 "¿Quisiste crear un tag nuevo mediante un push a\n"
 "'%s:refs/heads/%s'?"
 
-#: remote.c:1091
+#: remote.c:1094
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "%s no puede ser resolver a un branch"
 
-#: remote.c:1102
+#: remote.c:1105
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "no es posible borrar '%s': ref remoto no existe"
 
-#: remote.c:1114
+#: remote.c:1117
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr "dst refspec %s concuerda con más de uno"
 
-#: remote.c:1121
+#: remote.c:1124
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "dst ref %s recibe de más de un src"
 
-#: remote.c:1624 remote.c:1725
+#: remote.c:1627 remote.c:1728
 msgid "HEAD does not point to a branch"
 msgstr "HEAD no apunta a ninguna rama"
 
-#: remote.c:1633
+#: remote.c:1636
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "no existe tal rama: '%s'"
 
-#: remote.c:1636
+#: remote.c:1639
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "no se ha configurado upstream para la rama '%s'"
 
-#: remote.c:1642
+#: remote.c:1645
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "la rama '%s' de upstream no es guardad como rama de rastreo remoto"
 
-#: remote.c:1657
+#: remote.c:1660
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr ""
 "destino de push '%s' en el remoto '%s' no tiene una rama de rastreo local"
 
-#: remote.c:1669
+#: remote.c:1672
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "la rama '%s' no tiene remoto para enviar"
 
-#: remote.c:1679
+#: remote.c:1682
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "refspecs del push para '%s' no incluyen '%s'"
 
-#: remote.c:1692
+#: remote.c:1695
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "push no tiene destino (push.default es 'nada')"
 
-#: remote.c:1714
+#: remote.c:1717
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "no se puede resolver push 'simple' para un destino único"
 
-#: remote.c:1840
+#: remote.c:1843
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "no se puedo encontrar ref remota %s"
 
-#: remote.c:1853
+#: remote.c:1856
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* Ignorando ref graciosa '%s' localmente"
 
-#: remote.c:2016
+#: remote.c:2019
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "Tu rama está basada en '%s', pero upstream ha desaparecido.\n"
 
-#: remote.c:2020
+#: remote.c:2023
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (usa \"git branch --unset-upstream\" para arreglar)\n"
 
-#: remote.c:2023
+#: remote.c:2026
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Tu rama está actualizada con '%s'.\n"
 
-#: remote.c:2027
+#: remote.c:2030
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Tu rama y '%s' refieren a commits diferentes.\n"
 
-#: remote.c:2030
+#: remote.c:2033
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (usa \"%s\" para detalles)\n"
 
-#: remote.c:2034
+#: remote.c:2037
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "Tu rama está adelantada a '%s' por %d commit.\n"
 msgstr[1] "Tu rama está adelantada a '%s' por %d commits.\n"
 
-#: remote.c:2040
+#: remote.c:2043
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (usa \"git push\" para publicar tus commits locales)\n"
 
-#: remote.c:2043
+#: remote.c:2046
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -5534,11 +5567,11 @@
 msgstr[1] ""
 "Tu rama está detrás de '%s' por %d commits, y puede ser avanzada rápido.\n"
 
-#: remote.c:2051
+#: remote.c:2054
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (usa \"git pull\" para actualizar tu rama local)\n"
 
-#: remote.c:2054
+#: remote.c:2057
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -5553,11 +5586,11 @@
 "Tu rama y '%s' han divergido,\n"
 "y tienen %d y %d commits diferentes cada una respectivamente.\n"
 
-#: remote.c:2064
+#: remote.c:2067
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (usa \"git pull\" para fusionar la rama remota en la tuya)\n"
 
-#: remote.c:2247
+#: remote.c:2250
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "no se puede leer el nombre de objeto '%s'"
@@ -5635,7 +5668,7 @@
 msgid "Recorded preimage for '%s'"
 msgstr "Resolución precargada para '%s'"
 
-#: rerere.c:881 submodule.c:2023 builtin/log.c:1773
+#: rerere.c:881 submodule.c:2023 builtin/log.c:1790
 #: builtin/submodule--helper.c:1418 builtin/submodule--helper.c:1428
 #, c-format
 msgid "could not create directory '%s'"
@@ -5670,20 +5703,20 @@
 msgid "unable to open rr-cache directory"
 msgstr "no es posible abrir directorio rr-cache"
 
-#: revision.c:2507
+#: revision.c:2509
 msgid "your current branch appears to be broken"
 msgstr "tu rama actual parece estar rota"
 
-#: revision.c:2510
+#: revision.c:2512
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "tu rama actual '%s' no tiene ningún commit todavía"
 
-#: revision.c:2710
+#: revision.c:2720
 msgid "--first-parent is incompatible with --bisect"
 msgstr "--first-parent es incompatible con --bisect"
 
-#: revision.c:2714
+#: revision.c:2724
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L no soporta todavía formatos de diff fuera de -p y -s"
 
@@ -5706,30 +5739,30 @@
 "Puedes desactivar esta advertencias con `git config advice.ignoredHook "
 "false`."
 
-#: send-pack.c:141
+#: send-pack.c:142
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr ""
 "flush packet inesperado mientras se leía estatus de desempaquetado remoto"
 
-#: send-pack.c:143
+#: send-pack.c:144
 #, c-format
 msgid "unable to parse remote unpack status: %s"
 msgstr "no es posible analizar el estado de desempaquetado remoto: %s"
 
-#: send-pack.c:145
+#: send-pack.c:146
 #, c-format
 msgid "remote unpack failed: %s"
 msgstr "desempaquetado remoto falló: %s"
 
-#: send-pack.c:306
+#: send-pack.c:307
 msgid "failed to sign the push certificate"
 msgstr "falló al firmar el certificado de push"
 
-#: send-pack.c:420
+#: send-pack.c:421
 msgid "the receiving end does not support --signed push"
 msgstr "el final receptor no soporta --signed push"
 
-#: send-pack.c:422
+#: send-pack.c:423
 msgid ""
 "not sending a push certificate since the receiving end does not support --"
 "signed push"
@@ -5737,11 +5770,11 @@
 "no se manda un certificado de push ya que el destino no soporta push firmado "
 "(--signed )"
 
-#: send-pack.c:434
+#: send-pack.c:435
 msgid "the receiving end does not support --atomic push"
 msgstr "el destino no soporta push atómicos (--atomic)"
 
-#: send-pack.c:439
+#: send-pack.c:440
 msgid "the receiving end does not support push options"
 msgstr "el destino no soporta opciones de push"
 
@@ -5755,7 +5788,7 @@
 msgid "could not delete '%s'"
 msgstr "no se pudo borrar '%s'"
 
-#: sequencer.c:311 builtin/rebase.c:759 builtin/rebase.c:1645 builtin/rm.c:369
+#: sequencer.c:311 builtin/rebase.c:760 builtin/rebase.c:1676 builtin/rm.c:369
 #, c-format
 msgid "could not remove '%s'"
 msgstr "no se pudo eliminar'%s'"
@@ -5795,7 +5828,7 @@
 "con 'git add <rutas>' o 'git rm <rutas>'\n"
 "y haz un commit del resultado con 'git commit'"
 
-#: sequencer.c:401 sequencer.c:2909
+#: sequencer.c:401 sequencer.c:2847
 #, c-format
 msgid "could not lock '%s'"
 msgstr "no se pudo bloquear '%s'"
@@ -5805,15 +5838,15 @@
 msgid "could not write eol to '%s'"
 msgstr "no se pudo escribir EOL en '%s'"
 
-#: sequencer.c:413 sequencer.c:2714 sequencer.c:2915 sequencer.c:2929
-#: sequencer.c:3192
+#: sequencer.c:413 sequencer.c:2652 sequencer.c:2853 sequencer.c:2867
+#: sequencer.c:3130
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "falló al finalizar '%s'"
 
-#: sequencer.c:436 sequencer.c:981 sequencer.c:1655 sequencer.c:2734
-#: sequencer.c:3174 sequencer.c:3283 builtin/am.c:245 builtin/commit.c:763
-#: builtin/merge.c:1112 builtin/rebase.c:567
+#: sequencer.c:436 sequencer.c:1585 sequencer.c:2672 sequencer.c:3112
+#: sequencer.c:3221 builtin/am.c:244 builtin/commit.c:763 builtin/merge.c:1117
+#: builtin/rebase.c:568
 #, c-format
 msgid "could not read '%s'"
 msgstr "no se pudo leer '%s'"
@@ -5840,70 +5873,65 @@
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase -i".
 #.
-#: sequencer.c:632
+#: sequencer.c:631
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s: Incapaz de escribir el nuevo archivo índice"
 
-#: sequencer.c:649
+#: sequencer.c:648
 msgid "unable to update cache tree"
 msgstr "no es posible actualizar el árbol de la caché"
 
-#: sequencer.c:663
+#: sequencer.c:662
 msgid "could not resolve HEAD commit"
 msgstr "no se pudo resolver el commit de HEAD"
 
-#: sequencer.c:743
+#: sequencer.c:742
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr "no hay llave presente en '%.*s'"
 
-#: sequencer.c:754
+#: sequencer.c:753
 #, c-format
 msgid "unable to dequote value of '%s'"
 msgstr "no es posible dequote para '%s'"
 
-#: sequencer.c:791 wrapper.c:227 wrapper.c:397 builtin/am.c:706
-#: builtin/am.c:798 builtin/merge.c:1109 builtin/rebase.c:1045
+#: sequencer.c:790 wrapper.c:190 wrapper.c:360 builtin/am.c:705
+#: builtin/am.c:797 builtin/merge.c:1114 builtin/rebase.c:1046
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "no se pudo abrir '%s' para lectura"
 
-#: sequencer.c:801
+#: sequencer.c:800
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr "'GIT_AUTHOR_NAME' ya proporcionado"
 
-#: sequencer.c:806
+#: sequencer.c:805
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr "'GIT_AUTHOR_EMAIL' ya proporcionado"
 
-#: sequencer.c:811
+#: sequencer.c:810
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr "'GIT_AUTHOR_DATE' ya proporcionado"
 
-#: sequencer.c:815
+#: sequencer.c:814
 #, c-format
 msgid "unknown variable '%s'"
 msgstr "variable desconocida '%s'"
 
-#: sequencer.c:820
+#: sequencer.c:819
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr "falta 'GIT_AUTHOR_NAME'"
 
-#: sequencer.c:822
+#: sequencer.c:821
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr "falta 'GIT_AUTHOR_EMAIL'"
 
-#: sequencer.c:824
+#: sequencer.c:823
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr "falta 'GIT_AUTHOR_DATE'"
 
-#: sequencer.c:884
-#, c-format
-msgid "invalid date format '%s' in '%s'"
-msgstr "formato de fecha inválido '%s' en '%s'"
-
-#: sequencer.c:901
+#: sequencer.c:872
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -5933,15 +5961,11 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:995
-msgid "writing root commit"
-msgstr "escribiendo commit raíz"
-
-#: sequencer.c:1216
+#: sequencer.c:1146
 msgid "'prepare-commit-msg' hook failed"
 msgstr "hook 'prepare-commit-msg' falló"
 
-#: sequencer.c:1223
+#: sequencer.c:1153
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -5968,7 +5992,7 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1236
+#: sequencer.c:1166
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -5992,325 +6016,325 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1278
+#: sequencer.c:1208
 msgid "couldn't look up newly created commit"
 msgstr "no se pudo revisar el commit recién creado"
 
-#: sequencer.c:1280
+#: sequencer.c:1210
 msgid "could not parse newly created commit"
 msgstr "no se pudo analizar el commit recién creado"
 
-#: sequencer.c:1326
+#: sequencer.c:1256
 msgid "unable to resolve HEAD after creating commit"
 msgstr "no se pudo resolver HEAD tras crear el commit"
 
-#: sequencer.c:1328
+#: sequencer.c:1258
 msgid "detached HEAD"
 msgstr "HEAD desacoplado"
 
-#: sequencer.c:1332
+#: sequencer.c:1262
 msgid " (root-commit)"
 msgstr " (commit-raíz)"
 
-#: sequencer.c:1353
+#: sequencer.c:1283
 msgid "could not parse HEAD"
 msgstr "no se pudo analizar HEAD"
 
-#: sequencer.c:1355
+#: sequencer.c:1285
 #, c-format
 msgid "HEAD %s is not a commit!"
-msgstr "HEAD %s no es un commit!"
+msgstr "¡HEAD %s no es un commit!"
 
-#: sequencer.c:1359 builtin/commit.c:1571
+#: sequencer.c:1289 builtin/commit.c:1571
 msgid "could not parse HEAD commit"
 msgstr "no se pudo analizar el commit de HEAD"
 
-#: sequencer.c:1411 sequencer.c:2004
+#: sequencer.c:1341 sequencer.c:1933
 msgid "unable to parse commit author"
 msgstr "no es posible analizar el autor del commit"
 
-#: sequencer.c:1421 builtin/am.c:1573 builtin/merge.c:684
+#: sequencer.c:1352 builtin/am.c:1561 builtin/merge.c:684
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree falló al escribir el árbol"
 
-#: sequencer.c:1438 sequencer.c:1499
+#: sequencer.c:1369 sequencer.c:1429
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "no se puede leer el mensaje del commit de '%s'"
 
-#: sequencer.c:1465 builtin/am.c:1595 builtin/commit.c:1670 builtin/merge.c:878
-#: builtin/merge.c:903
+#: sequencer.c:1396 builtin/am.c:1583 builtin/commit.c:1670 builtin/merge.c:883
+#: builtin/merge.c:908
 msgid "failed to write commit object"
 msgstr "falló al escribir el objeto commit"
 
-#: sequencer.c:1526
+#: sequencer.c:1456
 #, c-format
 msgid "could not parse commit %s"
 msgstr "no se pudo analizar commit %s"
 
-#: sequencer.c:1531
+#: sequencer.c:1461
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "no se pudo analizar el commit padre %s"
 
-#: sequencer.c:1605 sequencer.c:1715
+#: sequencer.c:1535 sequencer.c:1645
 #, c-format
 msgid "unknown command: %d"
 msgstr "comando desconocido: %d"
 
-#: sequencer.c:1662 sequencer.c:1687
+#: sequencer.c:1592 sequencer.c:1617
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr "Esta es una combinación de %d commits."
 
-#: sequencer.c:1672
+#: sequencer.c:1602
 msgid "need a HEAD to fixup"
 msgstr "se necesita un HEAD para arreglar"
 
-#: sequencer.c:1674 sequencer.c:3219
+#: sequencer.c:1604 sequencer.c:3157
 msgid "could not read HEAD"
 msgstr "no se pudo leer HEAD"
 
-#: sequencer.c:1676
+#: sequencer.c:1606
 msgid "could not read HEAD's commit message"
 msgstr "no se pudo leer el mensaje de commit de HEAD"
 
-#: sequencer.c:1682
+#: sequencer.c:1612
 #, c-format
 msgid "cannot write '%s'"
 msgstr "no se puede escribir '%s'"
 
-#: sequencer.c:1689 git-rebase--preserve-merges.sh:496
+#: sequencer.c:1619 git-rebase--preserve-merges.sh:496
 msgid "This is the 1st commit message:"
 msgstr "Este es el mensaje del 1er commit:"
 
-#: sequencer.c:1697
+#: sequencer.c:1627
 #, c-format
 msgid "could not read commit message of %s"
 msgstr "no se puede leer el mensaje del commit de %s"
 
-#: sequencer.c:1704
+#: sequencer.c:1634
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Este es el mensaje del commit #%d:"
 
-#: sequencer.c:1710
+#: sequencer.c:1640
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "El mensaje del commit #%d será saltado:"
 
-#: sequencer.c:1798
+#: sequencer.c:1728
 msgid "your index file is unmerged."
 msgstr "tu archivo índice no está fusionado."
 
-#: sequencer.c:1805
+#: sequencer.c:1735
 msgid "cannot fixup root commit"
 msgstr "no se puede arreglar el commit raíz"
 
-#: sequencer.c:1824
+#: sequencer.c:1754
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "el commit %s es una fusión pero no se proporcionó la opción -m."
 
-#: sequencer.c:1832 sequencer.c:1840
+#: sequencer.c:1762 sequencer.c:1770
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "el commit %s no tiene un padre %d"
 
-#: sequencer.c:1846
+#: sequencer.c:1776
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "no se puede obtener el mensaje de commit para %s"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:1865
+#: sequencer.c:1795
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: no se puede analizar el commit padre %s"
 
-#: sequencer.c:1930
+#: sequencer.c:1860
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "no se puede renombrar '%s' a '%s'"
 
-#: sequencer.c:1985
+#: sequencer.c:1915
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "no se pudo revertir %s... %s"
 
-#: sequencer.c:1986
+#: sequencer.c:1916
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "no se pudo aplicar %s... %s"
 
-#: sequencer.c:2045
+#: sequencer.c:1983
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: falló al leer el índice"
 
-#: sequencer.c:2052
+#: sequencer.c:1990
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: falló al refrescar el índice"
 
-#: sequencer.c:2128
+#: sequencer.c:2066
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s no acepta los argumentos: '%s'"
 
-#: sequencer.c:2137
+#: sequencer.c:2075
 #, c-format
 msgid "missing arguments for %s"
 msgstr "faltan argumentos para para %s"
 
-#: sequencer.c:2174
+#: sequencer.c:2112
 #, c-format
 msgid "could not parse '%.*s'"
 msgstr "no se puede analizar '%.*s'"
 
-#: sequencer.c:2228
+#: sequencer.c:2166
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "línea inválida %d: %.*s"
 
-#: sequencer.c:2239
+#: sequencer.c:2177
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "no se puede  '%s' sin un commit previo"
 
-#: sequencer.c:2287 builtin/rebase.c:153 builtin/rebase.c:178
+#: sequencer.c:2225 builtin/rebase.c:153 builtin/rebase.c:178
 #: builtin/rebase.c:204 builtin/rebase.c:229
 #, c-format
 msgid "could not read '%s'."
 msgstr "no se puede leer '%s'."
 
-#: sequencer.c:2323
+#: sequencer.c:2261
 msgid "cancelling a cherry picking in progress"
 msgstr "cancelando cherry-pick en progreso"
 
-#: sequencer.c:2330
+#: sequencer.c:2268
 msgid "cancelling a revert in progress"
 msgstr "cancelando revert en progreso"
 
-#: sequencer.c:2364
+#: sequencer.c:2302
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "por favor arregle esto usando 'git rebase --edit-todo'."
 
-#: sequencer.c:2366
+#: sequencer.c:2304
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "hoja de instrucciones inutilizable: '%s'"
 
-#: sequencer.c:2371
+#: sequencer.c:2309
 msgid "no commits parsed."
 msgstr "ningún commit analizado."
 
-#: sequencer.c:2382
+#: sequencer.c:2320
 msgid "cannot cherry-pick during a revert."
 msgstr "no se puede realizar cherry-pick durante un revert."
 
-#: sequencer.c:2384
+#: sequencer.c:2322
 msgid "cannot revert during a cherry-pick."
 msgstr "no se puede realizar un revert durante un cherry-pick."
 
-#: sequencer.c:2466
+#: sequencer.c:2404
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr "valor inválido para %s: %s"
 
-#: sequencer.c:2553
+#: sequencer.c:2491
 msgid "unusable squash-onto"
 msgstr "squash-onto inservible"
 
-#: sequencer.c:2569
+#: sequencer.c:2507
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "hoja de opciones mal formada: '%s'"
 
-#: sequencer.c:2652 sequencer.c:4351
+#: sequencer.c:2590 sequencer.c:4308
 msgid "empty commit set passed"
 msgstr "conjunto de commits vacío entregado"
 
-#: sequencer.c:2668
+#: sequencer.c:2606
 msgid "revert is already in progress"
 msgstr "revert ya está en progreso"
 
-#: sequencer.c:2670
+#: sequencer.c:2608
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "intenta \"git revert (--continue | --quit | %s --abort)\""
 
-#: sequencer.c:2673
+#: sequencer.c:2611
 msgid "cherry-pick is already in progress"
 msgstr "cherry-pick ya está en progreso"
 
-#: sequencer.c:2675
+#: sequencer.c:2613
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "intenta \"git cherry-pick (--continue | --quit | %s --abort)\""
 
-#: sequencer.c:2689
+#: sequencer.c:2627
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "no se pudo crear un directorio secuenciador '%s'"
 
-#: sequencer.c:2704
+#: sequencer.c:2642
 msgid "could not lock HEAD"
 msgstr "no se pudo bloquear HEAD"
 
-#: sequencer.c:2764 sequencer.c:4103
+#: sequencer.c:2702 sequencer.c:4057
 msgid "no cherry-pick or revert in progress"
 msgstr "ningún cherry-pick o revert en progreso"
 
-#: sequencer.c:2766 sequencer.c:2777
+#: sequencer.c:2704 sequencer.c:2715
 msgid "cannot resolve HEAD"
 msgstr "no se puede resolver HEAD"
 
-#: sequencer.c:2768 sequencer.c:2812
+#: sequencer.c:2706 sequencer.c:2750
 msgid "cannot abort from a branch yet to be born"
 msgstr "no se puede abortar de una rama por nacer"
 
-#: sequencer.c:2798 builtin/grep.c:734
+#: sequencer.c:2736 builtin/grep.c:736
 #, c-format
 msgid "cannot open '%s'"
 msgstr "no se puede abrir '%s'"
 
-#: sequencer.c:2800
+#: sequencer.c:2738
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "no se puede leer '%s': %s"
 
-#: sequencer.c:2801
+#: sequencer.c:2739
 msgid "unexpected end of file"
 msgstr "final de archivo inesperado"
 
-#: sequencer.c:2807
+#: sequencer.c:2745
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "archivo HEAD de pre-cherry-pick guardado '%s' está corrupto"
 
-#: sequencer.c:2818
+#: sequencer.c:2756
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
-msgstr "Parece que se ha movido HEAD. No se hace rebobinado, revisa tu HEAD!"
+msgstr "Parece que se ha movido HEAD. No se hace rebobinado, ¡revisa tu HEAD!"
 
-#: sequencer.c:2859
+#: sequencer.c:2797
 msgid "no revert in progress"
 msgstr "no hay revert en progreso"
 
-#: sequencer.c:2867
+#: sequencer.c:2805
 msgid "no cherry-pick in progress"
 msgstr "ningún cherry-pick en progreso"
 
-#: sequencer.c:2877
+#: sequencer.c:2815
 msgid "failed to skip the commit"
 msgstr "falló al escribir el commit"
 
-#: sequencer.c:2884
+#: sequencer.c:2822
 msgid "there is nothing to skip"
 msgstr "no hay nada que saltar"
 
-#: sequencer.c:2887
+#: sequencer.c:2825
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -6319,21 +6343,21 @@
 "¿ya has hecho el commit?\n"
 "intenta \"git %s --continue\""
 
-#: sequencer.c:3011 sequencer.c:4015
+#: sequencer.c:2949 sequencer.c:3969
 #, c-format
 msgid "could not update %s"
 msgstr "no se puede actualizar %s"
 
-#: sequencer.c:3049 sequencer.c:3995
+#: sequencer.c:2987 sequencer.c:3949
 msgid "cannot read HEAD"
 msgstr "no se puede leer HEAD"
 
-#: sequencer.c:3066
+#: sequencer.c:3004
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "no se pudo copiar '%s' a '%s'"
 
-#: sequencer.c:3074
+#: sequencer.c:3012
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -6352,27 +6376,27 @@
 "\n"
 "\tgit rebase --continue\n"
 
-#: sequencer.c:3084
+#: sequencer.c:3022
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "No se pudo aplicar %s... %.*s"
 
-#: sequencer.c:3091
+#: sequencer.c:3029
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "No se pudo fusionar %.*s"
 
-#: sequencer.c:3105 sequencer.c:3109 builtin/difftool.c:633
+#: sequencer.c:3043 sequencer.c:3047 builtin/difftool.c:641
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "no se pudo copiar '%s' a '%s'"
 
-#: sequencer.c:3131 sequencer.c:3558 builtin/rebase.c:849 builtin/rebase.c:1582
-#: builtin/rebase.c:1953 builtin/rebase.c:2008
+#: sequencer.c:3069 sequencer.c:3506 builtin/rebase.c:850 builtin/rebase.c:1613
+#: builtin/rebase.c:1987 builtin/rebase.c:2031
 msgid "could not read index"
 msgstr "no se pudo leer índice"
 
-#: sequencer.c:3136
+#: sequencer.c:3074
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -6387,11 +6411,11 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3142
+#: sequencer.c:3080
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "y se hicieron cambios al índice y/o árbol de trabajo\n"
 
-#: sequencer.c:3148
+#: sequencer.c:3086
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -6408,76 +6432,76 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3209
+#: sequencer.c:3147
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "nombre de label ilegal: '%.*s'"
 
-#: sequencer.c:3263
+#: sequencer.c:3201
 msgid "writing fake root commit"
 msgstr "escribiendo commit raíz falso"
 
-#: sequencer.c:3268
+#: sequencer.c:3206
 msgid "writing squash-onto"
 msgstr "escribiendo squash-onto"
 
-#: sequencer.c:3306 builtin/rebase.c:854 builtin/rebase.c:860
+#: sequencer.c:3244 builtin/rebase.c:855 builtin/rebase.c:861
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "falló al encontrar árbol de %s"
 
-#: sequencer.c:3324 builtin/rebase.c:873
+#: sequencer.c:3262 builtin/rebase.c:874
 msgid "could not write index"
 msgstr "no se pudo escribir índice"
 
-#: sequencer.c:3351
+#: sequencer.c:3289
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "no se pudo resolver '%s'"
 
-#: sequencer.c:3379
+#: sequencer.c:3320
 msgid "cannot merge without a current revision"
 msgstr "no se puede fusionar sin una versión actual"
 
-#: sequencer.c:3401
+#: sequencer.c:3342
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "no se puede analizar '%.*s'"
 
-#: sequencer.c:3410
+#: sequencer.c:3351
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "nada para fusionar: '%.*s'"
 
-#: sequencer.c:3422
+#: sequencer.c:3363
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr "fusión octopus no puede ser ejecutada en la punta de un [nuevo root]"
 
-#: sequencer.c:3437
+#: sequencer.c:3378
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "no se puede leer el mensaje del commit '%s'"
 
-#: sequencer.c:3590
+#: sequencer.c:3538
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "no se pudo intentar fusionar '%.*s'"
 
-#: sequencer.c:3606
+#: sequencer.c:3554
 msgid "merge: Unable to write new index file"
 msgstr "fusión: No se puede escribir el nuevo archivo índice"
 
-#: sequencer.c:3675 builtin/rebase.c:711
+#: sequencer.c:3623 builtin/rebase.c:712
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Autostash aplicado.\n"
 
-#: sequencer.c:3687
+#: sequencer.c:3635
 #, c-format
 msgid "cannot store %s"
 msgstr "no se puede guardar %s"
 
-#: sequencer.c:3690 builtin/rebase.c:727 git-rebase--preserve-merges.sh:113
+#: sequencer.c:3638 builtin/rebase.c:728 git-rebase--preserve-merges.sh:113
 #, c-format
 msgid ""
 "Applying autostash resulted in conflicts.\n"
@@ -6489,31 +6513,31 @@
 "Puedes ejecutar \"git stash pop\" o \"git stash drop\" en cualquier "
 "momento.\n"
 
-#: sequencer.c:3751
+#: sequencer.c:3699
 #, c-format
 msgid "could not checkout %s"
 msgstr "no se puede hacer checkout a %s"
 
-#: sequencer.c:3765
+#: sequencer.c:3713
 #, c-format
 msgid "%s: not a valid OID"
 msgstr "%s no es OID válido"
 
-#: sequencer.c:3770 git-rebase--preserve-merges.sh:779
+#: sequencer.c:3718 git-rebase--preserve-merges.sh:779
 msgid "could not detach HEAD"
 msgstr "no se puede desacoplar HEAD"
 
-#: sequencer.c:3785
+#: sequencer.c:3733
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "Detenido en HEAD\n"
 
-#: sequencer.c:3787
+#: sequencer.c:3735
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Detenido en %s\n"
 
-#: sequencer.c:3795
+#: sequencer.c:3743
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -6534,48 +6558,48 @@
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:3877
+#: sequencer.c:3827
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Detenido en %s...  %.*s\n"
 
-#: sequencer.c:3958
+#: sequencer.c:3898
 #, c-format
 msgid "unknown command %d"
 msgstr "comando desconocido %d"
 
-#: sequencer.c:4003
+#: sequencer.c:3957
 msgid "could not read orig-head"
 msgstr "no se puede leer orig-head"
 
-#: sequencer.c:4008
+#: sequencer.c:3962
 msgid "could not read 'onto'"
 msgstr "no se puede leer 'onto'"
 
-#: sequencer.c:4022
+#: sequencer.c:3976
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "no se puede actualizar HEAD a %s"
 
-#: sequencer.c:4115
+#: sequencer.c:4069
 msgid "cannot rebase: You have unstaged changes."
 msgstr "no se puede realizar rebase: Tienes cambios fuera del área de stage."
 
-#: sequencer.c:4124
+#: sequencer.c:4078
 msgid "cannot amend non-existing commit"
 msgstr "no se puede arreglar un commit no existente"
 
-#: sequencer.c:4126
+#: sequencer.c:4080
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "archivo inválido: '%s'"
 
-#: sequencer.c:4128
+#: sequencer.c:4082
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "contenido inválido: '%s'"
 
-#: sequencer.c:4131
+#: sequencer.c:4085
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -6586,42 +6610,42 @@
 "un commit con estos\n"
 "primero y luego ejecuta 'git rebase --continue' de nuevo."
 
-#: sequencer.c:4167 sequencer.c:4205
+#: sequencer.c:4121 sequencer.c:4159
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "no se pudo escribir el archivo: '%s'"
 
-#: sequencer.c:4220
+#: sequencer.c:4174
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "no se puede eliminar CHERRY_PICK_HEAD"
 
-#: sequencer.c:4227
+#: sequencer.c:4181
 msgid "could not commit staged changes."
 msgstr "no se pudo realizar el commit con los cambios en el área de stage."
 
-#: sequencer.c:4328
+#: sequencer.c:4285
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: no se puede aplicar cherry-pick a un %s"
 
-#: sequencer.c:4332
+#: sequencer.c:4289
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: revisión errónea"
 
-#: sequencer.c:4367
+#: sequencer.c:4324
 msgid "can't revert as initial commit"
 msgstr "no se puede revertir como commit inicial"
 
-#: sequencer.c:4810
+#: sequencer.c:4774
 msgid "make_script: unhandled options"
 msgstr "make_script: opciones desconocidas"
 
-#: sequencer.c:4813
+#: sequencer.c:4777
 msgid "make_script: error preparing revisions"
 msgstr "make_script: error preparando revisiones"
 
-#: sequencer.c:4971
+#: sequencer.c:4935
 msgid ""
 "You can fix this with 'git rebase --edit-todo' and then run 'git rebase --"
 "continue'.\n"
@@ -6631,24 +6655,24 @@
 "rebase --continue'.\n"
 "O se puede abortar el rebase con 'git rebase --abort'.\n"
 
-#: sequencer.c:5083 sequencer.c:5100
+#: sequencer.c:5047 sequencer.c:5064
 msgid "nothing to do"
 msgstr "nada que hacer"
 
-#: sequencer.c:5114
+#: sequencer.c:5078
 msgid "could not skip unnecessary pick commands"
 msgstr "no se pudo saltar los comandos pick innecesarios"
 
-#: sequencer.c:5197
+#: sequencer.c:5166
 msgid "the script was already rearranged."
 msgstr "este script ya fue reorganizado."
 
-#: setup.c:123
+#: setup.c:124
 #, c-format
 msgid "'%s' is outside repository"
 msgstr "'%s' está fuera del repositorio"
 
-#: setup.c:173
+#: setup.c:174
 #, c-format
 msgid ""
 "%s: no such path in the working tree.\n"
@@ -6658,7 +6682,7 @@
 "Use 'git <comando> -- <ruta>...' para especificar rutas que no existen "
 "localmente."
 
-#: setup.c:186
+#: setup.c:187
 #, c-format
 msgid ""
 "ambiguous argument '%s': unknown revision or path not in the working tree.\n"
@@ -6670,12 +6694,12 @@
 "Use '--' para separar las rutas de las revisiones, de esta manera:\n"
 "'git <comando> [<revisión>...] -- [<archivo>...]'"
 
-#: setup.c:235
+#: setup.c:236
 #, c-format
 msgid "option '%s' must come before non-option arguments"
 msgstr "opción '%s' debe venir antes de argumentos no opcionales"
 
-#: setup.c:254
+#: setup.c:255
 #, c-format
 msgid ""
 "ambiguous argument '%s': both revision and filename\n"
@@ -6686,95 +6710,95 @@
 "Use '--' para separar rutas de revisiones, de esta manera:\n"
 "'git <comando> [<revisión>...] -- [<archivo>...]'"
 
-#: setup.c:390
+#: setup.c:391
 msgid "unable to set up work tree using invalid config"
 msgstr ""
 "no es posible configurar el directorio de trabajo usando una configuración "
 "inválida"
 
-#: setup.c:394
+#: setup.c:395
 msgid "this operation must be run in a work tree"
 msgstr "esta operación debe ser realizada en un árbol de trabajo"
 
-#: setup.c:540
+#: setup.c:541
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
 msgstr "Se esperaba versión de git repo  <= %d, encontrada %d"
 
-#: setup.c:548
+#: setup.c:549
 msgid "unknown repository extensions found:"
 msgstr "se encontró extensión de repositorio desconocida:"
 
-#: setup.c:567
+#: setup.c:568
 #, c-format
 msgid "error opening '%s'"
 msgstr "error abriendo '%s'"
 
-#: setup.c:569
+#: setup.c:570
 #, c-format
 msgid "too large to be a .git file: '%s'"
 msgstr "muy grande para ser un archivo .git: '%s'"
 
-#: setup.c:571
+#: setup.c:572
 #, c-format
 msgid "error reading %s"
 msgstr "error leyendo %s"
 
-#: setup.c:573
+#: setup.c:574
 #, c-format
 msgid "invalid gitfile format: %s"
 msgstr "formato gitfile inválido: %s"
 
-#: setup.c:575
+#: setup.c:576
 #, c-format
 msgid "no path in gitfile: %s"
 msgstr "no hay ruta en gitfile: %s"
 
-#: setup.c:577
+#: setup.c:578
 #, c-format
 msgid "not a git repository: %s"
 msgstr "no es un repositorio git: %s"
 
-#: setup.c:676
+#: setup.c:677
 #, c-format
 msgid "'$%s' too big"
 msgstr "'$%s' muy grande"
 
-#: setup.c:690
+#: setup.c:691
 #, c-format
 msgid "not a git repository: '%s'"
 msgstr "no es un repositorio git: '%s'"
 
-#: setup.c:719 setup.c:721 setup.c:752
+#: setup.c:720 setup.c:722 setup.c:753
 #, c-format
 msgid "cannot chdir to '%s'"
 msgstr "no se puede aplicar chdir a '%s'"
 
-#: setup.c:724 setup.c:780 setup.c:790 setup.c:829 setup.c:837
+#: setup.c:725 setup.c:781 setup.c:791 setup.c:830 setup.c:838
 msgid "cannot come back to cwd"
 msgstr "no se puede volver a cwd"
 
-#: setup.c:851
+#: setup.c:852
 #, c-format
 msgid "failed to stat '%*s%s%s'"
 msgstr "falló al determinar '%*s%s%s'"
 
-#: setup.c:1083
+#: setup.c:1090
 msgid "Unable to read current working directory"
 msgstr "Incapaz de leer el directorio de trabajo actual"
 
-#: setup.c:1092 setup.c:1098
+#: setup.c:1099 setup.c:1105
 #, c-format
 msgid "cannot change to '%s'"
 msgstr "no se puede cambiar a '%s'"
 
-#: setup.c:1103
+#: setup.c:1110
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
 msgstr ""
 "no es un repositorio git (ni ninguno de los directorios superiores): %s"
 
-#: setup.c:1109
+#: setup.c:1116
 #, c-format
 msgid ""
 "not a git repository (or any parent up to mount point %s)\n"
@@ -6784,7 +6808,7 @@
 "Parando en el límite del sistema de archivos "
 "(GIT_DISCOVERY_ACROSS_FILESYSTEM no establecido)."
 
-#: setup.c:1220
+#: setup.c:1227
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -6793,286 +6817,286 @@
 "problema con el valor del modo de archivo core.sharedRepository (0%.3o).\n"
 "El dueño de los archivos tiene que tener permisos de lectura y escritura."
 
-#: setup.c:1264
+#: setup.c:1271
 msgid "open /dev/null or dup failed"
 msgstr "falló al abrir /dev/null o dup"
 
-#: setup.c:1279
+#: setup.c:1286
 msgid "fork failed"
 msgstr "falló fork"
 
-#: setup.c:1284
+#: setup.c:1291
 msgid "setsid failed"
 msgstr "falló setsid"
 
-#: sha1-file.c:453
+#: sha1-file.c:452
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr "objeto directorio %s no existe; revisa .git/objects/info/alternates"
 
-#: sha1-file.c:504
+#: sha1-file.c:503
 #, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr "incapaz de normalizar la ruta de objeto alterno: %s"
 
-#: sha1-file.c:576
+#: sha1-file.c:575
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr "%s: ignorando espacios de objetos alternos, anidado muy profundo"
 
-#: sha1-file.c:583
+#: sha1-file.c:582
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr "incapaz de normalizar directorio de objeto: %s"
 
-#: sha1-file.c:626
+#: sha1-file.c:625
 msgid "unable to fdopen alternates lockfile"
 msgstr "no es posible hacer fdopen en lockfile alternos"
 
-#: sha1-file.c:644
+#: sha1-file.c:643
 msgid "unable to read alternates file"
 msgstr "no es posible leer archivos alternos"
 
-#: sha1-file.c:651
+#: sha1-file.c:650
 msgid "unable to move new alternates file into place"
 msgstr "no es posible mover archivos alternos en el lugar"
 
-#: sha1-file.c:686
+#: sha1-file.c:685
 #, c-format
 msgid "path '%s' does not exist"
 msgstr "ruta '%s' no existe"
 
-#: sha1-file.c:712
+#: sha1-file.c:711
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr ""
 "repositorio de referencia '%s' como un checkout vinculado no es soportado "
 "todavía."
 
-#: sha1-file.c:718
+#: sha1-file.c:717
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "repositorio de referencia '%s' no es un repositorio local."
 
-#: sha1-file.c:724
+#: sha1-file.c:723
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr "repositorio de referencia '%s' es superficial (shallow)"
 
-#: sha1-file.c:732
+#: sha1-file.c:731
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr "repositorio de referencia '% s' está injertado"
 
-#: sha1-file.c:792
+#: sha1-file.c:791
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr "línea inválida mientras se analizaban refs alternas: %s"
 
-#: sha1-file.c:944
+#: sha1-file.c:943
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr "intentando usar mmap %<PRIuMAX> sobre límite %<PRIuMAX>"
 
-#: sha1-file.c:969
+#: sha1-file.c:964
 msgid "mmap failed"
 msgstr "mmap falló"
 
-#: sha1-file.c:1133
+#: sha1-file.c:1128
 #, c-format
 msgid "object file %s is empty"
 msgstr "archivo de objeto %s está vacío"
 
-#: sha1-file.c:1257 sha1-file.c:2396
+#: sha1-file.c:1252 sha1-file.c:2392
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr "objeto perdido corrupto '%s'"
 
-#: sha1-file.c:1259 sha1-file.c:2400
+#: sha1-file.c:1254 sha1-file.c:2396
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr "basura al final del objeto perdido '%s'"
 
-#: sha1-file.c:1301
+#: sha1-file.c:1296
 msgid "invalid object type"
 msgstr "tipo de objeto inválido"
 
-#: sha1-file.c:1385
+#: sha1-file.c:1380
 #, c-format
 msgid "unable to unpack %s header with --allow-unknown-type"
 msgstr "no es posible desempacar header %s con --allow-unknown-type"
 
-#: sha1-file.c:1388
+#: sha1-file.c:1383
 #, c-format
 msgid "unable to unpack %s header"
 msgstr "incapaz de desempaquetar header %s"
 
-#: sha1-file.c:1394
+#: sha1-file.c:1389
 #, c-format
 msgid "unable to parse %s header with --allow-unknown-type"
 msgstr "no es posible analizar header %s con --allow-unknown-type"
 
-#: sha1-file.c:1397
+#: sha1-file.c:1392
 #, c-format
 msgid "unable to parse %s header"
 msgstr "incapaz de analizar header %s"
 
-#: sha1-file.c:1588
+#: sha1-file.c:1584
 #, c-format
 msgid "failed to read object %s"
 msgstr "falló al leer objeto %s"
 
-#: sha1-file.c:1592
+#: sha1-file.c:1588
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr "reemplazo %s no encontrado para %s"
 
-#: sha1-file.c:1596
+#: sha1-file.c:1592
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr "objeto perdido %s (guardado en %s) está corrompido"
 
-#: sha1-file.c:1600
+#: sha1-file.c:1596
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr "paquete de objeto %s (guardado en %s) está corrompido"
 
-#: sha1-file.c:1703
+#: sha1-file.c:1699
 #, c-format
 msgid "unable to write file %s"
 msgstr "no es posible escribir archivo %s"
 
-#: sha1-file.c:1710
+#: sha1-file.c:1706
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr "no se pudo poner permisos a '%s'"
 
-#: sha1-file.c:1717
+#: sha1-file.c:1713
 msgid "file write error"
 msgstr "falló de escritura"
 
-#: sha1-file.c:1736
+#: sha1-file.c:1732
 msgid "error when closing loose object file"
 msgstr "error cerrando el archivo de objeto suelto"
 
-#: sha1-file.c:1801
+#: sha1-file.c:1797
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr ""
 "permisos insuficientes para agregar un objeto a la base de datos del "
 "repositorio %s"
 
-#: sha1-file.c:1803
+#: sha1-file.c:1799
 msgid "unable to create temporary file"
 msgstr "no es posible crear un archivo temporal"
 
-#: sha1-file.c:1827
+#: sha1-file.c:1823
 msgid "unable to write loose object file"
 msgstr "no es posible escribir el archivo de objeto suelto"
 
-#: sha1-file.c:1833
+#: sha1-file.c:1829
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr "no es posible desinflar el objeto nuevo %s (%d)"
 
-#: sha1-file.c:1837
+#: sha1-file.c:1833
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr "deflateEnd en objeto %s falló (%d)"
 
-#: sha1-file.c:1841
+#: sha1-file.c:1837
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr "confundido por fuente de data de objetos inestable para %s"
 
-#: sha1-file.c:1851 builtin/pack-objects.c:925
+#: sha1-file.c:1847 builtin/pack-objects.c:925
 #, c-format
 msgid "failed utime() on %s"
 msgstr "falló utime() en %s"
 
-#: sha1-file.c:1926
+#: sha1-file.c:1922
 #, c-format
 msgid "cannot read object for %s"
 msgstr "no se pudo leer el objeto para %s"
 
-#: sha1-file.c:1966
+#: sha1-file.c:1962
 msgid "corrupt commit"
 msgstr "commit corrupto"
 
-#: sha1-file.c:1974
+#: sha1-file.c:1970
 msgid "corrupt tag"
 msgstr "tag corrupto"
 
-#: sha1-file.c:2073
+#: sha1-file.c:2069
 #, c-format
 msgid "read error while indexing %s"
 msgstr "error leyendo al indexar %s"
 
-#: sha1-file.c:2076
+#: sha1-file.c:2072
 #, c-format
 msgid "short read while indexing %s"
 msgstr "lectura corta al indexar %s"
 
-#: sha1-file.c:2149 sha1-file.c:2158
+#: sha1-file.c:2145 sha1-file.c:2154
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr "%s: falló al insertar en la base de datos"
 
-#: sha1-file.c:2164
+#: sha1-file.c:2160
 #, c-format
 msgid "%s: unsupported file type"
 msgstr "%s: tipo de archivo no soportado"
 
-#: sha1-file.c:2188
+#: sha1-file.c:2184
 #, c-format
 msgid "%s is not a valid object"
 msgstr "%s no es objeto válido"
 
-#: sha1-file.c:2190
+#: sha1-file.c:2186
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr "%s no es un objeto '%s' válido"
 
-#: sha1-file.c:2217 builtin/index-pack.c:155
+#: sha1-file.c:2213 builtin/index-pack.c:155
 #, c-format
 msgid "unable to open %s"
 msgstr "no es posible abrir %s"
 
-#: sha1-file.c:2407 sha1-file.c:2459
+#: sha1-file.c:2403 sha1-file.c:2455
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr "hash no concuerda para %s (se esperaba %s)"
 
-#: sha1-file.c:2431
+#: sha1-file.c:2427
 #, c-format
 msgid "unable to mmap %s"
 msgstr "no es posible hacer mmap a %s"
 
-#: sha1-file.c:2436
+#: sha1-file.c:2432
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr "incapaz de desempaquetar header de %s"
 
-#: sha1-file.c:2442
+#: sha1-file.c:2438
 #, c-format
 msgid "unable to parse header of %s"
 msgstr "incapaz de analizar header de %s"
 
-#: sha1-file.c:2453
+#: sha1-file.c:2449
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr "no es posible desempaquetar contenidos de %s"
 
-#: sha1-name.c:490
+#: sha1-name.c:487
 #, c-format
 msgid "short SHA1 %s is ambiguous"
 msgstr "SHA1 %s corto es ambiguo"
 
-#: sha1-name.c:501
+#: sha1-name.c:498
 msgid "The candidates are:"
 msgstr "Los candidatos son:"
 
-#: sha1-name.c:800
+#: sha1-name.c:797
 msgid ""
 "Git normally never creates a ref that ends with 40 hex characters\n"
 "because it will be ignored when you just specify 40-hex. These refs\n"
@@ -7096,43 +7120,43 @@
 "ejecutando \"git config advice.objectNameWarning false\""
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:821
+#: strbuf.c:822
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:823
+#: strbuf.c:824
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u GiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:831
+#: strbuf.c:832
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:833
+#: strbuf.c:834
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u MiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:840
+#: strbuf.c:841
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:842
+#: strbuf.c:843
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u KiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:848
+#: strbuf.c:849
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -7140,7 +7164,7 @@
 msgstr[1] "%u bytes"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:850
+#: strbuf.c:851
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
@@ -7258,28 +7282,28 @@
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree devolvió un código %d inesperado"
 
-#: submodule-config.c:232
+#: submodule-config.c:236
 #, c-format
 msgid "ignoring suspicious submodule name: %s"
 msgstr "ignorando submódulo sospechoso: %s"
 
-#: submodule-config.c:299
+#: submodule-config.c:303
 msgid "negative values not allowed for submodule.fetchjobs"
 msgstr "no se permiten valores negativos para submodule.fetchjobs"
 
-#: submodule-config.c:397
+#: submodule-config.c:401
 #, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
 msgstr ""
 "ignorando '%s' ya que puede ser interpretado como una opción de línea de "
 "comando: %s"
 
-#: submodule-config.c:486
+#: submodule-config.c:490
 #, c-format
 msgid "invalid value for %s"
 msgstr "valor inválido para %s"
 
-#: submodule-config.c:755
+#: submodule-config.c:761
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr "No se pudo actualizar la entrada %s de .gitmodules"
@@ -7314,7 +7338,7 @@
 msgid "could not read from stdin"
 msgstr "no se pudo leer desde stdin"
 
-#: trailer.c:1011 wrapper.c:701
+#: trailer.c:1011 wrapper.c:665
 #, c-format
 msgid "could not stat %s"
 msgstr "no se pudo definir %s"
@@ -7343,47 +7367,47 @@
 msgid "Would set upstream of '%s' to '%s' of '%s'\n"
 msgstr "Configurará upstream de '%s' a '%s' de '%s'\n"
 
-#: transport.c:142
+#: transport.c:145
 #, c-format
 msgid "could not read bundle '%s'"
 msgstr "no se pudo leer el conjunto '%s'"
 
-#: transport.c:208
+#: transport.c:214
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr "transport: opción inválida '%s'"
 
-#: transport.c:259
+#: transport.c:266
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "ver protocol.version en 'git help config' para más información"
 
-#: transport.c:260
+#: transport.c:267
 msgid "server options require protocol version 2 or later"
 msgstr "opciones del servidor requieren protocolo versión 2 o posterior"
 
-#: transport.c:625
+#: transport.c:632
 msgid "could not parse transport.color.* config"
 msgstr "no se pudo analizar valor de configuración transport.color.*"
 
-#: transport.c:698
+#: transport.c:705
 msgid "support for protocol v2 not implemented yet"
 msgstr "soporte para protocolo v2 no implementado todavía"
 
-#: transport.c:825
+#: transport.c:831
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "valor desconocido para configuración '%s': %s"
 
-#: transport.c:891
+#: transport.c:897
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "transporte '%s' no permitido"
 
-#: transport.c:945
+#: transport.c:949
 msgid "git-over-rsync is no longer supported"
 msgstr "git-over-rsync ya no es soportado"
 
-#: transport.c:1040
+#: transport.c:1044
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -7392,7 +7416,7 @@
 "La siguiente ruta de submódulo contiene cambios que no\n"
 "pueden ser encontrados en ningún remoto:\n"
 
-#: transport.c:1044
+#: transport.c:1048
 #, c-format
 msgid ""
 "\n"
@@ -7419,32 +7443,32 @@
 "para hacer un push al remoto.\n"
 "\n"
 
-#: transport.c:1052
+#: transport.c:1056
 msgid "Aborting."
 msgstr "Abortando."
 
-#: transport.c:1193
+#: transport.c:1201
 msgid "failed to push all needed submodules"
 msgstr "falló al hacer push a todos los submódulos necesarios"
 
-#: transport.c:1340 transport-helper.c:645
+#: transport.c:1345 transport-helper.c:655
 msgid "operation not supported by protocol"
 msgstr "operación no soportada por protocolo"
 
-#: transport-helper.c:51 transport-helper.c:80
+#: transport-helper.c:61 transport-helper.c:90
 msgid "full write to remote helper failed"
 msgstr "escritura total al helper remoto falló"
 
-#: transport-helper.c:134
+#: transport-helper.c:144
 #, c-format
 msgid "unable to find remote helper for '%s'"
 msgstr "no es posible encontrar helper remoto para '%s'"
 
-#: transport-helper.c:150 transport-helper.c:559
+#: transport-helper.c:160 transport-helper.c:569
 msgid "can't dup helper output fd"
 msgstr "no se puede duplicar output de fd del helper"
 
-#: transport-helper.c:201
+#: transport-helper.c:211
 #, c-format
 msgid ""
 "unknown mandatory capability %s; this remote helper probably needs newer "
@@ -7453,99 +7477,104 @@
 "capacidad mandatoria desconocida %s; este helper remoto probablemente "
 "necesita una nueva versión de Git"
 
-#: transport-helper.c:207
+#: transport-helper.c:217
 msgid "this remote helper should implement refspec capability"
 msgstr "este helper remoto debería implementar capacidad refspec"
 
-#: transport-helper.c:274 transport-helper.c:414
+#: transport-helper.c:284 transport-helper.c:424
 #, c-format
 msgid "%s unexpectedly said: '%s'"
 msgstr "%s dijo inesperadamente: '%s'"
 
-#: transport-helper.c:403
+#: transport-helper.c:413
 #, c-format
 msgid "%s also locked %s"
 msgstr "%s también bloqueó %s"
 
-#: transport-helper.c:481
+#: transport-helper.c:491
 msgid "couldn't run fast-import"
 msgstr "no se pudo ejecutar fast-import"
 
-#: transport-helper.c:504
+#: transport-helper.c:514
 msgid "error while running fast-import"
 msgstr "error al ejecutar fast-import"
 
-#: transport-helper.c:533 transport-helper.c:1105
+#: transport-helper.c:543 transport-helper.c:1132
 #, c-format
 msgid "could not read ref %s"
 msgstr "no se pudo leer la referencia %s"
 
-#: transport-helper.c:578
+#: transport-helper.c:588
 #, c-format
 msgid "unknown response to connect: %s"
 msgstr "respuesta para conectar desconocida: %s"
 
-#: transport-helper.c:600
+#: transport-helper.c:610
 msgid "setting remote service path not supported by protocol"
 msgstr "configurando servicio de ruta remota no soportado por el protocolo"
 
-#: transport-helper.c:602
+#: transport-helper.c:612
 msgid "invalid remote service path"
 msgstr "ruta de servicio remoto inválida"
 
-#: transport-helper.c:648
+#: transport-helper.c:658
 #, c-format
 msgid "can't connect to subservice %s"
 msgstr "no se puede conectar al subservicio %s"
 
-#: transport-helper.c:720
+#: transport-helper.c:734
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "se esperaba ok/error, helper dijo '%s'"
 
-#: transport-helper.c:773
+#: transport-helper.c:787
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "helper reportó estado inesperado de %s"
 
-#: transport-helper.c:834
+#: transport-helper.c:848
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "helper %s no soporta dry-run"
 
-#: transport-helper.c:837
+#: transport-helper.c:851
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "helper %s no soporta --signed"
 
-#: transport-helper.c:840
+#: transport-helper.c:854
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "helper %s no soporta --signed=if-asked"
 
-#: transport-helper.c:847
+#: transport-helper.c:859
+#, c-format
+msgid "helper %s does not support --atomic"
+msgstr "helper %s no soporta --atomic"
+
+#: transport-helper.c:865
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "helper %s no soporta 'push-option'"
 
-#: transport-helper.c:945
+#: transport-helper.c:963
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr "remote-helper no soporta push; se necesita refspec"
 
-#: transport-helper.c:950
+#: transport-helper.c:968
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "helper %s no soporta 'force'"
 
-#: transport-helper.c:997
+#: transport-helper.c:1015
 msgid "couldn't run fast-export"
 msgstr "no se pudo ejecutar fast-export"
 
-#: transport-helper.c:1002
+#: transport-helper.c:1020
 msgid "error while running fast-export"
 msgstr "error al ejecutar fast-export"
 
-#: transport-helper.c:1027
+#: transport-helper.c:1045
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -7554,47 +7583,47 @@
 "No hay refs comunes y ninguno especificado; no se hace nada.\n"
 "Tal vez deberías especificar un branch como 'master'.\n"
 
-#: transport-helper.c:1091
+#: transport-helper.c:1118
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "respuesta malformada en lista de refs: %s"
 
-#: transport-helper.c:1244
+#: transport-helper.c:1270
 #, c-format
 msgid "read(%s) failed"
 msgstr "leer(%s) falló"
 
-#: transport-helper.c:1271
+#: transport-helper.c:1297
 #, c-format
 msgid "write(%s) failed"
 msgstr "escribir(%s) falló"
 
-#: transport-helper.c:1320
+#: transport-helper.c:1346
 #, c-format
 msgid "%s thread failed"
 msgstr "hilo %s falló"
 
-#: transport-helper.c:1324
+#: transport-helper.c:1350
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "hilo %s falló al unirse: %s"
 
-#: transport-helper.c:1343 transport-helper.c:1347
+#: transport-helper.c:1369 transport-helper.c:1373
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "no se puede iniciar el hilo para copiar data: %s"
 
-#: transport-helper.c:1384
+#: transport-helper.c:1410
 #, c-format
 msgid "%s process failed to wait"
 msgstr "proceso %s falló al esperar"
 
-#: transport-helper.c:1388
+#: transport-helper.c:1414
 #, c-format
 msgid "%s process failed"
 msgstr "proceso %s falló"
 
-#: transport-helper.c:1406 transport-helper.c:1415
+#: transport-helper.c:1432 transport-helper.c:1441
 msgid "can't start thread for copying data"
 msgstr "no se puede iniciar hilo para copiar data"
 
@@ -7614,7 +7643,7 @@
 msgid "too-short tree file"
 msgstr "archivo de árbol muy corto"
 
-#: unpack-trees.c:111
+#: unpack-trees.c:110
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -7625,7 +7654,7 @@
 "%%sPor favor realiza un commit con los cambios o un stash antes de cambiar "
 "ramas."
 
-#: unpack-trees.c:113
+#: unpack-trees.c:112
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -7635,7 +7664,7 @@
 "checkout:\n"
 "%%s"
 
-#: unpack-trees.c:116
+#: unpack-trees.c:115
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -7645,7 +7674,7 @@
 "fusionar:\n"
 "%%sPor favor, confirma tus cambios o aguárdalos antes de fusionar."
 
-#: unpack-trees.c:118
+#: unpack-trees.c:117
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -7655,7 +7684,7 @@
 "merge:\n"
 "%%s"
 
-#: unpack-trees.c:121
+#: unpack-trees.c:120
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -7664,7 +7693,7 @@
 "Los cambios locales de los siguientes archivos serán sobrescritos al %s:\n"
 "%%sPor favor, confirma tus cambios o guárdalos antes de %s."
 
-#: unpack-trees.c:123
+#: unpack-trees.c:122
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -7673,7 +7702,7 @@
 "Los cambios locales de los siguientes archivos serán sobreescritos por %s:\n"
 "%%s"
 
-#: unpack-trees.c:128
+#: unpack-trees.c:127
 #, c-format
 msgid ""
 "Updating the following directories would lose untracked files in them:\n"
@@ -7683,7 +7712,7 @@
 "seguimiento en ellos:\n"
 "%s"
 
-#: unpack-trees.c:132
+#: unpack-trees.c:131
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -7693,7 +7722,7 @@
 "eliminados al actualizar el árbol de trabajo:\n"
 "%%sPor favor, muévelos o elimínalos antes de intercambiar ramas."
 
-#: unpack-trees.c:134
+#: unpack-trees.c:133
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -7703,7 +7732,7 @@
 "eliminadosal actualizar el árbol de trabajo:\n"
 "%%s"
 
-#: unpack-trees.c:137
+#: unpack-trees.c:136
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -7713,7 +7742,7 @@
 "eliminados al fusionar:\n"
 "%%sPor favor, muévelos o elimínalos antes de fusionar."
 
-#: unpack-trees.c:139
+#: unpack-trees.c:138
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -7723,7 +7752,7 @@
 "eliminadosal fusionar:\n"
 "%%s"
 
-#: unpack-trees.c:142
+#: unpack-trees.c:141
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -7733,7 +7762,7 @@
 "eliminados al %s:\n"
 "%%sPor favor, muévelos o elimínalos antes de %s."
 
-#: unpack-trees.c:144
+#: unpack-trees.c:143
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -7743,7 +7772,7 @@
 "eliminados al ejecutar %s:\n"
 "%%s"
 
-#: unpack-trees.c:150
+#: unpack-trees.c:149
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -7754,7 +7783,7 @@
 "sobrescritos al actualizar el árbol de trabajo:\n"
 "%%sPor favor, muévelos o elimínalos antes de intercambiar ramas."
 
-#: unpack-trees.c:152
+#: unpack-trees.c:151
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -7765,7 +7794,7 @@
 "sobrescritos al actualizar el árbol de trabajo:\n"
 "%%s"
 
-#: unpack-trees.c:155
+#: unpack-trees.c:154
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -7775,7 +7804,7 @@
 "sobrescritos al fusionar:\n"
 "%%sPor favor, muévelos o elimínalos antes de fusionar."
 
-#: unpack-trees.c:157
+#: unpack-trees.c:156
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -7785,7 +7814,7 @@
 "sobrescritos al fusionar:\n"
 "%%s"
 
-#: unpack-trees.c:160
+#: unpack-trees.c:159
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -7795,7 +7824,7 @@
 "sobrescritos al %s:\n"
 "%%sPor favor, muévelos o elimínalos antes de %s."
 
-#: unpack-trees.c:162
+#: unpack-trees.c:161
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -7805,12 +7834,12 @@
 "eliminadospor %s:\n"
 "%%s"
 
-#: unpack-trees.c:170
+#: unpack-trees.c:169
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
 msgstr "Entrada '%s' se superpone con '%s'.  No se pueden unir."
 
-#: unpack-trees.c:173
+#: unpack-trees.c:172
 #, c-format
 msgid ""
 "Cannot update sparse checkout: the following entries are not up to date:\n"
@@ -7820,7 +7849,7 @@
 "actualizadas:\n"
 "%s"
 
-#: unpack-trees.c:175
+#: unpack-trees.c:174
 #, c-format
 msgid ""
 "The following working tree files would be overwritten by sparse checkout "
@@ -7831,7 +7860,7 @@
 "actualización sparse checkout:\n"
 "%s"
 
-#: unpack-trees.c:177
+#: unpack-trees.c:176
 #, c-format
 msgid ""
 "The following working tree files would be removed by sparse checkout "
@@ -7842,7 +7871,7 @@
 "actualización sparse checkout:\n"
 "%s"
 
-#: unpack-trees.c:179
+#: unpack-trees.c:178
 #, c-format
 msgid ""
 "Cannot update submodule:\n"
@@ -7851,16 +7880,16 @@
 "No se puede actualizar le submódulo:\n"
 "%s"
 
-#: unpack-trees.c:256
+#: unpack-trees.c:255
 #, c-format
 msgid "Aborting\n"
 msgstr "Abortando\n"
 
-#: unpack-trees.c:318
+#: unpack-trees.c:317
 msgid "Updating files"
 msgstr "Actualizando archivos"
 
-#: unpack-trees.c:350
+#: unpack-trees.c:349
 msgid ""
 "the following paths have collided (e.g. case-sensitive paths\n"
 "on a case-insensitive filesystem) and only one from the same\n"
@@ -7899,7 +7928,7 @@
 msgid "invalid '..' path segment"
 msgstr "segmento de ruta '..' inválido"
 
-#: worktree.c:258 builtin/am.c:2095
+#: worktree.c:258 builtin/am.c:2084
 #, c-format
 msgid "failed to read '%s'"
 msgstr "falló al leer '%s'"
@@ -7932,17 +7961,17 @@
 msgid "'%s' does not point back to '%s'"
 msgstr "'%s' no apunta de vuelta a '%s'"
 
-#: wrapper.c:223 wrapper.c:393
+#: wrapper.c:186 wrapper.c:356
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr "no se pudo abrir '%s' para lectura y escritura"
 
-#: wrapper.c:424 wrapper.c:624
+#: wrapper.c:387 wrapper.c:588
 #, c-format
 msgid "unable to access '%s'"
 msgstr "no es posible acceder '%s'"
 
-#: wrapper.c:632
+#: wrapper.c:596
 msgid "unable to get current working directory"
 msgstr "no es posible obtener el directorio de trabajo actual"
 
@@ -8287,81 +8316,89 @@
 "  (todos los conflictos corregidos: ejecuta \"git cherry-pick --continue\")"
 
 #: wt-status.c:1437
+msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
+msgstr "  (usa \"git cherry-pick --skip\" para saltar este parche)"
+
+#: wt-status.c:1439
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr ""
 "  (use \"git cherry-pick --abort\" para cancelar la operación cherry-pick)"
 
-#: wt-status.c:1447
+#: wt-status.c:1449
 msgid "Revert currently in progress."
 msgstr "Revierte el estado en progreso actual."
 
-#: wt-status.c:1450
+#: wt-status.c:1452
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Estás revirtiendo el commit %s."
 
-#: wt-status.c:1456
+#: wt-status.c:1458
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (corrige los conflictos y ejecuta \"git revert --continue\")"
 
-#: wt-status.c:1459
+#: wt-status.c:1461
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (ejecuta \"git revert --continue\" para continuar)"
 
-#: wt-status.c:1462
+#: wt-status.c:1464
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (todos los conflictos corregidos: ejecuta \"git revert --continue\")"
 
-#: wt-status.c:1464
+#: wt-status.c:1466
+msgid "  (use \"git revert --skip\" to skip this patch)"
+msgstr "  (usa \"git revert --skip\" para omitir este parche)"
+
+#: wt-status.c:1468
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (usa \"git revert --abort\" para cancelar la operación de revertir)"
 
-#: wt-status.c:1474
+#: wt-status.c:1478
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "Estás aplicando un bisect, comenzando en la rama '%s'."
 
-#: wt-status.c:1478
+#: wt-status.c:1482
 msgid "You are currently bisecting."
 msgstr "Estás aplicando un bisect."
 
-#: wt-status.c:1481
+#: wt-status.c:1485
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (usa \"git bisect reset\" para volver a la rama original)"
 
-#: wt-status.c:1690
+#: wt-status.c:1694
 msgid "On branch "
 msgstr "En la rama "
 
-#: wt-status.c:1697
+#: wt-status.c:1701
 msgid "interactive rebase in progress; onto "
 msgstr "rebase interactivo en progreso; en "
 
-#: wt-status.c:1699
+#: wt-status.c:1703
 msgid "rebase in progress; onto "
 msgstr "rebase en progreso; en "
 
-#: wt-status.c:1709
+#: wt-status.c:1713
 msgid "Not currently on any branch."
 msgstr "Actualmente no estás en ninguna rama."
 
-#: wt-status.c:1726
+#: wt-status.c:1730
 msgid "Initial commit"
 msgstr "Confirmación inicial"
 
-#: wt-status.c:1727
+#: wt-status.c:1731
 msgid "No commits yet"
 msgstr "No hay commits todavía"
 
-#: wt-status.c:1741
+#: wt-status.c:1745
 msgid "Untracked files"
 msgstr "Archivos sin seguimiento"
 
-#: wt-status.c:1743
+#: wt-status.c:1747
 msgid "Ignored files"
 msgstr "Archivos ignorados"
 
-#: wt-status.c:1747
+#: wt-status.c:1751
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -8372,31 +8409,31 @@
 "puede acelerarlo, pero tienes que ser cuidadoso de no olvidar agregar\n"
 "nuevos archivos tú mismo (vea 'git help status')."
 
-#: wt-status.c:1753
+#: wt-status.c:1757
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Archivos no rastreados no son mostrados %s"
 
-#: wt-status.c:1755
+#: wt-status.c:1759
 msgid " (use -u option to show untracked files)"
 msgstr " (usa la opción -u para mostrar los archivos sin seguimiento)"
 
-#: wt-status.c:1761
+#: wt-status.c:1765
 msgid "No changes"
 msgstr "Sin cambios"
 
-#: wt-status.c:1766
+#: wt-status.c:1770
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 "sin cambios agregados al commit (usa \"git add\" y/o \"git commit -a\")\n"
 
-#: wt-status.c:1769
+#: wt-status.c:1773
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "no se agregaron cambios al commit\n"
 
-#: wt-status.c:1772
+#: wt-status.c:1776
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -8405,71 +8442,76 @@
 "no hay nada agregado al commit pero hay archivos sin seguimiento presentes "
 "(usa \"git add\" para hacerles seguimiento)\n"
 
-#: wt-status.c:1775
+#: wt-status.c:1779
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr ""
 "no hay nada agregado para confirmar, pero hay archivos sin seguimiento "
 "presentes\n"
 
-#: wt-status.c:1778
+#: wt-status.c:1782
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr ""
 "no hay nada para confirmar (crea/copia archivos y usa \"git add\" para "
 "hacerles seguimiento)\n"
 
-#: wt-status.c:1781 wt-status.c:1786
+#: wt-status.c:1785 wt-status.c:1790
 #, c-format
 msgid "nothing to commit\n"
 msgstr "nada para hacer commit\n"
 
-#: wt-status.c:1784
+#: wt-status.c:1788
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr ""
 "nada para hacer commit (usa -u para mostrar los archivos no rastreados)\n"
 
-#: wt-status.c:1788
+#: wt-status.c:1792
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "nada para hacer commit, el árbol de trabajo está limpio\n"
 
-#: wt-status.c:1901
+#: wt-status.c:1905
 msgid "No commits yet on "
 msgstr "No hay commits todavía en "
 
-#: wt-status.c:1905
+#: wt-status.c:1909
 msgid "HEAD (no branch)"
 msgstr "HEAD (sin rama)"
 
-#: wt-status.c:1936
+#: wt-status.c:1940
 msgid "different"
 msgstr "diferente"
 
-#: wt-status.c:1938 wt-status.c:1946
+#: wt-status.c:1942 wt-status.c:1950
 msgid "behind "
 msgstr "detrás "
 
-#: wt-status.c:1941 wt-status.c:1944
+#: wt-status.c:1945 wt-status.c:1948
 msgid "ahead "
 msgstr "adelante "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2466
+#: wt-status.c:2470
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "no se puede %s: Tienes cambios sin marcar."
 
-#: wt-status.c:2472
+#: wt-status.c:2476
 msgid "additionally, your index contains uncommitted changes."
 msgstr "adicionalmente, tu índice contiene cambios que no están en un commit."
 
-#: wt-status.c:2474
+#: wt-status.c:2478
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "no se puede %s: Tu índice contiene cambios que no están en un commit."
 
+#: compat/precompose_utf8.c:58 builtin/clone.c:452
+#, c-format
+msgid "failed to unlink '%s'"
+msgstr "falló al desvincular '%s'"
+
 #: builtin/add.c:25
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<opción>] [--] <especificación-de-ruta>..."
@@ -8492,7 +8534,7 @@
 msgid "Unstaged changes after refreshing the index:"
 msgstr "Cambios fuera del área de stage tras refrescar el índice:"
 
-#: builtin/add.c:234 builtin/rev-parse.c:896
+#: builtin/add.c:234 builtin/rev-parse.c:897
 msgid "Could not read the index"
 msgstr "No se pudo leer el índice"
 
@@ -8528,8 +8570,8 @@
 msgstr ""
 "Las siguientes rutas son ignoradas por uno de tus archivos .gitignore:\n"
 
-#: builtin/add.c:290 builtin/clean.c:909 builtin/fetch.c:147 builtin/mv.c:124
-#: builtin/prune-packed.c:56 builtin/pull.c:222 builtin/push.c:560
+#: builtin/add.c:290 builtin/clean.c:910 builtin/fetch.c:162 builtin/mv.c:124
+#: builtin/prune-packed.c:56 builtin/pull.c:223 builtin/push.c:547
 #: builtin/remote.c:1345 builtin/rm.c:241 builtin/send-pack.c:165
 msgid "dry run"
 msgstr "dry run ( ejecución en seco)"
@@ -8568,7 +8610,8 @@
 
 #: builtin/add.c:303
 msgid "ignore paths removed in the working tree (same as --no-all)"
-msgstr "ignorar rutas removidas en el árbol de trabajo (lo mismo que --no-all)"
+msgstr ""
+"ignorar rutas eliminadas en el árbol de trabajo (lo mismo que --no-all)"
 
 #: builtin/add.c:305
 msgid "don't add, only refresh the index"
@@ -8582,7 +8625,7 @@
 msgid "check if - even missing - files are ignored in dry run"
 msgstr "comprobar si - incluso los archivos que faltan - se ignoran en dry run"
 
-#: builtin/add.c:309 builtin/update-index.c:1001
+#: builtin/add.c:309 builtin/update-index.c:1002
 msgid "override the executable bit of the listed files"
 msgstr "sobrescribir el bit ejecutable de los archivos listados"
 
@@ -8656,142 +8699,138 @@
 #: builtin/add.c:446
 #, c-format
 msgid "Maybe you wanted to say 'git add .'?\n"
-msgstr "Tal vez quiso decir 'git add .'?\n"
+msgstr "¿Tal vez quiso decir 'git add .'?\n"
 
-#: builtin/am.c:348
+#: builtin/am.c:347
 msgid "could not parse author script"
 msgstr "no se pudo analizar el script del autor"
 
-#: builtin/am.c:432
+#: builtin/am.c:431
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "'%s' fue borrado por el hook de applypatch-msg"
 
-#: builtin/am.c:474
+#: builtin/am.c:473
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Línea mal formada: '%s'."
 
-#: builtin/am.c:512
+#: builtin/am.c:511
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Falló al copiar notas de '%s' a '%s'"
 
-#: builtin/am.c:538
+#: builtin/am.c:537
 msgid "fseek failed"
 msgstr "fall de fseek"
 
-#: builtin/am.c:726
+#: builtin/am.c:725
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "no se pudo analizar el parche '%s'"
 
-#: builtin/am.c:791
+#: builtin/am.c:790
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Solo un parche StGIT puede ser aplicado de una vez"
 
-#: builtin/am.c:839
+#: builtin/am.c:838
 msgid "invalid timestamp"
 msgstr "timestamp inválido"
 
-#: builtin/am.c:844 builtin/am.c:856
+#: builtin/am.c:843 builtin/am.c:855
 msgid "invalid Date line"
 msgstr "línea Date inválida"
 
-#: builtin/am.c:851
+#: builtin/am.c:850
 msgid "invalid timezone offset"
 msgstr "offset de zona horaria inválido"
 
-#: builtin/am.c:944
+#: builtin/am.c:943
 msgid "Patch format detection failed."
 msgstr "Falló al detectar el formato del parche."
 
-#: builtin/am.c:949 builtin/clone.c:407
+#: builtin/am.c:948 builtin/clone.c:406
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "falló al crear el directorio '%s'"
 
-#: builtin/am.c:954
+#: builtin/am.c:953
 msgid "Failed to split patches."
 msgstr "Falló al dividir parches."
 
-#: builtin/am.c:1084 builtin/commit.c:374
-msgid "unable to write index file"
-msgstr "no es posible escribir en el archivo índice"
-
-#: builtin/am.c:1098
+#: builtin/am.c:1084
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "Cuando hayas resuelto este problema, ejecuta \"%s --continue\"."
 
-#: builtin/am.c:1099
+#: builtin/am.c:1085
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "Si prefieres saltar este parche, ejecuta \"%s --skip\"."
 
-#: builtin/am.c:1100
+#: builtin/am.c:1086
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr ""
 "Para restaurar la rama original y detener el parchado, ejecutar \"%s --abort"
 "\"."
 
-#: builtin/am.c:1183
+#: builtin/am.c:1169
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 "Parche mandado con formato=flowed; espacios al final de las líneas tal vez "
 "desaparezcan."
 
-#: builtin/am.c:1211
+#: builtin/am.c:1197
 msgid "Patch is empty."
 msgstr "El parche está vacío."
 
-#: builtin/am.c:1277
+#: builtin/am.c:1262
+#, c-format
+msgid "missing author line in commit %s"
+msgstr "falta línea autor en commit %s"
+
+#: builtin/am.c:1265
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "sangría no válida: %.*s"
 
-#: builtin/am.c:1299
-#, c-format
-msgid "unable to parse commit %s"
-msgstr "no es posible analizar el commit %s"
-
-#: builtin/am.c:1496
+#: builtin/am.c:1484
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
 "Repositorio carece de los blobs necesarios para retroceder en una fusión de "
 "3-vías."
 
-#: builtin/am.c:1498
+#: builtin/am.c:1486
 msgid "Using index info to reconstruct a base tree..."
 msgstr "Usando la información del índice para reconstruir un árbol base..."
 
-#: builtin/am.c:1517
+#: builtin/am.c:1505
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
 msgstr ""
-"Editaste el parche a mano?\n"
+"¿Editaste el parche a mano?\n"
 "No aplica a blobs guardados en su índice."
 
-#: builtin/am.c:1523
+#: builtin/am.c:1511
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "Retrocediendo para parchar base y fusión de 3-vías..."
 
-#: builtin/am.c:1549
+#: builtin/am.c:1537
 msgid "Failed to merge in the changes."
 msgstr "Falló al fusionar en los cambios."
 
-#: builtin/am.c:1581
+#: builtin/am.c:1569
 msgid "applying to an empty history"
 msgstr "aplicando a un historial vacío"
 
-#: builtin/am.c:1628 builtin/am.c:1632
+#: builtin/am.c:1616 builtin/am.c:1620
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "no se puede continuar: %s no existe."
 
-#: builtin/am.c:1650
+#: builtin/am.c:1638
 msgid "Commit Body is:"
 msgstr "Cuerpo de commit es:"
 
@@ -8799,45 +8838,49 @@
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1660
+#: builtin/am.c:1648
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
-msgstr "Aplicar? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
+msgstr "¿Aplicar? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 
-#: builtin/am.c:1710
+#: builtin/am.c:1695 builtin/commit.c:374
+msgid "unable to write index file"
+msgstr "no es posible escribir en el archivo índice"
+
+#: builtin/am.c:1699
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Índice sucio: no se puede aplicar parches (sucio: %s)"
 
-#: builtin/am.c:1750 builtin/am.c:1818
+#: builtin/am.c:1739 builtin/am.c:1807
 #, c-format
 msgid "Applying: %.*s"
 msgstr "Aplicando: %.*s"
 
-#: builtin/am.c:1767
+#: builtin/am.c:1756
 msgid "No changes -- Patch already applied."
 msgstr "Sin cambios -- parche ya aplicado."
 
-#: builtin/am.c:1773
+#: builtin/am.c:1762
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "El parche falló en %s %.*s"
 
-#: builtin/am.c:1777
+#: builtin/am.c:1766
 msgid "Use 'git am --show-current-patch' to see the failed patch"
 msgstr "Use 'git am --show-current-patch' para ver el parche fallido"
 
-#: builtin/am.c:1821
+#: builtin/am.c:1810
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
 "already introduced the same changes; you might want to skip this patch."
 msgstr ""
-"Sin cambios - olvidaste usar 'git add'?\n"
+"Sin cambios - ¿olvidaste usar 'git add'?\n"
 "Si no hay nada en el área de stage, las posibilidad es que algo mas\n"
 "ya haya introducido el mismo cambio; tal vez quieras omitir este parche."
 
-#: builtin/am.c:1828
+#: builtin/am.c:1817
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -8850,17 +8893,17 @@
 "Se puede ejecutar `git rm` en el archivo para aceptar \"borrado por ellos\" "
 "en él."
 
-#: builtin/am.c:1935 builtin/am.c:1939 builtin/am.c:1951 builtin/reset.c:329
+#: builtin/am.c:1924 builtin/am.c:1928 builtin/am.c:1940 builtin/reset.c:329
 #: builtin/reset.c:337
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "No se pudo analizar el objeto '%s'."
 
-#: builtin/am.c:1987
+#: builtin/am.c:1976
 msgid "failed to clean index"
 msgstr "falló al limpiar el índice"
 
-#: builtin/am.c:2031
+#: builtin/am.c:2020
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -8868,161 +8911,161 @@
 "Parece haber movido HEAD desde el último falló 'am'.\n"
 "No rebobinando a ORIG_HEAD"
 
-#: builtin/am.c:2128
+#: builtin/am.c:2117
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr "Valor inválido para --patch-format: %s"
 
-#: builtin/am.c:2164
+#: builtin/am.c:2153
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<opciones>] [(<mbox> | <Directorio-de-correo>)...]"
 
-#: builtin/am.c:2165
+#: builtin/am.c:2154
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<opciones>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2171
+#: builtin/am.c:2160
 msgid "run interactively"
 msgstr "ejecutar de manera interactiva"
 
-#: builtin/am.c:2173
+#: builtin/am.c:2162
 msgid "historical option -- no-op"
 msgstr "opción histórica -- no-op"
 
-#: builtin/am.c:2175
+#: builtin/am.c:2164
 msgid "allow fall back on 3way merging if needed"
 msgstr "permitir retroceso en fusión de 3-vías si es necesario"
 
-#: builtin/am.c:2176 builtin/init-db.c:494 builtin/prune-packed.c:58
-#: builtin/repack.c:296 builtin/stash.c:806
+#: builtin/am.c:2165 builtin/init-db.c:494 builtin/prune-packed.c:58
+#: builtin/repack.c:297 builtin/stash.c:812
 msgid "be quiet"
 msgstr "ser silencioso"
 
-#: builtin/am.c:2178
+#: builtin/am.c:2167
 msgid "add a Signed-off-by line to the commit message"
 msgstr "agregar una línea \"Firmado-por\" al mensaje del commit"
 
-#: builtin/am.c:2181
+#: builtin/am.c:2170
 msgid "recode into utf8 (default)"
 msgstr "recodificar en utf8 (default)"
 
-#: builtin/am.c:2183
+#: builtin/am.c:2172
 msgid "pass -k flag to git-mailinfo"
 msgstr "pasar flag -k a git-mailinfo"
 
-#: builtin/am.c:2185
+#: builtin/am.c:2174
 msgid "pass -b flag to git-mailinfo"
 msgstr "pasar flag -b a git-mailinfo"
 
-#: builtin/am.c:2187
+#: builtin/am.c:2176
 msgid "pass -m flag to git-mailinfo"
 msgstr "pasar flag -m a git-mailinfo"
 
-#: builtin/am.c:2189
+#: builtin/am.c:2178
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "pasar flag --keep-cr a git-mailsplit para formato mbox"
 
-#: builtin/am.c:2192
+#: builtin/am.c:2181
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr ""
 "no pasar flag --keep-cr a git-mailsplit independientemente de am.keepcr"
 
-#: builtin/am.c:2195
+#: builtin/am.c:2184
 msgid "strip everything before a scissors line"
 msgstr "descubrir todo antes de una línea de tijeras"
 
-#: builtin/am.c:2197 builtin/am.c:2200 builtin/am.c:2203 builtin/am.c:2206
-#: builtin/am.c:2209 builtin/am.c:2212 builtin/am.c:2215 builtin/am.c:2218
-#: builtin/am.c:2224
+#: builtin/am.c:2186 builtin/am.c:2189 builtin/am.c:2192 builtin/am.c:2195
+#: builtin/am.c:2198 builtin/am.c:2201 builtin/am.c:2204 builtin/am.c:2207
+#: builtin/am.c:2213
 msgid "pass it through git-apply"
 msgstr "pasarlo a través de git-apply"
 
-#: builtin/am.c:2214 builtin/commit.c:1368 builtin/fmt-merge-msg.c:671
-#: builtin/fmt-merge-msg.c:674 builtin/grep.c:881 builtin/merge.c:249
-#: builtin/pull.c:159 builtin/pull.c:218 builtin/rebase.c:1418
-#: builtin/repack.c:307 builtin/repack.c:311 builtin/repack.c:313
+#: builtin/am.c:2203 builtin/commit.c:1368 builtin/fmt-merge-msg.c:671
+#: builtin/fmt-merge-msg.c:674 builtin/grep.c:883 builtin/merge.c:249
+#: builtin/pull.c:160 builtin/pull.c:219 builtin/rebase.c:1442
+#: builtin/repack.c:308 builtin/repack.c:312 builtin/repack.c:314
 #: builtin/show-branch.c:650 builtin/show-ref.c:172 builtin/tag.c:403
-#: parse-options.h:141 parse-options.h:162 parse-options.h:312
+#: parse-options.h:150 parse-options.h:171 parse-options.h:312
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2220 builtin/branch.c:661 builtin/for-each-ref.c:38
-#: builtin/replace.c:554 builtin/tag.c:437 builtin/verify-tag.c:38
+#: builtin/am.c:2209 builtin/branch.c:661 builtin/for-each-ref.c:38
+#: builtin/replace.c:555 builtin/tag.c:437 builtin/verify-tag.c:38
 msgid "format"
 msgstr "formato"
 
-#: builtin/am.c:2221
+#: builtin/am.c:2210
 msgid "format the patch(es) are in"
 msgstr "formatear el parche(s)"
 
-#: builtin/am.c:2227
+#: builtin/am.c:2216
 msgid "override error message when patch failure occurs"
 msgstr "sobrescribir mensajes de error cuando fallos de parchado ocurran"
 
-#: builtin/am.c:2229
+#: builtin/am.c:2218
 msgid "continue applying patches after resolving a conflict"
 msgstr "continuar aplicando los parches tras resolver conflictos"
 
-#: builtin/am.c:2232
+#: builtin/am.c:2221
 msgid "synonyms for --continue"
 msgstr "sinónimos para --continue"
 
-#: builtin/am.c:2235
+#: builtin/am.c:2224
 msgid "skip the current patch"
 msgstr "saltar el parche actual"
 
-#: builtin/am.c:2238
+#: builtin/am.c:2227
 msgid "restore the original branch and abort the patching operation."
 msgstr "restaurar la rama original y abortar la operación de parchado."
 
-#: builtin/am.c:2241
+#: builtin/am.c:2230
 msgid "abort the patching operation but keep HEAD where it is."
 msgstr "abortar la operación de parchado pero mantener HEAD donde está."
 
-#: builtin/am.c:2244
+#: builtin/am.c:2233
 msgid "show the patch being applied."
 msgstr "muestra el parche siendo aplicado."
 
-#: builtin/am.c:2248
+#: builtin/am.c:2237
 msgid "lie about committer date"
 msgstr "mentir sobre la fecha del committer"
 
-#: builtin/am.c:2250
+#: builtin/am.c:2239
 msgid "use current timestamp for author date"
 msgstr "usar el timestamp actual para la fecha del autor"
 
-#: builtin/am.c:2252 builtin/commit-tree.c:120 builtin/commit.c:1511
-#: builtin/merge.c:286 builtin/pull.c:193 builtin/rebase.c:489
-#: builtin/rebase.c:1459 builtin/revert.c:117 builtin/tag.c:418
+#: builtin/am.c:2241 builtin/commit-tree.c:120 builtin/commit.c:1511
+#: builtin/merge.c:286 builtin/pull.c:194 builtin/rebase.c:490
+#: builtin/rebase.c:1483 builtin/revert.c:117 builtin/tag.c:418
 msgid "key-id"
 msgstr "key-id"
 
-#: builtin/am.c:2253 builtin/rebase.c:490 builtin/rebase.c:1460
+#: builtin/am.c:2242 builtin/rebase.c:491 builtin/rebase.c:1484
 msgid "GPG-sign commits"
 msgstr "Commits con firma GPG"
 
-#: builtin/am.c:2256
+#: builtin/am.c:2245
 msgid "(internal use for git-rebase)"
 msgstr "(uso interno para git-rebase)"
 
-#: builtin/am.c:2274
+#: builtin/am.c:2263
 msgid ""
 "The -b/--binary option has been a no-op for long time, and\n"
 "it will be removed. Please do not use it anymore."
 msgstr ""
 "La opción -b/--binary ha estado deshabilitada por mucho tiempo, y\n"
-"será removida. Por favor no la use más."
+"será eliminada. Por favor no la use más."
 
-#: builtin/am.c:2281
+#: builtin/am.c:2270
 msgid "failed to read the index"
 msgstr "falló al leer el índice"
 
-#: builtin/am.c:2296
+#: builtin/am.c:2285
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr "directorio de rebase previo %s todavía existe en el mbox dado."
 
-#: builtin/am.c:2320
+#: builtin/am.c:2309
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -9031,11 +9074,11 @@
 "Directorio extraviado %s encontrado.\n"
 "Use \"git am --abort\" para borrarlo."
 
-#: builtin/am.c:2326
+#: builtin/am.c:2315
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "Operación de resolución no está en progreso, no vamos a continuar."
 
-#: builtin/am.c:2336
+#: builtin/am.c:2325
 msgid "interactive mode requires patches on the command line"
 msgstr "modo interactivo requiere parches en la línea de comando"
 
@@ -9350,154 +9393,154 @@
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms requiere 0 o 1 argumentos"
 
-#: builtin/blame.c:32
+#: builtin/blame.c:31
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
 msgstr "git blame [<opciones>] [<opciones-rev>] [<revision>] [--] <archivo>"
 
-#: builtin/blame.c:37
+#: builtin/blame.c:36
 msgid "<rev-opts> are documented in git-rev-list(1)"
 msgstr "<rev-opts> están documentadas en git-rev-list(1)"
 
-#: builtin/blame.c:410
+#: builtin/blame.c:409
 #, c-format
 msgid "expecting a color: %s"
 msgstr "esperando un color: %s"
 
-#: builtin/blame.c:417
+#: builtin/blame.c:416
 msgid "must end with a color"
 msgstr "tiene que terminar con un color"
 
-#: builtin/blame.c:730
+#: builtin/blame.c:729
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr "color inválido '%s' en color.blame.repeatedLines"
 
-#: builtin/blame.c:748
+#: builtin/blame.c:747
 msgid "invalid value for blame.coloring"
 msgstr "valor inválido para blame.coloring"
 
-#: builtin/blame.c:823
+#: builtin/blame.c:822
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "no se pudo encontrar revision %s para ignorar"
 
-#: builtin/blame.c:845
+#: builtin/blame.c:844
 msgid "Show blame entries as we find them, incrementally"
 msgstr "Mostrar las entradas blame como las encontramos, incrementalmente"
 
-#: builtin/blame.c:846
+#: builtin/blame.c:845
 msgid "Show blank SHA-1 for boundary commits (Default: off)"
 msgstr "Mostrar SHA-1 en blanco para commits extremos (Default: off)"
 
-#: builtin/blame.c:847
+#: builtin/blame.c:846
 msgid "Do not treat root commits as boundaries (Default: off)"
 msgstr "No tratar commits raíces como extremos (Default: off)"
 
-#: builtin/blame.c:848
+#: builtin/blame.c:847
 msgid "Show work cost statistics"
 msgstr "Mostrar estadísticas de costo de trabajo"
 
-#: builtin/blame.c:849
+#: builtin/blame.c:848
 msgid "Force progress reporting"
 msgstr "Forzar el reporte de progreso"
 
-#: builtin/blame.c:850
+#: builtin/blame.c:849
 msgid "Show output score for blame entries"
 msgstr "Mostrar la puntuación de salida de las entradas de blame"
 
-#: builtin/blame.c:851
+#: builtin/blame.c:850
 msgid "Show original filename (Default: auto)"
 msgstr "Mostrar nombre original del archivo (Default: auto)"
 
-#: builtin/blame.c:852
+#: builtin/blame.c:851
 msgid "Show original linenumber (Default: off)"
 msgstr "Mostrar número de línea original (Default: off)"
 
-#: builtin/blame.c:853
+#: builtin/blame.c:852
 msgid "Show in a format designed for machine consumption"
 msgstr "Mostrar en un formato diseñado para consumo de máquina"
 
-#: builtin/blame.c:854
+#: builtin/blame.c:853
 msgid "Show porcelain format with per-line commit information"
 msgstr "Mostrar en formato porcelana con información de commit por línea"
 
-#: builtin/blame.c:855
+#: builtin/blame.c:854
 msgid "Use the same output mode as git-annotate (Default: off)"
 msgstr "Usar el mismo modo salida como git-annotate (Default: off)"
 
-#: builtin/blame.c:856
+#: builtin/blame.c:855
 msgid "Show raw timestamp (Default: off)"
 msgstr "Mostrar timestamp en formato raw (Default: off)"
 
-#: builtin/blame.c:857
+#: builtin/blame.c:856
 msgid "Show long commit SHA1 (Default: off)"
 msgstr "Mostrar SHA1 del commit en formato largo (Default: off)"
 
-#: builtin/blame.c:858
+#: builtin/blame.c:857
 msgid "Suppress author name and timestamp (Default: off)"
 msgstr "Suprimir nombre del autor y timestamp (Default: off)"
 
-#: builtin/blame.c:859
+#: builtin/blame.c:858
 msgid "Show author email instead of name (Default: off)"
 msgstr "Mostrar en cambio el email del autor (Default: off)"
 
-#: builtin/blame.c:860
+#: builtin/blame.c:859
 msgid "Ignore whitespace differences"
 msgstr "Ignorar diferencias de espacios en blanco"
 
-#: builtin/blame.c:861 builtin/log.c:1629
+#: builtin/blame.c:860 builtin/log.c:1630
 msgid "rev"
 msgstr "rev"
 
-#: builtin/blame.c:861
+#: builtin/blame.c:860
 msgid "Ignore <rev> when blaming"
 msgstr "ignorar <rev> durante el blame"
 
-#: builtin/blame.c:862
+#: builtin/blame.c:861
 msgid "Ignore revisions from <file>"
 msgstr "ignorar revisiones de <archivo>"
 
-#: builtin/blame.c:863
+#: builtin/blame.c:862
 msgid "color redundant metadata from previous line differently"
 msgstr "colorear metadata redundante de líneas previas de manera diferente"
 
-#: builtin/blame.c:864
+#: builtin/blame.c:863
 msgid "color lines by age"
 msgstr "colorear líneas por edad"
 
-#: builtin/blame.c:871
+#: builtin/blame.c:870
 msgid "Use an experimental heuristic to improve diffs"
 msgstr "Usar un heurístico experimental para mejorar los diffs"
 
-#: builtin/blame.c:873
+#: builtin/blame.c:872
 msgid "Spend extra cycles to find better match"
 msgstr "Ocupo más ciclos para encontrar mejoras resultados"
 
-#: builtin/blame.c:874
+#: builtin/blame.c:873
 msgid "Use revisions from <file> instead of calling git-rev-list"
 msgstr "Use revisiones desde <archivo> en lugar de llamar git-rev-list"
 
-#: builtin/blame.c:875
+#: builtin/blame.c:874
 msgid "Use <file>'s contents as the final image"
 msgstr "Usar contenido de <archivo> como imagen final"
 
-#: builtin/blame.c:876 builtin/blame.c:877
+#: builtin/blame.c:875 builtin/blame.c:876
 msgid "score"
 msgstr "puntaje"
 
-#: builtin/blame.c:876
+#: builtin/blame.c:875
 msgid "Find line copies within and across files"
 msgstr "Encontrar copias de líneas entre y a través de archivos"
 
-#: builtin/blame.c:877
+#: builtin/blame.c:876
 msgid "Find line movements within and across files"
 msgstr "Encontrar movimientos de líneas entre y a través de archivos"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:877
 msgid "n,m"
 msgstr "n,m"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:877
 msgid "Process only line range n,m, counting from 1"
 msgstr "Procesar solo el rango de líneas n,m, contando desde 1"
 
@@ -9715,7 +9758,7 @@
 msgstr ""
 "Por favor, edita la descripción para la rama\n"
 "%s\n"
-"Las líneas que comiencen con '%c' serán removidas.\n"
+"Las líneas que comiencen con '%c' serán eliminadas.\n"
 
 #: builtin/branch.c:618
 msgid "Generic options"
@@ -9737,7 +9780,7 @@
 msgid "do not use"
 msgstr "no usar"
 
-#: builtin/branch.c:626 builtin/rebase.c:485
+#: builtin/branch.c:626 builtin/rebase.c:486
 msgid "upstream"
 msgstr "upstream"
 
@@ -9848,9 +9891,9 @@
 msgid "format to use for the output"
 msgstr "formato para usar para el output"
 
-#: builtin/branch.c:684 builtin/clone.c:761
+#: builtin/branch.c:684 builtin/clone.c:760
 msgid "HEAD not found below refs/heads!"
-msgstr "HEAD no encontrado abajo de refs/heads!"
+msgstr "¡HEAD no encontrado abajo de refs/heads!"
 
 #: builtin/branch.c:708
 msgid "--column and --verbose are incompatible"
@@ -9952,7 +9995,7 @@
 msgid "Need a repository to unbundle."
 msgstr "Se necesita un repositorio para desagrupar."
 
-#: builtin/cat-file.c:594
+#: builtin/cat-file.c:595
 msgid ""
 "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
 "p | <type> | --textconv | --filters) [--path=<path>] <object>"
@@ -9960,7 +10003,7 @@
 "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
 "p | <tipo> | --textconv | --filters) [--path=<ruta>] <objeto>"
 
-#: builtin/cat-file.c:595
+#: builtin/cat-file.c:596
 msgid ""
 "git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
 "filters]"
@@ -9968,72 +10011,72 @@
 "git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
 "filters]"
 
-#: builtin/cat-file.c:616
+#: builtin/cat-file.c:617
 msgid "only one batch option may be specified"
 msgstr "solo se puede especificar una opción batch"
 
-#: builtin/cat-file.c:634
+#: builtin/cat-file.c:635
 msgid "<type> can be one of: blob, tree, commit, tag"
 msgstr "<tipo> puede ser: blob, tree, commit, tag"
 
-#: builtin/cat-file.c:635
+#: builtin/cat-file.c:636
 msgid "show object type"
 msgstr "mostrar el tipo del objeto"
 
-#: builtin/cat-file.c:636
+#: builtin/cat-file.c:637
 msgid "show object size"
 msgstr "mostrar el tamaño del objeto"
 
-#: builtin/cat-file.c:638
+#: builtin/cat-file.c:639
 msgid "exit with zero when there's no error"
 msgstr "salir con cero cuando no haya error"
 
-#: builtin/cat-file.c:639
+#: builtin/cat-file.c:640
 msgid "pretty-print object's content"
 msgstr "realizar pretty-print del contenido del objeto"
 
-#: builtin/cat-file.c:641
+#: builtin/cat-file.c:642
 msgid "for blob objects, run textconv on object's content"
 msgstr "para objetos blob, ejecuta textconv en el contenido del objeto"
 
-#: builtin/cat-file.c:643
+#: builtin/cat-file.c:644
 msgid "for blob objects, run filters on object's content"
 msgstr "para objetos blob, ejecuta filters en el contenido del objeto"
 
-#: builtin/cat-file.c:644 git-submodule.sh:936
+#: builtin/cat-file.c:645 git-submodule.sh:936
 msgid "blob"
 msgstr "blob"
 
-#: builtin/cat-file.c:645
+#: builtin/cat-file.c:646
 msgid "use a specific path for --textconv/--filters"
 msgstr "use una ruta específica para --textconv/--filters"
 
-#: builtin/cat-file.c:647
+#: builtin/cat-file.c:648
 msgid "allow -s and -t to work with broken/corrupt objects"
 msgstr "permita -s y -t para trabajar con objetos rotos o corruptos"
 
-#: builtin/cat-file.c:648
+#: builtin/cat-file.c:649
 msgid "buffer --batch output"
 msgstr "salida buffer --batch"
 
-#: builtin/cat-file.c:650
+#: builtin/cat-file.c:651
 msgid "show info and content of objects fed from the standard input"
 msgstr "mostrar info y content de los objetos alimentados por standard input"
 
-#: builtin/cat-file.c:654
+#: builtin/cat-file.c:655
 msgid "show info about objects fed from the standard input"
 msgstr "mostrar info de los objetos alimentados por standard input"
 
-#: builtin/cat-file.c:658
+#: builtin/cat-file.c:659
 msgid "follow in-tree symlinks (used with --batch or --batch-check)"
 msgstr ""
 "seguir los enlaces simbólicos en el árbol (usado con --batch o --batch-check)"
 
-#: builtin/cat-file.c:660
+#: builtin/cat-file.c:661
 msgid "show all objects with --batch or --batch-check"
 msgstr "mostrar todos los objetos con --batch o --batch-check"
 
-#: builtin/cat-file.c:662
+#: builtin/cat-file.c:663
 msgid "do not order --batch-all-objects output"
 msgstr "no ordenar el output de --batch-all-objects"
 
@@ -10061,8 +10104,8 @@
 msgid "terminate input and output records by a NUL character"
 msgstr "terminar registros de entrada y salida con un carácter NUL"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1433 builtin/gc.c:538
-#: builtin/worktree.c:507
+#: builtin/check-ignore.c:21 builtin/checkout.c:1433 builtin/gc.c:537
+#: builtin/worktree.c:506
 msgid "suppress progress reporting"
 msgstr "suprimir el reporte de progreso"
 
@@ -10156,7 +10199,7 @@
 #: builtin/checkout-index.c:178 builtin/column.c:31
 #: builtin/submodule--helper.c:1373 builtin/submodule--helper.c:1376
 #: builtin/submodule--helper.c:1384 builtin/submodule--helper.c:1857
-#: builtin/worktree.c:680
+#: builtin/worktree.c:679
 msgid "string"
 msgstr "string"
 
@@ -10184,98 +10227,98 @@
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<opciones>] [--source=<rama>] -- <archivo>..."
 
-#: builtin/checkout.c:172 builtin/checkout.c:211
+#: builtin/checkout.c:173 builtin/checkout.c:212
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "ruta '%s' no tiene nuestra versión"
 
-#: builtin/checkout.c:174 builtin/checkout.c:213
+#: builtin/checkout.c:175 builtin/checkout.c:214
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "ruta '%s' no tiene su versión"
 
-#: builtin/checkout.c:190
+#: builtin/checkout.c:191
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "ruta '%s' no tiene todas las versiones necesarias"
 
-#: builtin/checkout.c:240
+#: builtin/checkout.c:241
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "ruta '%s' no tiene versiones necesarias"
 
-#: builtin/checkout.c:258
+#: builtin/checkout.c:259
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "ruta '%s': no se puede fusionar"
 
-#: builtin/checkout.c:274
+#: builtin/checkout.c:275
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "Incapaz de agregar resultados de fusión a '%s'"
 
-#: builtin/checkout.c:374
+#: builtin/checkout.c:375
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "Recreado %d conflicto de merge"
 msgstr[1] "Recreados %d conflictos de merge"
 
-#: builtin/checkout.c:379
+#: builtin/checkout.c:380
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "Actualizada %d ruta para %s"
 msgstr[1] "Actualizadas %d rutas para %s"
 
-#: builtin/checkout.c:386
+#: builtin/checkout.c:387
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "Actualizada %d ruta desde el index"
 msgstr[1] "Actualizadas %d rutas desde el index"
 
-#: builtin/checkout.c:409 builtin/checkout.c:412 builtin/checkout.c:415
-#: builtin/checkout.c:419
+#: builtin/checkout.c:410 builtin/checkout.c:413 builtin/checkout.c:416
+#: builtin/checkout.c:420
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "'%s' no puede ser usada con rutas actualizadas"
 
-#: builtin/checkout.c:422 builtin/checkout.c:425
+#: builtin/checkout.c:423 builtin/checkout.c:426
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr "'%s' no puede ser usado con %s"
 
-#: builtin/checkout.c:429
+#: builtin/checkout.c:430
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr "No se puede actualizar rutas y cambiar a la rama '%s' al mismo tiempo."
 
-#: builtin/checkout.c:433
+#: builtin/checkout.c:434
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "ni '%s' o '%s' están especificados"
 
-#: builtin/checkout.c:437
+#: builtin/checkout.c:438
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "'%s' tiene que ser usado cuando '%s' no es especificado"
 
-#: builtin/checkout.c:442 builtin/checkout.c:447
+#: builtin/checkout.c:443 builtin/checkout.c:448
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "'%s' o '%s' no puede ser usado con %s"
 
-#: builtin/checkout.c:506 builtin/checkout.c:513
+#: builtin/checkout.c:507 builtin/checkout.c:514
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "ruta '%s' no esta fusionada"
 
-#: builtin/checkout.c:679
+#: builtin/checkout.c:680
 msgid "you need to resolve your current index first"
 msgstr "necesitas resolver tu índice actual primero"
 
-#: builtin/checkout.c:729
+#: builtin/checkout.c:730
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -10284,12 +10327,6 @@
 "no se puede continuar con los cambios en stage en los siguientes archivos:\n"
 "%s"
 
-#: builtin/checkout.c:736
-#, c-format
-msgid "staged changes in the following files may be lost: %s"
-msgstr ""
-"cambios en el área de stage en el siguiente archivo pueden ser perdidos: %s"
-
 #: builtin/checkout.c:833
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
@@ -10299,7 +10336,7 @@
 msgid "HEAD is now at"
 msgstr "HEAD está ahora en"
 
-#: builtin/checkout.c:879 builtin/clone.c:714
+#: builtin/checkout.c:879 builtin/clone.c:713
 msgid "unable to update HEAD"
 msgstr "no es posible actualizar  HEAD"
 
@@ -10413,7 +10450,7 @@
 "'%s' puede ser tanto un archivo local como una rama de rastreo.\n"
 "Por favor use -- (y opcionalmente --no-guess) para desambiguar"
 
-#: builtin/checkout.c:1243 builtin/worktree.c:291 builtin/worktree.c:456
+#: builtin/checkout.c:1243 builtin/worktree.c:290 builtin/worktree.c:455
 #, c-format
 msgid "invalid reference: %s"
 msgstr "referencia inválida: %s"
@@ -10516,9 +10553,9 @@
 msgid "missing branch or commit argument"
 msgstr "falta branch o commit como argumento"
 
-#: builtin/checkout.c:1437 builtin/clone.c:91 builtin/fetch.c:151
-#: builtin/merge.c:285 builtin/pull.c:137 builtin/push.c:575
-#: builtin/send-pack.c:174
+#: builtin/checkout.c:1437 builtin/clone.c:90 builtin/commit-graph.c:59
+#: builtin/commit-graph.c:180 builtin/fetch.c:166 builtin/merge.c:285
+#: builtin/pull.c:138 builtin/push.c:562 builtin/send-pack.c:174
 msgid "force progress reporting"
 msgstr "forzar el reporte de progreso"
 
@@ -10526,7 +10563,7 @@
 msgid "perform a 3-way merge with the new branch"
 msgstr "realizar una fusión de tres vías con la rama nueva"
 
-#: builtin/checkout.c:1439 builtin/log.c:1617 parse-options.h:318
+#: builtin/checkout.c:1439 builtin/log.c:1618 parse-options.h:318
 msgid "style"
 msgstr "estilo"
 
@@ -10534,7 +10571,7 @@
 msgid "conflict style (merge or diff3)"
 msgstr "conflicto de estilos (merge o diff3)"
 
-#: builtin/checkout.c:1452 builtin/worktree.c:504
+#: builtin/checkout.c:1452 builtin/worktree.c:503
 msgid "detach HEAD at named commit"
 msgstr "desacoplar HEAD en el commit nombrado"
 
@@ -10639,7 +10676,7 @@
 msgstr ""
 "'%s' acertó más de una rama remota rastreada.\n"
 "Encontramos %d remotos con una referencia que concuerda. Así que volvemos\n"
-"a intentar resolver el argumento como una ruta, pero eso también falló!\n"
+"a intentar resolver el argumento como una ruta, ¡pero eso también falló!\n"
 "\n"
 "Si querías hacer un check out a una rama rastreada remota, como 'origin',\n"
 "puedes hacerlo proporcionando el nombre completo con la opción --track:\n"
@@ -10651,9 +10688,9 @@
 "de nombre <nombre> remota, como 'origin', considera configurar\n"
 "checkout.defaultRemote=origin en tu configuración."
 
-#: builtin/checkout.c:1691 builtin/checkout.c:1693 builtin/checkout.c:1733
-#: builtin/checkout.c:1735 builtin/clone.c:121 builtin/remote.c:169
-#: builtin/remote.c:171 builtin/worktree.c:500 builtin/worktree.c:502
+#: builtin/checkout.c:1691 builtin/checkout.c:1693 builtin/checkout.c:1742
+#: builtin/checkout.c:1744 builtin/clone.c:120 builtin/remote.c:169
+#: builtin/remote.c:171 builtin/worktree.c:499 builtin/worktree.c:501
 msgid "branch"
 msgstr "rama"
 
@@ -10677,39 +10714,39 @@
 msgid "use overlay mode (default)"
 msgstr "usar modo overlay (default)"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1743
 msgid "create and switch to a new branch"
 msgstr "crear y hacer switch a una nueva rama"
 
-#: builtin/checkout.c:1736
+#: builtin/checkout.c:1745
 msgid "create/reset and switch to a branch"
 msgstr "crear/reiniciar y hacer switch a una rama"
 
-#: builtin/checkout.c:1738
+#: builtin/checkout.c:1747
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "adivinar segunda opción 'git checkout <no-hay-tal-rama>'"
 
-#: builtin/checkout.c:1740
+#: builtin/checkout.c:1749
 msgid "throw away local modifications"
 msgstr "descartar modificaciones locales"
 
-#: builtin/checkout.c:1772
+#: builtin/checkout.c:1781
 msgid "which tree-ish to checkout from"
 msgstr "de qué árbol hacer el checkout"
 
-#: builtin/checkout.c:1774
+#: builtin/checkout.c:1783
 msgid "restore the index"
 msgstr "restaurar el index"
 
-#: builtin/checkout.c:1776
+#: builtin/checkout.c:1785
 msgid "restore the working tree (default)"
 msgstr "restaurar el árbol de trabajo (default)"
 
-#: builtin/checkout.c:1778
+#: builtin/checkout.c:1787
 msgid "ignore unmerged entries"
 msgstr "ignorar entradas no fusionadas"
 
-#: builtin/checkout.c:1779
+#: builtin/checkout.c:1788
 msgid "use overlay mode"
 msgstr "usar modo overlay"
 
@@ -10749,7 +10786,7 @@
 msgid "could not lstat %s\n"
 msgstr "no se pudo lstat %s\n"
 
-#: builtin/clean.c:300 git-add--interactive.perl:593
+#: builtin/clean.c:301 git-add--interactive.perl:593
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -10762,7 +10799,7 @@
 "foo        - selecciona un objeto basado en un prefijo único\n"
 "           - (vacío) no elegir nada\n"
 
-#: builtin/clean.c:304 git-add--interactive.perl:602
+#: builtin/clean.c:305 git-add--interactive.perl:602
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -10783,38 +10820,38 @@
 "*          - escoger todos los objetos\n"
 "           - (vacío) terminar selección\n"
 
-#: builtin/clean.c:520 git-add--interactive.perl:568
+#: builtin/clean.c:521 git-add--interactive.perl:568
 #: git-add--interactive.perl:573
 #, c-format, perl-format
 msgid "Huh (%s)?\n"
-msgstr "Ahh (%s)?\n"
+msgstr "¿Ahh (%s)?\n"
 
-#: builtin/clean.c:662
+#: builtin/clean.c:663
 #, c-format
 msgid "Input ignore patterns>> "
 msgstr "Input ignora los patrones >> "
 
-#: builtin/clean.c:699
+#: builtin/clean.c:700
 #, c-format
 msgid "WARNING: Cannot find items matched by: %s"
 msgstr "PELIGRO: No se puede encontrar objetos que concuerden con: %s"
 
-#: builtin/clean.c:720
+#: builtin/clean.c:721
 msgid "Select items to delete"
 msgstr "Seleccionar objetos para borrar"
 
 #. TRANSLATORS: Make sure to keep [y/N] as is
-#: builtin/clean.c:761
+#: builtin/clean.c:762
 #, c-format
 msgid "Remove %s [y/N]? "
-msgstr "Borrar %s [y/N]? "
+msgstr "¿Borrar %s [y/N]? "
 
-#: builtin/clean.c:786 git-add--interactive.perl:1763
+#: builtin/clean.c:787 git-add--interactive.perl:1763
 #, c-format
 msgid "Bye.\n"
 msgstr "Adiós.\n"
 
-#: builtin/clean.c:794
+#: builtin/clean.c:795
 msgid ""
 "clean               - start cleaning\n"
 "filter by pattern   - exclude items from deletion\n"
@@ -10832,64 +10869,64 @@
 "help                - esta ventana\n"
 "?                   - ayuda para selección de opciones"
 
-#: builtin/clean.c:821 git-add--interactive.perl:1849
+#: builtin/clean.c:822 git-add--interactive.perl:1849
 msgid "*** Commands ***"
 msgstr "*** Comandos ***"
 
-#: builtin/clean.c:822 git-add--interactive.perl:1846
+#: builtin/clean.c:823 git-add--interactive.perl:1846
 msgid "What now"
 msgstr "Ahora que"
 
-#: builtin/clean.c:830
+#: builtin/clean.c:831
 msgid "Would remove the following item:"
 msgid_plural "Would remove the following items:"
 msgstr[0] "Se eliminará el siguiente objeto:"
 msgstr[1] "Se eliminarán los siguientes objetos:"
 
-#: builtin/clean.c:846
+#: builtin/clean.c:847
 msgid "No more files to clean, exiting."
 msgstr "No hay más archivos para limpiar, saliendo."
 
-#: builtin/clean.c:908
+#: builtin/clean.c:909
 msgid "do not print names of files removed"
 msgstr "no imprimir nombres de archivos borrados"
 
-#: builtin/clean.c:910
+#: builtin/clean.c:911
 msgid "force"
 msgstr "forzar"
 
-#: builtin/clean.c:911
+#: builtin/clean.c:912
 msgid "interactive cleaning"
 msgstr "limpieza interactiva"
 
-#: builtin/clean.c:913
+#: builtin/clean.c:914
 msgid "remove whole directories"
 msgstr "borrar directorios completos"
 
-#: builtin/clean.c:914 builtin/describe.c:546 builtin/describe.c:548
-#: builtin/grep.c:899 builtin/log.c:176 builtin/log.c:178
-#: builtin/ls-files.c:557 builtin/name-rev.c:413 builtin/name-rev.c:415
+#: builtin/clean.c:915 builtin/describe.c:548 builtin/describe.c:550
+#: builtin/grep.c:901 builtin/log.c:176 builtin/log.c:178
+#: builtin/ls-files.c:557 builtin/name-rev.c:417 builtin/name-rev.c:419
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr "patrón"
 
-#: builtin/clean.c:915
+#: builtin/clean.c:916
 msgid "add <pattern> to ignore rules"
 msgstr "agregar <patrón> para ignorar reglas"
 
-#: builtin/clean.c:916
+#: builtin/clean.c:917
 msgid "remove ignored files, too"
 msgstr "borrar archivos ignorados, también"
 
-#: builtin/clean.c:918
+#: builtin/clean.c:919
 msgid "remove only ignored files"
 msgstr "borrar solo archivos ignorados"
 
-#: builtin/clean.c:936
+#: builtin/clean.c:937
 msgid "-x and -X cannot be used together"
 msgstr "-x y -X no pueden ser usadas juntas"
 
-#: builtin/clean.c:940
+#: builtin/clean.c:941
 msgid ""
 "clean.requireForce set to true and neither -i, -n, nor -f given; refusing to "
 "clean"
@@ -10897,7 +10934,7 @@
 "clean.requireForce configurado como true y ninguno -i, -n, ni -f entregados; "
 "rehusando el clean"
 
-#: builtin/clean.c:943
+#: builtin/clean.c:944
 msgid ""
 "clean.requireForce defaults to true and neither -i, -n, nor -f given; "
 "refusing to clean"
@@ -10905,160 +10942,160 @@
 "clean.requireForce default en true y ninguno -i, -n, ni -f entregados; "
 "rehusando el clean"
 
-#: builtin/clone.c:46
+#: builtin/clone.c:45
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<opciones>] [--] <repo> [<directorio>]"
 
-#: builtin/clone.c:93
+#: builtin/clone.c:92
 msgid "don't create a checkout"
 msgstr "no crear checkout"
 
-#: builtin/clone.c:94 builtin/clone.c:96 builtin/init-db.c:489
+#: builtin/clone.c:93 builtin/clone.c:95 builtin/init-db.c:489
 msgid "create a bare repository"
 msgstr "crear un repositorio vacío"
 
-#: builtin/clone.c:98
+#: builtin/clone.c:97
 msgid "create a mirror repository (implies bare)"
 msgstr "crear un repositorio espejo (implica vacío)"
 
-#: builtin/clone.c:100
+#: builtin/clone.c:99
 msgid "to clone from a local repository"
 msgstr "clonar de un repositorio local"
 
-#: builtin/clone.c:102
+#: builtin/clone.c:101
 msgid "don't use local hardlinks, always copy"
 msgstr "no usar hardlinks, siempre copiar"
 
-#: builtin/clone.c:104
+#: builtin/clone.c:103
 msgid "setup as shared repository"
 msgstr "configurar como repositorio compartido"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:106
 msgid "pathspec"
 msgstr "pathspec"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:106
 msgid "initialize submodules in the clone"
 msgstr "inicializar submódulos en el clonado"
 
-#: builtin/clone.c:110
+#: builtin/clone.c:109
 msgid "number of submodules cloned in parallel"
 msgstr "numero de submódulos clonados en paralelo"
 
-#: builtin/clone.c:111 builtin/init-db.c:486
+#: builtin/clone.c:110 builtin/init-db.c:486
 msgid "template-directory"
 msgstr "directorio-template"
 
-#: builtin/clone.c:112 builtin/init-db.c:487
+#: builtin/clone.c:111 builtin/init-db.c:487
 msgid "directory from which templates will be used"
 msgstr "directorio del cual los templates serán usados"
 
-#: builtin/clone.c:114 builtin/clone.c:116 builtin/submodule--helper.c:1380
+#: builtin/clone.c:113 builtin/clone.c:115 builtin/submodule--helper.c:1380
 #: builtin/submodule--helper.c:1860
 msgid "reference repository"
 msgstr "repositorio de referencia"
 
-#: builtin/clone.c:118 builtin/submodule--helper.c:1382
+#: builtin/clone.c:117 builtin/submodule--helper.c:1382
 #: builtin/submodule--helper.c:1862
 msgid "use --reference only while cloning"
 msgstr "usa--reference  solamente si estás clonado"
 
-#: builtin/clone.c:119 builtin/column.c:27 builtin/merge-file.c:46
-#: builtin/pack-objects.c:3314 builtin/repack.c:319
+#: builtin/clone.c:118 builtin/column.c:27 builtin/merge-file.c:46
+#: builtin/pack-objects.c:3294 builtin/repack.c:320
 msgid "name"
 msgstr "nombre"
 
-#: builtin/clone.c:120
+#: builtin/clone.c:119
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "use <nombre> en lugar de 'origin' para rastrear upstream"
 
-#: builtin/clone.c:122
+#: builtin/clone.c:121
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "checkout <rama> en lugar de HEAD remota"
 
-#: builtin/clone.c:124
+#: builtin/clone.c:123
 msgid "path to git-upload-pack on the remote"
 msgstr "ruta para git-upload-pack en el remoto"
 
-#: builtin/clone.c:125 builtin/fetch.c:152 builtin/grep.c:838
-#: builtin/pull.c:226
+#: builtin/clone.c:124 builtin/fetch.c:167 builtin/grep.c:840
+#: builtin/pull.c:227
 msgid "depth"
 msgstr "profundidad"
 
-#: builtin/clone.c:126
+#: builtin/clone.c:125
 msgid "create a shallow clone of that depth"
 msgstr "crear un clon superficial para esa profundidad"
 
-#: builtin/clone.c:127 builtin/fetch.c:154 builtin/pack-objects.c:3303
+#: builtin/clone.c:126 builtin/fetch.c:169 builtin/pack-objects.c:3283
 msgid "time"
 msgstr "tiempo"
 
-#: builtin/clone.c:128
+#: builtin/clone.c:127
 msgid "create a shallow clone since a specific time"
 msgstr "crear un clon superficial desde el tiempo específico"
 
-#: builtin/clone.c:129 builtin/fetch.c:156 builtin/fetch.c:179
-#: builtin/rebase.c:1395
+#: builtin/clone.c:128 builtin/fetch.c:171 builtin/fetch.c:194
+#: builtin/rebase.c:1417
 msgid "revision"
 msgstr "revision"
 
-#: builtin/clone.c:130 builtin/fetch.c:157
+#: builtin/clone.c:129 builtin/fetch.c:172
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "ahondando historia de clon superficial, excluyendo rev"
 
-#: builtin/clone.c:132
+#: builtin/clone.c:131
 msgid "clone only one branch, HEAD or --branch"
 msgstr "clonar solo una rama,HEAD o --branch"
 
-#: builtin/clone.c:134
+#: builtin/clone.c:133
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr "no clonar ningún tag, y hacer que los subsiguientes fetch no los sigan"
 
-#: builtin/clone.c:136
+#: builtin/clone.c:135
 msgid "any cloned submodules will be shallow"
 msgstr "cualquier submódulo clonado será superficial"
 
-#: builtin/clone.c:137 builtin/init-db.c:495
+#: builtin/clone.c:136 builtin/init-db.c:495
 msgid "gitdir"
 msgstr "gitdir"
 
-#: builtin/clone.c:138 builtin/init-db.c:496
+#: builtin/clone.c:137 builtin/init-db.c:496
 msgid "separate git dir from working tree"
 msgstr "separa git dir del árbol de trabajo"
 
-#: builtin/clone.c:139
+#: builtin/clone.c:138
 msgid "key=value"
 msgstr "llave=valor"
 
-#: builtin/clone.c:140
+#: builtin/clone.c:139
 msgid "set config inside the new repository"
 msgstr "configurar config dentro del nuevo repositorio"
 
-#: builtin/clone.c:142 builtin/fetch.c:174 builtin/ls-remote.c:76
-#: builtin/push.c:585 builtin/send-pack.c:172
+#: builtin/clone.c:141 builtin/fetch.c:189 builtin/ls-remote.c:76
+#: builtin/push.c:572 builtin/send-pack.c:172
 msgid "server-specific"
 msgstr "especifico-de-servidor"
 
-#: builtin/clone.c:142 builtin/fetch.c:174 builtin/ls-remote.c:76
-#: builtin/push.c:585 builtin/send-pack.c:173
+#: builtin/clone.c:141 builtin/fetch.c:189 builtin/ls-remote.c:76
+#: builtin/push.c:572 builtin/send-pack.c:173
 msgid "option to transmit"
 msgstr "opción para trasmitir"
 
-#: builtin/clone.c:143 builtin/fetch.c:175 builtin/pull.c:239
-#: builtin/push.c:586
+#: builtin/clone.c:142 builtin/fetch.c:190 builtin/pull.c:240
+#: builtin/push.c:573
 msgid "use IPv4 addresses only"
 msgstr "solo usar direcciones IPv4"
 
-#: builtin/clone.c:145 builtin/fetch.c:177 builtin/pull.c:242
-#: builtin/push.c:588
+#: builtin/clone.c:144 builtin/fetch.c:192 builtin/pull.c:243
+#: builtin/push.c:575
 msgid "use IPv6 addresses only"
 msgstr "solo usar direcciones IPv6"
 
-#: builtin/clone.c:149
+#: builtin/clone.c:148
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "cualquier submódulo clonado usará su branch de rastreo remoto"
 
-#: builtin/clone.c:285
+#: builtin/clone.c:284
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -11066,47 +11103,42 @@
 "No se pudo adivinar ningún nombre de directorio.\n"
 "Por favor especifique un directorio en la línea de comando"
 
-#: builtin/clone.c:338
+#: builtin/clone.c:337
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "info: No se pudo agregar un alterno para '%s': %s\n"
 
-#: builtin/clone.c:411
+#: builtin/clone.c:410
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s existe pero no es un directorio"
 
-#: builtin/clone.c:428
+#: builtin/clone.c:427
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "falló al iniciar el iterador sobre '%s'"
 
-#: builtin/clone.c:453
-#, c-format
-msgid "failed to unlink '%s'"
-msgstr "falló al desvincular '%s'"
-
-#: builtin/clone.c:458
+#: builtin/clone.c:457
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "falló al crear link '%s'"
 
-#: builtin/clone.c:462
+#: builtin/clone.c:461
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "falló al copiar archivo a '%s'"
 
-#: builtin/clone.c:467
+#: builtin/clone.c:466
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "falló al iterar sobre '%s'"
 
-#: builtin/clone.c:492
+#: builtin/clone.c:491
 #, c-format
 msgid "done.\n"
 msgstr "hecho.\n"
 
-#: builtin/clone.c:506
+#: builtin/clone.c:505
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -11116,96 +11148,96 @@
 "Puedes inspeccionar a qué se hizo checkout con 'git status'\n"
 "y volver a intentarlo con 'git restore --source=HEAD :/'\n"
 
-#: builtin/clone.c:583
+#: builtin/clone.c:582
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "No se pudo encontrar la rama remota %s para clonar."
 
-#: builtin/clone.c:702
+#: builtin/clone.c:701
 #, c-format
 msgid "unable to update %s"
 msgstr "incapaz de actualizar %s"
 
-#: builtin/clone.c:752
+#: builtin/clone.c:751
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 "remoto HEAD refiere a un ref inexistente, no se puede hacer checkout.\n"
 
-#: builtin/clone.c:783
+#: builtin/clone.c:782
 msgid "unable to checkout working tree"
 msgstr "no es posible realizar checkout en el árbol de trabajo"
 
-#: builtin/clone.c:833
+#: builtin/clone.c:832
 msgid "unable to write parameters to config file"
 msgstr "no es posible escribir parámetros al archivo config"
 
-#: builtin/clone.c:896
+#: builtin/clone.c:895
 msgid "cannot repack to clean up"
 msgstr "no se puede reempaquetar para limpiar"
 
-#: builtin/clone.c:898
+#: builtin/clone.c:897
 msgid "cannot unlink temporary alternates file"
 msgstr "no se puede desvincular archivos alternos temporales"
 
-#: builtin/clone.c:938 builtin/receive-pack.c:1950
+#: builtin/clone.c:937 builtin/receive-pack.c:1948
 msgid "Too many arguments."
 msgstr "Muchos argumentos."
 
-#: builtin/clone.c:942
+#: builtin/clone.c:941
 msgid "You must specify a repository to clone."
 msgstr "Tienes que especificar un repositorio para clonar."
 
-#: builtin/clone.c:955
+#: builtin/clone.c:954
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "Las opciones --bare y --origin %s son incompatibles."
 
-#: builtin/clone.c:958
+#: builtin/clone.c:957
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "--bare y --separate-git-dir son incompatibles."
 
-#: builtin/clone.c:971
+#: builtin/clone.c:970
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "repositorio '%s' no existe"
 
-#: builtin/clone.c:977 builtin/fetch.c:1660
+#: builtin/clone.c:976 builtin/fetch.c:1790
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "profundidad %s no es un numero positivo"
 
-#: builtin/clone.c:987
+#: builtin/clone.c:986
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "la ruta de destino '%s' ya existe y no es un directorio vacío."
 
-#: builtin/clone.c:997
+#: builtin/clone.c:996
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "directorio de trabajo '%s' ya existe."
 
-#: builtin/clone.c:1012 builtin/clone.c:1033 builtin/difftool.c:264
-#: builtin/worktree.c:303 builtin/worktree.c:335
+#: builtin/clone.c:1011 builtin/clone.c:1032 builtin/difftool.c:271
+#: builtin/log.c:1785 builtin/worktree.c:302 builtin/worktree.c:334
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "no se pudo crear directorios principales de '%s'"
 
-#: builtin/clone.c:1017
+#: builtin/clone.c:1016
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "no se pudo crear un árbol de trabajo '%s'"
 
-#: builtin/clone.c:1037
+#: builtin/clone.c:1036
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Clonando en un repositorio vacío '%s'...\n"
 
-#: builtin/clone.c:1039
+#: builtin/clone.c:1038
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Clonando en '%s'...\n"
 
-#: builtin/clone.c:1063
+#: builtin/clone.c:1062
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
@@ -11213,36 +11245,36 @@
 "clone --recursive no es compatible con --reference y --reference-if-able al "
 "mismo tiempo"
 
-#: builtin/clone.c:1124
+#: builtin/clone.c:1123
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "--depth es ignorada en clonaciones locales; usa file:// más bien."
 
-#: builtin/clone.c:1126
+#: builtin/clone.c:1125
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr "--shallow-since es ignorado en el clon local; use file:// ."
 
-#: builtin/clone.c:1128
+#: builtin/clone.c:1127
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr "--shallow-exclude es ignorado en clones locales; use file://."
 
-#: builtin/clone.c:1130
+#: builtin/clone.c:1129
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr "--filter es ignorado en clones locales; usa file:// en su lugar."
 
-#: builtin/clone.c:1133
+#: builtin/clone.c:1132
 msgid "source repository is shallow, ignoring --local"
 msgstr "repositorio fuente es superficial, ignorando --local"
 
-#: builtin/clone.c:1138
+#: builtin/clone.c:1137
 msgid "--local is ignored"
 msgstr "--local es ignorado"
 
-#: builtin/clone.c:1215 builtin/clone.c:1223
+#: builtin/clone.c:1212 builtin/clone.c:1220
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "Rama remota %s no encontrada en upstream %s"
 
-#: builtin/clone.c:1226
+#: builtin/clone.c:1223
 msgid "You appear to have cloned an empty repository."
 msgstr "Pareces haber clonado un repositorio sin contenido."
 
@@ -11320,7 +11352,7 @@
 msgstr "id del objeto commit padre"
 
 #: builtin/commit-tree.c:114 builtin/commit.c:1500 builtin/merge.c:270
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1460
+#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1469
 #: builtin/tag.c:412
 msgid "message"
 msgstr "mensaje"
@@ -11334,7 +11366,7 @@
 msgstr "leer mensaje de commit desde un archivo"
 
 #: builtin/commit-tree.c:121 builtin/commit.c:1512 builtin/merge.c:287
-#: builtin/pull.c:194 builtin/revert.c:118
+#: builtin/pull.c:195 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "Firmar commit con GPG"
 
@@ -11509,7 +11541,7 @@
 msgstr ""
 "\n"
 "Parece que estás haciendo un commit con una fusión dentro.\n"
-"Si esto no es correcto, por favor remueve el archivo\n"
+"Si esto no es correcto, por favor elimina el archivo\n"
 "\t%s\n"
 "y vuelve a intentar.\n"
 
@@ -11534,9 +11566,9 @@
 "Please enter the commit message for your changes. Lines starting\n"
 "with '%c' will be ignored, and an empty message aborts the commit.\n"
 msgstr ""
-"Por favor ingresa el mensaje del commit para tus cambios. Las líneas que "
-"comiencen\n"
-"con '%c' serán ignoradas, y un mensaje vacío aborta el commit.\n"
+"Por favor ingresa el mensaje del commit para tus cambios. Las\n"
+" líneas que comiencen con '%c' serán ignoradas, y un mensaje\n"
+" vacío aborta el commit.\n"
 
 #: builtin/commit.c:855
 #, c-format
@@ -11545,9 +11577,9 @@
 "with '%c' will be kept; you may remove them yourself if you want to.\n"
 "An empty message aborts the commit.\n"
 msgstr ""
-"Por favor ingresa el mensaje del commit para tus cambios. Las líneas que "
-"comiencen\n"
-"con '%c' serán guardadas; puede eliminarlas usted mismo si desea.\n"
+"Por favor ingresa el mensaje del commit para tus cambios. Las\n"
+" líneas que comiencen con '%c' serán guardadas; puede eliminarlas\n"
+" usted mismo si lo desea.\n"
 "Un mensaje vacío aborta el commit.\n"
 
 #: builtin/commit.c:872
@@ -11665,8 +11697,8 @@
 msgid "version"
 msgstr "version"
 
-#: builtin/commit.c:1347 builtin/commit.c:1529 builtin/push.c:561
-#: builtin/worktree.c:651
+#: builtin/commit.c:1347 builtin/commit.c:1529 builtin/push.c:548
+#: builtin/worktree.c:650
 msgid "machine-readable output"
 msgstr "output formato-maquina"
 
@@ -11679,8 +11711,8 @@
 msgstr "terminar entradas con NUL"
 
 #: builtin/commit.c:1355 builtin/commit.c:1359 builtin/commit.c:1537
-#: builtin/fast-export.c:1125 builtin/fast-export.c:1128
-#: builtin/fast-export.c:1131 builtin/rebase.c:1471 parse-options.h:332
+#: builtin/fast-export.c:1153 builtin/fast-export.c:1156
+#: builtin/fast-export.c:1159 builtin/rebase.c:1495 parse-options.h:332
 msgid "mode"
 msgstr "modo"
 
@@ -11698,7 +11730,7 @@
 "mostrar archivos ignorados, modos opcionales: traditional, matching, no. "
 "(Predeterminado: traditional)"
 
-#: builtin/commit.c:1362 parse-options.h:179
+#: builtin/commit.c:1362 parse-options.h:188
 msgid "when"
 msgstr "cuando"
 
@@ -11751,7 +11783,7 @@
 msgid "override author for commit"
 msgstr "sobrescribe el autor del commit"
 
-#: builtin/commit.c:1499 builtin/gc.c:539
+#: builtin/commit.c:1499 builtin/gc.c:538
 msgid "date"
 msgstr "fecha"
 
@@ -11787,8 +11819,8 @@
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr "el autor del commit soy yo ahora (usado con -C/-c/--amend)"
 
-#: builtin/commit.c:1506 builtin/log.c:1564 builtin/merge.c:289
-#: builtin/pull.c:163 builtin/revert.c:110
+#: builtin/commit.c:1506 builtin/log.c:1565 builtin/merge.c:289
+#: builtin/pull.c:164 builtin/revert.c:110
 msgid "add Signed-off-by:"
 msgstr "agregar Signed-off-by: (firmado por)"
 
@@ -11895,66 +11927,69 @@
 msgstr "git commit-graph read [--object-dir <objdir>]"
 
 #: builtin/commit-graph.c:13 builtin/commit-graph.c:19
-msgid "git commit-graph verify [--object-dir <objdir>] [--shallow]"
-msgstr "git commit-graph verify [--object-dir <objdir>] [--shallow]"
+msgid ""
+"git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
+msgstr ""
+"git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
 
 #: builtin/commit-graph.c:14 builtin/commit-graph.c:29
 msgid ""
 "git commit-graph write [--object-dir <objdir>] [--append|--split] [--"
-"reachable|--stdin-packs|--stdin-commits] <split options>"
+"reachable|--stdin-packs|--stdin-commits] [--[no-]progress] <split options>"
 msgstr ""
-"git commit-graph write [--object-dir <objdir>] [--append|--split] [--"
-"reachable|--stdin-packs|--stdin-commits] <split options>"
+"git commit-graph write [--object-dir <dir objeto>] [--append|--split] [--"
+"reachable|--stdin-packs|--stdin-commits] [--[no-]progress] <opciones de "
+"split>"
 
-#: builtin/commit-graph.c:54 builtin/commit-graph.c:100
-#: builtin/commit-graph.c:161 builtin/commit-graph.c:237 builtin/fetch.c:163
-#: builtin/log.c:1584
+#: builtin/commit-graph.c:55 builtin/commit-graph.c:107
+#: builtin/commit-graph.c:170 builtin/commit-graph.c:254 builtin/fetch.c:178
+#: builtin/log.c:1585
 msgid "dir"
 msgstr "dir"
 
-#: builtin/commit-graph.c:55 builtin/commit-graph.c:101
-#: builtin/commit-graph.c:162 builtin/commit-graph.c:238
+#: builtin/commit-graph.c:56 builtin/commit-graph.c:108
+#: builtin/commit-graph.c:171 builtin/commit-graph.c:255
 msgid "The object directory to store the graph"
 msgstr "El directorio de objetos para guardar el gráfico"
 
-#: builtin/commit-graph.c:57
+#: builtin/commit-graph.c:58
 msgid "if the commit-graph is split, only verify the tip file"
 msgstr "si el commit-graph está cortado, solo verifica la punta del archivo"
 
-#: builtin/commit-graph.c:73 builtin/commit-graph.c:116
+#: builtin/commit-graph.c:80 builtin/commit-graph.c:125
 #, c-format
 msgid "Could not open commit-graph '%s'"
 msgstr "No se pudo abrir commit-graph '%s'"
 
-#: builtin/commit-graph.c:164
+#: builtin/commit-graph.c:173
 msgid "start walk at all refs"
 msgstr "comenzar caminata en todas las refs"
 
-#: builtin/commit-graph.c:166
+#: builtin/commit-graph.c:175
 msgid "scan pack-indexes listed by stdin for commits"
 msgstr "escanear paquete de índices por stdin por commits"
 
-#: builtin/commit-graph.c:168
+#: builtin/commit-graph.c:177
 msgid "start walk at commits listed by stdin"
 msgstr "comenzar a caminar a los commits listados por stdin"
 
-#: builtin/commit-graph.c:170
+#: builtin/commit-graph.c:179
 msgid "include all commits already in the commit-graph file"
 msgstr "inclye todos los commits que ya están en el archivo commit-graph"
 
-#: builtin/commit-graph.c:172
+#: builtin/commit-graph.c:182
 msgid "allow writing an incremental commit-graph file"
 msgstr "permitir escribir un archivo commit-graph incremental"
 
-#: builtin/commit-graph.c:174 builtin/commit-graph.c:178
+#: builtin/commit-graph.c:184 builtin/commit-graph.c:188
 msgid "maximum number of commits in a non-base split commit-graph"
 msgstr "máximo número de commits en un commit-graph sin base cortada"
 
-#: builtin/commit-graph.c:176
+#: builtin/commit-graph.c:186
 msgid "maximum ratio between two levels of a split commit-graph"
 msgstr "radio máximo entre dos niveles de corte de commit-graph"
 
-#: builtin/commit-graph.c:191
+#: builtin/commit-graph.c:204
 msgid "use at most one of --reachable, --stdin-commits, or --stdin-packs"
 msgstr "use como máximo uno de --reachable, --stdin-commits, o --stdin-packs"
 
@@ -12271,57 +12306,57 @@
 msgid "print sizes in human readable format"
 msgstr "mostrar tamaños en formato legible para humano"
 
-#: builtin/describe.c:27
+#: builtin/describe.c:26
 msgid "git describe [<options>] [<commit-ish>...]"
 msgstr "git describe [<opciones>] [<commit-ish>...]"
 
-#: builtin/describe.c:28
+#: builtin/describe.c:27
 msgid "git describe [<options>] --dirty"
 msgstr "git describe [<opciones>] --dirty"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "head"
 msgstr "head"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "lightweight"
 msgstr "ligero"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "annotated"
 msgstr "anotado"
 
-#: builtin/describe.c:273
+#: builtin/describe.c:275
 #, c-format
 msgid "annotated tag %s not available"
 msgstr "tag anotado %s no disponible"
 
-#: builtin/describe.c:277
+#: builtin/describe.c:279
 #, c-format
 msgid "annotated tag %s has no embedded name"
 msgstr "tag anotado %s no tiene nombre embebido"
 
-#: builtin/describe.c:279
+#: builtin/describe.c:281
 #, c-format
 msgid "tag '%s' is really '%s' here"
 msgstr "tag '%s' es realmente '%s' aquí"
 
-#: builtin/describe.c:323
+#: builtin/describe.c:325
 #, c-format
 msgid "no tag exactly matches '%s'"
 msgstr "no hay tag que concuerde exactamente con '%s'"
 
-#: builtin/describe.c:325
+#: builtin/describe.c:327
 #, c-format
 msgid "No exact match on refs or tags, searching to describe\n"
 msgstr "No hay coincidencia exacta en refs o tags, buscando en describe\n"
 
-#: builtin/describe.c:379
+#: builtin/describe.c:381
 #, c-format
 msgid "finished search at %s\n"
 msgstr "búsqueda finalizada a las %s\n"
 
-#: builtin/describe.c:405
+#: builtin/describe.c:407
 #, c-format
 msgid ""
 "No annotated tags can describe '%s'.\n"
@@ -12330,7 +12365,7 @@
 "No hay tags anotados que puedan describir '%s'.\n"
 "Sin embargo, hubieron tags no anotados: intente --tags."
 
-#: builtin/describe.c:409
+#: builtin/describe.c:411
 #, c-format
 msgid ""
 "No tags can describe '%s'.\n"
@@ -12339,12 +12374,12 @@
 "Ningún tag puede describit '%s'.\n"
 "Intente --always, o cree algunos tags."
 
-#: builtin/describe.c:439
+#: builtin/describe.c:441
 #, c-format
 msgid "traversed %lu commits\n"
 msgstr "%lu commits cruzados\n"
 
-#: builtin/describe.c:442
+#: builtin/describe.c:444
 #, c-format
 msgid ""
 "more than %i tags found; listed %i most recent\n"
@@ -12353,90 +12388,90 @@
 "se encontró más de %i tags; se mostró %i más reciente\n"
 "fin de la búsqueda en %s\n"
 
-#: builtin/describe.c:510
+#: builtin/describe.c:512
 #, c-format
 msgid "describe %s\n"
 msgstr "describe %s\n"
 
-#: builtin/describe.c:513
+#: builtin/describe.c:515
 #, c-format
 msgid "Not a valid object name %s"
 msgstr "Nombre de objeto %s no válido"
 
-#: builtin/describe.c:521
+#: builtin/describe.c:523
 #, c-format
 msgid "%s is neither a commit nor blob"
 msgstr "%s no es un commit ni un blob"
 
-#: builtin/describe.c:535
+#: builtin/describe.c:537
 msgid "find the tag that comes after the commit"
 msgstr "encontrar el tag que viene después del commit"
 
-#: builtin/describe.c:536
+#: builtin/describe.c:538
 msgid "debug search strategy on stderr"
 msgstr "hacer debug a la estrategia de búsqueda en stderr"
 
-#: builtin/describe.c:537
+#: builtin/describe.c:539
 msgid "use any ref"
 msgstr "use cualquier ref"
 
-#: builtin/describe.c:538
+#: builtin/describe.c:540
 msgid "use any tag, even unannotated"
 msgstr "use cualquier tag, incluso los no anotados"
 
-#: builtin/describe.c:539
+#: builtin/describe.c:541
 msgid "always use long format"
 msgstr "siempre usar formato largo"
 
-#: builtin/describe.c:540
+#: builtin/describe.c:542
 msgid "only follow first parent"
 msgstr "solo seguir el primer patrón"
 
-#: builtin/describe.c:543
+#: builtin/describe.c:545
 msgid "only output exact matches"
 msgstr "solo mostrar concordancias exactas"
 
-#: builtin/describe.c:545
+#: builtin/describe.c:547
 msgid "consider <n> most recent tags (default: 10)"
 msgstr "considerar <n> tags más recientes (default:10)"
 
-#: builtin/describe.c:547
+#: builtin/describe.c:549
 msgid "only consider tags matching <pattern>"
 msgstr "solo considerar tags que concuerden con <patrón>"
 
-#: builtin/describe.c:549
+#: builtin/describe.c:551
 msgid "do not consider tags matching <pattern>"
 msgstr "no considerar tags que concuerden con <patrón>"
 
-#: builtin/describe.c:551 builtin/name-rev.c:422
+#: builtin/describe.c:553 builtin/name-rev.c:426
 msgid "show abbreviated commit object as fallback"
 msgstr "mostrar el objeto commit abreviado como fallback"
 
-#: builtin/describe.c:552 builtin/describe.c:555
+#: builtin/describe.c:554 builtin/describe.c:557
 msgid "mark"
 msgstr "marca"
 
-#: builtin/describe.c:553
+#: builtin/describe.c:555
 msgid "append <mark> on dirty working tree (default: \"-dirty\")"
 msgstr "adjuntar <marca> en el árbol de trabajo sucio (default: \"-dirty\")"
 
-#: builtin/describe.c:556
+#: builtin/describe.c:558
 msgid "append <mark> on broken working tree (default: \"-broken\")"
 msgstr "adjuntar <marca> en un árbol de trabajo roto (default: \"-broken\")"
 
-#: builtin/describe.c:574
+#: builtin/describe.c:576
 msgid "--long is incompatible with --abbrev=0"
 msgstr "--long es incompatible con --abbrev=0"
 
-#: builtin/describe.c:603
+#: builtin/describe.c:605
 msgid "No names found, cannot describe anything."
 msgstr "No se encontraron nombres, no se puede describir nada."
 
-#: builtin/describe.c:654
+#: builtin/describe.c:656
 msgid "--dirty is incompatible with commit-ishes"
 msgstr "--dirty es incompatible con commit-ismos"
 
-#: builtin/describe.c:656
+#: builtin/describe.c:658
 msgid "--broken is incompatible with commit-ishes"
 msgstr "--broken es incompatible con commit-ismos"
 
@@ -12473,27 +12508,27 @@
 msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
 msgstr "git difftool [<opciones>] [<commit> [<commit>]] [--] [<ruta>...]"
 
-#: builtin/difftool.c:253
+#: builtin/difftool.c:260
 #, c-format
 msgid "failed: %d"
 msgstr "falló: %d"
 
-#: builtin/difftool.c:295
+#: builtin/difftool.c:302
 #, c-format
 msgid "could not read symlink %s"
 msgstr "no se pudo leer el symlink %s"
 
-#: builtin/difftool.c:297
+#: builtin/difftool.c:304
 #, c-format
 msgid "could not read symlink file %s"
 msgstr "no se pudo leer el archivo symlink %s"
 
-#: builtin/difftool.c:305
+#: builtin/difftool.c:312
 #, c-format
 msgid "could not read object %s for symlink %s"
 msgstr "no se pudo leer el objeto %s para el symlink %s"
 
-#: builtin/difftool.c:406
+#: builtin/difftool.c:413
 msgid ""
 "combined diff formats('-c' and '--cc') are not supported in\n"
 "directory diff mode('-d' and '--dir-diff')."
@@ -12501,54 +12536,54 @@
 "formatos combinados de diff ('-c' y '--cc') no soportados en\n"
 "modo diff para directorio('-d' y '--dir-diff')."
 
-#: builtin/difftool.c:626
+#: builtin/difftool.c:634
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "ambos archivos modificados: '%s' y '%s'."
 
-#: builtin/difftool.c:628
+#: builtin/difftool.c:636
 msgid "working tree file has been left."
 msgstr "archivo del árbol de trabajo ha sido dejado."
 
-#: builtin/difftool.c:639
+#: builtin/difftool.c:647
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "archivo temporal existe en '%s'."
 
-#: builtin/difftool.c:640
+#: builtin/difftool.c:648
 msgid "you may want to cleanup or recover these."
 msgstr "tal vez desees limpiar o recuperar estos."
 
-#: builtin/difftool.c:689
+#: builtin/difftool.c:697
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr "use `diff.guitool` en lugar de `diff.tool`"
 
-#: builtin/difftool.c:691
+#: builtin/difftool.c:699
 msgid "perform a full-directory diff"
 msgstr "realizar un diff de todo el directorio"
 
-#: builtin/difftool.c:693
+#: builtin/difftool.c:701
 msgid "do not prompt before launching a diff tool"
 msgstr "no mostrar antes de lanzar una herramienta de diff"
 
-#: builtin/difftool.c:698
+#: builtin/difftool.c:706
 msgid "use symlinks in dir-diff mode"
 msgstr "usar enlaces simbólicos en modo dir-diff"
 
-#: builtin/difftool.c:699
+#: builtin/difftool.c:707
 msgid "tool"
 msgstr "herramienta"
 
-#: builtin/difftool.c:700
+#: builtin/difftool.c:708
 msgid "use the specified diff tool"
 msgstr "usar la herramienta de diff especificada"
 
-#: builtin/difftool.c:702
+#: builtin/difftool.c:710
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr ""
 "mostrar una lista de herramientas de diff que pueden ser usadas con `--tool`"
 
-#: builtin/difftool.c:705
+#: builtin/difftool.c:713
 msgid ""
 "make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
 "code"
@@ -12556,31 +12591,31 @@
 "hacer que 'git-difftool' salga cuando una herramienta de diff retorne un "
 "código de salida distinto de cero"
 
-#: builtin/difftool.c:708
+#: builtin/difftool.c:716
 msgid "specify a custom command for viewing diffs"
 msgstr "especificar un comando personalizado para ver diffs"
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:717
 msgid "passed to `diff`"
 msgstr "pasado a `diff`"
 
-#: builtin/difftool.c:724
+#: builtin/difftool.c:732
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool requiere un árbol de trabajo o --no-index"
 
-#: builtin/difftool.c:731
+#: builtin/difftool.c:739
 msgid "--dir-diff is incompatible with --no-index"
 msgstr "--dirty-diff es incompatible con --no-index"
 
-#: builtin/difftool.c:734
+#: builtin/difftool.c:742
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr "--gui, --tool y --extcmd son mutuamente exclusivas"
 
-#: builtin/difftool.c:742
+#: builtin/difftool.c:750
 msgid "no <tool> given for --tool=<tool>"
 msgstr "no se ha proporcionado <herramienta> para --tool=<herramienta>"
 
-#: builtin/difftool.c:749
+#: builtin/difftool.c:757
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "no se ha entregado <comando> para --extcmd=<comando>"
 
@@ -12617,158 +12652,184 @@
 msgid "git fast-export [rev-list-opts]"
 msgstr "git fast-export [rev-list-opts]"
 
-#: builtin/fast-export.c:1124
+#: builtin/fast-export.c:852
+msgid "Error: Cannot export nested tags unless --mark-tags is specified."
+msgstr ""
+"Error: No se puede exportar los tags anidados a menos que --mark-tags sea "
+"especificado."
+
+#: builtin/fast-export.c:1152
 msgid "show progress after <n> objects"
 msgstr "mostrar progreso después de <n> objetos"
 
-#: builtin/fast-export.c:1126
+#: builtin/fast-export.c:1154
 msgid "select handling of signed tags"
 msgstr "seleccionar el manejo de tags firmados"
 
-#: builtin/fast-export.c:1129
+#: builtin/fast-export.c:1157
 msgid "select handling of tags that tag filtered objects"
 msgstr "seleccionar el manejo de tags que son tags de objetos filtrados"
 
-#: builtin/fast-export.c:1132
+#: builtin/fast-export.c:1160
 msgid "select handling of commit messages in an alternate encoding"
 msgstr "seleccionar el manejo de mensajes de commit en un encoding diferente"
 
-#: builtin/fast-export.c:1135
+#: builtin/fast-export.c:1163
 msgid "Dump marks to this file"
 msgstr "Volcar marcas a este archivo"
 
-#: builtin/fast-export.c:1137
+#: builtin/fast-export.c:1165
 msgid "Import marks from this file"
 msgstr "Importar marcas de este archivo"
 
-#: builtin/fast-export.c:1139
+#: builtin/fast-export.c:1169
+msgid "Import marks from this file if it exists"
+msgstr "Importar marcas de este archivo si existe"
+
+#: builtin/fast-export.c:1171
 msgid "Fake a tagger when tags lack one"
 msgstr "Falsificar un tagger cuando les falta uno"
 
-#: builtin/fast-export.c:1141
+#: builtin/fast-export.c:1173
 msgid "Output full tree for each commit"
 msgstr "Mostrar todo el árbol para cada commit"
 
-#: builtin/fast-export.c:1143
+#: builtin/fast-export.c:1175
 msgid "Use the done feature to terminate the stream"
 msgstr "Use el feature done para terminar el stream"
 
-#: builtin/fast-export.c:1144
+#: builtin/fast-export.c:1176
 msgid "Skip output of blob data"
 msgstr "Saltar el output de data blob"
 
-#: builtin/fast-export.c:1145 builtin/log.c:1632
+#: builtin/fast-export.c:1177 builtin/log.c:1633
 msgid "refspec"
 msgstr "refspec"
 
-#: builtin/fast-export.c:1146
+#: builtin/fast-export.c:1178
 msgid "Apply refspec to exported refs"
 msgstr "Aplicar refspec para los refs exportados"
 
-#: builtin/fast-export.c:1147
+#: builtin/fast-export.c:1179
 msgid "anonymize output"
 msgstr "anonimizar la salida"
 
-#: builtin/fast-export.c:1149
+#: builtin/fast-export.c:1181
 msgid "Reference parents which are not in fast-export stream by object id"
 msgstr ""
 "Padres de la referencia que no estan en fast-export stream por id de objeto"
 
-#: builtin/fast-export.c:1151
+#: builtin/fast-export.c:1183
 msgid "Show original object ids of blobs/commits"
 msgstr "Mostrar ids de objetos originales para blobs/commits"
 
-#: builtin/fetch.c:30
+#: builtin/fast-export.c:1185
+msgid "Label tags with mark ids"
+msgstr "Marcar tags con ids de mark"
+
+#: builtin/fast-export.c:1220
+msgid "Cannot pass both --import-marks and --import-marks-if-exists"
+msgstr "No se puede pasar ambos --import-marks y --import-marks-if-exists"
+
+#: builtin/fetch.c:34
 msgid "git fetch [<options>] [<repository> [<refspec>...]]"
 msgstr "git fetch [<opciones>] [<repositorio> [<refspec>...]]"
 
-#: builtin/fetch.c:31
+#: builtin/fetch.c:35
 msgid "git fetch [<options>] <group>"
 msgstr "git fetch [<opciones>] <grupo>"
 
-#: builtin/fetch.c:32
+#: builtin/fetch.c:36
 msgid "git fetch --multiple [<options>] [(<repository> | <group>)...]"
 msgstr "git fetch --multiple [<opciones>] [(<repositorio> | <grupo>)...]"
 
-#: builtin/fetch.c:33
+#: builtin/fetch.c:37
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<opciones>]"
 
-#: builtin/fetch.c:125 builtin/pull.c:203
+#: builtin/fetch.c:115
+msgid "fetch.parallel cannot be negative"
+msgstr "fetch.parallel no puede ser negativo"
+
+#: builtin/fetch.c:138 builtin/pull.c:204
 msgid "fetch from all remotes"
 msgstr "extraer de todos los remotos"
 
-#: builtin/fetch.c:127 builtin/pull.c:206
+#: builtin/fetch.c:140 builtin/pull.c:248
+msgid "set upstream for git pull/fetch"
+msgstr "configurar upstream para git pulll/fetch"
+
+#: builtin/fetch.c:142 builtin/pull.c:207
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "adjuntar a .git/FETCH_HEAD en lugar de sobrescribir"
 
-#: builtin/fetch.c:129 builtin/pull.c:209
+#: builtin/fetch.c:144 builtin/pull.c:210
 msgid "path to upload pack on remote end"
 msgstr "ruta para cargar el paquete al final del remoto"
 
-#: builtin/fetch.c:130
+#: builtin/fetch.c:145
 msgid "force overwrite of local reference"
 msgstr "forzar sobrescritura de referencia local"
 
-#: builtin/fetch.c:132
+#: builtin/fetch.c:147
 msgid "fetch from multiple remotes"
 msgstr "extraer de múltiples remotos"
 
-#: builtin/fetch.c:134 builtin/pull.c:213
+#: builtin/fetch.c:149 builtin/pull.c:214
 msgid "fetch all tags and associated objects"
 msgstr "extraer todos los tags y objetos asociados"
 
-#: builtin/fetch.c:136
+#: builtin/fetch.c:151
 msgid "do not fetch all tags (--no-tags)"
 msgstr "no extraer todos los tags (--no-tags)"
 
-#: builtin/fetch.c:138
+#: builtin/fetch.c:153
 msgid "number of submodules fetched in parallel"
 msgstr "número de submódulos extraídos en paralelo"
 
-#: builtin/fetch.c:140 builtin/pull.c:216
+#: builtin/fetch.c:155 builtin/pull.c:217
 msgid "prune remote-tracking branches no longer on remote"
 msgstr "limpiar ramas remotas rastreadas que ya no están en el remoto"
 
-#: builtin/fetch.c:142
+#: builtin/fetch.c:157
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
 "limpiar tags locales que no se encuentran en el remoto y eliminar tags "
 "cambiados"
 
-#: builtin/fetch.c:143 builtin/fetch.c:166 builtin/pull.c:140
+#: builtin/fetch.c:158 builtin/fetch.c:181 builtin/pull.c:141
 msgid "on-demand"
 msgstr "en demanda"
 
-#: builtin/fetch.c:144
+#: builtin/fetch.c:159
 msgid "control recursive fetching of submodules"
 msgstr "controlar extracción recursiva de submódulos"
 
-#: builtin/fetch.c:148 builtin/pull.c:224
+#: builtin/fetch.c:163 builtin/pull.c:225
 msgid "keep downloaded pack"
 msgstr "mantener el paquete descargado"
 
-#: builtin/fetch.c:150
+#: builtin/fetch.c:165
 msgid "allow updating of HEAD ref"
 msgstr "permitir actualizar la ref HEAD"
 
-#: builtin/fetch.c:153 builtin/fetch.c:159 builtin/pull.c:227
+#: builtin/fetch.c:168 builtin/fetch.c:174 builtin/pull.c:228
 msgid "deepen history of shallow clone"
 msgstr "historia profunda de un clon superficial"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:170
 msgid "deepen history of shallow repository based on time"
 msgstr "historia profunda de un repositorio superficial basado en tiempo"
 
-#: builtin/fetch.c:161 builtin/pull.c:230
+#: builtin/fetch.c:176 builtin/pull.c:231
 msgid "convert to a complete repository"
 msgstr "convertir a un repositorio completo"
 
-#: builtin/fetch.c:164
+#: builtin/fetch.c:179
 msgid "prepend this to submodule path output"
 msgstr "anteponer esto a salida de la ruta del submódulo"
 
-#: builtin/fetch.c:167
+#: builtin/fetch.c:182
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
@@ -12776,90 +12837,90 @@
 "default para extracción recursiva de submódulos (menor prioridad que "
 "archivos de configuración)"
 
-#: builtin/fetch.c:171 builtin/pull.c:233
+#: builtin/fetch.c:186 builtin/pull.c:234
 msgid "accept refs that update .git/shallow"
 msgstr "aceptar refs que actualicen .git/shallow"
 
-#: builtin/fetch.c:172 builtin/pull.c:235
+#: builtin/fetch.c:187 builtin/pull.c:236
 msgid "refmap"
 msgstr "refmap"
 
-#: builtin/fetch.c:173 builtin/pull.c:236
+#: builtin/fetch.c:188 builtin/pull.c:237
 msgid "specify fetch refmap"
 msgstr "especificar extracción de refmap"
 
-#: builtin/fetch.c:180
+#: builtin/fetch.c:195
 msgid "report that we have only objects reachable from this object"
 msgstr "reporta que solo tenemos objetos alcanzables de este objeto"
 
-#: builtin/fetch.c:183
+#: builtin/fetch.c:198
 msgid "run 'gc --auto' after fetching"
 msgstr "ejecutar 'gc --auto' tras el fetch"
 
-#: builtin/fetch.c:185 builtin/pull.c:245
+#: builtin/fetch.c:200 builtin/pull.c:246
 msgid "check for forced-updates on all updated branches"
 msgstr "verificar updates forzados en todos los branch actualizados"
 
-#: builtin/fetch.c:491
+#: builtin/fetch.c:510
 msgid "Couldn't find remote ref HEAD"
 msgstr "No se puedo encontrar ref remota HEAD"
 
-#: builtin/fetch.c:630
+#: builtin/fetch.c:650
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
 msgstr "la configuración fetch.output contiene el valor inválido %s"
 
-#: builtin/fetch.c:728
+#: builtin/fetch.c:748
 #, c-format
 msgid "object %s not found"
 msgstr "objeto %s no encontrado"
 
-#: builtin/fetch.c:732
+#: builtin/fetch.c:752
 msgid "[up to date]"
 msgstr "[actualizado]"
 
-#: builtin/fetch.c:745 builtin/fetch.c:761 builtin/fetch.c:833
+#: builtin/fetch.c:765 builtin/fetch.c:781 builtin/fetch.c:853
 msgid "[rejected]"
 msgstr "[rechazado]"
 
-#: builtin/fetch.c:746
+#: builtin/fetch.c:766
 msgid "can't fetch in current branch"
 msgstr "no se puede traer en la rama actual"
 
-#: builtin/fetch.c:756
+#: builtin/fetch.c:776
 msgid "[tag update]"
 msgstr "[actualización de tag]"
 
-#: builtin/fetch.c:757 builtin/fetch.c:794 builtin/fetch.c:816
-#: builtin/fetch.c:828
+#: builtin/fetch.c:777 builtin/fetch.c:814 builtin/fetch.c:836
+#: builtin/fetch.c:848
 msgid "unable to update local ref"
 msgstr "no se posible actualizar el ref local"
 
-#: builtin/fetch.c:761
+#: builtin/fetch.c:781
 msgid "would clobber existing tag"
 msgstr "podría golpear tag existente"
 
-#: builtin/fetch.c:783
+#: builtin/fetch.c:803
 msgid "[new tag]"
 msgstr "[nuevo tag]"
 
-#: builtin/fetch.c:786
+#: builtin/fetch.c:806
 msgid "[new branch]"
 msgstr "[nueva rama]"
 
-#: builtin/fetch.c:789
+#: builtin/fetch.c:809
 msgid "[new ref]"
 msgstr "[nueva referencia]"
 
-#: builtin/fetch.c:828
+#: builtin/fetch.c:848
 msgid "forced update"
 msgstr "actualización forzada"
 
-#: builtin/fetch.c:833
+#: builtin/fetch.c:853
 msgid "non-fast-forward"
 msgstr "avance lento"
 
-#: builtin/fetch.c:854
+#: builtin/fetch.c:874
 msgid ""
 "Fetch normally indicates which branches had a forced update,\n"
 "but that check has been disabled. To re-enable, use '--show-forced-updates'\n"
@@ -12870,7 +12931,7 @@
 "show-forced-updates'\n"
 "o ejecute 'git config fetch.showForcedUpdates true'."
 
-#: builtin/fetch.c:858
+#: builtin/fetch.c:878
 #, c-format
 msgid ""
 "It took %.2f seconds to check forced updates. You can use\n"
@@ -12883,22 +12944,22 @@
 "false'\n"
 "para evitar esta validación.\n"
 
-#: builtin/fetch.c:888
+#: builtin/fetch.c:908
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s no envió todos los objetos necesarios\n"
 
-#: builtin/fetch.c:909
+#: builtin/fetch.c:929
 #, c-format
 msgid "reject %s because shallow roots are not allowed to be updated"
 msgstr "rechazado %s porque raíces superficiales no pueden ser actualizadas"
 
-#: builtin/fetch.c:1000 builtin/fetch.c:1131
+#: builtin/fetch.c:1020 builtin/fetch.c:1157
 #, c-format
 msgid "From %.*s\n"
 msgstr "Desde %.*s\n"
 
-#: builtin/fetch.c:1011
+#: builtin/fetch.c:1031
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -12907,58 +12968,79 @@
 "algunos refs locales no pudieron ser actualizados; intente ejecutar\n"
 " 'git remote prune %s' para eliminar cualquier rama vieja o conflictiva"
 
-#: builtin/fetch.c:1101
+#: builtin/fetch.c:1127
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s se pondrá colgado)"
 
-#: builtin/fetch.c:1102
+#: builtin/fetch.c:1128
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s se ha colgado)"
 
-#: builtin/fetch.c:1134
+#: builtin/fetch.c:1160
 msgid "[deleted]"
 msgstr "[eliminado]"
 
-#: builtin/fetch.c:1135 builtin/remote.c:1036
+#: builtin/fetch.c:1161 builtin/remote.c:1036
 msgid "(none)"
 msgstr "(nada)"
 
-#: builtin/fetch.c:1158
+#: builtin/fetch.c:1184
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr "Rehusando extraer en la rama actual %s de un repositorio no vacío"
 
-#: builtin/fetch.c:1177
+#: builtin/fetch.c:1203
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr "Opción \"%s\" valor \"%s\" no es válido para %s"
 
-#: builtin/fetch.c:1180
+#: builtin/fetch.c:1206
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr "Opción \"%s\" es ignorada por %s\n"
 
-#: builtin/fetch.c:1484
+#: builtin/fetch.c:1414
+msgid "multiple branch detected, incompatible with --set-upstream"
+msgstr "múltiples ramas detectadas, incompatible con --set-upstream"
+
+#: builtin/fetch.c:1429
+msgid "not setting upstream for a remote remote-tracking branch"
+msgstr "no configurar upstream para una rama de rastreo remoto"
+
+#: builtin/fetch.c:1431
+msgid "not setting upstream for a remote tag"
+msgstr "no configurar upstream para un tag remoto"
+
+#: builtin/fetch.c:1433
+msgid "unknown branch type"
+msgstr "tipo de branch desconocido"
+
+#: builtin/fetch.c:1435
+msgid ""
+"no source branch found.\n"
+"you need to specify exactly one branch with the --set-upstream option."
+msgstr ""
+"no se encontró rama fuente.\n"
+"tienes que especificar exactamente una rama con la opción --set-upstream."
+
+#: builtin/fetch.c:1561 builtin/fetch.c:1623
 #, c-format
 msgid "Fetching %s\n"
 msgstr "Extrayendo %s\n"
 
-#: builtin/fetch.c:1486 builtin/remote.c:100
+#: builtin/fetch.c:1571 builtin/fetch.c:1625 builtin/remote.c:100
 #, c-format
 msgid "Could not fetch %s"
 msgstr "No se pudo extraer %s"
 
-#: builtin/fetch.c:1532
-msgid ""
-"--filter can only be used with the remote configured in extensions."
-"partialClone"
-msgstr ""
-"--filter solo puede ser usado con el remoto configurado en extensions."
-"partialClone"
+#: builtin/fetch.c:1583
+#, c-format
+msgid "could not fetch '%s' (exit code: %d)\n"
+msgstr "no se pudo hacer fetch a '%s' (código de salida: %d)\n"
 
-#: builtin/fetch.c:1556
+#: builtin/fetch.c:1685
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
@@ -12966,44 +13048,44 @@
 "No hay repositorio remoto especificado. Por favor, especifique un URL o un\n"
 "nombre remoto del cual las nuevas revisiones deben ser extraídas."
 
-#: builtin/fetch.c:1593
+#: builtin/fetch.c:1722
 msgid "You need to specify a tag name."
 msgstr "Tienes que especificar un nombre de tag."
 
-#: builtin/fetch.c:1644
+#: builtin/fetch.c:1774
 msgid "Negative depth in --deepen is not supported"
 msgstr "Profundidad negativa en --deepen no soportada"
 
-#: builtin/fetch.c:1646
+#: builtin/fetch.c:1776
 msgid "--deepen and --depth are mutually exclusive"
 msgstr "--deepen y --depth son mutuamente exclusivas"
 
-#: builtin/fetch.c:1651
+#: builtin/fetch.c:1781
 msgid "--depth and --unshallow cannot be used together"
 msgstr "--depth y --unshallow no pueden ser usadas juntas"
 
-#: builtin/fetch.c:1653
+#: builtin/fetch.c:1783
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "--unshallow no tiene sentido en un repositorio completo"
 
-#: builtin/fetch.c:1669
+#: builtin/fetch.c:1799
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all no toma un argumento de repositorio"
 
-#: builtin/fetch.c:1671
+#: builtin/fetch.c:1801
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all no tiene sentido con refspecs"
 
-#: builtin/fetch.c:1680
+#: builtin/fetch.c:1810
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr "No existe el remoto o grupo remoto: %s"
 
-#: builtin/fetch.c:1687
+#: builtin/fetch.c:1817
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr "Extraer un grupo y especificar un refspecs no tiene sentido"
 
-#: builtin/fetch.c:1703
+#: builtin/fetch.c:1835
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
@@ -13340,7 +13422,7 @@
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "parámetro inválido: sha1 esperado, se obtuvo '%s'"
 
-#: builtin/gc.c:34
+#: builtin/gc.c:35
 msgid "git gc [<options>]"
 msgstr "git gc [<opciones>]"
 
@@ -13354,17 +13436,17 @@
 msgid "failed to parse '%s' value '%s'"
 msgstr "falló al analizar '%s' valor '%s'"
 
-#: builtin/gc.c:476 builtin/init-db.c:55
+#: builtin/gc.c:475 builtin/init-db.c:55
 #, c-format
 msgid "cannot stat '%s'"
 msgstr "no se pudo definir '%s'"
 
-#: builtin/gc.c:485 builtin/notes.c:240 builtin/tag.c:529
+#: builtin/gc.c:484 builtin/notes.c:240 builtin/tag.c:529
 #, c-format
 msgid "cannot read '%s'"
 msgstr "no se puede leer '%s'"
 
-#: builtin/gc.c:492
+#: builtin/gc.c:491
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -13374,59 +13456,59 @@
 "%s"
 msgstr ""
 "El último gc reportó lo siguiente. Por favor corrige la causa\n"
-"y remueva %s.\n"
+"y elimine %s.\n"
 "Limpieza automática no se realizará hasta que el archivo sea eliminado.\n"
 "\n"
 "%s"
 
-#: builtin/gc.c:540
+#: builtin/gc.c:539
 msgid "prune unreferenced objects"
 msgstr "limpiar objetos no referenciados"
 
-#: builtin/gc.c:542
+#: builtin/gc.c:541
 msgid "be more thorough (increased runtime)"
 msgstr "ser más exhaustivo (aumentar runtime)"
 
-#: builtin/gc.c:543
+#: builtin/gc.c:542
 msgid "enable auto-gc mode"
 msgstr "habilitar modo auto-gc"
 
-#: builtin/gc.c:546
+#: builtin/gc.c:545
 msgid "force running gc even if there may be another gc running"
 msgstr "forzar la ejecución de gc incluso si puede haber otro gc ejecutándose"
 
-#: builtin/gc.c:549
+#: builtin/gc.c:548
 msgid "repack all other packs except the largest pack"
 msgstr "reempaquetar todos los otros paquetes excepto el paquete más grande"
 
-#: builtin/gc.c:566
+#: builtin/gc.c:565
 #, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr "falló al analizar valor %s de gc.logexpirity"
 
-#: builtin/gc.c:577
+#: builtin/gc.c:576
 #, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr "falló al analizar valor %s de prune expiry"
 
-#: builtin/gc.c:597
+#: builtin/gc.c:596
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr ""
 "Auto empaquetado del repositorio en segundo plano para un performance "
 "óptimo.\n"
 
-#: builtin/gc.c:599
+#: builtin/gc.c:598
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr "Auto empaquetado del repositorio para performance óptimo.\n"
 
-#: builtin/gc.c:600
+#: builtin/gc.c:599
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr "Vea \"git help gc\" para limpieza manual.\n"
 
-#: builtin/gc.c:640
+#: builtin/gc.c:639
 #, c-format
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
@@ -13434,7 +13516,7 @@
 "gc ya está ejecutándose en la máquina '%s' pid %<PRIuMAX> (use --force so no "
 "es así)"
 
-#: builtin/gc.c:695
+#: builtin/gc.c:694
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr ""
@@ -13460,261 +13542,261 @@
 #. grep.threads
 #.
 #: builtin/grep.c:287 builtin/index-pack.c:1534 builtin/index-pack.c:1727
-#: builtin/pack-objects.c:2728
+#: builtin/pack-objects.c:2708
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "no hay soporte para hilos, ignorando %s"
 
-#: builtin/grep.c:467 builtin/grep.c:591 builtin/grep.c:633
+#: builtin/grep.c:467 builtin/grep.c:592 builtin/grep.c:635
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "no es posible leer el  árbol (%s)"
 
-#: builtin/grep.c:648
+#: builtin/grep.c:650
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "no es posible realizar grep del objeto de tipo %s"
 
-#: builtin/grep.c:714
+#: builtin/grep.c:716
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "switch `%c' espera un valor numérico"
 
-#: builtin/grep.c:813
+#: builtin/grep.c:815
 msgid "search in index instead of in the work tree"
 msgstr "buscar en el índice en lugar del árbol de trabajo"
 
-#: builtin/grep.c:815
+#: builtin/grep.c:817
 msgid "find in contents not managed by git"
 msgstr "encontrar en contenidos no manejados por git"
 
-#: builtin/grep.c:817
+#: builtin/grep.c:819
 msgid "search in both tracked and untracked files"
 msgstr "buscar en archivos rastreados y no rastreados"
 
-#: builtin/grep.c:819
+#: builtin/grep.c:821
 msgid "ignore files specified via '.gitignore'"
 msgstr "ignorar archivos especificados via '.gitignore'"
 
-#: builtin/grep.c:821
+#: builtin/grep.c:823
 msgid "recursively search in each submodule"
 msgstr "búsqueda recursiva en cada submódulo"
 
-#: builtin/grep.c:824
+#: builtin/grep.c:826
 msgid "show non-matching lines"
 msgstr "mostrar líneas que no concuerdan"
 
-#: builtin/grep.c:826
+#: builtin/grep.c:828
 msgid "case insensitive matching"
 msgstr "búsqueda insensible a mayúsculas"
 
-#: builtin/grep.c:828
+#: builtin/grep.c:830
 msgid "match patterns only at word boundaries"
 msgstr "concordar patrón solo a los límites de las palabras"
 
-#: builtin/grep.c:830
+#: builtin/grep.c:832
 msgid "process binary files as text"
 msgstr "procesar archivos binarios como texto"
 
-#: builtin/grep.c:832
+#: builtin/grep.c:834
 msgid "don't match patterns in binary files"
 msgstr "no concordar patrones en archivos binarios"
 
-#: builtin/grep.c:835
+#: builtin/grep.c:837
 msgid "process binary files with textconv filters"
 msgstr "procesar archivos binarios con filtros textconv"
 
-#: builtin/grep.c:837
+#: builtin/grep.c:839
 msgid "search in subdirectories (default)"
 msgstr "buscar en subdirectorios (default)"
 
-#: builtin/grep.c:839
+#: builtin/grep.c:841
 msgid "descend at most <depth> levels"
 msgstr "descender como máximo <valor-de-profundiad>  niveles"
 
-#: builtin/grep.c:843
+#: builtin/grep.c:845
 msgid "use extended POSIX regular expressions"
 msgstr "usar expresiones regulares POSIX extendidas"
 
-#: builtin/grep.c:846
+#: builtin/grep.c:848
 msgid "use basic POSIX regular expressions (default)"
 msgstr "usar expresiones regulares POSIX (default)"
 
-#: builtin/grep.c:849
+#: builtin/grep.c:851
 msgid "interpret patterns as fixed strings"
 msgstr "interpretar patrones como strings arreglados"
 
-#: builtin/grep.c:852
+#: builtin/grep.c:854
 msgid "use Perl-compatible regular expressions"
 msgstr "usar expresiones regulares compatibles con Perl"
 
-#: builtin/grep.c:855
+#: builtin/grep.c:857
 msgid "show line numbers"
 msgstr "mostrar números de línea"
 
-#: builtin/grep.c:856
+#: builtin/grep.c:858
 msgid "show column number of first match"
 msgstr "mostrar el número de columna de la primer coincidencia"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:859
 msgid "don't show filenames"
 msgstr "no mostrar nombres de archivo"
 
-#: builtin/grep.c:858
+#: builtin/grep.c:860
 msgid "show filenames"
 msgstr "mostrar nombres de archivo"
 
-#: builtin/grep.c:860
+#: builtin/grep.c:862
 msgid "show filenames relative to top directory"
 msgstr "mostrar nombres de archivo relativos al directorio superior"
 
-#: builtin/grep.c:862
+#: builtin/grep.c:864
 msgid "show only filenames instead of matching lines"
 msgstr "mostrar solo nombres de archivos en lugar de líneas encontradas"
 
-#: builtin/grep.c:864
+#: builtin/grep.c:866
 msgid "synonym for --files-with-matches"
 msgstr "sinónimo para --files-with-matches"
 
-#: builtin/grep.c:867
+#: builtin/grep.c:869
 msgid "show only the names of files without match"
 msgstr "mostrar solo los nombres de archivos sin coincidencias"
 
-#: builtin/grep.c:869
+#: builtin/grep.c:871
 msgid "print NUL after filenames"
 msgstr "imprimir NUL después del nombre de archivo"
 
-#: builtin/grep.c:872
+#: builtin/grep.c:874
 msgid "show only matching parts of a line"
 msgstr "mostrar solo partes que concuerdan de una línea"
 
-#: builtin/grep.c:874
+#: builtin/grep.c:876
 msgid "show the number of matches instead of matching lines"
 msgstr "mostrar el número de concordancias en lugar de las líneas concordantes"
 
-#: builtin/grep.c:875
+#: builtin/grep.c:877
 msgid "highlight matches"
 msgstr "resaltar concordancias"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:879
 msgid "print empty line between matches from different files"
 msgstr "imprimir una línea vacía entre coincidencias de diferentes archivos"
 
-#: builtin/grep.c:879
+#: builtin/grep.c:881
 msgid "show filename only once above matches from same file"
 msgstr ""
 "mostrar el nombre de archivo solo una vez para concordancias en el mismo "
 "archivo"
 
-#: builtin/grep.c:882
+#: builtin/grep.c:884
 msgid "show <n> context lines before and after matches"
 msgstr "mostrar <n> líneas de contexto antes y después de la concordancia"
 
-#: builtin/grep.c:885
+#: builtin/grep.c:887
 msgid "show <n> context lines before matches"
 msgstr "mostrar <n> líneas de contexto antes de las concordancias"
 
-#: builtin/grep.c:887
+#: builtin/grep.c:889
 msgid "show <n> context lines after matches"
 msgstr "mostrar <n> líneas de context después de las concordancias"
 
-#: builtin/grep.c:889
+#: builtin/grep.c:891
 msgid "use <n> worker threads"
 msgstr "usar <n> hilos de trabajo"
 
-#: builtin/grep.c:890
+#: builtin/grep.c:892
 msgid "shortcut for -C NUM"
 msgstr "atajo para -C NUM"
 
-#: builtin/grep.c:893
+#: builtin/grep.c:895
 msgid "show a line with the function name before matches"
 msgstr ""
 "mostrar una línea con el nombre de la función antes de las concordancias"
 
-#: builtin/grep.c:895
+#: builtin/grep.c:897
 msgid "show the surrounding function"
 msgstr "mostrar la función circundante"
 
-#: builtin/grep.c:898
+#: builtin/grep.c:900
 msgid "read patterns from file"
 msgstr "leer patrones del archivo"
 
-#: builtin/grep.c:900
+#: builtin/grep.c:902
 msgid "match <pattern>"
 msgstr "concordar <patrón>"
 
-#: builtin/grep.c:902
+#: builtin/grep.c:904
 msgid "combine patterns specified with -e"
 msgstr "combinar patrones especificados con -e"
 
-#: builtin/grep.c:914
+#: builtin/grep.c:916
 msgid "indicate hit with exit status without output"
 msgstr "indicar concordancia con exit status sin output"
 
-#: builtin/grep.c:916
+#: builtin/grep.c:918
 msgid "show only matches from files that match all patterns"
 msgstr ""
 "mostrar solo concordancias con archivos que concuerdan todos los patrones"
 
-#: builtin/grep.c:918
+#: builtin/grep.c:920
 msgid "show parse tree for grep expression"
 msgstr "mostrar árbol analizado para la expresión grep"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:924
 msgid "pager"
 msgstr "paginador"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:924
 msgid "show matching files in the pager"
 msgstr "mostrar archivos concordantes en el paginador"
 
-#: builtin/grep.c:926
+#: builtin/grep.c:928
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "permitir el llamado de grep(1) (ignorado por esta build)"
 
-#: builtin/grep.c:990
+#: builtin/grep.c:992
 msgid "no pattern given"
 msgstr "no se ha entregado patrón"
 
-#: builtin/grep.c:1026
+#: builtin/grep.c:1028
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr "--no-index o --untracked no se puede usar con revs"
 
-#: builtin/grep.c:1034
+#: builtin/grep.c:1036
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "no se posible resolver revisión: %s"
 
-#: builtin/grep.c:1065
+#: builtin/grep.c:1067
 msgid "invalid option combination, ignoring --threads"
 msgstr "combinación de opciones inválida, ignorando --threads"
 
-#: builtin/grep.c:1068 builtin/pack-objects.c:3416
+#: builtin/grep.c:1070 builtin/pack-objects.c:3400
 msgid "no threads support, ignoring --threads"
 msgstr "no se soportan hilos, ignorando --threads"
 
-#: builtin/grep.c:1071 builtin/index-pack.c:1531 builtin/pack-objects.c:2725
+#: builtin/grep.c:1073 builtin/index-pack.c:1531 builtin/pack-objects.c:2705
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "número inválido de hilos especificado (%d)"
 
-#: builtin/grep.c:1094
+#: builtin/grep.c:1096
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "--open-files-in-pager solo funciona en el árbol de trabajo"
 
-#: builtin/grep.c:1117
+#: builtin/grep.c:1119
 msgid "option not supported with --recurse-submodules"
 msgstr "opción no soportada con --recurse-submodules"
 
-#: builtin/grep.c:1123
+#: builtin/grep.c:1125
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr "--cached o --untracked no pueden ser usadas con --no-index"
 
-#: builtin/grep.c:1129
+#: builtin/grep.c:1131
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr "--[no-]exclude-standard no puede ser usada para contenido rastreado"
 
-#: builtin/grep.c:1137
+#: builtin/grep.c:1139
 msgid "both --cached and trees are given"
 msgstr "--cached y árboles han sido entregados"
 
@@ -13964,7 +14046,7 @@
 #: builtin/index-pack.c:803 builtin/index-pack.c:812
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
-msgstr "COLISIÓN DE TIPO SHA1 ENCONTRADA CON %s !"
+msgstr "¡COLISIÓN DE TIPO SHA1 ENCONTRADA CON %s !"
 
 #: builtin/index-pack.c:738 builtin/pack-objects.c:157
 #: builtin/pack-objects.c:217 builtin/pack-objects.c:311
@@ -14028,7 +14110,7 @@
 msgid "Resolving deltas"
 msgstr "Resolviendo deltas"
 
-#: builtin/index-pack.c:1205 builtin/pack-objects.c:2497
+#: builtin/index-pack.c:1205 builtin/pack-objects.c:2481
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "no es posible crear hilo: %s"
@@ -14047,7 +14129,7 @@
 #: builtin/index-pack.c:1264
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
-msgstr "Tail checksum para %s inesperada (corrupción de disco?)"
+msgstr "Tail checksum para %s inesperada (¿corrupción de disco?)"
 
 #: builtin/index-pack.c:1268
 #, c-format
@@ -14093,7 +14175,7 @@
 msgid "cannot store index file"
 msgstr "no se puede guardar el archivo índice"
 
-#: builtin/index-pack.c:1525 builtin/pack-objects.c:2736
+#: builtin/index-pack.c:1525 builtin/pack-objects.c:2716
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "mal pack.indexversion=%<PRIu32>"
@@ -14375,74 +14457,74 @@
 msgid "git show %s: bad file"
 msgstr "git show %s: mal archivo"
 
-#: builtin/log.c:549 builtin/log.c:643
+#: builtin/log.c:549 builtin/log.c:644
 #, c-format
 msgid "could not read object %s"
 msgstr "no se pudo leer objeto %s"
 
-#: builtin/log.c:668
+#: builtin/log.c:669
 #, c-format
 msgid "unknown type: %d"
 msgstr "tipo desconocido: %d"
 
-#: builtin/log.c:791
+#: builtin/log.c:792
 msgid "format.headers without value"
 msgstr "formate.headers. sin valor"
 
-#: builtin/log.c:908
+#: builtin/log.c:909
 msgid "name of output directory is too long"
 msgstr "nombre del directorio de salida es muy largo"
 
-#: builtin/log.c:924
+#: builtin/log.c:925
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "no se puede abrir archivo patch %s"
 
-#: builtin/log.c:941
+#: builtin/log.c:942
 msgid "need exactly one range"
 msgstr "necesita exactamente un rango"
 
-#: builtin/log.c:951
+#: builtin/log.c:952
 msgid "not a range"
 msgstr "no es un rango"
 
-#: builtin/log.c:1074
+#: builtin/log.c:1075
 msgid "cover letter needs email format"
 msgstr "letras de portada necesita formato email"
 
-#: builtin/log.c:1080
+#: builtin/log.c:1081
 msgid "failed to create cover-letter file"
 msgstr "falló al crear los archivos cover-letter"
 
-#: builtin/log.c:1159
+#: builtin/log.c:1160
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "insano in-reply-to: %s"
 
-#: builtin/log.c:1186
+#: builtin/log.c:1187
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<opciones>] [<desde> | <rango-de-revisiones>]"
 
-#: builtin/log.c:1244
+#: builtin/log.c:1245
 msgid "two output directories?"
-msgstr "dos directorios de salida?"
+msgstr "¿dos directorios de salida?"
 
-#: builtin/log.c:1355 builtin/log.c:2099 builtin/log.c:2101 builtin/log.c:2113
+#: builtin/log.c:1356 builtin/log.c:2116 builtin/log.c:2118 builtin/log.c:2130
 #, c-format
 msgid "unknown commit %s"
 msgstr "commit desconocido %s"
 
-#: builtin/log.c:1365 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1366 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "falló al resolver '%s' como ref válida"
 
-#: builtin/log.c:1370
+#: builtin/log.c:1371
 msgid "could not find exact merge base"
 msgstr "no se pudo encontrar una base de fusión exacta"
 
-#: builtin/log.c:1374
+#: builtin/log.c:1375
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -14454,271 +14536,271 @@
 "O puedes especificar un commit base mediante --base=<id-commit-base> "
 "manualmente"
 
-#: builtin/log.c:1394
+#: builtin/log.c:1395
 msgid "failed to find exact merge base"
 msgstr "falló al encontrar una base de fusión exacta"
 
-#: builtin/log.c:1405
+#: builtin/log.c:1406
 msgid "base commit should be the ancestor of revision list"
 msgstr "el commit base debe ser el ancestro de la lista de revisión"
 
-#: builtin/log.c:1409
+#: builtin/log.c:1410
 msgid "base commit shouldn't be in revision list"
 msgstr "el commit base no debe estar en la lista de revisión"
 
-#: builtin/log.c:1462
+#: builtin/log.c:1463
 msgid "cannot get patch id"
 msgstr "no se puede obtener id de patch"
 
-#: builtin/log.c:1514
+#: builtin/log.c:1515
 msgid "failed to infer range-diff ranges"
 msgstr "falló al inferir rangos range-diff"
 
-#: builtin/log.c:1559
+#: builtin/log.c:1560
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "use [PATCH n/m] incluso con un único parche"
 
-#: builtin/log.c:1562
+#: builtin/log.c:1563
 msgid "use [PATCH] even with multiple patches"
 msgstr "use [PATCH] incluso con múltiples parches"
 
-#: builtin/log.c:1566
+#: builtin/log.c:1567
 msgid "print patches to standard out"
 msgstr "mostrar parches en standard out"
 
-#: builtin/log.c:1568
+#: builtin/log.c:1569
 msgid "generate a cover letter"
 msgstr "generar letra de cover"
 
-#: builtin/log.c:1570
+#: builtin/log.c:1571
 msgid "use simple number sequence for output file names"
 msgstr ""
 "usar una secuencia simple de números para salida de nombres de archivos"
 
-#: builtin/log.c:1571
+#: builtin/log.c:1572
 msgid "sfx"
 msgstr "sfx"
 
-#: builtin/log.c:1572
+#: builtin/log.c:1573
 msgid "use <sfx> instead of '.patch'"
 msgstr "use <sfx> en lugar de '.patch'"
 
-#: builtin/log.c:1574
+#: builtin/log.c:1575
 msgid "start numbering patches at <n> instead of 1"
 msgstr "comenzar a numerar los parches desde <n> en lugar de 1"
 
-#: builtin/log.c:1576
+#: builtin/log.c:1577
 msgid "mark the series as Nth re-roll"
 msgstr "marcar las series como Nth re-roll"
 
-#: builtin/log.c:1578
+#: builtin/log.c:1579
 msgid "Use [RFC PATCH] instead of [PATCH]"
 msgstr "Use [RFC PATCH] en lugar de [PATCH]"
 
-#: builtin/log.c:1581
+#: builtin/log.c:1582
 msgid "Use [<prefix>] instead of [PATCH]"
 msgstr "Use [<prefijo>] en lugar de [PATCH]"
 
-#: builtin/log.c:1584
+#: builtin/log.c:1585
 msgid "store resulting files in <dir>"
 msgstr "guardar archivos resultantes en <dir>"
 
-#: builtin/log.c:1587
+#: builtin/log.c:1588
 msgid "don't strip/add [PATCH]"
 msgstr "no cortar/agregar [PATCH]"
 
-#: builtin/log.c:1590
+#: builtin/log.c:1591
 msgid "don't output binary diffs"
 msgstr "no mostrar diffs binarios"
 
-#: builtin/log.c:1592
+#: builtin/log.c:1593
 msgid "output all-zero hash in From header"
 msgstr "salida como hash de todos-ceros en la cabecera From"
 
-#: builtin/log.c:1594
+#: builtin/log.c:1595
 msgid "don't include a patch matching a commit upstream"
 msgstr "no incluya un parche que coincida con un commit en upstream"
 
-#: builtin/log.c:1596
+#: builtin/log.c:1597
 msgid "show patch format instead of default (patch + stat)"
 msgstr "mostrar formato de parche en lugar del default (parche + stat)"
 
-#: builtin/log.c:1598
+#: builtin/log.c:1599
 msgid "Messaging"
 msgstr "Mensajeando"
 
-#: builtin/log.c:1599
+#: builtin/log.c:1600
 msgid "header"
 msgstr "cabezal"
 
-#: builtin/log.c:1600
+#: builtin/log.c:1601
 msgid "add email header"
 msgstr "agregar cabecera email"
 
-#: builtin/log.c:1601 builtin/log.c:1603
+#: builtin/log.c:1602 builtin/log.c:1604
 msgid "email"
 msgstr "email"
 
-#: builtin/log.c:1601
+#: builtin/log.c:1602
 msgid "add To: header"
 msgstr "agregar cabecera To:"
 
-#: builtin/log.c:1603
+#: builtin/log.c:1604
 msgid "add Cc: header"
 msgstr "agregar cabecera Cc:"
 
-#: builtin/log.c:1605
+#: builtin/log.c:1606
 msgid "ident"
 msgstr "ident"
 
-#: builtin/log.c:1606
+#: builtin/log.c:1607
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 "configurar dirección From a <ident> ( o identidad de committer si está "
 "ausente)"
 
-#: builtin/log.c:1608
+#: builtin/log.c:1609
 msgid "message-id"
 msgstr "id de mensaje"
 
-#: builtin/log.c:1609
+#: builtin/log.c:1610
 msgid "make first mail a reply to <message-id>"
 msgstr "hacer primer mail una respuesta a <id de mensaje>"
 
-#: builtin/log.c:1610 builtin/log.c:1613
+#: builtin/log.c:1611 builtin/log.c:1614
 msgid "boundary"
 msgstr "límite"
 
-#: builtin/log.c:1611
+#: builtin/log.c:1612
 msgid "attach the patch"
 msgstr "adjuntar el parche"
 
-#: builtin/log.c:1614
+#: builtin/log.c:1615
 msgid "inline the patch"
 msgstr "poner el parche en línea"
 
-#: builtin/log.c:1618
+#: builtin/log.c:1619
 msgid "enable message threading, styles: shallow, deep"
 msgstr "habilitar hilos de mensajes, estilos: superficial, profundo"
 
-#: builtin/log.c:1620
+#: builtin/log.c:1621
 msgid "signature"
 msgstr "firma"
 
-#: builtin/log.c:1621
+#: builtin/log.c:1622
 msgid "add a signature"
 msgstr "agregar una firma"
 
-#: builtin/log.c:1622
+#: builtin/log.c:1623
 msgid "base-commit"
 msgstr "commit-base"
 
-#: builtin/log.c:1623
+#: builtin/log.c:1624
 msgid "add prerequisite tree info to the patch series"
 msgstr ""
 "agregar información de árbol de requisitos previos a la serie de parches"
 
-#: builtin/log.c:1625
+#: builtin/log.c:1626
 msgid "add a signature from a file"
 msgstr "agregar una firma de un archivo"
 
-#: builtin/log.c:1626
+#: builtin/log.c:1627
 msgid "don't print the patch filenames"
 msgstr "no mostrar los nombres de archivos de los parches"
 
-#: builtin/log.c:1628
+#: builtin/log.c:1629
 msgid "show progress while generating patches"
 msgstr "mostrar medidor de progreso mientras se generan los parches"
 
-#: builtin/log.c:1630
+#: builtin/log.c:1631
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr "muestra cambios contra <rev> en cover letter o en un solo parche"
 
-#: builtin/log.c:1633
+#: builtin/log.c:1634
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr "muestra cambios contra <refspec> en cover letter o en un solo parche"
 
-#: builtin/log.c:1635
+#: builtin/log.c:1636
 msgid "percentage by which creation is weighted"
 msgstr "porcentaje por el cual la creación es pesada"
 
-#: builtin/log.c:1710
+#: builtin/log.c:1711
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "línea de identificación inválida: %s"
 
-#: builtin/log.c:1725
+#: builtin/log.c:1726
 msgid "-n and -k are mutually exclusive"
 msgstr "-n y -k son mutuamente exclusivas"
 
-#: builtin/log.c:1727
+#: builtin/log.c:1728
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr "--subject-prefix/--rfc y -k son mutuamente exclusivos"
 
-#: builtin/log.c:1735
+#: builtin/log.c:1736
 msgid "--name-only does not make sense"
 msgstr "--name-only no tiene sentido"
 
-#: builtin/log.c:1737
+#: builtin/log.c:1738
 msgid "--name-status does not make sense"
 msgstr "--name-status no tiene sentido"
 
-#: builtin/log.c:1739
+#: builtin/log.c:1740
 msgid "--check does not make sense"
 msgstr "--check no tiene sentido"
 
-#: builtin/log.c:1771
+#: builtin/log.c:1773
 msgid "standard output, or directory, which one?"
-msgstr "salida standard, o directorio, cual?"
+msgstr "¿salida standard, o directorio, cual?"
 
-#: builtin/log.c:1860
+#: builtin/log.c:1877
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff requiere --cover-letter o un parche único"
 
-#: builtin/log.c:1864
+#: builtin/log.c:1881
 msgid "Interdiff:"
 msgstr "Interdiff:"
 
-#: builtin/log.c:1865
+#: builtin/log.c:1882
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Interdiff contra v%d:"
 
-#: builtin/log.c:1871
+#: builtin/log.c:1888
 msgid "--creation-factor requires --range-diff"
 msgstr "--creation-factor requiere --range-diff"
 
-#: builtin/log.c:1875
+#: builtin/log.c:1892
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff requiere --cover-letter o parche único"
 
-#: builtin/log.c:1883
+#: builtin/log.c:1900
 msgid "Range-diff:"
 msgstr "Range-diff:"
 
-#: builtin/log.c:1884
+#: builtin/log.c:1901
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "Range-diff contra v%d:"
 
-#: builtin/log.c:1895
+#: builtin/log.c:1912
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "no se puede leer la firma del archivo '%s'"
 
-#: builtin/log.c:1931
+#: builtin/log.c:1948
 msgid "Generating patches"
 msgstr "Generando parches"
 
-#: builtin/log.c:1975
+#: builtin/log.c:1992
 msgid "failed to create output files"
 msgstr "falló al crear los archivos de salida"
 
-#: builtin/log.c:2034
+#: builtin/log.c:2051
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<upstream> [<head> [<límite>]]]"
 
-#: builtin/log.c:2088
+#: builtin/log.c:2105
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -14848,7 +14930,7 @@
 msgid "do not print remote URL"
 msgstr "no mostrar el URL remoto"
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1464
+#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1488
 msgid "exec"
 msgstr "ejecutar"
 
@@ -14958,33 +15040,33 @@
 msgid "Available custom strategies are:"
 msgstr "Estrategias personalizadas disponibles son:"
 
-#: builtin/merge.c:244 builtin/pull.c:151
+#: builtin/merge.c:244 builtin/pull.c:152
 msgid "do not show a diffstat at the end of the merge"
 msgstr "no mostrar un diffstat al final de la fusión"
 
-#: builtin/merge.c:247 builtin/pull.c:154
+#: builtin/merge.c:247 builtin/pull.c:155
 msgid "show a diffstat at the end of the merge"
 msgstr "mostrar un diffstat al final de la fusión"
 
-#: builtin/merge.c:248 builtin/pull.c:157
+#: builtin/merge.c:248 builtin/pull.c:158
 msgid "(synonym to --stat)"
 msgstr "(sinónimo para --stat)"
 
-#: builtin/merge.c:250 builtin/pull.c:160
+#: builtin/merge.c:250 builtin/pull.c:161
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr ""
 "agregar (como máximo <n>) entradas del shortlog al mensaje del commit de "
 "fusión"
 
-#: builtin/merge.c:253 builtin/pull.c:166
+#: builtin/merge.c:253 builtin/pull.c:167
 msgid "create a single commit instead of doing a merge"
 msgstr "crear un commit único en lugar de hacer una fusión"
 
-#: builtin/merge.c:255 builtin/pull.c:169
+#: builtin/merge.c:255 builtin/pull.c:170
 msgid "perform a commit if the merge succeeds (default)"
 msgstr "realizar un commit si la fusión es exitosa (default)"
 
-#: builtin/merge.c:257 builtin/pull.c:172
+#: builtin/merge.c:257 builtin/pull.c:173
 msgid "edit message before committing"
 msgstr "editar mensaje antes de realizar commit"
 
@@ -14992,28 +15074,28 @@
 msgid "allow fast-forward (default)"
 msgstr "permitir fast-forwars (default)"
 
-#: builtin/merge.c:261 builtin/pull.c:179
+#: builtin/merge.c:261 builtin/pull.c:180
 msgid "abort if fast-forward is not possible"
 msgstr "abortar si fast-forward no es posible"
 
-#: builtin/merge.c:265 builtin/pull.c:182
+#: builtin/merge.c:265 builtin/pull.c:183
 msgid "verify that the named commit has a valid GPG signature"
 msgstr "verificar que el commit nombrado tiene una firma GPG válida"
 
-#: builtin/merge.c:266 builtin/notes.c:787 builtin/pull.c:186
-#: builtin/rebase.c:492 builtin/rebase.c:1477 builtin/revert.c:114
+#: builtin/merge.c:266 builtin/notes.c:787 builtin/pull.c:187
+#: builtin/rebase.c:493 builtin/rebase.c:1501 builtin/revert.c:114
 msgid "strategy"
 msgstr "estrategia"
 
-#: builtin/merge.c:267 builtin/pull.c:187
+#: builtin/merge.c:267 builtin/pull.c:188
 msgid "merge strategy to use"
 msgstr "estrategia de fusión para usar"
 
-#: builtin/merge.c:268 builtin/pull.c:190
+#: builtin/merge.c:268 builtin/pull.c:191
 msgid "option=value"
 msgstr "opción=valor"
 
-#: builtin/merge.c:269 builtin/pull.c:191
+#: builtin/merge.c:269 builtin/pull.c:192
 msgid "option for selected merge strategy"
 msgstr "opción para la estrategia de fusión seleccionada"
 
@@ -15033,13 +15115,13 @@
 msgid "continue the current in-progress merge"
 msgstr "continuar la fusión en progreso actual"
 
-#: builtin/merge.c:284 builtin/pull.c:198
+#: builtin/merge.c:284 builtin/pull.c:199
 msgid "allow merging unrelated histories"
 msgstr "permitir fusionar historias no relacionadas"
 
 #: builtin/merge.c:290
-msgid "verify commit-msg hook"
-msgstr "verificar el hook commit-msg"
+msgid "bypass pre-merge-commit and commit-msg hooks"
+msgstr "hacer un bypass a hooks pre-merge-commit y commit-msg"
 
 #: builtin/merge.c:307
 msgid "could not run stash."
@@ -15082,33 +15164,33 @@
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "Mal string branch.%s.mergeoptions: %s"
 
-#: builtin/merge.c:708
+#: builtin/merge.c:705
 msgid "Not handling anything other than two heads merge."
 msgstr "No manejando nada más que fusión de dos heads."
 
-#: builtin/merge.c:722
+#: builtin/merge.c:719
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr "Opción desconocida para merge-recursive: -X%s"
 
-#: builtin/merge.c:737
+#: builtin/merge.c:734
 #, c-format
 msgid "unable to write %s"
 msgstr "no es posible escribir %s"
 
-#: builtin/merge.c:789
+#: builtin/merge.c:786
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "No se puedo leer de '%s'"
 
-#: builtin/merge.c:798
+#: builtin/merge.c:795
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr ""
 "No se realiza commit de la fusión; use 'git commit' para completar la "
 "fusión.\n"
 
-#: builtin/merge.c:804
+#: builtin/merge.c:801
 msgid ""
 "Please enter a commit message to explain why this merge is necessary,\n"
 "especially if it merges an updated upstream into a topic branch.\n"
@@ -15120,11 +15202,11 @@
 "tópico.\n"
 "\n"
 
-#: builtin/merge.c:809
+#: builtin/merge.c:806
 msgid "An empty message aborts the commit.\n"
 msgstr "Un mensaje vacío aborta el commit.\n"
 
-#: builtin/merge.c:812
+#: builtin/merge.c:809
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -15133,74 +15215,74 @@
 "Líneas comenzando con '%c' serán ignoradas, y un mensaje vacío aborta\n"
 " el commit.\n"
 
-#: builtin/merge.c:853
+#: builtin/merge.c:862
 msgid "Empty commit message."
 msgstr "Mensaje de commit vacío."
 
-#: builtin/merge.c:872
+#: builtin/merge.c:877
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Maravilloso.\n"
 
-#: builtin/merge.c:933
+#: builtin/merge.c:938
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 "Fusión automática falló; arregle los conflictos y luego realice un commit "
 "con el resultado.\n"
 
-#: builtin/merge.c:972
+#: builtin/merge.c:977
 msgid "No current branch."
 msgstr "No rama actual."
 
-#: builtin/merge.c:974
+#: builtin/merge.c:979
 msgid "No remote for the current branch."
 msgstr "No hay remoto para la rama actual."
 
-#: builtin/merge.c:976
+#: builtin/merge.c:981
 msgid "No default upstream defined for the current branch."
 msgstr "Por defecto, no hay un upstream  definido para la rama actual."
 
-#: builtin/merge.c:981
+#: builtin/merge.c:986
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "No hay rama de rastreo remoto para %s de %s"
 
-#: builtin/merge.c:1038
+#: builtin/merge.c:1043
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Valor erróneo '%s' en el entorno '%s'"
 
-#: builtin/merge.c:1141
+#: builtin/merge.c:1146
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "nada que podamos fusionar en %s: %s"
 
-#: builtin/merge.c:1175
+#: builtin/merge.c:1180
 msgid "not something we can merge"
 msgstr "nada que podamos fusionar"
 
-#: builtin/merge.c:1278
+#: builtin/merge.c:1283
 msgid "--abort expects no arguments"
 msgstr "--abort no espera argumentos"
 
-#: builtin/merge.c:1282
+#: builtin/merge.c:1287
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "No hay una fusión para abortar (falta MERGE_HEAD)"
 
-#: builtin/merge.c:1291
+#: builtin/merge.c:1296
 msgid "--quit expects no arguments"
 msgstr "--quit no espera argumentos"
 
-#: builtin/merge.c:1304
+#: builtin/merge.c:1309
 msgid "--continue expects no arguments"
 msgstr "--continue no espera argumentos"
 
-#: builtin/merge.c:1308
+#: builtin/merge.c:1313
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "No hay fusión en progreso (falta MERGE_HEAD)."
 
-#: builtin/merge.c:1324
+#: builtin/merge.c:1329
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -15208,7 +15290,7 @@
 "No has concluido la fusión (existe MERGE_HEAD).\n"
 "Por favor, realiza un commit con los cambios antes de fusionar."
 
-#: builtin/merge.c:1331
+#: builtin/merge.c:1336
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -15216,97 +15298,97 @@
 "No has concluido el cherry-pick (existe CHERRY_PICK_HEAD).\n"
 "Por favor, realiza un commit con los cambios antes de fusionar."
 
-#: builtin/merge.c:1334
+#: builtin/merge.c:1339
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "No has concluido el cherry-pick (existe CHERRY_PICK_HEAD)."
 
-#: builtin/merge.c:1348
+#: builtin/merge.c:1353
 msgid "You cannot combine --squash with --no-ff."
 msgstr "No se puede combinar --squash con --no-ff."
 
-#: builtin/merge.c:1350
+#: builtin/merge.c:1355
 msgid "You cannot combine --squash with --commit."
 msgstr "No se puede combinar --squash con --commit."
 
-#: builtin/merge.c:1366
+#: builtin/merge.c:1371
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr ""
 "No hay commit especificado y merge.defaultToUpstream no está configurado."
 
-#: builtin/merge.c:1383
+#: builtin/merge.c:1388
 msgid "Squash commit into empty head not supported yet"
 msgstr "Commit aplastado dentro de un head vacío no es soportado todavía"
 
-#: builtin/merge.c:1385
+#: builtin/merge.c:1390
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr "Commit no fast-forward no tiene sentido dentro de un head vacío"
 
-#: builtin/merge.c:1390
+#: builtin/merge.c:1395
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - nada que podamos fusionar"
 
-#: builtin/merge.c:1392
+#: builtin/merge.c:1397
 msgid "Can merge only exactly one commit into empty head"
 msgstr "Solo se puede fusionar exactamente un commit en un head vacío"
 
-#: builtin/merge.c:1471
+#: builtin/merge.c:1476
 msgid "refusing to merge unrelated histories"
 msgstr "rehusando fusionar historias no relacionadas"
 
-#: builtin/merge.c:1480
+#: builtin/merge.c:1485
 msgid "Already up to date."
 msgstr "Ya está actualizado."
 
-#: builtin/merge.c:1490
+#: builtin/merge.c:1495
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Actualizando %s..%s\n"
 
-#: builtin/merge.c:1532
+#: builtin/merge.c:1537
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "Intentando fusión en índice realmente trivial...\n"
 
-#: builtin/merge.c:1539
+#: builtin/merge.c:1544
 #, c-format
 msgid "Nope.\n"
 msgstr "Nop.\n"
 
-#: builtin/merge.c:1564
+#: builtin/merge.c:1569
 msgid "Already up to date. Yeeah!"
 msgstr "Ya está actualizado. ¡Oh, yeaahh!"
 
-#: builtin/merge.c:1570
+#: builtin/merge.c:1575
 msgid "Not possible to fast-forward, aborting."
 msgstr "No es posible hacer fast-forward, abortando."
 
-#: builtin/merge.c:1593 builtin/merge.c:1658
+#: builtin/merge.c:1598 builtin/merge.c:1663
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Rebobinando el árbol a original...\n"
 
-#: builtin/merge.c:1597
+#: builtin/merge.c:1602
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Intentando estrategia de fusión %s...\n"
 
-#: builtin/merge.c:1649
+#: builtin/merge.c:1654
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Ninguna estrategia de fusión manejó la fusión.\n"
 
-#: builtin/merge.c:1651
+#: builtin/merge.c:1656
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "Fusionar con estrategia %s falló.\n"
 
-#: builtin/merge.c:1660
+#: builtin/merge.c:1665
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr "Usando el %s para preparar resolución a mano.\n"
 
-#: builtin/merge.c:1672
+#: builtin/merge.c:1677
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
@@ -15346,7 +15428,7 @@
 
 #: builtin/merge-base.c:159
 msgid "is the first one ancestor of the other?"
-msgstr "es el primer ancestro del otro?"
+msgstr "¿es el primer ancestro del otro?"
 
 #: builtin/merge-base.c:161
 msgid "find where <commit> forked from reflog of <ref>"
@@ -15392,33 +15474,33 @@
 msgid "set labels for file1/orig-file/file2"
 msgstr "configurar labels para archivo1/orig-archivo/archivo2"
 
-#: builtin/merge-recursive.c:46
+#: builtin/merge-recursive.c:47
 #, c-format
 msgid "unknown option %s"
 msgstr "opción %s desconocida"
 
-#: builtin/merge-recursive.c:52
+#: builtin/merge-recursive.c:53
 #, c-format
 msgid "could not parse object '%s'"
 msgstr "no se pudo analizar el objeto '%s'"
 
-#: builtin/merge-recursive.c:56
+#: builtin/merge-recursive.c:57
 #, c-format
 msgid "cannot handle more than %d base. Ignoring %s."
 msgid_plural "cannot handle more than %d bases. Ignoring %s."
 msgstr[0] "no se puede manejar más de %d base. Ignorando %s."
 msgstr[1] "no se puede manejar más de %d bases. Ignorando %s."
 
-#: builtin/merge-recursive.c:64
+#: builtin/merge-recursive.c:65
 msgid "not handling anything other than two heads merge."
 msgstr "no manejando nada distinto a fusiones de dos heads."
 
-#: builtin/merge-recursive.c:70 builtin/merge-recursive.c:72
+#: builtin/merge-recursive.c:74 builtin/merge-recursive.c:76
 #, c-format
 msgid "could not resolve ref '%s'"
 msgstr "no se pudo resolver ref '%s'"
 
-#: builtin/merge-recursive.c:78
+#: builtin/merge-recursive.c:82
 #, c-format
 msgid "Merging %s with %s\n"
 msgstr "Fusionando %s con %s\n"
@@ -15479,7 +15561,7 @@
 #: builtin/mv.c:83
 #, c-format
 msgid "Directory %s is in index and no submodule?"
-msgstr "Directorio %s está en el índice y no hay submódulo?"
+msgstr "¿Directorio %s está en el índice y no hay submódulo?"
 
 #: builtin/mv.c:85
 msgid "Please stage your changes to .gitmodules or stash them to proceed"
@@ -15561,52 +15643,52 @@
 msgid "Renaming %s to %s\n"
 msgstr "Renombrando %s a %s\n"
 
-#: builtin/mv.c:277 builtin/remote.c:717 builtin/repack.c:510
+#: builtin/mv.c:277 builtin/remote.c:717 builtin/repack.c:511
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "renombrando '%s' falló"
 
-#: builtin/name-rev.c:352
+#: builtin/name-rev.c:356
 msgid "git name-rev [<options>] <commit>..."
 msgstr "git name-rev [<opciones>] <commit>..."
 
-#: builtin/name-rev.c:353
+#: builtin/name-rev.c:357
 msgid "git name-rev [<options>] --all"
 msgstr "git name-rev [<opciones>] --all"
 
-#: builtin/name-rev.c:354
+#: builtin/name-rev.c:358
 msgid "git name-rev [<options>] --stdin"
 msgstr "git name-rev [<opciones>] --stdin"
 
-#: builtin/name-rev.c:411
+#: builtin/name-rev.c:415
 msgid "print only names (no SHA-1)"
 msgstr "imprimir sólo nombres (sin SHA-1)"
 
-#: builtin/name-rev.c:412
+#: builtin/name-rev.c:416
 msgid "only use tags to name the commits"
 msgstr "sólo usar tags para nombrar commits"
 
-#: builtin/name-rev.c:414
+#: builtin/name-rev.c:418
 msgid "only use refs matching <pattern>"
 msgstr "solo usar refs que concuerden con <patrón>"
 
-#: builtin/name-rev.c:416
+#: builtin/name-rev.c:420
 msgid "ignore refs matching <pattern>"
 msgstr "ignorar refs que concuerden con <patrón>"
 
-#: builtin/name-rev.c:418
+#: builtin/name-rev.c:422
 msgid "list all commits reachable from all refs"
 msgstr "listar todos los commits alcanzables desde todas las referencias"
 
-#: builtin/name-rev.c:419
+#: builtin/name-rev.c:423
 msgid "read from stdin"
 msgstr "leer desde stdin"
 
-#: builtin/name-rev.c:420
+#: builtin/name-rev.c:424
 msgid "allow to print `undefined` names (default)"
 msgstr "permitir imprimir nombres `undefined` (predeterminado)"
 
-#: builtin/name-rev.c:426
+#: builtin/name-rev.c:430
 msgid "dereference tags in the input (internal use)"
 msgstr "desreferenciar tags en la entrada (uso interno)"
 
@@ -16006,7 +16088,7 @@
 msgid "read object names from the standard input"
 msgstr "leer nombres de objetos de standard input"
 
-#: builtin/notes.c:954 builtin/prune.c:130 builtin/worktree.c:165
+#: builtin/notes.c:954 builtin/prune.c:130 builtin/worktree.c:164
 msgid "do not remove, show only"
 msgstr "no eliminar, solo mostrar"
 
@@ -16022,7 +16104,7 @@
 msgid "use notes from <notes-ref>"
 msgstr "usar notas desde <referencia-de-notas>"
 
-#: builtin/notes.c:1034 builtin/stash.c:1598
+#: builtin/notes.c:1034 builtin/stash.c:1607
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "subcomando desconocido: %s"
@@ -16099,71 +16181,71 @@
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "%<PRIu32> objetos escritos mientras se esperaban %<PRIu32>"
 
-#: builtin/pack-objects.c:1166
+#: builtin/pack-objects.c:1164
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr ""
 "deshabilitando escritura bitmap, ya que algunos objetos no están siendo "
 "empaquetados"
 
-#: builtin/pack-objects.c:1597
+#: builtin/pack-objects.c:1592
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "overflow de offset en la base de delta en paquete para %s"
 
-#: builtin/pack-objects.c:1606
+#: builtin/pack-objects.c:1601
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "outbound de offset en la base de delta para %s"
 
-#: builtin/pack-objects.c:1875
+#: builtin/pack-objects.c:1870
 msgid "Counting objects"
 msgstr "Contando objetos"
 
-#: builtin/pack-objects.c:2005
+#: builtin/pack-objects.c:2000
 #, c-format
 msgid "unable to get size of %s"
 msgstr "no se pudo obtener el tamaño de %s"
 
-#: builtin/pack-objects.c:2020
+#: builtin/pack-objects.c:2015
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "incapaz de analizar header del objeto %s"
 
-#: builtin/pack-objects.c:2090 builtin/pack-objects.c:2106
-#: builtin/pack-objects.c:2116
+#: builtin/pack-objects.c:2085 builtin/pack-objects.c:2101
+#: builtin/pack-objects.c:2111
 #, c-format
 msgid "object %s cannot be read"
 msgstr "objeto %s no puede ser leído"
 
-#: builtin/pack-objects.c:2093 builtin/pack-objects.c:2120
+#: builtin/pack-objects.c:2088 builtin/pack-objects.c:2115
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr ""
 "objeto %s inconsistente con el largo del objeto (%<PRIuMAX> vs %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2130
+#: builtin/pack-objects.c:2125
 msgid "suboptimal pack - out of memory"
 msgstr "suboptimal pack - fuera de memoria"
 
-#: builtin/pack-objects.c:2456
+#: builtin/pack-objects.c:2440
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Compresión delta usando hasta %d hilos"
 
-#: builtin/pack-objects.c:2588
+#: builtin/pack-objects.c:2572
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "no es posible empaquetar objetos alcanzables desde tag %s"
 
-#: builtin/pack-objects.c:2675
+#: builtin/pack-objects.c:2659
 msgid "Compressing objects"
 msgstr "Comprimiendo objetos"
 
-#: builtin/pack-objects.c:2681
+#: builtin/pack-objects.c:2665
 msgid "inconsistency with delta count"
 msgstr "inconsistencia con la cuenta de delta"
 
-#: builtin/pack-objects.c:2762
+#: builtin/pack-objects.c:2742
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -16172,7 +16254,7 @@
 "se espseraba ID de objeto al borde, se obtuvo basura:\n"
 "%s"
 
-#: builtin/pack-objects.c:2768
+#: builtin/pack-objects.c:2748
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -16181,246 +16263,246 @@
 "se esperaba ID de objeto, se obtuvo basuta:\n"
 "%s"
 
-#: builtin/pack-objects.c:2866
+#: builtin/pack-objects.c:2846
 msgid "invalid value for --missing"
 msgstr "valor inválido para --missing"
 
-#: builtin/pack-objects.c:2925 builtin/pack-objects.c:3033
+#: builtin/pack-objects.c:2905 builtin/pack-objects.c:3013
 msgid "cannot open pack index"
 msgstr "no se puede abrir índice de paquetes"
 
-#: builtin/pack-objects.c:2956
+#: builtin/pack-objects.c:2936
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "objeto perdido en %s no pudo ser examinado"
 
-#: builtin/pack-objects.c:3041
+#: builtin/pack-objects.c:3021
 msgid "unable to force loose object"
 msgstr "incapaz de forzar un objeto perdido"
 
-#: builtin/pack-objects.c:3133
+#: builtin/pack-objects.c:3113
 #, c-format
 msgid "not a rev '%s'"
 msgstr "no es una rev '%s'"
 
-#: builtin/pack-objects.c:3136
+#: builtin/pack-objects.c:3116
 #, c-format
 msgid "bad revision '%s'"
 msgstr "mala revisión '%s'"
 
-#: builtin/pack-objects.c:3161
+#: builtin/pack-objects.c:3141
 msgid "unable to add recent objects"
 msgstr "incapaz de añadir objetos recientes"
 
-#: builtin/pack-objects.c:3214
+#: builtin/pack-objects.c:3194
 #, c-format
 msgid "unsupported index version %s"
 msgstr "versión de índice no soportada %s"
 
-#: builtin/pack-objects.c:3218
+#: builtin/pack-objects.c:3198
 #, c-format
 msgid "bad index version '%s'"
 msgstr "mala versión del índice '%s'"
 
-#: builtin/pack-objects.c:3248
+#: builtin/pack-objects.c:3228
 msgid "do not show progress meter"
 msgstr "no mostrar medidor de progreso"
 
-#: builtin/pack-objects.c:3250
+#: builtin/pack-objects.c:3230
 msgid "show progress meter"
 msgstr "mostrar medidor de progreso"
 
-#: builtin/pack-objects.c:3252
+#: builtin/pack-objects.c:3232
 msgid "show progress meter during object writing phase"
 msgstr "mostrar medidor de progreso durante la fase de escritura de objeto"
 
-#: builtin/pack-objects.c:3255
+#: builtin/pack-objects.c:3235
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "similar a --all-progress cuando medidor de progreso es mostrado"
 
-#: builtin/pack-objects.c:3256
+#: builtin/pack-objects.c:3236
 msgid "<version>[,<offset>]"
 msgstr "<versión>[,<offset>]"
 
-#: builtin/pack-objects.c:3257
+#: builtin/pack-objects.c:3237
 msgid "write the pack index file in the specified idx format version"
 msgstr ""
 "escribir el índice de paquete en la versión de formato idx especificado"
 
-#: builtin/pack-objects.c:3260
+#: builtin/pack-objects.c:3240
 msgid "maximum size of each output pack file"
 msgstr "tamaño máximo de cada paquete resultante"
 
-#: builtin/pack-objects.c:3262
+#: builtin/pack-objects.c:3242
 msgid "ignore borrowed objects from alternate object store"
 msgstr "ignorar objetos prestados de otros almacenes de objetos"
 
-#: builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3244
 msgid "ignore packed objects"
 msgstr "ignorar objetos paquete"
 
-#: builtin/pack-objects.c:3266
+#: builtin/pack-objects.c:3246
 msgid "limit pack window by objects"
 msgstr "limitar ventana de paquete por objetos"
 
-#: builtin/pack-objects.c:3268
+#: builtin/pack-objects.c:3248
 msgid "limit pack window by memory in addition to object limit"
 msgstr "limitar ventana de paquete por memoria en adición a límite de objetos"
 
-#: builtin/pack-objects.c:3270
+#: builtin/pack-objects.c:3250
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr "longitud máxima de cadena delta permitida en el paquete resultante"
 
-#: builtin/pack-objects.c:3272
+#: builtin/pack-objects.c:3252
 msgid "reuse existing deltas"
 msgstr "reusar deltas existentes"
 
-#: builtin/pack-objects.c:3274
+#: builtin/pack-objects.c:3254
 msgid "reuse existing objects"
 msgstr "reutilizar objetos existentes"
 
-#: builtin/pack-objects.c:3276
+#: builtin/pack-objects.c:3256
 msgid "use OFS_DELTA objects"
 msgstr "usar objetos OFS_DELTA"
 
-#: builtin/pack-objects.c:3278
+#: builtin/pack-objects.c:3258
 msgid "use threads when searching for best delta matches"
 msgstr "usar hilos cuando se busque para mejores concordancias de delta"
 
-#: builtin/pack-objects.c:3280
+#: builtin/pack-objects.c:3260
 msgid "do not create an empty pack output"
 msgstr "no crear un paquete resultante vacío"
 
-#: builtin/pack-objects.c:3282
+#: builtin/pack-objects.c:3262
 msgid "read revision arguments from standard input"
 msgstr "leer argumentos de revisión de standard input"
 
-#: builtin/pack-objects.c:3284
+#: builtin/pack-objects.c:3264
 msgid "limit the objects to those that are not yet packed"
 msgstr "limitar los objetos a aquellos que no han sido empaquetados todavía"
 
-#: builtin/pack-objects.c:3287
+#: builtin/pack-objects.c:3267
 msgid "include objects reachable from any reference"
 msgstr "incluir objetos alcanzables por cualquier referencia"
 
-#: builtin/pack-objects.c:3290
+#: builtin/pack-objects.c:3270
 msgid "include objects referred by reflog entries"
 msgstr "incluir objetos referidos por entradas de reflog"
 
-#: builtin/pack-objects.c:3293
+#: builtin/pack-objects.c:3273
 msgid "include objects referred to by the index"
 msgstr "incluir objetos referidos por el índice"
 
-#: builtin/pack-objects.c:3296
+#: builtin/pack-objects.c:3276
 msgid "output pack to stdout"
 msgstr "mostrar paquete en stdout"
 
-#: builtin/pack-objects.c:3298
+#: builtin/pack-objects.c:3278
 msgid "include tag objects that refer to objects to be packed"
 msgstr "incluir objetos tag que refieren a objetos a ser empaquetados"
 
-#: builtin/pack-objects.c:3300
+#: builtin/pack-objects.c:3280
 msgid "keep unreachable objects"
 msgstr "mantener objetos inalcanzables"
 
-#: builtin/pack-objects.c:3302
+#: builtin/pack-objects.c:3282
 msgid "pack loose unreachable objects"
 msgstr "empaquetar objetos sueltos inalcanzables"
 
-#: builtin/pack-objects.c:3304
+#: builtin/pack-objects.c:3284
 msgid "unpack unreachable objects newer than <time>"
 msgstr "desempaquetar objetos inalcanzables más nuevos que <tiempo>"
 
-#: builtin/pack-objects.c:3307
+#: builtin/pack-objects.c:3287
 msgid "use the sparse reachability algorithm"
 msgstr "usar el algoritmo sparse reachability"
 
-#: builtin/pack-objects.c:3309
+#: builtin/pack-objects.c:3289
 msgid "create thin packs"
 msgstr "crear paquetes delgados"
 
-#: builtin/pack-objects.c:3311
+#: builtin/pack-objects.c:3291
 msgid "create packs suitable for shallow fetches"
 msgstr "crear paquetes adecuados para fetches superficiales"
 
-#: builtin/pack-objects.c:3313
+#: builtin/pack-objects.c:3293
 msgid "ignore packs that have companion .keep file"
 msgstr "ignorar paquetes que tienen un archivo .keep acompañante"
 
-#: builtin/pack-objects.c:3315
+#: builtin/pack-objects.c:3295
 msgid "ignore this pack"
 msgstr "ignorar este paquete"
 
-#: builtin/pack-objects.c:3317
+#: builtin/pack-objects.c:3297
 msgid "pack compression level"
 msgstr "nivel de compresión del paquete"
 
-#: builtin/pack-objects.c:3319
+#: builtin/pack-objects.c:3299
 msgid "do not hide commits by grafts"
 msgstr "no ocultar commits por injertos"
 
-#: builtin/pack-objects.c:3321
+#: builtin/pack-objects.c:3301
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr ""
 "usar un índice bitmap si está disponible para acelerar la cuenta de objetos"
 
-#: builtin/pack-objects.c:3323
+#: builtin/pack-objects.c:3303
 msgid "write a bitmap index together with the pack index"
 msgstr "escribir un índice de bitmap junto al índice de paquete"
 
-#: builtin/pack-objects.c:3327
+#: builtin/pack-objects.c:3307
 msgid "write a bitmap index if possible"
 msgstr "escribir un índice de bitmap si es posible"
 
-#: builtin/pack-objects.c:3331
+#: builtin/pack-objects.c:3311
 msgid "handling for missing objects"
 msgstr "manejo de objetos perdidos"
 
-#: builtin/pack-objects.c:3334
+#: builtin/pack-objects.c:3314
 msgid "do not pack objects in promisor packfiles"
 msgstr "no se puede empaquetar objetos en packfiles promisores"
 
-#: builtin/pack-objects.c:3336
+#: builtin/pack-objects.c:3316
 msgid "respect islands during delta compression"
 msgstr "respetar islas durante la compresión delta"
 
-#: builtin/pack-objects.c:3361
+#: builtin/pack-objects.c:3345
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "profundidad de cadena de delta %d es muy profunda, forzando %d"
 
-#: builtin/pack-objects.c:3366
+#: builtin/pack-objects.c:3350
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "pack.deltaCacheLimit es muy grande, forzando %d"
 
-#: builtin/pack-objects.c:3420
+#: builtin/pack-objects.c:3404
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 "--max-pack-size no puede ser usado para construir un paquete para "
 "transferencia"
 
-#: builtin/pack-objects.c:3422
+#: builtin/pack-objects.c:3406
 msgid "minimum pack size limit is 1 MiB"
 msgstr "tamaño mínimo del paquete es 1 MiB"
 
-#: builtin/pack-objects.c:3427
+#: builtin/pack-objects.c:3411
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "--thin no puede ser usado para construir un paquete indexable"
 
-#: builtin/pack-objects.c:3430
+#: builtin/pack-objects.c:3414
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr "--keep-unreachable y --unpack-unreachable son incompatibles"
 
-#: builtin/pack-objects.c:3436
+#: builtin/pack-objects.c:3420
 msgid "cannot use --filter without --stdout"
 msgstr "no se puede usar--filter sin --stdout"
 
-#: builtin/pack-objects.c:3497
+#: builtin/pack-objects.c:3481
 msgid "Enumerating objects"
 msgstr "Enumerando objetos"
 
-#: builtin/pack-objects.c:3527
+#: builtin/pack-objects.c:3511
 #, c-format
 msgid "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>)"
 msgstr "Total %<PRIu32> (delta %<PRIu32>), reusado %<PRIu32> (delta %<PRIu32>)"
@@ -16475,56 +16557,56 @@
 msgstr ""
 "git pull [<opciones>] [<repositorio> [<especificación-de-referencia>...]]"
 
-#: builtin/pull.c:141
+#: builtin/pull.c:142
 msgid "control for recursive fetching of submodules"
 msgstr "control de fetch recursivo en submódulos"
 
-#: builtin/pull.c:145
+#: builtin/pull.c:146
 msgid "Options related to merging"
 msgstr "Opciones relacionadas a fusión"
 
-#: builtin/pull.c:148
+#: builtin/pull.c:149
 msgid "incorporate changes by rebasing rather than merging"
 msgstr "incorporar cambios por rebase en lugar de fusión"
 
-#: builtin/pull.c:176 builtin/rebase.c:447 builtin/revert.c:126
+#: builtin/pull.c:177 builtin/rebase.c:448 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "permitir fast-forward"
 
-#: builtin/pull.c:185
+#: builtin/pull.c:186
 msgid "automatically stash/stash pop before and after rebase"
 msgstr "ejecutar automáticamente stash/stash pop antes y después de rebase"
 
-#: builtin/pull.c:201
+#: builtin/pull.c:202
 msgid "Options related to fetching"
 msgstr "Opciones relacionadas a fetch"
 
-#: builtin/pull.c:211
+#: builtin/pull.c:212
 msgid "force overwrite of local branch"
 msgstr "forzar sobrescritura de la rama local"
 
-#: builtin/pull.c:219
+#: builtin/pull.c:220
 msgid "number of submodules pulled in parallel"
 msgstr "número de submódulos que realizan pull en paralelo"
 
-#: builtin/pull.c:316
+#: builtin/pull.c:320
 #, c-format
 msgid "Invalid value for pull.ff: %s"
 msgstr "Valor inválido para pull.ff: %s"
 
-#: builtin/pull.c:433
+#: builtin/pull.c:437
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
 "fetched."
 msgstr "No hay candidato para rebasar entre las refs que has bajado con fetch."
 
-#: builtin/pull.c:435
+#: builtin/pull.c:439
 msgid ""
 "There are no candidates for merging among the refs that you just fetched."
 msgstr ""
 "No hay candidatos para fusionar entre las refs que has bajado con fetch."
 
-#: builtin/pull.c:436
+#: builtin/pull.c:440
 msgid ""
 "Generally this means that you provided a wildcard refspec which had no\n"
 "matches on the remote end."
@@ -16533,7 +16615,7 @@
 "tiene\n"
 "concordancia en el final remoto."
 
-#: builtin/pull.c:439
+#: builtin/pull.c:443
 #, c-format
 msgid ""
 "You asked to pull from the remote '%s', but did not specify\n"
@@ -16544,44 +16626,44 @@
 "una rama. Porque este no es el remoto configurado por default\n"
 "para tu rama actual, tienes que especificar una rama en la línea de comando."
 
-#: builtin/pull.c:444 builtin/rebase.c:1326 git-parse-remote.sh:73
+#: builtin/pull.c:448 builtin/rebase.c:1347 git-parse-remote.sh:73
 msgid "You are not currently on a branch."
 msgstr "No te encuentras actualmente en la rama."
 
-#: builtin/pull.c:446 builtin/pull.c:461 git-parse-remote.sh:79
+#: builtin/pull.c:450 builtin/pull.c:465 git-parse-remote.sh:79
 msgid "Please specify which branch you want to rebase against."
 msgstr "Por favor especifica a qué rama quieres rebasar."
 
-#: builtin/pull.c:448 builtin/pull.c:463 git-parse-remote.sh:82
+#: builtin/pull.c:452 builtin/pull.c:467 git-parse-remote.sh:82
 msgid "Please specify which branch you want to merge with."
 msgstr "Por favor especifica a qué rama quieres fusionar."
 
-#: builtin/pull.c:449 builtin/pull.c:464
+#: builtin/pull.c:453 builtin/pull.c:468
 msgid "See git-pull(1) for details."
 msgstr "Ver git-pull(1) para detalles."
 
-#: builtin/pull.c:451 builtin/pull.c:457 builtin/pull.c:466
-#: builtin/rebase.c:1332 git-parse-remote.sh:64
+#: builtin/pull.c:455 builtin/pull.c:461 builtin/pull.c:470
+#: builtin/rebase.c:1353 git-parse-remote.sh:64
 msgid "<remote>"
 msgstr "<remoto>"
 
-#: builtin/pull.c:451 builtin/pull.c:466 builtin/pull.c:471
+#: builtin/pull.c:455 builtin/pull.c:470 builtin/pull.c:475
 #: git-parse-remote.sh:65
 msgid "<branch>"
 msgstr "<rama>"
 
-#: builtin/pull.c:459 builtin/rebase.c:1324 git-parse-remote.sh:75
+#: builtin/pull.c:463 builtin/rebase.c:1345 git-parse-remote.sh:75
 msgid "There is no tracking information for the current branch."
 msgstr "No hay información de rastreo para la rama actual."
 
-#: builtin/pull.c:468 git-parse-remote.sh:95
+#: builtin/pull.c:472 git-parse-remote.sh:95
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:"
 msgstr ""
 "Si deseas configurar el rastreo de información para esta rama, puedes "
 "hacerlo con:"
 
-#: builtin/pull.c:473
+#: builtin/pull.c:477
 #, c-format
 msgid ""
 "Your configuration specifies to merge with the ref '%s'\n"
@@ -16590,32 +16672,32 @@
 "Tu configuración especifica fusionar con la ref '%s'\n"
 "de tu remoto, pero no se pudo hacer fetch a esa ref."
 
-#: builtin/pull.c:581
+#: builtin/pull.c:587
 #, c-format
 msgid "unable to access commit %s"
 msgstr "no es posible acceder al commit %s"
 
-#: builtin/pull.c:861
+#: builtin/pull.c:867
 msgid "ignoring --verify-signatures for rebase"
 msgstr "ignorando --verify-signatures para rebase"
 
-#: builtin/pull.c:916
+#: builtin/pull.c:922
 msgid "--[no-]autostash option is only valid with --rebase."
 msgstr "La opción --[no-]autostash sólo es válida con --rebase."
 
-#: builtin/pull.c:924
+#: builtin/pull.c:930
 msgid "Updating an unborn branch with changes added to the index."
 msgstr "Actualizando una rama no nata con cambios agregados al índice."
 
-#: builtin/pull.c:928
+#: builtin/pull.c:934
 msgid "pull with rebase"
 msgstr "pull con rebase"
 
-#: builtin/pull.c:929
+#: builtin/pull.c:935
 msgid "please commit or stash them."
 msgstr "por favor realiza un commit o un stash con ellos."
 
-#: builtin/pull.c:954
+#: builtin/pull.c:960
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -16626,7 +16708,7 @@
 "realizando fast-forward al árbol de trabajo\n"
 "desde commit %s."
 
-#: builtin/pull.c:960
+#: builtin/pull.c:966
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -16643,15 +16725,15 @@
 "$ git reset --hard\n"
 "para recuperar."
 
-#: builtin/pull.c:975
+#: builtin/pull.c:981
 msgid "Cannot merge multiple branches into empty head."
 msgstr "No se puede fusionar múltiples ramas en un head vacío."
 
-#: builtin/pull.c:979
+#: builtin/pull.c:985
 msgid "Cannot rebase onto multiple branches."
 msgstr "No se puede rebasar en múltiples ramas."
 
-#: builtin/pull.c:986
+#: builtin/pull.c:992
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 "no se puede rebasar con modificaciones de submódulos grabadas localmente"
@@ -16813,17 +16895,94 @@
 msgid "Pushing to %s\n"
 msgstr "Haciendo push a %s\n"
 
-#: builtin/push.c:364
+#: builtin/push.c:366
 #, c-format
 msgid "failed to push some refs to '%s'"
 msgstr "falló el push de algunas referencias a '%s'"
 
-#: builtin/push.c:398
+#: builtin/push.c:541
+msgid "repository"
+msgstr "repositorio"
+
+#: builtin/push.c:542 builtin/send-pack.c:164
+msgid "push all refs"
+msgstr "realizar push a todas las refs"
+
+#: builtin/push.c:543 builtin/send-pack.c:166
+msgid "mirror all refs"
+msgstr "realizar mirror a todas las refs"
+
+#: builtin/push.c:545
+msgid "delete refs"
+msgstr "borrar refs"
+
+#: builtin/push.c:546
+msgid "push tags (can't be used with --all or --mirror)"
+msgstr "realizar push a tags (no puede ser usado con --all o --mirror)"
+
+#: builtin/push.c:549 builtin/send-pack.c:167
+msgid "force updates"
+msgstr "forzar actualizaciones"
+
+#: builtin/push.c:551 builtin/send-pack.c:181
+msgid "<refname>:<expect>"
+msgstr "<refname>:<expect>"
+
+#: builtin/push.c:552 builtin/send-pack.c:182
+msgid "require old value of ref to be at this value"
+msgstr "requiere haber valor viejo de ref en este valor"
+
+#: builtin/push.c:555
+msgid "control recursive pushing of submodules"
+msgstr "controlar push recursivo de submódulos"
+
+#: builtin/push.c:557 builtin/send-pack.c:175
+msgid "use thin pack"
+msgstr "usar empaquetado delgado"
+
+#: builtin/push.c:558 builtin/push.c:559 builtin/send-pack.c:161
+#: builtin/send-pack.c:162
+msgid "receive pack program"
+msgstr "recibir programa de paquete"
+
+#: builtin/push.c:560
+msgid "set upstream for git pull/status"
+msgstr "configurar upstream para git pulll/status"
+
+#: builtin/push.c:563
+msgid "prune locally removed refs"
+msgstr "recortando refs eliminadas localmente"
+
+#: builtin/push.c:565
+msgid "bypass pre-push hook"
+msgstr "hacer un bypass al hook pre-push"
+
+#: builtin/push.c:566
+msgid "push missing but relevant tags"
+msgstr "realizar push de tags faltantes pero relevantes"
+
+#: builtin/push.c:569 builtin/send-pack.c:169
+msgid "GPG sign the push"
+msgstr "Firmar con GPG el push"
+
+#: builtin/push.c:571 builtin/send-pack.c:176
+msgid "request atomic transaction on remote side"
+msgstr "solicitar transacción atómica en el lado remoto"
+
+#: builtin/push.c:589
+msgid "--delete is incompatible with --all, --mirror and --tags"
+msgstr "--delete es incompatible con --all, --mirror y --tags"
+
+#: builtin/push.c:591
+msgid "--delete doesn't make sense without any refs"
+msgstr "--delete no tiene sentido sin ninguna referencia"
+
+#: builtin/push.c:611
 #, c-format
 msgid "bad repository '%s'"
 msgstr "mal repositorio '%s'"
 
-#: builtin/push.c:399
+#: builtin/push.c:612
 msgid ""
 "No configured push destination.\n"
 "Either specify the URL from the command-line or configure a remote "
@@ -16845,104 +17004,27 @@
 "\n"
 "    git push <nombre>\n"
 
-#: builtin/push.c:554
-msgid "repository"
-msgstr "repositorio"
-
-#: builtin/push.c:555 builtin/send-pack.c:164
-msgid "push all refs"
-msgstr "realizar push a todas las refs"
-
-#: builtin/push.c:556 builtin/send-pack.c:166
-msgid "mirror all refs"
-msgstr "realizar mirror a todas las refs"
-
-#: builtin/push.c:558
-msgid "delete refs"
-msgstr "borrar refs"
-
-#: builtin/push.c:559
-msgid "push tags (can't be used with --all or --mirror)"
-msgstr "realizar push a tags (no puede ser usado con --all o --mirror)"
-
-#: builtin/push.c:562 builtin/send-pack.c:167
-msgid "force updates"
-msgstr "forzar actualizaciones"
-
-#: builtin/push.c:564 builtin/send-pack.c:181
-msgid "<refname>:<expect>"
-msgstr "<refname>:<expect>"
-
-#: builtin/push.c:565 builtin/send-pack.c:182
-msgid "require old value of ref to be at this value"
-msgstr "requiere haber valor viejo de ref en este valor"
-
-#: builtin/push.c:568
-msgid "control recursive pushing of submodules"
-msgstr "controlar push recursivo de submódulos"
-
-#: builtin/push.c:570 builtin/send-pack.c:175
-msgid "use thin pack"
-msgstr "usar empaquetado delgado"
-
-#: builtin/push.c:571 builtin/push.c:572 builtin/send-pack.c:161
-#: builtin/send-pack.c:162
-msgid "receive pack program"
-msgstr "recibir programa de paquete"
-
-#: builtin/push.c:573
-msgid "set upstream for git pull/status"
-msgstr "configurar upstream para git pulll/status"
-
-#: builtin/push.c:576
-msgid "prune locally removed refs"
-msgstr "recortando refs removidas localmente"
-
-#: builtin/push.c:578
-msgid "bypass pre-push hook"
-msgstr "hacer un bypass al hook pre-push"
-
-#: builtin/push.c:579
-msgid "push missing but relevant tags"
-msgstr "realizar push de tags faltantes pero relevantes"
-
-#: builtin/push.c:582 builtin/send-pack.c:169
-msgid "GPG sign the push"
-msgstr "Firmar con GPG el push"
-
-#: builtin/push.c:584 builtin/send-pack.c:176
-msgid "request atomic transaction on remote side"
-msgstr "solicitar transacción atómica en el lado remoto"
-
-#: builtin/push.c:602
-msgid "--delete is incompatible with --all, --mirror and --tags"
-msgstr "--delete es incompatible con --all, --mirror y --tags"
-
-#: builtin/push.c:604
-msgid "--delete doesn't make sense without any refs"
-msgstr "--delete no tiene sentido sin ninguna referencia"
-
-#: builtin/push.c:607
+#: builtin/push.c:627
 msgid "--all and --tags are incompatible"
 msgstr "--all y --tags son incompatibles"
 
-#: builtin/push.c:609
+#: builtin/push.c:629
 msgid "--all can't be combined with refspecs"
 msgstr "--all no puede ser combinada con refspecs"
 
-#: builtin/push.c:613
+#: builtin/push.c:633
 msgid "--mirror and --tags are incompatible"
 msgstr "--mirror y --tags son incompatibles"
 
-#: builtin/push.c:615
+#: builtin/push.c:635
 msgid "--mirror can't be combined with refspecs"
 msgstr "--mirror no puede ser combinado con refspecs"
 
-#: builtin/push.c:618
+#: builtin/push.c:638
 msgid "--all and --mirror are incompatible"
 msgstr "--all y --mirror son incompatibles"
 
-#: builtin/push.c:637
+#: builtin/push.c:642
 msgid "push options must not have new line characters"
 msgstr "opciones de push no pueden tener caracteres de línea nueva"
 
@@ -17062,11 +17144,11 @@
 
 #: builtin/rebase.c:32
 msgid ""
-"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] "
-"[<branch>]"
+"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
+"[<upstream> [<branch>]]"
 msgstr ""
-"git rebase [-i] [opciones] [--exec <cmd>] [--onto <newbase>] [<upstream>] "
-"[<branch>]"
+"git rebase [-i] [opciones] [--exec <cmd>] [--onto <newbase> | --keep-base] "
+"[<upstream> [<branch>]]"
 
 #: builtin/rebase.c:34
 msgid ""
@@ -17105,189 +17187,189 @@
 msgid "could not generate todo list"
 msgstr "no se pudo generar lista de pendientes"
 
-#: builtin/rebase.c:382
+#: builtin/rebase.c:383
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "un commit base tiene que ser provisto con --upstream o --onto"
 
-#: builtin/rebase.c:437
+#: builtin/rebase.c:438
 msgid "git rebase--interactive [<options>]"
 msgstr "git rebase--interactive [<opciones>]"
 
-#: builtin/rebase.c:449
+#: builtin/rebase.c:450
 msgid "keep empty commits"
 msgstr "mantener commits vacíos"
 
-#: builtin/rebase.c:451 builtin/revert.c:128
+#: builtin/rebase.c:452 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr "permitir commits con mensajes vacíos"
 
-#: builtin/rebase.c:452
+#: builtin/rebase.c:453
 msgid "rebase merge commits"
 msgstr "rebasando commits de fusión"
 
-#: builtin/rebase.c:454
+#: builtin/rebase.c:455
 msgid "keep original branch points of cousins"
 msgstr "mantener puntos originales de la rama de sus primos"
 
-#: builtin/rebase.c:456
+#: builtin/rebase.c:457
 msgid "move commits that begin with squash!/fixup!"
 msgstr "mover commits que comienzan con squash!/fixup!"
 
-#: builtin/rebase.c:457
+#: builtin/rebase.c:458
 msgid "sign commits"
 msgstr "firmar commits"
 
-#: builtin/rebase.c:459 builtin/rebase.c:1403
+#: builtin/rebase.c:460 builtin/rebase.c:1427
 msgid "display a diffstat of what changed upstream"
 msgstr "mostrar un diffstat de lo que cambió en upstream"
 
-#: builtin/rebase.c:461
+#: builtin/rebase.c:462
 msgid "continue rebase"
 msgstr "continuar rebase"
 
-#: builtin/rebase.c:463
+#: builtin/rebase.c:464
 msgid "skip commit"
 msgstr "saltar commit"
 
-#: builtin/rebase.c:464
+#: builtin/rebase.c:465
 msgid "edit the todo list"
 msgstr "editar la lista de pendientes"
 
-#: builtin/rebase.c:466
+#: builtin/rebase.c:467
 msgid "show the current patch"
 msgstr "mostrar el parche actual"
 
-#: builtin/rebase.c:469
+#: builtin/rebase.c:470
 msgid "shorten commit ids in the todo list"
 msgstr "ids de commits cortos en la lista de pendientes"
 
-#: builtin/rebase.c:471
+#: builtin/rebase.c:472
 msgid "expand commit ids in the todo list"
 msgstr "expandir ids de commits en la lista de pendientes"
 
-#: builtin/rebase.c:473
+#: builtin/rebase.c:474
 msgid "check the todo list"
 msgstr "revisar la lista de pendientes"
 
-#: builtin/rebase.c:475
+#: builtin/rebase.c:476
 msgid "rearrange fixup/squash lines"
 msgstr "reorganizar líneas fixup/squash"
 
-#: builtin/rebase.c:477
+#: builtin/rebase.c:478
 msgid "insert exec commands in todo list"
 msgstr "insertar comando exec en la lista de pendientes"
 
-#: builtin/rebase.c:478
+#: builtin/rebase.c:479
 msgid "onto"
 msgstr "hacia"
 
-#: builtin/rebase.c:481
+#: builtin/rebase.c:482
 msgid "restrict-revision"
 msgstr "restrict-revision"
 
-#: builtin/rebase.c:481
+#: builtin/rebase.c:482
 msgid "restrict revision"
 msgstr "restringir revision"
 
-#: builtin/rebase.c:483
+#: builtin/rebase.c:484
 msgid "squash-onto"
 msgstr "squash-onto"
 
-#: builtin/rebase.c:484
+#: builtin/rebase.c:485
 msgid "squash onto"
 msgstr "squash hacia"
 
-#: builtin/rebase.c:486
+#: builtin/rebase.c:487
 msgid "the upstream commit"
 msgstr "el commit de upstream"
 
-#: builtin/rebase.c:488
+#: builtin/rebase.c:489
 msgid "head-name"
 msgstr "head-name"
 
-#: builtin/rebase.c:488
+#: builtin/rebase.c:489
 msgid "head name"
 msgstr "nombre de head"
 
-#: builtin/rebase.c:493
+#: builtin/rebase.c:494
 msgid "rebase strategy"
 msgstr "estrategia de rebase"
 
-#: builtin/rebase.c:494
+#: builtin/rebase.c:495
 msgid "strategy-opts"
 msgstr "strategy-opts"
 
-#: builtin/rebase.c:495
+#: builtin/rebase.c:496
 msgid "strategy options"
 msgstr "opciones de estrategia"
 
-#: builtin/rebase.c:496
+#: builtin/rebase.c:497
 msgid "switch-to"
 msgstr "cambiar a"
 
-#: builtin/rebase.c:497
+#: builtin/rebase.c:498
 msgid "the branch or commit to checkout"
 msgstr "la rama o commit para hacer checkout"
 
-#: builtin/rebase.c:498
+#: builtin/rebase.c:499
 msgid "onto-name"
 msgstr "hacia-nombre"
 
-#: builtin/rebase.c:498
+#: builtin/rebase.c:499
 msgid "onto name"
 msgstr "hacia nombre"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "cmd"
 msgstr "cmd"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "the command to run"
 msgstr "el comando para ejecutar"
 
-#: builtin/rebase.c:502 builtin/rebase.c:1486
+#: builtin/rebase.c:503 builtin/rebase.c:1510
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "reprogramar automaticamente cualquier `exec` que falle"
 
-#: builtin/rebase.c:518
+#: builtin/rebase.c:519
 msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
 msgstr "--[no-]rebase-cousins no tiene efecto sin --rebase-merges"
 
-#: builtin/rebase.c:534
+#: builtin/rebase.c:535
 #, c-format
 msgid "%s requires an interactive rebase"
 msgstr "%s requiere un rebase interactivo"
 
-#: builtin/rebase.c:586
+#: builtin/rebase.c:587
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "no se pudo conseguir 'onto': '%s'"
 
-#: builtin/rebase.c:601
+#: builtin/rebase.c:602
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "orig-head inválido: '%s'"
 
-#: builtin/rebase.c:626
+#: builtin/rebase.c:627
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "ignorando inválido allow_rerere_autoupdate: '%s'"
 
-#: builtin/rebase.c:702
+#: builtin/rebase.c:703
 #, c-format
 msgid "Could not read '%s'"
 msgstr "No se pudo leer '%s'"
 
-#: builtin/rebase.c:720
+#: builtin/rebase.c:721
 #, c-format
 msgid "Cannot store %s"
 msgstr "No se puede guardar %s"
 
-#: builtin/rebase.c:827
+#: builtin/rebase.c:828
 msgid "could not determine HEAD revision"
 msgstr "no se pudo determinar revisión HEAD"
 
-#: builtin/rebase.c:950 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:951 git-rebase--preserve-merges.sh:81
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -17302,7 +17384,7 @@
 "Para abortar y regresar al estado previo al \"git rebase\", ejecuta \"git "
 "rebase --abort\"."
 
-#: builtin/rebase.c:1031
+#: builtin/rebase.c:1032
 #, c-format
 msgid ""
 "\n"
@@ -17321,7 +17403,7 @@
 "\n"
 "Como resultado, git no puede hacer rebase con ellos."
 
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1339
 #, c-format
 msgid ""
 "%s\n"
@@ -17338,7 +17420,7 @@
 "    git rebase '<rama>'\n"
 "\n"
 
-#: builtin/rebase.c:1334
+#: builtin/rebase.c:1355
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -17351,158 +17433,170 @@
 "    git branch --set-upstream-to=%s/<rama> %s\n"
 "\n"
 
-#: builtin/rebase.c:1364
+#: builtin/rebase.c:1385
 msgid "exec commands cannot contain newlines"
 msgstr "comandos exec no pueden contener newlines"
 
-#: builtin/rebase.c:1368
+#: builtin/rebase.c:1389
 msgid "empty exec command"
 msgstr "comando exec vacío"
 
-#: builtin/rebase.c:1396
+#: builtin/rebase.c:1418
 msgid "rebase onto given branch instead of upstream"
 msgstr "haciendo rebase hacia rama dada en lugar de upstream"
 
-#: builtin/rebase.c:1398
+#: builtin/rebase.c:1420
+msgid "use the merge-base of upstream and branch as the current base"
+msgstr "usar la base de fusión de upstream y la rama como base actual"
+
+#: builtin/rebase.c:1422
 msgid "allow pre-rebase hook to run"
 msgstr "permitir ejecutar hook pre-rebase"
 
-#: builtin/rebase.c:1400
+#: builtin/rebase.c:1424
 msgid "be quiet. implies --no-stat"
 msgstr "ser silencioso implica --no-stat"
 
-#: builtin/rebase.c:1406
+#: builtin/rebase.c:1430
 msgid "do not show diffstat of what changed upstream"
 msgstr "no mostrar un diffstat de lo que cambió en upstream"
 
-#: builtin/rebase.c:1409
+#: builtin/rebase.c:1433
 msgid "add a Signed-off-by: line to each commit"
 msgstr "agregar una línea \"Firmado-por\" al mensaje de cada commit"
 
-#: builtin/rebase.c:1411 builtin/rebase.c:1415 builtin/rebase.c:1417
+#: builtin/rebase.c:1435 builtin/rebase.c:1439 builtin/rebase.c:1441
 msgid "passed to 'git am'"
 msgstr "pasado a 'git am'"
 
-#: builtin/rebase.c:1419 builtin/rebase.c:1421
+#: builtin/rebase.c:1443 builtin/rebase.c:1445
 msgid "passed to 'git apply'"
 msgstr "pasado a 'git-apply'"
 
-#: builtin/rebase.c:1423 builtin/rebase.c:1426
+#: builtin/rebase.c:1447 builtin/rebase.c:1450
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "cherry-pick todos los commits, incluso si no han cambiado"
 
-#: builtin/rebase.c:1428
+#: builtin/rebase.c:1452
 msgid "continue"
 msgstr "continuar"
 
-#: builtin/rebase.c:1431
+#: builtin/rebase.c:1455
 msgid "skip current patch and continue"
 msgstr "saltar el parche y continuar"
 
-#: builtin/rebase.c:1433
+#: builtin/rebase.c:1457
 msgid "abort and check out the original branch"
 msgstr "aborta y revisa la rama original"
 
-#: builtin/rebase.c:1436
+#: builtin/rebase.c:1460
 msgid "abort but keep HEAD where it is"
 msgstr "aborta pero mantiene HEAD donde está"
 
-#: builtin/rebase.c:1437
+#: builtin/rebase.c:1461
 msgid "edit the todo list during an interactive rebase"
 msgstr "editar la lista de pendientes durante el rebase interactivo"
 
-#: builtin/rebase.c:1440
+#: builtin/rebase.c:1464
 msgid "show the patch file being applied or merged"
 msgstr "muestra el archivo parche siendo aplicado o fusionado"
 
-#: builtin/rebase.c:1443
+#: builtin/rebase.c:1467
 msgid "use merging strategies to rebase"
 msgstr "usar estrategias de fusión para el rebase"
 
-#: builtin/rebase.c:1447
+#: builtin/rebase.c:1471
 msgid "let the user edit the list of commits to rebase"
 msgstr "permitir al usuario editar la lista de commits para rebasar"
 
-#: builtin/rebase.c:1451
+#: builtin/rebase.c:1475
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr "(DEPRECADO) intentar recrear merges en lugar de ignorarlos"
 
-#: builtin/rebase.c:1455
+#: builtin/rebase.c:1479
 msgid "preserve empty commits during rebase"
 msgstr "preservar commits vacíos durante el rebase"
 
-#: builtin/rebase.c:1457
+#: builtin/rebase.c:1481
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "mover commits que comienzan con squash!/fixup! bajo -i"
 
-#: builtin/rebase.c:1463
+#: builtin/rebase.c:1487
 msgid "automatically stash/stash pop before and after"
 msgstr "ejecutar automáticamente stash/stash pop antes y después"
 
-#: builtin/rebase.c:1465
+#: builtin/rebase.c:1489
 msgid "add exec lines after each commit of the editable list"
 msgstr "agregar líneas exec tras cada acommit de la lista editable"
 
-#: builtin/rebase.c:1469
+#: builtin/rebase.c:1493
 msgid "allow rebasing commits with empty messages"
 msgstr "permitir rebase commits con mensajes vacíos"
 
-#: builtin/rebase.c:1472
+#: builtin/rebase.c:1496
 msgid "try to rebase merges instead of skipping them"
 msgstr "intentar fusiones por rebase en lugar de saltarlas"
 
-#: builtin/rebase.c:1475
+#: builtin/rebase.c:1499
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "use 'merge-base --fork-point' para refinar upstream"
 
-#: builtin/rebase.c:1477
+#: builtin/rebase.c:1501
 msgid "use the given merge strategy"
 msgstr "usar la estrategia de merge dada"
 
-#: builtin/rebase.c:1479 builtin/revert.c:115
+#: builtin/rebase.c:1503 builtin/revert.c:115
 msgid "option"
 msgstr "opción"
 
-#: builtin/rebase.c:1480
+#: builtin/rebase.c:1504
 msgid "pass the argument through to the merge strategy"
 msgstr "pasar el argumento para la estrategia de fusión"
 
-#: builtin/rebase.c:1483
+#: builtin/rebase.c:1507
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "hacer rebase a todos los commits alcanzables hasta la raíz(raíces)"
 
-#: builtin/rebase.c:1500
+#: builtin/rebase.c:1524
 msgid ""
 "the rebase.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
 msgstr ""
-"el soporte para rebase.useBuiltin ha sido removido!\n"
+"el soporte para rebase.useBuiltin ha sido eliminado!\n"
 "Vea su entrada en 'git help config' para detalles."
 
-#: builtin/rebase.c:1506
+#: builtin/rebase.c:1530
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "Parece que 'git am' está en progreso. No se puede rebasar."
 
-#: builtin/rebase.c:1547
+#: builtin/rebase.c:1571
 msgid ""
 "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
 msgstr ""
 "git rebase --preserve-merges está deprecado. Use --rebase-merges en su lugar."
 
-#: builtin/rebase.c:1551
-msgid "No rebase in progress?"
-msgstr "No hay rebase en progreso?"
+#: builtin/rebase.c:1576
+msgid "cannot combine '--keep-base' with '--onto'"
+msgstr "no se puede combinar '--keep-base' con '--onto'"
 
-#: builtin/rebase.c:1555
+#: builtin/rebase.c:1578
+msgid "cannot combine '--keep-base' with '--root'"
+msgstr "no se puede combinar '--keep-base' con '--root'"
+
+#: builtin/rebase.c:1582
+msgid "No rebase in progress?"
+msgstr "¿No hay rebase en progreso?"
+
+#: builtin/rebase.c:1586
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr ""
 "La acción --edit-todo sólo puede ser usada al rebasar interactivamente."
 
-#: builtin/rebase.c:1578
+#: builtin/rebase.c:1609
 msgid "Cannot read HEAD"
 msgstr "No se puede leer el HEAD"
 
-#: builtin/rebase.c:1590
+#: builtin/rebase.c:1621
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -17510,16 +17604,16 @@
 "Tienes que editar todos los conflictos de fusión y luego\n"
 "marcarlos como resueltos usando git add"
 
-#: builtin/rebase.c:1609
+#: builtin/rebase.c:1640
 msgid "could not discard worktree changes"
 msgstr "no se pudo descartar los cambios del árbol de trabajo"
 
-#: builtin/rebase.c:1628
+#: builtin/rebase.c:1659
 #, c-format
 msgid "could not move back to %s"
 msgstr "no se puede regresar a %s"
 
-#: builtin/rebase.c:1673
+#: builtin/rebase.c:1704
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -17540,167 +17634,159 @@
 "y ejecútame nuevamente. Me estoy deteniendo en caso de que tengas\n"
 "algo de valor ahí.\n"
 
-#: builtin/rebase.c:1694
+#: builtin/rebase.c:1725
 msgid "switch `C' expects a numerical value"
 msgstr "switch `C' espera un valor numérico"
 
-#: builtin/rebase.c:1735
+#: builtin/rebase.c:1766
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Modo desconocido: %s"
 
-#: builtin/rebase.c:1757
+#: builtin/rebase.c:1788
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy requiere --merge o --interactive"
 
-#: builtin/rebase.c:1797
+#: builtin/rebase.c:1828
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec requiere --exec o --interactive"
 
-#: builtin/rebase.c:1809
+#: builtin/rebase.c:1840
 msgid "cannot combine am options with either interactive or merge options"
 msgstr ""
 "no se pueden combinar opciones de am con opciones interactivas o de merge"
 
-#: builtin/rebase.c:1828
+#: builtin/rebase.c:1859
 msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
 msgstr "no se puede combinar '--preserve-merges' con '--rebase-merges'"
 
-#: builtin/rebase.c:1832
+#: builtin/rebase.c:1863
 msgid ""
 "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
 msgstr ""
 "error: no se puede combinar '--preserve-merges' con '--reschedule-failed-"
 "exec'"
 
-#: builtin/rebase.c:1838
-msgid "cannot combine '--rebase-merges' with '--strategy-option'"
-msgstr "no se puede combinar '--rebase-merges' con '--strategy-option'"
-
-#: builtin/rebase.c:1841
-msgid "cannot combine '--rebase-merges' with '--strategy'"
-msgstr "no se puede combinar '--rebase-merges' con '--strategy'"
-
-#: builtin/rebase.c:1865
+#: builtin/rebase.c:1887
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "upstream inválido '%s'"
 
-#: builtin/rebase.c:1871
+#: builtin/rebase.c:1893
 msgid "Could not create new root commit"
 msgstr "No se pudo crear commit raíz nuevo"
 
-#: builtin/rebase.c:1889
+#: builtin/rebase.c:1919
+#, c-format
+msgid "'%s': need exactly one merge base with branch"
+msgstr "'%s': necesita exactamente una base de fusión con rama"
+
+#: builtin/rebase.c:1922
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "'%s': necesita exactamente una base de fusión"
 
-#: builtin/rebase.c:1896
+#: builtin/rebase.c:1930
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "No apunta a un commit válido '%s'"
 
-#: builtin/rebase.c:1921
+#: builtin/rebase.c:1955
 #, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr "fatal: no existe la rama/commit: '%s'"
 
-#: builtin/rebase.c:1929 builtin/submodule--helper.c:38
+#: builtin/rebase.c:1963 builtin/submodule--helper.c:38
 #: builtin/submodule--helper.c:1934
 #, c-format
 msgid "No such ref: %s"
 msgstr "No existe ref: %s"
 
-#: builtin/rebase.c:1940
+#: builtin/rebase.c:1974
 msgid "Could not resolve HEAD to a revision"
 msgstr "No se pudo resolver HEAD a una revisión"
 
-#: builtin/rebase.c:1981
+#: builtin/rebase.c:2012
 msgid "Cannot autostash"
 msgstr "No se puede ejecutar autostash"
 
-#: builtin/rebase.c:1984
+#: builtin/rebase.c:2015
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Respuesta de stash inesperada: '%s'"
 
-#: builtin/rebase.c:1990
+#: builtin/rebase.c:2021
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "No se pudo crear el directorio para '%s'"
 
-#: builtin/rebase.c:1993
+#: builtin/rebase.c:2024
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Autostash creado: %s\n"
 
-#: builtin/rebase.c:1996
+#: builtin/rebase.c:2027
 msgid "could not reset --hard"
 msgstr "no se pudo reset --hard"
 
-#: builtin/rebase.c:1997 builtin/reset.c:114
-#, c-format
-msgid "HEAD is now at %s"
-msgstr "HEAD está ahora en %s"
-
-#: builtin/rebase.c:2013
+#: builtin/rebase.c:2036
 msgid "Please commit or stash them."
 msgstr "Por favor, confírmalos o guárdalos."
 
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:2063
 #, c-format
 msgid "could not parse '%s'"
 msgstr "no se puede analizar '%s'"
 
-#: builtin/rebase.c:2053
+#: builtin/rebase.c:2076
 #, c-format
 msgid "could not switch to %s"
 msgstr "no se pudo cambiar a %s"
 
-#: builtin/rebase.c:2064
+#: builtin/rebase.c:2087
 msgid "HEAD is up to date."
 msgstr "HEAD está actualizado."
 
-#: builtin/rebase.c:2066
+#: builtin/rebase.c:2089
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "La rama actual %s está actualizada.\n"
 
-#: builtin/rebase.c:2074
+#: builtin/rebase.c:2097
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD está actualizado, rebase forzado."
 
-#: builtin/rebase.c:2076
+#: builtin/rebase.c:2099
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "Rama actual %s está actualizada, rebase forzado.\n"
 
-#: builtin/rebase.c:2084
+#: builtin/rebase.c:2107
 msgid "The pre-rebase hook refused to rebase."
 msgstr "El hook pre-rebase rechazó el rebase."
 
-#: builtin/rebase.c:2091
+#: builtin/rebase.c:2114
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Cambios a %s:\n"
 
-#: builtin/rebase.c:2094
+#: builtin/rebase.c:2117
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Cambios desde %s a %s:\n"
 
-#: builtin/rebase.c:2119
+#: builtin/rebase.c:2142
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 "En primer lugar, rebobinando HEAD para después reproducir tus cambios encima "
 "de ésta...\n"
 
-#: builtin/rebase.c:2128
+#: builtin/rebase.c:2151
 msgid "Could not detach HEAD"
 msgstr "No se puede desacoplar HEAD"
 
-#: builtin/rebase.c:2137
+#: builtin/rebase.c:2160
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Avance rápido de %s a %s.\n"
@@ -17709,7 +17795,7 @@
 msgid "git receive-pack <git-dir>"
 msgstr "git receive-pack <git-dir>"
 
-#: builtin/receive-pack.c:832
+#: builtin/receive-pack.c:830
 msgid ""
 "By default, updating the current branch in a non-bare repository\n"
 "is denied, because it will make the index and work tree inconsistent\n"
@@ -17735,14 +17821,14 @@
 "Puedes configurar la variable de configuración 'receive.denyCurrentBranch'\n"
 "\"ignore\" o \"warn\" en el repositorio remoto para permitir\n"
 "su rama actual; Sin embargo, esto no se recomienda a menos que tú\n"
-"te hayas organizado para actualizar su árbol de trabajo para que coincida con "
-"lo que\n"
+"te hayas organizado para actualizar su árbol de trabajo para que coincida "
+"con lo que\n"
 "enviarás con el push de otra manera.\n"
 "\n"
 "Para suprimir este mensaje y mantener el comportamiento predeterminado,\n"
 "configura 'receive.denyCurrentBranch' a 'refuse'."
 
-#: builtin/receive-pack.c:852
+#: builtin/receive-pack.c:850
 msgid ""
 "By default, deleting the current branch is denied, because the next\n"
 "'git clone' won't result in any file checked out, causing confusion.\n"
@@ -17763,11 +17849,11 @@
 "\n"
 "Para suprimir este mensaje, puedes configurarlo en 'refuse'."
 
-#: builtin/receive-pack.c:1938
+#: builtin/receive-pack.c:1936
 msgid "quiet"
 msgstr "tranquilo"
 
-#: builtin/receive-pack.c:1952
+#: builtin/receive-pack.c:1950
 msgid "You must specify a directory."
 msgstr "Se tiene que especificar un directorio."
 
@@ -17806,7 +17892,7 @@
 #: builtin/reflog.c:643
 #, c-format
 msgid "%s points nowhere!"
-msgstr "%s apunta a ningún lado!"
+msgstr "¡%s apunta a ningún lado!"
 
 #: builtin/reflog.c:695
 msgid "no reflog specified to delete"
@@ -18032,11 +18118,11 @@
 "Note: Some branches outside the refs/remotes/ hierarchy were not removed;\n"
 "to delete them, use:"
 msgstr[0] ""
-"Nota: Una rama fuera de la jerarquía refs/remotes/ no fue removida;\n"
+"Nota: Una rama fuera de la jerarquía refs/remotes/ no fue eliminada;\n"
 "para borrarla, use:"
 msgstr[1] ""
 "Nota: Algunas ramas fuera de la jerarquía refs/remotes/ no fueron "
-"removidas;\n"
+"eliminadas;\n"
 "para borrarlas, use:"
 
 #: builtin/remote.c:816
@@ -18245,12 +18331,12 @@
 #: builtin/remote.c:1299
 #, c-format
 msgid " %s will become dangling!"
-msgstr " %s será colgado!"
+msgstr " ¡%s será colgado!"
 
 #: builtin/remote.c:1300
 #, c-format
 msgid " %s has become dangling!"
-msgstr " %s ha sido colgado!"
+msgstr " ¡%s ha sido colgado!"
 
 #: builtin/remote.c:1310
 #, c-format
@@ -18341,11 +18427,11 @@
 msgid "Unknown subcommand: %s"
 msgstr "Sub-comando desconocido: %s"
 
-#: builtin/repack.c:22
+#: builtin/repack.c:23
 msgid "git repack [<options>]"
 msgstr "git repack [<opciones>]"
 
-#: builtin/repack.c:27
+#: builtin/repack.c:28
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -18353,115 +18439,115 @@
 "Re empaquetados incrementales son incompatibles con índices bitmap. Use \n"
 "--no-write-bitmap-index o deshabilite la configuración pack.writebitmaps."
 
-#: builtin/repack.c:190
+#: builtin/repack.c:191
 msgid "could not start pack-objects to repack promisor objects"
 msgstr "no se puede iniciar pack-objects para reempaquetar objetos promisores"
 
-#: builtin/repack.c:229 builtin/repack.c:408
+#: builtin/repack.c:230 builtin/repack.c:409
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 "repack: Esperando líneas de ID de objeto en full hex solo desde pack-objects."
 
-#: builtin/repack.c:246
+#: builtin/repack.c:247
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr ""
 "no se puede finalizar pack-objects para reempaquetar objetos promisores"
 
-#: builtin/repack.c:284
+#: builtin/repack.c:285
 msgid "pack everything in a single pack"
 msgstr "empaquetar todo en un único paquete"
 
-#: builtin/repack.c:286
+#: builtin/repack.c:287
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "lo mismo que -a, y pierde objetos inaccesibles"
 
-#: builtin/repack.c:289
+#: builtin/repack.c:290
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "eliminar paquetes redundantes, y ejecutar git-prune-packed"
 
-#: builtin/repack.c:291
+#: builtin/repack.c:292
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "pasar --no-reuse-delta a git-pack-objects"
 
-#: builtin/repack.c:293
+#: builtin/repack.c:294
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "pasar --no-reuse-object a git-pack-objects"
 
-#: builtin/repack.c:295
+#: builtin/repack.c:296
 msgid "do not run git-update-server-info"
 msgstr "no ejecutar git-update-server-info"
 
-#: builtin/repack.c:298
+#: builtin/repack.c:299
 msgid "pass --local to git-pack-objects"
 msgstr "pasar --local a git-pack-objects"
 
-#: builtin/repack.c:300
+#: builtin/repack.c:301
 msgid "write bitmap index"
 msgstr "escribir un índice de bitmap"
 
-#: builtin/repack.c:302
+#: builtin/repack.c:303
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "pasar --delta-islands a git-pack-objects"
 
-#: builtin/repack.c:303
+#: builtin/repack.c:304
 msgid "approxidate"
 msgstr "aproxime"
 
-#: builtin/repack.c:304
+#: builtin/repack.c:305
 msgid "with -A, do not loosen objects older than this"
 msgstr "con -A, no perder objetos más antiguos que este"
 
-#: builtin/repack.c:306
+#: builtin/repack.c:307
 msgid "with -a, repack unreachable objects"
 msgstr "con -a, re empaquetar objetos inalcanzables"
 
-#: builtin/repack.c:308
+#: builtin/repack.c:309
 msgid "size of the window used for delta compression"
 msgstr "tamaño de la ventana usado para la compresión delta"
 
-#: builtin/repack.c:309 builtin/repack.c:315
+#: builtin/repack.c:310 builtin/repack.c:316
 msgid "bytes"
 msgstr "bytes"
 
-#: builtin/repack.c:310
+#: builtin/repack.c:311
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr ""
 "lo mismo que arriba, pero limita el tamaño de memoria en lugar de contar "
 "entradas"
 
-#: builtin/repack.c:312
+#: builtin/repack.c:313
 msgid "limits the maximum delta depth"
 msgstr "limita la profundidad máxima del delta"
 
-#: builtin/repack.c:314
+#: builtin/repack.c:315
 msgid "limits the maximum number of threads"
 msgstr "limita el número máximo de hilos"
 
-#: builtin/repack.c:316
+#: builtin/repack.c:317
 msgid "maximum size of each packfile"
 msgstr "tamaño máximo de cada paquete"
 
-#: builtin/repack.c:318
+#: builtin/repack.c:319
 msgid "repack objects in packs marked with .keep"
 msgstr "re-empaquetar objetos en paquetes marcados con .keep"
 
-#: builtin/repack.c:320
+#: builtin/repack.c:321
 msgid "do not repack this pack"
 msgstr "no reempaquetar este paquete"
 
-#: builtin/repack.c:330
+#: builtin/repack.c:331
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "no se pueden borrar paquetes en un repositorio de objetos-preciosos"
 
-#: builtin/repack.c:334
+#: builtin/repack.c:335
 msgid "--keep-unreachable and -A are incompatible"
 msgstr "--keep-unreachable y -A son incompatibles"
 
-#: builtin/repack.c:417
+#: builtin/repack.c:418
 msgid "Nothing new to pack."
 msgstr "Nada nuevo para empaquetar."
 
-#: builtin/repack.c:478
+#: builtin/repack.c:479
 #, c-format
 msgid ""
 "WARNING: Some packs in use have been renamed by\n"
@@ -18480,7 +18566,7 @@
 "WARNING: también falló.\n"
 "WARNING: Por favor renombralos en %s manualmente:\n"
 
-#: builtin/repack.c:526
+#: builtin/repack.c:527
 #, c-format
 msgid "failed to remove '%s'"
 msgstr "falló al eliminar'%s'"
@@ -18588,8 +18674,8 @@
 msgid "unable to write object to database"
 msgstr "incapaz de escribir el objeto en la base de datos"
 
-#: builtin/replace.c:322 builtin/replace.c:377 builtin/replace.c:422
-#: builtin/replace.c:452
+#: builtin/replace.c:322 builtin/replace.c:378 builtin/replace.c:423
+#: builtin/replace.c:453
 #, c-format
 msgid "not a valid object name: '%s'"
 msgstr "nombre de objeto no válido: '%s'"
@@ -18608,22 +18694,22 @@
 msgid "new object is the same as the old one: '%s'"
 msgstr "nuevo objeto es igual al antiguo: '%s'"
 
-#: builtin/replace.c:383
+#: builtin/replace.c:384
 #, c-format
 msgid "could not parse %s as a commit"
 msgstr "no se pudo analizar %s como un commit"
 
-#: builtin/replace.c:414
+#: builtin/replace.c:415
 #, c-format
 msgid "bad mergetag in commit '%s'"
 msgstr "mal mergetag en commit '%s'"
 
-#: builtin/replace.c:416
+#: builtin/replace.c:417
 #, c-format
 msgid "malformed mergetag in commit '%s'"
 msgstr "mergetag mal formado en commit '%s'"
 
-#: builtin/replace.c:428
+#: builtin/replace.c:429
 #, c-format
 msgid ""
 "original commit '%s' contains mergetag '%s' that is discarded; use --edit "
@@ -18632,31 +18718,31 @@
 "commit original '%s' contiene un mergetag '%s' que es descartado; use --edit "
 "en lugar de --graft"
 
-#: builtin/replace.c:467
+#: builtin/replace.c:468
 #, c-format
 msgid "the original commit '%s' has a gpg signature"
 msgstr "el commit original '%s' tiene una firma gpg"
 
-#: builtin/replace.c:468
+#: builtin/replace.c:469
 msgid "the signature will be removed in the replacement commit!"
-msgstr "la firma será removida en el commit de reemplazo!"
+msgstr "la firma será eliminada en el commit de reemplazo!"
 
-#: builtin/replace.c:478
+#: builtin/replace.c:479
 #, c-format
 msgid "could not write replacement commit for: '%s'"
 msgstr "no se pudo escribir el commit de reemplazo: '%s'"
 
-#: builtin/replace.c:486
+#: builtin/replace.c:487
 #, c-format
 msgid "graft for '%s' unnecessary"
 msgstr "graft para '%s' innecesario"
 
-#: builtin/replace.c:490
+#: builtin/replace.c:491
 #, c-format
 msgid "new commit is the same as the old one: '%s'"
 msgstr "nuevo commit es le mismo que el antiguo: '%s'"
 
-#: builtin/replace.c:525
+#: builtin/replace.c:526
 #, c-format
 msgid ""
 "could not convert the following graft(s):\n"
@@ -18665,71 +18751,71 @@
 "no se pudo convertir el siguiente graft(s):\n"
 "%s"
 
-#: builtin/replace.c:546
+#: builtin/replace.c:547
 msgid "list replace refs"
 msgstr "listar replace refs"
 
-#: builtin/replace.c:547
+#: builtin/replace.c:548
 msgid "delete replace refs"
 msgstr "borrar replace refs"
 
-#: builtin/replace.c:548
+#: builtin/replace.c:549
 msgid "edit existing object"
 msgstr "editar objeto existente"
 
-#: builtin/replace.c:549
+#: builtin/replace.c:550
 msgid "change a commit's parents"
 msgstr "cambiar un padre de commit"
 
-#: builtin/replace.c:550
+#: builtin/replace.c:551
 msgid "convert existing graft file"
 msgstr "convertir archivo graft existente"
 
-#: builtin/replace.c:551
+#: builtin/replace.c:552
 msgid "replace the ref if it exists"
 msgstr "reemplazar el ref si este existe"
 
-#: builtin/replace.c:553
+#: builtin/replace.c:554
 msgid "do not pretty-print contents for --edit"
 msgstr "no se puede imprimir contenidos para --edit"
 
-#: builtin/replace.c:554
+#: builtin/replace.c:555
 msgid "use this format"
 msgstr "usar este formato"
 
-#: builtin/replace.c:567
+#: builtin/replace.c:568
 msgid "--format cannot be used when not listing"
 msgstr "--format no puede ser usado cuando no se hace listing"
 
-#: builtin/replace.c:575
+#: builtin/replace.c:576
 msgid "-f only makes sense when writing a replacement"
 msgstr "-f solo tiene sentido cuando se escribe un reemplazo"
 
-#: builtin/replace.c:579
+#: builtin/replace.c:580
 msgid "--raw only makes sense with --edit"
 msgstr "--raw solo tiene sentido con --edit"
 
-#: builtin/replace.c:585
+#: builtin/replace.c:586
 msgid "-d needs at least one argument"
 msgstr "-d necesita al menos un argumento"
 
-#: builtin/replace.c:591
+#: builtin/replace.c:592
 msgid "bad number of arguments"
 msgstr "mal número de argumentos"
 
-#: builtin/replace.c:597
+#: builtin/replace.c:598
 msgid "-e needs exactly one argument"
 msgstr "-e necesita exactamente un argumento"
 
-#: builtin/replace.c:603
+#: builtin/replace.c:604
 msgid "-g needs at least one argument"
 msgstr "-g necesita al menos un argumento"
 
-#: builtin/replace.c:609
+#: builtin/replace.c:610
 msgid "--convert-graft-file takes no argument"
 msgstr "--convert-graft-file no toma argumentos"
 
-#: builtin/replace.c:615
+#: builtin/replace.c:616
 msgid "only one pattern can be given with -l"
 msgstr "solo se puede dar un patrón con -l"
 
@@ -18797,13 +18883,18 @@
 msgid "Failed to find tree of %s."
 msgstr "Falló al encontrar árbol de %s."
 
+#: builtin/reset.c:114
+#, c-format
+msgid "HEAD is now at %s"
+msgstr "HEAD está ahora en %s"
+
 #: builtin/reset.c:193
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "No se puede realziar un reset %s  en medio de una fusión."
 
-#: builtin/reset.c:293 builtin/stash.c:514 builtin/stash.c:589
-#: builtin/stash.c:613
+#: builtin/reset.c:293 builtin/stash.c:520 builtin/stash.c:595
+#: builtin/stash.c:619
 msgid "be quiet, only report errors"
 msgstr "ser silencioso, solo reportar errores"
 
@@ -18826,7 +18917,7 @@
 #: builtin/reset.c:308
 msgid "record only the fact that removed paths will be added later"
 msgstr ""
-"grabar solo el hecho de que las rutas removidas serán agregadas después"
+"grabar solo el hecho de que las rutas eliminadas serán agregadas después"
 
 #: builtin/reset.c:326
 #, c-format
@@ -18888,24 +18979,19 @@
 msgid "Could not write new index file."
 msgstr "No se puede escribir un nuevo archivo índice."
 
-#: builtin/rev-list.c:412
+#: builtin/rev-list.c:411
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr "no se puede combinar --exclude-promisor-objects y --missing"
 
-#: builtin/rev-list.c:473
+#: builtin/rev-list.c:472
 msgid "object filtering requires --objects"
 msgstr "filtrado de objetos requiere --objects"
 
-#: builtin/rev-list.c:476
-#, c-format
-msgid "invalid sparse value '%s'"
-msgstr "valor disperso inválido: '%s'"
-
-#: builtin/rev-list.c:527
+#: builtin/rev-list.c:522
 msgid "rev-list does not support display of notes"
 msgstr "rev-list no soporta mostrar notas"
 
-#: builtin/rev-list.c:530
+#: builtin/rev-list.c:525
 msgid "cannot combine --use-bitmap-index with object filtering"
 msgstr "no se puede combinar --use-bitmap-index con objetos de filtrado"
 
@@ -19101,7 +19187,7 @@
 #: builtin/rm.c:307
 #, c-format
 msgid "not removing '%s' recursively without -r"
-msgstr "no removiendo '%s' de manera recursiva sin -r"
+msgstr "no eliminando '%s' de manera recursiva sin -r"
 
 #: builtin/rm.c:346
 #, c-format
@@ -19445,134 +19531,134 @@
 msgid "could not save index tree"
 msgstr "no se puede guardar el índice del árbol"
 
-#: builtin/stash.c:434
+#: builtin/stash.c:436
 msgid "could not restore untracked files from stash"
 msgstr "no se pueden restaurar archivos no rastreados de la entrada stash"
 
-#: builtin/stash.c:448
+#: builtin/stash.c:450
 #, c-format
 msgid "Merging %s with %s"
 msgstr "Fusionando %s con %s"
 
-#: builtin/stash.c:458 git-legacy-stash.sh:680
+#: builtin/stash.c:460 git-legacy-stash.sh:680
 msgid "Index was not unstashed."
 msgstr "El índice no fue sacado de stash."
 
-#: builtin/stash.c:516 builtin/stash.c:615
+#: builtin/stash.c:522 builtin/stash.c:621
 msgid "attempt to recreate the index"
 msgstr "intento de recrear el index"
 
-#: builtin/stash.c:549
+#: builtin/stash.c:555
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "Botado %s (%s)"
 
-#: builtin/stash.c:552
+#: builtin/stash.c:558
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s: No se pudo borrar entrada stash"
 
-#: builtin/stash.c:577
+#: builtin/stash.c:583
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "'%s' no es una referencia stash"
 
-#: builtin/stash.c:627 git-legacy-stash.sh:694
+#: builtin/stash.c:633 git-legacy-stash.sh:694
 msgid "The stash entry is kept in case you need it again."
 msgstr "La entrada de stash se guardó en caso de ser necesario nuevamente."
 
-#: builtin/stash.c:650 git-legacy-stash.sh:712
+#: builtin/stash.c:656 git-legacy-stash.sh:712
 msgid "No branch name specified"
 msgstr "No se especificó el nombre de la rama"
 
-#: builtin/stash.c:790 builtin/stash.c:827
+#: builtin/stash.c:796 builtin/stash.c:833
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "No se puede actualizar %s con %s"
 
-#: builtin/stash.c:808 builtin/stash.c:1461 builtin/stash.c:1497
+#: builtin/stash.c:814 builtin/stash.c:1470 builtin/stash.c:1506
 msgid "stash message"
 msgstr "mensaje de stash"
 
-#: builtin/stash.c:818
+#: builtin/stash.c:824
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" requiere un argumento <commit>"
 
-#: builtin/stash.c:1040 git-legacy-stash.sh:217
+#: builtin/stash.c:1046 git-legacy-stash.sh:217
 msgid "No changes selected"
 msgstr "Sin cambios seleccionados"
 
-#: builtin/stash.c:1136 git-legacy-stash.sh:150
+#: builtin/stash.c:1145 git-legacy-stash.sh:150
 msgid "You do not have the initial commit yet"
 msgstr "Aún no tienes un commit inicial"
 
-#: builtin/stash.c:1163 git-legacy-stash.sh:165
+#: builtin/stash.c:1172 git-legacy-stash.sh:165
 msgid "Cannot save the current index state"
 msgstr "No se puede guardar el estado actual del índice"
 
-#: builtin/stash.c:1172 git-legacy-stash.sh:180
+#: builtin/stash.c:1181 git-legacy-stash.sh:180
 msgid "Cannot save the untracked files"
 msgstr "No se pueden guardar los archivos no rastreados"
 
-#: builtin/stash.c:1183 builtin/stash.c:1192 git-legacy-stash.sh:200
+#: builtin/stash.c:1192 builtin/stash.c:1201 git-legacy-stash.sh:200
 #: git-legacy-stash.sh:213
 msgid "Cannot save the current worktree state"
 msgstr "No se puede guardar el estado actual del árbol de trabajo"
 
-#: builtin/stash.c:1220 git-legacy-stash.sh:233
+#: builtin/stash.c:1229 git-legacy-stash.sh:233
 msgid "Cannot record working tree state"
 msgstr "No se puede grabar el estado del árbol de trabajo"
 
-#: builtin/stash.c:1269 git-legacy-stash.sh:337
+#: builtin/stash.c:1278 git-legacy-stash.sh:337
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr "No se puede usar --patch y --include-untracked o --all al mismo tiempo"
 
-#: builtin/stash.c:1285
+#: builtin/stash.c:1294
 msgid "Did you forget to 'git add'?"
-msgstr "Olvidaste 'git add'?"
+msgstr "¿Olvidaste 'git add'?"
 
-#: builtin/stash.c:1300 git-legacy-stash.sh:345
+#: builtin/stash.c:1309 git-legacy-stash.sh:345
 msgid "No local changes to save"
 msgstr "No hay cambios locales para guardar"
 
-#: builtin/stash.c:1307 git-legacy-stash.sh:350
+#: builtin/stash.c:1316 git-legacy-stash.sh:350
 msgid "Cannot initialize stash"
 msgstr "No se puede inicializar stash"
 
-#: builtin/stash.c:1322 git-legacy-stash.sh:354
+#: builtin/stash.c:1331 git-legacy-stash.sh:354
 msgid "Cannot save the current status"
 msgstr "No se puede guardar el estado actual"
 
-#: builtin/stash.c:1327
+#: builtin/stash.c:1336
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Directorio de trabajo guardado y estado de índice %s"
 
-#: builtin/stash.c:1417 git-legacy-stash.sh:384
+#: builtin/stash.c:1426 git-legacy-stash.sh:384
 msgid "Cannot remove worktree changes"
 msgstr "No se pueden eliminar cambios del árbol de trabajo"
 
-#: builtin/stash.c:1452 builtin/stash.c:1488
+#: builtin/stash.c:1461 builtin/stash.c:1497
 msgid "keep index"
 msgstr "mantener index"
 
-#: builtin/stash.c:1454 builtin/stash.c:1490
+#: builtin/stash.c:1463 builtin/stash.c:1499
 msgid "stash in patch mode"
 msgstr "stash en modo patch"
 
-#: builtin/stash.c:1455 builtin/stash.c:1491
+#: builtin/stash.c:1464 builtin/stash.c:1500
 msgid "quiet mode"
 msgstr "modo tranquilo"
 
-#: builtin/stash.c:1457 builtin/stash.c:1493
+#: builtin/stash.c:1466 builtin/stash.c:1502
 msgid "include untracked files in stash"
 msgstr "incluir archivos sin seguimiento en stash"
 
-#: builtin/stash.c:1459 builtin/stash.c:1495
+#: builtin/stash.c:1468 builtin/stash.c:1504
 msgid "include ignore files"
 msgstr "incluir archivos ignorados"
 
-#: builtin/stash.c:1555
+#: builtin/stash.c:1564
 #, c-format
 msgid "could not exec %s"
 msgstr "no se pudo ejecutar %s"
@@ -19895,7 +19981,7 @@
 
 #: builtin/submodule--helper.c:1575
 msgid "Maybe you want to use 'update --init'?"
-msgstr "Tal vez quieres usar 'update --init'?"
+msgstr "¿Tal vez quieres usar 'update --init'?"
 
 #: builtin/submodule--helper.c:1605
 #, c-format
@@ -19947,8 +20033,8 @@
 msgstr "no mostrar el progreso de clonado"
 
 #: builtin/submodule--helper.c:1877
-msgid "git submodule--helper update_clone [--prefix=<path>] [<path>...]"
-msgstr "git submodule--helper update_clone [--prefix=<ruta>] [<ruta>...]"
+msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
+msgstr "git submodule--helper update-clone [--prefix=<ruta>] [<ruta>...]"
 
 #: builtin/submodule--helper.c:1890
 msgid "bad value for update parameter"
@@ -20002,7 +20088,7 @@
 msgstr ""
 "por favor asegúrate que el archivo .gitmodules está en el árbol de trabajo"
 
-#: builtin/submodule--helper.c:2235 git.c:434 git.c:684
+#: builtin/submodule--helper.c:2235 git.c:433 git.c:683
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s no soporta --super-prefix"
@@ -20325,143 +20411,143 @@
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<opciones>] [--] [<archivo>...]"
 
-#: builtin/update-index.c:971
+#: builtin/update-index.c:972
 msgid "continue refresh even when index needs update"
 msgstr ""
 "continuar refresh (Actualización) incluso cuando el índice necesita "
 "actualización"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:975
 msgid "refresh: ignore submodules"
 msgstr "refresh: ignora submódulos"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:978
 msgid "do not ignore new files"
 msgstr "no ignorar archivos nuevos"
 
-#: builtin/update-index.c:979
+#: builtin/update-index.c:980
 msgid "let files replace directories and vice-versa"
 msgstr "permitir que archivos remplacen directorios y vice-versa"
 
-#: builtin/update-index.c:981
+#: builtin/update-index.c:982
 msgid "notice files missing from worktree"
 msgstr "avisar de archivos faltando en el árbol de trabajo"
 
-#: builtin/update-index.c:983
+#: builtin/update-index.c:984
 msgid "refresh even if index contains unmerged entries"
 msgstr "ejecutar refresh incluso si el índice contiene entradas sin cambios"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:987
 msgid "refresh stat information"
 msgstr "refresh información de estado"
 
-#: builtin/update-index.c:990
+#: builtin/update-index.c:991
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "como --refresh, pero ignora configuración assume-unchanged"
 
-#: builtin/update-index.c:994
+#: builtin/update-index.c:995
 msgid "<mode>,<object>,<path>"
 msgstr "<modo>,<objeto>,<ruta>"
 
-#: builtin/update-index.c:995
+#: builtin/update-index.c:996
 msgid "add the specified entry to the index"
 msgstr "agregar la entrada especificada al índice"
 
-#: builtin/update-index.c:1005
+#: builtin/update-index.c:1006
 msgid "mark files as \"not changing\""
 msgstr "marcar archivos como \"not changing\""
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1009
 msgid "clear assumed-unchanged bit"
 msgstr "limpiar bit assumed-unchanged"
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1012
 msgid "mark files as \"index-only\""
 msgstr "marcar archivos como \"index-only\""
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1015
 msgid "clear skip-worktree bit"
 msgstr "limpiar bit skip-worktree"
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1018
 msgid "add to index only; do not add content to object database"
 msgstr ""
 "agregar solo al índice; no agregar contenido a la base de datos de objetos"
 
-#: builtin/update-index.c:1019
+#: builtin/update-index.c:1020
 msgid "remove named paths even if present in worktree"
 msgstr ""
 "eliminar rutas nombradas incluso si están presentes en el árbol de trabajo"
 
-#: builtin/update-index.c:1021
+#: builtin/update-index.c:1022
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "con --stdin: las líneas de entrada son terminadas con bytes nulos"
 
-#: builtin/update-index.c:1023
+#: builtin/update-index.c:1024
 msgid "read list of paths to be updated from standard input"
 msgstr "leer la lista de rutas para ser actualizada desde standard input"
 
-#: builtin/update-index.c:1027
+#: builtin/update-index.c:1028
 msgid "add entries from standard input to the index"
 msgstr "agregar entradas de standard input al índice"
 
-#: builtin/update-index.c:1031
+#: builtin/update-index.c:1032
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "repoblar stages #2 y #3 para las rutas listadas"
 
-#: builtin/update-index.c:1035
+#: builtin/update-index.c:1036
 msgid "only update entries that differ from HEAD"
 msgstr "solo actualizar entradas que difieren de HEAD"
 
-#: builtin/update-index.c:1039
+#: builtin/update-index.c:1040
 msgid "ignore files missing from worktree"
 msgstr "ignorar archivos faltantes en el árbol de trabajo"
 
-#: builtin/update-index.c:1042
+#: builtin/update-index.c:1043
 msgid "report actions to standard output"
 msgstr "reportar acciones por standard output"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1045
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(para porcelanas) olvidar conflictos sin resolver guardados"
 
-#: builtin/update-index.c:1048
+#: builtin/update-index.c:1049
 msgid "write index in this format"
 msgstr "escribir índice en este formato"
 
-#: builtin/update-index.c:1050
+#: builtin/update-index.c:1051
 msgid "enable or disable split index"
 msgstr "activar o desactivar índice dividido"
 
-#: builtin/update-index.c:1052
+#: builtin/update-index.c:1053
 msgid "enable/disable untracked cache"
 msgstr "habilitar o deshabilitar caché no rastreado"
 
-#: builtin/update-index.c:1054
+#: builtin/update-index.c:1055
 msgid "test if the filesystem supports untracked cache"
 msgstr "probar si el filesystem soporta caché no rastreado"
 
-#: builtin/update-index.c:1056
+#: builtin/update-index.c:1057
 msgid "enable untracked cache without testing the filesystem"
 msgstr "habilitar caché no rastreado sin probar el filesystem"
 
-#: builtin/update-index.c:1058
+#: builtin/update-index.c:1059
 msgid "write out the index even if is not flagged as changed"
 msgstr "escribir el índice incluso si no está marcado como cambiado"
 
-#: builtin/update-index.c:1060
+#: builtin/update-index.c:1061
 msgid "enable or disable file system monitor"
 msgstr "activar o desactivar monitor de sistema de archivos"
 
-#: builtin/update-index.c:1062
+#: builtin/update-index.c:1063
 msgid "mark files as fsmonitor valid"
 msgstr "marcar archivos como válidos para fsmonitor"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1066
 msgid "clear fsmonitor valid bit"
 msgstr "limpia el bit de validación fsmonitor"
 
-#: builtin/update-index.c:1168
+#: builtin/update-index.c:1169
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
@@ -20469,7 +20555,7 @@
 "core.splitIndex está configurado en false; remuévelo o cámbialo, si "
 "realmente quieres habilitar el índice partido"
 
-#: builtin/update-index.c:1177
+#: builtin/update-index.c:1178
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
@@ -20477,7 +20563,7 @@
 "core.splitIndex está configurado en true; remuévelo o cámbialo, si realmente "
 "quieres deshabilitar el índice partido"
 
-#: builtin/update-index.c:1188
+#: builtin/update-index.c:1190
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -20485,11 +20571,11 @@
 "core.untrackedCache está configurado en true; remuévelo o cámbialo, si "
 "realmente quieres deshabilitar el chaché no rastreado"
 
-#: builtin/update-index.c:1192
+#: builtin/update-index.c:1194
 msgid "Untracked cache disabled"
 msgstr "Caché no rastreado deshabilitado"
 
-#: builtin/update-index.c:1200
+#: builtin/update-index.c:1202
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -20497,29 +20583,29 @@
 "core.untrackedCache está configurado en false; remuévelo o cámbialo, si "
 "realmente quieres habilitar el caché no rastreado"
 
-#: builtin/update-index.c:1204
+#: builtin/update-index.c:1206
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "Caché no rastreado habilitado para '%s'"
 
-#: builtin/update-index.c:1212
+#: builtin/update-index.c:1214
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr ""
 "core.fsmonitor no está configurado; actívalo si realmente quieres habilitar "
 "fsmonitor"
 
-#: builtin/update-index.c:1216
+#: builtin/update-index.c:1218
 msgid "fsmonitor enabled"
 msgstr "fsmonitor activado"
 
-#: builtin/update-index.c:1219
+#: builtin/update-index.c:1221
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 "core.fsmonitor está configurado; remuévelo si realmente quieres deshabilitar "
 "el fsmonitor"
 
-#: builtin/update-index.c:1223
+#: builtin/update-index.c:1225
 msgid "fsmonitor disabled"
 msgstr "fsmonitor desactivado"
 
@@ -20613,55 +20699,55 @@
 msgid "print tag contents"
 msgstr "imprimir contenido del tag"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:17
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [<opciones>] <ruta> [<commit-ish>]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:18
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [<opciones>]"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:19
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [<opciones>] <ruta>"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:20
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move <worktree> <nueva-ruta>"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:21
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [<opciones>]"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:22
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<opciones>] <worktree>"
 
-#: builtin/worktree.c:24
+#: builtin/worktree.c:23
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <ruta>"
 
-#: builtin/worktree.c:61 builtin/worktree.c:899
+#: builtin/worktree.c:60 builtin/worktree.c:898
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "falló al borrar '%s'"
 
-#: builtin/worktree.c:80
+#: builtin/worktree.c:79
 #, c-format
 msgid "Removing worktrees/%s: not a valid directory"
 msgstr "Removiendo el worktrees/%s: no es un directorio válido"
 
-#: builtin/worktree.c:86
+#: builtin/worktree.c:85
 #, c-format
 msgid "Removing worktrees/%s: gitdir file does not exist"
 msgstr "Removiendo worktrees/%s: archivo gitdir no existe"
 
-#: builtin/worktree.c:91 builtin/worktree.c:100
+#: builtin/worktree.c:90 builtin/worktree.c:99
 #, c-format
 msgid "Removing worktrees/%s: unable to read gitdir file (%s)"
 msgstr "Removiendo worktrees/%s: no es posible leer el archivo gitdir (%s)"
 
-#: builtin/worktree.c:110
+#: builtin/worktree.c:109
 #, c-format
 msgid ""
 "Removing worktrees/%s: short read (expected %<PRIuMAX> bytes, read "
@@ -20670,36 +20756,36 @@
 "Removiendo árboles de trabajo/%s: lectura corta (se esperan %<PRIuMAX> "
 "bytes, %<PRIuMAX> leídos)"
 
-#: builtin/worktree.c:118
+#: builtin/worktree.c:117
 #, c-format
 msgid "Removing worktrees/%s: invalid gitdir file"
 msgstr "Removiendo worktrees/%s: archivo gitdir inválido"
 
-#: builtin/worktree.c:127
+#: builtin/worktree.c:126
 #, c-format
 msgid "Removing worktrees/%s: gitdir file points to non-existent location"
 msgstr ""
 "Removiendo worktrees/%s: archivo gitdir apunta a una ubicación no existente"
 
-#: builtin/worktree.c:166
+#: builtin/worktree.c:165
 msgid "report pruned working trees"
 msgstr "reporta árboles de trabajo recortados"
 
-#: builtin/worktree.c:168
+#: builtin/worktree.c:167
 msgid "expire working trees older than <time>"
 msgstr "expirar árboles de trabajo más viejos a <tiempo>"
 
-#: builtin/worktree.c:235
+#: builtin/worktree.c:234
 #, c-format
 msgid "'%s' already exists"
 msgstr "'%s' ya existe"
 
-#: builtin/worktree.c:252
+#: builtin/worktree.c:251
 #, c-format
 msgid "unable to re-add worktree '%s'"
 msgstr "no es posible volver a agregar el árbol '%s'"
 
-#: builtin/worktree.c:257
+#: builtin/worktree.c:256
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -20709,7 +20795,7 @@
 "usa 'add -f -f' para sobreescribir, o 'unlock' y 'prune' o 'remove' para "
 "limpiar"
 
-#: builtin/worktree.c:259
+#: builtin/worktree.c:258
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -20718,124 +20804,124 @@
 "'%s' es un árbol de trabajo faltante pero ya registrado;\n"
 "usa 'add -f' para sobreescribir, o 'prune' o 'remove' para limpiar"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:308
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "no se pudo crear directorio de '%s'"
 
-#: builtin/worktree.c:440 builtin/worktree.c:446
+#: builtin/worktree.c:439 builtin/worktree.c:445
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "Preparando árbol de trabajo (nueva rama '%s')"
 
-#: builtin/worktree.c:442
+#: builtin/worktree.c:441
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr "Preparando árbol de trabajo (reiniciando rama '%s'; estaba en %s)"
 
-#: builtin/worktree.c:451
+#: builtin/worktree.c:450
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "Preparando árbol de trabajo (haciendo checkout a '%s')"
 
-#: builtin/worktree.c:457
+#: builtin/worktree.c:456
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "Preparando árbol de trabajo (HEAD desacoplado %s)"
 
-#: builtin/worktree.c:498
+#: builtin/worktree.c:497
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr ""
 "hacer checkout a <rama> incluso si ya ha hecho checkout en otro árbol de "
 "trabajo"
 
-#: builtin/worktree.c:501
+#: builtin/worktree.c:500
 msgid "create a new branch"
 msgstr "crear una nueva rama"
 
-#: builtin/worktree.c:503
+#: builtin/worktree.c:502
 msgid "create or reset a branch"
 msgstr "crear o restablecer una rama"
 
-#: builtin/worktree.c:505
+#: builtin/worktree.c:504
 msgid "populate the new working tree"
 msgstr "popular el nuevo árbol de trabajo"
 
-#: builtin/worktree.c:506
+#: builtin/worktree.c:505
 msgid "keep the new working tree locked"
 msgstr "mantener el nuevo árbol de trabajo bloqueado"
 
-#: builtin/worktree.c:509
+#: builtin/worktree.c:508
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "configurando modo tracking (mirar git-branch(1))"
 
-#: builtin/worktree.c:512
+#: builtin/worktree.c:511
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr ""
 "intentar emparejar el nuevo nombre de rama con una rama de rastreo remoto"
 
-#: builtin/worktree.c:520
+#: builtin/worktree.c:519
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr "-b, -B, y --detach son mutuamente exclusivas"
 
-#: builtin/worktree.c:581
+#: builtin/worktree.c:580
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "--[no-]track solo puede ser usado si una nueva rama es creada"
 
-#: builtin/worktree.c:681
+#: builtin/worktree.c:680
 msgid "reason for locking"
 msgstr "razón para bloquear"
 
-#: builtin/worktree.c:693 builtin/worktree.c:726 builtin/worktree.c:800
-#: builtin/worktree.c:927
+#: builtin/worktree.c:692 builtin/worktree.c:725 builtin/worktree.c:799
+#: builtin/worktree.c:926
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "'%s' no es un árbol de trabajo"
 
-#: builtin/worktree.c:695 builtin/worktree.c:728
+#: builtin/worktree.c:694 builtin/worktree.c:727
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "El árbol de trabajo principal no puede ser bloqueado ni desbloqueado"
 
-#: builtin/worktree.c:700
+#: builtin/worktree.c:699
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "'%s' ya está bloqueado; razón: %s"
 
-#: builtin/worktree.c:702
+#: builtin/worktree.c:701
 #, c-format
 msgid "'%s' is already locked"
 msgstr "'%s' ya está bloqueado"
 
-#: builtin/worktree.c:730
+#: builtin/worktree.c:729
 #, c-format
 msgid "'%s' is not locked"
 msgstr "'%s' no está bloqueado"
 
-#: builtin/worktree.c:771
+#: builtin/worktree.c:770
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr ""
 "árboles de trabajo conteniendo submódulos no puede ser movidos o eliminado"
 
-#: builtin/worktree.c:779
+#: builtin/worktree.c:778
 msgid "force move even if worktree is dirty or locked"
 msgstr "forzar move incluso si el árbol de trabajo está sucio o bloqueado"
 
-#: builtin/worktree.c:802 builtin/worktree.c:929
+#: builtin/worktree.c:801 builtin/worktree.c:928
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "'%s' es un árbol de trabajo principal"
 
-#: builtin/worktree.c:807
+#: builtin/worktree.c:806
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "no se pudo descubrir el nombre de destino de '%s'"
 
-#: builtin/worktree.c:813
+#: builtin/worktree.c:812
 #, c-format
 msgid "target '%s' already exists"
 msgstr "el objetivo '%s' ya existe"
 
-#: builtin/worktree.c:821
+#: builtin/worktree.c:820
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -20844,7 +20930,7 @@
 "no se puede mover un árbol de trabajo bloqueado, motivo del bloqueo: %s\n"
 "use 'move -f -f' para sobreescribir o desbloquear primero"
 
-#: builtin/worktree.c:823
+#: builtin/worktree.c:822
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -20852,36 +20938,37 @@
 "no se puede mover un árbol de trabajo bloqueado;\n"
 "use 'move -f -f' para sobreescribir o desbloquear primero"
 
-#: builtin/worktree.c:826
+#: builtin/worktree.c:825
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "falló validación, no se puede mover el árbol de trabajo: %s"
 
-#: builtin/worktree.c:831
+#: builtin/worktree.c:830
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "falló al mover '%s' a '%s'"
 
-#: builtin/worktree.c:879
+#: builtin/worktree.c:878
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "falló al ejecutar 'git status' en '%s'"
 
-#: builtin/worktree.c:883
+#: builtin/worktree.c:882
 #, c-format
-msgid "'%s' is dirty, use --force to delete it"
-msgstr "'%s' está sucio, use --force para borrarlo"
+msgid "'%s' contains modified or untracked files, use --force to delete it"
+msgstr ""
+"'%s' contiene archivos no rastreados o modificados, use --force para borrarlo"
 
-#: builtin/worktree.c:888
+#: builtin/worktree.c:887
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "no se pudo ejecutar 'git status' en '%s', código %d"
 
-#: builtin/worktree.c:911
+#: builtin/worktree.c:910
 msgid "force removal even if worktree is dirty or locked"
 msgstr "forzar remoción incluso si el árbol de trabajo está sucio o bloqueado"
 
-#: builtin/worktree.c:934
+#: builtin/worktree.c:933
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -20890,7 +20977,7 @@
 "no se pueden eliminar árbol de trabajo bloqueado, razón del bloqueo: %s\n"
 "use 'remove -f -f' para sobreescribir o desbloquear primero"
 
-#: builtin/worktree.c:936
+#: builtin/worktree.c:935
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -20898,7 +20985,7 @@
 "no se pueden eliminar árbol de trabajo bloqueado;\n"
 "use 'remove -f -f' para sobreescribir o desbloquear primero"
 
-#: builtin/worktree.c:939
+#: builtin/worktree.c:938
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "falló validación, no se puede eliminar árbol de trabajo: %s"
@@ -20919,6 +21006,16 @@
 msgid "only useful for debugging"
 msgstr "sólo útil para depurar"
 
+#: fast-import.c:3118
+#, c-format
+msgid "Expected 'mark' command, got %s"
+msgstr "se esperaba comando 'mark', se obtuvo %s"
+
+#: fast-import.c:3123
+#, c-format
+msgid "Expected 'to' command, got %s"
+msgstr "se esperaba comando 'to', se obtuvo %s"
+
 #: credential-cache--daemon.c:223
 #, c-format
 msgid ""
@@ -21031,39 +21128,39 @@
 "alias '%s' cambia las variables de entorno.\n"
 "Puedes usar '!git' en el alias para hacer esto"
 
-#: git.c:377
+#: git.c:376
 #, c-format
 msgid "empty alias for %s"
 msgstr "alias vacío para %s"
 
-#: git.c:380
+#: git.c:379
 #, c-format
 msgid "recursive alias: %s"
 msgstr "alias recursivo: %s"
 
-#: git.c:460
+#: git.c:459
 msgid "write failure on standard output"
 msgstr "error de escritura en standard output"
 
-#: git.c:462
+#: git.c:461
 msgid "unknown write failure on standard output"
 msgstr "error desconocido de escritura en standard output"
 
-#: git.c:464
+#: git.c:463
 msgid "close failed on standard output"
 msgstr "cierre falló en standard output"
 
-#: git.c:793
+#: git.c:792
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr "bucle de alias detectado: expansión de '%s' no termina: %s"
 
-#: git.c:843
+#: git.c:842
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "no se puede manejar %s como un builtin"
 
-#: git.c:856
+#: git.c:855
 #, c-format
 msgid ""
 "usage: %s\n"
@@ -21074,12 +21171,12 @@
 "\n"
 "\n"
 
-#: git.c:876
+#: git.c:875
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr "expansión del alias '%s' falló; '%s' no es un comando de git\n"
 
-#: git.c:888
+#: git.c:887
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr "falló al ejecutar comando '%s': %s\n"
@@ -21097,32 +21194,32 @@
 msgid "Public key pinning not supported with cURL < 7.44.0"
 msgstr "Fijación de llave pública no es soportada con cURL < 7.44.0"
 
-#: http.c:876
+#: http.c:878
 msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
 msgstr "CURLSSLOPT_NO_REVOKE no soportado con cURL < 7.44.0"
 
-#: http.c:949
+#: http.c:951
 msgid "Protocol restrictions not supported with cURL < 7.19.4"
 msgstr "Restricción de protocolo no soportada con cURL < 7.19.4"
 
-#: http.c:1085
+#: http.c:1088
 #, c-format
 msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
 msgstr "Backend SSL no soportado '%s'. Backends SSL soportados:"
 
-#: http.c:1092
+#: http.c:1095
 #, c-format
 msgid "Could not set SSL backend to '%s': cURL was built without SSL backends"
 msgstr ""
 "No se pudo configurar backend SSL a '%s': cURL fue construido sin backends "
 "SSL"
 
-#: http.c:1096
+#: http.c:1099
 #, c-format
 msgid "Could not set SSL backend to '%s': already set"
 msgstr "No se pudo configurar backend SSL para '%s': ya configurado"
 
-#: http.c:1965
+#: http.c:1968
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -21133,131 +21230,131 @@
 "  preguntaba por: %s\n"
 "   redireccionamiento: %s"
 
-#: remote-curl.c:157
+#: remote-curl.c:166
 #, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr "quoting inválido en valor de push-option: '%s'"
 
-#: remote-curl.c:254
+#: remote-curl.c:263
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr "%sinfo/refs no es válido: ¿es este un repositorio git?"
 
-#: remote-curl.c:355
+#: remote-curl.c:364
 msgid "invalid server response; expected service, got flush packet"
 msgstr ""
 "respuesta de servidor inválida; se esperaba servicio, se obtuvo un flush "
 "packet"
 
-#: remote-curl.c:386
+#: remote-curl.c:395
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr "respuesta de servidor inválida; se obtuvo '%s'"
 
-#: remote-curl.c:446
+#: remote-curl.c:455
 #, c-format
 msgid "repository '%s' not found"
 msgstr "repositorio '%s' no encontrado"
 
-#: remote-curl.c:450
+#: remote-curl.c:459
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr "Autenticación falló para '%s'"
 
-#: remote-curl.c:454
+#: remote-curl.c:463
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "no es posible acceder '%s':%s"
 
-#: remote-curl.c:460
+#: remote-curl.c:469
 #, c-format
 msgid "redirecting to %s"
 msgstr "redirigiendo a %s"
 
-#: remote-curl.c:584
+#: remote-curl.c:593
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr "no debería tener EOF cuando no es gentil en EOF"
 
-#: remote-curl.c:664
+#: remote-curl.c:673
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr ""
 "no es posible rebobinar rpc post data - intenta incrementando http.postBuffer"
 
-#: remote-curl.c:724
+#: remote-curl.c:733
 #, c-format
 msgid "RPC failed; %s"
 msgstr "RPC falló; %s"
 
-#: remote-curl.c:764
+#: remote-curl.c:773
 msgid "cannot handle pushes this big"
 msgstr "no se puede manejar pushes tan grandes"
 
-#: remote-curl.c:879
+#: remote-curl.c:888
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr "no se puede desinflar el request; zlib deflate error %d"
 
-#: remote-curl.c:883
+#: remote-curl.c:892
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr "no se puede desinflar el request; zlib end error %d"
 
-#: remote-curl.c:1014
+#: remote-curl.c:1023
 msgid "dumb http transport does not support shallow capabilities"
 msgstr "dump http transport no soporta capacidades superficiales"
 
-#: remote-curl.c:1028
+#: remote-curl.c:1037
 msgid "fetch failed."
 msgstr "fetch falló."
 
-#: remote-curl.c:1076
+#: remote-curl.c:1085
 msgid "cannot fetch by sha1 over smart http"
 msgstr "no se puede hacer fetch por sha1 sobre smart http"
 
-#: remote-curl.c:1120 remote-curl.c:1126
+#: remote-curl.c:1129 remote-curl.c:1135
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr "error de protocolo: se esperaba sha/ref, se obtuvo '%s'"
 
-#: remote-curl.c:1138 remote-curl.c:1252
+#: remote-curl.c:1147 remote-curl.c:1261
 #, c-format
 msgid "http transport does not support %s"
 msgstr "http transport no soporta %s"
 
-#: remote-curl.c:1174
+#: remote-curl.c:1183
 msgid "git-http-push failed"
 msgstr "git-http-push falló"
 
-#: remote-curl.c:1360
+#: remote-curl.c:1367
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr "remote-curl: uso: git remote-curl <remote> [<url>]"
 
-#: remote-curl.c:1392
+#: remote-curl.c:1399
 msgid "remote-curl: error reading command stream from git"
 msgstr "remote-curl: error leyendo command stream de git"
 
-#: remote-curl.c:1399
+#: remote-curl.c:1406
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr "remote-curl: fetch intentado sin un repositorio local"
 
-#: remote-curl.c:1439
+#: remote-curl.c:1446
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr "remote-curl: comando '%s' desconocido de git"
 
-#: list-objects-filter-options.h:61
+#: list-objects-filter-options.h:85
 msgid "args"
 msgstr "args"
 
-#: list-objects-filter-options.h:62
+#: list-objects-filter-options.h:86
 msgid "object filtering"
 msgstr "filtrado de objeto"
 
-#: parse-options.h:170
+#: parse-options.h:179
 msgid "expiry-date"
 msgstr "fecha de expiración"
 
-#: parse-options.h:184
+#: parse-options.h:193
 msgid "no-op (backward compatibility)"
 msgstr "no-op (compatibilidad con versiones anteriores)"
 
@@ -22894,7 +22991,7 @@
 "---\n"
 "Para eliminar '%s' líneas, haga de ellas líneas  ' '  (contexto).\n"
 "Para eliminar '%s' líneas, bórrelas.\n"
-"Lineas comenzando con  %s serán removidas.\n"
+"Lineas comenzando con  %s serán eliminadas.\n"
 
 #. TRANSLATORS: 'it' refers to the patch mentioned in the previous messages.
 #: git-add--interactive.perl:1124
@@ -22904,7 +23001,7 @@
 "aborted and the hunk is left unchanged.\n"
 msgstr ""
 "Si esto no aplica de manera limpia, se te da la oportunidad de \n"
-"editar nuevamente. Si todas las líneas del hunk son removidas, entonces \n"
+"editar nuevamente. Si todas las líneas del hunk son eliminadas, entonces \n"
 "la edición es abortada y el hunk queda sin cambios.\n"
 
 #: git-add--interactive.perl:1138
@@ -22922,7 +23019,8 @@
 msgid ""
 "Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]? "
 msgstr ""
-"Tu hunk editado no aplica. Editar nuevamente (decir \"no\" descarta!) [y/n]? "
+"Tu hunk editado no aplica. ¿Editar nuevamente (¡decir \"no\" descarta!) [y/"
+"n]? "
 
 #: git-add--interactive.perl:1246
 msgid ""
@@ -23062,11 +23160,11 @@
 
 #: git-add--interactive.perl:1340
 msgid "The selected hunks do not apply to the index!\n"
-msgstr "Los hunks seleccionados no aplican al índice!\n"
+msgstr "¡Los hunks seleccionados no aplican al índice!\n"
 
 #: git-add--interactive.perl:1341
 msgid "Apply them to the worktree anyway? "
-msgstr "Aplicarlos al árbol de trabajo de todas maneras? "
+msgstr "¿Aplicarlos al árbol de trabajo de todas maneras? "
 
 #: git-add--interactive.perl:1344
 msgid "Nothing was applied.\n"
@@ -23092,124 +23190,126 @@
 #: git-add--interactive.perl:1426
 #, perl-format
 msgid "Stage mode change [y,n,q,a,d%s,?]? "
-msgstr "Cambio de modo de stage [y,n,q,a,d%s,?]? "
+msgstr "¿Cambio de modo de stage [y,n,q,a,d%s,?]? "
 
 #: git-add--interactive.perl:1427
 #, perl-format
 msgid "Stage deletion [y,n,q,a,d%s,?]? "
-msgstr "Aplicar stage al borrado [y,n,q,a,d%s,?]? "
+msgstr "¿Aplicar stage al borrado [y,n,q,a,d%s,?]? "
 
 #: git-add--interactive.perl:1428
 #, perl-format
 msgid "Stage this hunk [y,n,q,a,d%s,?]? "
-msgstr "Aplicar stage a este hunk [y,n,q,a,d%s,?]? "
+msgstr "¿Aplicar stage a este hunk [y,n,q,a,d%s,?]? "
 
 #: git-add--interactive.perl:1431
 #, perl-format
 msgid "Stash mode change [y,n,q,a,d%s,?]? "
-msgstr "Aplicar stash al cambio de modo [y,n,q,a,d%s,?]? "
+msgstr "¿Aplicar stash al cambio de modo [y,n,q,a,d%s,?]? "
 
 #: git-add--interactive.perl:1432
 #, perl-format
 msgid "Stash deletion [y,n,q,a,d%s,?]? "
-msgstr "Aplicar stash al borrado [y,n,q,a,d%s,?]? "
+msgstr "¿Aplicar stash al borrado [y,n,q,a,d%s,?]? "
 
 #: git-add--interactive.perl:1433
 #, perl-format
 msgid "Stash this hunk [y,n,q,a,d%s,?]? "
-msgstr "Aplicar stash a este hunk [y,n,q,a,d%s,?]? "
+msgstr "¿Aplicar stash a este hunk [y,n,q,a,d%s,?]? "
 
 #: git-add--interactive.perl:1436
 #, perl-format
 msgid "Unstage mode change [y,n,q,a,d%s,?]? "
-msgstr "Sacar cambio de modo del stage [y,n,q,a,d%s,?]? "
+msgstr "¿Sacar cambio de modo del stage [y,n,q,a,d%s,?]? "
 
 #: git-add--interactive.perl:1437
 #, perl-format
 msgid "Unstage deletion [y,n,q,a,d%s,?]? "
-msgstr "Sacar borrado del stage [y,n,q,a,d%s,?]? "
+msgstr "¿Sacar borrado del stage [y,n,q,a,d%s,?]? "
 
 #: git-add--interactive.perl:1438
 #, perl-format
 msgid "Unstage this hunk [y,n,q,a,d%s,?]? "
-msgstr "Sacar este hunk del stage [y,n,q,a,d%s,?]? "
+msgstr "¿Sacar este hunk del stage [y,n,q,a,d%s,?]? "
 
 #: git-add--interactive.perl:1441
 #, perl-format
 msgid "Apply mode change to index [y,n,q,a,d%s,?]? "
-msgstr "Aplicar cambio de modo al índice [y,n,q,a,d%s,?]? "
+msgstr "¿Aplicar cambio de modo al índice [y,n,q,a,d%s,?]? "
 
 #: git-add--interactive.perl:1442
 #, perl-format
 msgid "Apply deletion to index [y,n,q,a,d%s,?]? "
-msgstr "Aplicar borrado al índice [y,n,q,a,d%s,?]? "
+msgstr "¿Aplicar borrado al índice [y,n,q,a,d%s,?]? "
 
 #: git-add--interactive.perl:1443
 #, perl-format
 msgid "Apply this hunk to index [y,n,q,a,d%s,?]? "
-msgstr "Aplicar este hunk al índice [y,n,q,a,d%s,?]? "
+msgstr "¿Aplicar este hunk al índice [y,n,q,a,d%s,?]? "
 
 #: git-add--interactive.perl:1446 git-add--interactive.perl:1461
 #, perl-format
 msgid "Discard mode change from worktree [y,n,q,a,d%s,?]? "
-msgstr "Descartar cambio de modo del árbol de trabajo [y,n,q,a,d%s,?]? "
+msgstr "¿Descartar cambio de modo del árbol de trabajo [y,n,q,a,d%s,?]? "
 
 #: git-add--interactive.perl:1447 git-add--interactive.perl:1462
 #, perl-format
 msgid "Discard deletion from worktree [y,n,q,a,d%s,?]? "
-msgstr "Descartar borrado del árbol de trabajo [y,n,q,a,d%s,?]? "
+msgstr "¿Descartar borrado del árbol de trabajo [y,n,q,a,d%s,?]? "
 
 #: git-add--interactive.perl:1448 git-add--interactive.perl:1463
 #, perl-format
 msgid "Discard this hunk from worktree [y,n,q,a,d%s,?]? "
-msgstr "Descartar este hunk del árbol de trabajo [y,n,q,a,d%s,?]? "
+msgstr "¿Descartar este hunk del árbol de trabajo [y,n,q,a,d%s,?]? "
 
 #: git-add--interactive.perl:1451
 #, perl-format
 msgid "Discard mode change from index and worktree [y,n,q,a,d%s,?]? "
 msgstr ""
-"Descartar cambio de modo del índice y el árbol de trabajo [y,n,q,a,d%s,?]? "
+"¿Descartar cambio de modo del índice y el árbol de trabajo [y,n,q,a,d%s,?]? "
 
 #: git-add--interactive.perl:1452
 #, perl-format
 msgid "Discard deletion from index and worktree [y,n,q,a,d%s,?]? "
-msgstr "Descartar borrado del índice y el árbol de trabajo [y,n,q,a,d%s,?]? "
+msgstr "¿Descartar borrado del índice y el árbol de trabajo [y,n,q,a,d%s,?]? "
 
 #: git-add--interactive.perl:1453
 #, perl-format
 msgid "Discard this hunk from index and worktree [y,n,q,a,d%s,?]? "
-msgstr "Descartar este hunk del índice y el árbol de trabajo [y,n,q,a,d%s,?]? "
+msgstr ""
+"¿Descartar este hunk del índice y el árbol de trabajo [y,n,q,a,d%s,?]? "
 
 #: git-add--interactive.perl:1456
 #, perl-format
 msgid "Apply mode change to index and worktree [y,n,q,a,d%s,?]? "
 msgstr ""
-"Aplicar cambio de modo para el índice y el árbol de trabajo [y,n,q,a,d%s,?]? "
+"¿Aplicar cambio de modo para el índice y el árbol de trabajo [y,n,q,a,d"
+"%s,?]? "
 
 #: git-add--interactive.perl:1457
 #, perl-format
 msgid "Apply deletion to index and worktree [y,n,q,a,d%s,?]? "
-msgstr "Aplicar borrado al índice y al árbol de trabajo [y,n,q,a,d%s,?]? "
+msgstr "¿Aplicar borrado al índice y al árbol de trabajo [y,n,q,a,d%s,?]? "
 
 #: git-add--interactive.perl:1458
 #, perl-format
 msgid "Apply this hunk to index and worktree [y,n,q,a,d%s,?]? "
-msgstr "Aplicar este hunk al índice y árbol de trabajo [y,n,q,a,d,/%s,?]? "
+msgstr "¿Aplicar este hunk al índice y árbol de trabajo [y,n,q,a,d,/%s,?]? "
 
 #: git-add--interactive.perl:1466
 #, perl-format
 msgid "Apply mode change to worktree [y,n,q,a,d%s,?]? "
-msgstr "Aplicar cambio de modo para el árbol de trabajo [y,n,q,a,d%s,?]? "
+msgstr "¿Aplicar cambio de modo para el árbol de trabajo [y,n,q,a,d%s,?]? "
 
 #: git-add--interactive.perl:1467
 #, perl-format
 msgid "Apply deletion to worktree [y,n,q,a,d%s,?]? "
-msgstr "Aplicar borrado al árbol de trabajo [y,n,q,a,d%s,?]? "
+msgstr "¿Aplicar borrado al árbol de trabajo [y,n,q,a,d%s,?]? "
 
 #: git-add--interactive.perl:1468
 #, perl-format
 msgid "Apply this hunk to worktree [y,n,q,a,d%s,?]? "
-msgstr "Aplicar este hunk al árbol de trabajo [y,n,q,a,d,/%s,?]? "
+msgstr "¿Aplicar este hunk al árbol de trabajo [y,n,q,a,d,/%s,?]? "
 
 #: git-add--interactive.perl:1568
 msgid "No other hunks to goto\n"
@@ -23217,11 +23317,11 @@
 
 #: git-add--interactive.perl:1575
 msgid "go to which hunk (<ret> to see more)? "
-msgstr "a que hunk ir (<enter> para ver más)? "
+msgstr "¿a que hunk ir (<enter> para ver más)? "
 
 #: git-add--interactive.perl:1577
 msgid "go to which hunk? "
-msgstr "a que hunk ir? "
+msgstr "¿a que hunk ir? "
 
 #: git-add--interactive.perl:1586
 #, perl-format
@@ -23241,7 +23341,7 @@
 
 #: git-add--interactive.perl:1621
 msgid "search for regex? "
-msgstr "buscar para regexp? "
+msgstr "¿buscar para regexp? "
 
 #: git-add--interactive.perl:1634
 #, perl-format
@@ -23430,7 +23530,7 @@
 #: git-send-email.perl:718
 #, perl-format
 msgid "No subject line in %s?"
-msgstr "No hay línea de subject en %s?"
+msgstr "¿No hay línea de subject en %s?"
 
 #: git-send-email.perl:728
 #, perl-format
@@ -23445,7 +23545,7 @@
 "\n"
 "Clear the body content if you don't wish to send a summary.\n"
 msgstr ""
-"Lineas que comienzan en \"GIT:\" serán removidas.\n"
+"Lineas que comienzan en \"GIT:\" serán eliminadas.\n"
 "Considere incluir un diffstat global o una tabla de contenidos\n"
 "para el parche que estás escribiendo.\n"
 "\n"
@@ -23469,7 +23569,7 @@
 #: git-send-email.perl:858
 #, perl-format
 msgid "Are you sure you want to use <%s> [y/N]? "
-msgstr "Estás seguro de que deseas usar <%s> [y/N]? "
+msgstr "¿Estás seguro de que deseas usar <%s> [y/N]? "
 
 #: git-send-email.perl:913
 msgid ""
@@ -23481,7 +23581,7 @@
 
 #: git-send-email.perl:918
 msgid "Which 8bit encoding should I declare [UTF-8]? "
-msgstr "Que codificación de 8bit debería declarar [UTF-8]? "
+msgstr "¿Que codificación de 8bit debería declarar [UTF-8]? "
 
 #: git-send-email.perl:926
 #, perl-format
@@ -23498,7 +23598,7 @@
 
 #: git-send-email.perl:945
 msgid "To whom should the emails be sent (if anyone)?"
-msgstr "A quien se deben mandar los correos (si existe)?"
+msgstr "¿A quien se deben mandar los correos (si existe)?"
 
 #: git-send-email.perl:963
 #, perl-format
@@ -23508,7 +23608,7 @@
 #: git-send-email.perl:975
 msgid "Message-ID to be used as In-Reply-To for the first email (if any)? "
 msgstr ""
-"Qué id de mensaje será usado como En-Respuesta-Para en el primer email (si "
+"¿Qué id de mensaje será usado como En-Respuesta-Para en el primer email (si "
 "existe alguno)? "
 
 #: git-send-email.perl:1033 git-send-email.perl:1041
@@ -23521,7 +23621,7 @@
 #. at this point.
 #: git-send-email.perl:1045
 msgid "What to do with this address? ([q]uit|[d]rop|[e]dit): "
-msgstr "Que hacer con esta dirección? ([q]salir|[d]botar|[e]ditar): "
+msgstr "¿Que hacer con esta dirección? ([q]salir|[d]botar|[e]ditar): "
 
 #: git-send-email.perl:1362
 #, perl-format
@@ -23558,7 +23658,7 @@
 #. at this point.
 #: git-send-email.perl:1460
 msgid "Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): "
-msgstr "Mandar este email? ([y]si||[n]o|[e]editar|[q]salir|[a]todo): "
+msgstr "¿Mandar este email? ([y]si||[n]o|[e]editar|[q]salir|[a]todo): "
 
 #: git-send-email.perl:1463
 msgid "Send this email reply required"
@@ -23571,12 +23671,12 @@
 #: git-send-email.perl:1538
 #, perl-format
 msgid "Server does not support STARTTLS! %s"
-msgstr "El servidor no soporta STARTTLS! %s"
+msgstr "¡El servidor no soporta STARTTLS! %s"
 
 #: git-send-email.perl:1543 git-send-email.perl:1547
 #, perl-format
 msgid "STARTTLS failed! %s"
-msgstr "Falló STARTTLS! %s"
+msgstr "¡Falló STARTTLS! %s"
 
 #: git-send-email.perl:1556
 msgid "Unable to initialize SMTP properly. Check config and use --smtp-debug."
@@ -23682,7 +23782,45 @@
 #: git-send-email.perl:1978
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
-msgstr "Realmente deseas mandar %s?[y|N]: "
+msgstr "¿Realmente deseas mandar %s?[y|N]: "
+
+#~ msgid "unknown core.untrackedCache value '%s'; using 'keep' default value"
+#~ msgstr ""
+#~ "valor core.untrackedCache '%s' desconocido; usando 'keep' como valor por "
+#~ "defecto"
+
+#~ msgid "cannot change partial clone promisor remote"
+#~ msgstr "no se puede cambiar un clon parcial remoto promisor"
+
+#~ msgid "error building trees"
+#~ msgstr "error construyendo árboles"
+
+#~ msgid "invalid date format '%s' in '%s'"
+#~ msgstr "formato de fecha inválido '%s' en '%s'"
+
+#~ msgid "writing root commit"
+#~ msgstr "escribiendo commit raíz"
+
+#~ msgid "staged changes in the following files may be lost: %s"
+#~ msgstr ""
+#~ "cambios en el área de stage en el siguiente archivo pueden ser perdidos: "
+#~ "%s"
+
+#~ msgid ""
+#~ "--filter can only be used with the remote configured in extensions."
+#~ "partialClone"
+#~ msgstr ""
+#~ "--filter solo puede ser usado con el remoto configurado en extensions."
+#~ "partialClone"
+
+#~ msgid "verify commit-msg hook"
+#~ msgstr "verificar el hook commit-msg"
+
+#~ msgid "cannot combine '--rebase-merges' with '--strategy-option'"
+#~ msgstr "no se puede combinar '--rebase-merges' con '--strategy-option'"
+
+#~ msgid "invalid sparse value '%s'"
+#~ msgstr "valor disperso inválido: '%s'"
 
 #~ msgid "Server supports multi_ack_detailed"
 #~ msgstr "El servidor soporta ulti_ack_detailed"
diff --git a/po/fr.po b/po/fr.po
index 55c7db6..a89a5ed 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -75,8 +75,8 @@
 msgstr ""
 "Project-Id-Version: git\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2019-08-10 20:12+0800\n"
-"PO-Revision-Date: 2019-08-10 18:17+0200\n"
+"POT-Creation-Date: 2019-10-28 13:19+0800\n"
+"PO-Revision-Date: 2019-10-28 20:35+0100\n"
 "Last-Translator: Cédric Malard <c.malard-git@valdun.net>\n"
 "Language-Team: Jean-Noël Avila <jn.avila@free.fr>\n"
 "Language: fr\n"
@@ -128,7 +128,7 @@
 msgid "Exiting because of an unresolved conflict."
 msgstr "Abandon à cause de conflit non résolu."
 
-#: advice.c:193 builtin/merge.c:1327
+#: advice.c:193 builtin/merge.c:1332
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Vous n'avez pas terminé votre fusion (MERGE_HEAD existe)."
 
@@ -275,17 +275,7 @@
 msgid "inconsistent header lines %d and %d"
 msgstr "lignes d'entête inconsistantes %d et %d"
 
-#: apply.c:1460
-#, c-format
-msgid "recount: unexpected line: %.*s"
-msgstr "recomptage : ligne inattendue : %.*s"
-
-#: apply.c:1529
-#, c-format
-msgid "patch fragment without header at line %d: %.*s"
-msgstr "fragment de patch sans en-tête à la ligne %d : %.*s"
-
-#: apply.c:1551
+#: apply.c:1372
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -300,83 +290,93 @@
 "information de nom de fichier manquante dans l'en-tête de git diff lors de "
 "la suppression de %d composants de préfixe de chemin (ligne %d)"
 
-#: apply.c:1564
+#: apply.c:1385
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr ""
 "information de nom de fichier manquante dans l'en-tête de git diff (ligne %d)"
 
-#: apply.c:1752
+#: apply.c:1481
+#, c-format
+msgid "recount: unexpected line: %.*s"
+msgstr "recomptage : ligne inattendue : %.*s"
+
+#: apply.c:1550
+#, c-format
+msgid "patch fragment without header at line %d: %.*s"
+msgstr "fragment de patch sans en-tête à la ligne %d : %.*s"
+
+#: apply.c:1753
 msgid "new file depends on old contents"
 msgstr "le nouveau fichier dépend de contenus anciens"
 
-#: apply.c:1754
+#: apply.c:1755
 msgid "deleted file still has contents"
 msgstr "le fichier supprimé a encore du contenu"
 
-#: apply.c:1788
+#: apply.c:1789
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "patch corrompu à la ligne %d"
 
-#: apply.c:1825
+#: apply.c:1826
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "le nouveau fichier %s dépend de contenus anciens"
 
-#: apply.c:1827
+#: apply.c:1828
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "le fichier supprimé %s a encore du contenu"
 
-#: apply.c:1830
+#: apply.c:1831
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** attention : le fichier %s devient vide mais n'est pas supprimé"
 
-#: apply.c:1977
+#: apply.c:1978
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "patch binaire corrompu à la ligne %d : %.*s"
 
-#: apply.c:2014
+#: apply.c:2015
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "patch binaire non reconnu à la ligne %d"
 
-#: apply.c:2176
+#: apply.c:2177
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "patch totalement incompréhensible à la ligne %d"
 
-#: apply.c:2262
+#: apply.c:2263
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "lecture du lien symbolique %s impossible"
 
-#: apply.c:2266
+#: apply.c:2267
 #, c-format
 msgid "unable to open or read %s"
 msgstr "ouverture ou lecture de %s impossible"
 
-#: apply.c:2925
+#: apply.c:2926
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "début de ligne invalide : '%c'"
 
-#: apply.c:3046
+#: apply.c:3047
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "La section n°%d a réussi à la ligne %d (offset %d ligne)."
 msgstr[1] "La section n°%d a réussi à la ligne %d (offset %d lignes)."
 
-#: apply.c:3058
+#: apply.c:3059
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "Contexte réduit à (%ld/%ld) pour appliquer le fragment à la ligne %d"
 
-#: apply.c:3064
+#: apply.c:3065
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -385,463 +385,463 @@
 "pendant la recherche de :\n"
 "%.*s"
 
-#: apply.c:3086
+#: apply.c:3087
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "données de patch binaire manquantes pour '%s'"
 
-#: apply.c:3094
+#: apply.c:3095
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr ""
 "impossible d'appliquer l'inverse d'un patch binaire à '%s' sans la section "
 "inverse"
 
-#: apply.c:3141
+#: apply.c:3142
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr ""
 "impossible d'appliquer un patch binaire à '%s' sans la ligne complète d'index"
 
-#: apply.c:3151
+#: apply.c:3152
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr ""
 "le patch s'applique à '%s' (%s), ce qui ne correspond pas au contenu actuel."
 
-#: apply.c:3159
+#: apply.c:3160
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "le patch s'applique à un '%s' vide mais ce n'est pas vide"
 
-#: apply.c:3177
+#: apply.c:3178
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "l'image postérieure nécessaire %s pour '%s' ne peut pas être lue"
 
-#: apply.c:3190
+#: apply.c:3191
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "le patch binaire ne s'applique par correctement à '%s'"
 
-#: apply.c:3196
+#: apply.c:3197
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
 "le patch binaire sur '%s' crée un résultat incorrect (%s attendu, mais %s "
 "trouvé)"
 
-#: apply.c:3217
+#: apply.c:3218
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "le patch a échoué : %s:%ld"
 
-#: apply.c:3340
+#: apply.c:3341
 #, c-format
 msgid "cannot checkout %s"
 msgstr "extraction de %s impossible"
 
-#: apply.c:3392 apply.c:3403 apply.c:3449 midx.c:62 setup.c:279
+#: apply.c:3393 apply.c:3404 apply.c:3450 midx.c:61 setup.c:280
 #, c-format
 msgid "failed to read %s"
 msgstr "échec de la lecture de %s"
 
-#: apply.c:3400
+#: apply.c:3401
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "lecture depuis '%s' au-delà d'un lien symbolique"
 
-#: apply.c:3429 apply.c:3672
+#: apply.c:3430 apply.c:3673
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "le chemin %s a été renommé/supprimé"
 
-#: apply.c:3515 apply.c:3687
+#: apply.c:3516 apply.c:3688
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s : n'existe pas dans l'index"
 
-#: apply.c:3524 apply.c:3695
+#: apply.c:3525 apply.c:3696
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s : ne correspond pas à l'index"
 
-#: apply.c:3559
+#: apply.c:3560
 msgid "repository lacks the necessary blob to fall back on 3-way merge."
 msgstr ""
 "le dépôt n'a pas les blobs nécessaires pour un retour à une fusion à 3 "
 "points."
 
-#: apply.c:3562
+#: apply.c:3563
 #, c-format
 msgid "Falling back to three-way merge...\n"
 msgstr "Retour à une fusion à 3 points…\n"
 
-#: apply.c:3578 apply.c:3582
+#: apply.c:3579 apply.c:3583
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "impossible de lire le contenu actuel de '%s'"
 
-#: apply.c:3594
+#: apply.c:3595
 #, c-format
 msgid "Failed to fall back on three-way merge...\n"
 msgstr "Échec du retour à une fusion à 3 points…\n"
 
-#: apply.c:3608
+#: apply.c:3609
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "Patch %s appliqué avec des conflits.\n"
 
-#: apply.c:3613
+#: apply.c:3614
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "Patch %s appliqué proprement.\n"
 
-#: apply.c:3639
+#: apply.c:3640
 msgid "removal patch leaves file contents"
 msgstr "le patch de suppression laisse un contenu dans le fichier"
 
-#: apply.c:3712
+#: apply.c:3713
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s : type erroné"
 
-#: apply.c:3714
+#: apply.c:3715
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s est de type %o, mais %o attendu"
 
-#: apply.c:3865 apply.c:3867 read-cache.c:830 read-cache.c:856
+#: apply.c:3866 apply.c:3868 read-cache.c:830 read-cache.c:856
 #: read-cache.c:1309
 #, c-format
 msgid "invalid path '%s'"
 msgstr "chemin invalide '%s'"
 
-#: apply.c:3923
+#: apply.c:3924
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s : existe déjà dans l'index"
 
-#: apply.c:3926
+#: apply.c:3927
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s : existe déjà dans la copie de travail"
 
-#: apply.c:3946
+#: apply.c:3947
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "le nouveau mode (%o) de %s ne correspond pas à l'ancien mode (%o)"
 
-#: apply.c:3951
+#: apply.c:3952
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr ""
 "le nouveau mode (%o) de %s ne correspond pas à l'ancien mode (%o) de %s"
 
-#: apply.c:3971
+#: apply.c:3972
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "le fichier affecté '%s' est au-delà d'un lien symbolique"
 
-#: apply.c:3975
+#: apply.c:3976
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s : le patch ne s'applique pas"
 
-#: apply.c:3990
+#: apply.c:3991
 #, c-format
 msgid "Checking patch %s..."
 msgstr "Vérification du patch %s..."
 
-#: apply.c:4082
+#: apply.c:4083
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr ""
 "l'information sha1 est manquante ou inutilisable pour le sous-module %s"
 
-#: apply.c:4089
+#: apply.c:4090
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "le mode change pour %s, qui n'est pas dans la HEAD actuelle"
 
-#: apply.c:4092
+#: apply.c:4093
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "l'information de sha1 est manquante ou inutilisable (%s)."
 
-#: apply.c:4097 builtin/checkout.c:278 builtin/reset.c:143
+#: apply.c:4098 builtin/checkout.c:279 builtin/reset.c:143
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "échec de make_cache_entry pour le chemin '%s'"
 
-#: apply.c:4101
+#: apply.c:4102
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "impossible d'ajouter %s à l'index temporaire"
 
-#: apply.c:4111
+#: apply.c:4112
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "impossible d'écrire l'index temporaire dans %s"
 
-#: apply.c:4249
+#: apply.c:4250
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "suppression de %s dans l'index impossible"
 
-#: apply.c:4283
+#: apply.c:4284
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "patch corrompu pour le sous-module %s"
 
-#: apply.c:4289
+#: apply.c:4290
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "stat du fichier nouvellement créé '%s' impossible"
 
-#: apply.c:4297
+#: apply.c:4298
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr ""
 "création du magasin de stockage pour le fichier nouvellement créé %s "
 "impossible"
 
-#: apply.c:4303 apply.c:4448
+#: apply.c:4304 apply.c:4449
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "ajout de l'élément de cache %s impossible"
 
-#: apply.c:4346
+#: apply.c:4347
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "échec de l'écriture dans '%s'"
 
-#: apply.c:4350
+#: apply.c:4351
 #, c-format
 msgid "closing file '%s'"
 msgstr "fermeture du fichier '%s'"
 
-#: apply.c:4420
+#: apply.c:4421
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "écriture du fichier '%s' mode %o impossible"
 
-#: apply.c:4518
+#: apply.c:4519
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "Patch %s appliqué proprement."
 
-#: apply.c:4526
+#: apply.c:4527
 msgid "internal error"
 msgstr "erreur interne"
 
-#: apply.c:4529
+#: apply.c:4530
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "Application du patch %%s avec %d rejet..."
 msgstr[1] "Application du patch %%s avec %d rejets..."
 
-#: apply.c:4540
+#: apply.c:4541
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "troncature du nom de fichier .rej en %.*s.rej"
 
-#: apply.c:4548 builtin/fetch.c:878 builtin/fetch.c:1168
+#: apply.c:4549 builtin/fetch.c:898 builtin/fetch.c:1194
 #, c-format
 msgid "cannot open %s"
 msgstr "impossible d'ouvrir %s"
 
-#: apply.c:4562
+#: apply.c:4563
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "Section n°%d appliquée proprement."
 
-#: apply.c:4566
+#: apply.c:4567
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "Section n°%d rejetée."
 
-#: apply.c:4676
+#: apply.c:4686
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Chemin '%s' non traité."
 
-#: apply.c:4684
+#: apply.c:4694
 msgid "unrecognized input"
 msgstr "entrée non reconnue"
 
-#: apply.c:4704
+#: apply.c:4714
 msgid "unable to read index file"
 msgstr "lecture du fichier d'index impossible"
 
-#: apply.c:4859
+#: apply.c:4871
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "ouverture impossible du patch '%s' :%s"
 
-#: apply.c:4886
+#: apply.c:4898
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "%d erreur d'espace ignorée"
 msgstr[1] "%d erreurs d'espace ignorées"
 
-#: apply.c:4892 apply.c:4907
+#: apply.c:4904 apply.c:4919
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d ligne a ajouté des erreurs d'espace."
 msgstr[1] "%d lignes ont ajouté des erreurs d'espace."
 
-#: apply.c:4900
+#: apply.c:4912
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] "%d ligne ajoutée après correction des erreurs d'espace."
 msgstr[1] "%d lignes ajoutées après correction des erreurs d'espace."
 
-#: apply.c:4916 builtin/add.c:540 builtin/mv.c:301 builtin/rm.c:390
+#: apply.c:4928 builtin/add.c:540 builtin/mv.c:301 builtin/rm.c:390
 msgid "Unable to write new index file"
 msgstr "Impossible d'écrire le nouveau fichier d'index"
 
-#: apply.c:4943 apply.c:4946 builtin/am.c:2208 builtin/am.c:2211
-#: builtin/clone.c:123 builtin/fetch.c:128 builtin/merge.c:273
-#: builtin/pull.c:208 builtin/submodule--helper.c:407
+#: apply.c:4955 apply.c:4958 builtin/am.c:2197 builtin/am.c:2200
+#: builtin/clone.c:122 builtin/fetch.c:143 builtin/merge.c:273
+#: builtin/pull.c:209 builtin/submodule--helper.c:407
 #: builtin/submodule--helper.c:1367 builtin/submodule--helper.c:1370
 #: builtin/submodule--helper.c:1850 builtin/submodule--helper.c:1853
 #: builtin/submodule--helper.c:2092 git-add--interactive.perl:211
 msgid "path"
 msgstr "chemin"
 
-#: apply.c:4944
+#: apply.c:4956
 msgid "don't apply changes matching the given path"
 msgstr "ne pas appliquer les modifications qui correspondent au chemin donné"
 
-#: apply.c:4947
+#: apply.c:4959
 msgid "apply changes matching the given path"
 msgstr "appliquer les modifications qui correspondent au chemin donné"
 
-#: apply.c:4949 builtin/am.c:2217
+#: apply.c:4961 builtin/am.c:2206
 msgid "num"
 msgstr "num"
 
-#: apply.c:4950
+#: apply.c:4962
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "supprimer <num> barres obliques des chemins traditionnels de diff"
 
-#: apply.c:4953
+#: apply.c:4965
 msgid "ignore additions made by the patch"
 msgstr "ignorer les additions réalisées par le patch"
 
-#: apply.c:4955
+#: apply.c:4967
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "au lieu d'appliquer le patch, afficher le diffstat de l'entrée"
 
-#: apply.c:4959
+#: apply.c:4971
 msgid "show number of added and deleted lines in decimal notation"
 msgstr ""
 "afficher le nombre de lignes ajoutées et supprimées en notation décimale"
 
-#: apply.c:4961
+#: apply.c:4973
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "au lieu d'appliquer le patch, afficher un résumé de l'entrée"
 
-#: apply.c:4963
+#: apply.c:4975
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "au lieu d'appliquer le patch, voir si le patch est applicable"
 
-#: apply.c:4965
+#: apply.c:4977
 msgid "make sure the patch is applicable to the current index"
 msgstr "s'assurer que le patch est applicable sur l'index actuel"
 
-#: apply.c:4967
+#: apply.c:4979
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "marquer les nouveaux fichiers `git add --intent-to-add`"
 
-#: apply.c:4969
+#: apply.c:4981
 msgid "apply a patch without touching the working tree"
 msgstr "appliquer les patch sans toucher à la copie de travail"
 
-#: apply.c:4971
+#: apply.c:4983
 msgid "accept a patch that touches outside the working area"
 msgstr "accepter un patch qui touche hors de la copie de travail"
 
-#: apply.c:4974
+#: apply.c:4986
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "appliquer aussi le patch (à utiliser avec --stat/--summary/--check)"
 
-#: apply.c:4976
+#: apply.c:4988
 msgid "attempt three-way merge if a patch does not apply"
 msgstr "tenter une fusion à 3 points si le patch ne s'applique pas proprement"
 
-#: apply.c:4978
+#: apply.c:4990
 msgid "build a temporary index based on embedded index information"
 msgstr ""
 "construire un index temporaire fondé sur l'information de l'index embarqué"
 
-#: apply.c:4981 builtin/checkout-index.c:173 builtin/ls-files.c:524
+#: apply.c:4993 builtin/checkout-index.c:173 builtin/ls-files.c:524
 msgid "paths are separated with NUL character"
 msgstr "les chemins sont séparés par un caractère NUL"
 
-#: apply.c:4983
+#: apply.c:4995
 msgid "ensure at least <n> lines of context match"
 msgstr "s'assurer d'au moins <n> lignes de correspondance de contexte"
 
-#: apply.c:4984 builtin/am.c:2196 builtin/interpret-trailers.c:98
+#: apply.c:4996 builtin/am.c:2185 builtin/interpret-trailers.c:98
 #: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3330 builtin/rebase.c:1421
+#: builtin/pack-objects.c:3310 builtin/rebase.c:1445
 msgid "action"
 msgstr "action"
 
-#: apply.c:4985
+#: apply.c:4997
 msgid "detect new or modified lines that have whitespace errors"
 msgstr ""
 "détecter des lignes nouvelles ou modifiées qui contiennent des erreurs "
 "d'espace"
 
-#: apply.c:4988 apply.c:4991
+#: apply.c:5000 apply.c:5003
 msgid "ignore changes in whitespace when finding context"
 msgstr "ignorer des modifications d'espace lors de la recherche de contexte"
 
-#: apply.c:4994
+#: apply.c:5006
 msgid "apply the patch in reverse"
 msgstr "appliquer le patch en sens inverse"
 
-#: apply.c:4996
+#: apply.c:5008
 msgid "don't expect at least one line of context"
 msgstr "ne pas s'attendre à au moins une ligne de contexte"
 
-#: apply.c:4998
+#: apply.c:5010
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "laisser les sections rejetées dans les fichiers *.rej correspondants"
 
-#: apply.c:5000
+#: apply.c:5012
 msgid "allow overlapping hunks"
 msgstr "accepter les recouvrements de sections"
 
-#: apply.c:5001 builtin/add.c:291 builtin/check-ignore.c:22
+#: apply.c:5013 builtin/add.c:291 builtin/check-ignore.c:22
 #: builtin/commit.c:1337 builtin/count-objects.c:98 builtin/fsck.c:786
-#: builtin/log.c:2068 builtin/mv.c:123 builtin/read-tree.c:128
+#: builtin/log.c:2085 builtin/mv.c:123 builtin/read-tree.c:128
 msgid "be verbose"
 msgstr "mode verbeux"
 
-#: apply.c:5003
+#: apply.c:5015
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr ""
 "tolérer des erreurs de détection de retours chariot manquants en fin de "
 "fichier"
 
-#: apply.c:5006
+#: apply.c:5018
 msgid "do not trust the line counts in the hunk headers"
 msgstr "ne pas se fier au compte de lignes dans les en-têtes de section"
 
-#: apply.c:5008 builtin/am.c:2205
+#: apply.c:5020 builtin/am.c:2194
 msgid "root"
 msgstr "racine"
 
-#: apply.c:5009
+#: apply.c:5021
 msgid "prepend <root> to all filenames"
 msgstr "préfixer tous les noms de fichier avec <root>"
 
@@ -896,7 +896,7 @@
 msgid "archive format"
 msgstr "format d'archive"
 
-#: archive.c:458 builtin/log.c:1580
+#: archive.c:458 builtin/log.c:1581
 msgid "prefix"
 msgstr "préfixe"
 
@@ -904,11 +904,12 @@
 msgid "prepend prefix to each pathname in the archive"
 msgstr "préfixer chaque chemin de fichier dans l'archive"
 
-#: archive.c:460 builtin/blame.c:862 builtin/blame.c:874 builtin/blame.c:875
-#: builtin/commit-tree.c:117 builtin/config.c:129 builtin/fast-export.c:1134
-#: builtin/fast-export.c:1136 builtin/grep.c:897 builtin/hash-object.c:105
-#: builtin/ls-files.c:560 builtin/ls-files.c:563 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:177
+#: archive.c:460 builtin/blame.c:861 builtin/blame.c:873 builtin/blame.c:874
+#: builtin/commit-tree.c:117 builtin/config.c:129 builtin/fast-export.c:1162
+#: builtin/fast-export.c:1164 builtin/fast-export.c:1168 builtin/grep.c:899
+#: builtin/hash-object.c:105 builtin/ls-files.c:560 builtin/ls-files.c:563
+#: builtin/notes.c:412 builtin/notes.c:578 builtin/read-tree.c:123
+#: parse-options.h:186
 msgid "file"
 msgstr "fichier"
 
@@ -940,7 +941,7 @@
 msgid "list supported archive formats"
 msgstr "afficher les formats d'archive supportés"
 
-#: archive.c:479 builtin/archive.c:91 builtin/clone.c:113 builtin/clone.c:116
+#: archive.c:479 builtin/archive.c:91 builtin/clone.c:112 builtin/clone.c:115
 #: builtin/submodule--helper.c:1379 builtin/submodule--helper.c:1859
 msgid "repo"
 msgstr "dépôt"
@@ -949,7 +950,7 @@
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "récupérer l'archive depuis le dépôt distant <dépôt>"
 
-#: archive.c:481 builtin/archive.c:93 builtin/difftool.c:707
+#: archive.c:481 builtin/archive.c:93 builtin/difftool.c:715
 #: builtin/notes.c:498
 msgid "command"
 msgstr "commande"
@@ -985,26 +986,26 @@
 msgid "cannot stream blob %s"
 msgstr "impossible de transmettre le blob %s en flux"
 
-#: archive-tar.c:260 archive-zip.c:363
+#: archive-tar.c:266 archive-zip.c:363
 #, c-format
 msgid "unsupported file mode: 0%o (SHA1: %s)"
 msgstr "mode de fichier non supporté :0%o (SHA1: %s)"
 
-#: archive-tar.c:287 archive-zip.c:353
+#: archive-tar.c:293 archive-zip.c:353
 #, c-format
 msgid "cannot read %s"
 msgstr "impossible de lire %s"
 
-#: archive-tar.c:459
+#: archive-tar.c:465
 #, c-format
 msgid "unable to start '%s' filter"
 msgstr "impossible de démarrer le filtre '%s'"
 
-#: archive-tar.c:462
+#: archive-tar.c:468
 msgid "unable to redirect descriptor"
 msgstr "impossible de rediriger un descripteur"
 
-#: archive-tar.c:469
+#: archive-tar.c:475
 #, c-format
 msgid "'%s' filter reported error"
 msgstr "le filtre '%s' a retourné une erreur"
@@ -1029,17 +1030,17 @@
 msgid "timestamp too large for this system: %<PRIuMAX>"
 msgstr "l'horodatage est trop grand pour ce système : %<PRIuMAX>"
 
-#: attr.c:211
+#: attr.c:213
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s n'est pas un nom valide d'attribut"
 
-#: attr.c:368
+#: attr.c:370
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s non permis : %s : %d"
 
-#: attr.c:408
+#: attr.c:410
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1167,41 +1168,41 @@
 msgstr[0] "Bissection : %d révision à tester après ceci %s\n"
 msgstr[1] "Bissection : %d révisions à tester après ceci %s\n"
 
-#: blame.c:2697
+#: blame.c:2700
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents et --reverse ne font pas bon ménage."
 
-#: blame.c:2711
+#: blame.c:2714
 msgid "cannot use --contents with final commit object name"
 msgstr "on ne peut pas utiliser --contents avec un nom d'objet commit final"
 
-#: blame.c:2732
+#: blame.c:2735
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "--reverse et --first-parent ensemble nécessitent la spécification d'un "
 "dernier commit"
 
-#: blame.c:2741 bundle.c:167 ref-filter.c:2196 remote.c:1938 sequencer.c:2033
-#: sequencer.c:4348 builtin/commit.c:1020 builtin/log.c:387 builtin/log.c:963
-#: builtin/log.c:1451 builtin/log.c:1827 builtin/log.c:2117 builtin/merge.c:411
-#: builtin/pack-objects.c:3148 builtin/pack-objects.c:3163
+#: blame.c:2744 bundle.c:167 ref-filter.c:2203 remote.c:1941 sequencer.c:1971
+#: sequencer.c:4305 builtin/commit.c:1020 builtin/log.c:387 builtin/log.c:964
+#: builtin/log.c:1452 builtin/log.c:1844 builtin/log.c:2134 builtin/merge.c:411
+#: builtin/pack-objects.c:3128 builtin/pack-objects.c:3143
 #: builtin/shortlog.c:192
 msgid "revision walk setup failed"
 msgstr "échec de la préparation du parcours des révisions"
 
-#: blame.c:2759
+#: blame.c:2762
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "--reverse --first-parent ensemble nécessitent une portée avec la chaîne de "
 "premier parent"
 
-#: blame.c:2770
+#: blame.c:2773
 #, c-format
 msgid "no such path %s in %s"
 msgstr "pas de chemin %s dans %s"
 
-#: blame.c:2781
+#: blame.c:2784
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "impossible de lire le blob %s  pour le chemin %s"
@@ -1364,7 +1365,7 @@
 msgid "unrecognized header: %s%s (%d)"
 msgstr "en-tête non reconnu : %s%s (%d)"
 
-#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2283 sequencer.c:3024
+#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2221 sequencer.c:2962
 #: builtin/commit.c:791
 #, c-format
 msgid "could not open '%s'"
@@ -1417,7 +1418,7 @@
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "la référence '%s' est exclue par les options de rev-list"
 
-#: bundle.c:460 builtin/log.c:202 builtin/log.c:1732 builtin/shortlog.c:306
+#: bundle.c:460 builtin/log.c:202 builtin/log.c:1733 builtin/shortlog.c:306
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "argument non reconnu : %s"
@@ -1440,8 +1441,8 @@
 msgid "invalid color value: %.*s"
 msgstr "Valeur invalide de couleur : %.*s"
 
-#: commit.c:50 sequencer.c:2727 builtin/am.c:355 builtin/am.c:399
-#: builtin/am.c:1378 builtin/am.c:2020 builtin/replace.c:455
+#: commit.c:50 sequencer.c:2665 builtin/am.c:354 builtin/am.c:398
+#: builtin/am.c:1366 builtin/am.c:2009 builtin/replace.c:456
 #, c-format
 msgid "could not parse %s"
 msgstr "impossible d'analyser %s"
@@ -1471,27 +1472,27 @@
 "Supprimez ce message en lançant\n"
 "\"git config advice.graftFileDeprecated false\""
 
-#: commit.c:1127
+#: commit.c:1128
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr "La validation %s a une signature GPG non fiable, prétendument par %s."
 
-#: commit.c:1130
+#: commit.c:1131
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "La validation %s a une mauvaise signature GPG prétendument par %s."
 
-#: commit.c:1133
+#: commit.c:1134
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "La validation %s n'a pas de signature GPG."
 
-#: commit.c:1136
+#: commit.c:1137
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "La validation %s a une signature GPG correcte par %s\n"
 
-#: commit.c:1390
+#: commit.c:1391
 msgid ""
 "Warning: commit message did not conform to UTF-8.\n"
 "You may want to amend it after fixing the message, or set the config\n"
@@ -1559,189 +1560,204 @@
 msgid "unable to find all commit-graph files"
 msgstr "impossible de trouver tous les fichiers du graphe de commit"
 
-#: commit-graph.c:554 commit-graph.c:614
+#: commit-graph.c:561 commit-graph.c:621
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr ""
 "position de commit invalide. Le graphe de commit est vraisemblablement "
 "corrompu"
 
-#: commit-graph.c:575
+#: commit-graph.c:582
 #, c-format
 msgid "could not find commit %s"
 msgstr "impossible de trouver le commit %s"
 
-#: commit-graph.c:1002 builtin/pack-objects.c:2657
+#: commit-graph.c:855 builtin/am.c:1287
+#, c-format
+msgid "unable to parse commit %s"
+msgstr "impossible d'analyser le commit %s"
+
+#: commit-graph.c:859
+#, c-format
+msgid "unable to get tree for %s"
+msgstr "impossible de récupérer l'arbre de %s"
+
+#: commit-graph.c:1017 builtin/pack-objects.c:2641
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "impossible d'obtenir le type de l'objet %s"
 
-#: commit-graph.c:1034
+#: commit-graph.c:1049
 msgid "Loading known commits in commit graph"
 msgstr "Lecture des commits connus dans un graphe de commit"
 
-#: commit-graph.c:1051
+#: commit-graph.c:1066
 msgid "Expanding reachable commits in commit graph"
 msgstr "Expansion des commits joignables dans un graphe de commit"
 
-#: commit-graph.c:1070
+#: commit-graph.c:1085
 msgid "Clearing commit marks in commit graph"
 msgstr "Suppression les marques de commit dans le graphe de commits"
 
-#: commit-graph.c:1089
+#: commit-graph.c:1104
 msgid "Computing commit graph generation numbers"
 msgstr "Calcul des chiffres de génération du graphe de commits"
 
-#: commit-graph.c:1163
+#: commit-graph.c:1179
 #, c-format
 msgid "Finding commits for commit graph in %d pack"
 msgid_plural "Finding commits for commit graph in %d packs"
 msgstr[0] "Recherche de commits pour un graphe de commits dans %d paquet"
 msgstr[1] "Recherche de commits pour un graphe de commits dans %d paquets"
 
-#: commit-graph.c:1176
+#: commit-graph.c:1192
 #, c-format
 msgid "error adding pack %s"
 msgstr "erreur à l'ajout du packet %s"
 
-#: commit-graph.c:1180
+#: commit-graph.c:1196
 #, c-format
 msgid "error opening index for %s"
 msgstr "erreur à l'ouverture de l'index pour %s"
 
-#: commit-graph.c:1204
+#: commit-graph.c:1220
 #, c-format
 msgid "Finding commits for commit graph from %d ref"
 msgid_plural "Finding commits for commit graph from %d refs"
 msgstr[0] "Recherche de commits pour un graphe de commits depuis %d réf"
 msgstr[1] "Recherche de commits pour un graphe de commits depuis %d réfs"
 
-#: commit-graph.c:1238
+#: commit-graph.c:1240
+#, c-format
+msgid "invalid commit object id: %s"
+msgstr "identifiant d'objet commit invalide : %s"
+
+#: commit-graph.c:1255
 msgid "Finding commits for commit graph among packed objects"
 msgstr ""
 "Recherche de commits pour un graphe de commits parmi les objets empaquetés"
 
-#: commit-graph.c:1253
+#: commit-graph.c:1270
 msgid "Counting distinct commits in commit graph"
 msgstr "Comptage des commits distincts dans un graphe de commit"
 
-#: commit-graph.c:1284
+#: commit-graph.c:1300
 msgid "Finding extra edges in commit graph"
 msgstr "Recherche d'arêtes supplémentaires dans un graphe de commits"
 
-#: commit-graph.c:1332
+#: commit-graph.c:1346
 msgid "failed to write correct number of base graph ids"
 msgstr "échec à l'écriture le nombre correct d'id de base de fusion"
 
-#: commit-graph.c:1365 midx.c:811
+#: commit-graph.c:1379 midx.c:810
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "impossible de créer les répertoires de premier niveau de %s"
 
-#: commit-graph.c:1377 builtin/index-pack.c:306 builtin/repack.c:240
+#: commit-graph.c:1391 builtin/index-pack.c:306 builtin/repack.c:241
 #, c-format
 msgid "unable to create '%s'"
 msgstr "impossible de créer '%s'"
 
-#: commit-graph.c:1437
+#: commit-graph.c:1451
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "Écriture le graphe de commits en %d passe"
 msgstr[1] "Écriture le graphe de commits en %d passes"
 
-#: commit-graph.c:1478
+#: commit-graph.c:1492
 msgid "unable to open commit-graph chain file"
 msgstr "impossible d'ouvrir le fichier de graphe de commit"
 
-#: commit-graph.c:1490
+#: commit-graph.c:1504
 msgid "failed to rename base commit-graph file"
 msgstr "échec du renommage du fichier de graphe de commits"
 
-#: commit-graph.c:1510
+#: commit-graph.c:1524
 msgid "failed to rename temporary commit-graph file"
 msgstr "impossible de renommer le fichier temporaire de graphe de commits"
 
-#: commit-graph.c:1621
+#: commit-graph.c:1635
 msgid "Scanning merged commits"
 msgstr "Analyse des commits de fusion"
 
-#: commit-graph.c:1632
+#: commit-graph.c:1646
 #, c-format
 msgid "unexpected duplicate commit id %s"
 msgstr "id de commit %s dupliqué inattendu"
 
-#: commit-graph.c:1657
+#: commit-graph.c:1670
 msgid "Merging commit-graph"
 msgstr "fusion du graphe de commits"
 
-#: commit-graph.c:1844
+#: commit-graph.c:1860
 #, c-format
 msgid "the commit graph format cannot write %d commits"
 msgstr "le graphe de commits ne peut pas écrire %d commits"
 
-#: commit-graph.c:1855
+#: commit-graph.c:1871
 msgid "too many commits to write graph"
 msgstr "trop de commits pour écrire un graphe"
 
-#: commit-graph.c:1945
+#: commit-graph.c:1961
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 "le graphe de commit a une somme de contrôle incorrecte et est "
 "vraisemblablement corrompu"
 
-#: commit-graph.c:1955
+#: commit-graph.c:1971
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "le graphe de commit a un ordre d'OID incorrect : %s puis %s"
 
-#: commit-graph.c:1965 commit-graph.c:1980
+#: commit-graph.c:1981 commit-graph.c:1996
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr ""
 "le graphe de commit a une valeur de dispersion incorrecte : dispersion[%d] = "
 "%u != %u"
 
-#: commit-graph.c:1972
+#: commit-graph.c:1988
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "échec de l'analyse le commit %s depuis le graphe de commits"
 
-#: commit-graph.c:1989
+#: commit-graph.c:2006
 msgid "Verifying commits in commit graph"
 msgstr "Verification des commits dans le graphe de commits"
 
-#: commit-graph.c:2002
+#: commit-graph.c:2020
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 "échec de l'analyse du commit %s depuis la base de données d'objets pour le "
 "graphe de commit"
 
-#: commit-graph.c:2009
+#: commit-graph.c:2027
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr ""
 "l'OID de l'arbre racine pour le commit %s dans le graphe de commit est %s != "
 "%s"
 
-#: commit-graph.c:2019
+#: commit-graph.c:2037
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr ""
 "la liste des parents du graphe de commit pour le commit %s est trop longue"
 
-#: commit-graph.c:2028
+#: commit-graph.c:2046
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "le parent du graphe de commit pour %s est %s != %s"
 
-#: commit-graph.c:2041
+#: commit-graph.c:2059
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr ""
 "la liste de parents du graphe de commit pour le commit %s se termine trop tôt"
 
-#: commit-graph.c:2046
+#: commit-graph.c:2064
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
@@ -1749,7 +1765,7 @@
 "le graphe de commit a un numéro de génération nul pour le commit %s, mais "
 "non-nul ailleurs"
 
-#: commit-graph.c:2050
+#: commit-graph.c:2068
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
@@ -1757,12 +1773,12 @@
 "le graphe de commit a un numéro de génération non-nul pour le commit %s, "
 "mais nul ailleurs"
 
-#: commit-graph.c:2065
+#: commit-graph.c:2083
 #, c-format
 msgid "commit-graph generation for commit %s is %u != %u"
 msgstr "la génération du graphe de commit pour le commit %s est %u != %u"
 
-#: commit-graph.c:2071
+#: commit-graph.c:2089
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
@@ -1813,7 +1829,7 @@
 msgid "key does not contain variable name: %s"
 msgstr "la clé ne contient pas de nom de variable : %s"
 
-#: config.c:406 sequencer.c:2463
+#: config.c:406 sequencer.c:2401
 #, c-format
 msgid "invalid key: %s"
 msgstr "clé invalide : %s"
@@ -1946,155 +1962,148 @@
 msgid "invalid mode for object creation: %s"
 msgstr "mode invalide pour la création d'objet : %s"
 
-#: config.c:1430
+#: config.c:1425
 #, c-format
 msgid "malformed value for %s"
 msgstr "valeur mal formée pour %s"
 
-#: config.c:1456
+#: config.c:1451
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "valeur mal formée pour %s : %s"
 
-#: config.c:1457
+#: config.c:1452
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr "doit être parmi nothing, matching, simple, upstream ou current"
 
-#: config.c:1518 builtin/pack-objects.c:3410
+#: config.c:1513 builtin/pack-objects.c:3394
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "niveau de compression du paquet %d"
 
-#: config.c:1639
+#: config.c:1634
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "impossible de charger l'objet blob de config '%s'"
 
-#: config.c:1642
+#: config.c:1637
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "la référence '%s' ne pointe pas sur un blob"
 
-#: config.c:1659
+#: config.c:1654
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "impossible de résoudre le blob de config '%s'"
 
-#: config.c:1689
+#: config.c:1684
 #, c-format
 msgid "failed to parse %s"
 msgstr "échec de l'analyse de %s"
 
-#: config.c:1745
+#: config.c:1740
 msgid "unable to parse command-line config"
 msgstr "lecture de la configuration de ligne de commande impossible"
 
-#: config.c:2094
+#: config.c:2091
 msgid "unknown error occurred while reading the configuration files"
 msgstr "erreur inconnue pendant la lecture des fichiers de configuration"
 
-#: config.c:2264
+#: config.c:2261
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "%s invalide : '%s'"
 
-#: config.c:2307
-#, c-format
-msgid "unknown core.untrackedCache value '%s'; using 'keep' default value"
-msgstr ""
-"valeur '%s' de core.untrackedCache inconnue ; utilisation de 'keep' par "
-"défaut"
-
-#: config.c:2333
+#: config.c:2306
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr ""
 "la valeur '%d' de splitIndex.maxPercentChange devrait se situer entre 0 et "
 "100"
 
-#: config.c:2379
+#: config.c:2352
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr ""
 "impossible d'analyser '%s' depuis le configuration en ligne de commande"
 
-#: config.c:2381
+#: config.c:2354
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr ""
 "variable de configuration '%s' incorrecte dans le fichier '%s' à la ligne %d"
 
-#: config.c:2462
+#: config.c:2435
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "nom de section invalide '%s'"
 
-#: config.c:2494
+#: config.c:2467
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s a des valeurs multiples"
 
-#: config.c:2523
+#: config.c:2496
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "impossible d'écrire le fichier de configuration %s"
 
-#: config.c:2775 config.c:3099
+#: config.c:2748 config.c:3072
 #, c-format
 msgid "could not lock config file %s"
 msgstr "impossible de verrouiller le fichier de configuration %s"
 
-#: config.c:2786
+#: config.c:2759
 #, c-format
 msgid "opening %s"
 msgstr "ouverture de %s"
 
-#: config.c:2821 builtin/config.c:328
+#: config.c:2794 builtin/config.c:328
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "motif invalide : %s"
 
-#: config.c:2846
+#: config.c:2819
 #, c-format
 msgid "invalid config file %s"
 msgstr "fichier de configuration invalide %s"
 
-#: config.c:2859 config.c:3112
+#: config.c:2832 config.c:3085
 #, c-format
 msgid "fstat on %s failed"
 msgstr "échec de fstat sur %s"
 
-#: config.c:2870
+#: config.c:2843
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr "impossible de réaliser un map de '%s'"
 
-#: config.c:2879 config.c:3117
+#: config.c:2852 config.c:3090
 #, c-format
 msgid "chmod on %s failed"
 msgstr "échec de chmod sur %s"
 
-#: config.c:2964 config.c:3214
+#: config.c:2937 config.c:3187
 #, c-format
 msgid "could not write config file %s"
 msgstr "impossible d'écrire le fichier de configuration %s"
 
-#: config.c:2998
+#: config.c:2971
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "impossible de régler '%s' à '%s'"
 
-#: config.c:3000 builtin/remote.c:782
+#: config.c:2973 builtin/remote.c:782
 #, c-format
 msgid "could not unset '%s'"
 msgstr "impossible de désinitialiser '%s'"
 
-#: config.c:3090
+#: config.c:3063
 #, c-format
 msgid "invalid section name: %s"
 msgstr "nom de section invalide : %s"
 
-#: config.c:3257
+#: config.c:3230
 #, c-format
 msgid "missing value for '%s'"
 msgstr "valeur manquante pour '%s'"
@@ -2218,7 +2227,7 @@
 msgid "unknown port %s"
 msgstr "port inconnu %s"
 
-#: connect.c:845 connect.c:1171
+#: connect.c:845 connect.c:1175
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr "nom d'hôte étrange '%s' bloqué"
@@ -2233,60 +2242,60 @@
 msgid "cannot start proxy %s"
 msgstr "impossible de démarrer un proxy %s"
 
-#: connect.c:924
+#: connect.c:928
 msgid "no path specified; see 'git help pull' for valid url syntax"
 msgstr ""
 "aucun chemin spécifié ; référez-vous à 'git help pull' pour une syntaxe "
 "d'URL valide"
 
-#: connect.c:1119
+#: connect.c:1123
 msgid "ssh variant 'simple' does not support -4"
 msgstr "la variante ssh 'simple' ne supporte pas -4"
 
-#: connect.c:1131
+#: connect.c:1135
 msgid "ssh variant 'simple' does not support -6"
 msgstr "la variante ssh 'simple' ne supporte pas -6"
 
-#: connect.c:1148
+#: connect.c:1152
 msgid "ssh variant 'simple' does not support setting port"
 msgstr "la variante ssh 'simple' ne supporte pas de spécifier le port"
 
-#: connect.c:1260
+#: connect.c:1264
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr "chemin étrange '%s' bloqué"
 
-#: connect.c:1307
+#: connect.c:1311
 msgid "unable to fork"
 msgstr "fork impossible"
 
-#: connected.c:86 builtin/fsck.c:221 builtin/prune.c:43
+#: connected.c:88 builtin/fsck.c:221 builtin/prune.c:43
 msgid "Checking connectivity"
 msgstr "Vérification de la connectivité"
 
-#: connected.c:98
+#: connected.c:100
 msgid "Could not run 'git rev-list'"
 msgstr "Impossible de lancer 'git rev-list'"
 
-#: connected.c:118
+#: connected.c:120
 msgid "failed write to rev-list"
 msgstr "impossible d'écrire dans la rev-list"
 
-#: connected.c:125
+#: connected.c:127
 msgid "failed to close rev-list's stdin"
 msgstr "impossible de fermer l'entrée standard du rev-list"
 
-#: convert.c:193
+#: convert.c:194
 #, c-format
 msgid "illegal crlf_action %d"
 msgstr "crlf_action illégal %d"
 
-#: convert.c:206
+#: convert.c:207
 #, c-format
 msgid "CRLF would be replaced by LF in %s"
 msgstr "Les CRLF seraient remplacés par des LF dans %s"
 
-#: convert.c:208
+#: convert.c:209
 #, c-format
 msgid ""
 "CRLF will be replaced by LF in %s.\n"
@@ -2295,12 +2304,12 @@
 "Les CRLF seront remplacés par des LF dans %s.\n"
 "Le fichier conservera ses fins de ligne d'origine dans votre copie de travail"
 
-#: convert.c:216
+#: convert.c:217
 #, c-format
 msgid "LF would be replaced by CRLF in %s"
 msgstr "Les LF seraient remplacés par des CRLF dans %s"
 
-#: convert.c:218
+#: convert.c:219
 #, c-format
 msgid ""
 "LF will be replaced by CRLF in %s.\n"
@@ -2309,12 +2318,12 @@
 "Les LF seront remplacés par des CRLF dans %s.\n"
 "Le fichier conservera ses fins de ligne d'origine dans votre copie de travail"
 
-#: convert.c:279
+#: convert.c:280
 #, c-format
 msgid "BOM is prohibited in '%s' if encoded as %s"
 msgstr "Aucun BOM n'est permis dans '%s' s'il est encodé comme %s"
 
-#: convert.c:286
+#: convert.c:287
 #, c-format
 msgid ""
 "The file '%s' contains a byte order mark (BOM). Please use UTF-%s as working-"
@@ -2323,12 +2332,12 @@
 "Le fichier '%s' contient un marqueur d'ordre d'octets (BOM). Veuillez "
 "utiliser UTF-%s comme encodage d'arbre de travail."
 
-#: convert.c:304
+#: convert.c:305
 #, c-format
 msgid "BOM is required in '%s' if encoded as %s"
 msgstr "Un BOM est obligatoire dans '%s' s'il est encodé comme %s"
 
-#: convert.c:306
+#: convert.c:307
 #, c-format
 msgid ""
 "The file '%s' is missing a byte order mark (BOM). Please use UTF-%sBE or UTF-"
@@ -2338,52 +2347,52 @@
 "utiliser UTF-%sBE ou UTF-%sLE (selon l'ordre désiré) comme encodage d'arbre "
 "de travail."
 
-#: convert.c:424 convert.c:495
+#: convert.c:425 convert.c:496
 #, c-format
 msgid "failed to encode '%s' from %s to %s"
 msgstr "échec de l'encodage de '%s' de %s vers %s"
 
-#: convert.c:467
+#: convert.c:468
 #, c-format
 msgid "encoding '%s' from %s to %s and back is not the same"
 msgstr ""
 "encoder '%s' depuis %s vers %s puis inversement ne produit pas le même "
 "contenu"
 
-#: convert.c:673
+#: convert.c:674
 #, c-format
 msgid "cannot fork to run external filter '%s'"
 msgstr "impossible de forker pour lancer le filtre externe '%s'"
 
-#: convert.c:693
+#: convert.c:694
 #, c-format
 msgid "cannot feed the input to external filter '%s'"
 msgstr "impossible de fournir l'entrée au filtre externe '%s'"
 
-#: convert.c:700
+#: convert.c:701
 #, c-format
 msgid "external filter '%s' failed %d"
 msgstr "le filtre externe '%s' a échoué %d"
 
-#: convert.c:735 convert.c:738
+#: convert.c:736 convert.c:739
 #, c-format
 msgid "read from external filter '%s' failed"
 msgstr "la lecture depuis le filtre externe '%s' a échoué"
 
-#: convert.c:741 convert.c:796
+#: convert.c:742 convert.c:797
 #, c-format
 msgid "external filter '%s' failed"
 msgstr "le filtre externe '%s' a échoué"
 
-#: convert.c:844
+#: convert.c:845
 msgid "unexpected filter type"
 msgstr "type de filtre inattendu"
 
-#: convert.c:855
+#: convert.c:856
 msgid "path name too long for external filter"
 msgstr "nom de chemin trop long pour un filtre externe"
 
-#: convert.c:929
+#: convert.c:930
 #, c-format
 msgid ""
 "external filter '%s' is not available anymore although not all paths have "
@@ -2392,67 +2401,67 @@
 "le filtre externe '%s' n'est plus disponible bien que tous les chemins "
 "n'aient pas été filtrés"
 
-#: convert.c:1228
+#: convert.c:1229
 msgid "true/false are no valid working-tree-encodings"
 msgstr "true/false ne sont pas des encodages d'arbre de travail valides"
 
-#: convert.c:1398 convert.c:1432
+#: convert.c:1417 convert.c:1451
 #, c-format
 msgid "%s: clean filter '%s' failed"
 msgstr "%s : le filtre clean '%s' a échoué"
 
-#: convert.c:1476
+#: convert.c:1495
 #, c-format
 msgid "%s: smudge filter %s failed"
 msgstr "%s : le filtre smudge '%s' a échoué"
 
-#: date.c:137
+#: date.c:138
 msgid "in the future"
 msgstr "dans le futur"
 
-#: date.c:143
+#: date.c:144
 #, c-format
 msgid "%<PRIuMAX> second ago"
 msgid_plural "%<PRIuMAX> seconds ago"
 msgstr[0] "il y a %<PRIuMAX> seconde"
 msgstr[1] "il y a %<PRIuMAX> secondes"
 
-#: date.c:150
+#: date.c:151
 #, c-format
 msgid "%<PRIuMAX> minute ago"
 msgid_plural "%<PRIuMAX> minutes ago"
 msgstr[0] "il y a %<PRIuMAX> minute"
 msgstr[1] "il y a %<PRIuMAX> minutes"
 
-#: date.c:157
+#: date.c:158
 #, c-format
 msgid "%<PRIuMAX> hour ago"
 msgid_plural "%<PRIuMAX> hours ago"
 msgstr[0] "il y a %<PRIuMAX> heure"
 msgstr[1] "il y a %<PRIuMAX> heures"
 
-#: date.c:164
+#: date.c:165
 #, c-format
 msgid "%<PRIuMAX> day ago"
 msgid_plural "%<PRIuMAX> days ago"
 msgstr[0] "il y a %<PRIuMAX> jour"
 msgstr[1] "il y a %<PRIuMAX> jours"
 
-#: date.c:170
+#: date.c:171
 #, c-format
 msgid "%<PRIuMAX> week ago"
 msgid_plural "%<PRIuMAX> weeks ago"
 msgstr[0] "il y a %<PRIuMAX> semaine"
 msgstr[1] "il y a %<PRIuMAX> semaines"
 
-#: date.c:177
+#: date.c:178
 #, c-format
 msgid "%<PRIuMAX> month ago"
 msgid_plural "%<PRIuMAX> months ago"
 msgstr[0] "il y a %<PRIuMAX> mois"
 msgstr[1] "il y a %<PRIuMAX> mois"
 
-#: date.c:188
+#: date.c:189
 #, c-format
 msgid "%<PRIuMAX> year"
 msgid_plural "%<PRIuMAX> years"
@@ -2460,14 +2469,14 @@
 msgstr[1] "%<PRIuMAX> ans"
 
 #. TRANSLATORS: "%s" is "<n> years"
-#: date.c:191
+#: date.c:192
 #, c-format
 msgid "%s, %<PRIuMAX> month ago"
 msgid_plural "%s, %<PRIuMAX> months ago"
 msgstr[0] "il y a %s et %<PRIuMAX> mois"
 msgstr[1] "il y a %s et %<PRIuMAX> mois"
 
-#: date.c:196 date.c:201
+#: date.c:197 date.c:202
 #, c-format
 msgid "%<PRIuMAX> year ago"
 msgid_plural "%<PRIuMAX> years ago"
@@ -2505,7 +2514,7 @@
 msgid "failed to read orderfile '%s'"
 msgstr "impossible de lire le fichier de commande '%s'"
 
-#: diffcore-rename.c:544
+#: diffcore-rename.c:543
 msgid "Performing inexact rename detection"
 msgstr "Détection de renommage inexact en cours"
 
@@ -2573,35 +2582,35 @@
 "Erreurs dans la variable de configuration 'diff.dirstat' :\n"
 "%s"
 
-#: diff.c:4215
+#: diff.c:4218
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "l'application de diff externe a disparu, arrêt à %s"
 
-#: diff.c:4560
+#: diff.c:4563
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr "--name-only, --name-status, --check et -s sont mutuellement exclusifs"
 
-#: diff.c:4563
+#: diff.c:4566
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "-G, -S et --find-object sont mutuellement exclusifs"
 
-#: diff.c:4641
+#: diff.c:4644
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow a besoin d'une spécification de chemin unique"
 
-#: diff.c:4689
+#: diff.c:4692
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "valeur invalide de --stat : %s"
 
-#: diff.c:4694 diff.c:4699 diff.c:4704 diff.c:4709 diff.c:5222
+#: diff.c:4697 diff.c:4702 diff.c:4707 diff.c:4712 diff.c:5225
 #: parse-options.c:199 parse-options.c:203
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s attend une valeur numérique"
 
-#: diff.c:4726
+#: diff.c:4729
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -2610,42 +2619,42 @@
 "Impossible d'analyser le paramètre de l'option --dirstat/-X :\n"
 "%s"
 
-#: diff.c:4811
+#: diff.c:4814
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "classe de modification inconnue '%c' dans --diff-fileter=%s"
 
-#: diff.c:4835
+#: diff.c:4838
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "valeur inconnue après ws-error-highlight=%.*s"
 
-#: diff.c:4849
+#: diff.c:4852
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "impossible de résoudre '%s'"
 
-#: diff.c:4899 diff.c:4905
+#: diff.c:4902 diff.c:4908
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "forme <n>/<m> attendue par %s"
 
-#: diff.c:4917
+#: diff.c:4920
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "caractère attendu par %s, '%s' trouvé"
 
-#: diff.c:4938
+#: diff.c:4941
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "mauvais argument --color-moved : %s"
 
-#: diff.c:4957
+#: diff.c:4960
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "mode invalide '%s' dans --color-moved-ws"
 
-#: diff.c:4997
+#: diff.c:5000
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
@@ -2653,155 +2662,155 @@
 "l'option diff-algorithm accept \"myers\", \"minimal\", \"patience\" et "
 "\"histogram\""
 
-#: diff.c:5033 diff.c:5053
+#: diff.c:5036 diff.c:5056
 #, c-format
 msgid "invalid argument to %s"
 msgstr "argument invalide pour %s"
 
-#: diff.c:5191
+#: diff.c:5194
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "échec de l'analyse du paramètre de l'option --submodule : '%s'"
 
-#: diff.c:5247
+#: diff.c:5250
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "mauvais argument pour --word-diff : %s"
 
-#: diff.c:5270
+#: diff.c:5273
 msgid "Diff output format options"
 msgstr "Options de format de sortie de diff"
 
-#: diff.c:5272 diff.c:5278
+#: diff.c:5275 diff.c:5281
 msgid "generate patch"
 msgstr "générer la rustine"
 
-#: diff.c:5275 builtin/log.c:172
+#: diff.c:5278 builtin/log.c:172
 msgid "suppress diff output"
 msgstr "supprimer la sortie des différences"
 
-#: diff.c:5280 diff.c:5394 diff.c:5401
+#: diff.c:5283 diff.c:5397 diff.c:5404
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5281 diff.c:5284
+#: diff.c:5284 diff.c:5287
 msgid "generate diffs with <n> lines context"
 msgstr "générer les diffs avec <n> lignes de contexte"
 
-#: diff.c:5286
+#: diff.c:5289
 msgid "generate the diff in raw format"
 msgstr "générer le diff en format brut"
 
-#: diff.c:5289
+#: diff.c:5292
 msgid "synonym for '-p --raw'"
 msgstr "synonyme de '-p --raw'"
 
-#: diff.c:5293
+#: diff.c:5296
 msgid "synonym for '-p --stat'"
 msgstr "synonyme de '-p --stat'"
 
-#: diff.c:5297
+#: diff.c:5300
 msgid "machine friendly --stat"
 msgstr "--stat pour traitement automatique"
 
-#: diff.c:5300
+#: diff.c:5303
 msgid "output only the last line of --stat"
 msgstr "afficher seulement la dernière ligne de --stat"
 
-#: diff.c:5302 diff.c:5310
+#: diff.c:5305 diff.c:5313
 msgid "<param1,param2>..."
 msgstr "<param1,param2>..."
 
-#: diff.c:5303
+#: diff.c:5306
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr ""
 "afficher la distribution des quantités de modifications relatives pour "
 "chaque sous-répertoire"
 
-#: diff.c:5307
+#: diff.c:5310
 msgid "synonym for --dirstat=cumulative"
 msgstr "synonyme pour --dirstat=cumulative"
 
-#: diff.c:5311
+#: diff.c:5314
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "synonyme pour --dirstat=files,param1,param2..."
 
-#: diff.c:5315
+#: diff.c:5318
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 "avertir si les modifications introduisent des marqueurs de conflit ou des "
 "erreurs d'espace"
 
-#: diff.c:5318
+#: diff.c:5321
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr ""
 "résumé succinct tel que les créations, les renommages et les modifications "
 "de mode"
 
-#: diff.c:5321
+#: diff.c:5324
 msgid "show only names of changed files"
 msgstr "n'afficher que les noms de fichiers modifiés"
 
-#: diff.c:5324
+#: diff.c:5327
 msgid "show only names and status of changed files"
 msgstr "n'afficher que les noms et les status des fichiers modifiés"
 
-#: diff.c:5326
+#: diff.c:5329
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<largeur>[,<largeur-de-nom>[,<compte>]]"
 
-#: diff.c:5327
+#: diff.c:5330
 msgid "generate diffstat"
 msgstr "générer un diffstat"
 
-#: diff.c:5329 diff.c:5332 diff.c:5335
+#: diff.c:5332 diff.c:5335 diff.c:5338
 msgid "<width>"
 msgstr "<largeur>"
 
-#: diff.c:5330
+#: diff.c:5333
 msgid "generate diffstat with a given width"
 msgstr "générer un diffstat avec la largeur indiquée"
 
-#: diff.c:5333
+#: diff.c:5336
 msgid "generate diffstat with a given name width"
 msgstr "génerer un diffstat avec la largeur de nom indiquée"
 
-#: diff.c:5336
+#: diff.c:5339
 msgid "generate diffstat with a given graph width"
 msgstr "génerer un diffstat avec la largeur de graphe indiquée"
 
-#: diff.c:5338
+#: diff.c:5341
 msgid "<count>"
 msgstr "<compte>"
 
-#: diff.c:5339
+#: diff.c:5342
 msgid "generate diffstat with limited lines"
 msgstr "générer un diffstat avec des lignes limitées"
 
-#: diff.c:5342
+#: diff.c:5345
 msgid "generate compact summary in diffstat"
 msgstr "générer une résumé compact dans le diffstat"
 
-#: diff.c:5345
+#: diff.c:5348
 msgid "output a binary diff that can be applied"
 msgstr "produire un diff binaire qui peut être appliqué"
 
-#: diff.c:5348
+#: diff.c:5351
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr ""
 "afficher les noms complets des objets pre- et post-image sur les lignes "
 "\"index\""
 
-#: diff.c:5350
+#: diff.c:5353
 msgid "show colored diff"
 msgstr "afficher un diff coloré"
 
-#: diff.c:5351
+#: diff.c:5354
 msgid "<kind>"
 msgstr "<sorte>"
 
-#: diff.c:5352
+#: diff.c:5355
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
@@ -2809,7 +2818,7 @@
 "surligner les erreurs d'espace dans les lignes 'contexte', 'ancien', "
 "'nouveau' dans le diff"
 
-#: diff.c:5355
+#: diff.c:5358
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -2817,93 +2826,93 @@
 "ne pas compresser les chemins et utiliser des NULs comme terminateurs de "
 "champs dans --raw ou --numstat"
 
-#: diff.c:5358 diff.c:5361 diff.c:5364 diff.c:5470
+#: diff.c:5361 diff.c:5364 diff.c:5367 diff.c:5473
 msgid "<prefix>"
 msgstr "<préfixe>"
 
-#: diff.c:5359
+#: diff.c:5362
 msgid "show the given source prefix instead of \"a/\""
 msgstr "afficher le préfixe de source indiqué au lieu de \"a/\""
 
-#: diff.c:5362
+#: diff.c:5365
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "afficher le préfixe de destination indiqué au lieu de \"b/\""
 
-#: diff.c:5365
+#: diff.c:5368
 msgid "prepend an additional prefix to every line of output"
 msgstr "préfixer toutes les lignes en sortie avec la chaîne indiquée"
 
-#: diff.c:5368
+#: diff.c:5371
 msgid "do not show any source or destination prefix"
 msgstr "n'afficher aucun préfixe, ni de source, ni de destination"
 
-#: diff.c:5371
+#: diff.c:5374
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr ""
 "afficher le contexte entre les sections à concurrence du nombre de ligne "
 "indiqué"
 
-#: diff.c:5375 diff.c:5380 diff.c:5385
+#: diff.c:5378 diff.c:5383 diff.c:5388
 msgid "<char>"
 msgstr "<caractère>"
 
-#: diff.c:5376
+#: diff.c:5379
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "spécifier le caractère pour indiquer une nouvelle ligne au lieu de '+'"
 
-#: diff.c:5381
+#: diff.c:5384
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "spécifier le caractère pour indiquer une ancienne ligne au lieu de '-'"
 
-#: diff.c:5386
+#: diff.c:5389
 msgid "specify the character to indicate a context instead of ' '"
 msgstr ""
 "spécifier le caractère pour indiquer une ligne de contexte au lieu de ' '"
 
-#: diff.c:5389
+#: diff.c:5392
 msgid "Diff rename options"
 msgstr "Options de renommage de diff"
 
-#: diff.c:5390
+#: diff.c:5393
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5391
+#: diff.c:5394
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr ""
 "casser les modifications d'une réécrire complète en paires de suppression et "
 "création"
 
-#: diff.c:5395
+#: diff.c:5398
 msgid "detect renames"
 msgstr "détecter les renommages"
 
-#: diff.c:5399
+#: diff.c:5402
 msgid "omit the preimage for deletes"
 msgstr "supprimer la pré-image pour les suppressions"
 
-#: diff.c:5402
+#: diff.c:5405
 msgid "detect copies"
 msgstr "détecter les copies"
 
-#: diff.c:5406
+#: diff.c:5409
 msgid "use unmodified files as source to find copies"
 msgstr ""
 "utiliser les fichiers non-modifiés comme sources pour trouver des copies"
 
-#: diff.c:5408
+#: diff.c:5411
 msgid "disable rename detection"
 msgstr "désactiver la détection de renommage"
 
-#: diff.c:5411
+#: diff.c:5414
 msgid "use empty blobs as rename source"
 msgstr "utiliser des blobs vides comme source de renommage"
 
-#: diff.c:5413
+#: diff.c:5416
 msgid "continue listing the history of a file beyond renames"
 msgstr "continuer à afficher l'historique d'un fichier au delà des renommages"
 
-#: diff.c:5416
+#: diff.c:5419
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
@@ -2911,161 +2920,161 @@
 "empêcher la détection de renommage/copie si le nombre de cibles de renommage/"
 "copie excède la limite indiquée"
 
-#: diff.c:5418
+#: diff.c:5421
 msgid "Diff algorithm options"
 msgstr "Options de l'algorithme de diff"
 
-#: diff.c:5420
+#: diff.c:5423
 msgid "produce the smallest possible diff"
 msgstr "produire le diff le plus petit possible"
 
-#: diff.c:5423
+#: diff.c:5426
 msgid "ignore whitespace when comparing lines"
 msgstr "ignorer les espaces lors de la comparaison de ligne"
 
-#: diff.c:5426
+#: diff.c:5429
 msgid "ignore changes in amount of whitespace"
 msgstr "ignorer des modifications du nombre d'espaces"
 
-#: diff.c:5429
+#: diff.c:5432
 msgid "ignore changes in whitespace at EOL"
 msgstr "ignorer des modifications d'espace en fin de ligne"
 
-#: diff.c:5432
+#: diff.c:5435
 msgid "ignore carrier-return at the end of line"
 msgstr "ignore le retour chariot en fin de ligne"
 
-#: diff.c:5435
+#: diff.c:5438
 msgid "ignore changes whose lines are all blank"
 msgstr "ignorer les modifications dont les lignes sont vides"
 
-#: diff.c:5438
+#: diff.c:5441
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr ""
 "heuristique qui déplace les limites de sections de diff pour faciliter la "
 "lecture"
 
-#: diff.c:5441
+#: diff.c:5444
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "générer un diff en utilisant l'algorithme de différence \"patience\""
 
-#: diff.c:5445
+#: diff.c:5448
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr ""
 "générer un diff en utilisant l'algorithme de différence \"histogramme\""
 
-#: diff.c:5447
+#: diff.c:5450
 msgid "<algorithm>"
 msgstr "<algorithme>"
 
-#: diff.c:5448
+#: diff.c:5451
 msgid "choose a diff algorithm"
 msgstr "choisir un algorithme de différence"
 
-#: diff.c:5450
+#: diff.c:5453
 msgid "<text>"
 msgstr "<texte>"
 
-#: diff.c:5451
+#: diff.c:5454
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "générer un diff en utilisant l'algorithme de différence \"ancré\""
 
-#: diff.c:5453 diff.c:5462 diff.c:5465
+#: diff.c:5456 diff.c:5465 diff.c:5468
 msgid "<mode>"
 msgstr "<mode>"
 
-#: diff.c:5454
+#: diff.c:5457
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr ""
 "afficher des différences par mot, en utilisant <mode> pour délimiter les "
 "mots modifiés"
 
-#: diff.c:5456 diff.c:5459 diff.c:5504
+#: diff.c:5459 diff.c:5462 diff.c:5507
 msgid "<regex>"
 msgstr "<regex>"
 
-#: diff.c:5457
+#: diff.c:5460
 msgid "use <regex> to decide what a word is"
 msgstr "utiliser <regex> pour décider ce qu'est un mot"
 
-#: diff.c:5460
+#: diff.c:5463
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "équivalent à --word-diff=color --word-diff-regex=<regex>"
 
-#: diff.c:5463
+#: diff.c:5466
 msgid "moved lines of code are colored differently"
 msgstr "les lignes déplacées sont colorées différemment"
 
-#: diff.c:5466
+#: diff.c:5469
 msgid "how white spaces are ignored in --color-moved"
 msgstr "comment les espaces sont ignorés dans --color-moved"
 
-#: diff.c:5469
+#: diff.c:5472
 msgid "Other diff options"
 msgstr "Autres options diff"
 
-#: diff.c:5471
+#: diff.c:5474
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 "lancé depuis un sous-répertoire, exclure les modifications en dehors et "
 "afficher les chemins relatifs"
 
-#: diff.c:5475
+#: diff.c:5478
 msgid "treat all files as text"
 msgstr "traiter les fichiers comme texte"
 
-#: diff.c:5477
+#: diff.c:5480
 msgid "swap two inputs, reverse the diff"
 msgstr "échanger les entrées, inverser le diff"
 
-#: diff.c:5479
+#: diff.c:5482
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "sortir un code d'erreur 1 s'il y avait de différences, 0 sinon"
 
-#: diff.c:5481
+#: diff.c:5484
 msgid "disable all output of the program"
 msgstr "désactiver tous les affichages du programme"
 
-#: diff.c:5483
+#: diff.c:5486
 msgid "allow an external diff helper to be executed"
 msgstr "autoriser l'exécution d'un assistant externe de diff"
 
-#: diff.c:5485
+#: diff.c:5488
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 "lancer les filtres externes de conversion en texte lors de la comparaison de "
 "fichiers binaires"
 
-#: diff.c:5487
+#: diff.c:5490
 msgid "<when>"
 msgstr "<quand>"
 
-#: diff.c:5488
+#: diff.c:5491
 msgid "ignore changes to submodules in the diff generation"
 msgstr ""
 "ignorer les modifications dans les sous-modules lors de la génération de diff"
 
-#: diff.c:5491
+#: diff.c:5494
 msgid "<format>"
 msgstr "<format>"
 
-#: diff.c:5492
+#: diff.c:5495
 msgid "specify how differences in submodules are shown"
 msgstr "spécifier comment les différences dans les sous-modules sont affichées"
 
-#: diff.c:5496
+#: diff.c:5499
 msgid "hide 'git add -N' entries from the index"
 msgstr "masquer les entrées 'git add -N' de l'index"
 
-#: diff.c:5499
+#: diff.c:5502
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "traiter les entrées 'git add -N' comme réelles dans l'index"
 
-#: diff.c:5501
+#: diff.c:5504
 msgid "<string>"
 msgstr "<chaîne>"
 
-#: diff.c:5502
+#: diff.c:5505
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
@@ -3073,7 +3082,7 @@
 "rechercher les différences qui modifient le nombre d'occurrences de la "
 "chaîne spécifiée"
 
-#: diff.c:5505
+#: diff.c:5508
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
@@ -3081,26 +3090,26 @@
 "rechercher les différences qui modifient le nombre d'occurrences de la regex "
 "spécifiée"
 
-#: diff.c:5508
+#: diff.c:5511
 msgid "show all changes in the changeset with -S or -G"
 msgstr ""
 "afficher toutes les modifications dans l'ensemble de modifications avec -S "
 "ou -G"
 
-#: diff.c:5511
+#: diff.c:5514
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr ""
 "traiter <chaîne> dans -S comme une expression rationnelle POSIX étendue"
 
-#: diff.c:5514
+#: diff.c:5517
 msgid "control the order in which files appear in the output"
 msgstr "contrôler l'ordre dans lequel les fichiers apparaissent dans la sortie"
 
-#: diff.c:5515
+#: diff.c:5518
 msgid "<object-id>"
 msgstr "<id-objet>"
 
-#: diff.c:5516
+#: diff.c:5519
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
@@ -3108,35 +3117,35 @@
 "rechercher les différences qui modifient le nombre d'occurrences de l'objet "
 "indiqué"
 
-#: diff.c:5518
+#: diff.c:5521
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5519
+#: diff.c:5522
 msgid "select files by diff type"
 msgstr "sélectionner les fichiers par types de diff"
 
-#: diff.c:5521
+#: diff.c:5524
 msgid "<file>"
 msgstr "<fichier>"
 
-#: diff.c:5522
+#: diff.c:5525
 msgid "Output to a specific file"
 msgstr "Sortie vers un fichier spécifié"
 
-#: diff.c:6177
+#: diff.c:6180
 msgid "inexact rename detection was skipped due to too many files."
 msgstr ""
 "détection de renommage inexact annulée à cause d'un trop grand nombre de "
 "fichiers."
 
-#: diff.c:6180
+#: diff.c:6183
 msgid "only found copies from modified paths due to too many files."
 msgstr ""
 "recherche uniquement des copies par modification de chemin à cause d'un trop "
 "grand nombre de fichiers."
 
-#: diff.c:6183
+#: diff.c:6186
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -3144,41 +3153,41 @@
 "vous souhaitez peut-être régler la variable %s à au moins %d et réessayer le "
 "commande."
 
-#: dir.c:537
+#: dir.c:549
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
 msgstr ""
 "le spécificateur de chemin '%s' ne correspond à aucun fichier connu de git"
 
-#: dir.c:926
+#: dir.c:938
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr "impossible d'utiliser %s comme fichier d'exclusion"
 
-#: dir.c:1843
+#: dir.c:1877
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "impossible d'ouvrir le répertoire '%s'"
 
-#: dir.c:2085
+#: dir.c:2128
 msgid "failed to get kernel name and information"
 msgstr "echec de l'obtention d'information de kernel"
 
-#: dir.c:2209
+#: dir.c:2252
 msgid "untracked cache is disabled on this system or location"
 msgstr "Le cache non suivi est désactivé sur ce système ou sur cet endroit"
 
-#: dir.c:3013
+#: dir.c:3056
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "fichier d'index corrompu dans le dépôt %s"
 
-#: dir.c:3058 dir.c:3063
+#: dir.c:3101 dir.c:3106
 #, c-format
 msgid "could not create directories for %s"
 msgstr "impossible de créer les répertoires pour %s"
 
-#: dir.c:3092
+#: dir.c:3135
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "impossible de migrer le répertoire git de '%s' vers '%s'"
@@ -3199,12 +3208,12 @@
 msgid "could not stat file '%s'"
 msgstr "impossible de stat le fichier '%s'"
 
-#: environment.c:150
+#: environment.c:148
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "Espaces de nom de Git \"%s\""
 
-#: environment.c:332
+#: environment.c:330
 #, c-format
 msgid "could not set GIT_DIR to '%s'"
 msgstr "impossible de régler GIT_DIR à '%s'"
@@ -3214,159 +3223,155 @@
 msgid "too many args to run %s"
 msgstr "trop d'arguments pour lancer %s"
 
-#: fetch-object.c:17
-msgid "Remote with no URL"
-msgstr "Dépôt distant sans URL"
-
-#: fetch-pack.c:151
+#: fetch-pack.c:150
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack : liste superficielle attendue"
 
-#: fetch-pack.c:154
+#: fetch-pack.c:153
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr ""
 "git fetch-pack : paquet de vidage attendu après une liste superficielle"
 
-#: fetch-pack.c:165
+#: fetch-pack.c:164
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr "git fetch-pack : ACK/NACK attendu, paquet de nettoyage reçu"
 
-#: fetch-pack.c:185
+#: fetch-pack.c:184
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr "git fetch-pack : ACK/NACK attendu, '%s' reçu"
 
-#: fetch-pack.c:196
+#: fetch-pack.c:195
 msgid "unable to write to remote"
 msgstr "impossible d'écrire sur un distant"
 
-#: fetch-pack.c:258
+#: fetch-pack.c:257
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "--stateless-rpc nécessite multi_ack_detailed"
 
-#: fetch-pack.c:360 fetch-pack.c:1284
+#: fetch-pack.c:356 fetch-pack.c:1280
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "ligne de superficiel invalide : %s"
 
-#: fetch-pack.c:366 fetch-pack.c:1290
+#: fetch-pack.c:362 fetch-pack.c:1286
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "ligne de fin de superficiel invalide : %s"
 
-#: fetch-pack.c:368 fetch-pack.c:1292
+#: fetch-pack.c:364 fetch-pack.c:1288
 #, c-format
 msgid "object not found: %s"
 msgstr "objet non trouvé : %s"
 
-#: fetch-pack.c:371 fetch-pack.c:1295
+#: fetch-pack.c:367 fetch-pack.c:1291
 #, c-format
 msgid "error in object: %s"
 msgstr "Erreur dans l'objet : %s"
 
-#: fetch-pack.c:373 fetch-pack.c:1297
+#: fetch-pack.c:369 fetch-pack.c:1293
 #, c-format
 msgid "no shallow found: %s"
 msgstr "Pas de superficiel trouvé : %s"
 
-#: fetch-pack.c:376 fetch-pack.c:1301
+#: fetch-pack.c:372 fetch-pack.c:1297
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "superficiel/non superficiel attendu, %s trouvé"
 
-#: fetch-pack.c:417
+#: fetch-pack.c:414
 #, c-format
 msgid "got %s %d %s"
 msgstr "réponse %s %d %s"
 
-#: fetch-pack.c:434
+#: fetch-pack.c:431
 #, c-format
 msgid "invalid commit %s"
 msgstr "commit invalide %s"
 
-#: fetch-pack.c:465
+#: fetch-pack.c:462
 msgid "giving up"
 msgstr "abandon"
 
-#: fetch-pack.c:477 progress.c:277
+#: fetch-pack.c:475 progress.c:312
 msgid "done"
 msgstr "fait"
 
-#: fetch-pack.c:489
+#: fetch-pack.c:487
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "%s trouvé (%d) %s"
 
-#: fetch-pack.c:535
+#: fetch-pack.c:533
 #, c-format
 msgid "Marking %s as complete"
 msgstr "Marquage de %s comme terminé"
 
-#: fetch-pack.c:744
+#: fetch-pack.c:742
 #, c-format
 msgid "already have %s (%s)"
 msgstr "%s déjà possédé (%s)"
 
-#: fetch-pack.c:783
+#: fetch-pack.c:781
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack : impossible de dupliquer le démultiplexeur latéral"
 
-#: fetch-pack.c:791
+#: fetch-pack.c:789
 msgid "protocol error: bad pack header"
 msgstr "erreur de protocole : mauvais entête de paquet"
 
-#: fetch-pack.c:859
+#: fetch-pack.c:857
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack : impossible de dupliquer %s"
 
-#: fetch-pack.c:875
+#: fetch-pack.c:873
 #, c-format
 msgid "%s failed"
 msgstr "échec de %s"
 
-#: fetch-pack.c:877
+#: fetch-pack.c:875
 msgid "error in sideband demultiplexer"
 msgstr "erreur dans le démultiplexer latéral"
 
-#: fetch-pack.c:908
+#: fetch-pack.c:907
 #, c-format
 msgid "Server version is %.*s"
 msgstr "La version du serveur est %.*s"
 
-#: fetch-pack.c:913 fetch-pack.c:919 fetch-pack.c:922 fetch-pack.c:928
-#: fetch-pack.c:932 fetch-pack.c:936 fetch-pack.c:940 fetch-pack.c:944
-#: fetch-pack.c:948 fetch-pack.c:952 fetch-pack.c:956 fetch-pack.c:960
-#: fetch-pack.c:966 fetch-pack.c:972 fetch-pack.c:977 fetch-pack.c:982
+#: fetch-pack.c:912 fetch-pack.c:918 fetch-pack.c:921 fetch-pack.c:927
+#: fetch-pack.c:931 fetch-pack.c:935 fetch-pack.c:939 fetch-pack.c:943
+#: fetch-pack.c:947 fetch-pack.c:951 fetch-pack.c:955 fetch-pack.c:959
+#: fetch-pack.c:965 fetch-pack.c:971 fetch-pack.c:976 fetch-pack.c:981
 #, c-format
 msgid "Server supports %s"
 msgstr "Le serveur supporte %s"
 
-#: fetch-pack.c:915
+#: fetch-pack.c:914
 msgid "Server does not support shallow clients"
 msgstr "Le serveur ne supporte les clients superficiels"
 
-#: fetch-pack.c:975
+#: fetch-pack.c:974
 msgid "Server does not support --shallow-since"
 msgstr "Le receveur ne gère pas --shallow-since"
 
-#: fetch-pack.c:980
+#: fetch-pack.c:979
 msgid "Server does not support --shallow-exclude"
 msgstr "Le receveur ne gère pas --shallow-exclude"
 
-#: fetch-pack.c:984
+#: fetch-pack.c:983
 msgid "Server does not support --deepen"
 msgstr "Le receveur ne gère pas --deepen"
 
-#: fetch-pack.c:1001
+#: fetch-pack.c:1000
 msgid "no common commits"
 msgstr "pas de commit commun"
 
-#: fetch-pack.c:1013 fetch-pack.c:1462
+#: fetch-pack.c:1012 fetch-pack.c:1468
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack : échec de le récupération."
 
-#: fetch-pack.c:1151
+#: fetch-pack.c:1150
 msgid "Server does not support shallow requests"
 msgstr "Le serveur ne supporte les requêtes superficielles"
 
@@ -3374,72 +3379,72 @@
 msgid "Server supports filter"
 msgstr "Le serveur supporte filter"
 
-#: fetch-pack.c:1184
+#: fetch-pack.c:1180
 msgid "unable to write request to remote"
 msgstr "impossible d'écrire la requête sur le distant"
 
-#: fetch-pack.c:1202
+#: fetch-pack.c:1198
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "erreur à la lecture de l'entête de section '%s'"
 
-#: fetch-pack.c:1208
+#: fetch-pack.c:1204
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "'%s' attendu, '%s' reçu"
 
-#: fetch-pack.c:1247
+#: fetch-pack.c:1243
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "ligne d'acquittement inattendue : '%s'"
 
-#: fetch-pack.c:1252
+#: fetch-pack.c:1248
 #, c-format
 msgid "error processing acks: %d"
 msgstr "erreur lors du traitement des acquittements : %d"
 
-#: fetch-pack.c:1262
+#: fetch-pack.c:1258
 msgid "expected packfile to be sent after 'ready'"
 msgstr "fichier paquet attendu à envoyer après 'ready'"
 
-#: fetch-pack.c:1264
+#: fetch-pack.c:1260
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr "aucune autre section attendue à envoyer après absence de 'ready'"
 
-#: fetch-pack.c:1306
+#: fetch-pack.c:1302
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "erreur lors du traitement de l'information de superficialité : %d"
 
-#: fetch-pack.c:1353
+#: fetch-pack.c:1349
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "wanted-ref attendu, '%s' trouvé"
 
-#: fetch-pack.c:1358
+#: fetch-pack.c:1354
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "wanted-ref inattendu : '%s'"
 
-#: fetch-pack.c:1363
+#: fetch-pack.c:1359
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "erreur lors du traitement des références voulues : %d"
 
-#: fetch-pack.c:1689
+#: fetch-pack.c:1693
 msgid "no matching remote head"
 msgstr "pas de HEAD distante correspondante"
 
-#: fetch-pack.c:1712 builtin/clone.c:686
+#: fetch-pack.c:1716 builtin/clone.c:685
 msgid "remote did not send all necessary objects"
 msgstr "le serveur distant n'a pas envoyé tous les objets nécessaires"
 
-#: fetch-pack.c:1739
+#: fetch-pack.c:1743
 #, c-format
 msgid "no such remote ref %s"
 msgstr "référence distante inconnue %s"
 
-#: fetch-pack.c:1742
+#: fetch-pack.c:1746
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "Le serveur n'autorise pas de requête pour l'objet %s non annoncé"
@@ -3462,18 +3467,26 @@
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr "couleur invalide '%.*s' ignorée dans log.graphColors"
 
-#: grep.c:2117
+#: grep.c:668
+msgid ""
+"given pattern contains NULL byte (via -f <file>). This is only supported "
+"with -P under PCRE v2"
+msgstr ""
+"le motif fourni contient des octets NUL (via -f <fichier>). Ce n'est "
+"supporté qu'avec -P avec PCRE v2"
+
+#: grep.c:2124
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "'%s' : lecture de %s impossible"
 
-#: grep.c:2134 setup.c:164 builtin/clone.c:409 builtin/diff.c:82
+#: grep.c:2141 setup.c:165 builtin/clone.c:408 builtin/diff.c:82
 #: builtin/rm.c:135
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "échec du stat de '%s'"
 
-#: grep.c:2145
+#: grep.c:2152
 #, c-format
 msgid "'%s': short read"
 msgstr "'%s' : lecture tronquée"
@@ -3620,12 +3633,12 @@
 msgid "git version [<options>]"
 msgstr "git version [<options>]"
 
-#: help.c:782
+#: help.c:783
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s: %s - %s"
 
-#: help.c:786
+#: help.c:787
 msgid ""
 "\n"
 "Did you mean this?"
@@ -3698,43 +3711,59 @@
 msgid "invalid date format: %s"
 msgstr "format de date invalide : %s"
 
-#: list-objects.c:129
+#: list-objects.c:127
 #, c-format
 msgid "entry '%s' in tree %s has tree mode, but is not a tree"
 msgstr ""
 "l'entrée '%s' dans l'arbre %s a un mode d'arbre, mais n'est pas un arbre"
 
-#: list-objects.c:142
+#: list-objects.c:140
 #, c-format
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr ""
 "l'entrée '%s' dans l'arbre %s a un mode de blob, mais n'est pas un blob"
 
-#: list-objects.c:378
+#: list-objects.c:375
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "impossible de charger l'arbre racine pour le commit %s"
 
-#: list-objects-filter-options.c:36
-msgid "multiple filter-specs cannot be combined"
-msgstr "impossible de combiner des spécificateurs multiples de filtre"
+#: list-objects-filter.c:492
+#, c-format
+msgid "unable to access sparse blob in '%s'"
+msgstr "impossible d'accéder au blob clairsemé dans '%s'"
+
+#: list-objects-filter.c:495
+#, c-format
+msgid "unable to parse sparse filter data in %s"
+msgstr "impossible d'analyser la donnée de filtre clairsemé dans %s"
 
 #: list-objects-filter-options.c:58
 msgid "expected 'tree:<depth>'"
 msgstr "attendu : 'tree:<profondeur>'"
 
-#: list-objects-filter-options.c:84
+#: list-objects-filter-options.c:73
 msgid "sparse:path filters support has been dropped"
 msgstr "sparse : le support des filtres de chemin a été abandonné"
 
-#: list-objects-filter-options.c:94
+#: list-objects-filter-options.c:86
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "spécificateur de filtre invalide '%s'"
 
-#: list-objects-filter-options.c:158
-msgid "cannot change partial clone promisor remote"
-msgstr "impossible de modifier le prometteur distant de clone partiel"
+#: list-objects-filter-options.c:102
+#, c-format
+msgid "must escape char in sub-filter-spec: '%c'"
+msgstr ""
+"le caractère doit être échappé dans le spécificateur de sous-filtre : '%c'"
+
+#: list-objects-filter-options.c:144
+msgid "expected something after combine:"
+msgstr "quelque chose attendu après combine :"
+
+#: list-objects-filter-options.c:226
+msgid "multiple filter-specs cannot be combined"
+msgstr "impossible de combiner des spécificateurs multiples de filtre"
 
 #: lockfile.c:151
 #, c-format
@@ -3764,117 +3793,113 @@
 msgid "failed to read the cache"
 msgstr "impossible de lire le cache"
 
-#: merge.c:107 rerere.c:720 builtin/am.c:1885 builtin/am.c:1919
-#: builtin/checkout.c:536 builtin/checkout.c:796 builtin/clone.c:786
+#: merge.c:107 rerere.c:720 builtin/am.c:1874 builtin/am.c:1908
+#: builtin/checkout.c:537 builtin/checkout.c:796 builtin/clone.c:785
 #: builtin/stash.c:264
 msgid "unable to write new index file"
 msgstr "impossible d'écrire le nouveau fichier d'index"
 
-#: merge-recursive.c:322
+#: merge-recursive.c:367
 msgid "(bad commit)\n"
 msgstr "(mauvais commit)\n"
 
-#: merge-recursive.c:345
+#: merge-recursive.c:390
 #, c-format
 msgid "add_cacheinfo failed for path '%s'; merge aborting."
 msgstr "échec de addinfo_cache pour le chemin '%s' ; abandon de la fusion."
 
-#: merge-recursive.c:354
+#: merge-recursive.c:399
 #, c-format
 msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
 msgstr "échec de addinfo_cache pour le chemin '%s' ; abandon de la fusion."
 
-#: merge-recursive.c:437
-msgid "error building trees"
-msgstr "erreur de construction des arbres"
-
-#: merge-recursive.c:863
+#: merge-recursive.c:885
 #, c-format
 msgid "failed to create path '%s'%s"
 msgstr "impossible de créer le chemin '%s' %s"
 
-#: merge-recursive.c:874
+#: merge-recursive.c:896
 #, c-format
 msgid "Removing %s to make room for subdirectory\n"
 msgstr "Suppression de %s pour faire de la place pour le sous-répertoire\n"
 
-#: merge-recursive.c:888 merge-recursive.c:907
+#: merge-recursive.c:910 merge-recursive.c:929
 msgid ": perhaps a D/F conflict?"
 msgstr ": peut-être un conflit D/F ?"
 
-#: merge-recursive.c:897
+#: merge-recursive.c:919
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
 msgstr "refus de perdre le fichier non suivi '%s'"
 
-#: merge-recursive.c:938 builtin/cat-file.c:40
+#: merge-recursive.c:960 builtin/cat-file.c:41
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "impossible de lire l'objet %s '%s'"
 
-#: merge-recursive.c:941
+#: merge-recursive.c:965
 #, c-format
 msgid "blob expected for %s '%s'"
 msgstr "blob attendu pour %s '%s'"
 
-#: merge-recursive.c:965
+#: merge-recursive.c:990
 #, c-format
 msgid "failed to open '%s': %s"
 msgstr "échec à l'ouverture de '%s' : %s"
 
-#: merge-recursive.c:976
+#: merge-recursive.c:1001
 #, c-format
 msgid "failed to symlink '%s': %s"
 msgstr "échec à la création du lien symbolique '%s' : %s"
 
-#: merge-recursive.c:981
+#: merge-recursive.c:1006
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "ne sait pas traiter %06o %s '%s'"
 
-#: merge-recursive.c:1177
+#: merge-recursive.c:1199
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "Échec de la fusion du sous-module %s (non extrait)"
 
-#: merge-recursive.c:1184
+#: merge-recursive.c:1206
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr "Échec de fusion du sous-module %s (commits non présents)"
 
-#: merge-recursive.c:1191
+#: merge-recursive.c:1213
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr ""
 "Échec de la fusion du sous-module %s (les commits ne descendent pas de la "
 "base de fusion)"
 
-#: merge-recursive.c:1199 merge-recursive.c:1211
+#: merge-recursive.c:1221 merge-recursive.c:1233
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "Avance rapide du sous-module %s au commit suivant :"
 
-#: merge-recursive.c:1202 merge-recursive.c:1214
+#: merge-recursive.c:1224 merge-recursive.c:1236
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "Avance rapide du sous-module %s"
 
-#: merge-recursive.c:1237
+#: merge-recursive.c:1259
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 "Échec de fusion du sous-module %s (fusion suivant les commits non trouvée)"
 
-#: merge-recursive.c:1241
+#: merge-recursive.c:1263
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "Échec de fusion du sous-module %s (pas en avance rapide)"
 
-#: merge-recursive.c:1242
+#: merge-recursive.c:1264
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr "Résolution possible de fusion trouvée pour le sous-module :\n"
 
-#: merge-recursive.c:1245
+#: merge-recursive.c:1267
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -3891,33 +3916,33 @@
 "\n"
 "qui acceptera cette suggestion.\n"
 
-#: merge-recursive.c:1254
+#: merge-recursive.c:1276
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr "Échec de fusion du sous-module %s (plusieurs fusions trouvées)"
 
-#: merge-recursive.c:1327
+#: merge-recursive.c:1349
 msgid "Failed to execute internal merge"
 msgstr "Échec à l'exécution de la fusion interne"
 
-#: merge-recursive.c:1332
+#: merge-recursive.c:1354
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "Impossible d'ajouter %s à la base de données"
 
-#: merge-recursive.c:1364
+#: merge-recursive.c:1386
 #, c-format
 msgid "Auto-merging %s"
 msgstr "Fusion automatique de %s"
 
-#: merge-recursive.c:1387
+#: merge-recursive.c:1410
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr ""
 "Erreur : refus de perdre le fichier non suivi %s ; écriture dans %s à la "
 "place."
 
-#: merge-recursive.c:1459
+#: merge-recursive.c:1482
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -3926,7 +3951,7 @@
 "CONFLIT (%s/suppression) : %s supprimé dans %s et %s dans %s. Version %s de "
 "%s laissée dans l'arbre."
 
-#: merge-recursive.c:1464
+#: merge-recursive.c:1487
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -3935,7 +3960,7 @@
 "CONFLIT (%s/suppression) : %s supprimé dans %s et %s à %s dans %s. Version "
 "%s de %s laissée dans l'arbre."
 
-#: merge-recursive.c:1471
+#: merge-recursive.c:1494
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -3944,7 +3969,7 @@
 "CONFLIT (%s/suppression) : %s supprimé dans %s et %s dans %s. Version %s de "
 "%s laissée dans l'arbre dans le fichier %s."
 
-#: merge-recursive.c:1476
+#: merge-recursive.c:1499
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -3953,41 +3978,41 @@
 "CONFLIT (%s/suppression) : %s supprimé dans %s et %s à %s dans %s. Version "
 "%s de %s laissée dans l'arbre dans le fichier %s."
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1534
 msgid "rename"
 msgstr "renommage"
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1534
 msgid "renamed"
 msgstr "renommé"
 
-#: merge-recursive.c:1591 merge-recursive.c:2450 merge-recursive.c:3094
+#: merge-recursive.c:1614 merge-recursive.c:2472 merge-recursive.c:3117
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "Refus de perdre le fichier modifié %s"
 
-#: merge-recursive.c:1601
+#: merge-recursive.c:1624
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr "Refus de perdre le fichier non suivi %s, même s'il gêne."
 
-#: merge-recursive.c:1659
+#: merge-recursive.c:1682
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 "CONFLIT (renommage/ajout) : Renommage de %s->%s dans %s. %s ajouté dans %s"
 
-#: merge-recursive.c:1690
+#: merge-recursive.c:1713
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s est un répertoire dans %s ajouté plutôt comme %s"
 
-#: merge-recursive.c:1695
+#: merge-recursive.c:1718
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr "Refus de perdre le fichier non suivi %s ; ajout comme %s à la place"
 
-#: merge-recursive.c:1714
+#: merge-recursive.c:1737
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -3996,18 +4021,18 @@
 "CONFLIT (renommage/renommage) : Renommage de \"%s\"->\"%s\" dans la branche "
 "\"%s\" et renommage \"%s\"->\"%s\" dans \"%s\"%s"
 
-#: merge-recursive.c:1719
+#: merge-recursive.c:1742
 msgid " (left unresolved)"
 msgstr " (laissé non résolu)"
 
-#: merge-recursive.c:1828
+#: merge-recursive.c:1851
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "CONFLIT (renommage/renommage) : renommage '%s'->'%s' dans %s. Renommage '%s'-"
 ">'%s' dans %s"
 
-#: merge-recursive.c:2035
+#: merge-recursive.c:2056
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -4018,7 +4043,7 @@
 "parce que le répertoire %s a été renommé en plusieurs autres répertoires, "
 "sans aucune destination récupérant la majorité des fichiers."
 
-#: merge-recursive.c:2067
+#: merge-recursive.c:2088
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -4027,7 +4052,7 @@
 "CONFLIT (renommage implicite de répertoire) : le répertoire/fichier %s gêne "
 "des renommages implicites de répertoire déplaçant les chemins suivants : %s."
 
-#: merge-recursive.c:2077
+#: merge-recursive.c:2098
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -4036,7 +4061,7 @@
 "CONFLIT (renommage implicite de répertoire) : impossible de transformer "
 "plusieurs chemins sur %s ; les chemins concernés sont : %s"
 
-#: merge-recursive.c:2169
+#: merge-recursive.c:2190
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -4045,7 +4070,7 @@
 "CONFLIT (renommage/renommage) : renommage du répertoire %s->%s dans %s. "
 "Renommage de répertoire %s->%s dans %s"
 
-#: merge-recursive.c:2413
+#: merge-recursive.c:2435
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
@@ -4054,52 +4079,52 @@
 "AVERTISSEMENT : ne renomme pas %s->%s dans %s, parce que %s lui-même a été "
 "renommé."
 
-#: merge-recursive.c:2938
+#: merge-recursive.c:2961
 #, c-format
 msgid "cannot read object %s"
 msgstr "impossible de lire l'objet %s"
 
-#: merge-recursive.c:2941
+#: merge-recursive.c:2964
 #, c-format
 msgid "object %s is not a blob"
 msgstr "l'objet %s n'est pas un blob"
 
-#: merge-recursive.c:3005
+#: merge-recursive.c:3028
 msgid "modify"
 msgstr "modification"
 
-#: merge-recursive.c:3005
+#: merge-recursive.c:3028
 msgid "modified"
 msgstr "modifié"
 
-#: merge-recursive.c:3017
+#: merge-recursive.c:3040
 msgid "content"
 msgstr "contenu"
 
-#: merge-recursive.c:3021
+#: merge-recursive.c:3044
 msgid "add/add"
 msgstr "ajout/ajout"
 
-#: merge-recursive.c:3044
+#: merge-recursive.c:3067
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "%s sauté (fusion identique à l'existant)"
 
-#: merge-recursive.c:3066 git-submodule.sh:937
+#: merge-recursive.c:3089 git-submodule.sh:937
 msgid "submodule"
 msgstr "sous-module"
 
-#: merge-recursive.c:3067
+#: merge-recursive.c:3090
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "CONFLIT (%s) : Conflit de fusion dans %s"
 
-#: merge-recursive.c:3097
+#: merge-recursive.c:3120
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Ajout plutôt comme %s"
 
-#: merge-recursive.c:3179
+#: merge-recursive.c:3203
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
@@ -4108,7 +4133,7 @@
 "Chemin mis à jour : %s ajouté dans %s dans un répertoire qui a été renommé "
 "en %s ; déplacé dans %s."
 
-#: merge-recursive.c:3182
+#: merge-recursive.c:3206
 #, c-format
 msgid ""
 "CONFLICT (file location): %s added in %s inside a directory that was renamed "
@@ -4118,7 +4143,7 @@
 "a été renommé dans %s, ce qui suggère qu'il devrait peut-être être déplacé "
 "vers %s."
 
-#: merge-recursive.c:3186
+#: merge-recursive.c:3210
 #, c-format
 msgid ""
 "Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
@@ -4127,7 +4152,7 @@
 "Chemin mis à jour : %s renommé en %s dans %s, dans un répertoire qui a été "
 "renommé en %s ; déplacé dans %s."
 
-#: merge-recursive.c:3189
+#: merge-recursive.c:3213
 #, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
@@ -4137,36 +4162,60 @@
 "répertoire qui a été renommé dans %s, ce qui suggère qu'il devrait peut-être "
 "être déplacé vers %s."
 
-#: merge-recursive.c:3303
+#: merge-recursive.c:3327
 #, c-format
 msgid "Removing %s"
 msgstr "Suppression de %s"
 
-#: merge-recursive.c:3326
+#: merge-recursive.c:3350
 msgid "file/directory"
 msgstr "fichier/répertoire"
 
-#: merge-recursive.c:3331
+#: merge-recursive.c:3355
 msgid "directory/file"
 msgstr "répertoire/fichier"
 
-#: merge-recursive.c:3338
+#: merge-recursive.c:3362
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
 "CONFLIT (%s) : Il y a un répertoire nommé %s dans %s. Ajout de %s comme %s"
 
-#: merge-recursive.c:3347
+#: merge-recursive.c:3371
 #, c-format
 msgid "Adding %s"
 msgstr "Ajout de %s"
 
-#: merge-recursive.c:3356
+#: merge-recursive.c:3380
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "CONFLIT (ajout/ajout) : Conflit de fusion dans %s"
 
-#: merge-recursive.c:3394
+#: merge-recursive.c:3424
+msgid "Already up to date!"
+msgstr "Déjà à jour !"
+
+#: merge-recursive.c:3433
+#, c-format
+msgid "merging of trees %s and %s failed"
+msgstr "échec de fusion des arbres %s et %s"
+
+#: merge-recursive.c:3537
+msgid "Merging:"
+msgstr "Fusion :"
+
+#: merge-recursive.c:3550
+#, c-format
+msgid "found %u common ancestor:"
+msgid_plural "found %u common ancestors:"
+msgstr[0] "%u ancêtre commun trouvé :"
+msgstr[1] "%u ancêtres communs trouvés :"
+
+#: merge-recursive.c:3600
+msgid "merge returned no commit"
+msgstr "la fusion n'a pas retourné de commit"
+
+#: merge-recursive.c:3659
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -4176,137 +4225,113 @@
 "fusion :\n"
 "  %s"
 
-#: merge-recursive.c:3405
-msgid "Already up to date!"
-msgstr "Déjà à jour !"
-
-#: merge-recursive.c:3414
-#, c-format
-msgid "merging of trees %s and %s failed"
-msgstr "échec de fusion des arbres %s et %s"
-
-#: merge-recursive.c:3513
-msgid "Merging:"
-msgstr "Fusion :"
-
-#: merge-recursive.c:3526
-#, c-format
-msgid "found %u common ancestor:"
-msgid_plural "found %u common ancestors:"
-msgstr[0] "%u ancêtre commun trouvé :"
-msgstr[1] "%u ancêtres communs trouvés :"
-
-#: merge-recursive.c:3565
-msgid "merge returned no commit"
-msgstr "la fusion n'a pas retourné de commit"
-
-#: merge-recursive.c:3631
+#: merge-recursive.c:3756
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "Impossible d'analyser l'objet '%s'"
 
-#: merge-recursive.c:3647 builtin/merge.c:698 builtin/merge.c:869
+#: merge-recursive.c:3774 builtin/merge.c:694 builtin/merge.c:874
 msgid "Unable to write index."
 msgstr "Impossible d'écrire l'index."
 
-#: midx.c:69
+#: midx.c:68
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "le fichier d'index multi-paquet %s est trop petit"
 
-#: midx.c:85
+#: midx.c:84
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr ""
 "la signature de l'index multi-paquet 0x%08x ne correspond pas à la signature "
 "0x%08x"
 
-#: midx.c:90
+#: midx.c:89
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "la version d'index multi-paquet %d n'est pas reconnue"
 
-#: midx.c:95
+#: midx.c:94
 #, c-format
 msgid "hash version %u does not match"
 msgstr "la version %u du condensé ne correspond pas"
 
-#: midx.c:109
+#: midx.c:108
 msgid "invalid chunk offset (too large)"
 msgstr "décalage de section invalide (trop grand)"
 
-#: midx.c:133
+#: midx.c:132
 msgid "terminating multi-pack-index chunk id appears earlier than expected"
 msgstr ""
 "identifiant de terminaison de tronçon d'index multi-paquet terminant "
 "apparaît plus tôt qu'attendu"
 
-#: midx.c:146
+#: midx.c:145
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "index multi-paquet manque de tronçon de nom de paquet"
 
-#: midx.c:148
+#: midx.c:147
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "index multi-paquet manque de tronçon de d'étalement OID requis"
 
-#: midx.c:150
+#: midx.c:149
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "index multi-paquet manque de tronçon de recherche OID"
 
-#: midx.c:152
+#: midx.c:151
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "index multi-paquet manque de tronçon de décalage d'objet"
 
-#: midx.c:166
+#: midx.c:165
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr ""
 "index multi-paquet les noms de paquets sont en désordre : '%s' avant '%s'"
 
-#: midx.c:211
+#: midx.c:210
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "mauvais pack-int-id : %u (%u paquets au total)"
 
-#: midx.c:261
+#: midx.c:260
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr ""
 "multi-pack-index stock un décalage en 64-bit, mais off_t est trop petit"
 
-#: midx.c:289
+#: midx.c:288
 msgid "error preparing packfile from multi-pack-index"
 msgstr "erreur à la préparation du fichier paquet depuis un index multi-paquet"
 
-#: midx.c:470
+#: midx.c:469
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "échec de l'ajout du fichier paquet '%s'"
 
-#: midx.c:476
+#: midx.c:475
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "échec à l'ouverture du fichier paquet '%s'"
 
-#: midx.c:536
+#: midx.c:535
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "échec de localisation de l'objet %d dans le fichier paquet"
 
-#: midx.c:865
+#: midx.c:864
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "fichier paquet à éliminer %s non trouvé"
 
-#: midx.c:1036
+#: midx.c:1035
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "échec du nettoyage de l'index de multi-paquet à %s"
 
-#: midx.c:1091
+#: midx.c:1090
 msgid "Looking for referenced packfiles"
 msgstr "Recherche de fichiers paquets référencés"
 
-#: midx.c:1106
+#: midx.c:1105
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
@@ -4314,57 +4339,57 @@
 "étalement oid en désordre : étalement[%d] = %<PRIx32> > %<PRIx32> = "
 "étalement[%d]"
 
-#: midx.c:1110
+#: midx.c:1109
 msgid "Verifying OID order in MIDX"
 msgstr "Vérification de l'ordre des OID dans MIDX"
 
-#: midx.c:1119
+#: midx.c:1118
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "recherche d'oid en désordre : oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1138
+#: midx.c:1137
 msgid "Sorting objects by packfile"
 msgstr "Classement des objets par fichier paquet"
 
-#: midx.c:1144
+#: midx.c:1143
 msgid "Verifying object offsets"
 msgstr "Vérification des décalages des objets"
 
-#: midx.c:1160
+#: midx.c:1159
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "échec de la lecture de l'élément de cache pour oid[%d] = %s"
 
-#: midx.c:1166
+#: midx.c:1165
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "impossible de lire le fichier paquet %s"
 
-#: midx.c:1175
+#: midx.c:1174
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "décalage d'objet incorrect pour oid[%d] = %s : %<PRIx64> != %<PRIx64>"
 
-#: midx.c:1350
+#: midx.c:1349
 msgid "could not start pack-objects"
 msgstr "Impossible de démarrer le groupement d'objets"
 
-#: midx.c:1369
+#: midx.c:1368
 msgid "could not finish pack-objects"
 msgstr "Impossible de finir le groupement d'objets"
 
-#: name-hash.c:532
+#: name-hash.c:537
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
 msgstr "impossible de créer le fil lazy_dir : %s"
 
-#: name-hash.c:554
+#: name-hash.c:559
 #, c-format
 msgid "unable to create lazy_name thread: %s"
 msgstr "impossible de créer le fil lazy_name : %s"
 
-#: name-hash.c:560
+#: name-hash.c:565
 #, c-format
 msgid "unable to join lazy_name thread: %s"
 msgstr "impossible de joindre le fil lazy_name : %s"
@@ -4408,41 +4433,41 @@
 msgid "Bad %s value: '%s'"
 msgstr "Mauvaise valeur de %s : '%s'"
 
-#: object.c:54
+#: object.c:53
 #, c-format
 msgid "invalid object type \"%s\""
 msgstr "type d'objet invalide \"%s\""
 
-#: object.c:174
+#: object.c:173
 #, c-format
 msgid "object %s is a %s, not a %s"
 msgstr "l'objet %s est de type %s, pas de type %s"
 
-#: object.c:234
+#: object.c:233
 #, c-format
 msgid "object %s has unknown type id %d"
 msgstr "l'objet %s a un id de type inconnu %d"
 
-#: object.c:247
+#: object.c:246
 #, c-format
 msgid "unable to parse object: %s"
 msgstr "impossible d'analyser l'objet : %s"
 
-#: object.c:267 object.c:278
+#: object.c:266 object.c:277
 #, c-format
 msgid "hash mismatch %s"
 msgstr "incohérence de hachage %s"
 
-#: packfile.c:648
+#: packfile.c:641
 msgid "offset before end of packfile (broken .idx?)"
 msgstr "offset avant la fin du fichier paquet (.idx cassé ?)"
 
-#: packfile.c:1899
+#: packfile.c:1887
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr "offset avant le début de l'index de paquet pour %s (index corrompu ?)"
 
-#: packfile.c:1903
+#: packfile.c:1891
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr ""
@@ -4488,26 +4513,26 @@
 msgid "did you mean `--%s` (with two dashes ?)"
 msgstr "vouliez-vous dire `--%s` (avec deux signes moins)?"
 
-#: parse-options.c:859
+#: parse-options.c:860
 #, c-format
 msgid "unknown option `%s'"
 msgstr "option inconnue « %s »"
 
-#: parse-options.c:861
+#: parse-options.c:862
 #, c-format
 msgid "unknown switch `%c'"
 msgstr "bascule inconnue « %c »"
 
-#: parse-options.c:863
+#: parse-options.c:864
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr "option non-ascii inconnue dans la chaîne : '%s'"
 
-#: parse-options.c:887
+#: parse-options.c:888
 msgid "..."
 msgstr "..."
 
-#: parse-options.c:906
+#: parse-options.c:907
 #, c-format
 msgid "usage: %s"
 msgstr "usage : %s"
@@ -4515,21 +4540,21 @@
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
 #.
-#: parse-options.c:912
+#: parse-options.c:913
 #, c-format
 msgid "   or: %s"
 msgstr "   ou : %s"
 
-#: parse-options.c:915
+#: parse-options.c:916
 #, c-format
 msgid "    %s"
 msgstr "    %s"
 
-#: parse-options.c:954
+#: parse-options.c:955
 msgid "-NUM"
 msgstr "-NUM"
 
-#: parse-options.c:968
+#: parse-options.c:969
 #, c-format
 msgid "alias of --%s"
 msgstr "alias pour --%s"
@@ -4704,29 +4729,38 @@
 msgid "unable to parse --pretty format"
 msgstr "impossible d'analyser le format --pretty"
 
-#: range-diff.c:70
+#: promisor-remote.c:25
+msgid "Remote with no URL"
+msgstr "Dépôt distant sans URL"
+
+#: promisor-remote.c:61
+#, c-format
+msgid "promisor remote name cannot begin with '/': %s"
+msgstr "un nom de prometteur distant ne peut pas commencer par '/' : %s"
+
+#: range-diff.c:71
 msgid "could not start `log`"
 msgstr "impossible de démarrer `log`"
 
-#: range-diff.c:72
+#: range-diff.c:73
 msgid "could not read `log` output"
 msgstr "impossible de lire la sortie de `log`"
 
-#: range-diff.c:91 sequencer.c:5021
+#: range-diff.c:92 sequencer.c:4985
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "impossible d'analyser le commit '%s'"
 
-#: range-diff.c:117
+#: range-diff.c:118
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "impossible d'analyser l'entête git '%.*s'"
 
-#: range-diff.c:274
+#: range-diff.c:275
 msgid "failed to generate diff"
 msgstr "échec de la génération de diff"
 
-#: range-diff.c:506 range-diff.c:508
+#: range-diff.c:507 range-diff.c:509
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "impossible d'analyser le journal pour '%s'"
@@ -4772,11 +4806,11 @@
 msgid "'%s' appears as both a file and as a directory"
 msgstr "'%s' existe à la fois comme un fichier et un répertoire"
 
-#: read-cache.c:1499
+#: read-cache.c:1520
 msgid "Refresh index"
 msgstr "Rafraîchir l'index"
 
-#: read-cache.c:1613
+#: read-cache.c:1635
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -4785,7 +4819,7 @@
 "version d'index renseignée, mais la valeur est invalide.\n"
 "Utilisation de la version %i"
 
-#: read-cache.c:1623
+#: read-cache.c:1645
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -4794,138 +4828,138 @@
 "GIT_INDEX_VERSION est renseigné, mais la valeur est invalide.\n"
 "Utilisation de la version %i"
 
-#: read-cache.c:1679
+#: read-cache.c:1701
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "signature incorrecte 0x%08x"
 
-#: read-cache.c:1682
+#: read-cache.c:1704
 #, c-format
 msgid "bad index version %d"
 msgstr "mauvaise version d'index %d"
 
-#: read-cache.c:1691
+#: read-cache.c:1713
 msgid "bad index file sha1 signature"
 msgstr "mauvaise signature sha1 d'index"
 
-#: read-cache.c:1721
+#: read-cache.c:1743
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "l'index utilise l'extension %.4s qui n'est pas comprise"
 
-#: read-cache.c:1723
+#: read-cache.c:1745
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "extension %.4s ignorée"
 
-#: read-cache.c:1760
+#: read-cache.c:1782
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "format d'entrée d'index inconnu 0x%08x"
 
-#: read-cache.c:1776
+#: read-cache.c:1798
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "champ de nom malformé dans l'index, près du chemin '%s'"
 
-#: read-cache.c:1833
+#: read-cache.c:1855
 msgid "unordered stage entries in index"
 msgstr "entrées de préparation non ordonnées dans l'index"
 
-#: read-cache.c:1836
+#: read-cache.c:1858
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "entrées multiples de préparation pour le fichier fusionné '%s'"
 
-#: read-cache.c:1839
+#: read-cache.c:1861
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "entrées de préparation non ordonnées pour '%s'"
 
-#: read-cache.c:1946 read-cache.c:2234 rerere.c:565 rerere.c:599 rerere.c:1111
-#: builtin/add.c:460 builtin/check-ignore.c:178 builtin/checkout.c:467
-#: builtin/checkout.c:651 builtin/clean.c:956 builtin/commit.c:347
+#: read-cache.c:1967 read-cache.c:2255 rerere.c:565 rerere.c:599 rerere.c:1111
+#: builtin/add.c:460 builtin/check-ignore.c:178 builtin/checkout.c:468
+#: builtin/checkout.c:652 builtin/clean.c:967 builtin/commit.c:347
 #: builtin/diff-tree.c:120 builtin/grep.c:499 builtin/mv.c:145
 #: builtin/reset.c:245 builtin/rm.c:271 builtin/submodule--helper.c:330
 msgid "index file corrupt"
 msgstr "fichier d'index corrompu"
 
-#: read-cache.c:2087
+#: read-cache.c:2108
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "impossible de créer le fil load_cache_entries : %s"
 
-#: read-cache.c:2100
+#: read-cache.c:2121
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "impossible de joindre le fil load_cach_entries : %s"
 
-#: read-cache.c:2133
+#: read-cache.c:2154
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s : l'ouverture du fichier d'index a échoué"
 
-#: read-cache.c:2137
+#: read-cache.c:2158
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s : impossible de faire un stat sur l'index ouvert"
 
-#: read-cache.c:2141
+#: read-cache.c:2162
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s : fichier d'index plus petit qu'attendu"
 
-#: read-cache.c:2145
+#: read-cache.c:2166
 #, c-format
 msgid "%s: unable to map index file"
 msgstr "%s : impossible de mapper le fichier d'index"
 
-#: read-cache.c:2187
+#: read-cache.c:2208
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "impossible de créer le fil load_index_extensions : %s"
 
-#: read-cache.c:2214
+#: read-cache.c:2235
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "impossible de joindre le fil load_index_extensions : %s"
 
-#: read-cache.c:2246
+#: read-cache.c:2267
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "impossible de rafraîchir l'index partagé '%s'"
 
-#: read-cache.c:2293
+#: read-cache.c:2314
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "index cassé, %s attendu dans %s, %s obtenu"
 
-#: read-cache.c:2989 wrapper.c:658 builtin/merge.c:1114
+#: read-cache.c:3010 wrapper.c:622 builtin/merge.c:1119
 #, c-format
 msgid "could not close '%s'"
 msgstr "impossible de fermer '%s'"
 
-#: read-cache.c:3092 sequencer.c:2358 sequencer.c:3928
+#: read-cache.c:3113 sequencer.c:2296 sequencer.c:3917
 #, c-format
 msgid "could not stat '%s'"
 msgstr "stat impossible de '%s'"
 
-#: read-cache.c:3105
+#: read-cache.c:3126
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "impossible d'ouvrir le répertoire git : %s"
 
-#: read-cache.c:3117
+#: read-cache.c:3138
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "échec lors de l'unlink : %s"
 
-#: read-cache.c:3142
+#: read-cache.c:3163
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "impossible de régler les bits de droit de '%s'"
 
-#: read-cache.c:3291
+#: read-cache.c:3312
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s : impossible de revenir à l'étape 0"
@@ -5032,8 +5066,8 @@
 msgid "Note that empty commits are commented out"
 msgstr "Veuillez noter que les commits vides sont en commentaire"
 
-#: rebase-interactive.c:105 rerere.c:485 rerere.c:692 sequencer.c:3447
-#: sequencer.c:3473 sequencer.c:5120 builtin/fsck.c:356 builtin/rebase.c:235
+#: rebase-interactive.c:105 rerere.c:485 rerere.c:692 sequencer.c:3388
+#: sequencer.c:3414 sequencer.c:5084 builtin/fsck.c:356 builtin/rebase.c:235
 #, c-format
 msgid "could not write '%s'"
 msgstr "impossible d'écrire '%s'"
@@ -5080,7 +5114,7 @@
 msgid "ignoring dangling symref %s"
 msgstr "symref pendant %s ignoré"
 
-#: refs.c:669 ref-filter.c:2092
+#: refs.c:669 ref-filter.c:2098
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "réf cassé %s ignoré"
@@ -5105,14 +5139,14 @@
 msgid "unexpected object ID when writing '%s'"
 msgstr "id d'objet inattendu pendant l'écriture de '%s'"
 
-#: refs.c:833 sequencer.c:403 sequencer.c:2709 sequencer.c:2913
-#: sequencer.c:2927 sequencer.c:3184 sequencer.c:5037 wrapper.c:656
+#: refs.c:833 sequencer.c:403 sequencer.c:2647 sequencer.c:2851
+#: sequencer.c:2865 sequencer.c:3122 sequencer.c:5001 wrapper.c:620
 #, c-format
 msgid "could not write to '%s'"
 msgstr "impossible d'écrire dans '%s'"
 
-#: refs.c:860 wrapper.c:225 wrapper.c:395 builtin/am.c:715
-#: builtin/rebase.c:1003
+#: refs.c:860 wrapper.c:188 wrapper.c:358 builtin/am.c:714
+#: builtin/rebase.c:1004
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "impossible d'ouvrir '%s' en écriture"
@@ -5147,21 +5181,21 @@
 msgid "update_ref failed for ref '%s': %s"
 msgstr "échec de update_ref pour la réf '%s' : %s"
 
-#: refs.c:2012
+#: refs.c:2023
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "mises à jour multiples pour la réf '%s' non permises"
 
-#: refs.c:2044
+#: refs.c:2055
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "mises à jour des références interdites en environnement de quarantaine"
 
-#: refs.c:2140 refs.c:2170
+#: refs.c:2151 refs.c:2181
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "'%s' existe ; impossible de créer '%s'"
 
-#: refs.c:2146 refs.c:2181
+#: refs.c:2157 refs.c:2192
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "impossible de traiter '%s' et '%s' en même temps"
@@ -5171,13 +5205,13 @@
 msgid "could not remove reference %s"
 msgstr "impossible de supprimer la référence %s"
 
-#: refs/files-backend.c:1248 refs/packed-backend.c:1532
-#: refs/packed-backend.c:1542
+#: refs/files-backend.c:1248 refs/packed-backend.c:1541
+#: refs/packed-backend.c:1551
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr "Impossible de supprimer la référence %s : %s"
 
-#: refs/files-backend.c:1251 refs/packed-backend.c:1545
+#: refs/files-backend.c:1251 refs/packed-backend.c:1554
 #, c-format
 msgid "could not delete references: %s"
 msgstr "impossible de supprimer les références : %s"
@@ -5188,7 +5222,7 @@
 msgstr "spécificateur de réference invalide : '%s'"
 
 # à priori on parle d'une branche ici
-#: ref-filter.c:42 wt-status.c:1934
+#: ref-filter.c:42 wt-status.c:1938
 msgid "gone"
 msgstr "disparue"
 
@@ -5207,283 +5241,283 @@
 msgid "ahead %d, behind %d"
 msgstr "en avance de %d, en retard de %d"
 
-#: ref-filter.c:162
+#: ref-filter.c:165
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr "format attendu : %%(color:<couleur>)"
 
-#: ref-filter.c:164
+#: ref-filter.c:167
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr "couleur non reconnue : %%(color:%s)"
 
-#: ref-filter.c:186
+#: ref-filter.c:189
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr "Valeur entière attendue refname:lstrip=%s"
 
-#: ref-filter.c:190
+#: ref-filter.c:193
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr "Valeur entière attendue refname:rstrip=%s"
 
-#: ref-filter.c:192
+#: ref-filter.c:195
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr "argument %%(%s) non reconnu : %s"
 
-#: ref-filter.c:247
+#: ref-filter.c:250
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr "%%(objecttype) n'accepte pas d'argument"
 
-#: ref-filter.c:269
+#: ref-filter.c:272
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr "argument %%(objectsize) non reconnu : %s"
 
-#: ref-filter.c:277
+#: ref-filter.c:280
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr "%%(deltabase) n'accepte pas d'argument"
 
-#: ref-filter.c:289
+#: ref-filter.c:292
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr "%%(body) n'accepte pas d'argument"
 
-#: ref-filter.c:298
+#: ref-filter.c:301
 #, c-format
 msgid "%%(subject) does not take arguments"
 msgstr "%%(subject) n'accepte pas d'argument"
 
-#: ref-filter.c:320
+#: ref-filter.c:323
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr "argument %%(trailers) inconnu : %s"
 
-#: ref-filter.c:349
+#: ref-filter.c:352
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr "valeur positive attendue contents:lines=%s"
 
-#: ref-filter.c:351
+#: ref-filter.c:354
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr "argument %%(contents) non reconnu : %s"
 
-#: ref-filter.c:366
+#: ref-filter.c:369
 #, c-format
 msgid "positive value expected objectname:short=%s"
 msgstr "valeur positive attendue objectname:short=%s"
 
-#: ref-filter.c:370
+#: ref-filter.c:373
 #, c-format
 msgid "unrecognized %%(objectname) argument: %s"
 msgstr "argument %%(objectname) non reconnu : %s"
 
-#: ref-filter.c:400
+#: ref-filter.c:403
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr "format attendu : %%(align:<largeur>,<position>)"
 
-#: ref-filter.c:412
+#: ref-filter.c:415
 #, c-format
 msgid "unrecognized position:%s"
 msgstr "position non reconnue : %s"
 
-#: ref-filter.c:419
+#: ref-filter.c:422
 #, c-format
 msgid "unrecognized width:%s"
 msgstr "largeur non reconnue : %s"
 
-#: ref-filter.c:428
+#: ref-filter.c:431
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr "argument %%(align) non reconnu : %s"
 
-#: ref-filter.c:436
+#: ref-filter.c:439
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr "valeur positive attendue avec l'atome %%(align)"
 
-#: ref-filter.c:454
+#: ref-filter.c:457
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr "argument %%(if) non reconnu : %s"
 
-#: ref-filter.c:556
+#: ref-filter.c:559
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "nom de champ malformé %.*s"
 
-#: ref-filter.c:583
+#: ref-filter.c:586
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "nom de champ inconnu : %.*s"
 
-#: ref-filter.c:587
+#: ref-filter.c:590
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
 msgstr ""
 "pas un dépôt git, mais le champ '%.*s' nécessite l'accès aux données d'objet"
 
-#: ref-filter.c:711
+#: ref-filter.c:714
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr "format : atome %%(if) utilisé sans un atome %%(then)"
 
-#: ref-filter.c:774
+#: ref-filter.c:777
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr "format : atome %%(then) utilisé sans un atome %%(if)"
 
-#: ref-filter.c:776
+#: ref-filter.c:779
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr "format : atome %%(then) utilisé plus d'une fois"
 
-#: ref-filter.c:778
+#: ref-filter.c:781
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "format: atome %%(then) utilisé après %%(else)"
 
-#: ref-filter.c:806
+#: ref-filter.c:809
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr "format : atome %%(else) utilisé sans un atome %%(if)"
 
-#: ref-filter.c:808
+#: ref-filter.c:811
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr "format : atome %%(else) utilisé sans un atome %%(then)"
 
-#: ref-filter.c:810
+#: ref-filter.c:813
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr "format : atome %%(else) utilisé plus d'une fois"
 
-#: ref-filter.c:825
+#: ref-filter.c:828
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr "format : atome %%(end) utilisé sans atome correspondant"
 
-#: ref-filter.c:882
+#: ref-filter.c:885
 #, c-format
 msgid "malformed format string %s"
 msgstr "Chaîne de formatage mal formée %s"
 
-#: ref-filter.c:1485
+#: ref-filter.c:1488
 #, c-format
 msgid "no branch, rebasing %s"
 msgstr "aucune branche, rebasage de %s"
 
-#: ref-filter.c:1488
+#: ref-filter.c:1491
 #, c-format
 msgid "no branch, rebasing detached HEAD %s"
 msgstr "aucune branche, rebasage de la HEAD détachée %s"
 
-#: ref-filter.c:1491
+#: ref-filter.c:1494
 #, c-format
 msgid "no branch, bisect started on %s"
 msgstr "aucune branche, bisect a démarré sur %s"
 
-#: ref-filter.c:1501
+#: ref-filter.c:1504
 msgid "no branch"
 msgstr "aucune branche"
 
-#: ref-filter.c:1537 ref-filter.c:1743
+#: ref-filter.c:1540 ref-filter.c:1749
 #, c-format
 msgid "missing object %s for %s"
 msgstr "objet manquant %s pour %s"
 
-#: ref-filter.c:1547
+#: ref-filter.c:1550
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "échec de parse_object_buffer sur %s pour %s"
 
-#: ref-filter.c:1998
+#: ref-filter.c:2004
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "objet malformé à '%s'"
 
-#: ref-filter.c:2087
+#: ref-filter.c:2093
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "réf avec un nom cassé %s ignoré"
 
-#: ref-filter.c:2382
+#: ref-filter.c:2389
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "format: atome %%(end) manquant"
 
-#: ref-filter.c:2482
+#: ref-filter.c:2489
 #, c-format
 msgid "option `%s' is incompatible with --merged"
 msgstr "l'option « %s » est incompatible avec --merged"
 
-#: ref-filter.c:2485
+#: ref-filter.c:2492
 #, c-format
 msgid "option `%s' is incompatible with --no-merged"
 msgstr "l'option « %s » est incompatible avec --no-merged"
 
-#: ref-filter.c:2495
+#: ref-filter.c:2502
 #, c-format
 msgid "malformed object name %s"
 msgstr "nom d'objet malformé %s"
 
-#: ref-filter.c:2500
+#: ref-filter.c:2507
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "l'option '%s' doit pointer sur un commit"
 
-#: remote.c:363
+#: remote.c:366
 #, c-format
 msgid "config remote shorthand cannot begin with '/': %s"
 msgstr ""
 "un raccourci de configuration de distant ne peut pas commencer par '/' : %s"
 
-#: remote.c:410
+#: remote.c:413
 msgid "more than one receivepack given, using the first"
 msgstr "plus d'un receivepack fournis, utilisation du premier"
 
-#: remote.c:418
+#: remote.c:421
 msgid "more than one uploadpack given, using the first"
 msgstr "plus d'un uploadpack fournis, utilisation du premier"
 
-#: remote.c:608
+#: remote.c:611
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
 msgstr "Impossible de récupérer à la fois %s et %s pour %s"
 
-#: remote.c:612
+#: remote.c:615
 #, c-format
 msgid "%s usually tracks %s, not %s"
 msgstr "%s suit habituellement %s, pas %s"
 
-#: remote.c:616
+#: remote.c:619
 #, c-format
 msgid "%s tracks both %s and %s"
 msgstr "%s suit à la fois %s et %s"
 
-#: remote.c:684
+#: remote.c:687
 #, c-format
 msgid "key '%s' of pattern had no '*'"
 msgstr "la clé '%s' du modèle n'a pas de '*'"
 
-#: remote.c:694
+#: remote.c:697
 #, c-format
 msgid "value '%s' of pattern has no '*'"
 msgstr "la valeur '%s' du modèle n'a pas de '*'"
 
-#: remote.c:1000
+#: remote.c:1003
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr ""
 "le spécificateur de référence source %s ne correspond à aucune référence"
 
-#: remote.c:1005
+#: remote.c:1008
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr ""
@@ -5493,7 +5527,7 @@
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1020
+#: remote.c:1023
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -5517,7 +5551,7 @@
 "Aucune n'a fonctionné, donc abandon. Veuillez spécifier une référence "
 "totalement qualifiée."
 
-#: remote.c:1040
+#: remote.c:1043
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -5528,7 +5562,7 @@
 "Souhaitiez-vous créer une nouvelle branche en poussant sur\n"
 "'%s:refs/heads/%s' ?"
 
-#: remote.c:1045
+#: remote.c:1048
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -5539,7 +5573,7 @@
 "Souhaitiez-vous créer une nouvelle étiquette en poussant sur\n"
 "'%s:refs/tags/%s' ?"
 
-#: remote.c:1050
+#: remote.c:1053
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -5550,7 +5584,7 @@
 "Souhaitiez-vous créer un nouvel arbre en poussant sur\n"
 "'%s:refs/tags/%s' ?"
 
-#: remote.c:1055
+#: remote.c:1058
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -5561,119 +5595,119 @@
 "Souhaitiez-vous créer un nouveau blob en poussant sur\n"
 "'%s:refs/tags/%s' ?"
 
-#: remote.c:1091
+#: remote.c:1094
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "'%s' ne peut pas être résolue comme une branche"
 
-#: remote.c:1102
+#: remote.c:1105
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "suppression d '%s' impossible : la référence distante n'existe pas"
 
-#: remote.c:1114
+#: remote.c:1117
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr ""
 "le spécificateur de référence dst %s correspond à plus d'un spécificateur de "
 "références"
 
-#: remote.c:1121
+#: remote.c:1124
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "le spécificateur de référence dst %s reçoit depuis plus d'une source"
 
-#: remote.c:1624 remote.c:1725
+#: remote.c:1627 remote.c:1728
 msgid "HEAD does not point to a branch"
 msgstr "HEAD ne pointe pas sur une branche"
 
-#: remote.c:1633
+#: remote.c:1636
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "pas de branche '%s'"
 
-#: remote.c:1636
+#: remote.c:1639
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "aucune branche amont configurée pour la branche '%s'"
 
-#: remote.c:1642
+#: remote.c:1645
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "la branche amont '%s' n'est pas stockée comme branche de suivi"
 
-#: remote.c:1657
+#: remote.c:1660
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr ""
 "la destination de poussée '%s' sur le serveur distant '%s' n'a pas de "
 "branche locale de suivi"
 
-#: remote.c:1669
+#: remote.c:1672
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "la branche '%s' n'a aucune branche distante de poussée"
 
-#: remote.c:1679
+#: remote.c:1682
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "les références de spec pour '%s' n'incluent pas '%s'"
 
-#: remote.c:1692
+#: remote.c:1695
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "la poussée n'a pas de destination (push.default vaut 'nothing')"
 
-#: remote.c:1714
+#: remote.c:1717
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr ""
 "impossible de résoudre une poussée 'simple' pour une destination unique"
 
-#: remote.c:1840
+#: remote.c:1843
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "impossible de trouver la référence distante %s"
 
-#: remote.c:1853
+#: remote.c:1856
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* Référence bizarre '%s' ignorée localement"
 
-#: remote.c:2016
+#: remote.c:2019
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "Votre branche est basée sur '%s', mais la branche amont a disparu.\n"
 
-#: remote.c:2020
+#: remote.c:2023
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (utilisez \"git branch --unset-upstream\" pour corriger)\n"
 
-#: remote.c:2023
+#: remote.c:2026
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Votre branche est à jour avec '%s'.\n"
 
-#: remote.c:2027
+#: remote.c:2030
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Votre branche et '%s' font référence à des commits différents.\n"
 
-#: remote.c:2030
+#: remote.c:2033
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (utilisez \"%s\" pour plus de détails)\n"
 
-#: remote.c:2034
+#: remote.c:2037
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "Votre branche est en avance sur '%s' de %d commit.\n"
 msgstr[1] "Votre branche est en avance sur '%s' de %d commits.\n"
 
-#: remote.c:2040
+#: remote.c:2043
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (utilisez \"git push\" pour publier vos commits locaux)\n"
 
-#: remote.c:2043
+#: remote.c:2046
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -5685,11 +5719,11 @@
 "Votre branche est en retard sur '%s' de %d commits, et peut être mise à jour "
 "en avance rapide.\n"
 
-#: remote.c:2051
+#: remote.c:2054
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (utilisez \"git pull\" pour mettre à jour votre branche locale)\n"
 
-#: remote.c:2054
+#: remote.c:2057
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -5704,12 +5738,12 @@
 "Votre branche et '%s' ont divergé,\n"
 "et ont %d et %d commits différents chacune respectivement.\n"
 
-#: remote.c:2064
+#: remote.c:2067
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr ""
 "  (utilisez \"git pull\" pour fusionner la branche distante dans la vôtre)\n"
 
-#: remote.c:2247
+#: remote.c:2250
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "impossible d'analyser le nom attendu d'objet '%s'"
@@ -5787,7 +5821,7 @@
 msgid "Recorded preimage for '%s'"
 msgstr "Pré-image enregistrée pour '%s'"
 
-#: rerere.c:881 submodule.c:2023 builtin/log.c:1773
+#: rerere.c:881 submodule.c:2023 builtin/log.c:1790
 #: builtin/submodule--helper.c:1418 builtin/submodule--helper.c:1428
 #, c-format
 msgid "could not create directory '%s'"
@@ -5822,20 +5856,20 @@
 msgid "unable to open rr-cache directory"
 msgstr "impossible d'ouvrir le répertoire rr-cache"
 
-#: revision.c:2507
+#: revision.c:2509
 msgid "your current branch appears to be broken"
 msgstr "votre branche actuelle semble cassée"
 
-#: revision.c:2510
+#: revision.c:2512
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "votre branche actuelle '%s' ne contient encore aucun commit"
 
-#: revision.c:2710
+#: revision.c:2720
 msgid "--first-parent is incompatible with --bisect"
 msgstr "--first-parent est incompatible avec --bisect"
 
-#: revision.c:2714
+#: revision.c:2724
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L ne supporte pas encore les formats de diff autres que -p et -s"
 
@@ -5858,31 +5892,31 @@
 "Vous pouvez désactiver cet avertissement avec `git config advice.ignoredHook "
 "false`."
 
-#: send-pack.c:141
+#: send-pack.c:142
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr ""
 "paquet de nettoyage inattendu pendant la lecture de l'état de dépaquetage "
 "distant"
 
-#: send-pack.c:143
+#: send-pack.c:144
 #, c-format
 msgid "unable to parse remote unpack status: %s"
 msgstr "impossible d'analyser l'état de dépaquetage distant : %s"
 
-#: send-pack.c:145
+#: send-pack.c:146
 #, c-format
 msgid "remote unpack failed: %s"
 msgstr "le dépaquetage a échoué : %s"
 
-#: send-pack.c:306
+#: send-pack.c:307
 msgid "failed to sign the push certificate"
 msgstr "impossible de signer le certificat de poussée"
 
-#: send-pack.c:420
+#: send-pack.c:421
 msgid "the receiving end does not support --signed push"
 msgstr "Le receveur ne gère pas les poussées avec --signed"
 
-#: send-pack.c:422
+#: send-pack.c:423
 msgid ""
 "not sending a push certificate since the receiving end does not support --"
 "signed push"
@@ -5890,11 +5924,11 @@
 "pas d'envoi de certificat de poussée car le receveur ne gère pas les "
 "poussées avec --signed"
 
-#: send-pack.c:434
+#: send-pack.c:435
 msgid "the receiving end does not support --atomic push"
 msgstr "Le receveur ne gère pas les poussées avec --atomic"
 
-#: send-pack.c:439
+#: send-pack.c:440
 msgid "the receiving end does not support push options"
 msgstr "Le receveur ne gère pas les options de poussées"
 
@@ -5908,7 +5942,7 @@
 msgid "could not delete '%s'"
 msgstr "Impossible de supprimer '%s'"
 
-#: sequencer.c:311 builtin/rebase.c:759 builtin/rebase.c:1645 builtin/rm.c:369
+#: sequencer.c:311 builtin/rebase.c:760 builtin/rebase.c:1676 builtin/rm.c:369
 #, c-format
 msgid "could not remove '%s'"
 msgstr "impossible de supprimer '%s'"
@@ -5948,7 +5982,7 @@
 "avec 'git add <chemins>' ou 'git rm <chemins>'\n"
 "puis validez le résultat avec 'git commit'"
 
-#: sequencer.c:401 sequencer.c:2909
+#: sequencer.c:401 sequencer.c:2847
 #, c-format
 msgid "could not lock '%s'"
 msgstr "impossible de verrouiller '%s'"
@@ -5958,15 +5992,15 @@
 msgid "could not write eol to '%s'"
 msgstr "impossible d'écrire la fin de ligne dans '%s'"
 
-#: sequencer.c:413 sequencer.c:2714 sequencer.c:2915 sequencer.c:2929
-#: sequencer.c:3192
+#: sequencer.c:413 sequencer.c:2652 sequencer.c:2853 sequencer.c:2867
+#: sequencer.c:3130
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "échec lors de la finalisation de '%s'"
 
-#: sequencer.c:436 sequencer.c:981 sequencer.c:1655 sequencer.c:2734
-#: sequencer.c:3174 sequencer.c:3283 builtin/am.c:245 builtin/commit.c:763
-#: builtin/merge.c:1112 builtin/rebase.c:567
+#: sequencer.c:436 sequencer.c:1585 sequencer.c:2672 sequencer.c:3112
+#: sequencer.c:3221 builtin/am.c:244 builtin/commit.c:763 builtin/merge.c:1117
+#: builtin/rebase.c:568
 #, c-format
 msgid "could not read '%s'"
 msgstr "impossible de lire '%s'"
@@ -5993,70 +6027,65 @@
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase -i".
 #.
-#: sequencer.c:632
+#: sequencer.c:631
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s: Impossible d'écrire le nouveau fichier index"
 
-#: sequencer.c:649
+#: sequencer.c:648
 msgid "unable to update cache tree"
 msgstr "impossible de mettre à jour l'arbre de cache"
 
-#: sequencer.c:663
+#: sequencer.c:662
 msgid "could not resolve HEAD commit"
 msgstr "impossible de résoudre le commit HEAD"
 
-#: sequencer.c:743
+#: sequencer.c:742
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr "aucune clé présente dans '%.*s'"
 
-#: sequencer.c:754
+#: sequencer.c:753
 #, c-format
 msgid "unable to dequote value of '%s'"
 msgstr "Impossible de décoter la valeur de '%s'"
 
-#: sequencer.c:791 wrapper.c:227 wrapper.c:397 builtin/am.c:706
-#: builtin/am.c:798 builtin/merge.c:1109 builtin/rebase.c:1045
+#: sequencer.c:790 wrapper.c:190 wrapper.c:360 builtin/am.c:705
+#: builtin/am.c:797 builtin/merge.c:1114 builtin/rebase.c:1046
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "impossible d'ouvrir '%s' en lecture"
 
-#: sequencer.c:801
+#: sequencer.c:800
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr "'GIT_AUTHOR_NAME' déjà fourni"
 
-#: sequencer.c:806
+#: sequencer.c:805
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr "'GIT_AUTHOR_EMAIL' déjà fourni"
 
-#: sequencer.c:811
+#: sequencer.c:810
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr "'GIT_AUTHOR_DATE' déjà fourni"
 
-#: sequencer.c:815
+#: sequencer.c:814
 #, c-format
 msgid "unknown variable '%s'"
 msgstr "variable inconnue '%s'"
 
-#: sequencer.c:820
+#: sequencer.c:819
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr "'GIT_AUTHOR_NAME' manquant"
 
-#: sequencer.c:822
+#: sequencer.c:821
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr "'GIT_AUTHOR_EMAIL' manquant"
 
-#: sequencer.c:824
+#: sequencer.c:823
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr "'GIT_AUTHOR_DATE' manquant"
 
-#: sequencer.c:884
-#, c-format
-msgid "invalid date format '%s' in '%s'"
-msgstr "format de date invalide '%s' dans '%s'"
-
-#: sequencer.c:901
+#: sequencer.c:872
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -6085,15 +6114,11 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:995
-msgid "writing root commit"
-msgstr "écriture du commit racine"
-
-#: sequencer.c:1216
+#: sequencer.c:1146
 msgid "'prepare-commit-msg' hook failed"
 msgstr "échec du crochet 'prepare-commit-msg'"
 
-#: sequencer.c:1223
+#: sequencer.c:1153
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -6122,7 +6147,7 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1236
+#: sequencer.c:1166
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -6148,326 +6173,326 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1278
+#: sequencer.c:1208
 msgid "couldn't look up newly created commit"
 msgstr "impossible de retrouver le commit nouvellement créé"
 
-#: sequencer.c:1280
+#: sequencer.c:1210
 msgid "could not parse newly created commit"
 msgstr "impossible d'analyser le commit nouvellement créé"
 
-#: sequencer.c:1326
+#: sequencer.c:1256
 msgid "unable to resolve HEAD after creating commit"
 msgstr "impossible de résoudre HEAD après création du commit"
 
-#: sequencer.c:1328
+#: sequencer.c:1258
 msgid "detached HEAD"
 msgstr "HEAD détachée"
 
-#: sequencer.c:1332
+#: sequencer.c:1262
 msgid " (root-commit)"
 msgstr " (commit racine)"
 
-#: sequencer.c:1353
+#: sequencer.c:1283
 msgid "could not parse HEAD"
 msgstr "impossible de lire HEAD"
 
-#: sequencer.c:1355
+#: sequencer.c:1285
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s n'est pas un commit !"
 
-#: sequencer.c:1359 builtin/commit.c:1571
+#: sequencer.c:1289 builtin/commit.c:1571
 msgid "could not parse HEAD commit"
 msgstr "impossible d'analyser le commit HEAD"
 
-#: sequencer.c:1411 sequencer.c:2004
+#: sequencer.c:1341 sequencer.c:1933
 msgid "unable to parse commit author"
 msgstr "impossible d'analyser l'auteur du commit"
 
-#: sequencer.c:1421 builtin/am.c:1573 builtin/merge.c:684
+#: sequencer.c:1352 builtin/am.c:1561 builtin/merge.c:684
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree a échoué à écrire un arbre"
 
-#: sequencer.c:1438 sequencer.c:1499
+#: sequencer.c:1369 sequencer.c:1429
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "impossible de lire le message de validation de '%s'"
 
-#: sequencer.c:1465 builtin/am.c:1595 builtin/commit.c:1670 builtin/merge.c:878
-#: builtin/merge.c:903
+#: sequencer.c:1396 builtin/am.c:1583 builtin/commit.c:1670 builtin/merge.c:883
+#: builtin/merge.c:908
 msgid "failed to write commit object"
 msgstr "échec de l'écriture de l'objet commit"
 
-#: sequencer.c:1526
+#: sequencer.c:1456
 #, c-format
 msgid "could not parse commit %s"
 msgstr "impossible d'analyser le commit %s"
 
-#: sequencer.c:1531
+#: sequencer.c:1461
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "impossible d'analyser le commit parent %s"
 
-#: sequencer.c:1605 sequencer.c:1715
+#: sequencer.c:1535 sequencer.c:1645
 #, c-format
 msgid "unknown command: %d"
 msgstr "commande inconnue : %d"
 
-#: sequencer.c:1662 sequencer.c:1687
+#: sequencer.c:1592 sequencer.c:1617
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr "Ceci est la combinaison de %d commits."
 
-#: sequencer.c:1672
+#: sequencer.c:1602
 msgid "need a HEAD to fixup"
 msgstr "une HEAD est nécessaire à la correction"
 
-#: sequencer.c:1674 sequencer.c:3219
+#: sequencer.c:1604 sequencer.c:3157
 msgid "could not read HEAD"
 msgstr "Impossible de lire HEAD"
 
-#: sequencer.c:1676
+#: sequencer.c:1606
 msgid "could not read HEAD's commit message"
 msgstr "impossible de lire le message de validation de HEAD"
 
-#: sequencer.c:1682
+#: sequencer.c:1612
 #, c-format
 msgid "cannot write '%s'"
 msgstr "impossible d'écrire '%s'"
 
-#: sequencer.c:1689 git-rebase--preserve-merges.sh:496
+#: sequencer.c:1619 git-rebase--preserve-merges.sh:496
 msgid "This is the 1st commit message:"
 msgstr "Ceci est le premier message de validation :"
 
-#: sequencer.c:1697
+#: sequencer.c:1627
 #, c-format
 msgid "could not read commit message of %s"
 msgstr "impossible de lire le message de validation de %s"
 
-#: sequencer.c:1704
+#: sequencer.c:1634
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Ceci est le message de validation numéro %d :"
 
-#: sequencer.c:1710
+#: sequencer.c:1640
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "Le message de validation %d sera ignoré :"
 
-#: sequencer.c:1798
+#: sequencer.c:1728
 msgid "your index file is unmerged."
 msgstr "votre fichier d'index n'est pas fusionné."
 
-#: sequencer.c:1805
+#: sequencer.c:1735
 msgid "cannot fixup root commit"
 msgstr "impossible de réparer le commit racine"
 
-#: sequencer.c:1824
+#: sequencer.c:1754
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "le commit %s est une fusion mais l'option -m n'a pas été spécifiée."
 
-#: sequencer.c:1832 sequencer.c:1840
+#: sequencer.c:1762 sequencer.c:1770
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "le commit %s n'a pas de parent %d"
 
-#: sequencer.c:1846
+#: sequencer.c:1776
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "impossible d'obtenir un message de validation pour %s"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:1865
+#: sequencer.c:1795
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s : impossible d'analyser le commit parent %s"
 
-#: sequencer.c:1930
+#: sequencer.c:1860
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "impossible de renommer '%s' en '%s'"
 
-#: sequencer.c:1985
+#: sequencer.c:1915
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "impossible d'annuler %s... %s"
 
-#: sequencer.c:1986
+#: sequencer.c:1916
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "impossible d'appliquer %s... %s"
 
-#: sequencer.c:2045
+#: sequencer.c:1983
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s : échec à la lecture de l'index"
 
-#: sequencer.c:2052
+#: sequencer.c:1990
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s : échec du rafraîchissement de l'index"
 
-#: sequencer.c:2128
+#: sequencer.c:2066
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s n'accepte pas d'argument : '%s'"
 
-#: sequencer.c:2137
+#: sequencer.c:2075
 #, c-format
 msgid "missing arguments for %s"
 msgstr "argument manquant pour %s"
 
-#: sequencer.c:2174
+#: sequencer.c:2112
 #, c-format
 msgid "could not parse '%.*s'"
 msgstr "impossible d'analyser '%.*s'"
 
-#: sequencer.c:2228
+#: sequencer.c:2166
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "ligne %d invalide : %.*s"
 
-#: sequencer.c:2239
+#: sequencer.c:2177
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "'%s' impossible avec le commit précédent"
 
-#: sequencer.c:2287 builtin/rebase.c:153 builtin/rebase.c:178
+#: sequencer.c:2225 builtin/rebase.c:153 builtin/rebase.c:178
 #: builtin/rebase.c:204 builtin/rebase.c:229
 #, c-format
 msgid "could not read '%s'."
 msgstr "impossible de lire '%s'."
 
-#: sequencer.c:2323
+#: sequencer.c:2261
 msgid "cancelling a cherry picking in progress"
 msgstr "annulation d'un picorage en cours"
 
-#: sequencer.c:2330
+#: sequencer.c:2268
 msgid "cancelling a revert in progress"
 msgstr "annulation d'un retour en cours"
 
-#: sequencer.c:2364
+#: sequencer.c:2302
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "veuillez corriger ceci en utilisant 'git rebase --edit-todo'."
 
-#: sequencer.c:2366
+#: sequencer.c:2304
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "feuille d'instruction inutilisable : '%s'"
 
-#: sequencer.c:2371
+#: sequencer.c:2309
 msgid "no commits parsed."
 msgstr "aucun commit analysé."
 
-#: sequencer.c:2382
+#: sequencer.c:2320
 msgid "cannot cherry-pick during a revert."
 msgstr "impossible de picorer pendant l'annulation d'un commit."
 
-#: sequencer.c:2384
+#: sequencer.c:2322
 msgid "cannot revert during a cherry-pick."
 msgstr "impossible d'annuler un commit pendant un picorage."
 
-#: sequencer.c:2466
+#: sequencer.c:2404
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr "valeur invalide pour %s : %s"
 
-#: sequencer.c:2553
+#: sequencer.c:2491
 msgid "unusable squash-onto"
 msgstr "\"écrase-sur\" inutilisable"
 
-#: sequencer.c:2569
+#: sequencer.c:2507
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "feuille d'options malformée : %s"
 
-#: sequencer.c:2652 sequencer.c:4351
+#: sequencer.c:2590 sequencer.c:4308
 msgid "empty commit set passed"
 msgstr "l'ensemble de commits spécifié est vide"
 
-#: sequencer.c:2668
+#: sequencer.c:2606
 msgid "revert is already in progress"
 msgstr "un retour est déjà en cours"
 
-#: sequencer.c:2670
+#: sequencer.c:2608
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "essayez \"git revert (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2673
+#: sequencer.c:2611
 msgid "cherry-pick is already in progress"
 msgstr "un picorage est déjà en cours"
 
-#: sequencer.c:2675
+#: sequencer.c:2613
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "essayez \"git cherry-pick (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2689
+#: sequencer.c:2627
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "impossible de créer le répertoire de séquenceur '%s'"
 
-#: sequencer.c:2704
+#: sequencer.c:2642
 msgid "could not lock HEAD"
 msgstr "impossible de verrouiller HEAD"
 
-#: sequencer.c:2764 sequencer.c:4103
+#: sequencer.c:2702 sequencer.c:4057
 msgid "no cherry-pick or revert in progress"
 msgstr "aucun picorage ou retour en cours"
 
-#: sequencer.c:2766 sequencer.c:2777
+#: sequencer.c:2704 sequencer.c:2715
 msgid "cannot resolve HEAD"
 msgstr "impossible de résoudre HEAD"
 
-#: sequencer.c:2768 sequencer.c:2812
+#: sequencer.c:2706 sequencer.c:2750
 msgid "cannot abort from a branch yet to be born"
 msgstr "impossible d'abandonner depuis une branche non encore créée"
 
-#: sequencer.c:2798 builtin/grep.c:734
+#: sequencer.c:2736 builtin/grep.c:736
 #, c-format
 msgid "cannot open '%s'"
 msgstr "impossible d'ouvrir '%s'"
 
-#: sequencer.c:2800
+#: sequencer.c:2738
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "impossible de lire '%s' : %s"
 
-#: sequencer.c:2801
+#: sequencer.c:2739
 msgid "unexpected end of file"
 msgstr "fin de fichier inattendue"
 
-#: sequencer.c:2807
+#: sequencer.c:2745
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "le fichier HEAD de préparation de picorage '%s' est corrompu"
 
-#: sequencer.c:2818
+#: sequencer.c:2756
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr ""
 "Vous semblez avoir déplacé la HEAD. Pas de rembobinage, vérifiez votre HEAD !"
 
-#: sequencer.c:2859
+#: sequencer.c:2797
 msgid "no revert in progress"
 msgstr "Pas de retour en cours ?"
 
-#: sequencer.c:2867
+#: sequencer.c:2805
 msgid "no cherry-pick in progress"
 msgstr "aucun picorage en cours"
 
-#: sequencer.c:2877
+#: sequencer.c:2815
 msgid "failed to skip the commit"
 msgstr "échec du saut de commit"
 
-#: sequencer.c:2884
+#: sequencer.c:2822
 msgid "there is nothing to skip"
 msgstr "il n'y a rien à sauter"
 
-#: sequencer.c:2887
+#: sequencer.c:2825
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -6476,21 +6501,21 @@
 "Avez-vous déjà validé ?\n"
 "essayez \"git %s -continue\""
 
-#: sequencer.c:3011 sequencer.c:4015
+#: sequencer.c:2949 sequencer.c:3969
 #, c-format
 msgid "could not update %s"
 msgstr "impossible de mettre à jour %s"
 
-#: sequencer.c:3049 sequencer.c:3995
+#: sequencer.c:2987 sequencer.c:3949
 msgid "cannot read HEAD"
 msgstr "impossible de lire HEAD"
 
-#: sequencer.c:3066
+#: sequencer.c:3004
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "impossible de copier '%s' vers '%s'"
 
-#: sequencer.c:3074
+#: sequencer.c:3012
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -6509,27 +6534,27 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:3084
+#: sequencer.c:3022
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "impossible d'appliquer %s... %.*s"
 
-#: sequencer.c:3091
+#: sequencer.c:3029
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "Impossible de fusionner %.*s"
 
-#: sequencer.c:3105 sequencer.c:3109 builtin/difftool.c:633
+#: sequencer.c:3043 sequencer.c:3047 builtin/difftool.c:641
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "impossible de copier '%s' vers '%s'"
 
-#: sequencer.c:3131 sequencer.c:3558 builtin/rebase.c:849 builtin/rebase.c:1582
-#: builtin/rebase.c:1953 builtin/rebase.c:2008
+#: sequencer.c:3069 sequencer.c:3506 builtin/rebase.c:850 builtin/rebase.c:1613
+#: builtin/rebase.c:1987 builtin/rebase.c:2031
 msgid "could not read index"
 msgstr "impossible de lire l'index"
 
-#: sequencer.c:3136
+#: sequencer.c:3074
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -6544,11 +6569,11 @@
 "git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3142
+#: sequencer.c:3080
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "et a mis à jour l'index ou l'arbre de travail\n"
 
-#: sequencer.c:3148
+#: sequencer.c:3086
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -6565,77 +6590,77 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3209
+#: sequencer.c:3147
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "nom de label illégal '%.*s'"
 
-#: sequencer.c:3263
+#: sequencer.c:3201
 msgid "writing fake root commit"
 msgstr "écriture d'un commit racine bidon"
 
-#: sequencer.c:3268
+#: sequencer.c:3206
 msgid "writing squash-onto"
 msgstr "écriture de 'écraser-sur'"
 
-#: sequencer.c:3306 builtin/rebase.c:854 builtin/rebase.c:860
+#: sequencer.c:3244 builtin/rebase.c:855 builtin/rebase.c:861
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "impossible de trouver l'arbre de %s"
 
-#: sequencer.c:3324 builtin/rebase.c:873
+#: sequencer.c:3262 builtin/rebase.c:874
 msgid "could not write index"
 msgstr "impossible d'écrire l'index"
 
-#: sequencer.c:3351
+#: sequencer.c:3289
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "impossible de résoudre '%s'"
 
-#: sequencer.c:3379
+#: sequencer.c:3320
 msgid "cannot merge without a current revision"
 msgstr "impossible de fusionner avec une révision courante"
 
-#: sequencer.c:3401
+#: sequencer.c:3342
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "impossible d'analyser '%.*s'"
 
-#: sequencer.c:3410
+#: sequencer.c:3351
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "rien à fusionner : '%.*s'"
 
-#: sequencer.c:3422
+#: sequencer.c:3363
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr ""
 "une fusion octopus ne peut pas être exécutée par dessus une nouvelle racine"
 
-#: sequencer.c:3437
+#: sequencer.c:3378
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "impossible de lire le message de validation de '%s'"
 
-#: sequencer.c:3590
+#: sequencer.c:3538
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "impossible de seulement essayer de fusionner '%.*s'"
 
-#: sequencer.c:3606
+#: sequencer.c:3554
 msgid "merge: Unable to write new index file"
 msgstr "fusion : Impossible d'écrire le nouveau fichier index"
 
-#: sequencer.c:3675 builtin/rebase.c:711
+#: sequencer.c:3623 builtin/rebase.c:712
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Autoremisage appliqué.\n"
 
-#: sequencer.c:3687
+#: sequencer.c:3635
 #, c-format
 msgid "cannot store %s"
 msgstr "impossible de stocker %s"
 
-#: sequencer.c:3690 builtin/rebase.c:727 git-rebase--preserve-merges.sh:113
+#: sequencer.c:3638 builtin/rebase.c:728 git-rebase--preserve-merges.sh:113
 #, c-format
 msgid ""
 "Applying autostash resulted in conflicts.\n"
@@ -6646,31 +6671,31 @@
 "Vos  modifications sont à l'abri dans la remise.\n"
 "Vous pouvez lancer \"git stash pop\" ou \"git stash drop\" à tout moment.\n"
 
-#: sequencer.c:3751
+#: sequencer.c:3699
 #, c-format
 msgid "could not checkout %s"
 msgstr "extraction de %s impossible"
 
-#: sequencer.c:3765
+#: sequencer.c:3713
 #, c-format
 msgid "%s: not a valid OID"
 msgstr "%s n'est pas un OID valide"
 
-#: sequencer.c:3770 git-rebase--preserve-merges.sh:779
+#: sequencer.c:3718 git-rebase--preserve-merges.sh:779
 msgid "could not detach HEAD"
 msgstr "Impossible de détacher HEAD"
 
-#: sequencer.c:3785
+#: sequencer.c:3733
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "arrêt à HEAD\n"
 
-#: sequencer.c:3787
+#: sequencer.c:3735
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Arrêté à %s\n"
 
-#: sequencer.c:3795
+#: sequencer.c:3743
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -6691,48 +6716,48 @@
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:3877
+#: sequencer.c:3827
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "arrêt à %s... %.*s\n"
 
-#: sequencer.c:3958
+#: sequencer.c:3898
 #, c-format
 msgid "unknown command %d"
 msgstr "commande inconnue %d"
 
-#: sequencer.c:4003
+#: sequencer.c:3957
 msgid "could not read orig-head"
 msgstr "impossible de lire orig-head"
 
-#: sequencer.c:4008
+#: sequencer.c:3962
 msgid "could not read 'onto'"
 msgstr "impossible de lire 'onto'"
 
-#: sequencer.c:4022
+#: sequencer.c:3976
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "impossible de mettre à jour HEAD sur %s"
 
-#: sequencer.c:4115
+#: sequencer.c:4069
 msgid "cannot rebase: You have unstaged changes."
 msgstr "impossible de rebaser : vous avez des modifications non indexées."
 
-#: sequencer.c:4124
+#: sequencer.c:4078
 msgid "cannot amend non-existing commit"
 msgstr "impossible de corriger un commit non-existant"
 
-#: sequencer.c:4126
+#: sequencer.c:4080
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "fichier invalide : '%s'"
 
-#: sequencer.c:4128
+#: sequencer.c:4082
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "contenu invalide : '%s'"
 
-#: sequencer.c:4131
+#: sequencer.c:4085
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -6742,42 +6767,42 @@
 "Vous avez des modifications non validées dans votre copie de travail.\n"
 "Veuillez les valider d'abord, puis relancer 'git rebase --continue'."
 
-#: sequencer.c:4167 sequencer.c:4205
+#: sequencer.c:4121 sequencer.c:4159
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "impossible d'écrire le fichier : '%s'"
 
-#: sequencer.c:4220
+#: sequencer.c:4174
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "impossible de supprimer CHERRY_PICK_HEAD"
 
-#: sequencer.c:4227
+#: sequencer.c:4181
 msgid "could not commit staged changes."
 msgstr "impossible de valider les modifications indexées."
 
-#: sequencer.c:4328
+#: sequencer.c:4285
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s : impossible de picorer un %s"
 
-#: sequencer.c:4332
+#: sequencer.c:4289
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s : mauvaise révision"
 
-#: sequencer.c:4367
+#: sequencer.c:4324
 msgid "can't revert as initial commit"
 msgstr "impossible d'annuler en tant que commit initial"
 
-#: sequencer.c:4810
+#: sequencer.c:4774
 msgid "make_script: unhandled options"
 msgstr "make_script : options non gérées"
 
-#: sequencer.c:4813
+#: sequencer.c:4777
 msgid "make_script: error preparing revisions"
 msgstr "make_script : erreur lors de la préparation des révisions"
 
-#: sequencer.c:4971
+#: sequencer.c:4935
 msgid ""
 "You can fix this with 'git rebase --edit-todo' and then run 'git rebase --"
 "continue'.\n"
@@ -6787,24 +6812,24 @@
 "rebase --continue'.\n"
 "Ou vous pouvez abandonner le rebasage avec 'git rebase --abort'.\n"
 
-#: sequencer.c:5083 sequencer.c:5100
+#: sequencer.c:5047 sequencer.c:5064
 msgid "nothing to do"
 msgstr "rien à faire"
 
-#: sequencer.c:5114
+#: sequencer.c:5078
 msgid "could not skip unnecessary pick commands"
 msgstr "impossible d'éviter les commandes de picorage non nécessaires"
 
-#: sequencer.c:5197
+#: sequencer.c:5166
 msgid "the script was already rearranged."
 msgstr "le script a déjà été réarrangé."
 
-#: setup.c:123
+#: setup.c:124
 #, c-format
 msgid "'%s' is outside repository"
 msgstr "'%s' est hors du dépôt"
 
-#: setup.c:173
+#: setup.c:174
 #, c-format
 msgid ""
 "%s: no such path in the working tree.\n"
@@ -6814,7 +6839,7 @@
 "Utilisez 'git <commande> -- <chemin>...' pour spécifier des chemins qui "
 "n'existent pas localement."
 
-#: setup.c:186
+#: setup.c:187
 #, c-format
 msgid ""
 "ambiguous argument '%s': unknown revision or path not in the working tree.\n"
@@ -6825,14 +6850,14 @@
 "Utilisez '--' pour séparer les chemins des révisions, comme ceci :\n"
 "'git <commande> [<révision>...] -- [<chemin>...]'"
 
-#: setup.c:235
+#: setup.c:236
 #, c-format
 msgid "option '%s' must come before non-option arguments"
 msgstr ""
 "l'option '%s' doit être présente avant les arguments qui ne sont pas des "
 "options"
 
-#: setup.c:254
+#: setup.c:255
 #, c-format
 msgid ""
 "ambiguous argument '%s': both revision and filename\n"
@@ -6843,94 +6868,94 @@
 "Utilisez '--' pour séparer les chemins des révisions, comme ceci :\n"
 "'git <commande> [<révision>...] -- [<chemin>...]'"
 
-#: setup.c:390
+#: setup.c:391
 msgid "unable to set up work tree using invalid config"
 msgstr ""
 "impossible de mettre en place le répertoire de travail en utilisant une "
 "configuration invalide"
 
-#: setup.c:394
+#: setup.c:395
 msgid "this operation must be run in a work tree"
 msgstr "Cette opération doit être effectuée dans un arbre de travail"
 
-#: setup.c:540
+#: setup.c:541
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
 msgstr "Version attendue du dépôt git <= %d, %d trouvée"
 
-#: setup.c:548
+#: setup.c:549
 msgid "unknown repository extensions found:"
 msgstr "extensions de dépôt inconnues trouvées :"
 
-#: setup.c:567
+#: setup.c:568
 #, c-format
 msgid "error opening '%s'"
 msgstr "erreur à l'ouverture de '%s'"
 
-#: setup.c:569
+#: setup.c:570
 #, c-format
 msgid "too large to be a .git file: '%s'"
 msgstr "trop gros pour être une fichier .git : '%s'"
 
-#: setup.c:571
+#: setup.c:572
 #, c-format
 msgid "error reading %s"
 msgstr "erreur à la lecture de %s"
 
-#: setup.c:573
+#: setup.c:574
 #, c-format
 msgid "invalid gitfile format: %s"
 msgstr "format de fichier git invalide : %s"
 
-#: setup.c:575
+#: setup.c:576
 #, c-format
 msgid "no path in gitfile: %s"
 msgstr "aucun chemin dans le fichier git : %s"
 
-#: setup.c:577
+#: setup.c:578
 #, c-format
 msgid "not a git repository: %s"
 msgstr "ce n'est pas un dépôt git : %s"
 
-#: setup.c:676
+#: setup.c:677
 #, c-format
 msgid "'$%s' too big"
 msgstr "'$%s' trop gros"
 
-#: setup.c:690
+#: setup.c:691
 #, c-format
 msgid "not a git repository: '%s'"
 msgstr "ce n'est pas un dépôt git : '%s'"
 
-#: setup.c:719 setup.c:721 setup.c:752
+#: setup.c:720 setup.c:722 setup.c:753
 #, c-format
 msgid "cannot chdir to '%s'"
 msgstr "impossible de se déplacer vers le répertoire (chdir) '%s'"
 
-#: setup.c:724 setup.c:780 setup.c:790 setup.c:829 setup.c:837
+#: setup.c:725 setup.c:781 setup.c:791 setup.c:830 setup.c:838
 msgid "cannot come back to cwd"
 msgstr "impossible de revenir au répertoire de travail courant"
 
-#: setup.c:851
+#: setup.c:852
 #, c-format
 msgid "failed to stat '%*s%s%s'"
 msgstr "échec du stat de '%*s%s%s'"
 
-#: setup.c:1083
+#: setup.c:1090
 msgid "Unable to read current working directory"
 msgstr "Impossible d'accéder au répertoire de travail courant"
 
-#: setup.c:1092 setup.c:1098
+#: setup.c:1099 setup.c:1105
 #, c-format
 msgid "cannot change to '%s'"
 msgstr "impossible de modifier en '%s'"
 
-#: setup.c:1103
+#: setup.c:1110
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
 msgstr "ni ceci ni aucun de ses répertoires parents n'est un dépôt git : %s"
 
-#: setup.c:1109
+#: setup.c:1116
 #, c-format
 msgid ""
 "not a git repository (or any parent up to mount point %s)\n"
@@ -6941,7 +6966,7 @@
 "Arrêt à la limite du système de fichiers (GIT_DISCOVERY_ACROSS_FILESYSTEM "
 "n'est pas défini)."
 
-#: setup.c:1220
+#: setup.c:1227
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -6951,286 +6976,286 @@
 "Le propriétaire des fichiers doit toujours avoir les droits en lecture et "
 "écriture."
 
-#: setup.c:1264
+#: setup.c:1271
 msgid "open /dev/null or dup failed"
 msgstr "échec de l'ouverture ou au dup de /dev/null"
 
-#: setup.c:1279
+#: setup.c:1286
 msgid "fork failed"
 msgstr "échec de la bifurcation"
 
-#: setup.c:1284
+#: setup.c:1291
 msgid "setsid failed"
 msgstr "échec du setsid"
 
-#: sha1-file.c:453
+#: sha1-file.c:452
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr ""
 "le répertoire objet %s n'existe pas ; vérifiez .git/objects/info/alternates"
 
-#: sha1-file.c:504
+#: sha1-file.c:503
 #, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr "impossible de normaliser le chemin d'objet alternatif : %s"
 
-#: sha1-file.c:576
+#: sha1-file.c:575
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr "%s : magasins d'objets alternatifs ignorés, récursion trop profonde"
 
-#: sha1-file.c:583
+#: sha1-file.c:582
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr "impossible de normaliser le répertoire d'objet : %s"
 
-#: sha1-file.c:626
+#: sha1-file.c:625
 msgid "unable to fdopen alternates lockfile"
 msgstr "impossible d'ouvrir (fdopen) le fichier verrou des alternatives"
 
-#: sha1-file.c:644
+#: sha1-file.c:643
 msgid "unable to read alternates file"
 msgstr "lecture du fichier d'alternatives impossible"
 
-#: sha1-file.c:651
+#: sha1-file.c:650
 msgid "unable to move new alternates file into place"
 msgstr "impossible de déplacer le nouveau fichier d'alternative"
 
-#: sha1-file.c:686
+#: sha1-file.c:685
 #, c-format
 msgid "path '%s' does not exist"
 msgstr "le chemin '%s' n'existe pas"
 
-#: sha1-file.c:712
+#: sha1-file.c:711
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr ""
 "extraire le dépôt de référence '%s' comme une extraction liée n'est pas "
 "encore supporté."
 
-#: sha1-file.c:718
+#: sha1-file.c:717
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "le dépôt de référence '%s' n'est pas un dépôt local."
 
-#: sha1-file.c:724
+#: sha1-file.c:723
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr "le dépôt de référence '%s' est superficiel"
 
-#: sha1-file.c:732
+#: sha1-file.c:731
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr "le dépôt de référence '%s' est greffé"
 
-#: sha1-file.c:792
+#: sha1-file.c:791
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr "ligne invalide pendant l'analyse des refs alternatives : %s"
 
-#: sha1-file.c:944
+#: sha1-file.c:943
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr "essai de mmap %<PRIuMAX> au delà de la limite %<PRIuMAX>"
 
-#: sha1-file.c:969
+#: sha1-file.c:964
 msgid "mmap failed"
 msgstr "échec de mmap"
 
-#: sha1-file.c:1133
+#: sha1-file.c:1128
 #, c-format
 msgid "object file %s is empty"
 msgstr "le fichier objet %s est vide"
 
-#: sha1-file.c:1257 sha1-file.c:2396
+#: sha1-file.c:1252 sha1-file.c:2392
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr "objet libre corrompu '%s'"
 
-#: sha1-file.c:1259 sha1-file.c:2400
+#: sha1-file.c:1254 sha1-file.c:2396
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr "données incorrectes à la fin de l'objet libre '%s'"
 
-#: sha1-file.c:1301
+#: sha1-file.c:1296
 msgid "invalid object type"
 msgstr "type d'objet invalide"
 
-#: sha1-file.c:1385
+#: sha1-file.c:1380
 #, c-format
 msgid "unable to unpack %s header with --allow-unknown-type"
 msgstr "impossible de dépaqueter l'entête %s avec --allow-unknow-type"
 
-#: sha1-file.c:1388
+#: sha1-file.c:1383
 #, c-format
 msgid "unable to unpack %s header"
 msgstr "impossible de dépaqueter l'entête %s"
 
-#: sha1-file.c:1394
+#: sha1-file.c:1389
 #, c-format
 msgid "unable to parse %s header with --allow-unknown-type"
 msgstr "impossible d'analyser l'entête %s avec --allow-unknow-type"
 
-#: sha1-file.c:1397
+#: sha1-file.c:1392
 #, c-format
 msgid "unable to parse %s header"
 msgstr "impossible d'analyser l'entête %s"
 
-#: sha1-file.c:1588
+#: sha1-file.c:1584
 #, c-format
 msgid "failed to read object %s"
 msgstr "impossible de lire l'objet %s"
 
-#: sha1-file.c:1592
+#: sha1-file.c:1588
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr "remplacement %s non trouvé pour %s"
 
-#: sha1-file.c:1596
+#: sha1-file.c:1592
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr "l'objet libre %s (stocké dans %s) est corrompu"
 
-#: sha1-file.c:1600
+#: sha1-file.c:1596
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr "l'objet empaqueté %s (stocké dans %s) est corrompu"
 
-#: sha1-file.c:1703
+#: sha1-file.c:1699
 #, c-format
 msgid "unable to write file %s"
 msgstr "impossible d'écrire le fichier %s"
 
-#: sha1-file.c:1710
+#: sha1-file.c:1706
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr "impossible de régler les droits de '%s'"
 
-#: sha1-file.c:1717
+#: sha1-file.c:1713
 msgid "file write error"
 msgstr "erreur d'écriture d'un fichier"
 
-#: sha1-file.c:1736
+#: sha1-file.c:1732
 msgid "error when closing loose object file"
 msgstr "erreur en fermeture du fichier d'objet esseulé"
 
-#: sha1-file.c:1801
+#: sha1-file.c:1797
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr ""
 "droits insuffisants pour ajouter un objet à la base de données %s du dépôt"
 
-#: sha1-file.c:1803
+#: sha1-file.c:1799
 msgid "unable to create temporary file"
 msgstr "impossible de créer un fichier temporaire"
 
-#: sha1-file.c:1827
+#: sha1-file.c:1823
 msgid "unable to write loose object file"
 msgstr "impossible d'écrire le fichier d'objet esseulé"
 
-#: sha1-file.c:1833
+#: sha1-file.c:1829
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr "impossible de compresser le nouvel objet %s (%d)"
 
-#: sha1-file.c:1837
+#: sha1-file.c:1833
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr "échec de deflateEnd sur l'objet %s (%d)"
 
-#: sha1-file.c:1841
+#: sha1-file.c:1837
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr "données de source d'objet instable pour %s"
 
-#: sha1-file.c:1851 builtin/pack-objects.c:925
+#: sha1-file.c:1847 builtin/pack-objects.c:925
 #, c-format
 msgid "failed utime() on %s"
 msgstr "échec de utime() sur %s"
 
-#: sha1-file.c:1926
+#: sha1-file.c:1922
 #, c-format
 msgid "cannot read object for %s"
 msgstr "impossible de lire l'objet pour %s"
 
-#: sha1-file.c:1966
+#: sha1-file.c:1962
 msgid "corrupt commit"
 msgstr "commit corrompu"
 
-#: sha1-file.c:1974
+#: sha1-file.c:1970
 msgid "corrupt tag"
 msgstr "étiquette corrompue"
 
-#: sha1-file.c:2073
+#: sha1-file.c:2069
 #, c-format
 msgid "read error while indexing %s"
 msgstr "erreur de lecture à l'indexation de %s"
 
-#: sha1-file.c:2076
+#: sha1-file.c:2072
 #, c-format
 msgid "short read while indexing %s"
 msgstr "lecture tronquée pendant l'indexation de %s"
 
-#: sha1-file.c:2149 sha1-file.c:2158
+#: sha1-file.c:2145 sha1-file.c:2154
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr "%s : échec de l'insertion dans la base de données"
 
-#: sha1-file.c:2164
+#: sha1-file.c:2160
 #, c-format
 msgid "%s: unsupported file type"
 msgstr "%s : type de fichier non supporté"
 
-#: sha1-file.c:2188
+#: sha1-file.c:2184
 #, c-format
 msgid "%s is not a valid object"
 msgstr "%s n'est pas un objet valide"
 
-#: sha1-file.c:2190
+#: sha1-file.c:2186
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr "%s n'est pas un objet '%s' valide"
 
-#: sha1-file.c:2217 builtin/index-pack.c:155
+#: sha1-file.c:2213 builtin/index-pack.c:155
 #, c-format
 msgid "unable to open %s"
 msgstr "impossible d'ouvrir %s"
 
-#: sha1-file.c:2407 sha1-file.c:2459
+#: sha1-file.c:2403 sha1-file.c:2455
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr "incohérence de hachage pour %s (%s attendu)"
 
-#: sha1-file.c:2431
+#: sha1-file.c:2427
 #, c-format
 msgid "unable to mmap %s"
 msgstr "impossible de mmap %s"
 
-#: sha1-file.c:2436
+#: sha1-file.c:2432
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr "impossible de dépaqueter l'entête de %s"
 
-#: sha1-file.c:2442
+#: sha1-file.c:2438
 #, c-format
 msgid "unable to parse header of %s"
 msgstr "impossible d'analyser l'entête de %s"
 
-#: sha1-file.c:2453
+#: sha1-file.c:2449
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr "impossible de dépaqueter le contenu de %s"
 
-#: sha1-name.c:490
+#: sha1-name.c:487
 #, c-format
 msgid "short SHA1 %s is ambiguous"
 msgstr "le SHA1 court %s est ambigu"
 
-#: sha1-name.c:501
+#: sha1-name.c:498
 msgid "The candidates are:"
 msgstr "Les candidats sont :"
 
-#: sha1-name.c:800
+#: sha1-name.c:797
 msgid ""
 "Git normally never creates a ref that ends with 40 hex characters\n"
 "because it will be ignored when you just specify 40-hex. These refs\n"
@@ -7255,43 +7280,43 @@
 "en lançant \"git config advice.objectNameWarning false\""
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:821
+#: strbuf.c:822
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u Gio"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:823
+#: strbuf.c:824
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u Gio/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:831
+#: strbuf.c:832
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u Mio"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:833
+#: strbuf.c:834
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u Mio/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:840
+#: strbuf.c:841
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u Kio"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:842
+#: strbuf.c:843
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u Kio/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:848
+#: strbuf.c:849
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -7299,7 +7324,7 @@
 msgstr[1] "%u octets"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:850
+#: strbuf.c:851
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
@@ -7419,28 +7444,28 @@
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree a renvoyé un code de retour inattendu %d"
 
-#: submodule-config.c:232
+#: submodule-config.c:236
 #, c-format
 msgid "ignoring suspicious submodule name: %s"
 msgstr "nom de sous-module suspicieux %s ignoré"
 
-#: submodule-config.c:299
+#: submodule-config.c:303
 msgid "negative values not allowed for submodule.fetchjobs"
 msgstr "les valeurs négatives ne sont pas permises pour submodule.fetchJobs"
 
-#: submodule-config.c:397
+#: submodule-config.c:401
 #, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
 msgstr ""
 "'%s' ignoré et qui peut être interprété comme une option de ligne de "
 "commande : %s"
 
-#: submodule-config.c:486
+#: submodule-config.c:490
 #, c-format
 msgid "invalid value for %s"
 msgstr "Valeur invalide pour %s"
 
-#: submodule-config.c:755
+#: submodule-config.c:761
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr "Impossible de mettre à jour l'élément %s de .gitmodules"
@@ -7475,7 +7500,7 @@
 msgid "could not read from stdin"
 msgstr "Impossible de lire depuis l'entrée standard"
 
-#: trailer.c:1011 wrapper.c:701
+#: trailer.c:1011 wrapper.c:665
 #, c-format
 msgid "could not stat %s"
 msgstr "stat impossible de %s"
@@ -7504,47 +7529,47 @@
 msgid "Would set upstream of '%s' to '%s' of '%s'\n"
 msgstr "Positionnerait la branche amont de '%s' sur '%s' de '%s'\n"
 
-#: transport.c:142
+#: transport.c:145
 #, c-format
 msgid "could not read bundle '%s'"
 msgstr "impossible de lire la liasse '%s'"
 
-#: transport.c:208
+#: transport.c:214
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr "transport : option de profondeur invalide '%s'"
 
-#: transport.c:259
+#: transport.c:266
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "voir protocol.version dans 'git help config' pour plus d'information"
 
-#: transport.c:260
+#: transport.c:267
 msgid "server options require protocol version 2 or later"
 msgstr "les options de serveur exigent une version 2 ou supérieure"
 
-#: transport.c:625
+#: transport.c:632
 msgid "could not parse transport.color.* config"
 msgstr "impossible d'analyser la configuration transport.color.*"
 
-#: transport.c:698
+#: transport.c:705
 msgid "support for protocol v2 not implemented yet"
 msgstr "le support du protocole v2 n'est pas encore implanté"
 
-#: transport.c:825
+#: transport.c:831
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "valeur inconnue pour la config '%s' : %s"
 
-#: transport.c:891
+#: transport.c:897
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "transport '%s' non permis"
 
-#: transport.c:945
+#: transport.c:949
 msgid "git-over-rsync is no longer supported"
 msgstr "git-over-rsync n'est plus supporté"
 
-#: transport.c:1040
+#: transport.c:1044
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -7553,7 +7578,7 @@
 "Les chemins suivants de sous-module contiennent des modifications\n"
 "qui ne peuvent être trouvées sur aucun distant :\n"
 
-#: transport.c:1044
+#: transport.c:1048
 #, c-format
 msgid ""
 "\n"
@@ -7580,33 +7605,33 @@
 "pour les pousser vers un serveur distant.\n"
 "\n"
 
-#: transport.c:1052
+#: transport.c:1056
 msgid "Aborting."
 msgstr "Abandon."
 
-#: transport.c:1193
+#: transport.c:1201
 msgid "failed to push all needed submodules"
 msgstr "échec de la poussée de tous les sous-modules nécessaires"
 
-#: transport.c:1340 transport-helper.c:645
+#: transport.c:1345 transport-helper.c:655
 msgid "operation not supported by protocol"
 msgstr "option non supportée par le protocole"
 
-#: transport-helper.c:51 transport-helper.c:80
+#: transport-helper.c:61 transport-helper.c:90
 msgid "full write to remote helper failed"
 msgstr "échec de l'écriture totale sur l'assistant distant"
 
-#: transport-helper.c:134
+#: transport-helper.c:144
 #, c-format
 msgid "unable to find remote helper for '%s'"
 msgstr "Impossible de trouver un assistant distant pour '%s'"
 
-#: transport-helper.c:150 transport-helper.c:559
+#: transport-helper.c:160 transport-helper.c:569
 msgid "can't dup helper output fd"
 msgstr ""
 "impossible de dupliquer le descripteur de flux de sortie de l'assistant"
 
-#: transport-helper.c:201
+#: transport-helper.c:211
 #, c-format
 msgid ""
 "unknown mandatory capability %s; this remote helper probably needs newer "
@@ -7615,103 +7640,108 @@
 "capacité obligatoire inconnue %s ; cet assistant distant requiert "
 "probablement une une nouvelle version de Git"
 
-#: transport-helper.c:207
+#: transport-helper.c:217
 msgid "this remote helper should implement refspec capability"
 msgstr "cet assistant distant devrait supporter la capacité refspec"
 
-#: transport-helper.c:274 transport-helper.c:414
+#: transport-helper.c:284 transport-helper.c:424
 #, c-format
 msgid "%s unexpectedly said: '%s'"
 msgstr "%s a dit de manière inattendue : '%s'"
 
-#: transport-helper.c:403
+#: transport-helper.c:413
 #, c-format
 msgid "%s also locked %s"
 msgstr "%s a aussi verrouillé %s"
 
-#: transport-helper.c:481
+#: transport-helper.c:491
 msgid "couldn't run fast-import"
 msgstr "impossible de lancer fast-import"
 
-#: transport-helper.c:504
+#: transport-helper.c:514
 msgid "error while running fast-import"
 msgstr "erreur au lancement de fast-import"
 
-#: transport-helper.c:533 transport-helper.c:1105
+#: transport-helper.c:543 transport-helper.c:1132
 #, c-format
 msgid "could not read ref %s"
 msgstr "impossible de lire la réf %s"
 
-#: transport-helper.c:578
+#: transport-helper.c:588
 #, c-format
 msgid "unknown response to connect: %s"
 msgstr "réponse inconnue à connect : %s"
 
-#: transport-helper.c:600
+#: transport-helper.c:610
 msgid "setting remote service path not supported by protocol"
 msgstr ""
 "la spécification du chemin de service distant n'est pas supportée par le "
 "protocole"
 
-#: transport-helper.c:602
+#: transport-helper.c:612
 msgid "invalid remote service path"
 msgstr "chemin de service distant invalide"
 
-#: transport-helper.c:648
+#: transport-helper.c:658
 #, c-format
 msgid "can't connect to subservice %s"
 msgstr "impossible de se connecter au sous-service %s"
 
-#: transport-helper.c:720
+#: transport-helper.c:734
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "ok/error attendu, l'assistant a dit '%s'"
 
-#: transport-helper.c:773
+#: transport-helper.c:787
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "l'assistant a renvoyé un statut de retour inattendu %s"
 
-#: transport-helper.c:834
+#: transport-helper.c:848
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "l'assistant %s ne gère pas dry-run"
 
-#: transport-helper.c:837
+#: transport-helper.c:851
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "l'assistant %s ne gère pas --signed"
 
-#: transport-helper.c:840
+#: transport-helper.c:854
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "l'assistant %s ne gère pas --signed=if-asked"
 
-#: transport-helper.c:847
+#: transport-helper.c:859
+#, c-format
+msgid "helper %s does not support --atomic"
+msgstr "l'assistant %s ne gère pas --atomic"
+
+#: transport-helper.c:865
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "l'assistant %s ne gère pas 'push-option'"
 
-#: transport-helper.c:945
+#: transport-helper.c:963
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr ""
 "l'assistant %s ne gère pas push ; un spécificateur de référence est "
 "nécessaire"
 
-#: transport-helper.c:950
+#: transport-helper.c:968
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "l'assistant %s ne gère pas 'force'"
 
-#: transport-helper.c:997
+#: transport-helper.c:1015
 msgid "couldn't run fast-export"
 msgstr "impossible de lancer fast-export"
 
-#: transport-helper.c:1002
+#: transport-helper.c:1020
 msgid "error while running fast-export"
 msgstr "erreur au lancement de fast-export"
 
-#: transport-helper.c:1027
+#: transport-helper.c:1045
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -7720,47 +7750,47 @@
 "Aucune référence en commun et aucune spécfiée ; rien à faire.\n"
 "Vous devriez peut-être spécifier une branche telle que 'master'.\n"
 
-#: transport-helper.c:1091
+#: transport-helper.c:1118
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "réponse malformée dans le liste de réfs : %s"
 
-#: transport-helper.c:1244
+#: transport-helper.c:1270
 #, c-format
 msgid "read(%s) failed"
 msgstr "échec de read(%s)"
 
-#: transport-helper.c:1271
+#: transport-helper.c:1297
 #, c-format
 msgid "write(%s) failed"
 msgstr "échec de write(%s)"
 
-#: transport-helper.c:1320
+#: transport-helper.c:1346
 #, c-format
 msgid "%s thread failed"
 msgstr "échec du fil d'exécution %s"
 
-#: transport-helper.c:1324
+#: transport-helper.c:1350
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "échec de jonction du fil d'exécution %s : %s"
 
-#: transport-helper.c:1343 transport-helper.c:1347
+#: transport-helper.c:1369 transport-helper.c:1373
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "impossible de démarrer le fil d'exécution pour copier les données : %s"
 
-#: transport-helper.c:1384
+#: transport-helper.c:1410
 #, c-format
 msgid "%s process failed to wait"
 msgstr "échec du processus %s pour l'attente"
 
-#: transport-helper.c:1388
+#: transport-helper.c:1414
 #, c-format
 msgid "%s process failed"
 msgstr "échec du processus %s"
 
-#: transport-helper.c:1406 transport-helper.c:1415
+#: transport-helper.c:1432 transport-helper.c:1441
 msgid "can't start thread for copying data"
 msgstr "impossible de démarrer le fil d'exécution pour copier les données"
 
@@ -7780,7 +7810,7 @@
 msgid "too-short tree file"
 msgstr "fichier arbre trop court"
 
-#: unpack-trees.c:111
+#: unpack-trees.c:110
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -7791,7 +7821,7 @@
 "%%sVeuillez valider ou remiser vos modifications avant de basculer de "
 "branche."
 
-#: unpack-trees.c:113
+#: unpack-trees.c:112
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -7801,7 +7831,7 @@
 "l'extraction :\n"
 "%%s"
 
-#: unpack-trees.c:116
+#: unpack-trees.c:115
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -7811,7 +7841,7 @@
 "fusion :\n"
 "%%sVeuillez valider ou remiser vos modifications avant la fusion."
 
-#: unpack-trees.c:118
+#: unpack-trees.c:117
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -7821,7 +7851,7 @@
 "fusion :\n"
 "%%s"
 
-#: unpack-trees.c:121
+#: unpack-trees.c:120
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -7830,7 +7860,7 @@
 "Vos modifications locales aux fichiers suivants seraient écrasées par %s :\n"
 "%%sVeuillez valider ou remiser vos modifications avant %s."
 
-#: unpack-trees.c:123
+#: unpack-trees.c:122
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -7839,7 +7869,7 @@
 "Vos modifications locales aux fichiers suivants seraient écrasées par %s :\n"
 "%%s"
 
-#: unpack-trees.c:128
+#: unpack-trees.c:127
 #, c-format
 msgid ""
 "Updating the following directories would lose untracked files in them:\n"
@@ -7849,7 +7879,7 @@
 "contenus :\n"
 "%s"
 
-#: unpack-trees.c:132
+#: unpack-trees.c:131
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -7859,7 +7889,7 @@
 "l'extraction :\n"
 "%%sVeuillez renommer ou effacer ces fichiers avant de basculer de branche."
 
-#: unpack-trees.c:134
+#: unpack-trees.c:133
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -7868,7 +7898,7 @@
 "Les fichiers suivants non suivis seraient effacés par l'extraction :\n"
 "%%s"
 
-#: unpack-trees.c:137
+#: unpack-trees.c:136
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -7878,7 +7908,7 @@
 "la fusion :\n"
 "%%sVeuillez renommer ou effacer ces fichiers avant la fusion."
 
-#: unpack-trees.c:139
+#: unpack-trees.c:138
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -7887,7 +7917,7 @@
 "Les fichiers suivants non suivis seraient effacés par la fusion :\n"
 "%%s"
 
-#: unpack-trees.c:142
+#: unpack-trees.c:141
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -7897,7 +7927,7 @@
 "%s :\n"
 "%%sVeuillez renommer ou effacer ces fichiers avant %s."
 
-#: unpack-trees.c:144
+#: unpack-trees.c:143
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -7906,7 +7936,7 @@
 "Les fichiers suivants non suivis seraient effacés par %s :\n"
 "%%s"
 
-#: unpack-trees.c:150
+#: unpack-trees.c:149
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -7917,7 +7947,7 @@
 "l'extraction :\n"
 "%%sVeuillez renommer ou effacer ces fichiers avant de basculer de branche."
 
-#: unpack-trees.c:152
+#: unpack-trees.c:151
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -7927,7 +7957,7 @@
 "Les fichiers suivants non suivis seraient écrasés par l'extraction :\n"
 "%%s"
 
-#: unpack-trees.c:155
+#: unpack-trees.c:154
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -7937,7 +7967,7 @@
 "la fusion :\n"
 "%%sVeuillez renommer ou effacer ces fichiers avant la fusion."
 
-#: unpack-trees.c:157
+#: unpack-trees.c:156
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -7946,7 +7976,7 @@
 "Les fichiers suivants non suivis seraient écrasés par la fusion :\n"
 "%%s"
 
-#: unpack-trees.c:160
+#: unpack-trees.c:159
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -7956,7 +7986,7 @@
 "%s :\n"
 "%%sVeuillez renommer ou effacer ces fichiers avant %s."
 
-#: unpack-trees.c:162
+#: unpack-trees.c:161
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -7965,12 +7995,12 @@
 "Les fichiers suivants non suivis seraient écrasés par %s :\n"
 "%%s"
 
-#: unpack-trees.c:170
+#: unpack-trees.c:169
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
 msgstr "L'entrée '%s' surcharge avec '%s'. Affectation impossible."
 
-#: unpack-trees.c:173
+#: unpack-trees.c:172
 #, c-format
 msgid ""
 "Cannot update sparse checkout: the following entries are not up to date:\n"
@@ -7980,7 +8010,7 @@
 "pas à jour :\n"
 "%s"
 
-#: unpack-trees.c:175
+#: unpack-trees.c:174
 #, c-format
 msgid ""
 "The following working tree files would be overwritten by sparse checkout "
@@ -7991,7 +8021,7 @@
 "jour par l'extraction creuse :\n"
 "%s"
 
-#: unpack-trees.c:177
+#: unpack-trees.c:176
 #, c-format
 msgid ""
 "The following working tree files would be removed by sparse checkout "
@@ -8002,7 +8032,7 @@
 "à jour par extraction creuse :\n"
 "%s"
 
-#: unpack-trees.c:179
+#: unpack-trees.c:178
 #, c-format
 msgid ""
 "Cannot update submodule:\n"
@@ -8011,16 +8041,16 @@
 "Mise à jour impossible pour le sous-module :\n"
 "%s"
 
-#: unpack-trees.c:256
+#: unpack-trees.c:255
 #, c-format
 msgid "Aborting\n"
 msgstr "Abandon\n"
 
-#: unpack-trees.c:318
+#: unpack-trees.c:317
 msgid "Updating files"
 msgstr "Mise à jour des fichiers"
 
-#: unpack-trees.c:350
+#: unpack-trees.c:349
 msgid ""
 "the following paths have collided (e.g. case-sensitive paths\n"
 "on a case-insensitive filesystem) and only one from the same\n"
@@ -8059,7 +8089,7 @@
 msgid "invalid '..' path segment"
 msgstr "segment de chemin '..' invalide"
 
-#: worktree.c:258 builtin/am.c:2095
+#: worktree.c:258 builtin/am.c:2084
 #, c-format
 msgid "failed to read '%s'"
 msgstr "échec de la lecture de '%s'"
@@ -8092,17 +8122,17 @@
 msgid "'%s' does not point back to '%s'"
 msgstr "'%s' ne pointe pas en retour sur '%s'"
 
-#: wrapper.c:223 wrapper.c:393
+#: wrapper.c:186 wrapper.c:356
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr "impossible d'ouvrir '%s' en lecture/écriture"
 
-#: wrapper.c:424 wrapper.c:624
+#: wrapper.c:387 wrapper.c:588
 #, c-format
 msgid "unable to access '%s'"
 msgstr "impossible d'accéder à '%s'"
 
-#: wrapper.c:632
+#: wrapper.c:596
 msgid "unable to get current working directory"
 msgstr "impossible d'accéder au répertoire de travail courant"
 
@@ -8447,80 +8477,88 @@
 "  (tous les conflits sont réglés : lancez \"git cherry-pick --continue\")"
 
 #: wt-status.c:1437
+msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
+msgstr "  (utilisez \"git cherry-pick --skip\" pour sauter ce patch)"
+
+#: wt-status.c:1439
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr "  (utilisez \"git cherry-pick --abort\" pour annuler le picorage)"
 
-#: wt-status.c:1447
+#: wt-status.c:1449
 msgid "Revert currently in progress."
 msgstr "Rétablissement en cours."
 
-#: wt-status.c:1450
+#: wt-status.c:1452
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Vous êtes actuellement en train de rétablir le commit %s."
 
-#: wt-status.c:1456
+#: wt-status.c:1458
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (réglez les conflits puis lancez \"git revert --continue\")"
 
-#: wt-status.c:1459
+#: wt-status.c:1461
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (lancez \"git revert --continue\" pour continuer)"
 
-#: wt-status.c:1462
+#: wt-status.c:1464
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (tous les conflits sont réglés : lancez \"git revert --continue\")"
 
-#: wt-status.c:1464
+#: wt-status.c:1466
+msgid "  (use \"git revert --skip\" to skip this patch)"
+msgstr "  (utilisez \"git revert --skip\" pour sauter ce patch)"
+
+#: wt-status.c:1468
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (utilisez \"git revert --abort\" pour annuler le rétablissement)"
 
-#: wt-status.c:1474
+#: wt-status.c:1478
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "Vous êtes en cours de bissection, depuis la branche '%s'."
 
-#: wt-status.c:1478
+#: wt-status.c:1482
 msgid "You are currently bisecting."
 msgstr "Vous êtes en cours de bissection."
 
-#: wt-status.c:1481
+#: wt-status.c:1485
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (utilisez \"git bisect reset\" pour revenir à la branche d'origine)"
 
-#: wt-status.c:1690
+#: wt-status.c:1694
 msgid "On branch "
 msgstr "Sur la branche "
 
-#: wt-status.c:1697
+#: wt-status.c:1701
 msgid "interactive rebase in progress; onto "
 msgstr "rebasage interactif en cours ; sur "
 
-#: wt-status.c:1699
+#: wt-status.c:1703
 msgid "rebase in progress; onto "
 msgstr "rebasage en cours ; sur "
 
-#: wt-status.c:1709
+#: wt-status.c:1713
 msgid "Not currently on any branch."
 msgstr "Actuellement sur aucun branche."
 
-#: wt-status.c:1726
+#: wt-status.c:1730
 msgid "Initial commit"
 msgstr "Validation initiale"
 
-#: wt-status.c:1727
+#: wt-status.c:1731
 msgid "No commits yet"
 msgstr "Aucun commit"
 
-#: wt-status.c:1741
+#: wt-status.c:1745
 msgid "Untracked files"
 msgstr "Fichiers non suivis"
 
-#: wt-status.c:1743
+#: wt-status.c:1747
 msgid "Ignored files"
 msgstr "Fichiers ignorés"
 
-#: wt-status.c:1747
+#: wt-status.c:1751
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -8532,32 +8570,32 @@
 "oublier d'ajouter les nouveaux fichiers par vous-même (voir 'git help "
 "status')."
 
-#: wt-status.c:1753
+#: wt-status.c:1757
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Fichiers non suivis non affichés%s"
 
-#: wt-status.c:1755
+#: wt-status.c:1759
 msgid " (use -u option to show untracked files)"
 msgstr " (utilisez -u pour afficher les fichiers non suivis)"
 
-#: wt-status.c:1761
+#: wt-status.c:1765
 msgid "No changes"
 msgstr "Aucune modification"
 
-#: wt-status.c:1766
+#: wt-status.c:1770
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 "aucune modification n'a été ajoutée à la validation (utilisez \"git add\" ou "
 "\"git commit -a\")\n"
 
-#: wt-status.c:1769
+#: wt-status.c:1773
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "aucune modification ajoutée à la validation\n"
 
-#: wt-status.c:1772
+#: wt-status.c:1776
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -8566,70 +8604,75 @@
 "aucune modification ajoutée à la validation mais des fichiers non suivis "
 "sont présents (utilisez \"git add\" pour les suivre)\n"
 
-#: wt-status.c:1775
+#: wt-status.c:1779
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr ""
 "aucune modification ajoutée à la validation mais des fichiers non suivis "
 "sont présents\n"
 
-#: wt-status.c:1778
+#: wt-status.c:1782
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr ""
 "rien à valider (créez/copiez des fichiers et utilisez \"git add\" pour les "
 "suivre)\n"
 
-#: wt-status.c:1781 wt-status.c:1786
+#: wt-status.c:1785 wt-status.c:1790
 #, c-format
 msgid "nothing to commit\n"
 msgstr "rien à valider\n"
 
-#: wt-status.c:1784
+#: wt-status.c:1788
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr "rien à valider (utilisez -u pour afficher les fichiers non suivis)\n"
 
-#: wt-status.c:1788
+#: wt-status.c:1792
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "rien à valider, la copie de travail est propre\n"
 
-#: wt-status.c:1901
+#: wt-status.c:1905
 msgid "No commits yet on "
 msgstr "Encore aucun commit sur "
 
-#: wt-status.c:1905
+#: wt-status.c:1909
 msgid "HEAD (no branch)"
 msgstr "HEAD (aucune branche)"
 
-#: wt-status.c:1936
+#: wt-status.c:1940
 msgid "different"
 msgstr "différent"
 
-#: wt-status.c:1938 wt-status.c:1946
+#: wt-status.c:1942 wt-status.c:1950
 msgid "behind "
 msgstr "derrière "
 
-#: wt-status.c:1941 wt-status.c:1944
+#: wt-status.c:1945 wt-status.c:1948
 msgid "ahead "
 msgstr "devant "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2466
+#: wt-status.c:2470
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "Impossible de %s : vous avez des modifications non indexées."
 
-#: wt-status.c:2472
+#: wt-status.c:2476
 msgid "additionally, your index contains uncommitted changes."
 msgstr "de plus, votre index contient des modifications non validées."
 
-#: wt-status.c:2474
+#: wt-status.c:2478
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "%s impossible : votre index contient des modifications non validées."
 
+#: compat/precompose_utf8.c:58 builtin/clone.c:452
+#, c-format
+msgid "failed to unlink '%s'"
+msgstr "échec pour délier '%s'"
+
 #: builtin/add.c:25
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<options>] [--] <chemin>..."
@@ -8652,7 +8695,7 @@
 msgid "Unstaged changes after refreshing the index:"
 msgstr "Modifications non indexées après rafraîchissement de l'index :"
 
-#: builtin/add.c:234 builtin/rev-parse.c:896
+#: builtin/add.c:234 builtin/rev-parse.c:897
 msgid "Could not read the index"
 msgstr "Impossible de lire l'index"
 
@@ -8688,8 +8731,8 @@
 msgstr ""
 "Les chemins suivants sont ignorés par un de vos fichiers .gitignore :\n"
 
-#: builtin/add.c:290 builtin/clean.c:909 builtin/fetch.c:147 builtin/mv.c:124
-#: builtin/prune-packed.c:56 builtin/pull.c:222 builtin/push.c:560
+#: builtin/add.c:290 builtin/clean.c:910 builtin/fetch.c:162 builtin/mv.c:124
+#: builtin/prune-packed.c:56 builtin/pull.c:223 builtin/push.c:547
 #: builtin/remote.c:1345 builtin/rm.c:241 builtin/send-pack.c:165
 msgid "dry run"
 msgstr "simuler l'action"
@@ -8746,7 +8789,7 @@
 msgid "check if - even missing - files are ignored in dry run"
 msgstr "vérifier si des fichiers - même manquants - sont ignorés, à vide"
 
-#: builtin/add.c:309 builtin/update-index.c:1001
+#: builtin/add.c:309 builtin/update-index.c:1002
 msgid "override the executable bit of the listed files"
 msgstr "outrepasser le bit exécutable pour les fichiers listés"
 
@@ -8823,116 +8866,112 @@
 msgid "Maybe you wanted to say 'git add .'?\n"
 msgstr "Vous vouliez sûrement dire 'git add .' ?\n"
 
-#: builtin/am.c:348
+#: builtin/am.c:347
 msgid "could not parse author script"
 msgstr "impossible d'analyser l'auteur du script"
 
-#: builtin/am.c:432
+#: builtin/am.c:431
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "'%s' a été effacé par le crochet applypatch-msg"
 
-#: builtin/am.c:474
+#: builtin/am.c:473
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Ligne en entrée malformée : '%s'."
 
-#: builtin/am.c:512
+#: builtin/am.c:511
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Impossible de copier les notes de '%s' vers '%s'"
 
-#: builtin/am.c:538
+#: builtin/am.c:537
 msgid "fseek failed"
 msgstr "échec de fseek"
 
-#: builtin/am.c:726
+#: builtin/am.c:725
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "impossible d'analyser le patch '%s'"
 
-#: builtin/am.c:791
+#: builtin/am.c:790
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Seulement une série de patchs StGIT peut être appliquée à la fois"
 
-#: builtin/am.c:839
+#: builtin/am.c:838
 msgid "invalid timestamp"
 msgstr "horodatage invalide"
 
-#: builtin/am.c:844 builtin/am.c:856
+#: builtin/am.c:843 builtin/am.c:855
 msgid "invalid Date line"
 msgstr "ligne de Date invalide"
 
-#: builtin/am.c:851
+#: builtin/am.c:850
 msgid "invalid timezone offset"
 msgstr "décalage horaire invalide"
 
-#: builtin/am.c:944
+#: builtin/am.c:943
 msgid "Patch format detection failed."
 msgstr "Échec de détection du format du patch."
 
-#: builtin/am.c:949 builtin/clone.c:407
+#: builtin/am.c:948 builtin/clone.c:406
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "échec de la création du répertoire '%s'"
 
-#: builtin/am.c:954
+#: builtin/am.c:953
 msgid "Failed to split patches."
 msgstr "Échec de découpage des patchs."
 
-#: builtin/am.c:1084 builtin/commit.c:374
-msgid "unable to write index file"
-msgstr "impossible d'écrire le fichier d'index"
-
-#: builtin/am.c:1098
+#: builtin/am.c:1084
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "Quand vous avez résolu ce problème, lancez \"%s --continue\"."
 
-#: builtin/am.c:1099
+#: builtin/am.c:1085
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "Si vous préférez plutôt sauter ce patch, lancez \"%s --skip\"."
 
-#: builtin/am.c:1100
+#: builtin/am.c:1086
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr ""
 "Pour restaurer la branche originale et arrêter de patcher, lancez \"%s --"
 "abort\"."
 
-#: builtin/am.c:1183
+#: builtin/am.c:1169
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 "Rustine envoyée avec format=flowed ; les espaces en fin de ligne peuvent "
 "être perdus."
 
-#: builtin/am.c:1211
+#: builtin/am.c:1197
 msgid "Patch is empty."
 msgstr "Le patch actuel est vide."
 
-#: builtin/am.c:1277
+#: builtin/am.c:1262
+#, c-format
+msgid "missing author line in commit %s"
+msgstr "ligne d'auteur manquante dans le commit %s"
+
+#: builtin/am.c:1265
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "ligne d'identification invalide : %.*s"
 
-#: builtin/am.c:1299
-#, c-format
-msgid "unable to parse commit %s"
-msgstr "impossible d'analyser le commit %s"
-
-#: builtin/am.c:1496
+#: builtin/am.c:1484
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
 "Le dépôt n'a pas les blobs nécessaires pour un retour à une fusion à 3 "
 "points."
 
-#: builtin/am.c:1498
+#: builtin/am.c:1486
 msgid "Using index info to reconstruct a base tree..."
 msgstr ""
 "Utilisation de l'information de l'index pour reconstruire un arbre de base..."
 
-#: builtin/am.c:1517
+#: builtin/am.c:1505
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -8940,24 +8979,24 @@
 "Avez-vous édité le patch à la main ?\n"
 "Il ne s'applique pas aux blobs enregistrés dans son index."
 
-#: builtin/am.c:1523
+#: builtin/am.c:1511
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "Retour à un patch de la base et fusion à 3 points..."
 
-#: builtin/am.c:1549
+#: builtin/am.c:1537
 msgid "Failed to merge in the changes."
 msgstr "Échec d'intégration des modifications."
 
-#: builtin/am.c:1581
+#: builtin/am.c:1569
 msgid "applying to an empty history"
 msgstr "application à un historique vide"
 
-#: builtin/am.c:1628 builtin/am.c:1632
+#: builtin/am.c:1616 builtin/am.c:1620
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "impossible de continuer : %s n'existe pas."
 
-#: builtin/am.c:1650
+#: builtin/am.c:1638
 msgid "Commit Body is:"
 msgstr "Le corps de la validation est :"
 
@@ -8965,36 +9004,40 @@
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1660
+#: builtin/am.c:1648
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr "Appliquer ? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all : "
 
-#: builtin/am.c:1710
+#: builtin/am.c:1695 builtin/commit.c:374
+msgid "unable to write index file"
+msgstr "impossible d'écrire le fichier d'index"
+
+#: builtin/am.c:1699
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Index sale : impossible d'appliquer des patchs (sales : %s)"
 
-#: builtin/am.c:1750 builtin/am.c:1818
+#: builtin/am.c:1739 builtin/am.c:1807
 #, c-format
 msgid "Applying: %.*s"
 msgstr "Application de  %.*s"
 
-#: builtin/am.c:1767
+#: builtin/am.c:1756
 msgid "No changes -- Patch already applied."
 msgstr "Pas de changement -- Patch déjà appliqué."
 
-#: builtin/am.c:1773
+#: builtin/am.c:1762
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "le patch a échoué à %s %.*s"
 
-#: builtin/am.c:1777
+#: builtin/am.c:1766
 msgid "Use 'git am --show-current-patch' to see the failed patch"
 msgstr ""
 "Utilisez 'git am --show-current-patch' pour visualiser le patch en échec"
 
-#: builtin/am.c:1821
+#: builtin/am.c:1810
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -9005,7 +9048,7 @@
 "introduit les mêmes changements ; vous pourriez avoir envie de sauter ce "
 "patch."
 
-#: builtin/am.c:1828
+#: builtin/am.c:1817
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -9018,17 +9061,17 @@
 "Vous pouvez lancer 'git rm' sur un fichier \"supprimé par eux\" pour "
 "accepter son état."
 
-#: builtin/am.c:1935 builtin/am.c:1939 builtin/am.c:1951 builtin/reset.c:329
+#: builtin/am.c:1924 builtin/am.c:1928 builtin/am.c:1940 builtin/reset.c:329
 #: builtin/reset.c:337
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "Impossible d'analyser l'objet '%s'."
 
-#: builtin/am.c:1987
+#: builtin/am.c:1976
 msgid "failed to clean index"
 msgstr "échec du nettoyage de l'index"
 
-#: builtin/am.c:2031
+#: builtin/am.c:2020
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -9036,145 +9079,145 @@
 "Vous semblez avoir déplacé la HEAD depuis le dernier échec de 'am'.\n"
 "Pas de retour à ORIG_HEAD"
 
-#: builtin/am.c:2128
+#: builtin/am.c:2117
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr "Valeur invalide pour --patch-format : %s"
 
-#: builtin/am.c:2164
+#: builtin/am.c:2153
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<options>] [(<mbox> | <Maildir>)...]"
 
-#: builtin/am.c:2165
+#: builtin/am.c:2154
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<options>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2171
+#: builtin/am.c:2160
 msgid "run interactively"
 msgstr "exécution interactive"
 
-#: builtin/am.c:2173
+#: builtin/am.c:2162
 msgid "historical option -- no-op"
 msgstr "option historique -- no-op"
 
-#: builtin/am.c:2175
+#: builtin/am.c:2164
 msgid "allow fall back on 3way merging if needed"
 msgstr "permettre de revenir à une fusion à 3 points si nécessaire"
 
-#: builtin/am.c:2176 builtin/init-db.c:494 builtin/prune-packed.c:58
-#: builtin/repack.c:296 builtin/stash.c:806
+#: builtin/am.c:2165 builtin/init-db.c:494 builtin/prune-packed.c:58
+#: builtin/repack.c:297 builtin/stash.c:812
 msgid "be quiet"
 msgstr "être silencieux"
 
-#: builtin/am.c:2178
+#: builtin/am.c:2167
 msgid "add a Signed-off-by line to the commit message"
 msgstr "ajouter une ligne Signed-off-by au message de validation"
 
-#: builtin/am.c:2181
+#: builtin/am.c:2170
 msgid "recode into utf8 (default)"
 msgstr "recoder en utf-8 (par défaut)"
 
-#: builtin/am.c:2183
+#: builtin/am.c:2172
 msgid "pass -k flag to git-mailinfo"
 msgstr "passer l'option -k à git-mailinfo"
 
-#: builtin/am.c:2185
+#: builtin/am.c:2174
 msgid "pass -b flag to git-mailinfo"
 msgstr "passer l'option -b à git-mailinfo"
 
-#: builtin/am.c:2187
+#: builtin/am.c:2176
 msgid "pass -m flag to git-mailinfo"
 msgstr "passer l'option -m à git-mailinfo"
 
-#: builtin/am.c:2189
+#: builtin/am.c:2178
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "passer l'option --keep-cr à git-mailsplit fpour le format mbox"
 
-#: builtin/am.c:2192
+#: builtin/am.c:2181
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr ""
 "ne pas passer l'option --keep-cr à git-mailsplit indépendamment de am.keepcr"
 
-#: builtin/am.c:2195
+#: builtin/am.c:2184
 msgid "strip everything before a scissors line"
 msgstr "retirer tout le contenu avant la ligne des ciseaux"
 
-#: builtin/am.c:2197 builtin/am.c:2200 builtin/am.c:2203 builtin/am.c:2206
-#: builtin/am.c:2209 builtin/am.c:2212 builtin/am.c:2215 builtin/am.c:2218
-#: builtin/am.c:2224
+#: builtin/am.c:2186 builtin/am.c:2189 builtin/am.c:2192 builtin/am.c:2195
+#: builtin/am.c:2198 builtin/am.c:2201 builtin/am.c:2204 builtin/am.c:2207
+#: builtin/am.c:2213
 msgid "pass it through git-apply"
 msgstr "le passer jusqu'à git-apply"
 
-#: builtin/am.c:2214 builtin/commit.c:1368 builtin/fmt-merge-msg.c:671
-#: builtin/fmt-merge-msg.c:674 builtin/grep.c:881 builtin/merge.c:249
-#: builtin/pull.c:159 builtin/pull.c:218 builtin/rebase.c:1418
-#: builtin/repack.c:307 builtin/repack.c:311 builtin/repack.c:313
+#: builtin/am.c:2203 builtin/commit.c:1368 builtin/fmt-merge-msg.c:671
+#: builtin/fmt-merge-msg.c:674 builtin/grep.c:883 builtin/merge.c:249
+#: builtin/pull.c:160 builtin/pull.c:219 builtin/rebase.c:1442
+#: builtin/repack.c:308 builtin/repack.c:312 builtin/repack.c:314
 #: builtin/show-branch.c:650 builtin/show-ref.c:172 builtin/tag.c:403
-#: parse-options.h:141 parse-options.h:162 parse-options.h:312
+#: parse-options.h:150 parse-options.h:171 parse-options.h:312
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2220 builtin/branch.c:661 builtin/for-each-ref.c:38
-#: builtin/replace.c:554 builtin/tag.c:437 builtin/verify-tag.c:38
+#: builtin/am.c:2209 builtin/branch.c:661 builtin/for-each-ref.c:38
+#: builtin/replace.c:555 builtin/tag.c:437 builtin/verify-tag.c:38
 msgid "format"
 msgstr "format"
 
-#: builtin/am.c:2221
+#: builtin/am.c:2210
 msgid "format the patch(es) are in"
 msgstr "format de présentation des patchs"
 
-#: builtin/am.c:2227
+#: builtin/am.c:2216
 msgid "override error message when patch failure occurs"
 msgstr "surcharger le message d'erreur lors d'un échec d'application de patch"
 
-#: builtin/am.c:2229
+#: builtin/am.c:2218
 msgid "continue applying patches after resolving a conflict"
 msgstr "continuer à appliquer les patchs après résolution d'un conflit"
 
-#: builtin/am.c:2232
+#: builtin/am.c:2221
 msgid "synonyms for --continue"
 msgstr "synonymes de --continue"
 
-#: builtin/am.c:2235
+#: builtin/am.c:2224
 msgid "skip the current patch"
 msgstr "sauter le patch courant"
 
-#: builtin/am.c:2238
+#: builtin/am.c:2227
 msgid "restore the original branch and abort the patching operation."
 msgstr ""
 "restaurer la branche originale et abandonner les applications de patch."
 
-#: builtin/am.c:2241
+#: builtin/am.c:2230
 msgid "abort the patching operation but keep HEAD where it is."
 msgstr "abandonne l'opération de patch mais garde HEAD où il est."
 
-#: builtin/am.c:2244
+#: builtin/am.c:2233
 msgid "show the patch being applied."
 msgstr "afficher le patch en cours d'application."
 
-#: builtin/am.c:2248
+#: builtin/am.c:2237
 msgid "lie about committer date"
 msgstr "mentir sur la date de validation"
 
-#: builtin/am.c:2250
+#: builtin/am.c:2239
 msgid "use current timestamp for author date"
 msgstr "utiliser l'horodatage actuel pour la date d'auteur"
 
-#: builtin/am.c:2252 builtin/commit-tree.c:120 builtin/commit.c:1511
-#: builtin/merge.c:286 builtin/pull.c:193 builtin/rebase.c:489
-#: builtin/rebase.c:1459 builtin/revert.c:117 builtin/tag.c:418
+#: builtin/am.c:2241 builtin/commit-tree.c:120 builtin/commit.c:1511
+#: builtin/merge.c:286 builtin/pull.c:194 builtin/rebase.c:490
+#: builtin/rebase.c:1483 builtin/revert.c:117 builtin/tag.c:418
 msgid "key-id"
 msgstr "id-clé"
 
-#: builtin/am.c:2253 builtin/rebase.c:490 builtin/rebase.c:1460
+#: builtin/am.c:2242 builtin/rebase.c:491 builtin/rebase.c:1484
 msgid "GPG-sign commits"
 msgstr "signer les commits avec GPG"
 
-#: builtin/am.c:2256
+#: builtin/am.c:2245
 msgid "(internal use for git-rebase)"
 msgstr "(utilisation interne pour git-rebase)"
 
-#: builtin/am.c:2274
+#: builtin/am.c:2263
 msgid ""
 "The -b/--binary option has been a no-op for long time, and\n"
 "it will be removed. Please do not use it anymore."
@@ -9182,17 +9225,17 @@
 "L'option -b/--binary ne fait plus rien depuis longtemps,\n"
 "et elle sera supprimée. Veuillez ne plus l'utiliser."
 
-#: builtin/am.c:2281
+#: builtin/am.c:2270
 msgid "failed to read the index"
 msgstr "échec à la lecture de l'index"
 
-#: builtin/am.c:2296
+#: builtin/am.c:2285
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr ""
 "le répertoire précédent de rebasage %s existe toujours mais mbox donnée."
 
-#: builtin/am.c:2320
+#: builtin/am.c:2309
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -9201,13 +9244,13 @@
 "Répertoire abandonné %s trouvé.\n"
 "Utilisez \"git am --abort\" pour le supprimer."
 
-#: builtin/am.c:2326
+#: builtin/am.c:2315
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr ""
 "Pas de résolution de l'opération en cours, nous ne sommes pas dans une "
 "reprise."
 
-#: builtin/am.c:2336
+#: builtin/am.c:2325
 msgid "interactive mode requires patches on the command line"
 msgstr "le mode interactif requiert des rustines sur la ligne de commande"
 
@@ -9525,160 +9568,160 @@
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms exige 0 ou 1 argument"
 
-#: builtin/blame.c:32
+#: builtin/blame.c:31
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
 msgstr "git blame [<options>] [<rev-opts>] [<rev>] [--] <fichier>"
 
-#: builtin/blame.c:37
+#: builtin/blame.c:36
 msgid "<rev-opts> are documented in git-rev-list(1)"
 msgstr "<options-de-révision> sont documentés dans git-rev-list(1)"
 
-#: builtin/blame.c:410
+#: builtin/blame.c:409
 #, c-format
 msgid "expecting a color: %s"
 msgstr "couleur attendue : %s"
 
-#: builtin/blame.c:417
+#: builtin/blame.c:416
 msgid "must end with a color"
 msgstr "doit finir avec une couleur"
 
-#: builtin/blame.c:730
+#: builtin/blame.c:729
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr "couleur invalide '%s' dans color.blame.repeatedlines"
 
-#: builtin/blame.c:748
+#: builtin/blame.c:747
 msgid "invalid value for blame.coloring"
 msgstr "valeur invalide pour blame.coloring"
 
-#: builtin/blame.c:823
+#: builtin/blame.c:822
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "référence à ignorer %s introuvable"
 
-#: builtin/blame.c:845
+#: builtin/blame.c:844
 msgid "Show blame entries as we find them, incrementally"
 msgstr ""
 "Montrer les éléments de blâme au fur et à mesure de leur découverte, de "
 "manière incrémentale"
 
-#: builtin/blame.c:846
+#: builtin/blame.c:845
 msgid "Show blank SHA-1 for boundary commits (Default: off)"
 msgstr "Montrer un SHA-1 blanc pour les commits de limite (Défaut : désactivé)"
 
-#: builtin/blame.c:847
+#: builtin/blame.c:846
 msgid "Do not treat root commits as boundaries (Default: off)"
 msgstr ""
 "Ne pas traiter les commits racine comme des limites (Défaut : désactivé)"
 
-#: builtin/blame.c:848
+#: builtin/blame.c:847
 msgid "Show work cost statistics"
 msgstr "Montrer les statistiques de coût d'activité"
 
-#: builtin/blame.c:849
+#: builtin/blame.c:848
 msgid "Force progress reporting"
 msgstr "Forcer l'affichage de l'état d'avancement"
 
-#: builtin/blame.c:850
+#: builtin/blame.c:849
 msgid "Show output score for blame entries"
 msgstr "Montrer le score de sortie pour les éléments de blâme"
 
-#: builtin/blame.c:851
+#: builtin/blame.c:850
 msgid "Show original filename (Default: auto)"
 msgstr "Montrer les noms de fichier originaux (Défaut : auto)"
 
-#: builtin/blame.c:852
+#: builtin/blame.c:851
 msgid "Show original linenumber (Default: off)"
 msgstr "Montrer les numéros de lignes originaux (Défaut : désactivé)"
 
-#: builtin/blame.c:853
+#: builtin/blame.c:852
 msgid "Show in a format designed for machine consumption"
 msgstr "Afficher dans un format propice à la consommation par machine"
 
-#: builtin/blame.c:854
+#: builtin/blame.c:853
 msgid "Show porcelain format with per-line commit information"
 msgstr "Afficher en format porcelaine avec l'information de commit par ligne"
 
-#: builtin/blame.c:855
+#: builtin/blame.c:854
 msgid "Use the same output mode as git-annotate (Default: off)"
 msgstr "Utiliser le même mode de sortie que git-annotate (Défaut : désactivé)"
 
-#: builtin/blame.c:856
+#: builtin/blame.c:855
 msgid "Show raw timestamp (Default: off)"
 msgstr "Afficher les horodatages bruts (Défaut : désactivé)"
 
-#: builtin/blame.c:857
+#: builtin/blame.c:856
 msgid "Show long commit SHA1 (Default: off)"
 msgstr "Afficher les longs SHA1 de commits (Défaut : désactivé)"
 
-#: builtin/blame.c:858
+#: builtin/blame.c:857
 msgid "Suppress author name and timestamp (Default: off)"
 msgstr "Supprimer le nom de l'auteur et l'horodatage (Défaut : désactivé)"
 
-#: builtin/blame.c:859
+#: builtin/blame.c:858
 msgid "Show author email instead of name (Default: off)"
 msgstr "Afficher le courriel de l'auteur au lieu du nom (Défaut : désactivé)"
 
-#: builtin/blame.c:860
+#: builtin/blame.c:859
 msgid "Ignore whitespace differences"
 msgstr "Ignorer les différences d'espace"
 
-#: builtin/blame.c:861 builtin/log.c:1629
+#: builtin/blame.c:860 builtin/log.c:1630
 msgid "rev"
 msgstr "rév"
 
-#: builtin/blame.c:861
+#: builtin/blame.c:860
 msgid "Ignore <rev> when blaming"
 msgstr "ignore <rev> pendant le blâme"
 
-#: builtin/blame.c:862
+#: builtin/blame.c:861
 msgid "Ignore revisions from <file>"
 msgstr "ignorer les révisions listées dans <fichier>"
 
-#: builtin/blame.c:863
+#: builtin/blame.c:862
 msgid "color redundant metadata from previous line differently"
 msgstr ""
 "colorer différemment les métadonnées redondantes avec la ligne précédente"
 
-#: builtin/blame.c:864
+#: builtin/blame.c:863
 msgid "color lines by age"
 msgstr "colorier les lignes par âge"
 
-#: builtin/blame.c:871
+#: builtin/blame.c:870
 msgid "Use an experimental heuristic to improve diffs"
 msgstr "Utiliser une heuristique expérimentale pour améliorer les diffs"
 
-#: builtin/blame.c:873
+#: builtin/blame.c:872
 msgid "Spend extra cycles to find better match"
 msgstr ""
 "Dépenser des cycles supplémentaires pour trouver une meilleure correspondance"
 
-#: builtin/blame.c:874
+#: builtin/blame.c:873
 msgid "Use revisions from <file> instead of calling git-rev-list"
 msgstr ""
 "Utiliser les révisions du fichier <fichier> au lieu d'appeler git-rev-list"
 
-#: builtin/blame.c:875
+#: builtin/blame.c:874
 msgid "Use <file>'s contents as the final image"
 msgstr "Utiliser le contenu de <fichier> comme image finale"
 
-#: builtin/blame.c:876 builtin/blame.c:877
+#: builtin/blame.c:875 builtin/blame.c:876
 msgid "score"
 msgstr "score"
 
-#: builtin/blame.c:876
+#: builtin/blame.c:875
 msgid "Find line copies within and across files"
 msgstr "Trouver les copies de ligne dans et entre les fichiers"
 
-#: builtin/blame.c:877
+#: builtin/blame.c:876
 msgid "Find line movements within and across files"
 msgstr "Trouver les mouvements de ligne dans et entre les fichiers"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:877
 msgid "n,m"
 msgstr "n,m"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:877
 msgid "Process only line range n,m, counting from 1"
 msgstr ""
 "Traiter seulement l'intervalle de ligne n,m en commençant le compte à 1"
@@ -9923,7 +9966,7 @@
 msgid "do not use"
 msgstr "ne pas utiliser"
 
-#: builtin/branch.c:626 builtin/rebase.c:485
+#: builtin/branch.c:626 builtin/rebase.c:486
 msgid "upstream"
 msgstr "amont"
 
@@ -10034,7 +10077,7 @@
 msgid "format to use for the output"
 msgstr "format à utiliser pour la sortie"
 
-#: builtin/branch.c:684 builtin/clone.c:761
+#: builtin/branch.c:684 builtin/clone.c:760
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD non trouvée sous refs/heads !"
 
@@ -10139,7 +10182,7 @@
 msgid "Need a repository to unbundle."
 msgstr "Le dépaquetage d'un colis requiert un dépôt."
 
-#: builtin/cat-file.c:594
+#: builtin/cat-file.c:595
 msgid ""
 "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
 "p | <type> | --textconv | --filters) [--path=<path>] <object>"
@@ -10147,7 +10190,7 @@
 "git cat-file (-t [--allow-unknow-type] | -s [--allow-unknow-type] | -e | -p "
 "| <type> | --textconv | --filters) [--path=<chemin>] <objet>"
 
-#: builtin/cat-file.c:595
+#: builtin/cat-file.c:596
 msgid ""
 "git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
 "filters]"
@@ -10155,74 +10198,74 @@
 "git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
 "filters]"
 
-#: builtin/cat-file.c:616
+#: builtin/cat-file.c:617
 msgid "only one batch option may be specified"
 msgstr "une seule option de traitement ne peut être spécifiée à la fois"
 
-#: builtin/cat-file.c:634
+#: builtin/cat-file.c:635
 msgid "<type> can be one of: blob, tree, commit, tag"
 msgstr "<type> peut être : blob, tree, commit ou tag"
 
-#: builtin/cat-file.c:635
+#: builtin/cat-file.c:636
 msgid "show object type"
 msgstr "afficher le type de l'objet"
 
-#: builtin/cat-file.c:636
+#: builtin/cat-file.c:637
 msgid "show object size"
 msgstr "afficher la taille de l'objet"
 
-#: builtin/cat-file.c:638
+#: builtin/cat-file.c:639
 msgid "exit with zero when there's no error"
 msgstr "sortir avec un code d'erreur nul quand il n'y a aucune erreur"
 
-#: builtin/cat-file.c:639
+#: builtin/cat-file.c:640
 msgid "pretty-print object's content"
 msgstr "afficher avec mise en forme le contenu de l'objet"
 
-#: builtin/cat-file.c:641
+#: builtin/cat-file.c:642
 msgid "for blob objects, run textconv on object's content"
 msgstr "pour les objets blob, lancer textconv sur le contenu de l'objet"
 
-#: builtin/cat-file.c:643
+#: builtin/cat-file.c:644
 msgid "for blob objects, run filters on object's content"
 msgstr "pour les objets blob, lancer les filtres sur le contenu de l'objet"
 
-#: builtin/cat-file.c:644 git-submodule.sh:936
+#: builtin/cat-file.c:645 git-submodule.sh:936
 msgid "blob"
 msgstr "blob"
 
-#: builtin/cat-file.c:645
+#: builtin/cat-file.c:646
 msgid "use a specific path for --textconv/--filters"
 msgstr "utiliser un chemin spécifique pour --textconv/--filters"
 
-#: builtin/cat-file.c:647
+#: builtin/cat-file.c:648
 msgid "allow -s and -t to work with broken/corrupt objects"
 msgstr "autoriser -s et -t à travailler sur des objets cassés/corrompus"
 
-#: builtin/cat-file.c:648
+#: builtin/cat-file.c:649
 msgid "buffer --batch output"
 msgstr "bufferiser la sortie de --batch"
 
-#: builtin/cat-file.c:650
+#: builtin/cat-file.c:651
 msgid "show info and content of objects fed from the standard input"
 msgstr ""
 "afficher l'information et le contenu des objets passés en entrée standard"
 
-#: builtin/cat-file.c:654
+#: builtin/cat-file.c:655
 msgid "show info about objects fed from the standard input"
 msgstr "afficher l'information des objets passés en entrée standard"
 
-#: builtin/cat-file.c:658
+#: builtin/cat-file.c:659
 msgid "follow in-tree symlinks (used with --batch or --batch-check)"
 msgstr ""
 "suivre les liens symbolique internes à la copie de travail (utilisé avec --"
 "batch ou --batch-check)"
 
-#: builtin/cat-file.c:660
+#: builtin/cat-file.c:661
 msgid "show all objects with --batch or --batch-check"
 msgstr "montrer tous les objets avec --batch ou --batch-check"
 
-#: builtin/cat-file.c:662
+#: builtin/cat-file.c:663
 msgid "do not order --batch-all-objects output"
 msgstr "ne pas ordonner la sortie de --batch-all-objects"
 
@@ -10251,8 +10294,8 @@
 msgstr ""
 "terminer les enregistrements en entrée et en sortie par un caractère NUL"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1433 builtin/gc.c:538
-#: builtin/worktree.c:507
+#: builtin/check-ignore.c:21 builtin/checkout.c:1433 builtin/gc.c:537
+#: builtin/worktree.c:506
 msgid "suppress progress reporting"
 msgstr "supprimer l'état d'avancement"
 
@@ -10346,7 +10389,7 @@
 #: builtin/checkout-index.c:178 builtin/column.c:31
 #: builtin/submodule--helper.c:1373 builtin/submodule--helper.c:1376
 #: builtin/submodule--helper.c:1384 builtin/submodule--helper.c:1857
-#: builtin/worktree.c:680
+#: builtin/worktree.c:679
 msgid "string"
 msgstr "chaîne"
 
@@ -10374,100 +10417,100 @@
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<options>] [--source=<branche>] <fichier>..."
 
-#: builtin/checkout.c:172 builtin/checkout.c:211
+#: builtin/checkout.c:173 builtin/checkout.c:212
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "le chemin '%s' n'a pas notre version"
 
-#: builtin/checkout.c:174 builtin/checkout.c:213
+#: builtin/checkout.c:175 builtin/checkout.c:214
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "le chemin '%s' n'a pas leur version"
 
-#: builtin/checkout.c:190
+#: builtin/checkout.c:191
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "le chemin '%s' n'a aucune des versions nécessaires"
 
-#: builtin/checkout.c:240
+#: builtin/checkout.c:241
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "le chemin '%s' n'a pas les versions nécessaires"
 
-#: builtin/checkout.c:258
+#: builtin/checkout.c:259
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "chemin '%s' : impossible de fusionner"
 
-#: builtin/checkout.c:274
+#: builtin/checkout.c:275
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "Impossible d'ajouter le résultat de fusion pour '%s'"
 
-#: builtin/checkout.c:374
+#: builtin/checkout.c:375
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "%d conflit du fusion recréé"
 msgstr[1] "%d conflits du fusion recréés"
 
-#: builtin/checkout.c:379
+#: builtin/checkout.c:380
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "%d chemin mis à jour depuis %s"
 msgstr[1] "%d chemins mis à jour depuis %s"
 
-#: builtin/checkout.c:386
+#: builtin/checkout.c:387
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "%d chemin mis à jour depuis l'index"
 msgstr[1] "%d chemins mis à jour depuis l'index"
 
-#: builtin/checkout.c:409 builtin/checkout.c:412 builtin/checkout.c:415
-#: builtin/checkout.c:419
+#: builtin/checkout.c:410 builtin/checkout.c:413 builtin/checkout.c:416
+#: builtin/checkout.c:420
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "'%s' ne peut pas être utilisé avec des mises à jour de chemins"
 
-#: builtin/checkout.c:422 builtin/checkout.c:425
+#: builtin/checkout.c:423 builtin/checkout.c:426
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr "'%s' ne peut pas être utilisé avec %s"
 
-#: builtin/checkout.c:429
+#: builtin/checkout.c:430
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr ""
 "Impossible de mettre à jour les chemins et basculer sur la branche '%s' en "
 "même temps."
 
-#: builtin/checkout.c:433
+#: builtin/checkout.c:434
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "ni '%s', ni '%s' spécifié"
 
-#: builtin/checkout.c:437
+#: builtin/checkout.c:438
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "'%s' ne peut pas être utilisé quand '%s' n'est pas spécifié"
 
-#: builtin/checkout.c:442 builtin/checkout.c:447
+#: builtin/checkout.c:443 builtin/checkout.c:448
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "'%s' ou '%s' ne peut pas être utilisé avec %s"
 
-#: builtin/checkout.c:506 builtin/checkout.c:513
+#: builtin/checkout.c:507 builtin/checkout.c:514
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "le chemin '%s' n'est pas fusionné"
 
-#: builtin/checkout.c:679
+#: builtin/checkout.c:680
 msgid "you need to resolve your current index first"
 msgstr "vous devez d'abord résoudre votre index courant"
 
-#: builtin/checkout.c:729
+#: builtin/checkout.c:730
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -10477,12 +10520,6 @@
 "suivants :\n"
 "%s"
 
-#: builtin/checkout.c:736
-#, c-format
-msgid "staged changes in the following files may be lost: %s"
-msgstr ""
-"les modifications indexées dans les fichiers suivants seraient perdues : %s"
-
 #: builtin/checkout.c:833
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
@@ -10492,7 +10529,7 @@
 msgid "HEAD is now at"
 msgstr "HEAD est maintenant sur"
 
-#: builtin/checkout.c:879 builtin/clone.c:714
+#: builtin/checkout.c:879 builtin/clone.c:713
 msgid "unable to update HEAD"
 msgstr "impossible de mettre à jour HEAD"
 
@@ -10608,7 +10645,7 @@
 "'%s' pourrait être un fichier local ou un branche de suivi.\n"
 "Veuillez utiliser -- (et --no-guess en facultatif) pour les distinguer"
 
-#: builtin/checkout.c:1243 builtin/worktree.c:291 builtin/worktree.c:456
+#: builtin/checkout.c:1243 builtin/worktree.c:290 builtin/worktree.c:455
 #, c-format
 msgid "invalid reference: %s"
 msgstr "référence invalide : %s"
@@ -10711,9 +10748,9 @@
 msgid "missing branch or commit argument"
 msgstr "argument de branche ou de commit manquant"
 
-#: builtin/checkout.c:1437 builtin/clone.c:91 builtin/fetch.c:151
-#: builtin/merge.c:285 builtin/pull.c:137 builtin/push.c:575
-#: builtin/send-pack.c:174
+#: builtin/checkout.c:1437 builtin/clone.c:90 builtin/commit-graph.c:59
+#: builtin/commit-graph.c:180 builtin/fetch.c:166 builtin/merge.c:285
+#: builtin/pull.c:138 builtin/push.c:562 builtin/send-pack.c:174
 msgid "force progress reporting"
 msgstr "forcer l'affichage de l'état d'avancement"
 
@@ -10721,7 +10758,7 @@
 msgid "perform a 3-way merge with the new branch"
 msgstr "effectuer une fusion à 3 points avec la nouvelle branche"
 
-#: builtin/checkout.c:1439 builtin/log.c:1617 parse-options.h:318
+#: builtin/checkout.c:1439 builtin/log.c:1618 parse-options.h:318
 msgid "style"
 msgstr "style"
 
@@ -10729,7 +10766,7 @@
 msgid "conflict style (merge or diff3)"
 msgstr "style de conflit (merge (fusion) ou diff3)"
 
-#: builtin/checkout.c:1452 builtin/worktree.c:504
+#: builtin/checkout.c:1452 builtin/worktree.c:503
 msgid "detach HEAD at named commit"
 msgstr "détacher la HEAD au commit nommé"
 
@@ -10847,9 +10884,9 @@
 "ambigu, vous pouvez positionner checkout.defaultRemote=origin dans\n"
 "votre config."
 
-#: builtin/checkout.c:1691 builtin/checkout.c:1693 builtin/checkout.c:1733
-#: builtin/checkout.c:1735 builtin/clone.c:121 builtin/remote.c:169
-#: builtin/remote.c:171 builtin/worktree.c:500 builtin/worktree.c:502
+#: builtin/checkout.c:1691 builtin/checkout.c:1693 builtin/checkout.c:1742
+#: builtin/checkout.c:1744 builtin/clone.c:120 builtin/remote.c:169
+#: builtin/remote.c:171 builtin/worktree.c:499 builtin/worktree.c:501
 msgid "branch"
 msgstr "branche"
 
@@ -10874,39 +10911,39 @@
 msgid "use overlay mode (default)"
 msgstr "utiliser le mode de superposition (défaut)"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1743
 msgid "create and switch to a new branch"
 msgstr "créer et basculer sur une nouvelle branche"
 
-#: builtin/checkout.c:1736
+#: builtin/checkout.c:1745
 msgid "create/reset and switch to a branch"
 msgstr "créer/réinitialiser et basculer sur une branche"
 
-#: builtin/checkout.c:1738
+#: builtin/checkout.c:1747
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "interpréter 'git switch <branche-inexistante>'"
 
-#: builtin/checkout.c:1740
+#: builtin/checkout.c:1749
 msgid "throw away local modifications"
 msgstr "laisser tomber les modifications locales"
 
-#: builtin/checkout.c:1772
+#: builtin/checkout.c:1781
 msgid "which tree-ish to checkout from"
 msgstr "de quel <arbre-esque> faire l'extraction"
 
-#: builtin/checkout.c:1774
+#: builtin/checkout.c:1783
 msgid "restore the index"
 msgstr "restaurer l'index"
 
-#: builtin/checkout.c:1776
+#: builtin/checkout.c:1785
 msgid "restore the working tree (default)"
 msgstr "restaurer l'arbre de travail (par défaut)"
 
-#: builtin/checkout.c:1778
+#: builtin/checkout.c:1787
 msgid "ignore unmerged entries"
 msgstr "ignorer les entrées non-fusionnées"
 
-#: builtin/checkout.c:1779
+#: builtin/checkout.c:1788
 msgid "use overlay mode"
 msgstr "utiliser le mode de superposition"
 
@@ -10946,7 +10983,7 @@
 msgid "could not lstat %s\n"
 msgstr "lstat de %s impossible\n"
 
-#: builtin/clean.c:300 git-add--interactive.perl:593
+#: builtin/clean.c:301 git-add--interactive.perl:593
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -10959,7 +10996,7 @@
 "foo         - sélectionner un élément par un préfixe unique\n"
 "            - (vide) ne rien sélectionner\n"
 
-#: builtin/clean.c:304 git-add--interactive.perl:602
+#: builtin/clean.c:305 git-add--interactive.perl:602
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -10980,38 +11017,38 @@
 "*          - choisir tous les éléments\n"
 "           - (vide) terminer la sélection\n"
 
-#: builtin/clean.c:520 git-add--interactive.perl:568
+#: builtin/clean.c:521 git-add--interactive.perl:568
 #: git-add--interactive.perl:573
 #, c-format, perl-format
 msgid "Huh (%s)?\n"
 msgstr "Hein (%s) ?\n"
 
-#: builtin/clean.c:662
+#: builtin/clean.c:663
 #, c-format
 msgid "Input ignore patterns>> "
 msgstr "Entrez les motifs à ignorer>> "
 
-#: builtin/clean.c:699
+#: builtin/clean.c:700
 #, c-format
 msgid "WARNING: Cannot find items matched by: %s"
 msgstr "ATTENTION : Impossible de trouver les éléments correspondant à : %s"
 
-#: builtin/clean.c:720
+#: builtin/clean.c:721
 msgid "Select items to delete"
 msgstr "Sélectionner les éléments à supprimer"
 
 #. TRANSLATORS: Make sure to keep [y/N] as is
-#: builtin/clean.c:761
+#: builtin/clean.c:762
 #, c-format
 msgid "Remove %s [y/N]? "
 msgstr "Supprimer %s [y/N] ? "
 
-#: builtin/clean.c:786 git-add--interactive.perl:1763
+#: builtin/clean.c:787 git-add--interactive.perl:1763
 #, c-format
 msgid "Bye.\n"
 msgstr "Au revoir.\n"
 
-#: builtin/clean.c:794
+#: builtin/clean.c:795
 msgid ""
 "clean               - start cleaning\n"
 "filter by pattern   - exclude items from deletion\n"
@@ -11029,64 +11066,64 @@
 "help                - cet écran\n"
 "?                   - aide pour la sélection en ligne"
 
-#: builtin/clean.c:821 git-add--interactive.perl:1849
+#: builtin/clean.c:822 git-add--interactive.perl:1849
 msgid "*** Commands ***"
 msgstr "*** Commandes ***"
 
-#: builtin/clean.c:822 git-add--interactive.perl:1846
+#: builtin/clean.c:823 git-add--interactive.perl:1846
 msgid "What now"
 msgstr "Et maintenant ?"
 
-#: builtin/clean.c:830
+#: builtin/clean.c:831
 msgid "Would remove the following item:"
 msgid_plural "Would remove the following items:"
 msgstr[0] "Supprimerait l'élément suivant :"
 msgstr[1] "Supprimerait les éléments suivants :"
 
-#: builtin/clean.c:846
+#: builtin/clean.c:847
 msgid "No more files to clean, exiting."
 msgstr "Plus de fichier à nettoyer, sortie."
 
-#: builtin/clean.c:908
+#: builtin/clean.c:909
 msgid "do not print names of files removed"
 msgstr "ne pas afficher les noms des fichiers supprimés"
 
-#: builtin/clean.c:910
+#: builtin/clean.c:911
 msgid "force"
 msgstr "forcer"
 
-#: builtin/clean.c:911
+#: builtin/clean.c:912
 msgid "interactive cleaning"
 msgstr "nettoyage interactif"
 
-#: builtin/clean.c:913
+#: builtin/clean.c:914
 msgid "remove whole directories"
 msgstr "supprimer les répertoires entiers"
 
-#: builtin/clean.c:914 builtin/describe.c:546 builtin/describe.c:548
-#: builtin/grep.c:899 builtin/log.c:176 builtin/log.c:178
-#: builtin/ls-files.c:557 builtin/name-rev.c:413 builtin/name-rev.c:415
+#: builtin/clean.c:915 builtin/describe.c:548 builtin/describe.c:550
+#: builtin/grep.c:901 builtin/log.c:176 builtin/log.c:178
+#: builtin/ls-files.c:557 builtin/name-rev.c:417 builtin/name-rev.c:419
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr "motif"
 
-#: builtin/clean.c:915
+#: builtin/clean.c:916
 msgid "add <pattern> to ignore rules"
 msgstr "ajouter <motif> aux règles ignore"
 
-#: builtin/clean.c:916
+#: builtin/clean.c:917
 msgid "remove ignored files, too"
 msgstr "supprimer les fichiers ignorés, aussi"
 
-#: builtin/clean.c:918
+#: builtin/clean.c:919
 msgid "remove only ignored files"
 msgstr "supprimer seulement les fichiers ignorés"
 
-#: builtin/clean.c:936
+#: builtin/clean.c:937
 msgid "-x and -X cannot be used together"
 msgstr "-x et -X ne peuvent pas être utilisés ensemble"
 
-#: builtin/clean.c:940
+#: builtin/clean.c:941
 msgid ""
 "clean.requireForce set to true and neither -i, -n, nor -f given; refusing to "
 "clean"
@@ -11094,7 +11131,7 @@
 "clean.requireForce positionné à true et ni -i, -n ou -f fourni ; refus de "
 "nettoyer"
 
-#: builtin/clean.c:943
+#: builtin/clean.c:944
 msgid ""
 "clean.requireForce defaults to true and neither -i, -n, nor -f given; "
 "refusing to clean"
@@ -11102,164 +11139,164 @@
 "clean.requireForce à true par défaut et ni -i, -n ou -f fourni ; refus de "
 "nettoyer"
 
-#: builtin/clone.c:46
+#: builtin/clone.c:45
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<options>] [--] <dépôt> [<répertoire>]"
 
-#: builtin/clone.c:93
+#: builtin/clone.c:92
 msgid "don't create a checkout"
 msgstr "ne pas créer d'extraction"
 
-#: builtin/clone.c:94 builtin/clone.c:96 builtin/init-db.c:489
+#: builtin/clone.c:93 builtin/clone.c:95 builtin/init-db.c:489
 msgid "create a bare repository"
 msgstr "créer un dépôt nu"
 
-#: builtin/clone.c:98
+#: builtin/clone.c:97
 msgid "create a mirror repository (implies bare)"
 msgstr "créer un dépôt miroir (implique dépôt nu)"
 
-#: builtin/clone.c:100
+#: builtin/clone.c:99
 msgid "to clone from a local repository"
 msgstr "pour cloner depuis un dépôt local"
 
-#: builtin/clone.c:102
+#: builtin/clone.c:101
 msgid "don't use local hardlinks, always copy"
 msgstr "ne pas utiliser de liens durs locaux, toujours copier"
 
-#: builtin/clone.c:104
+#: builtin/clone.c:103
 msgid "setup as shared repository"
 msgstr "régler comme dépôt partagé"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:106
 msgid "pathspec"
 msgstr "spécificateur de chemin"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:106
 msgid "initialize submodules in the clone"
 msgstr "initialiser les sous-modules dans le clone"
 
-#: builtin/clone.c:110
+#: builtin/clone.c:109
 msgid "number of submodules cloned in parallel"
 msgstr "nombre de sous-modules clonés en parallèle"
 
-#: builtin/clone.c:111 builtin/init-db.c:486
+#: builtin/clone.c:110 builtin/init-db.c:486
 msgid "template-directory"
 msgstr "répertoire-modèle"
 
-#: builtin/clone.c:112 builtin/init-db.c:487
+#: builtin/clone.c:111 builtin/init-db.c:487
 msgid "directory from which templates will be used"
 msgstr "répertoire depuis lequel les modèles vont être utilisés"
 
-#: builtin/clone.c:114 builtin/clone.c:116 builtin/submodule--helper.c:1380
+#: builtin/clone.c:113 builtin/clone.c:115 builtin/submodule--helper.c:1380
 #: builtin/submodule--helper.c:1860
 msgid "reference repository"
 msgstr "dépôt de référence"
 
-#: builtin/clone.c:118 builtin/submodule--helper.c:1382
+#: builtin/clone.c:117 builtin/submodule--helper.c:1382
 #: builtin/submodule--helper.c:1862
 msgid "use --reference only while cloning"
 msgstr "utiliser seulement --reference pour cloner"
 
-#: builtin/clone.c:119 builtin/column.c:27 builtin/merge-file.c:46
-#: builtin/pack-objects.c:3314 builtin/repack.c:319
+#: builtin/clone.c:118 builtin/column.c:27 builtin/merge-file.c:46
+#: builtin/pack-objects.c:3294 builtin/repack.c:320
 msgid "name"
 msgstr "nom"
 
-#: builtin/clone.c:120
+#: builtin/clone.c:119
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "utiliser <nom> au lieu de 'origin' pour suivre la branche amont"
 
-#: builtin/clone.c:122
+#: builtin/clone.c:121
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "extraire <branche> au lieu de la HEAD du répertoire distant"
 
-#: builtin/clone.c:124
+#: builtin/clone.c:123
 msgid "path to git-upload-pack on the remote"
 msgstr "chemin vers git-upload-pack sur le serveur distant"
 
-#: builtin/clone.c:125 builtin/fetch.c:152 builtin/grep.c:838
-#: builtin/pull.c:226
+#: builtin/clone.c:124 builtin/fetch.c:167 builtin/grep.c:840
+#: builtin/pull.c:227
 msgid "depth"
 msgstr "profondeur"
 
-#: builtin/clone.c:126
+#: builtin/clone.c:125
 msgid "create a shallow clone of that depth"
 msgstr "créer un clone superficiel de cette profondeur"
 
-#: builtin/clone.c:127 builtin/fetch.c:154 builtin/pack-objects.c:3303
+#: builtin/clone.c:126 builtin/fetch.c:169 builtin/pack-objects.c:3283
 msgid "time"
 msgstr "heure"
 
-#: builtin/clone.c:128
+#: builtin/clone.c:127
 msgid "create a shallow clone since a specific time"
 msgstr "créer un clone superficiel depuis une date spécifique"
 
-#: builtin/clone.c:129 builtin/fetch.c:156 builtin/fetch.c:179
-#: builtin/rebase.c:1395
+#: builtin/clone.c:128 builtin/fetch.c:171 builtin/fetch.c:194
+#: builtin/rebase.c:1417
 msgid "revision"
 msgstr "révision"
 
-#: builtin/clone.c:130 builtin/fetch.c:157
+#: builtin/clone.c:129 builtin/fetch.c:172
 msgid "deepen history of shallow clone, excluding rev"
 msgstr ""
 "approfondir l'historique d'un clone superficiel en excluant une révision"
 
-#: builtin/clone.c:132
+#: builtin/clone.c:131
 msgid "clone only one branch, HEAD or --branch"
 msgstr "cloner seulement une branche, HEAD ou --branch"
 
-#: builtin/clone.c:134
+#: builtin/clone.c:133
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr ""
 "ne pas cloner les tags et indiquer aux récupérations futures de ne pas le "
 "faire"
 
-#: builtin/clone.c:136
+#: builtin/clone.c:135
 msgid "any cloned submodules will be shallow"
 msgstr "tous les sous-modules clonés seront superficiels"
 
-#: builtin/clone.c:137 builtin/init-db.c:495
+#: builtin/clone.c:136 builtin/init-db.c:495
 msgid "gitdir"
 msgstr "gitdir"
 
-#: builtin/clone.c:138 builtin/init-db.c:496
+#: builtin/clone.c:137 builtin/init-db.c:496
 msgid "separate git dir from working tree"
 msgstr "séparer le répertoire git de la copie de travail"
 
-#: builtin/clone.c:139
+#: builtin/clone.c:138
 msgid "key=value"
 msgstr "clé=valeur"
 
-#: builtin/clone.c:140
+#: builtin/clone.c:139
 msgid "set config inside the new repository"
 msgstr "régler la configuration dans le nouveau dépôt"
 
-#: builtin/clone.c:142 builtin/fetch.c:174 builtin/ls-remote.c:76
-#: builtin/push.c:585 builtin/send-pack.c:172
+#: builtin/clone.c:141 builtin/fetch.c:189 builtin/ls-remote.c:76
+#: builtin/push.c:572 builtin/send-pack.c:172
 msgid "server-specific"
 msgstr "spécifique au serveur"
 
-#: builtin/clone.c:142 builtin/fetch.c:174 builtin/ls-remote.c:76
-#: builtin/push.c:585 builtin/send-pack.c:173
+#: builtin/clone.c:141 builtin/fetch.c:189 builtin/ls-remote.c:76
+#: builtin/push.c:572 builtin/send-pack.c:173
 msgid "option to transmit"
 msgstr "option à transmettre"
 
-#: builtin/clone.c:143 builtin/fetch.c:175 builtin/pull.c:239
-#: builtin/push.c:586
+#: builtin/clone.c:142 builtin/fetch.c:190 builtin/pull.c:240
+#: builtin/push.c:573
 msgid "use IPv4 addresses only"
 msgstr "n'utiliser que des adresses IPv4"
 
-#: builtin/clone.c:145 builtin/fetch.c:177 builtin/pull.c:242
-#: builtin/push.c:588
+#: builtin/clone.c:144 builtin/fetch.c:192 builtin/pull.c:243
+#: builtin/push.c:575
 msgid "use IPv6 addresses only"
 msgstr "n'utiliser que des adresses IPv6"
 
-#: builtin/clone.c:149
+#: builtin/clone.c:148
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr ""
 "tous les sous-modules clonés utiliseront leur branche de suivi à distance"
 
-#: builtin/clone.c:285
+#: builtin/clone.c:284
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -11267,47 +11304,42 @@
 "Aucun nom de répertoire n'a pu être deviné\n"
 "Veuillez spécifier un répertoire dans la ligne de commande"
 
-#: builtin/clone.c:338
+#: builtin/clone.c:337
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "info : impossible d'ajouter une alternative pour '%s' : %s\n"
 
-#: builtin/clone.c:411
+#: builtin/clone.c:410
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s existe et n'est pas un répertoire"
 
-#: builtin/clone.c:428
+#: builtin/clone.c:427
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "échec du démarrage un itérateur sur '%s'"
 
-#: builtin/clone.c:453
-#, c-format
-msgid "failed to unlink '%s'"
-msgstr "échec pour délier '%s'"
-
-#: builtin/clone.c:458
+#: builtin/clone.c:457
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "échec de la création du lien '%s'"
 
-#: builtin/clone.c:462
+#: builtin/clone.c:461
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "échec de la copie vers '%s'"
 
-#: builtin/clone.c:467
+#: builtin/clone.c:466
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "échec de l'itération sur '%s'"
 
-#: builtin/clone.c:492
+#: builtin/clone.c:491
 #, c-format
 msgid "done.\n"
 msgstr "fait.\n"
 
-#: builtin/clone.c:506
+#: builtin/clone.c:505
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -11317,98 +11349,98 @@
 "Vous pouvez inspecter ce qui a été extrait avec 'git status'\n"
 "et réessayer avec 'git restore --source=HEAD :/'\n"
 
-#: builtin/clone.c:583
+#: builtin/clone.c:582
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "Impossible de trouver la branche distante '%s' à cloner."
 
-#: builtin/clone.c:702
+#: builtin/clone.c:701
 #, c-format
 msgid "unable to update %s"
 msgstr "impossible de mettre à jour %s"
 
-#: builtin/clone.c:752
+#: builtin/clone.c:751
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 "la HEAD distante réfère à une référence non existante, impossible de "
 "l'extraire.\n"
 
-#: builtin/clone.c:783
+#: builtin/clone.c:782
 msgid "unable to checkout working tree"
 msgstr "impossible d'extraire la copie de travail"
 
-#: builtin/clone.c:833
+#: builtin/clone.c:832
 msgid "unable to write parameters to config file"
 msgstr "impossible d'écrire les paramètres dans le fichier de configuration"
 
-#: builtin/clone.c:896
+#: builtin/clone.c:895
 msgid "cannot repack to clean up"
 msgstr "impossible de remballer pour nettoyer"
 
-#: builtin/clone.c:898
+#: builtin/clone.c:897
 msgid "cannot unlink temporary alternates file"
 msgstr "impossible de délier le fichier temporaire alternates"
 
-#: builtin/clone.c:938 builtin/receive-pack.c:1950
+#: builtin/clone.c:937 builtin/receive-pack.c:1948
 msgid "Too many arguments."
 msgstr "Trop d'arguments."
 
-#: builtin/clone.c:942
+#: builtin/clone.c:941
 msgid "You must specify a repository to clone."
 msgstr "Vous devez spécifier un dépôt à cloner."
 
-#: builtin/clone.c:955
+#: builtin/clone.c:954
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "les options --bare et --origin %s sont incompatibles."
 
-#: builtin/clone.c:958
+#: builtin/clone.c:957
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "--bare et --separate-git-dir sont incompatibles."
 
-#: builtin/clone.c:971
+#: builtin/clone.c:970
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "le dépôt '%s' n'existe pas"
 
-#: builtin/clone.c:977 builtin/fetch.c:1660
+#: builtin/clone.c:976 builtin/fetch.c:1790
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "la profondeur %s n'est pas un entier positif"
 
-#: builtin/clone.c:987
+#: builtin/clone.c:986
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr ""
 "le chemin de destination '%s' existe déjà et n'est pas un répertoire vide."
 
-#: builtin/clone.c:997
+#: builtin/clone.c:996
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "la copie de travail '%s' existe déjà."
 
-#: builtin/clone.c:1012 builtin/clone.c:1033 builtin/difftool.c:264
-#: builtin/worktree.c:303 builtin/worktree.c:335
+#: builtin/clone.c:1011 builtin/clone.c:1032 builtin/difftool.c:271
+#: builtin/log.c:1785 builtin/worktree.c:302 builtin/worktree.c:334
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "impossible de créer les répertoires de premier niveau dans '%s'"
 
-#: builtin/clone.c:1017
+#: builtin/clone.c:1016
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "impossible de créer le répertoire de la copie de travail '%s'"
 
-#: builtin/clone.c:1037
+#: builtin/clone.c:1036
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Clonage dans le dépôt nu '%s'\n"
 
-#: builtin/clone.c:1039
+#: builtin/clone.c:1038
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Clonage dans '%s'...\n"
 
-#: builtin/clone.c:1063
+#: builtin/clone.c:1062
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
@@ -11416,41 +11448,41 @@
 "clone --recursive n'est pas compatible avec à la fois --reference et --"
 "reference-if-able"
 
-#: builtin/clone.c:1124
+#: builtin/clone.c:1123
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr ""
 "--depth est ignoré dans les clones locaux : utilisez plutôt \"file://\"."
 
-#: builtin/clone.c:1126
+#: builtin/clone.c:1125
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-since est ignoré dans les clones locaux : utilisez plutôt \"file://"
 "\"."
 
-#: builtin/clone.c:1128
+#: builtin/clone.c:1127
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-exclude est ignoré dans les clones locaux : utilisez plutôt "
 "\"file://\"."
 
-#: builtin/clone.c:1130
+#: builtin/clone.c:1129
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr "--filter est ignoré dans les clones locaux ; utilisez plutôt file:// ."
 
-#: builtin/clone.c:1133
+#: builtin/clone.c:1132
 msgid "source repository is shallow, ignoring --local"
 msgstr "le dépôt source est superficiel, option --local ignorée"
 
-#: builtin/clone.c:1138
+#: builtin/clone.c:1137
 msgid "--local is ignored"
 msgstr "--local est ignoré"
 
-#: builtin/clone.c:1215 builtin/clone.c:1223
+#: builtin/clone.c:1212 builtin/clone.c:1220
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "La branche distante %s n'a pas été trouvée dans le dépôt amont %s"
 
-#: builtin/clone.c:1226
+#: builtin/clone.c:1223
 msgid "You appear to have cloned an empty repository."
 msgstr "Vous semblez avoir cloné un dépôt vide."
 
@@ -11528,7 +11560,7 @@
 msgstr "id d'un objet commit parent"
 
 #: builtin/commit-tree.c:114 builtin/commit.c:1500 builtin/merge.c:270
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1460
+#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1469
 #: builtin/tag.c:412
 msgid "message"
 msgstr "message"
@@ -11542,7 +11574,7 @@
 msgstr "lire le message de validation depuis un fichier"
 
 #: builtin/commit-tree.c:121 builtin/commit.c:1512 builtin/merge.c:287
-#: builtin/pull.c:194 builtin/revert.c:118
+#: builtin/pull.c:195 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "signer la validation avec GPG"
 
@@ -11874,8 +11906,8 @@
 msgid "version"
 msgstr "version"
 
-#: builtin/commit.c:1347 builtin/commit.c:1529 builtin/push.c:561
-#: builtin/worktree.c:651
+#: builtin/commit.c:1347 builtin/commit.c:1529 builtin/push.c:548
+#: builtin/worktree.c:650
 msgid "machine-readable output"
 msgstr "sortie pour traitement automatique"
 
@@ -11888,8 +11920,8 @@
 msgstr "terminer les éléments par NUL"
 
 #: builtin/commit.c:1355 builtin/commit.c:1359 builtin/commit.c:1537
-#: builtin/fast-export.c:1125 builtin/fast-export.c:1128
-#: builtin/fast-export.c:1131 builtin/rebase.c:1471 parse-options.h:332
+#: builtin/fast-export.c:1153 builtin/fast-export.c:1156
+#: builtin/fast-export.c:1159 builtin/rebase.c:1495 parse-options.h:332
 msgid "mode"
 msgstr "mode"
 
@@ -11907,7 +11939,7 @@
 "afficher les fichiers ignorés, \"mode\" facultatif : traditional "
 "(traditionnel), matching (correspondant), no. (Défaut : traditional)"
 
-#: builtin/commit.c:1362 parse-options.h:179
+#: builtin/commit.c:1362 parse-options.h:188
 msgid "when"
 msgstr "quand"
 
@@ -11962,7 +11994,7 @@
 msgid "override author for commit"
 msgstr "remplacer l'auteur pour la validation"
 
-#: builtin/commit.c:1499 builtin/gc.c:539
+#: builtin/commit.c:1499 builtin/gc.c:538
 msgid "date"
 msgstr "date"
 
@@ -11998,8 +12030,8 @@
 msgstr ""
 "à présent je suis l'auteur de la validation (utilisé avec -C/-c/--amend)"
 
-#: builtin/commit.c:1506 builtin/log.c:1564 builtin/merge.c:289
-#: builtin/pull.c:163 builtin/revert.c:110
+#: builtin/commit.c:1506 builtin/log.c:1565 builtin/merge.c:289
+#: builtin/pull.c:164 builtin/revert.c:110
 msgid "add Signed-off-by:"
 msgstr "ajouter une entrée Signed-off-by :"
 
@@ -12106,69 +12138,72 @@
 msgstr "git commit-graph read [--object-dir <objdir>]"
 
 #: builtin/commit-graph.c:13 builtin/commit-graph.c:19
-msgid "git commit-graph verify [--object-dir <objdir>] [--shallow]"
-msgstr "git commit-graph verify [--object-dir <objdir>] [--shallow]"
+msgid ""
+"git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
+msgstr ""
+"git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
 
 #: builtin/commit-graph.c:14 builtin/commit-graph.c:29
 msgid ""
 "git commit-graph write [--object-dir <objdir>] [--append|--split] [--"
-"reachable|--stdin-packs|--stdin-commits] <split options>"
+"reachable|--stdin-packs|--stdin-commits] [--[no-]progress] <split options>"
 msgstr ""
-"git commit-graph write [--object-dir <objdir>] [--append|--split] [--"
-"reachable|--stdin-packs|--stdin-commits] <options de division>"
+"git commit-graph write [--object-dir <répertoire-d'objet>] [--append|--"
+"split] [--reachable|--stdin-packs|--stdin-commits] [--|no-]progress] "
+"<options de division>"
 
-#: builtin/commit-graph.c:54 builtin/commit-graph.c:100
-#: builtin/commit-graph.c:161 builtin/commit-graph.c:237 builtin/fetch.c:163
-#: builtin/log.c:1584
+#: builtin/commit-graph.c:55 builtin/commit-graph.c:107
+#: builtin/commit-graph.c:170 builtin/commit-graph.c:254 builtin/fetch.c:178
+#: builtin/log.c:1585
 msgid "dir"
 msgstr "répertoire"
 
-#: builtin/commit-graph.c:55 builtin/commit-graph.c:101
-#: builtin/commit-graph.c:162 builtin/commit-graph.c:238
+#: builtin/commit-graph.c:56 builtin/commit-graph.c:108
+#: builtin/commit-graph.c:171 builtin/commit-graph.c:255
 msgid "The object directory to store the graph"
 msgstr "Le répertoire d'objet où stocker le graphe"
 
-#: builtin/commit-graph.c:57
+#: builtin/commit-graph.c:58
 msgid "if the commit-graph is split, only verify the tip file"
 msgstr ""
 "si le graphe de commit est divisé, vérifier seulement le fichier sommet"
 
-#: builtin/commit-graph.c:73 builtin/commit-graph.c:116
+#: builtin/commit-graph.c:80 builtin/commit-graph.c:125
 #, c-format
 msgid "Could not open commit-graph '%s'"
 msgstr "impossible d'ouvrir le graphe de commit '%s'"
 
-#: builtin/commit-graph.c:164
+#: builtin/commit-graph.c:173
 msgid "start walk at all refs"
 msgstr "commencer le parcours à toutes les réfs"
 
-#: builtin/commit-graph.c:166
+#: builtin/commit-graph.c:175
 msgid "scan pack-indexes listed by stdin for commits"
 msgstr "scanner les index compactés listés sur stdin à la recherche de commits"
 
-#: builtin/commit-graph.c:168
+#: builtin/commit-graph.c:177
 msgid "start walk at commits listed by stdin"
 msgstr "commencer le parcours aux commits listés sur stdin"
 
-#: builtin/commit-graph.c:170
+#: builtin/commit-graph.c:179
 msgid "include all commits already in the commit-graph file"
 msgstr ""
 "inclure tous les commits déjà présents dans le fichier de graphe de commits"
 
-#: builtin/commit-graph.c:172
+#: builtin/commit-graph.c:182
 msgid "allow writing an incremental commit-graph file"
 msgstr "permettre d'écrire un fichier incrémental de graphe de commit"
 
-#: builtin/commit-graph.c:174 builtin/commit-graph.c:178
+#: builtin/commit-graph.c:184 builtin/commit-graph.c:188
 msgid "maximum number of commits in a non-base split commit-graph"
 msgstr ""
 "le nombre maximum de commits dans un graphe de commit divisé pas de base"
 
-#: builtin/commit-graph.c:176
+#: builtin/commit-graph.c:186
 msgid "maximum ratio between two levels of a split commit-graph"
 msgstr "rapport maximum entre deux niveaux d'un graphe de commit divisé"
 
-#: builtin/commit-graph.c:191
+#: builtin/commit-graph.c:204
 msgid "use at most one of --reachable, --stdin-commits, or --stdin-packs"
 msgstr "utilisez un seul parmi --reachable, --stdin-commits ou --stdin-packs"
 
@@ -12487,59 +12522,59 @@
 msgid "print sizes in human readable format"
 msgstr "affiche les tailles dans un format humainement lisible"
 
-#: builtin/describe.c:27
+#: builtin/describe.c:26
 msgid "git describe [<options>] [<commit-ish>...]"
 msgstr "git describe [<options>] <commit ou apparenté>*"
 
-#: builtin/describe.c:28
+#: builtin/describe.c:27
 msgid "git describe [<options>] --dirty"
 msgstr "git describe [<options>] --dirty"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "head"
 msgstr "tête"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "lightweight"
 msgstr "léger"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "annotated"
 msgstr "annoté"
 
-#: builtin/describe.c:273
+#: builtin/describe.c:275
 #, c-format
 msgid "annotated tag %s not available"
 msgstr "l'étiquette annotée %s n'est pas disponible"
 
-#: builtin/describe.c:277
+#: builtin/describe.c:279
 #, c-format
 msgid "annotated tag %s has no embedded name"
 msgstr "l'étiquette annotée %s n'a pas de nom embarqué"
 
-#: builtin/describe.c:279
+#: builtin/describe.c:281
 #, c-format
 msgid "tag '%s' is really '%s' here"
 msgstr "l'étiquette '%s' est en fait '%s'"
 
-#: builtin/describe.c:323
+#: builtin/describe.c:325
 #, c-format
 msgid "no tag exactly matches '%s'"
 msgstr "aucune étiquette ne correspond parfaitement à '%s'"
 
-#: builtin/describe.c:325
+#: builtin/describe.c:327
 #, c-format
 msgid "No exact match on refs or tags, searching to describe\n"
 msgstr ""
 "Pas de correspondance exacte sur des réfs ou des étiquettes, recherche par "
 "describe\n"
 
-#: builtin/describe.c:379
+#: builtin/describe.c:381
 #, c-format
 msgid "finished search at %s\n"
 msgstr "recherche terminée à %s\n"
 
-#: builtin/describe.c:405
+#: builtin/describe.c:407
 #, c-format
 msgid ""
 "No annotated tags can describe '%s'.\n"
@@ -12548,7 +12583,7 @@
 "Aucune étiquette annotée ne peut décrire '%s'.\n"
 "Cependant, il existe des étiquettes non-annotées : essayez avec --tags."
 
-#: builtin/describe.c:409
+#: builtin/describe.c:411
 #, c-format
 msgid ""
 "No tags can describe '%s'.\n"
@@ -12557,12 +12592,12 @@
 "Aucune étiquette ne peut décrire '%s'.\n"
 "Essayez --always, ou créez des étiquettes."
 
-#: builtin/describe.c:439
+#: builtin/describe.c:441
 #, c-format
 msgid "traversed %lu commits\n"
 msgstr "%lu commits parcourus\n"
 
-#: builtin/describe.c:442
+#: builtin/describe.c:444
 #, c-format
 msgid ""
 "more than %i tags found; listed %i most recent\n"
@@ -12572,92 +12607,92 @@
 "affichées\n"
 "abandon de la recherche à %s\n"
 
-#: builtin/describe.c:510
+#: builtin/describe.c:512
 #, c-format
 msgid "describe %s\n"
 msgstr "décrire %s\n"
 
-#: builtin/describe.c:513
+#: builtin/describe.c:515
 #, c-format
 msgid "Not a valid object name %s"
 msgstr "%s n'est pas un nom d'objet valide"
 
-#: builtin/describe.c:521
+#: builtin/describe.c:523
 #, c-format
 msgid "%s is neither a commit nor blob"
 msgstr "%s n'est ni un commit ni un blob"
 
-#: builtin/describe.c:535
+#: builtin/describe.c:537
 msgid "find the tag that comes after the commit"
 msgstr "rechercher l'étiquette qui suit le commit"
 
-#: builtin/describe.c:536
+#: builtin/describe.c:538
 msgid "debug search strategy on stderr"
 msgstr "déboguer la stratégie de recherche sur stderr"
 
-#: builtin/describe.c:537
+#: builtin/describe.c:539
 msgid "use any ref"
 msgstr "utiliser n'importe quelle référence"
 
-#: builtin/describe.c:538
+#: builtin/describe.c:540
 msgid "use any tag, even unannotated"
 msgstr "utiliser n'importe quelle étiquette, même non-annotée"
 
-#: builtin/describe.c:539
+#: builtin/describe.c:541
 msgid "always use long format"
 msgstr "toujours utiliser le format long"
 
-#: builtin/describe.c:540
+#: builtin/describe.c:542
 msgid "only follow first parent"
 msgstr "ne suivre que le premier parent"
 
-#: builtin/describe.c:543
+#: builtin/describe.c:545
 msgid "only output exact matches"
 msgstr "n'afficher que les correspondances exactes"
 
-#: builtin/describe.c:545
+#: builtin/describe.c:547
 msgid "consider <n> most recent tags (default: 10)"
 msgstr ""
 "considérer uniquement les <n> étiquettes le plus récentes (défaut : 10)"
 
-#: builtin/describe.c:547
+#: builtin/describe.c:549
 msgid "only consider tags matching <pattern>"
 msgstr "ne considérer que les étiquettes correspondant à <motif>"
 
-#: builtin/describe.c:549
+#: builtin/describe.c:551
 msgid "do not consider tags matching <pattern>"
 msgstr "ne pas considérer les étiquettes correspondant à <motif>"
 
-#: builtin/describe.c:551 builtin/name-rev.c:422
+#: builtin/describe.c:553 builtin/name-rev.c:426
 msgid "show abbreviated commit object as fallback"
 msgstr "afficher les objets commits abrégés en dernier recours"
 
-#: builtin/describe.c:552 builtin/describe.c:555
+#: builtin/describe.c:554 builtin/describe.c:557
 msgid "mark"
 msgstr "marque"
 
-#: builtin/describe.c:553
+#: builtin/describe.c:555
 msgid "append <mark> on dirty working tree (default: \"-dirty\")"
 msgstr "ajouter <marque> si la copie de travail est sale (défaut : \"-dirty\")"
 
-#: builtin/describe.c:556
+#: builtin/describe.c:558
 msgid "append <mark> on broken working tree (default: \"-broken\")"
 msgstr ""
 "ajouter <marque> si la copie de travail est cassée (défaut : \"-broken\")"
 
-#: builtin/describe.c:574
+#: builtin/describe.c:576
 msgid "--long is incompatible with --abbrev=0"
 msgstr "--long et --abbrev=0 sont incompatibles"
 
-#: builtin/describe.c:603
+#: builtin/describe.c:605
 msgid "No names found, cannot describe anything."
 msgstr "aucun nom trouvé, impossible de décrire quoi que ce soit."
 
-#: builtin/describe.c:654
+#: builtin/describe.c:656
 msgid "--dirty is incompatible with commit-ishes"
 msgstr "--dirty est incompatible avec la spécification de commits ou assimilés"
 
-#: builtin/describe.c:656
+#: builtin/describe.c:658
 msgid "--broken is incompatible with commit-ishes"
 msgstr "--broken est incompatible avec les commits ou assimilés"
 
@@ -12694,27 +12729,27 @@
 msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
 msgstr "git difftool [<options>] [<commit> [<commit>]] [--] [<chemin>...]"
 
-#: builtin/difftool.c:253
+#: builtin/difftool.c:260
 #, c-format
 msgid "failed: %d"
 msgstr "échec : %d"
 
-#: builtin/difftool.c:295
+#: builtin/difftool.c:302
 #, c-format
 msgid "could not read symlink %s"
 msgstr "lecture du lien symbolique %s impossible"
 
-#: builtin/difftool.c:297
+#: builtin/difftool.c:304
 #, c-format
 msgid "could not read symlink file %s"
 msgstr "impossible de lire le fichier symlink %s"
 
-#: builtin/difftool.c:305
+#: builtin/difftool.c:312
 #, c-format
 msgid "could not read object %s for symlink %s"
 msgstr "Impossible de lire l'objet %s pour le symlink %s"
 
-#: builtin/difftool.c:406
+#: builtin/difftool.c:413
 msgid ""
 "combined diff formats('-c' and '--cc') are not supported in\n"
 "directory diff mode('-d' and '--dir-diff')."
@@ -12722,53 +12757,53 @@
 "les formats de diff combinés ('-c' et '--cc') ne sont pas supportés\n"
 "dans le mode de diff de répertoire ('-d' et '--dir-diff')."
 
-#: builtin/difftool.c:626
+#: builtin/difftool.c:634
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "les deux fichiers sont modifiés : '%s' et '%s'."
 
-#: builtin/difftool.c:628
+#: builtin/difftool.c:636
 msgid "working tree file has been left."
 msgstr "le fichier dans l'arbre de travail a été laissé."
 
-#: builtin/difftool.c:639
+#: builtin/difftool.c:647
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "des fichiers temporaires existent dans '%s'."
 
-#: builtin/difftool.c:640
+#: builtin/difftool.c:648
 msgid "you may want to cleanup or recover these."
 msgstr "vous pourriez souhaiter les nettoyer ou les récupérer."
 
-#: builtin/difftool.c:689
+#: builtin/difftool.c:697
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr "utiliser `diff.guitool` au lieu de `diff.tool`"
 
-#: builtin/difftool.c:691
+#: builtin/difftool.c:699
 msgid "perform a full-directory diff"
 msgstr "réalise un diff de répertoire complet"
 
-#: builtin/difftool.c:693
+#: builtin/difftool.c:701
 msgid "do not prompt before launching a diff tool"
 msgstr "ne pas confirmer avant de lancer l'outil de diff"
 
-#: builtin/difftool.c:698
+#: builtin/difftool.c:706
 msgid "use symlinks in dir-diff mode"
 msgstr "utiliser les liens symboliques en mode de diff de répertoire"
 
-#: builtin/difftool.c:699
+#: builtin/difftool.c:707
 msgid "tool"
 msgstr "outil"
 
-#: builtin/difftool.c:700
+#: builtin/difftool.c:708
 msgid "use the specified diff tool"
 msgstr "utiliser l'outil de diff spécifié"
 
-#: builtin/difftool.c:702
+#: builtin/difftool.c:710
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr "afficher une liste des outils de diff utilisables avec `--tool`"
 
-#: builtin/difftool.c:705
+#: builtin/difftool.c:713
 msgid ""
 "make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
 "code"
@@ -12776,31 +12811,31 @@
 "provoque la fin de 'git-difftool' si l'outil de diff invoqué renvoie un code "
 "non-nul"
 
-#: builtin/difftool.c:708
+#: builtin/difftool.c:716
 msgid "specify a custom command for viewing diffs"
 msgstr "spécifier une commande personnalisée pour visualiser les différences"
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:717
 msgid "passed to `diff`"
 msgstr "passé à `diff`"
 
-#: builtin/difftool.c:724
+#: builtin/difftool.c:732
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool exige un arbre de travail ou --no-index"
 
-#: builtin/difftool.c:731
+#: builtin/difftool.c:739
 msgid "--dir-diff is incompatible with --no-index"
 msgstr "--dir-diff est incompatible avec --no-index"
 
-#: builtin/difftool.c:734
+#: builtin/difftool.c:742
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr "--gui, --tool et --extcmd sont mutuellement exclusifs"
 
-#: builtin/difftool.c:742
+#: builtin/difftool.c:750
 msgid "no <tool> given for --tool=<tool>"
 msgstr "pas d'<outil> spécifié pour --tool=<outil>"
 
-#: builtin/difftool.c:749
+#: builtin/difftool.c:757
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "pas de <commande> spécifié pour --extcmd=<commande>"
 
@@ -12841,164 +12876,191 @@
 msgid "git fast-export [rev-list-opts]"
 msgstr "git fast-export [options-de-liste-de-révisions]"
 
-#: builtin/fast-export.c:1124
+#: builtin/fast-export.c:852
+msgid "Error: Cannot export nested tags unless --mark-tags is specified."
+msgstr ""
+"Erreur : impossible d'exporter des étiquettes imbriquées à moins que --mark-"
+"tags ne soit spécifié."
+
+#: builtin/fast-export.c:1152
 msgid "show progress after <n> objects"
 msgstr "afficher la progression après <n> objets"
 
-#: builtin/fast-export.c:1126
+#: builtin/fast-export.c:1154
 msgid "select handling of signed tags"
 msgstr "sélectionner la gestion des étiquettes signées"
 
-#: builtin/fast-export.c:1129
+#: builtin/fast-export.c:1157
 msgid "select handling of tags that tag filtered objects"
 msgstr ""
 "sélectionner la gestion des étiquettes qui pointent sur des objets filtrés"
 
-#: builtin/fast-export.c:1132
+#: builtin/fast-export.c:1160
 msgid "select handling of commit messages in an alternate encoding"
 msgstr ""
 "sélectionner la gestion des messages de validation dans un encodage "
 "alternatif"
 
-#: builtin/fast-export.c:1135
+#: builtin/fast-export.c:1163
 msgid "Dump marks to this file"
 msgstr "Enregistrer les marques dans ce fichier"
 
-#: builtin/fast-export.c:1137
+#: builtin/fast-export.c:1165
 msgid "Import marks from this file"
 msgstr "importer les marques depuis ce fichier"
 
-#: builtin/fast-export.c:1139
+#: builtin/fast-export.c:1169
+msgid "Import marks from this file if it exists"
+msgstr "importer les marques depuis ce fichier s'il existe"
+
+#: builtin/fast-export.c:1171
 msgid "Fake a tagger when tags lack one"
 msgstr "falsifier un auteur d'étiquette si l'étiquette n'en présente pas"
 
-#: builtin/fast-export.c:1141
+#: builtin/fast-export.c:1173
 msgid "Output full tree for each commit"
 msgstr "Afficher l'arbre complet pour chaque commit"
 
-#: builtin/fast-export.c:1143
+#: builtin/fast-export.c:1175
 msgid "Use the done feature to terminate the stream"
 msgstr "Utiliser la fonction \"done\" pour terminer le flux"
 
-#: builtin/fast-export.c:1144
+#: builtin/fast-export.c:1176
 msgid "Skip output of blob data"
 msgstr "Sauter l'affichage de données de blob"
 
-#: builtin/fast-export.c:1145 builtin/log.c:1632
+#: builtin/fast-export.c:1177 builtin/log.c:1633
 msgid "refspec"
 msgstr "spécificateur de référence"
 
-#: builtin/fast-export.c:1146
+#: builtin/fast-export.c:1178
 msgid "Apply refspec to exported refs"
 msgstr "Appliquer le spécificateur de référence aux références exportées"
 
-#: builtin/fast-export.c:1147
+#: builtin/fast-export.c:1179
 msgid "anonymize output"
 msgstr "anonymise la sortie"
 
-#: builtin/fast-export.c:1149
+#: builtin/fast-export.c:1181
 msgid "Reference parents which are not in fast-export stream by object id"
 msgstr ""
 "les parents références qui ne sont pas dans le flux d'export rapide par id "
 "d'objet"
 
-#: builtin/fast-export.c:1151
+#: builtin/fast-export.c:1183
 msgid "Show original object ids of blobs/commits"
 msgstr "Afficher les ids d'objet originaux des blobs/commits"
 
-#: builtin/fetch.c:30
+#: builtin/fast-export.c:1185
+msgid "Label tags with mark ids"
+msgstr "Marquer les étiquettes avec des ids de marque"
+
+#: builtin/fast-export.c:1220
+msgid "Cannot pass both --import-marks and --import-marks-if-exists"
+msgstr ""
+"Impossible d'utiliser à la fois --import-marks et --import-marks-if-exists"
+
+#: builtin/fetch.c:34
 msgid "git fetch [<options>] [<repository> [<refspec>...]]"
 msgstr "git fetch [<options>] [<dépôt> [<spécification-de-référence>...]]"
 
-#: builtin/fetch.c:31
+#: builtin/fetch.c:35
 msgid "git fetch [<options>] <group>"
 msgstr "git fetch [<options>] <groupe>"
 
-#: builtin/fetch.c:32
+#: builtin/fetch.c:36
 msgid "git fetch --multiple [<options>] [(<repository> | <group>)...]"
 msgstr "git fetch --multiple [<options>] [(<dépôt> | <groupe>)...]"
 
-#: builtin/fetch.c:33
+#: builtin/fetch.c:37
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<options>]"
 
-#: builtin/fetch.c:125 builtin/pull.c:203
+#: builtin/fetch.c:115
+msgid "fetch.parallel cannot be negative"
+msgstr "fetch.parallel ne peut pas être négatif"
+
+#: builtin/fetch.c:138 builtin/pull.c:204
 msgid "fetch from all remotes"
 msgstr "récupérer depuis tous les dépôts distants"
 
-#: builtin/fetch.c:127 builtin/pull.c:206
+#: builtin/fetch.c:140 builtin/pull.c:248
+msgid "set upstream for git pull/fetch"
+msgstr "définir la branche amont pour git pull/fetch"
+
+#: builtin/fetch.c:142 builtin/pull.c:207
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "ajouter à .git/FETCH_HEAD au lieu de l'écraser"
 
-#: builtin/fetch.c:129 builtin/pull.c:209
+#: builtin/fetch.c:144 builtin/pull.c:210
 msgid "path to upload pack on remote end"
 msgstr "chemin vers lequel télécharger le paquet sur le poste distant"
 
-#: builtin/fetch.c:130
+#: builtin/fetch.c:145
 msgid "force overwrite of local reference"
 msgstr "forcer l'écrasement de la branche locale"
 
-#: builtin/fetch.c:132
+#: builtin/fetch.c:147
 msgid "fetch from multiple remotes"
 msgstr "récupérer depuis plusieurs dépôts distants"
 
-#: builtin/fetch.c:134 builtin/pull.c:213
+#: builtin/fetch.c:149 builtin/pull.c:214
 msgid "fetch all tags and associated objects"
 msgstr "récupérer toutes les étiquettes et leurs objets associés"
 
-#: builtin/fetch.c:136
+#: builtin/fetch.c:151
 msgid "do not fetch all tags (--no-tags)"
 msgstr "ne pas récupérer toutes les étiquettes (--no-tags)"
 
-#: builtin/fetch.c:138
+#: builtin/fetch.c:153
 msgid "number of submodules fetched in parallel"
 msgstr "nombre de sous-modules récupérés en parallèle"
 
-#: builtin/fetch.c:140 builtin/pull.c:216
+#: builtin/fetch.c:155 builtin/pull.c:217
 msgid "prune remote-tracking branches no longer on remote"
 msgstr ""
 "éliminer les branches de suivi distant si la branche n'existe plus dans le "
 "dépôt distant"
 
-#: builtin/fetch.c:142
+#: builtin/fetch.c:157
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
 "éliminer les étiquettes locales qui ont disparu du dépôt distant et qui "
 "encombrent les étiquettes modifiées"
 
-#: builtin/fetch.c:143 builtin/fetch.c:166 builtin/pull.c:140
+#: builtin/fetch.c:158 builtin/fetch.c:181 builtin/pull.c:141
 msgid "on-demand"
 msgstr "à la demande"
 
-#: builtin/fetch.c:144
+#: builtin/fetch.c:159
 msgid "control recursive fetching of submodules"
 msgstr "contrôler la récupération récursive dans les sous-modules"
 
-#: builtin/fetch.c:148 builtin/pull.c:224
+#: builtin/fetch.c:163 builtin/pull.c:225
 msgid "keep downloaded pack"
 msgstr "conserver le paquet téléchargé"
 
-#: builtin/fetch.c:150
+#: builtin/fetch.c:165
 msgid "allow updating of HEAD ref"
 msgstr "permettre la mise à jour de la référence HEAD"
 
-#: builtin/fetch.c:153 builtin/fetch.c:159 builtin/pull.c:227
+#: builtin/fetch.c:168 builtin/fetch.c:174 builtin/pull.c:228
 msgid "deepen history of shallow clone"
 msgstr "approfondir l'historique d'un clone superficiel"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:170
 msgid "deepen history of shallow repository based on time"
 msgstr "approfondir l'historique d'un clone superficiel en fonction d'une date"
 
-#: builtin/fetch.c:161 builtin/pull.c:230
+#: builtin/fetch.c:176 builtin/pull.c:231
 msgid "convert to a complete repository"
 msgstr "convertir en un dépôt complet"
 
-#: builtin/fetch.c:164
+#: builtin/fetch.c:179
 msgid "prepend this to submodule path output"
 msgstr "préfixer ceci à la sortie du chemin du sous-module"
 
-#: builtin/fetch.c:167
+#: builtin/fetch.c:182
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
@@ -13006,91 +13068,91 @@
 "par défaut pour la récupération récursive de sous-modules (priorité plus "
 "basse que les fichiers de config)"
 
-#: builtin/fetch.c:171 builtin/pull.c:233
+#: builtin/fetch.c:186 builtin/pull.c:234
 msgid "accept refs that update .git/shallow"
 msgstr "accepter les références qui mettent à jour .git/shallow"
 
-#: builtin/fetch.c:172 builtin/pull.c:235
+#: builtin/fetch.c:187 builtin/pull.c:236
 msgid "refmap"
 msgstr "correspondance de référence"
 
-#: builtin/fetch.c:173 builtin/pull.c:236
+#: builtin/fetch.c:188 builtin/pull.c:237
 msgid "specify fetch refmap"
 msgstr "spécifier une correspondance de référence pour la récupération"
 
-#: builtin/fetch.c:180
+#: builtin/fetch.c:195
 msgid "report that we have only objects reachable from this object"
 msgstr "rapporte que nous n'avons que des objets joignables depuis cet objet"
 
-#: builtin/fetch.c:183
+#: builtin/fetch.c:198
 msgid "run 'gc --auto' after fetching"
 msgstr "lancer 'gc --auto' après la récupération"
 
-#: builtin/fetch.c:185 builtin/pull.c:245
+#: builtin/fetch.c:200 builtin/pull.c:246
 msgid "check for forced-updates on all updated branches"
 msgstr "vérifier les mises à jour forcées sur toutes les branches mises à jour"
 
-#: builtin/fetch.c:491
+#: builtin/fetch.c:510
 msgid "Couldn't find remote ref HEAD"
 msgstr "impossible de trouver la référence HEAD distante"
 
-#: builtin/fetch.c:630
+#: builtin/fetch.c:650
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
 msgstr ""
 "le paramètre de configuration fetch.output contient une valeur invalide %s"
 
-#: builtin/fetch.c:728
+#: builtin/fetch.c:748
 #, c-format
 msgid "object %s not found"
 msgstr "objet %s non trouvé"
 
-#: builtin/fetch.c:732
+#: builtin/fetch.c:752
 msgid "[up to date]"
 msgstr "[à jour]"
 
-#: builtin/fetch.c:745 builtin/fetch.c:761 builtin/fetch.c:833
+#: builtin/fetch.c:765 builtin/fetch.c:781 builtin/fetch.c:853
 msgid "[rejected]"
 msgstr "[rejeté]"
 
-#: builtin/fetch.c:746
+#: builtin/fetch.c:766
 msgid "can't fetch in current branch"
 msgstr "impossible de récupérer dans la branche actuelle"
 
-#: builtin/fetch.c:756
+#: builtin/fetch.c:776
 msgid "[tag update]"
 msgstr "[mise à jour de l'étiquette]"
 
-#: builtin/fetch.c:757 builtin/fetch.c:794 builtin/fetch.c:816
-#: builtin/fetch.c:828
+#: builtin/fetch.c:777 builtin/fetch.c:814 builtin/fetch.c:836
+#: builtin/fetch.c:848
 msgid "unable to update local ref"
 msgstr "impossible de mettre à jour la référence locale"
 
-#: builtin/fetch.c:761
+#: builtin/fetch.c:781
 msgid "would clobber existing tag"
 msgstr "écraserait l'étiquette existante"
 
-#: builtin/fetch.c:783
+#: builtin/fetch.c:803
 msgid "[new tag]"
 msgstr "[nouvelle étiquette]"
 
-#: builtin/fetch.c:786
+#: builtin/fetch.c:806
 msgid "[new branch]"
 msgstr "[nouvelle branche]"
 
-#: builtin/fetch.c:789
+#: builtin/fetch.c:809
 msgid "[new ref]"
 msgstr "[nouvelle référence]"
 
-#: builtin/fetch.c:828
+#: builtin/fetch.c:848
 msgid "forced update"
 msgstr "mise à jour forcée"
 
-#: builtin/fetch.c:833
+#: builtin/fetch.c:853
 msgid "non-fast-forward"
 msgstr "pas en avance rapide"
 
-#: builtin/fetch.c:854
+#: builtin/fetch.c:874
 msgid ""
 "Fetch normally indicates which branches had a forced update,\n"
 "but that check has been disabled. To re-enable, use '--show-forced-updates'\n"
@@ -13100,7 +13162,7 @@
 "mais ceci a été désactivé. Pour ré-activer, utilisez le drapeau\n"
 "'--show-forced-update' ou lancez 'git config fetch.showForcedUpdates true'."
 
-#: builtin/fetch.c:858
+#: builtin/fetch.c:878
 #, c-format
 msgid ""
 "It took %.2f seconds to check forced updates. You can use\n"
@@ -13112,23 +13174,23 @@
 "Vous pouvez utiliser '--no-show-forced-update' ou lancer\n"
 "'git config fetch.showForcedUpdates false' pour éviter ceci.\n"
 
-#: builtin/fetch.c:888
+#: builtin/fetch.c:908
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s n'a pas envoyé tous les objets nécessaires\n"
 
-#: builtin/fetch.c:909
+#: builtin/fetch.c:929
 #, c-format
 msgid "reject %s because shallow roots are not allowed to be updated"
 msgstr ""
 "%s rejeté parce que les racines superficielles ne sont pas mises à jour"
 
-#: builtin/fetch.c:1000 builtin/fetch.c:1131
+#: builtin/fetch.c:1020 builtin/fetch.c:1157
 #, c-format
 msgid "From %.*s\n"
 msgstr "Depuis %.*s\n"
 
-#: builtin/fetch.c:1011
+#: builtin/fetch.c:1031
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -13137,58 +13199,79 @@
 "des références locales n'ont pas pu être mises à jour ; essayez de lancer\n"
 " 'git remote prune %s' pour supprimer des branches anciennes en conflit"
 
-#: builtin/fetch.c:1101
+#: builtin/fetch.c:1127
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s sera en suspens)"
 
-#: builtin/fetch.c:1102
+#: builtin/fetch.c:1128
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s est devenu en suspens)"
 
-#: builtin/fetch.c:1134
+#: builtin/fetch.c:1160
 msgid "[deleted]"
 msgstr "[supprimé]"
 
-#: builtin/fetch.c:1135 builtin/remote.c:1036
+#: builtin/fetch.c:1161 builtin/remote.c:1036
 msgid "(none)"
 msgstr "(aucun(e))"
 
-#: builtin/fetch.c:1158
+#: builtin/fetch.c:1184
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr "Refus de récupérer dans la branche courant %s d'un dépôt non nu"
 
-#: builtin/fetch.c:1177
+#: builtin/fetch.c:1203
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr "La valeur \"%2$s\" de l'option \"%1$s\" est invalide pour %3$s"
 
-#: builtin/fetch.c:1180
+#: builtin/fetch.c:1206
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr "L'option \"%s\" est ignorée pour %s\n"
 
-#: builtin/fetch.c:1484
+#: builtin/fetch.c:1414
+msgid "multiple branch detected, incompatible with --set-upstream"
+msgstr "branches multiples détectées, imcompatible avec --set-upstream"
+
+#: builtin/fetch.c:1429
+msgid "not setting upstream for a remote remote-tracking branch"
+msgstr "dépôt amont non défini pour la branche de suivi à distance"
+
+#: builtin/fetch.c:1431
+msgid "not setting upstream for a remote tag"
+msgstr "dépôt amont non défini pour l'étiquette distante"
+
+#: builtin/fetch.c:1433
+msgid "unknown branch type"
+msgstr "type de branche inconnu"
+
+#: builtin/fetch.c:1435
+msgid ""
+"no source branch found.\n"
+"you need to specify exactly one branch with the --set-upstream option."
+msgstr ""
+"Aucune branche source trouvée.\n"
+"Vous devez spécifier exactement une branche avec l'option --set-upstream."
+
+#: builtin/fetch.c:1561 builtin/fetch.c:1623
 #, c-format
 msgid "Fetching %s\n"
 msgstr "Récupération de %s\n"
 
-#: builtin/fetch.c:1486 builtin/remote.c:100
+#: builtin/fetch.c:1571 builtin/fetch.c:1625 builtin/remote.c:100
 #, c-format
 msgid "Could not fetch %s"
 msgstr "Impossible de récupérer %s"
 
-#: builtin/fetch.c:1532
-msgid ""
-"--filter can only be used with the remote configured in extensions."
-"partialClone"
-msgstr ""
-"--filter ne peut être utilisé qu'avec le dépôt distant configuré dans "
-"extensions.partialClone"
+#: builtin/fetch.c:1583
+#, c-format
+msgid "could not fetch '%s' (exit code: %d)\n"
+msgstr "impossible de récupérer '%s' (code de sortie : %d)\n"
 
-#: builtin/fetch.c:1556
+#: builtin/fetch.c:1685
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
@@ -13196,46 +13279,46 @@
 "Aucun dépôt distant spécifié. Veuillez spécifier une URL ou un nom\n"
 "distant depuis lesquels les nouvelles révisions devraient être récupérées."
 
-#: builtin/fetch.c:1593
+#: builtin/fetch.c:1722
 msgid "You need to specify a tag name."
 msgstr "Vous devez spécifier un nom d'étiquette."
 
-#: builtin/fetch.c:1644
+#: builtin/fetch.c:1774
 msgid "Negative depth in --deepen is not supported"
 msgstr "Une profondeur négative dans --deepen n'est pas supportée"
 
-#: builtin/fetch.c:1646
+#: builtin/fetch.c:1776
 msgid "--deepen and --depth are mutually exclusive"
 msgstr "--deepen et --depth sont mutuellement exclusifs"
 
-#: builtin/fetch.c:1651
+#: builtin/fetch.c:1781
 msgid "--depth and --unshallow cannot be used together"
 msgstr "--depth et --unshallow ne peuvent pas être utilisés ensemble"
 
-#: builtin/fetch.c:1653
+#: builtin/fetch.c:1783
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "--unshallow sur un dépôt complet n'a pas de sens"
 
-#: builtin/fetch.c:1669
+#: builtin/fetch.c:1799
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all n'accepte pas d'argument de dépôt"
 
-#: builtin/fetch.c:1671
+#: builtin/fetch.c:1801
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all n'a pas de sens avec des spécifications de référence"
 
-#: builtin/fetch.c:1680
+#: builtin/fetch.c:1810
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr "distant ou groupe distant inexistant : %s"
 
-#: builtin/fetch.c:1687
+#: builtin/fetch.c:1817
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr ""
 "La récupération d'un groupe et les spécifications de référence n'ont pas de "
 "sens"
 
-#: builtin/fetch.c:1703
+#: builtin/fetch.c:1835
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
@@ -13573,7 +13656,7 @@
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "paramètre invalide : sha-1 attendu, '%s' trouvé"
 
-#: builtin/gc.c:34
+#: builtin/gc.c:35
 msgid "git gc [<options>]"
 msgstr "git gc [<options>]"
 
@@ -13587,17 +13670,17 @@
 msgid "failed to parse '%s' value '%s'"
 msgstr "échec de l'analyse de '%s' valeur '%s'"
 
-#: builtin/gc.c:476 builtin/init-db.c:55
+#: builtin/gc.c:475 builtin/init-db.c:55
 #, c-format
 msgid "cannot stat '%s'"
 msgstr "impossible de faire un stat de '%s'"
 
-#: builtin/gc.c:485 builtin/notes.c:240 builtin/tag.c:529
+#: builtin/gc.c:484 builtin/notes.c:240 builtin/tag.c:529
 #, c-format
 msgid "cannot read '%s'"
 msgstr "impossible de lire '%s'"
 
-#: builtin/gc.c:492
+#: builtin/gc.c:491
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -13613,56 +13696,56 @@
 "\n"
 "%s"
 
-#: builtin/gc.c:540
+#: builtin/gc.c:539
 msgid "prune unreferenced objects"
 msgstr "éliminer les objets non référencés"
 
-#: builtin/gc.c:542
+#: builtin/gc.c:541
 msgid "be more thorough (increased runtime)"
 msgstr "être plus consciencieux (durée de traitement allongée)"
 
-#: builtin/gc.c:543
+#: builtin/gc.c:542
 msgid "enable auto-gc mode"
 msgstr "activer le mode auto-gc"
 
-#: builtin/gc.c:546
+#: builtin/gc.c:545
 msgid "force running gc even if there may be another gc running"
 msgstr ""
 "forcer le lancement du ramasse-miettes même si un autre ramasse-miettes "
 "tourne déjà"
 
-#: builtin/gc.c:549
+#: builtin/gc.c:548
 msgid "repack all other packs except the largest pack"
 msgstr "recompacter tous les autres paquets excepté le plus gros paquet"
 
-#: builtin/gc.c:566
+#: builtin/gc.c:565
 #, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr "impossible d'analyser gc.logexpiry %s"
 
-#: builtin/gc.c:577
+#: builtin/gc.c:576
 #, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr "impossible d'analyser la valeur d'expiration d'élagage %s"
 
-#: builtin/gc.c:597
+#: builtin/gc.c:596
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr ""
 "Compression automatique du dépôt en tâche de fond pour optimiser les "
 "performances.\n"
 
-#: builtin/gc.c:599
+#: builtin/gc.c:598
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr "Compression du dépôt pour optimiser les performances.\n"
 
-#: builtin/gc.c:600
+#: builtin/gc.c:599
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr "Voir \"git help gc\" pour toute information sur le nettoyage manuel.\n"
 
-#: builtin/gc.c:640
+#: builtin/gc.c:639
 #, c-format
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
@@ -13670,7 +13753,7 @@
 "un ramasse-miettes est déjà en cours sur la machine '%s' pid %<PRIuMAX> "
 "(utilisez --force si ce n'est pas le cas)"
 
-#: builtin/gc.c:695
+#: builtin/gc.c:694
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr ""
@@ -13696,265 +13779,265 @@
 #. grep.threads
 #.
 #: builtin/grep.c:287 builtin/index-pack.c:1534 builtin/index-pack.c:1727
-#: builtin/pack-objects.c:2728
+#: builtin/pack-objects.c:2708
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "pas de support des fils, ignore %s"
 
-#: builtin/grep.c:467 builtin/grep.c:591 builtin/grep.c:633
+#: builtin/grep.c:467 builtin/grep.c:592 builtin/grep.c:635
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "impossible de lire l'arbre (%s)"
 
-#: builtin/grep.c:648
+#: builtin/grep.c:650
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "impossible de faire un grep sur un objet de type %s"
 
-#: builtin/grep.c:714
+#: builtin/grep.c:716
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "l'option '%c' attend une valeur numérique"
 
-#: builtin/grep.c:813
+#: builtin/grep.c:815
 msgid "search in index instead of in the work tree"
 msgstr "rechercher dans l'index plutôt que dans la copie de travail"
 
-#: builtin/grep.c:815
+#: builtin/grep.c:817
 msgid "find in contents not managed by git"
 msgstr "rechercher dans les contenus non gérés par git"
 
-#: builtin/grep.c:817
+#: builtin/grep.c:819
 msgid "search in both tracked and untracked files"
 msgstr "rechercher dans les fichiers suivis et non-suivis"
 
-#: builtin/grep.c:819
+#: builtin/grep.c:821
 msgid "ignore files specified via '.gitignore'"
 msgstr "ignorer les fichiers spécifiés via '.gitignore'"
 
-#: builtin/grep.c:821
+#: builtin/grep.c:823
 msgid "recursively search in each submodule"
 msgstr "rechercher récursivement dans chaque sous-module"
 
-#: builtin/grep.c:824
+#: builtin/grep.c:826
 msgid "show non-matching lines"
 msgstr "afficher les lignes qui ne correspondent pas"
 
-#: builtin/grep.c:826
+#: builtin/grep.c:828
 msgid "case insensitive matching"
 msgstr "correspondance insensible à la casse"
 
-#: builtin/grep.c:828
+#: builtin/grep.c:830
 msgid "match patterns only at word boundaries"
 msgstr "rechercher les motifs aux séparateurs de mots"
 
-#: builtin/grep.c:830
+#: builtin/grep.c:832
 msgid "process binary files as text"
 msgstr "traiter les fichiers binaires comme texte"
 
-#: builtin/grep.c:832
+#: builtin/grep.c:834
 msgid "don't match patterns in binary files"
 msgstr "ne pas chercher les motifs dans les fichiers binaires"
 
-#: builtin/grep.c:835
+#: builtin/grep.c:837
 msgid "process binary files with textconv filters"
 msgstr "traiter les fichiers binaires avec les filtres textconv"
 
-#: builtin/grep.c:837
+#: builtin/grep.c:839
 msgid "search in subdirectories (default)"
 msgstr "rechercher dans les sous-répertoires (défaut)"
 
-#: builtin/grep.c:839
+#: builtin/grep.c:841
 msgid "descend at most <depth> levels"
 msgstr "descendre au plus de <profondeur> dans l'arborescence"
 
-#: builtin/grep.c:843
+#: builtin/grep.c:845
 msgid "use extended POSIX regular expressions"
 msgstr "utiliser des expressions régulières étendues POSIX"
 
-#: builtin/grep.c:846
+#: builtin/grep.c:848
 msgid "use basic POSIX regular expressions (default)"
 msgstr "utiliser des expressions régulières basiques POSIX (par défaut)"
 
-#: builtin/grep.c:849
+#: builtin/grep.c:851
 msgid "interpret patterns as fixed strings"
 msgstr "interpréter les motifs comme de chaînes fixes"
 
-#: builtin/grep.c:852
+#: builtin/grep.c:854
 msgid "use Perl-compatible regular expressions"
 msgstr "utiliser des expressions régulières compatibles avec Perl"
 
-#: builtin/grep.c:855
+#: builtin/grep.c:857
 msgid "show line numbers"
 msgstr "afficher les numéros de ligne"
 
-#: builtin/grep.c:856
+#: builtin/grep.c:858
 msgid "show column number of first match"
 msgstr "afficher le numéro de colonne de la première correspondance"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:859
 msgid "don't show filenames"
 msgstr "ne pas pas afficher les noms de fichier"
 
-#: builtin/grep.c:858
+#: builtin/grep.c:860
 msgid "show filenames"
 msgstr "afficher les noms de fichier"
 
-#: builtin/grep.c:860
+#: builtin/grep.c:862
 msgid "show filenames relative to top directory"
 msgstr "afficher les noms de fichiers relativement au répertoire de base"
 
-#: builtin/grep.c:862
+#: builtin/grep.c:864
 msgid "show only filenames instead of matching lines"
 msgstr "n'afficher que les noms de fichiers au lieu des lignes correspondant"
 
-#: builtin/grep.c:864
+#: builtin/grep.c:866
 msgid "synonym for --files-with-matches"
 msgstr "synonyme pour --files-with-matches"
 
-#: builtin/grep.c:867
+#: builtin/grep.c:869
 msgid "show only the names of files without match"
 msgstr "n'afficher que les noms des fichiers sans correspondance"
 
-#: builtin/grep.c:869
+#: builtin/grep.c:871
 msgid "print NUL after filenames"
 msgstr "imprimer une caractère NUL après le noms de fichier"
 
-#: builtin/grep.c:872
+#: builtin/grep.c:874
 msgid "show only matching parts of a line"
 msgstr "n'afficher que les parties correspondantes d'une ligne"
 
-#: builtin/grep.c:874
+#: builtin/grep.c:876
 msgid "show the number of matches instead of matching lines"
 msgstr "afficher le nombre de correspondances au lieu des lignes correspondant"
 
-#: builtin/grep.c:875
+#: builtin/grep.c:877
 msgid "highlight matches"
 msgstr "mettre en évidence les correspondances"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:879
 msgid "print empty line between matches from different files"
 msgstr ""
 "imprimer une ligne vide entre les correspondances de fichiers différents"
 
-#: builtin/grep.c:879
+#: builtin/grep.c:881
 msgid "show filename only once above matches from same file"
 msgstr ""
 "afficher le nom de fichier une fois au dessus des correspondances du même "
 "fichier"
 
-#: builtin/grep.c:882
+#: builtin/grep.c:884
 msgid "show <n> context lines before and after matches"
 msgstr "afficher <n> lignes de contexte avant et après les correspondances"
 
-#: builtin/grep.c:885
+#: builtin/grep.c:887
 msgid "show <n> context lines before matches"
 msgstr "afficher <n> lignes de contexte avant les correspondances"
 
-#: builtin/grep.c:887
+#: builtin/grep.c:889
 msgid "show <n> context lines after matches"
 msgstr "afficher <n> lignes de contexte après les correspondances"
 
-#: builtin/grep.c:889
+#: builtin/grep.c:891
 msgid "use <n> worker threads"
 msgstr "utiliser <n> fils de travail"
 
-#: builtin/grep.c:890
+#: builtin/grep.c:892
 msgid "shortcut for -C NUM"
 msgstr "raccourci pour -C NUM"
 
-#: builtin/grep.c:893
+#: builtin/grep.c:895
 msgid "show a line with the function name before matches"
 msgstr ""
 "afficher une ligne avec le nom de la fonction avant les correspondances"
 
-#: builtin/grep.c:895
+#: builtin/grep.c:897
 msgid "show the surrounding function"
 msgstr "afficher la fonction contenante"
 
-#: builtin/grep.c:898
+#: builtin/grep.c:900
 msgid "read patterns from file"
 msgstr "lire les motifs depuis fichier"
 
-#: builtin/grep.c:900
+#: builtin/grep.c:902
 msgid "match <pattern>"
 msgstr "rechercher <motif>"
 
-#: builtin/grep.c:902
+#: builtin/grep.c:904
 msgid "combine patterns specified with -e"
 msgstr "combiner les motifs spécifiés par -e"
 
-#: builtin/grep.c:914
+#: builtin/grep.c:916
 msgid "indicate hit with exit status without output"
 msgstr ""
 "indiquer des correspondances avec le code de sortie mais sans rien afficher"
 
-#: builtin/grep.c:916
+#: builtin/grep.c:918
 msgid "show only matches from files that match all patterns"
 msgstr ""
 "n'afficher que les correspondances de fichiers qui correspondent à tous les "
 "motifs"
 
-#: builtin/grep.c:918
+#: builtin/grep.c:920
 msgid "show parse tree for grep expression"
 msgstr "afficher l'arbre d'analyse pour le motif grep"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:924
 msgid "pager"
 msgstr "pagineur"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:924
 msgid "show matching files in the pager"
 msgstr "afficher les fichiers correspondant dans le pagineur"
 
-#: builtin/grep.c:926
+#: builtin/grep.c:928
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "permettre l'appel de grep(1) (ignoré par ce build)"
 
-#: builtin/grep.c:990
+#: builtin/grep.c:992
 msgid "no pattern given"
 msgstr "aucun motif fourni"
 
-#: builtin/grep.c:1026
+#: builtin/grep.c:1028
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr ""
 "--no-index ou --untracked ne peuvent pas être utilisés avec des révisions"
 
-#: builtin/grep.c:1034
+#: builtin/grep.c:1036
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "impossible de résoudre la révision : %s"
 
-#: builtin/grep.c:1065
+#: builtin/grep.c:1067
 msgid "invalid option combination, ignoring --threads"
 msgstr "option de combinaison invalide, ignore --threads"
 
-#: builtin/grep.c:1068 builtin/pack-objects.c:3416
+#: builtin/grep.c:1070 builtin/pack-objects.c:3400
 msgid "no threads support, ignoring --threads"
 msgstr "pas de support des fils, ignore --threads"
 
-#: builtin/grep.c:1071 builtin/index-pack.c:1531 builtin/pack-objects.c:2725
+#: builtin/grep.c:1073 builtin/index-pack.c:1531 builtin/pack-objects.c:2705
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "nombre de fils spécifié invalide (%d)"
 
-#: builtin/grep.c:1094
+#: builtin/grep.c:1096
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "--open-files-in-pager ne fonctionne que sur la copie de travail"
 
-#: builtin/grep.c:1117
+#: builtin/grep.c:1119
 msgid "option not supported with --recurse-submodules"
 msgstr "option non supportée avec --recurse-submodules"
 
-#: builtin/grep.c:1123
+#: builtin/grep.c:1125
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr "--cached ou --untracked ne peuvent pas être utilisés avec --no-index"
 
-#: builtin/grep.c:1129
+#: builtin/grep.c:1131
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr "--[no-]exclude-standard ne peut pas être utilisé avec du contenu suivi"
 
-#: builtin/grep.c:1137
+#: builtin/grep.c:1139
 msgid "both --cached and trees are given"
 msgstr "--cached et des arbres sont fournis en même temps"
 
@@ -14268,7 +14351,7 @@
 msgid "Resolving deltas"
 msgstr "Résolution des deltas"
 
-#: builtin/index-pack.c:1205 builtin/pack-objects.c:2497
+#: builtin/index-pack.c:1205 builtin/pack-objects.c:2481
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "impossible de créer le fil : %s"
@@ -14334,7 +14417,7 @@
 msgid "cannot store index file"
 msgstr "impossible de stocker le fichier d'index"
 
-#: builtin/index-pack.c:1525 builtin/pack-objects.c:2736
+#: builtin/index-pack.c:1525 builtin/pack-objects.c:2716
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "mauvais pack.indexversion=%<PRIu32>"
@@ -14617,74 +14700,74 @@
 msgid "git show %s: bad file"
 msgstr "git show %s : fichier incorrect"
 
-#: builtin/log.c:549 builtin/log.c:643
+#: builtin/log.c:549 builtin/log.c:644
 #, c-format
 msgid "could not read object %s"
 msgstr "impossible de lire l'objet %s"
 
-#: builtin/log.c:668
+#: builtin/log.c:669
 #, c-format
 msgid "unknown type: %d"
 msgstr "type inconnu : %d"
 
-#: builtin/log.c:791
+#: builtin/log.c:792
 msgid "format.headers without value"
 msgstr "format.headers sans valeur"
 
-#: builtin/log.c:908
+#: builtin/log.c:909
 msgid "name of output directory is too long"
 msgstr "le nom du répertoire de sortie est trop long"
 
-#: builtin/log.c:924
+#: builtin/log.c:925
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "impossible d'ouvrir le fichier correctif %s"
 
-#: builtin/log.c:941
+#: builtin/log.c:942
 msgid "need exactly one range"
 msgstr "exactement une plage nécessaire"
 
-#: builtin/log.c:951
+#: builtin/log.c:952
 msgid "not a range"
 msgstr "ceci n'est pas une plage"
 
-#: builtin/log.c:1074
+#: builtin/log.c:1075
 msgid "cover letter needs email format"
 msgstr "la lettre de motivation doit être au format courriel"
 
-#: builtin/log.c:1080
+#: builtin/log.c:1081
 msgid "failed to create cover-letter file"
 msgstr "échec de création du fichier de lettre de motivation"
 
-#: builtin/log.c:1159
+#: builtin/log.c:1160
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "in-reply-to aberrant : %s"
 
-#: builtin/log.c:1186
+#: builtin/log.c:1187
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<options>] [<depuis> | <plage de révisions>]"
 
-#: builtin/log.c:1244
+#: builtin/log.c:1245
 msgid "two output directories?"
 msgstr "deux répertoires de sortie ?"
 
-#: builtin/log.c:1355 builtin/log.c:2099 builtin/log.c:2101 builtin/log.c:2113
+#: builtin/log.c:1356 builtin/log.c:2116 builtin/log.c:2118 builtin/log.c:2130
 #, c-format
 msgid "unknown commit %s"
 msgstr "commit inconnu %s"
 
-#: builtin/log.c:1365 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1366 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "échec à résoudre '%s' comme une référence valide"
 
-#: builtin/log.c:1370
+#: builtin/log.c:1371
 msgid "could not find exact merge base"
 msgstr "impossible de trouver la base de fusion exacte"
 
-#: builtin/log.c:1374
+#: builtin/log.c:1375
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -14697,275 +14780,275 @@
 "Ou vous pouvez spécifier le commit de base par --base=<id-du-commit-de-base> "
 "manuellement"
 
-#: builtin/log.c:1394
+#: builtin/log.c:1395
 msgid "failed to find exact merge base"
 msgstr "échec à trouver la base de fusion exacte"
 
-#: builtin/log.c:1405
+#: builtin/log.c:1406
 msgid "base commit should be the ancestor of revision list"
 msgstr "le commit de base devrait être l'ancêtre de la liste de révisions"
 
-#: builtin/log.c:1409
+#: builtin/log.c:1410
 msgid "base commit shouldn't be in revision list"
 msgstr "le commit de base ne devrait pas faire partie de la liste de révisions"
 
-#: builtin/log.c:1462
+#: builtin/log.c:1463
 msgid "cannot get patch id"
 msgstr "impossible d'obtenir l'id du patch"
 
-#: builtin/log.c:1514
+#: builtin/log.c:1515
 msgid "failed to infer range-diff ranges"
 msgstr "échec d'inférence d'intervalles de différence d'intervalles"
 
-#: builtin/log.c:1559
+#: builtin/log.c:1560
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "utiliser [PATCH n/m] même avec un patch unique"
 
-#: builtin/log.c:1562
+#: builtin/log.c:1563
 msgid "use [PATCH] even with multiple patches"
 msgstr "utiliser [PATCH] même avec des patchs multiples"
 
-#: builtin/log.c:1566
+#: builtin/log.c:1567
 msgid "print patches to standard out"
 msgstr "afficher les patchs sur la sortie standard"
 
-#: builtin/log.c:1568
+#: builtin/log.c:1569
 msgid "generate a cover letter"
 msgstr "générer une lettre de motivation"
 
-#: builtin/log.c:1570
+#: builtin/log.c:1571
 msgid "use simple number sequence for output file names"
 msgstr ""
 "utiliser une séquence simple de nombres pour les nom des fichiers de sortie"
 
-#: builtin/log.c:1571
+#: builtin/log.c:1572
 msgid "sfx"
 msgstr "sfx"
 
-#: builtin/log.c:1572
+#: builtin/log.c:1573
 msgid "use <sfx> instead of '.patch'"
 msgstr "utiliser <sfx> au lieu de '.patch'"
 
-#: builtin/log.c:1574
+#: builtin/log.c:1575
 msgid "start numbering patches at <n> instead of 1"
 msgstr "démarrer la numérotation des patchs à <n> au lieu de 1"
 
-#: builtin/log.c:1576
+#: builtin/log.c:1577
 msgid "mark the series as Nth re-roll"
 msgstr "marquer la série comme une Nième réédition"
 
-#: builtin/log.c:1578
+#: builtin/log.c:1579
 msgid "Use [RFC PATCH] instead of [PATCH]"
 msgstr "utiliser [RFC PATCH] au lieu de [PATCH]"
 
-#: builtin/log.c:1581
+#: builtin/log.c:1582
 msgid "Use [<prefix>] instead of [PATCH]"
 msgstr "utiliser [<préfixe>] au lieu de [PATCH]"
 
-#: builtin/log.c:1584
+#: builtin/log.c:1585
 msgid "store resulting files in <dir>"
 msgstr "stocker les fichiers résultats dans <répertoire>"
 
-#: builtin/log.c:1587
+#: builtin/log.c:1588
 msgid "don't strip/add [PATCH]"
 msgstr "ne pas retirer/ajouter [PATCH]"
 
-#: builtin/log.c:1590
+#: builtin/log.c:1591
 msgid "don't output binary diffs"
 msgstr "ne pas imprimer les diffs binaires"
 
-#: builtin/log.c:1592
+#: builtin/log.c:1593
 msgid "output all-zero hash in From header"
 msgstr "écrire une empreinte à zéro dans l'entête From"
 
-#: builtin/log.c:1594
+#: builtin/log.c:1595
 msgid "don't include a patch matching a commit upstream"
 msgstr "ne pas inclure un patch correspondant à un commit amont"
 
-#: builtin/log.c:1596
+#: builtin/log.c:1597
 msgid "show patch format instead of default (patch + stat)"
 msgstr "afficher le format du patch au lieu du défaut (patch + stat)"
 
-#: builtin/log.c:1598
+#: builtin/log.c:1599
 msgid "Messaging"
 msgstr "Communication"
 
-#: builtin/log.c:1599
+#: builtin/log.c:1600
 msgid "header"
 msgstr "en-tête"
 
-#: builtin/log.c:1600
+#: builtin/log.c:1601
 msgid "add email header"
 msgstr "ajouter l'en-tête de courriel"
 
-#: builtin/log.c:1601 builtin/log.c:1603
+#: builtin/log.c:1602 builtin/log.c:1604
 msgid "email"
 msgstr "courriel"
 
-#: builtin/log.c:1601
+#: builtin/log.c:1602
 msgid "add To: header"
 msgstr "ajouter l'en-tête \"To:\""
 
-#: builtin/log.c:1603
+#: builtin/log.c:1604
 msgid "add Cc: header"
 msgstr "ajouter l'en-tête \"Cc:\""
 
-#: builtin/log.c:1605
+#: builtin/log.c:1606
 msgid "ident"
 msgstr "ident"
 
-#: builtin/log.c:1606
+#: builtin/log.c:1607
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 "renseigner l'adresse From à <ident> (ou à l'ident du validateur si absent)"
 
-#: builtin/log.c:1608
+#: builtin/log.c:1609
 msgid "message-id"
 msgstr "id-message"
 
-#: builtin/log.c:1609
+#: builtin/log.c:1610
 msgid "make first mail a reply to <message-id>"
 msgstr "répondre dans le premier message à <id-message>"
 
-#: builtin/log.c:1610 builtin/log.c:1613
+#: builtin/log.c:1611 builtin/log.c:1614
 msgid "boundary"
 msgstr "limite"
 
-#: builtin/log.c:1611
+#: builtin/log.c:1612
 msgid "attach the patch"
 msgstr "attacher le patch"
 
-#: builtin/log.c:1614
+#: builtin/log.c:1615
 msgid "inline the patch"
 msgstr "patch à l'intérieur"
 
-#: builtin/log.c:1618
+#: builtin/log.c:1619
 msgid "enable message threading, styles: shallow, deep"
 msgstr ""
 "activer l'enfilage de message, styles : shallow (superficiel), deep (profond)"
 
-#: builtin/log.c:1620
+#: builtin/log.c:1621
 msgid "signature"
 msgstr "signature"
 
-#: builtin/log.c:1621
+#: builtin/log.c:1622
 msgid "add a signature"
 msgstr "ajouter une signature"
 
-#: builtin/log.c:1622
+#: builtin/log.c:1623
 msgid "base-commit"
 msgstr "commit-de-base"
 
-#: builtin/log.c:1623
+#: builtin/log.c:1624
 msgid "add prerequisite tree info to the patch series"
 msgstr "Ajouter un arbre prérequis à la série de patchs"
 
-#: builtin/log.c:1625
+#: builtin/log.c:1626
 msgid "add a signature from a file"
 msgstr "ajouter une signature depuis un fichier"
 
-#: builtin/log.c:1626
+#: builtin/log.c:1627
 msgid "don't print the patch filenames"
 msgstr "ne pas afficher les noms de fichiers des patchs"
 
-#: builtin/log.c:1628
+#: builtin/log.c:1629
 msgid "show progress while generating patches"
 msgstr ""
 "afficher la barre de progression durant la phase de génération des patchs"
 
-#: builtin/log.c:1630
+#: builtin/log.c:1631
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr ""
 "afficher les modifications par rapport à <rév> dans la première page ou une "
 "rustine"
 
-#: builtin/log.c:1633
+#: builtin/log.c:1634
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
 "afficher les modifications par rapport à <refspec> dans la première page ou "
 "une rustine"
 
-#: builtin/log.c:1635
+#: builtin/log.c:1636
 msgid "percentage by which creation is weighted"
 msgstr "pourcentage par lequel la création est pondérée"
 
-#: builtin/log.c:1710
+#: builtin/log.c:1711
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "ligne d'identification invalide : %s"
 
-#: builtin/log.c:1725
+#: builtin/log.c:1726
 msgid "-n and -k are mutually exclusive"
 msgstr "-n et -k sont mutuellement exclusifs"
 
-#: builtin/log.c:1727
+#: builtin/log.c:1728
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr "--subject-prefix/--rfc et -k sont mutuellement exclusifs"
 
-#: builtin/log.c:1735
+#: builtin/log.c:1736
 msgid "--name-only does not make sense"
 msgstr "--name-only n'a pas de sens"
 
-#: builtin/log.c:1737
+#: builtin/log.c:1738
 msgid "--name-status does not make sense"
 msgstr "--name-status n'a pas de sens"
 
-#: builtin/log.c:1739
+#: builtin/log.c:1740
 msgid "--check does not make sense"
 msgstr "--check n'a pas de sens"
 
-#: builtin/log.c:1771
+#: builtin/log.c:1773
 msgid "standard output, or directory, which one?"
 msgstr "sortie standard, ou répertoire, lequel ?"
 
-#: builtin/log.c:1860
+#: builtin/log.c:1877
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff requiert --cover-letter ou une rustine unique"
 
-#: builtin/log.c:1864
+#: builtin/log.c:1881
 msgid "Interdiff:"
 msgstr "Interdiff :"
 
-#: builtin/log.c:1865
+#: builtin/log.c:1882
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Interdiff contre v%d :"
 
-#: builtin/log.c:1871
+#: builtin/log.c:1888
 msgid "--creation-factor requires --range-diff"
 msgstr "--creation-factor requiert --range-diff"
 
-#: builtin/log.c:1875
+#: builtin/log.c:1892
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff requiert --cover-letter ou une rustine unique"
 
-#: builtin/log.c:1883
+#: builtin/log.c:1900
 msgid "Range-diff:"
 msgstr "Diff-intervalle :"
 
-#: builtin/log.c:1884
+#: builtin/log.c:1901
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "Diff-intervalle contre v%d :"
 
-#: builtin/log.c:1895
+#: builtin/log.c:1912
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "lecture du fichier de signature '%s' impossible"
 
-#: builtin/log.c:1931
+#: builtin/log.c:1948
 msgid "Generating patches"
 msgstr "Génération des patchs"
 
-#: builtin/log.c:1975
+#: builtin/log.c:1992
 msgid "failed to create output files"
 msgstr "échec de création des fichiers en sortie"
 
-#: builtin/log.c:2034
+#: builtin/log.c:2051
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<branche_amont> [<head> [<limite>]]]"
 
-#: builtin/log.c:2088
+#: builtin/log.c:2105
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -15094,7 +15177,7 @@
 msgid "do not print remote URL"
 msgstr "ne pas afficher les URL distantes"
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1464
+#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1488
 msgid "exec"
 msgstr "exécutable"
 
@@ -15207,33 +15290,33 @@
 msgid "Available custom strategies are:"
 msgstr "Les stratégies personnalisées sont :"
 
-#: builtin/merge.c:244 builtin/pull.c:151
+#: builtin/merge.c:244 builtin/pull.c:152
 msgid "do not show a diffstat at the end of the merge"
 msgstr "ne pas afficher un diffstat à la fin de la fusion"
 
-#: builtin/merge.c:247 builtin/pull.c:154
+#: builtin/merge.c:247 builtin/pull.c:155
 msgid "show a diffstat at the end of the merge"
 msgstr "afficher un diffstat à la fin de la fusion"
 
-#: builtin/merge.c:248 builtin/pull.c:157
+#: builtin/merge.c:248 builtin/pull.c:158
 msgid "(synonym to --stat)"
 msgstr "(synonyme de --stat)"
 
-#: builtin/merge.c:250 builtin/pull.c:160
+#: builtin/merge.c:250 builtin/pull.c:161
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr ""
 "ajouter (au plus <n>) éléments du journal court au message de validation de "
 "la fusion"
 
-#: builtin/merge.c:253 builtin/pull.c:166
+#: builtin/merge.c:253 builtin/pull.c:167
 msgid "create a single commit instead of doing a merge"
 msgstr "créer une validation unique au lieu de faire une fusion"
 
-#: builtin/merge.c:255 builtin/pull.c:169
+#: builtin/merge.c:255 builtin/pull.c:170
 msgid "perform a commit if the merge succeeds (default)"
 msgstr "effectuer une validation si la fusion réussit (défaut)"
 
-#: builtin/merge.c:257 builtin/pull.c:172
+#: builtin/merge.c:257 builtin/pull.c:173
 msgid "edit message before committing"
 msgstr "éditer le message avant la validation"
 
@@ -15241,28 +15324,28 @@
 msgid "allow fast-forward (default)"
 msgstr "autoriser l'avance rapide (défaut)"
 
-#: builtin/merge.c:261 builtin/pull.c:179
+#: builtin/merge.c:261 builtin/pull.c:180
 msgid "abort if fast-forward is not possible"
 msgstr "abandonner si l'avance rapide n'est pas possible"
 
-#: builtin/merge.c:265 builtin/pull.c:182
+#: builtin/merge.c:265 builtin/pull.c:183
 msgid "verify that the named commit has a valid GPG signature"
 msgstr "vérifier que le commit nommé a une signature GPG valide"
 
-#: builtin/merge.c:266 builtin/notes.c:787 builtin/pull.c:186
-#: builtin/rebase.c:492 builtin/rebase.c:1477 builtin/revert.c:114
+#: builtin/merge.c:266 builtin/notes.c:787 builtin/pull.c:187
+#: builtin/rebase.c:493 builtin/rebase.c:1501 builtin/revert.c:114
 msgid "strategy"
 msgstr "stratégie"
 
-#: builtin/merge.c:267 builtin/pull.c:187
+#: builtin/merge.c:267 builtin/pull.c:188
 msgid "merge strategy to use"
 msgstr "stratégie de fusion à utiliser"
 
-#: builtin/merge.c:268 builtin/pull.c:190
+#: builtin/merge.c:268 builtin/pull.c:191
 msgid "option=value"
 msgstr "option=valeur"
 
-#: builtin/merge.c:269 builtin/pull.c:191
+#: builtin/merge.c:269 builtin/pull.c:192
 msgid "option for selected merge strategy"
 msgstr "option pour la stratégie de fusion sélectionnée"
 
@@ -15283,13 +15366,13 @@
 msgid "continue the current in-progress merge"
 msgstr "continuer la fusion en cours"
 
-#: builtin/merge.c:284 builtin/pull.c:198
+#: builtin/merge.c:284 builtin/pull.c:199
 msgid "allow merging unrelated histories"
 msgstr "permettre la fusion d'historiques sans rapport"
 
 #: builtin/merge.c:290
-msgid "verify commit-msg hook"
-msgstr "vérifier le crochet commit-msg"
+msgid "bypass pre-merge-commit and commit-msg hooks"
+msgstr "ne pas utiliser les crochets pre-merge-commit et commit-msg"
 
 #: builtin/merge.c:307
 msgid "could not run stash."
@@ -15332,33 +15415,33 @@
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "Mauvaise chaîne branch.%s.mergeoptions : %s"
 
-#: builtin/merge.c:708
+#: builtin/merge.c:705
 msgid "Not handling anything other than two heads merge."
 msgstr "Impossible de gérer autre chose que la fusion de deux têtes."
 
-#: builtin/merge.c:722
+#: builtin/merge.c:719
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr "Options inconnue pour merge-recursive : -X%s"
 
-#: builtin/merge.c:737
+#: builtin/merge.c:734
 #, c-format
 msgid "unable to write %s"
 msgstr "impossible d'écrire %s"
 
-#: builtin/merge.c:789
+#: builtin/merge.c:786
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "Impossible de lire depuis '%s'"
 
-#: builtin/merge.c:798
+#: builtin/merge.c:795
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr ""
 "Pas de validation de la fusion ; utilisez 'git commit' pour terminer la "
 "fusion.\n"
 
-#: builtin/merge.c:804
+#: builtin/merge.c:801
 msgid ""
 "Please enter a commit message to explain why this merge is necessary,\n"
 "especially if it merges an updated upstream into a topic branch.\n"
@@ -15370,11 +15453,11 @@
 "branche de sujet.\n"
 "\n"
 
-#: builtin/merge.c:809
+#: builtin/merge.c:806
 msgid "An empty message aborts the commit.\n"
 msgstr "Un message vide abandonne la validation.\n"
 
-#: builtin/merge.c:812
+#: builtin/merge.c:809
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -15383,74 +15466,74 @@
 "Les lignes commençant par '%c' seront ignorées, et un message vide\n"
 "abandonne la validation.\n"
 
-#: builtin/merge.c:853
+#: builtin/merge.c:862
 msgid "Empty commit message."
 msgstr "Message de validation vide."
 
-#: builtin/merge.c:872
+#: builtin/merge.c:877
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Merveilleux.\n"
 
-#: builtin/merge.c:933
+#: builtin/merge.c:938
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 "La fusion automatique a échoué ; réglez les conflits et validez le "
 "résultat.\n"
 
-#: builtin/merge.c:972
+#: builtin/merge.c:977
 msgid "No current branch."
 msgstr "Pas de branche courante."
 
-#: builtin/merge.c:974
+#: builtin/merge.c:979
 msgid "No remote for the current branch."
 msgstr "Pas de branche distante pour la branche courante."
 
-#: builtin/merge.c:976
+#: builtin/merge.c:981
 msgid "No default upstream defined for the current branch."
 msgstr "Pas de branche amont par défaut définie pour la branche courante."
 
-#: builtin/merge.c:981
+#: builtin/merge.c:986
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "Pas de branche de suivi pour %s depuis %s"
 
-#: builtin/merge.c:1038
+#: builtin/merge.c:1043
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Mauvaise valeur '%s' dans l'environnement '%s'"
 
-#: builtin/merge.c:1141
+#: builtin/merge.c:1146
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "pas possible de fusionner ceci dans %s : %s"
 
-#: builtin/merge.c:1175
+#: builtin/merge.c:1180
 msgid "not something we can merge"
 msgstr "pas possible de fusionner ceci"
 
-#: builtin/merge.c:1278
+#: builtin/merge.c:1283
 msgid "--abort expects no arguments"
 msgstr "--abort n'accepte pas d'argument"
 
-#: builtin/merge.c:1282
+#: builtin/merge.c:1287
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "Il n'y a pas de fusion à abandonner (MERGE_HEAD manquant)."
 
-#: builtin/merge.c:1291
+#: builtin/merge.c:1296
 msgid "--quit expects no arguments"
 msgstr "--quit n'accepte pas d'argument"
 
-#: builtin/merge.c:1304
+#: builtin/merge.c:1309
 msgid "--continue expects no arguments"
 msgstr "--continue ne supporte aucun argument"
 
-#: builtin/merge.c:1308
+#: builtin/merge.c:1313
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "Il n'y a pas de fusion en cours (MERGE_HEAD manquant)."
 
-#: builtin/merge.c:1324
+#: builtin/merge.c:1329
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -15458,7 +15541,7 @@
 "Vous n'avez pas terminé votre fusion (MERGE_HEAD existe).\n"
 "Veuillez valider vos modifications avant de pouvoir fusionner."
 
-#: builtin/merge.c:1331
+#: builtin/merge.c:1336
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -15466,98 +15549,98 @@
 "Vous n'avez pas terminé votre picorage (CHERRY_PICK_HEAD existe).\n"
 "Veuillez valider vos modifications avant de pouvoir fusionner."
 
-#: builtin/merge.c:1334
+#: builtin/merge.c:1339
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "Vous n'avez pas terminé votre picorage (CHERRY_PICK_HEAD existe)."
 
-#: builtin/merge.c:1348
+#: builtin/merge.c:1353
 msgid "You cannot combine --squash with --no-ff."
 msgstr "Vous ne pouvez pas combiner --squash avec --no-ff."
 
-#: builtin/merge.c:1350
+#: builtin/merge.c:1355
 msgid "You cannot combine --squash with --commit."
 msgstr "Vous ne pouvez pas combiner --squash avec --commit."
 
-#: builtin/merge.c:1366
+#: builtin/merge.c:1371
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr ""
 "Pas de validation spécifiée et merge.defaultToUpstream n'est pas défini."
 
-#: builtin/merge.c:1383
+#: builtin/merge.c:1388
 msgid "Squash commit into empty head not supported yet"
 msgstr "La validation compressée vers une tête vide n'est pas encore supportée"
 
-#: builtin/merge.c:1385
+#: builtin/merge.c:1390
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr "Une validation sans avance rapide n'a pas de sens dans une tête vide"
 
-#: builtin/merge.c:1390
+#: builtin/merge.c:1395
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - pas possible de fusionner ceci"
 
-#: builtin/merge.c:1392
+#: builtin/merge.c:1397
 msgid "Can merge only exactly one commit into empty head"
 msgstr ""
 "Possible de fusionner exactement une seule validation dans une tête vide"
 
-#: builtin/merge.c:1471
+#: builtin/merge.c:1476
 msgid "refusing to merge unrelated histories"
 msgstr "refus de fusionner des historiques sans relation"
 
-#: builtin/merge.c:1480
+#: builtin/merge.c:1485
 msgid "Already up to date."
 msgstr "Déjà à jour."
 
-#: builtin/merge.c:1490
+#: builtin/merge.c:1495
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Mise à jour %s..%s\n"
 
-#: builtin/merge.c:1532
+#: builtin/merge.c:1537
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "Essai de fusion vraiment triviale dans l'index...\n"
 
-#: builtin/merge.c:1539
+#: builtin/merge.c:1544
 #, c-format
 msgid "Nope.\n"
 msgstr "Non.\n"
 
-#: builtin/merge.c:1564
+#: builtin/merge.c:1569
 msgid "Already up to date. Yeeah!"
 msgstr "Déjà à jour. Ouais !"
 
-#: builtin/merge.c:1570
+#: builtin/merge.c:1575
 msgid "Not possible to fast-forward, aborting."
 msgstr "Pas possible d'avancer rapidement, abandon."
 
-#: builtin/merge.c:1593 builtin/merge.c:1658
+#: builtin/merge.c:1598 builtin/merge.c:1663
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Retour de l'arbre à l'original...\n"
 
-#: builtin/merge.c:1597
+#: builtin/merge.c:1602
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Essai de la stratégie de fusion %s...\n"
 
-#: builtin/merge.c:1649
+#: builtin/merge.c:1654
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Aucune stratégie de fusion n'a pris en charge la fusion.\n"
 
-#: builtin/merge.c:1651
+#: builtin/merge.c:1656
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "La fusion avec la stratégie %s a échoué.\n"
 
-#: builtin/merge.c:1660
+#: builtin/merge.c:1665
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr "Utilisation de %s pour préparer la résolution à la main.\n"
 
-#: builtin/merge.c:1672
+#: builtin/merge.c:1677
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
@@ -15643,33 +15726,33 @@
 msgid "set labels for file1/orig-file/file2"
 msgstr "définir les labels pour fichier1/fichier-orig/fichier2"
 
-#: builtin/merge-recursive.c:46
+#: builtin/merge-recursive.c:47
 #, c-format
 msgid "unknown option %s"
 msgstr "option inconnue %s"
 
-#: builtin/merge-recursive.c:52
+#: builtin/merge-recursive.c:53
 #, c-format
 msgid "could not parse object '%s'"
 msgstr "Impossible d'analyser l'objet '%s'"
 
-#: builtin/merge-recursive.c:56
+#: builtin/merge-recursive.c:57
 #, c-format
 msgid "cannot handle more than %d base. Ignoring %s."
 msgid_plural "cannot handle more than %d bases. Ignoring %s."
 msgstr[0] "impossible de gérer plus de %d base. %s ignoré."
 msgstr[1] "impossible de gérer plus de %d bases. %s ignoré."
 
-#: builtin/merge-recursive.c:64
+#: builtin/merge-recursive.c:65
 msgid "not handling anything other than two heads merge."
 msgstr "impossible de gérer autre chose que la fusion de deux têtes."
 
-#: builtin/merge-recursive.c:70 builtin/merge-recursive.c:72
+#: builtin/merge-recursive.c:74 builtin/merge-recursive.c:76
 #, c-format
 msgid "could not resolve ref '%s'"
 msgstr "impossible de résoudre la référence '%s'"
 
-#: builtin/merge-recursive.c:78
+#: builtin/merge-recursive.c:82
 #, c-format
 msgid "Merging %s with %s\n"
 msgstr "Fusion de %s avec %s\n"
@@ -15814,53 +15897,53 @@
 msgid "Renaming %s to %s\n"
 msgstr "Renommage de %s en %s\n"
 
-#: builtin/mv.c:277 builtin/remote.c:717 builtin/repack.c:510
+#: builtin/mv.c:277 builtin/remote.c:717 builtin/repack.c:511
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "le renommage de '%s' a échoué"
 
-#: builtin/name-rev.c:352
+#: builtin/name-rev.c:356
 msgid "git name-rev [<options>] <commit>..."
 msgstr "git name-rev [<options>] <validation>..."
 
-#: builtin/name-rev.c:353
+#: builtin/name-rev.c:357
 msgid "git name-rev [<options>] --all"
 msgstr "git name-rev [<options>] --all"
 
-#: builtin/name-rev.c:354
+#: builtin/name-rev.c:358
 msgid "git name-rev [<options>] --stdin"
 msgstr "git name-rev [<options>] --stdin"
 
-#: builtin/name-rev.c:411
+#: builtin/name-rev.c:415
 msgid "print only names (no SHA-1)"
 msgstr "afficher seulement les noms (pas de SHA-1)"
 
-#: builtin/name-rev.c:412
+#: builtin/name-rev.c:416
 msgid "only use tags to name the commits"
 msgstr "utiliser seulement les étiquettes pour nommer les validations"
 
-#: builtin/name-rev.c:414
+#: builtin/name-rev.c:418
 msgid "only use refs matching <pattern>"
 msgstr "utiliser seulement les références correspondant à <motif>"
 
-#: builtin/name-rev.c:416
+#: builtin/name-rev.c:420
 msgid "ignore refs matching <pattern>"
 msgstr "ignorer les références correspondant à <motif>"
 
-#: builtin/name-rev.c:418
+#: builtin/name-rev.c:422
 msgid "list all commits reachable from all refs"
 msgstr ""
 "afficher toutes les validations accessibles depuis toutes les références"
 
-#: builtin/name-rev.c:419
+#: builtin/name-rev.c:423
 msgid "read from stdin"
 msgstr "lire depuis l'entrée standard"
 
-#: builtin/name-rev.c:420
+#: builtin/name-rev.c:424
 msgid "allow to print `undefined` names (default)"
 msgstr "autoriser l'affichage des noms `non définis` (par défaut)"
 
-#: builtin/name-rev.c:426
+#: builtin/name-rev.c:430
 msgid "dereference tags in the input (internal use)"
 msgstr "déréférencer les étiquettes en entrée (usage interne)"
 
@@ -16260,7 +16343,7 @@
 msgid "read object names from the standard input"
 msgstr "lire les noms d'objet depuis l'entrée standard"
 
-#: builtin/notes.c:954 builtin/prune.c:130 builtin/worktree.c:165
+#: builtin/notes.c:954 builtin/prune.c:130 builtin/worktree.c:164
 msgid "do not remove, show only"
 msgstr "ne pas supprimer, afficher seulement"
 
@@ -16276,7 +16359,7 @@
 msgid "use notes from <notes-ref>"
 msgstr "utiliser les notes depuis <références-notes>"
 
-#: builtin/notes.c:1034 builtin/stash.c:1598
+#: builtin/notes.c:1034 builtin/stash.c:1607
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "sous-commande inconnue : %s"
@@ -16353,71 +16436,71 @@
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "%<PRIu32> objets écrits, %<PRIu32> attendus"
 
-#: builtin/pack-objects.c:1166
+#: builtin/pack-objects.c:1164
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr ""
 "désactivation de l'écriture en bitmap car certains objets ne sont pas "
 "compressés"
 
-#: builtin/pack-objects.c:1597
+#: builtin/pack-objects.c:1592
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "dépassement de décalage de base de delta pour %s"
 
-#: builtin/pack-objects.c:1606
+#: builtin/pack-objects.c:1601
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "décalage de base de delta est hors limite pour %s"
 
-#: builtin/pack-objects.c:1875
+#: builtin/pack-objects.c:1870
 msgid "Counting objects"
 msgstr "Décompte des objets"
 
-#: builtin/pack-objects.c:2005
+#: builtin/pack-objects.c:2000
 #, c-format
 msgid "unable to get size of %s"
 msgstr "impossible de récupérer la taille de %s"
 
-#: builtin/pack-objects.c:2020
+#: builtin/pack-objects.c:2015
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "impossible d'analyser l'entête d'objet de %s"
 
-#: builtin/pack-objects.c:2090 builtin/pack-objects.c:2106
-#: builtin/pack-objects.c:2116
+#: builtin/pack-objects.c:2085 builtin/pack-objects.c:2101
+#: builtin/pack-objects.c:2111
 #, c-format
 msgid "object %s cannot be read"
 msgstr "l'objet %s ne peut être lu"
 
-#: builtin/pack-objects.c:2093 builtin/pack-objects.c:2120
+#: builtin/pack-objects.c:2088 builtin/pack-objects.c:2115
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr ""
 "objet %s longueur de l'objet inconsistante (%<PRIuMAX> contre %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2130
+#: builtin/pack-objects.c:2125
 msgid "suboptimal pack - out of memory"
 msgstr "paquet sous-optimal - mémoire insuffisante"
 
-#: builtin/pack-objects.c:2456
+#: builtin/pack-objects.c:2440
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Compression par delta en utilisant jusqu'à %d fils d'exécution"
 
-#: builtin/pack-objects.c:2588
+#: builtin/pack-objects.c:2572
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "impossible d'empaqueter les objets joignables depuis l'étiquette %s"
 
-#: builtin/pack-objects.c:2675
+#: builtin/pack-objects.c:2659
 msgid "Compressing objects"
 msgstr "Compression des objets"
 
-#: builtin/pack-objects.c:2681
+#: builtin/pack-objects.c:2665
 msgid "inconsistency with delta count"
 msgstr "inconsistance dans le compte de delta"
 
-#: builtin/pack-objects.c:2762
+#: builtin/pack-objects.c:2742
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -16426,7 +16509,7 @@
 "ID d'objet de bord attendu, reçu des données illisibles :\n"
 "%s"
 
-#: builtin/pack-objects.c:2768
+#: builtin/pack-objects.c:2748
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -16435,252 +16518,252 @@
 "ID d'objet attendu, reçu des données illisibles :\n"
 "%s"
 
-#: builtin/pack-objects.c:2866
+#: builtin/pack-objects.c:2846
 msgid "invalid value for --missing"
 msgstr "valeur invalide pour --missing"
 
-#: builtin/pack-objects.c:2925 builtin/pack-objects.c:3033
+#: builtin/pack-objects.c:2905 builtin/pack-objects.c:3013
 msgid "cannot open pack index"
 msgstr "impossible d'ouvrir l'index de paquet"
 
-#: builtin/pack-objects.c:2956
+#: builtin/pack-objects.c:2936
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "l'objet libre à %s n'a pas pu être examiné"
 
-#: builtin/pack-objects.c:3041
+#: builtin/pack-objects.c:3021
 msgid "unable to force loose object"
 msgstr "impossible de forcer l'objet libre"
 
-#: builtin/pack-objects.c:3133
+#: builtin/pack-objects.c:3113
 #, c-format
 msgid "not a rev '%s'"
 msgstr "'%s' n'est pas une révision"
 
-#: builtin/pack-objects.c:3136
+#: builtin/pack-objects.c:3116
 #, c-format
 msgid "bad revision '%s'"
 msgstr "mauvaise révision '%s'"
 
-#: builtin/pack-objects.c:3161
+#: builtin/pack-objects.c:3141
 msgid "unable to add recent objects"
 msgstr "impossible d'ajouter les objets récents"
 
-#: builtin/pack-objects.c:3214
+#: builtin/pack-objects.c:3194
 #, c-format
 msgid "unsupported index version %s"
 msgstr "version d'index non supportée %s"
 
-#: builtin/pack-objects.c:3218
+#: builtin/pack-objects.c:3198
 #, c-format
 msgid "bad index version '%s'"
 msgstr "mauvaise version d'index '%s'"
 
-#: builtin/pack-objects.c:3248
+#: builtin/pack-objects.c:3228
 msgid "do not show progress meter"
 msgstr "ne pas afficher la barre de progression"
 
-#: builtin/pack-objects.c:3250
+#: builtin/pack-objects.c:3230
 msgid "show progress meter"
 msgstr "afficher la barre de progression"
 
-#: builtin/pack-objects.c:3252
+#: builtin/pack-objects.c:3232
 msgid "show progress meter during object writing phase"
 msgstr "afficher la barre de progression durant la phase d'écrite des objets"
 
-#: builtin/pack-objects.c:3255
+#: builtin/pack-objects.c:3235
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "similaire à --all-progress quand la barre de progression est affichée"
 
-#: builtin/pack-objects.c:3256
+#: builtin/pack-objects.c:3236
 msgid "<version>[,<offset>]"
 msgstr "<version>[,<décalage>]"
 
-#: builtin/pack-objects.c:3257
+#: builtin/pack-objects.c:3237
 msgid "write the pack index file in the specified idx format version"
 msgstr ""
 "écrire le fichier d'index du paquet dans le format d'index de version "
 "spécifié"
 
-#: builtin/pack-objects.c:3260
+#: builtin/pack-objects.c:3240
 msgid "maximum size of each output pack file"
 msgstr "taille maximum de chaque fichier paquet en sortie"
 
-#: builtin/pack-objects.c:3262
+#: builtin/pack-objects.c:3242
 msgid "ignore borrowed objects from alternate object store"
 msgstr "ignorer les objets empruntés à un autre magasin d'objets"
 
-#: builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3244
 msgid "ignore packed objects"
 msgstr "ignorer les objets empaquetés"
 
-#: builtin/pack-objects.c:3266
+#: builtin/pack-objects.c:3246
 msgid "limit pack window by objects"
 msgstr "limiter la fenêtre d'empaquetage par objets"
 
-#: builtin/pack-objects.c:3268
+#: builtin/pack-objects.c:3248
 msgid "limit pack window by memory in addition to object limit"
 msgstr ""
 "limiter la fenêtre d'empaquetage par mémoire en plus de la limite d'objets"
 
-#: builtin/pack-objects.c:3270
+#: builtin/pack-objects.c:3250
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr ""
 "longueur maximum de la chaîne de delta autorisée dans le paquet résultant"
 
-#: builtin/pack-objects.c:3272
+#: builtin/pack-objects.c:3252
 msgid "reuse existing deltas"
 msgstr "réutiliser les deltas existants"
 
-#: builtin/pack-objects.c:3274
+#: builtin/pack-objects.c:3254
 msgid "reuse existing objects"
 msgstr "réutiliser les objets existants"
 
-#: builtin/pack-objects.c:3276
+#: builtin/pack-objects.c:3256
 msgid "use OFS_DELTA objects"
 msgstr "utiliser les objets OFS_DELTA"
 
-#: builtin/pack-objects.c:3278
+#: builtin/pack-objects.c:3258
 msgid "use threads when searching for best delta matches"
 msgstr ""
 "utiliser des fils lors de la recherche pour une meilleure correspondance des "
 "deltas"
 
-#: builtin/pack-objects.c:3280
+#: builtin/pack-objects.c:3260
 msgid "do not create an empty pack output"
 msgstr "ne pas créer un paquet vide"
 
-#: builtin/pack-objects.c:3282
+#: builtin/pack-objects.c:3262
 msgid "read revision arguments from standard input"
 msgstr "lire les paramètres de révision depuis l'entrée standard"
 
-#: builtin/pack-objects.c:3284
+#: builtin/pack-objects.c:3264
 msgid "limit the objects to those that are not yet packed"
 msgstr "limiter les objets à ceux qui ne sont pas encore empaquetés"
 
-#: builtin/pack-objects.c:3287
+#: builtin/pack-objects.c:3267
 msgid "include objects reachable from any reference"
 msgstr "inclure les objets accessibles depuis toute référence"
 
-#: builtin/pack-objects.c:3290
+#: builtin/pack-objects.c:3270
 msgid "include objects referred by reflog entries"
 msgstr "inclure les objets référencés par les éléments de reflog"
 
-#: builtin/pack-objects.c:3293
+#: builtin/pack-objects.c:3273
 msgid "include objects referred to by the index"
 msgstr "inclure les objets référencés par l'index"
 
-#: builtin/pack-objects.c:3296
+#: builtin/pack-objects.c:3276
 msgid "output pack to stdout"
 msgstr "afficher l'empaquetage sur la sortie standard"
 
-#: builtin/pack-objects.c:3298
+#: builtin/pack-objects.c:3278
 msgid "include tag objects that refer to objects to be packed"
 msgstr "inclure les objets d'étiquettes qui réfèrent à des objets à empaqueter"
 
-#: builtin/pack-objects.c:3300
+#: builtin/pack-objects.c:3280
 msgid "keep unreachable objects"
 msgstr "garder les objets inaccessibles"
 
-#: builtin/pack-objects.c:3302
+#: builtin/pack-objects.c:3282
 msgid "pack loose unreachable objects"
 msgstr "empaqueter les objets inaccessibles détachés"
 
-#: builtin/pack-objects.c:3304
+#: builtin/pack-objects.c:3284
 msgid "unpack unreachable objects newer than <time>"
 msgstr "dépaqueter les objets inaccessibles plus récents que <heure>"
 
-#: builtin/pack-objects.c:3307
+#: builtin/pack-objects.c:3287
 msgid "use the sparse reachability algorithm"
 msgstr "utiliser l'algorithme de joignabilité creuse"
 
-#: builtin/pack-objects.c:3309
+#: builtin/pack-objects.c:3289
 msgid "create thin packs"
 msgstr "créer des paquets légers"
 
-#: builtin/pack-objects.c:3311
+#: builtin/pack-objects.c:3291
 msgid "create packs suitable for shallow fetches"
 msgstr "créer des paquets permettant des récupérations superficielles"
 
-#: builtin/pack-objects.c:3313
+#: builtin/pack-objects.c:3293
 msgid "ignore packs that have companion .keep file"
 msgstr "ignorer les paquets qui ont un fichier .keep"
 
-#: builtin/pack-objects.c:3315
+#: builtin/pack-objects.c:3295
 msgid "ignore this pack"
 msgstr "ignorer ce paquet"
 
-#: builtin/pack-objects.c:3317
+#: builtin/pack-objects.c:3297
 msgid "pack compression level"
 msgstr "niveau de compression du paquet"
 
-#: builtin/pack-objects.c:3319
+#: builtin/pack-objects.c:3299
 msgid "do not hide commits by grafts"
 msgstr "ne pas cacher les validations par greffes"
 
-#: builtin/pack-objects.c:3321
+#: builtin/pack-objects.c:3301
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr ""
 "utiliser un index en bitmap si disponible pour accélerer le décompte des "
 "objets"
 
-#: builtin/pack-objects.c:3323
+#: builtin/pack-objects.c:3303
 msgid "write a bitmap index together with the pack index"
 msgstr "écrire un index en bitmap associé à l'index de paquet"
 
-#: builtin/pack-objects.c:3327
+#: builtin/pack-objects.c:3307
 msgid "write a bitmap index if possible"
 msgstr "écrire un index de bitmap si possible"
 
-#: builtin/pack-objects.c:3331
+#: builtin/pack-objects.c:3311
 msgid "handling for missing objects"
 msgstr "gestion des objets manquants"
 
-#: builtin/pack-objects.c:3334
+#: builtin/pack-objects.c:3314
 msgid "do not pack objects in promisor packfiles"
 msgstr "ne pas empaqueter les objets dans les fichiers paquets prometteurs"
 
-#: builtin/pack-objects.c:3336
+#: builtin/pack-objects.c:3316
 msgid "respect islands during delta compression"
 msgstr "respecter les îlots pendant la compression des deltas"
 
-#: builtin/pack-objects.c:3361
+#: builtin/pack-objects.c:3345
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "la profondeur %d de chaîne de delta est trop grande, forcée à %d"
 
-#: builtin/pack-objects.c:3366
+#: builtin/pack-objects.c:3350
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "pack.deltaCacheLimit est trop grand, forcé à %d"
 
-#: builtin/pack-objects.c:3420
+#: builtin/pack-objects.c:3404
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 "--max-pack-size ne peut pas être utilisé pour construire un paquet à "
 "transférer"
 
-#: builtin/pack-objects.c:3422
+#: builtin/pack-objects.c:3406
 msgid "minimum pack size limit is 1 MiB"
 msgstr "la taille limite minimale d'un paquet est 1 MiB"
 
-#: builtin/pack-objects.c:3427
+#: builtin/pack-objects.c:3411
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "--thin ne peut pas être utilisé pour construire un paquet indexable"
 
-#: builtin/pack-objects.c:3430
+#: builtin/pack-objects.c:3414
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr "--keep-unreachable et --unpack-unreachable sont incompatibles"
 
-#: builtin/pack-objects.c:3436
+#: builtin/pack-objects.c:3420
 msgid "cannot use --filter without --stdout"
 msgstr "impossible d'utiliser --filter sans --stdout"
 
-#: builtin/pack-objects.c:3497
+#: builtin/pack-objects.c:3481
 msgid "Enumerating objects"
 msgstr "Énumération des objets"
 
-#: builtin/pack-objects.c:3527
+#: builtin/pack-objects.c:3511
 #, c-format
 msgid "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>)"
 msgstr ""
@@ -16735,44 +16818,44 @@
 msgid "git pull [<options>] [<repository> [<refspec>...]]"
 msgstr "git pull [<options>] [<dépôt> [<spécification-de-référence>...]]"
 
-#: builtin/pull.c:141
+#: builtin/pull.c:142
 msgid "control for recursive fetching of submodules"
 msgstr "contrôler la récupération récursive dans les sous-modules"
 
-#: builtin/pull.c:145
+#: builtin/pull.c:146
 msgid "Options related to merging"
 msgstr "Options relatives à la fusion"
 
-#: builtin/pull.c:148
+#: builtin/pull.c:149
 msgid "incorporate changes by rebasing rather than merging"
 msgstr "incorporer les modifications en rebasant plutôt qu'en fusionnant"
 
-#: builtin/pull.c:176 builtin/rebase.c:447 builtin/revert.c:126
+#: builtin/pull.c:177 builtin/rebase.c:448 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "autoriser l'avance rapide"
 
-#: builtin/pull.c:185
+#: builtin/pull.c:186
 msgid "automatically stash/stash pop before and after rebase"
 msgstr "remiser avant et réappliquer après le rebasage automatiquement"
 
-#: builtin/pull.c:201
+#: builtin/pull.c:202
 msgid "Options related to fetching"
 msgstr "Options relatives au rapatriement"
 
-#: builtin/pull.c:211
+#: builtin/pull.c:212
 msgid "force overwrite of local branch"
 msgstr "forcer l'écrasement de la branche locale"
 
-#: builtin/pull.c:219
+#: builtin/pull.c:220
 msgid "number of submodules pulled in parallel"
 msgstr "nombre de sous-modules tirés en parallèle"
 
-#: builtin/pull.c:316
+#: builtin/pull.c:320
 #, c-format
 msgid "Invalid value for pull.ff: %s"
 msgstr "Valeur invalide pour pull.ff : %s"
 
-#: builtin/pull.c:433
+#: builtin/pull.c:437
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
 "fetched."
@@ -16780,14 +16863,14 @@
 "Il n'y a pas de candidate sur laquelle rebaser parmi les références que vous "
 "venez de récupérer."
 
-#: builtin/pull.c:435
+#: builtin/pull.c:439
 msgid ""
 "There are no candidates for merging among the refs that you just fetched."
 msgstr ""
 "Il n'y a pas de candidate avec laquelle fusionner parmi les références que "
 "vous venez de récupérer."
 
-#: builtin/pull.c:436
+#: builtin/pull.c:440
 msgid ""
 "Generally this means that you provided a wildcard refspec which had no\n"
 "matches on the remote end."
@@ -16795,7 +16878,7 @@
 "Généralement, cela signifie que vous avez indiqué un spécificateur\n"
 "de référence joker qui n'a pas eu de correspondance sur le serveur distant."
 
-#: builtin/pull.c:439
+#: builtin/pull.c:443
 #, c-format
 msgid ""
 "You asked to pull from the remote '%s', but did not specify\n"
@@ -16807,44 +16890,44 @@
 "configuration\n"
 "pour la branche actuelle, vous devez spécifier la branche avec la commande."
 
-#: builtin/pull.c:444 builtin/rebase.c:1326 git-parse-remote.sh:73
+#: builtin/pull.c:448 builtin/rebase.c:1347 git-parse-remote.sh:73
 msgid "You are not currently on a branch."
 msgstr "Vous n'êtes actuellement sur aucune branche."
 
-#: builtin/pull.c:446 builtin/pull.c:461 git-parse-remote.sh:79
+#: builtin/pull.c:450 builtin/pull.c:465 git-parse-remote.sh:79
 msgid "Please specify which branch you want to rebase against."
 msgstr "Veuillez spécifier sur quelle branche vous souhaiter rebaser."
 
-#: builtin/pull.c:448 builtin/pull.c:463 git-parse-remote.sh:82
+#: builtin/pull.c:452 builtin/pull.c:467 git-parse-remote.sh:82
 msgid "Please specify which branch you want to merge with."
 msgstr "Veuillez spécifier une branche avec laquelle fusionner."
 
-#: builtin/pull.c:449 builtin/pull.c:464
+#: builtin/pull.c:453 builtin/pull.c:468
 msgid "See git-pull(1) for details."
 msgstr "Référez-vous à git-pull(1) pour de plus amples détails."
 
-#: builtin/pull.c:451 builtin/pull.c:457 builtin/pull.c:466
-#: builtin/rebase.c:1332 git-parse-remote.sh:64
+#: builtin/pull.c:455 builtin/pull.c:461 builtin/pull.c:470
+#: builtin/rebase.c:1353 git-parse-remote.sh:64
 msgid "<remote>"
 msgstr "<distant>"
 
-#: builtin/pull.c:451 builtin/pull.c:466 builtin/pull.c:471
+#: builtin/pull.c:455 builtin/pull.c:470 builtin/pull.c:475
 #: git-parse-remote.sh:65
 msgid "<branch>"
 msgstr "<branche>"
 
-#: builtin/pull.c:459 builtin/rebase.c:1324 git-parse-remote.sh:75
+#: builtin/pull.c:463 builtin/rebase.c:1345 git-parse-remote.sh:75
 msgid "There is no tracking information for the current branch."
 msgstr "Pas d'information de suivi distant pour la branche actuelle."
 
-#: builtin/pull.c:468 git-parse-remote.sh:95
+#: builtin/pull.c:472 git-parse-remote.sh:95
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:"
 msgstr ""
 "Si vous souhaitez indiquer l'information de suivi distant pour cette "
 "branche, vous pouvez le faire avec :"
 
-#: builtin/pull.c:473
+#: builtin/pull.c:477
 #, c-format
 msgid ""
 "Your configuration specifies to merge with the ref '%s'\n"
@@ -16854,34 +16937,34 @@
 "'%s'\n"
 "du serveur distant, mais cette référence n'a pas été récupérée."
 
-#: builtin/pull.c:581
+#: builtin/pull.c:587
 #, c-format
 msgid "unable to access commit %s"
 msgstr "impossible d'accéder le commit %s"
 
-#: builtin/pull.c:861
+#: builtin/pull.c:867
 msgid "ignoring --verify-signatures for rebase"
 msgstr "--verify-signatures est ignoré pour un rebasage"
 
-#: builtin/pull.c:916
+#: builtin/pull.c:922
 msgid "--[no-]autostash option is only valid with --rebase."
 msgstr "l'option --[no-]autostash n'est valide qu'avec --rebase."
 
-#: builtin/pull.c:924
+#: builtin/pull.c:930
 msgid "Updating an unborn branch with changes added to the index."
 msgstr ""
 "Mise à jour d'une branche non encore créée avec les changements ajoutés dans "
 "l'index."
 
-#: builtin/pull.c:928
+#: builtin/pull.c:934
 msgid "pull with rebase"
 msgstr "tirer avec un rebasage"
 
-#: builtin/pull.c:929
+#: builtin/pull.c:935
 msgid "please commit or stash them."
 msgstr "veuillez les valider ou les remiser."
 
-#: builtin/pull.c:954
+#: builtin/pull.c:960
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -16892,7 +16975,7 @@
 "avance rapide de votre copie de travail\n"
 "depuis le commit %s."
 
-#: builtin/pull.c:960
+#: builtin/pull.c:966
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -16909,15 +16992,15 @@
 "$ git reset --hard\n"
 "pour régénérer."
 
-#: builtin/pull.c:975
+#: builtin/pull.c:981
 msgid "Cannot merge multiple branches into empty head."
 msgstr "Impossible de fusionner de multiples branches sur une tête vide."
 
-#: builtin/pull.c:979
+#: builtin/pull.c:985
 msgid "Cannot rebase onto multiple branches."
 msgstr "Impossible de rebaser sur de multiples branches."
 
-#: builtin/pull.c:986
+#: builtin/pull.c:992
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 "impossible de rebaser avec des modifications de sous-modules enregistrées "
@@ -17093,17 +17176,95 @@
 msgid "Pushing to %s\n"
 msgstr "Poussée vers %s\n"
 
-#: builtin/push.c:364
+#: builtin/push.c:366
 #, c-format
 msgid "failed to push some refs to '%s'"
 msgstr "impossible de pousser des références vers '%s'"
 
-#: builtin/push.c:398
+#: builtin/push.c:541
+msgid "repository"
+msgstr "dépôt"
+
+#: builtin/push.c:542 builtin/send-pack.c:164
+msgid "push all refs"
+msgstr "pousser toutes les références"
+
+#: builtin/push.c:543 builtin/send-pack.c:166
+msgid "mirror all refs"
+msgstr "refléter toutes les références"
+
+#: builtin/push.c:545
+msgid "delete refs"
+msgstr "supprimer les références"
+
+#: builtin/push.c:546
+msgid "push tags (can't be used with --all or --mirror)"
+msgstr ""
+"pousser les étiquettes (ne peut pas être utilisé avec --all ou --mirror)"
+
+#: builtin/push.c:549 builtin/send-pack.c:167
+msgid "force updates"
+msgstr "forcer les mises à jour"
+
+#: builtin/push.c:551 builtin/send-pack.c:181
+msgid "<refname>:<expect>"
+msgstr "<nom-de-ref>:<attendu>"
+
+#: builtin/push.c:552 builtin/send-pack.c:182
+msgid "require old value of ref to be at this value"
+msgstr "exiger que l'ancienne valeur de la référence soit à cette valeur"
+
+#: builtin/push.c:555
+msgid "control recursive pushing of submodules"
+msgstr "contrôler la poussée récursive des sous-modules"
+
+#: builtin/push.c:557 builtin/send-pack.c:175
+msgid "use thin pack"
+msgstr "utiliser un empaquetage léger"
+
+#: builtin/push.c:558 builtin/push.c:559 builtin/send-pack.c:161
+#: builtin/send-pack.c:162
+msgid "receive pack program"
+msgstr "recevoir le programme d'empaquetage"
+
+#: builtin/push.c:560
+msgid "set upstream for git pull/status"
+msgstr "définir la branche amont pour git pull/status"
+
+#: builtin/push.c:563
+msgid "prune locally removed refs"
+msgstr "éliminer les références locales supprimées"
+
+#: builtin/push.c:565
+msgid "bypass pre-push hook"
+msgstr "éviter d'utiliser le crochet pre-push"
+
+#: builtin/push.c:566
+msgid "push missing but relevant tags"
+msgstr "pousser les étiquettes manquantes mais pertinentes"
+
+#: builtin/push.c:569 builtin/send-pack.c:169
+msgid "GPG sign the push"
+msgstr "signer la poussée avec GPG"
+
+#: builtin/push.c:571 builtin/send-pack.c:176
+msgid "request atomic transaction on remote side"
+msgstr "demande une transaction atomique sur le serveur distant"
+
+#: builtin/push.c:589
+msgid "--delete is incompatible with --all, --mirror and --tags"
+msgstr "--delete est incompatible avec --all, --mirror et --tags"
+
+#: builtin/push.c:591
+msgid "--delete doesn't make sense without any refs"
+msgstr "--delete n'a pas de sens sans aucune référence"
+
+#: builtin/push.c:611
 #, c-format
 msgid "bad repository '%s'"
 msgstr "mauvais dépôt '%s'"
 
-#: builtin/push.c:399
+#: builtin/push.c:612
 msgid ""
 "No configured push destination.\n"
 "Either specify the URL from the command-line or configure a remote "
@@ -17125,105 +17286,27 @@
 "\n"
 "    git push <nom>\n"
 
-#: builtin/push.c:554
-msgid "repository"
-msgstr "dépôt"
-
-#: builtin/push.c:555 builtin/send-pack.c:164
-msgid "push all refs"
-msgstr "pousser toutes les références"
-
-#: builtin/push.c:556 builtin/send-pack.c:166
-msgid "mirror all refs"
-msgstr "refléter toutes les références"
-
-#: builtin/push.c:558
-msgid "delete refs"
-msgstr "supprimer les références"
-
-#: builtin/push.c:559
-msgid "push tags (can't be used with --all or --mirror)"
-msgstr ""
-"pousser les étiquettes (ne peut pas être utilisé avec --all ou --mirror)"
-
-#: builtin/push.c:562 builtin/send-pack.c:167
-msgid "force updates"
-msgstr "forcer les mises à jour"
-
-#: builtin/push.c:564 builtin/send-pack.c:181
-msgid "<refname>:<expect>"
-msgstr "<nom-de-ref>:<attendu>"
-
-#: builtin/push.c:565 builtin/send-pack.c:182
-msgid "require old value of ref to be at this value"
-msgstr "exiger que l'ancienne valeur de la référence soit à cette valeur"
-
-#: builtin/push.c:568
-msgid "control recursive pushing of submodules"
-msgstr "contrôler la poussée récursive des sous-modules"
-
-#: builtin/push.c:570 builtin/send-pack.c:175
-msgid "use thin pack"
-msgstr "utiliser un empaquetage léger"
-
-#: builtin/push.c:571 builtin/push.c:572 builtin/send-pack.c:161
-#: builtin/send-pack.c:162
-msgid "receive pack program"
-msgstr "recevoir le programme d'empaquetage"
-
-#: builtin/push.c:573
-msgid "set upstream for git pull/status"
-msgstr "définir la branche amont pour git pull/status"
-
-#: builtin/push.c:576
-msgid "prune locally removed refs"
-msgstr "éliminer les références locales supprimées"
-
-#: builtin/push.c:578
-msgid "bypass pre-push hook"
-msgstr "éviter d'utiliser le crochet pre-push"
-
-#: builtin/push.c:579
-msgid "push missing but relevant tags"
-msgstr "pousser les étiquettes manquantes mais pertinentes"
-
-#: builtin/push.c:582 builtin/send-pack.c:169
-msgid "GPG sign the push"
-msgstr "signer la poussée avec GPG"
-
-#: builtin/push.c:584 builtin/send-pack.c:176
-msgid "request atomic transaction on remote side"
-msgstr "demande une transaction atomique sur le serveur distant"
-
-#: builtin/push.c:602
-msgid "--delete is incompatible with --all, --mirror and --tags"
-msgstr "--delete est incompatible avec --all, --mirror et --tags"
-
-#: builtin/push.c:604
-msgid "--delete doesn't make sense without any refs"
-msgstr "--delete n'a pas de sens sans aucune référence"
-
-#: builtin/push.c:607
+#: builtin/push.c:627
 msgid "--all and --tags are incompatible"
 msgstr "--all et --tags sont incompatibles"
 
-#: builtin/push.c:609
+#: builtin/push.c:629
 msgid "--all can't be combined with refspecs"
 msgstr "--all ne peut pas être combiné avec des spécifications de référence"
 
-#: builtin/push.c:613
+#: builtin/push.c:633
 msgid "--mirror and --tags are incompatible"
 msgstr "--mirror et --tags sont incompatibles"
 
-#: builtin/push.c:615
+#: builtin/push.c:635
 msgid "--mirror can't be combined with refspecs"
 msgstr "--mirror ne peut pas être combiné avec des spécifications de référence"
 
-#: builtin/push.c:618
+#: builtin/push.c:638
 msgid "--all and --mirror are incompatible"
 msgstr "--all et --mirror sont incompatibles"
 
-#: builtin/push.c:637
+#: builtin/push.c:642
 msgid "push options must not have new line characters"
 msgstr ""
 "les options de poussée ne peuvent pas contenir de caractères de nouvelle "
@@ -17345,11 +17428,11 @@
 
 #: builtin/rebase.c:32
 msgid ""
-"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] "
-"[<branch>]"
+"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
+"[<upstream> [<branch>]]"
 msgstr ""
-"git rebase [-i] [options] [--exec <cmd>] [--onto <nouvelle-base>] [<amont>] "
-"[<branche>]"
+"git rebase [-i] [options] [--exec <cmd>] [--onto <nouvelle-base> | --keep-"
+"base] [<amont> [<branche>]]"
 
 #: builtin/rebase.c:34
 msgid ""
@@ -17389,189 +17472,189 @@
 msgid "could not generate todo list"
 msgstr "impossible de générer la liste à-faire"
 
-#: builtin/rebase.c:382
+#: builtin/rebase.c:383
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "un commit de base doit être fourni avec --upstream ou --onto"
 
-#: builtin/rebase.c:437
+#: builtin/rebase.c:438
 msgid "git rebase--interactive [<options>]"
 msgstr "git rebase--interactive [<options>]"
 
-#: builtin/rebase.c:449
+#: builtin/rebase.c:450
 msgid "keep empty commits"
 msgstr "garder les validations vides"
 
-#: builtin/rebase.c:451 builtin/revert.c:128
+#: builtin/rebase.c:452 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr "autoriser les validations avec des messages vides"
 
-#: builtin/rebase.c:452
+#: builtin/rebase.c:453
 msgid "rebase merge commits"
 msgstr "rebaser les commits de fusion"
 
-#: builtin/rebase.c:454
+#: builtin/rebase.c:455
 msgid "keep original branch points of cousins"
 msgstr "conserver les points de branchement de cousins originaux"
 
-#: builtin/rebase.c:456
+#: builtin/rebase.c:457
 msgid "move commits that begin with squash!/fixup!"
 msgstr "déplacer les commits qui commencent par squash!/fixup!"
 
-#: builtin/rebase.c:457
+#: builtin/rebase.c:458
 msgid "sign commits"
 msgstr "signer les commits"
 
-#: builtin/rebase.c:459 builtin/rebase.c:1403
+#: builtin/rebase.c:460 builtin/rebase.c:1427
 msgid "display a diffstat of what changed upstream"
 msgstr "afficher un diffstat de ce qui a changé en amont"
 
-#: builtin/rebase.c:461
+#: builtin/rebase.c:462
 msgid "continue rebase"
 msgstr "continuer le rebasage"
 
-#: builtin/rebase.c:463
+#: builtin/rebase.c:464
 msgid "skip commit"
 msgstr "sauter le commit"
 
-#: builtin/rebase.c:464
+#: builtin/rebase.c:465
 msgid "edit the todo list"
 msgstr "éditer la liste à-faire"
 
-#: builtin/rebase.c:466
+#: builtin/rebase.c:467
 msgid "show the current patch"
 msgstr "afficher le patch courant"
 
-#: builtin/rebase.c:469
+#: builtin/rebase.c:470
 msgid "shorten commit ids in the todo list"
 msgstr "raccourcir les identifiants de commits dans la liste à-faire"
 
-#: builtin/rebase.c:471
+#: builtin/rebase.c:472
 msgid "expand commit ids in the todo list"
 msgstr "étendre les identifiants de commit dans la liste à-faire"
 
-#: builtin/rebase.c:473
+#: builtin/rebase.c:474
 msgid "check the todo list"
 msgstr "vérifier la liste à-faire"
 
-#: builtin/rebase.c:475
+#: builtin/rebase.c:476
 msgid "rearrange fixup/squash lines"
 msgstr "réarranger les lignes fixup/squash"
 
-#: builtin/rebase.c:477
+#: builtin/rebase.c:478
 msgid "insert exec commands in todo list"
 msgstr "insérer les commandes exec dans la liste à-faire"
 
-#: builtin/rebase.c:478
+#: builtin/rebase.c:479
 msgid "onto"
 msgstr "sur"
 
-#: builtin/rebase.c:481
+#: builtin/rebase.c:482
 msgid "restrict-revision"
 msgstr "restrict-revision"
 
-#: builtin/rebase.c:481
+#: builtin/rebase.c:482
 msgid "restrict revision"
 msgstr "restreindre la révision"
 
-#: builtin/rebase.c:483
+#: builtin/rebase.c:484
 msgid "squash-onto"
 msgstr "écraser-sur"
 
-#: builtin/rebase.c:484
+#: builtin/rebase.c:485
 msgid "squash onto"
 msgstr "écraser sur"
 
-#: builtin/rebase.c:486
+#: builtin/rebase.c:487
 msgid "the upstream commit"
 msgstr "le commit amont"
 
-#: builtin/rebase.c:488
+#: builtin/rebase.c:489
 msgid "head-name"
 msgstr "nom du head"
 
-#: builtin/rebase.c:488
+#: builtin/rebase.c:489
 msgid "head name"
 msgstr "nom du head"
 
-#: builtin/rebase.c:493
+#: builtin/rebase.c:494
 msgid "rebase strategy"
 msgstr "stratégie de rebasage"
 
-#: builtin/rebase.c:494
+#: builtin/rebase.c:495
 msgid "strategy-opts"
 msgstr "options de stratégie"
 
-#: builtin/rebase.c:495
+#: builtin/rebase.c:496
 msgid "strategy options"
 msgstr "options de stratégie"
 
-#: builtin/rebase.c:496
+#: builtin/rebase.c:497
 msgid "switch-to"
 msgstr "switch-to"
 
-#: builtin/rebase.c:497
+#: builtin/rebase.c:498
 msgid "the branch or commit to checkout"
 msgstr "la branche ou le commit à extraire"
 
-#: builtin/rebase.c:498
+#: builtin/rebase.c:499
 msgid "onto-name"
 msgstr "sur-le-nom"
 
-#: builtin/rebase.c:498
+#: builtin/rebase.c:499
 msgid "onto name"
 msgstr "sur le nom"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "cmd"
 msgstr "cmd"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "the command to run"
 msgstr "la commande à lancer"
 
-#: builtin/rebase.c:502 builtin/rebase.c:1486
+#: builtin/rebase.c:503 builtin/rebase.c:1510
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "re-planifier automatiquement tout `exec` qui échoue"
 
-#: builtin/rebase.c:518
+#: builtin/rebase.c:519
 msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
 msgstr "--[no-]rebase-cousins n'a aucun effet sans --rebase-merges"
 
-#: builtin/rebase.c:534
+#: builtin/rebase.c:535
 #, c-format
 msgid "%s requires an interactive rebase"
 msgstr "%s requiert un rebasage interactif"
 
-#: builtin/rebase.c:586
+#: builtin/rebase.c:587
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "impossible d'accéder 'onto' : '%s'"
 
-#: builtin/rebase.c:601
+#: builtin/rebase.c:602
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "orig-head invalide : '%s'"
 
-#: builtin/rebase.c:626
+#: builtin/rebase.c:627
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "allow_rerere_autoupdate invalide ignoré : '%s'"
 
-#: builtin/rebase.c:702
+#: builtin/rebase.c:703
 #, c-format
 msgid "Could not read '%s'"
 msgstr "Impossible de lire '%s'"
 
-#: builtin/rebase.c:720
+#: builtin/rebase.c:721
 #, c-format
 msgid "Cannot store %s"
 msgstr "Impossible de stocker %s"
 
-#: builtin/rebase.c:827
+#: builtin/rebase.c:828
 msgid "could not determine HEAD revision"
 msgstr "impossible de déterminer la révision HEAD"
 
-#: builtin/rebase.c:950 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:951 git-rebase--preserve-merges.sh:81
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -17585,7 +17668,7 @@
 "arrêter\n"
 "et revenir à l'état antérieur à la commande, lancez \"git rebase --abort\"."
 
-#: builtin/rebase.c:1031
+#: builtin/rebase.c:1032
 #, c-format
 msgid ""
 "\n"
@@ -17604,7 +17687,7 @@
 "\n"
 "Résultat, git ne peut pas les rebaser."
 
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1339
 #, c-format
 msgid ""
 "%s\n"
@@ -17621,7 +17704,7 @@
 "    git rebase '<branche>'\n"
 "\n"
 
-#: builtin/rebase.c:1334
+#: builtin/rebase.c:1355
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -17635,127 +17718,132 @@
 "    git branch --set-upstream-to=%s/<branche> %s\n"
 "\n"
 
-#: builtin/rebase.c:1364
+#: builtin/rebase.c:1385
 msgid "exec commands cannot contain newlines"
 msgstr "les commandes exec ne peut pas contenir de retour à la ligne"
 
-#: builtin/rebase.c:1368
+#: builtin/rebase.c:1389
 msgid "empty exec command"
 msgstr "commande exec vide"
 
-#: builtin/rebase.c:1396
+#: builtin/rebase.c:1418
 msgid "rebase onto given branch instead of upstream"
 msgstr "rebaser sur la branche %s au lieu de la branche amont"
 
-#: builtin/rebase.c:1398
+#: builtin/rebase.c:1420
+msgid "use the merge-base of upstream and branch as the current base"
+msgstr ""
+"utiliser la base de fusion de l'amont et la branche comme base actuelle"
+
+#: builtin/rebase.c:1422
 msgid "allow pre-rebase hook to run"
 msgstr "permettre le lancement du crochet pre-rebase"
 
-#: builtin/rebase.c:1400
+#: builtin/rebase.c:1424
 msgid "be quiet. implies --no-stat"
 msgstr "être silencieux. implique --no-stat"
 
-#: builtin/rebase.c:1406
+#: builtin/rebase.c:1430
 msgid "do not show diffstat of what changed upstream"
 msgstr "ne pas afficher un diffstat de ce qui a changé en amont"
 
-#: builtin/rebase.c:1409
+#: builtin/rebase.c:1433
 msgid "add a Signed-off-by: line to each commit"
 msgstr "ajouter une ligne Signed-off-by à chaque message de validation"
 
-#: builtin/rebase.c:1411 builtin/rebase.c:1415 builtin/rebase.c:1417
+#: builtin/rebase.c:1435 builtin/rebase.c:1439 builtin/rebase.c:1441
 msgid "passed to 'git am'"
 msgstr "passé à 'git am'"
 
-#: builtin/rebase.c:1419 builtin/rebase.c:1421
+#: builtin/rebase.c:1443 builtin/rebase.c:1445
 msgid "passed to 'git apply'"
 msgstr "passé jusqu'à git-apply"
 
-#: builtin/rebase.c:1423 builtin/rebase.c:1426
+#: builtin/rebase.c:1447 builtin/rebase.c:1450
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "picorer tous les commits, même sans modifiant"
 
-#: builtin/rebase.c:1428
+#: builtin/rebase.c:1452
 msgid "continue"
 msgstr "continuer"
 
-#: builtin/rebase.c:1431
+#: builtin/rebase.c:1455
 msgid "skip current patch and continue"
 msgstr "sauter le patch courant et continuer"
 
-#: builtin/rebase.c:1433
+#: builtin/rebase.c:1457
 msgid "abort and check out the original branch"
 msgstr "abandonner et extraire la branche d'origine"
 
-#: builtin/rebase.c:1436
+#: builtin/rebase.c:1460
 msgid "abort but keep HEAD where it is"
 msgstr "abandonne mais garde HEAD où il est"
 
-#: builtin/rebase.c:1437
+#: builtin/rebase.c:1461
 msgid "edit the todo list during an interactive rebase"
 msgstr "éditer la liste à faire lors d'un rebasage interactif"
 
-#: builtin/rebase.c:1440
+#: builtin/rebase.c:1464
 msgid "show the patch file being applied or merged"
 msgstr "afficher le patch en cours d'application ou de fusion"
 
-#: builtin/rebase.c:1443
+#: builtin/rebase.c:1467
 msgid "use merging strategies to rebase"
 msgstr "utiliser des stratégies de fusion pour rebaser"
 
-#: builtin/rebase.c:1447
+#: builtin/rebase.c:1471
 msgid "let the user edit the list of commits to rebase"
 msgstr "laisser l'utilisateur éditer la liste des commits à rebaser"
 
-#: builtin/rebase.c:1451
+#: builtin/rebase.c:1475
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr "(DÉCONSEILLÉ) essayer de recréer les fusions au lieu de les ignorer"
 
-#: builtin/rebase.c:1455
+#: builtin/rebase.c:1479
 msgid "preserve empty commits during rebase"
 msgstr "préserver les validations vides pendant le rebasage"
 
-#: builtin/rebase.c:1457
+#: builtin/rebase.c:1481
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "déplace les commits qui commencent par squash!/fixup! sous -i"
 
-#: builtin/rebase.c:1463
+#: builtin/rebase.c:1487
 msgid "automatically stash/stash pop before and after"
 msgstr "remiser et réappliquer automatiquement avant et après"
 
-#: builtin/rebase.c:1465
+#: builtin/rebase.c:1489
 msgid "add exec lines after each commit of the editable list"
 msgstr "ajouter les lignes exec après chaque commit de la liste éditable"
 
-#: builtin/rebase.c:1469
+#: builtin/rebase.c:1493
 msgid "allow rebasing commits with empty messages"
 msgstr "autoriser les commits de rebasage avec des messages vides"
 
-#: builtin/rebase.c:1472
+#: builtin/rebase.c:1496
 msgid "try to rebase merges instead of skipping them"
 msgstr "essayer de rebaser les fusions au lieu de les garder"
 
-#: builtin/rebase.c:1475
+#: builtin/rebase.c:1499
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "utiliser 'merge-base --fork-point' pour raffiner l'amont"
 
-#: builtin/rebase.c:1477
+#: builtin/rebase.c:1501
 msgid "use the given merge strategy"
 msgstr "utiliser la stratégie de fusion indiquée"
 
-#: builtin/rebase.c:1479 builtin/revert.c:115
+#: builtin/rebase.c:1503 builtin/revert.c:115
 msgid "option"
 msgstr "option"
 
-#: builtin/rebase.c:1480
+#: builtin/rebase.c:1504
 msgid "pass the argument through to the merge strategy"
 msgstr "passer les arguments jusqu'à la stratégie de fusion"
 
-#: builtin/rebase.c:1483
+#: builtin/rebase.c:1507
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "rebaser tous les objets inatteignables depuis les racines"
 
-#: builtin/rebase.c:1500
+#: builtin/rebase.c:1524
 msgid ""
 "the rebase.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
@@ -17763,32 +17851,40 @@
 "les support de rebase.useBuiltin a été supprimé !\n"
 "Voir son entrée dans 'git help config' pour plus de détails."
 
-#: builtin/rebase.c:1506
+#: builtin/rebase.c:1530
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "Il semble que 'git-am' soit en cours. Impossible de rebaser."
 
-#: builtin/rebase.c:1547
+#: builtin/rebase.c:1571
 msgid ""
 "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
 msgstr ""
 "git rebase --preserve-merges est déconseillé. Utilisez --rebase-merges à la "
 "place."
 
-#: builtin/rebase.c:1551
+#: builtin/rebase.c:1576
+msgid "cannot combine '--keep-base' with '--onto'"
+msgstr "impossible de combiner '--keep-base' avec '--onto'"
+
+#: builtin/rebase.c:1578
+msgid "cannot combine '--keep-base' with '--root'"
+msgstr "impossible de combiner '--keep-base' avec '--root'"
+
+#: builtin/rebase.c:1582
 msgid "No rebase in progress?"
 msgstr "Pas de rebasage en cours ?"
 
-#: builtin/rebase.c:1555
+#: builtin/rebase.c:1586
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr ""
 "L'action --edit-todo peut seulement être utilisée lors d'un rebasage "
 "interactif."
 
-#: builtin/rebase.c:1578
+#: builtin/rebase.c:1609
 msgid "Cannot read HEAD"
 msgstr "Impossible de lire HEAD"
 
-#: builtin/rebase.c:1590
+#: builtin/rebase.c:1621
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -17796,16 +17892,16 @@
 "Vous devez éditer tous les conflits de fusion et\n"
 "les marquer comme résolus avec git add"
 
-#: builtin/rebase.c:1609
+#: builtin/rebase.c:1640
 msgid "could not discard worktree changes"
 msgstr "Impossible de supprimer les changements de l'arbre de travail"
 
-#: builtin/rebase.c:1628
+#: builtin/rebase.c:1659
 #, c-format
 msgid "could not move back to %s"
 msgstr "Impossible de revenir à %s"
 
-#: builtin/rebase.c:1673
+#: builtin/rebase.c:1704
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -17827,167 +17923,159 @@
 "chose\n"
 "d'important ici.\n"
 
-#: builtin/rebase.c:1694
+#: builtin/rebase.c:1725
 msgid "switch `C' expects a numerical value"
 msgstr "l'option `C' attend un valeur numérique"
 
-#: builtin/rebase.c:1735
+#: builtin/rebase.c:1766
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "mode inconnu : %s"
 
-#: builtin/rebase.c:1757
+#: builtin/rebase.c:1788
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy requiert --merge ou --interactive"
 
-#: builtin/rebase.c:1797
+#: builtin/rebase.c:1828
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec requiert --exec ou --interactive"
 
-#: builtin/rebase.c:1809
+#: builtin/rebase.c:1840
 msgid "cannot combine am options with either interactive or merge options"
 msgstr ""
 "impossible de combiner les options am avec l'options interactive ou merge"
 
-#: builtin/rebase.c:1828
+#: builtin/rebase.c:1859
 msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
 msgstr "impossible de combiner '--preserve-merges' avec '--rebase-merges'"
 
-#: builtin/rebase.c:1832
+#: builtin/rebase.c:1863
 msgid ""
 "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
 msgstr ""
 "erreur : impossible de combiner '--preserve-merges' avec '--reschedule-"
 "failed-exec'"
 
-#: builtin/rebase.c:1838
-msgid "cannot combine '--rebase-merges' with '--strategy-option'"
-msgstr "impossible de combiner '--rebase-merges' avec '--strategy-option'"
-
-#: builtin/rebase.c:1841
-msgid "cannot combine '--rebase-merges' with '--strategy'"
-msgstr "impossible de combiner '--rebase-merges' avec '--strategy'"
-
-#: builtin/rebase.c:1865
+#: builtin/rebase.c:1887
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "amont invalide '%s'"
 
-#: builtin/rebase.c:1871
+#: builtin/rebase.c:1893
 msgid "Could not create new root commit"
 msgstr "Impossible de créer un nouveau commit racine"
 
-#: builtin/rebase.c:1889
+#: builtin/rebase.c:1919
+#, c-format
+msgid "'%s': need exactly one merge base with branch"
+msgstr "'%s': exactement une base de fusion nécessaire avec une branche"
+
+#: builtin/rebase.c:1922
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "'%s': exactement une base de fusion nécessaire"
 
-#: builtin/rebase.c:1896
+#: builtin/rebase.c:1930
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "ne pointe pas sur une validation valide : '%s'"
 
-#: builtin/rebase.c:1921
+#: builtin/rebase.c:1955
 #, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr "fatal : pas de branche ou commit '%s'"
 
-#: builtin/rebase.c:1929 builtin/submodule--helper.c:38
+#: builtin/rebase.c:1963 builtin/submodule--helper.c:38
 #: builtin/submodule--helper.c:1934
 #, c-format
 msgid "No such ref: %s"
 msgstr "Référence inexistante : %s"
 
-#: builtin/rebase.c:1940
+#: builtin/rebase.c:1974
 msgid "Could not resolve HEAD to a revision"
 msgstr "Impossible de résoudre le commit HEAD vers un révision"
 
-#: builtin/rebase.c:1981
+#: builtin/rebase.c:2012
 msgid "Cannot autostash"
 msgstr "Autoremisage impossible"
 
-#: builtin/rebase.c:1984
+#: builtin/rebase.c:2015
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "réponse de remisage inattendue : '%s'"
 
-#: builtin/rebase.c:1990
+#: builtin/rebase.c:2021
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "Impossible de créer le répertoire pour '%s'"
 
-#: builtin/rebase.c:1993
+#: builtin/rebase.c:2024
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Autoremisage créé : %s\n"
 
-#: builtin/rebase.c:1996
+#: builtin/rebase.c:2027
 msgid "could not reset --hard"
 msgstr "impossible de réinitialiser --hard"
 
-#: builtin/rebase.c:1997 builtin/reset.c:114
-#, c-format
-msgid "HEAD is now at %s"
-msgstr "HEAD est maintenant à %s"
-
-#: builtin/rebase.c:2013
+#: builtin/rebase.c:2036
 msgid "Please commit or stash them."
 msgstr "Veuillez les valider ou les remiser."
 
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:2063
 #, c-format
 msgid "could not parse '%s'"
 msgstr "impossible d'analyser '%s'"
 
-#: builtin/rebase.c:2053
+#: builtin/rebase.c:2076
 #, c-format
 msgid "could not switch to %s"
 msgstr "Impossible de basculer vers %s"
 
-#: builtin/rebase.c:2064
+#: builtin/rebase.c:2087
 msgid "HEAD is up to date."
 msgstr "HEAD est à jour."
 
-#: builtin/rebase.c:2066
+#: builtin/rebase.c:2089
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "La branche courante %s est à jour.\n"
 
-#: builtin/rebase.c:2074
+#: builtin/rebase.c:2097
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD est à jour, rebasage forcé."
 
-#: builtin/rebase.c:2076
+#: builtin/rebase.c:2099
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "La branche courante %s est à jour, rebasage forcé.\n"
 
-#: builtin/rebase.c:2084
+#: builtin/rebase.c:2107
 msgid "The pre-rebase hook refused to rebase."
 msgstr "Le crochet pre-rebase a refusé de rebaser."
 
-#: builtin/rebase.c:2091
+#: builtin/rebase.c:2114
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Changements vers %s :\n"
 
-#: builtin/rebase.c:2094
+#: builtin/rebase.c:2117
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Changements de %s sur %s :\n"
 
-#: builtin/rebase.c:2119
+#: builtin/rebase.c:2142
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 "Rembobinage préalable de head pour pouvoir rejouer votre travail par-"
 "dessus...\n"
 
-#: builtin/rebase.c:2128
+#: builtin/rebase.c:2151
 msgid "Could not detach HEAD"
 msgstr "Impossible de détacher HEAD"
 
-#: builtin/rebase.c:2137
+#: builtin/rebase.c:2160
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Avance rapide de %s sur %s.\n"
@@ -17996,7 +18084,7 @@
 msgid "git receive-pack <git-dir>"
 msgstr "git receive-pack <répertoire-git>"
 
-#: builtin/receive-pack.c:832
+#: builtin/receive-pack.c:830
 msgid ""
 "By default, updating the current branch in a non-bare repository\n"
 "is denied, because it will make the index and work tree inconsistent\n"
@@ -18026,7 +18114,7 @@
 "Pour éliminer ce message et conserver le comportement par défaut,\n"
 "réglez « receive.denyCurrentBranch » à 'refuse'."
 
-#: builtin/receive-pack.c:852
+#: builtin/receive-pack.c:850
 msgid ""
 "By default, deleting the current branch is denied, because the next\n"
 "'git clone' won't result in any file checked out, causing confusion.\n"
@@ -18046,11 +18134,11 @@
 "\n"
 "Pour éliminer ce message, réglez-le à 'refuse'."
 
-#: builtin/receive-pack.c:1938
+#: builtin/receive-pack.c:1936
 msgid "quiet"
 msgstr "quiet"
 
-#: builtin/receive-pack.c:1952
+#: builtin/receive-pack.c:1950
 msgid "You must specify a directory."
 msgstr "Vous devez spécifier un répertoire."
 
@@ -18632,11 +18720,11 @@
 msgid "Unknown subcommand: %s"
 msgstr "Sous-commande inconnue : %s"
 
-#: builtin/repack.c:22
+#: builtin/repack.c:23
 msgid "git repack [<options>]"
 msgstr "git repack [<options>]"
 
-#: builtin/repack.c:27
+#: builtin/repack.c:28
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -18645,117 +18733,117 @@
 "Utilisez\n"
 "--no-write-bitmap-index ou désactivez le paramètre pack.writebitmaps."
 
-#: builtin/repack.c:190
+#: builtin/repack.c:191
 msgid "could not start pack-objects to repack promisor objects"
 msgstr ""
 "ne pas démarrer pack-objects pour ré-empaqueter les objects de prometteur"
 
-#: builtin/repack.c:229 builtin/repack.c:408
+#: builtin/repack.c:230 builtin/repack.c:409
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 "repack : attente de lignes d'Id d'objets en hexa complet seulement depuis "
 "les objects de paquet."
 
-#: builtin/repack.c:246
+#: builtin/repack.c:247
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr ""
 "impossible de terminer pack-objects  pour ré-empaqueter les objets de "
 "prometteur"
 
-#: builtin/repack.c:284
+#: builtin/repack.c:285
 msgid "pack everything in a single pack"
 msgstr "empaqueter tout dans un seul paquet"
 
-#: builtin/repack.c:286
+#: builtin/repack.c:287
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "identique à -a et transformer les objets inaccessibles en suspens"
 
-#: builtin/repack.c:289
+#: builtin/repack.c:290
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "supprimer les paquets redondants et lancer git-prune-packed"
 
-#: builtin/repack.c:291
+#: builtin/repack.c:292
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "passer --no-reuse-delta à git-pack-objects"
 
-#: builtin/repack.c:293
+#: builtin/repack.c:294
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "passer --no-reuse-object à git-pack-objects"
 
-#: builtin/repack.c:295
+#: builtin/repack.c:296
 msgid "do not run git-update-server-info"
 msgstr "ne pas lancer git update-server-info"
 
-#: builtin/repack.c:298
+#: builtin/repack.c:299
 msgid "pass --local to git-pack-objects"
 msgstr "passer --local à git-pack-objects"
 
-#: builtin/repack.c:300
+#: builtin/repack.c:301
 msgid "write bitmap index"
 msgstr "écrire un index en bitmap"
 
-#: builtin/repack.c:302
+#: builtin/repack.c:303
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "passer --delta-islands à git-pack-objects"
 
-#: builtin/repack.c:303
+#: builtin/repack.c:304
 msgid "approxidate"
 msgstr "date approximative"
 
-#: builtin/repack.c:304
+#: builtin/repack.c:305
 msgid "with -A, do not loosen objects older than this"
 msgstr "avec -A, ne pas suspendre les objets plus vieux que celui-ci"
 
-#: builtin/repack.c:306
+#: builtin/repack.c:307
 msgid "with -a, repack unreachable objects"
 msgstr "avec -a, repaquétiser les objets inaccessibles"
 
-#: builtin/repack.c:308
+#: builtin/repack.c:309
 msgid "size of the window used for delta compression"
 msgstr "taille de la fenêtre utilisée pour la compression des deltas"
 
-#: builtin/repack.c:309 builtin/repack.c:315
+#: builtin/repack.c:310 builtin/repack.c:316
 msgid "bytes"
 msgstr "octets"
 
-#: builtin/repack.c:310
+#: builtin/repack.c:311
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr ""
 "idem ci-dessus, mais limiter la taille mémoire au lieu du nombre d'éléments"
 
-#: builtin/repack.c:312
+#: builtin/repack.c:313
 msgid "limits the maximum delta depth"
 msgstr "limite la profondeur maximale des deltas"
 
-#: builtin/repack.c:314
+#: builtin/repack.c:315
 msgid "limits the maximum number of threads"
 msgstr "limite le nombre maximal de fils"
 
-#: builtin/repack.c:316
+#: builtin/repack.c:317
 msgid "maximum size of each packfile"
 msgstr "taille maximum de chaque fichier paquet"
 
-#: builtin/repack.c:318
+#: builtin/repack.c:319
 msgid "repack objects in packs marked with .keep"
 msgstr "réempaqueter les objets dans des paquets marqués avec .keep"
 
-#: builtin/repack.c:320
+#: builtin/repack.c:321
 msgid "do not repack this pack"
 msgstr "ne pas rempaqueter ce paquet"
 
-#: builtin/repack.c:330
+#: builtin/repack.c:331
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "impossible de supprimer les paquets dans un dépôt d'objets précieux"
 
-#: builtin/repack.c:334
+#: builtin/repack.c:335
 msgid "--keep-unreachable and -A are incompatible"
 msgstr "--keep-unreachable et -A sont incompatibles"
 
-#: builtin/repack.c:417
+#: builtin/repack.c:418
 msgid "Nothing new to pack."
 msgstr "Rien de neuf à empaqueter."
 
-#: builtin/repack.c:478
+#: builtin/repack.c:479
 #, c-format
 msgid ""
 "WARNING: Some packs in use have been renamed by\n"
@@ -18774,7 +18862,7 @@
 "ALERTE : aussi échoué.\n"
 "ALERTE : Veuillez les renommer manuellement dans %s :\n"
 
-#: builtin/repack.c:526
+#: builtin/repack.c:527
 #, c-format
 msgid "failed to remove '%s'"
 msgstr "échec de la suppression de '%s'"
@@ -18882,8 +18970,8 @@
 msgid "unable to write object to database"
 msgstr "impossible d'écrire l'objet dans la base de données"
 
-#: builtin/replace.c:322 builtin/replace.c:377 builtin/replace.c:422
-#: builtin/replace.c:452
+#: builtin/replace.c:322 builtin/replace.c:378 builtin/replace.c:423
+#: builtin/replace.c:453
 #, c-format
 msgid "not a valid object name: '%s'"
 msgstr "nom d'objet invalide : '%s'"
@@ -18902,22 +18990,22 @@
 msgid "new object is the same as the old one: '%s'"
 msgstr "le nouvel objet est identique à l'ancien : '%s'"
 
-#: builtin/replace.c:383
+#: builtin/replace.c:384
 #, c-format
 msgid "could not parse %s as a commit"
 msgstr "impossible d'analyser %s comme commit"
 
-#: builtin/replace.c:414
+#: builtin/replace.c:415
 #, c-format
 msgid "bad mergetag in commit '%s'"
 msgstr "mauvaise étiquette de fusion dans le commit '%s'"
 
-#: builtin/replace.c:416
+#: builtin/replace.c:417
 #, c-format
 msgid "malformed mergetag in commit '%s'"
 msgstr "étiquette de fusion malformée dans le commit '%s'"
 
-#: builtin/replace.c:428
+#: builtin/replace.c:429
 #, c-format
 msgid ""
 "original commit '%s' contains mergetag '%s' that is discarded; use --edit "
@@ -18926,31 +19014,31 @@
 "le commit original '%s' contient l'étiquette de fusion '%s' qui a disparu ; "
 "utilisez --edit au lieu de --graft"
 
-#: builtin/replace.c:467
+#: builtin/replace.c:468
 #, c-format
 msgid "the original commit '%s' has a gpg signature"
 msgstr "le commit original '%s' contient une signature GPG"
 
-#: builtin/replace.c:468
+#: builtin/replace.c:469
 msgid "the signature will be removed in the replacement commit!"
 msgstr "la signature sera éliminée dans la validation de remplacement !"
 
-#: builtin/replace.c:478
+#: builtin/replace.c:479
 #, c-format
 msgid "could not write replacement commit for: '%s'"
 msgstr "Impossible d'écrire le commit de remplacement pour '%s'"
 
-#: builtin/replace.c:486
+#: builtin/replace.c:487
 #, c-format
 msgid "graft for '%s' unnecessary"
 msgstr "graft pour '%s' non nécessaire"
 
-#: builtin/replace.c:490
+#: builtin/replace.c:491
 #, c-format
 msgid "new commit is the same as the old one: '%s'"
 msgstr "le nouveau commit est identique à l'ancien : '%s'"
 
-#: builtin/replace.c:525
+#: builtin/replace.c:526
 #, c-format
 msgid ""
 "could not convert the following graft(s):\n"
@@ -18959,71 +19047,71 @@
 "impossible de convertir la(les) greffe(s) suivante(s) :\n"
 "%s"
 
-#: builtin/replace.c:546
+#: builtin/replace.c:547
 msgid "list replace refs"
 msgstr "afficher les références de remplacement"
 
-#: builtin/replace.c:547
+#: builtin/replace.c:548
 msgid "delete replace refs"
 msgstr "supprimer les références de remplacement"
 
-#: builtin/replace.c:548
+#: builtin/replace.c:549
 msgid "edit existing object"
 msgstr "éditer l'objet existant"
 
-#: builtin/replace.c:549
+#: builtin/replace.c:550
 msgid "change a commit's parents"
 msgstr "Modifier les parents d'un commit"
 
-#: builtin/replace.c:550
+#: builtin/replace.c:551
 msgid "convert existing graft file"
 msgstr "convertir le fichier de greffe existant"
 
-#: builtin/replace.c:551
+#: builtin/replace.c:552
 msgid "replace the ref if it exists"
 msgstr "remplacer la référence si elle existe"
 
-#: builtin/replace.c:553
+#: builtin/replace.c:554
 msgid "do not pretty-print contents for --edit"
 msgstr "afficher sans mise en forme pour --edit"
 
-#: builtin/replace.c:554
+#: builtin/replace.c:555
 msgid "use this format"
 msgstr "utiliser ce format"
 
-#: builtin/replace.c:567
+#: builtin/replace.c:568
 msgid "--format cannot be used when not listing"
 msgstr "--format ne peut pas être utilisé sans lister"
 
-#: builtin/replace.c:575
+#: builtin/replace.c:576
 msgid "-f only makes sense when writing a replacement"
 msgstr "-f n'a de sens qu'en écrivant un remplacement"
 
-#: builtin/replace.c:579
+#: builtin/replace.c:580
 msgid "--raw only makes sense with --edit"
 msgstr "--raw n'a de sens qu'avec l'option --edit"
 
-#: builtin/replace.c:585
+#: builtin/replace.c:586
 msgid "-d needs at least one argument"
 msgstr "-d requiert au moins un argument"
 
-#: builtin/replace.c:591
+#: builtin/replace.c:592
 msgid "bad number of arguments"
 msgstr "mauvais nombre d'arguments"
 
-#: builtin/replace.c:597
+#: builtin/replace.c:598
 msgid "-e needs exactly one argument"
 msgstr "-e requiert un seul argument"
 
-#: builtin/replace.c:603
+#: builtin/replace.c:604
 msgid "-g needs at least one argument"
 msgstr "-g requiert au moins un argument"
 
-#: builtin/replace.c:609
+#: builtin/replace.c:610
 msgid "--convert-graft-file takes no argument"
 msgstr "--convert-graft-file ne supporte aucun argument"
 
-#: builtin/replace.c:615
+#: builtin/replace.c:616
 msgid "only one pattern can be given with -l"
 msgstr "-l n'accepte qu'un motifs"
 
@@ -19092,13 +19180,18 @@
 msgid "Failed to find tree of %s."
 msgstr "Impossible de trouver l'arbre pour %s."
 
+#: builtin/reset.c:114
+#, c-format
+msgid "HEAD is now at %s"
+msgstr "HEAD est maintenant à %s"
+
 #: builtin/reset.c:193
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Impossible de faire un \"reset %s\" au milieu d'une fusion."
 
-#: builtin/reset.c:293 builtin/stash.c:514 builtin/stash.c:589
-#: builtin/stash.c:613
+#: builtin/reset.c:293 builtin/stash.c:520 builtin/stash.c:595
+#: builtin/stash.c:619
 msgid "be quiet, only report errors"
 msgstr "être silencieux, afficher seulement les erreurs"
 
@@ -19186,24 +19279,19 @@
 msgid "Could not write new index file."
 msgstr "Impossible d'écrire le nouveau fichier d'index."
 
-#: builtin/rev-list.c:412
+#: builtin/rev-list.c:411
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr "impossible de combiner --exclude-promisor-objects et --missing"
 
-#: builtin/rev-list.c:473
+#: builtin/rev-list.c:472
 msgid "object filtering requires --objects"
 msgstr "le filtrage d'objet exige --objects"
 
-#: builtin/rev-list.c:476
-#, c-format
-msgid "invalid sparse value '%s'"
-msgstr "valeur invalide de 'sparse' '%s'"
-
-#: builtin/rev-list.c:527
+#: builtin/rev-list.c:522
 msgid "rev-list does not support display of notes"
 msgstr "rev-list ne supporte l'affichage des notes"
 
-#: builtin/rev-list.c:530
+#: builtin/rev-list.c:525
 msgid "cannot combine --use-bitmap-index with object filtering"
 msgstr "impossible de combiner --use-bitmap-index avec le filtrage d'objet"
 
@@ -19754,136 +19842,136 @@
 msgid "could not save index tree"
 msgstr "impossible de sauvegarder l'arbre d'index"
 
-#: builtin/stash.c:434
+#: builtin/stash.c:436
 msgid "could not restore untracked files from stash"
 msgstr "impossible de restaurer les fichiers non-suivis depuis le remisage"
 
-#: builtin/stash.c:448
+#: builtin/stash.c:450
 #, c-format
 msgid "Merging %s with %s"
 msgstr "Fusion de %s avec %s"
 
-#: builtin/stash.c:458 git-legacy-stash.sh:680
+#: builtin/stash.c:460 git-legacy-stash.sh:680
 msgid "Index was not unstashed."
 msgstr "L'index n'a pas été sorti de remise."
 
-#: builtin/stash.c:516 builtin/stash.c:615
+#: builtin/stash.c:522 builtin/stash.c:621
 msgid "attempt to recreate the index"
 msgstr "tentative de recréer l'index"
 
-#: builtin/stash.c:549
+#: builtin/stash.c:555
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "%s supprimé (%s)"
 
-#: builtin/stash.c:552
+#: builtin/stash.c:558
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s : Impossible de supprimer l'élément de stash"
 
-#: builtin/stash.c:577
+#: builtin/stash.c:583
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "'%s' n'est pas une référence de remisage"
 
-#: builtin/stash.c:627 git-legacy-stash.sh:694
+#: builtin/stash.c:633 git-legacy-stash.sh:694
 msgid "The stash entry is kept in case you need it again."
 msgstr ""
 "L'entrée de remisage est conservée au cas où vous en auriez encore besoin."
 
-#: builtin/stash.c:650 git-legacy-stash.sh:712
+#: builtin/stash.c:656 git-legacy-stash.sh:712
 msgid "No branch name specified"
 msgstr "Aucune branche spécifiée"
 
-#: builtin/stash.c:790 builtin/stash.c:827
+#: builtin/stash.c:796 builtin/stash.c:833
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "Impossible de mettre à jour %s avec %s"
 
-#: builtin/stash.c:808 builtin/stash.c:1461 builtin/stash.c:1497
+#: builtin/stash.c:814 builtin/stash.c:1470 builtin/stash.c:1506
 msgid "stash message"
 msgstr "message pour le remisage"
 
-#: builtin/stash.c:818
+#: builtin/stash.c:824
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" exige un argument <commit>"
 
-#: builtin/stash.c:1040 git-legacy-stash.sh:217
+#: builtin/stash.c:1046 git-legacy-stash.sh:217
 msgid "No changes selected"
 msgstr "Aucun changement sélectionné"
 
-#: builtin/stash.c:1136 git-legacy-stash.sh:150
+#: builtin/stash.c:1145 git-legacy-stash.sh:150
 msgid "You do not have the initial commit yet"
 msgstr "Vous n'avez pas encore la validation initiale"
 
-#: builtin/stash.c:1163 git-legacy-stash.sh:165
+#: builtin/stash.c:1172 git-legacy-stash.sh:165
 msgid "Cannot save the current index state"
 msgstr "Impossible de sauver l'état courant de l'index"
 
-#: builtin/stash.c:1172 git-legacy-stash.sh:180
+#: builtin/stash.c:1181 git-legacy-stash.sh:180
 msgid "Cannot save the untracked files"
 msgstr "Impossible de sauver les fichiers non-suivis"
 
-#: builtin/stash.c:1183 builtin/stash.c:1192 git-legacy-stash.sh:200
+#: builtin/stash.c:1192 builtin/stash.c:1201 git-legacy-stash.sh:200
 #: git-legacy-stash.sh:213
 msgid "Cannot save the current worktree state"
 msgstr "Impossible de sauver l'état courant de la copie de travail"
 
-#: builtin/stash.c:1220 git-legacy-stash.sh:233
+#: builtin/stash.c:1229 git-legacy-stash.sh:233
 msgid "Cannot record working tree state"
 msgstr "Impossible d'enregistrer l'état de la copie de travail"
 
-#: builtin/stash.c:1269 git-legacy-stash.sh:337
+#: builtin/stash.c:1278 git-legacy-stash.sh:337
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr ""
 "Impossible d'utiliser --patch et --include-untracked ou --all en même temps"
 
-#: builtin/stash.c:1285
+#: builtin/stash.c:1294
 msgid "Did you forget to 'git add'?"
 msgstr "Vous avez sûrement oublié 'git add' ?"
 
-#: builtin/stash.c:1300 git-legacy-stash.sh:345
+#: builtin/stash.c:1309 git-legacy-stash.sh:345
 msgid "No local changes to save"
 msgstr "Pas de modifications locales à sauver"
 
-#: builtin/stash.c:1307 git-legacy-stash.sh:350
+#: builtin/stash.c:1316 git-legacy-stash.sh:350
 msgid "Cannot initialize stash"
 msgstr "Impossible d'initialiser le remisage"
 
-#: builtin/stash.c:1322 git-legacy-stash.sh:354
+#: builtin/stash.c:1331 git-legacy-stash.sh:354
 msgid "Cannot save the current status"
 msgstr "Impossible de sauver l'état courant"
 
-#: builtin/stash.c:1327
+#: builtin/stash.c:1336
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Arbre de travail et état de l'index sauvegardés dans %s"
 
-#: builtin/stash.c:1417 git-legacy-stash.sh:384
+#: builtin/stash.c:1426 git-legacy-stash.sh:384
 msgid "Cannot remove worktree changes"
 msgstr "Impossible de supprimer les changements de la copie de travail"
 
-#: builtin/stash.c:1452 builtin/stash.c:1488
+#: builtin/stash.c:1461 builtin/stash.c:1497
 msgid "keep index"
 msgstr "conserver l'index"
 
-#: builtin/stash.c:1454 builtin/stash.c:1490
+#: builtin/stash.c:1463 builtin/stash.c:1499
 msgid "stash in patch mode"
 msgstr "remiser une mode rustine"
 
-#: builtin/stash.c:1455 builtin/stash.c:1491
+#: builtin/stash.c:1464 builtin/stash.c:1500
 msgid "quiet mode"
 msgstr "mode silencieux"
 
-#: builtin/stash.c:1457 builtin/stash.c:1493
+#: builtin/stash.c:1466 builtin/stash.c:1502
 msgid "include untracked files in stash"
 msgstr "inclure les fichiers non suivis dans la remise"
 
-#: builtin/stash.c:1459 builtin/stash.c:1495
+#: builtin/stash.c:1468 builtin/stash.c:1504
 msgid "include ignore files"
 msgstr "inclure les fichiers ignorés"
 
-#: builtin/stash.c:1555
+#: builtin/stash.c:1564
 #, c-format
 msgid "could not exec %s"
 msgstr "impossible d'exécuter %s"
@@ -20267,8 +20355,8 @@
 msgstr "ne pas afficher la progression du clonage"
 
 #: builtin/submodule--helper.c:1877
-msgid "git submodule--helper update_clone [--prefix=<path>] [<path>...]"
-msgstr "git submodule--helper update_clone [--prefix=<chemin>] [<chemin>...]"
+msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
+msgstr "git submodule--helper update-clone [--prefix=<chemin>] [<chemin>...]"
 
 #: builtin/submodule--helper.c:1890
 msgid "bad value for update parameter"
@@ -20322,7 +20410,7 @@
 msgstr ""
 "veuillez vous assurer que le fichier .gitmodules est dans l'arbre de travail"
 
-#: builtin/submodule--helper.c:2235 git.c:434 git.c:684
+#: builtin/submodule--helper.c:2235 git.c:433 git.c:683
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s ne gère pas --super-prefix"
@@ -20655,144 +20743,144 @@
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<options>] [--] [<fichier>...]"
 
-#: builtin/update-index.c:971
+#: builtin/update-index.c:972
 msgid "continue refresh even when index needs update"
 msgstr "continuer de rafraîchir même si l'index a besoin d'une mise à jour"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:975
 msgid "refresh: ignore submodules"
 msgstr "rafraîchir : ignorer les sous-modules"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:978
 msgid "do not ignore new files"
 msgstr "ne pas ignorer les nouveaux fichiers"
 
-#: builtin/update-index.c:979
+#: builtin/update-index.c:980
 msgid "let files replace directories and vice-versa"
 msgstr "laisser les fichiers remplacer des répertoires et vice-versa"
 
-#: builtin/update-index.c:981
+#: builtin/update-index.c:982
 msgid "notice files missing from worktree"
 msgstr "aviser des fichiers manquants dans la copie de travail"
 
-#: builtin/update-index.c:983
+#: builtin/update-index.c:984
 msgid "refresh even if index contains unmerged entries"
 msgstr "rafraîchir même si l'index contient des éléments non fusionnés"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:987
 msgid "refresh stat information"
 msgstr "rafraîchir l'information de stat"
 
-#: builtin/update-index.c:990
+#: builtin/update-index.c:991
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "comme --refresh, mais en ignorant l'option assume-unchanged"
 
-#: builtin/update-index.c:994
+#: builtin/update-index.c:995
 msgid "<mode>,<object>,<path>"
 msgstr "<mode>, <objet>, <chemin>"
 
-#: builtin/update-index.c:995
+#: builtin/update-index.c:996
 msgid "add the specified entry to the index"
 msgstr "ajouter l'élément spécifié dans l'index"
 
-#: builtin/update-index.c:1005
+#: builtin/update-index.c:1006
 msgid "mark files as \"not changing\""
 msgstr "marquer les fichiers comme \"non changeants\""
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1009
 msgid "clear assumed-unchanged bit"
 msgstr "mettre à zéro le bit supposé-non-modifié"
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1012
 msgid "mark files as \"index-only\""
 msgstr "marquer les fichiers comme \"index seulement\""
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1015
 msgid "clear skip-worktree bit"
 msgstr "mettre à zéro le bit sauter-la-copie-de travail"
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1018
 msgid "add to index only; do not add content to object database"
 msgstr ""
 "ajouter seulement à l'index ; ne pas ajouter le contenu dans la base de "
 "données des objets"
 
-#: builtin/update-index.c:1019
+#: builtin/update-index.c:1020
 msgid "remove named paths even if present in worktree"
 msgstr ""
 "supprimer les chemins nommés même s'ils sont présents dans la copie de "
 "travail"
 
-#: builtin/update-index.c:1021
+#: builtin/update-index.c:1022
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "avec --stdin : les lignes en entrée sont terminées par des octets nuls"
 
-#: builtin/update-index.c:1023
+#: builtin/update-index.c:1024
 msgid "read list of paths to be updated from standard input"
 msgstr "lire la liste des chemins à mettre à jour depuis l'entrée standard"
 
-#: builtin/update-index.c:1027
+#: builtin/update-index.c:1028
 msgid "add entries from standard input to the index"
 msgstr "ajouter les éléments depuis l'entrée standard à l'index"
 
-#: builtin/update-index.c:1031
+#: builtin/update-index.c:1032
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "repeupler les étapes n°2 et n°3 pour les chemins listés"
 
-#: builtin/update-index.c:1035
+#: builtin/update-index.c:1036
 msgid "only update entries that differ from HEAD"
 msgstr "mettre à jour seulement les éléments qui diffèrent de HEAD"
 
-#: builtin/update-index.c:1039
+#: builtin/update-index.c:1040
 msgid "ignore files missing from worktree"
 msgstr "ignorer les fichiers manquants dans la copie de travail"
 
-#: builtin/update-index.c:1042
+#: builtin/update-index.c:1043
 msgid "report actions to standard output"
 msgstr "afficher les actions sur la sortie standard"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1045
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(pour porcelaines) oublier les conflits sauvés et non résolus"
 
-#: builtin/update-index.c:1048
+#: builtin/update-index.c:1049
 msgid "write index in this format"
 msgstr "écrire l'index dans ce format"
 
-#: builtin/update-index.c:1050
+#: builtin/update-index.c:1051
 msgid "enable or disable split index"
 msgstr "activer ou désactiver l'index divisé"
 
-#: builtin/update-index.c:1052
+#: builtin/update-index.c:1053
 msgid "enable/disable untracked cache"
 msgstr "activer ou désactiver le cache de non-suivis"
 
-#: builtin/update-index.c:1054
+#: builtin/update-index.c:1055
 msgid "test if the filesystem supports untracked cache"
 msgstr "tester si le système de fichier supporte le cache de non-suivis"
 
-#: builtin/update-index.c:1056
+#: builtin/update-index.c:1057
 msgid "enable untracked cache without testing the filesystem"
 msgstr "activer le cache de non-suivis sans tester le système de fichier"
 
-#: builtin/update-index.c:1058
+#: builtin/update-index.c:1059
 msgid "write out the index even if is not flagged as changed"
 msgstr "écrire l'index même s'il n'est pas marqué comme modifié"
 
-#: builtin/update-index.c:1060
+#: builtin/update-index.c:1061
 msgid "enable or disable file system monitor"
 msgstr ""
 "activer ou désactiver la surveillance du système de fichier (fsmonitor)"
 
-#: builtin/update-index.c:1062
+#: builtin/update-index.c:1063
 msgid "mark files as fsmonitor valid"
 msgstr "marquer les fichiers comme valides pour fsmonitor"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1066
 msgid "clear fsmonitor valid bit"
 msgstr "effacer le bit de validité fsmonitor"
 
-#: builtin/update-index.c:1168
+#: builtin/update-index.c:1169
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
@@ -20800,7 +20888,7 @@
 "core.splitIndex est réglé à false ; supprimez-le ou changez-le si vous "
 "souhaitez vraiment activer l'index coupé"
 
-#: builtin/update-index.c:1177
+#: builtin/update-index.c:1178
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
@@ -20808,7 +20896,7 @@
 "core.splitIndex est réglé à vrai ; supprimez-le ou changez-le si vous "
 "souhaitez vraiment désactiver l'index coupé"
 
-#: builtin/update-index.c:1188
+#: builtin/update-index.c:1190
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -20816,11 +20904,11 @@
 "core.untrackedCache est réglé à true ; supprimez-le ou changez-le si vous "
 "souhaitez vraiment désactiver le cache des fichiers non-suivis"
 
-#: builtin/update-index.c:1192
+#: builtin/update-index.c:1194
 msgid "Untracked cache disabled"
 msgstr "Le cache non suivi est désactivé"
 
-#: builtin/update-index.c:1200
+#: builtin/update-index.c:1202
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -20828,29 +20916,29 @@
 "core.untrackedCache est réglé à false ; supprimez-le ou changez-le si vous "
 "souhaitez vraiment activer le cache des fichiers non-suivis"
 
-#: builtin/update-index.c:1204
+#: builtin/update-index.c:1206
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "Le cache non suivi est activé pour '%s'"
 
-#: builtin/update-index.c:1212
+#: builtin/update-index.c:1214
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr ""
 "core.fsmonitor est réglé à false ; changez-le si vous souhaitez vraiment "
 "activer la surveillance du système de fichiers"
 
-#: builtin/update-index.c:1216
+#: builtin/update-index.c:1218
 msgid "fsmonitor enabled"
 msgstr "fsmonitor activé"
 
-#: builtin/update-index.c:1219
+#: builtin/update-index.c:1221
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 "core.fsmonitor est réglé à true ; supprimez-le ou changez-le si vous "
 "souhaitez vraiment désactiver la surveillance du système de fichiers"
 
-#: builtin/update-index.c:1223
+#: builtin/update-index.c:1225
 msgid "fsmonitor disabled"
 msgstr "fsmonitor désactivé"
 
@@ -20946,56 +21034,56 @@
 msgid "print tag contents"
 msgstr "afficher le contenu de l'étiquette"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:17
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [<options>] <chemin> [<commit>]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:18
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [<options>]"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:19
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [<options>] <chemin>"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:20
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move <arbre-de-travail> <nouveau-chemin>"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:21
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [<options>]"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:22
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<options>] <arbre-de-travail>"
 
-#: builtin/worktree.c:24
+#: builtin/worktree.c:23
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <chemin>"
 
-#: builtin/worktree.c:61 builtin/worktree.c:899
+#: builtin/worktree.c:60 builtin/worktree.c:898
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "échec de la suppression de '%s'"
 
-#: builtin/worktree.c:80
+#: builtin/worktree.c:79
 #, c-format
 msgid "Removing worktrees/%s: not a valid directory"
 msgstr "Suppression de worktrees/%s : répertoire invalide"
 
-#: builtin/worktree.c:86
+#: builtin/worktree.c:85
 #, c-format
 msgid "Removing worktrees/%s: gitdir file does not exist"
 msgstr "Suppression de worktrees/%s : le fichier gitdir n'existe pas"
 
-#: builtin/worktree.c:91 builtin/worktree.c:100
+#: builtin/worktree.c:90 builtin/worktree.c:99
 #, c-format
 msgid "Removing worktrees/%s: unable to read gitdir file (%s)"
 msgstr ""
 "Suppression de worktrees/%s : échec de la lecture du fichier gitdir (%s)"
 
-#: builtin/worktree.c:110
+#: builtin/worktree.c:109
 #, c-format
 msgid ""
 "Removing worktrees/%s: short read (expected %<PRIuMAX> bytes, read "
@@ -21004,37 +21092,37 @@
 "Suppression de worktrees/%s: lecture trop courte ( %<PRIuMAX> octets "
 "attendus, %<PRIuMAX> octets lus)"
 
-#: builtin/worktree.c:118
+#: builtin/worktree.c:117
 #, c-format
 msgid "Removing worktrees/%s: invalid gitdir file"
 msgstr "Suppression de worktrees/%s : fichier gitdir invalide"
 
-#: builtin/worktree.c:127
+#: builtin/worktree.c:126
 #, c-format
 msgid "Removing worktrees/%s: gitdir file points to non-existent location"
 msgstr ""
 "Suppression de worktrees/%s : le fichier gitdir point sur un endroit "
 "inexistant"
 
-#: builtin/worktree.c:166
+#: builtin/worktree.c:165
 msgid "report pruned working trees"
 msgstr "afficher les arbres de travail éliminés"
 
-#: builtin/worktree.c:168
+#: builtin/worktree.c:167
 msgid "expire working trees older than <time>"
 msgstr "faire expirer les arbres de travail plus vieux que <temps>"
 
-#: builtin/worktree.c:235
+#: builtin/worktree.c:234
 #, c-format
 msgid "'%s' already exists"
 msgstr "'%s' existe déjà"
 
-#: builtin/worktree.c:252
+#: builtin/worktree.c:251
 #, c-format
 msgid "unable to re-add worktree '%s'"
 msgstr "impossible de ré-ajouter l'arbre de travail '%s'"
 
-#: builtin/worktree.c:257
+#: builtin/worktree.c:256
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -21044,7 +21132,7 @@
 "utilisez 'add -f -f' pour passer outre, ou 'unlock' et 'prune' ou 'remove' "
 "pour corriger"
 
-#: builtin/worktree.c:259
+#: builtin/worktree.c:258
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -21053,129 +21141,129 @@
 "'%s' est un arbre de travail manquant mais déjà enregistré ;\n"
 "utilisez 'add -f' pour passer outre, ou 'prune' ou 'remove' pour corriger"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:308
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "impossible de créer le répertoire de '%s'"
 
-#: builtin/worktree.c:440 builtin/worktree.c:446
+#: builtin/worktree.c:439 builtin/worktree.c:445
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "Préparation de l'arbre de travail (nouvelle branche '%s')"
 
-#: builtin/worktree.c:442
+#: builtin/worktree.c:441
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr ""
 "Préparation de l'arbre de travail (réinitialisation de la branche '%s' ; "
 "précédemment sur %s)"
 
-#: builtin/worktree.c:451
+#: builtin/worktree.c:450
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "Préparation de l'arbre de travail (extraction de '%s')"
 
-#: builtin/worktree.c:457
+#: builtin/worktree.c:456
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "Préparation de l'arbre de travail (HEAD détachée %s)"
 
-#: builtin/worktree.c:498
+#: builtin/worktree.c:497
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr ""
 "extraire la <branche> même si elle est déjà extraite dans une autre copie de "
 "travail"
 
-#: builtin/worktree.c:501
+#: builtin/worktree.c:500
 msgid "create a new branch"
 msgstr "créer une nouvelle branche"
 
-#: builtin/worktree.c:503
+#: builtin/worktree.c:502
 msgid "create or reset a branch"
 msgstr "créer ou réinitialiser une branche"
 
-#: builtin/worktree.c:505
+#: builtin/worktree.c:504
 msgid "populate the new working tree"
 msgstr "remplissage de la nouvelle copie de travail"
 
-#: builtin/worktree.c:506
+#: builtin/worktree.c:505
 msgid "keep the new working tree locked"
 msgstr "conserver le verrou sur le nouvel arbre de travail"
 
-#: builtin/worktree.c:509
+#: builtin/worktree.c:508
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "régler le mode de suivi (voir git-branch(1))"
 
-#: builtin/worktree.c:512
+#: builtin/worktree.c:511
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr "essayer de nommer la nouvelle branche comme la branche amont"
 
-#: builtin/worktree.c:520
+#: builtin/worktree.c:519
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr "-b, -B et --detach sont mutuellement exclusifs"
 
-#: builtin/worktree.c:581
+#: builtin/worktree.c:580
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr ""
 "--[no-]track ne peut être utilisé qu'à la création d'une nouvelle branche"
 
-#: builtin/worktree.c:681
+#: builtin/worktree.c:680
 msgid "reason for locking"
 msgstr "raison du verrouillage"
 
-#: builtin/worktree.c:693 builtin/worktree.c:726 builtin/worktree.c:800
-#: builtin/worktree.c:927
+#: builtin/worktree.c:692 builtin/worktree.c:725 builtin/worktree.c:799
+#: builtin/worktree.c:926
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "'%s' n'est pas une copie de travail"
 
-#: builtin/worktree.c:695 builtin/worktree.c:728
+#: builtin/worktree.c:694 builtin/worktree.c:727
 msgid "The main working tree cannot be locked or unlocked"
 msgstr ""
 "La copie de travail principale ne peut pas être verrouillée ou déverrouillée"
 
-#: builtin/worktree.c:700
+#: builtin/worktree.c:699
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "'%s' est déjà verrouillé, car '%s'"
 
-#: builtin/worktree.c:702
+#: builtin/worktree.c:701
 #, c-format
 msgid "'%s' is already locked"
 msgstr "'%s' est déjà verrouillé"
 
-#: builtin/worktree.c:730
+#: builtin/worktree.c:729
 #, c-format
 msgid "'%s' is not locked"
 msgstr "'%s' n'est pas verrouillé"
 
-#: builtin/worktree.c:771
+#: builtin/worktree.c:770
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr ""
 "les arbres de travail contenant des sous-modules ne peuvent pas être "
 "déplacés ou supprimés"
 
-#: builtin/worktree.c:779
+#: builtin/worktree.c:778
 msgid "force move even if worktree is dirty or locked"
 msgstr ""
 "forcer le déplacement même si l'arbre de travail est sale ou verrouillé"
 
-#: builtin/worktree.c:802 builtin/worktree.c:929
+#: builtin/worktree.c:801 builtin/worktree.c:928
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "'%s' est un arbre de travail principal"
 
-#: builtin/worktree.c:807
+#: builtin/worktree.c:806
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "impossible de trouver le nom de la destination à partir de '%s'"
 
-#: builtin/worktree.c:813
+#: builtin/worktree.c:812
 #, c-format
 msgid "target '%s' already exists"
 msgstr "la cible '%s' existe déjà"
 
-#: builtin/worktree.c:821
+#: builtin/worktree.c:820
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -21185,7 +21273,7 @@
 "verrouillage : %s\n"
 "utilisez 'move -f -f' pour outrepasser ou déverrouiller avant"
 
-#: builtin/worktree.c:823
+#: builtin/worktree.c:822
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -21193,37 +21281,39 @@
 "impossible de déplacer un arbre de travail verrouillé;\n"
 "utilisez 'move -f -f' pour outrepasser ou déverrouiller avant"
 
-#: builtin/worktree.c:826
+#: builtin/worktree.c:825
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "la validation a échoué, impossible de déplacer l'arbre de travail : %s"
 
-#: builtin/worktree.c:831
+#: builtin/worktree.c:830
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "échec au déplacement de '%s' vers '%s'"
 
-#: builtin/worktree.c:879
+#: builtin/worktree.c:878
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "échec du lancement de 'git status' sur '%s'"
 
-#: builtin/worktree.c:883
+#: builtin/worktree.c:882
 #, c-format
-msgid "'%s' is dirty, use --force to delete it"
-msgstr "'%s' est sale, utilisez --force pour le supprimer"
+msgid "'%s' contains modified or untracked files, use --force to delete it"
+msgstr ""
+"'%s' contient des fichiers modifiés ou non-suivis, utilisez --force pour le "
+"supprimer"
 
-#: builtin/worktree.c:888
+#: builtin/worktree.c:887
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "impossible de lancer 'git status' sur '%s', code %d"
 
-#: builtin/worktree.c:911
+#: builtin/worktree.c:910
 msgid "force removal even if worktree is dirty or locked"
 msgstr ""
 "forcer la suppression même si l'arbre de travail est sale ou verrouillé"
 
-#: builtin/worktree.c:934
+#: builtin/worktree.c:933
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -21233,7 +21323,7 @@
 "verrouillage : %s\n"
 "utilisez 'move -f -f' pour outrepasser ou déverrouiller avant"
 
-#: builtin/worktree.c:936
+#: builtin/worktree.c:935
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -21241,7 +21331,7 @@
 "impossible de supprimer un arbre de travail verrouillé;\n"
 "utilisez 'move -f -f' pour outrepasser ou déverrouiller avant"
 
-#: builtin/worktree.c:939
+#: builtin/worktree.c:938
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr ""
@@ -21263,6 +21353,16 @@
 msgid "only useful for debugging"
 msgstr "seulement utile pour le débogage"
 
+#: fast-import.c:3118
+#, c-format
+msgid "Expected 'mark' command, got %s"
+msgstr "commande 'mark' attendue, %s trouvé"
+
+#: fast-import.c:3123
+#, c-format
+msgid "Expected 'to' command, got %s"
+msgstr "commande 'to' attendue, %s trouvé"
+
 #: credential-cache--daemon.c:223
 #, c-format
 msgid ""
@@ -21375,39 +21475,39 @@
 "l'alias '%s' modifie les variables d'environnement.\n"
 "Vous pouvez utiliser '!git' dans l'alias pour le faire"
 
-#: git.c:377
+#: git.c:376
 #, c-format
 msgid "empty alias for %s"
 msgstr "alias vide pour %s"
 
-#: git.c:380
+#: git.c:379
 #, c-format
 msgid "recursive alias: %s"
 msgstr "alias recursif : %s"
 
-#: git.c:460
+#: git.c:459
 msgid "write failure on standard output"
 msgstr "échec d'écriture sur la sortie standard"
 
-#: git.c:462
+#: git.c:461
 msgid "unknown write failure on standard output"
 msgstr "échec inconnu d'écriture sur la sortie standard"
 
-#: git.c:464
+#: git.c:463
 msgid "close failed on standard output"
 msgstr "échec de fermeture de la sortie standard"
 
-#: git.c:793
+#: git.c:792
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr "boucle d'alias détectée : l'expansion de '%s' ne finit jamais : %s"
 
-#: git.c:843
+#: git.c:842
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "impossible d'utiliser %s comme une fonction intégrée"
 
-#: git.c:856
+#: git.c:855
 #, c-format
 msgid ""
 "usage: %s\n"
@@ -21416,13 +21516,13 @@
 "usage : %s\n"
 "\n"
 
-#: git.c:876
+#: git.c:875
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr ""
 "l'expansion de l'alias '%s' a échoué : '%s' n'est pas une commande git\n"
 
-#: git.c:888
+#: git.c:887
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr "échec au lancement de la commande '%s' : %s\n"
@@ -21441,32 +21541,32 @@
 msgid "Public key pinning not supported with cURL < 7.44.0"
 msgstr "L'épinglage de clé publique n'est pas supporté avec cuRL < 7.44.0"
 
-#: http.c:876
+#: http.c:878
 msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
 msgstr "CURLSSLOPT_NO_REMOVE n'est pas supporté avec cuRL < 7.44.0"
 
-#: http.c:949
+#: http.c:951
 msgid "Protocol restrictions not supported with cURL < 7.19.4"
 msgstr "Les restrictions de protocole ne sont pas supportés avec cuRL < 7.19.4"
 
-#: http.c:1085
+#: http.c:1088
 #, c-format
 msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
 msgstr "Dorsale SSL '%s' non supportée. Dorsales SSL supportées :"
 
-#: http.c:1092
+#: http.c:1095
 #, c-format
 msgid "Could not set SSL backend to '%s': cURL was built without SSL backends"
 msgstr ""
 "Impossible de régler la dorsale SSL à '%s' : cURL a été construit sans "
 "dorsale SSL"
 
-#: http.c:1096
+#: http.c:1099
 #, c-format
 msgid "Could not set SSL backend to '%s': already set"
 msgstr "Impossible de spécifier le dorsal SSL à '%s' : déjà spécifié"
 
-#: http.c:1965
+#: http.c:1968
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -21477,130 +21577,130 @@
 "      demandé : %s\n"
 "  redirection : %s"
 
-#: remote-curl.c:157
+#: remote-curl.c:166
 #, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr "citation invalide dans la valeur push-option : '%s'"
 
-#: remote-curl.c:254
+#: remote-curl.c:263
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr "%sinfo/refs n'est pas valide : est-ce bien un dépôt git ?"
 
-#: remote-curl.c:355
+#: remote-curl.c:364
 msgid "invalid server response; expected service, got flush packet"
 msgstr "réponse du serveur invalide ; service attendu, paquet de vidage reçu"
 
-#: remote-curl.c:386
+#: remote-curl.c:395
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr "réponse du serveur invalide ; '%s' reçu"
 
-#: remote-curl.c:446
+#: remote-curl.c:455
 #, c-format
 msgid "repository '%s' not found"
 msgstr "dépôt '%s' non trouvé"
 
-#: remote-curl.c:450
+#: remote-curl.c:459
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr "Échec d'authentification pour '%s'"
 
-#: remote-curl.c:454
+#: remote-curl.c:463
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "impossible d'accéder à '%s' : %s"
 
-#: remote-curl.c:460
+#: remote-curl.c:469
 #, c-format
 msgid "redirecting to %s"
 msgstr "redirection vers %s"
 
-#: remote-curl.c:584
+#: remote-curl.c:593
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr "ne devrait pas recevoir OEF quand on n'est pas gentil sur EOF"
 
-#: remote-curl.c:664
+#: remote-curl.c:673
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr ""
 "impossible de rembobiner le données post rpc - essayer d'augmenter http."
 "postBuffer"
 
-#: remote-curl.c:724
+#: remote-curl.c:733
 #, c-format
 msgid "RPC failed; %s"
 msgstr "échec RPC ; %s"
 
-#: remote-curl.c:764
+#: remote-curl.c:773
 msgid "cannot handle pushes this big"
 msgstr "impossible de gérer des poussées aussi grosses"
 
-#: remote-curl.c:879
+#: remote-curl.c:888
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr "impossible de compresser la requête ; erreur de compression zlib %d"
 
-#: remote-curl.c:883
+#: remote-curl.c:892
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr "impossible de compresser la requête ; erreur de fin zlib %d"
 
-#: remote-curl.c:1014
+#: remote-curl.c:1023
 msgid "dumb http transport does not support shallow capabilities"
 msgstr "le protocole http idiot ne supporte la capacité superficielle"
 
-#: remote-curl.c:1028
+#: remote-curl.c:1037
 msgid "fetch failed."
 msgstr "échec du récupération."
 
-#: remote-curl.c:1076
+#: remote-curl.c:1085
 msgid "cannot fetch by sha1 over smart http"
 msgstr "impossible de récupérer par sha1 sur http intelligent"
 
-#: remote-curl.c:1120 remote-curl.c:1126
+#: remote-curl.c:1129 remote-curl.c:1135
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr "erreur de protocole : sha/ref attendu, '%s' trouvé"
 
-#: remote-curl.c:1138 remote-curl.c:1252
+#: remote-curl.c:1147 remote-curl.c:1261
 #, c-format
 msgid "http transport does not support %s"
 msgstr "le transport http ne supporte pas %s"
 
-#: remote-curl.c:1174
+#: remote-curl.c:1183
 msgid "git-http-push failed"
 msgstr "échec de git-http-push"
 
-#: remote-curl.c:1360
+#: remote-curl.c:1367
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr "remote-curl: usage: git remote-curl <distant> [<url>]"
 
-#: remote-curl.c:1392
+#: remote-curl.c:1399
 msgid "remote-curl: error reading command stream from git"
 msgstr "remote-curl : erreur de lecture du flux de commande depuis git"
 
-#: remote-curl.c:1399
+#: remote-curl.c:1406
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr "remote-curl : récupération tentée sans dépôt local"
 
-#: remote-curl.c:1439
+#: remote-curl.c:1446
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr "remote-curl : commande inconnue '%s' depuis git"
 
-#: list-objects-filter-options.h:61
+#: list-objects-filter-options.h:85
 msgid "args"
 msgstr "args"
 
-#: list-objects-filter-options.h:62
+#: list-objects-filter-options.h:86
 msgid "object filtering"
 msgstr "filtrage d'objet"
 
-#: parse-options.h:170
+#: parse-options.h:179
 msgid "expiry-date"
 msgstr "date-d'expiration"
 
-#: parse-options.h:184
+#: parse-options.h:193
 msgid "no-op (backward compatibility)"
 msgstr "sans action (rétrocompatibilité)"
 
diff --git a/po/git.pot b/po/git.pot
index d799696..ff00bc2 100644
--- a/po/git.pot
+++ b/po/git.pot
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2019-08-10 20:12+0800\n"
+"POT-Creation-Date: 2019-10-28 13:19+0800\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -58,7 +58,7 @@
 msgid "Exiting because of an unresolved conflict."
 msgstr ""
 
-#: advice.c:193 builtin/merge.c:1327
+#: advice.c:193 builtin/merge.c:1332
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr ""
 
@@ -176,17 +176,7 @@
 msgid "inconsistent header lines %d and %d"
 msgstr ""
 
-#: apply.c:1460
-#, c-format
-msgid "recount: unexpected line: %.*s"
-msgstr ""
-
-#: apply.c:1529
-#, c-format
-msgid "patch fragment without header at line %d: %.*s"
-msgstr ""
-
-#: apply.c:1551
+#: apply.c:1372
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -197,527 +187,537 @@
 msgstr[0] ""
 msgstr[1] ""
 
-#: apply.c:1564
+#: apply.c:1385
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr ""
 
-#: apply.c:1752
+#: apply.c:1481
+#, c-format
+msgid "recount: unexpected line: %.*s"
+msgstr ""
+
+#: apply.c:1550
+#, c-format
+msgid "patch fragment without header at line %d: %.*s"
+msgstr ""
+
+#: apply.c:1753
 msgid "new file depends on old contents"
 msgstr ""
 
-#: apply.c:1754
+#: apply.c:1755
 msgid "deleted file still has contents"
 msgstr ""
 
-#: apply.c:1788
+#: apply.c:1789
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr ""
 
-#: apply.c:1825
+#: apply.c:1826
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr ""
 
-#: apply.c:1827
+#: apply.c:1828
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr ""
 
-#: apply.c:1830
+#: apply.c:1831
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr ""
 
-#: apply.c:1977
+#: apply.c:1978
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr ""
 
-#: apply.c:2014
+#: apply.c:2015
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr ""
 
-#: apply.c:2176
+#: apply.c:2177
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr ""
 
-#: apply.c:2262
+#: apply.c:2263
 #, c-format
 msgid "unable to read symlink %s"
 msgstr ""
 
-#: apply.c:2266
+#: apply.c:2267
 #, c-format
 msgid "unable to open or read %s"
 msgstr ""
 
-#: apply.c:2925
+#: apply.c:2926
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr ""
 
-#: apply.c:3046
+#: apply.c:3047
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] ""
 msgstr[1] ""
 
-#: apply.c:3058
+#: apply.c:3059
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr ""
 
-#: apply.c:3064
+#: apply.c:3065
 #, c-format
 msgid ""
 "while searching for:\n"
 "%.*s"
 msgstr ""
 
-#: apply.c:3086
+#: apply.c:3087
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr ""
 
-#: apply.c:3094
+#: apply.c:3095
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr ""
 
-#: apply.c:3141
+#: apply.c:3142
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr ""
 
-#: apply.c:3151
+#: apply.c:3152
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr ""
 
-#: apply.c:3159
+#: apply.c:3160
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr ""
 
-#: apply.c:3177
+#: apply.c:3178
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr ""
 
-#: apply.c:3190
+#: apply.c:3191
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr ""
 
-#: apply.c:3196
+#: apply.c:3197
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
 
-#: apply.c:3217
+#: apply.c:3218
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr ""
 
-#: apply.c:3340
+#: apply.c:3341
 #, c-format
 msgid "cannot checkout %s"
 msgstr ""
 
-#: apply.c:3392 apply.c:3403 apply.c:3449 midx.c:62 setup.c:279
+#: apply.c:3393 apply.c:3404 apply.c:3450 midx.c:61 setup.c:280
 #, c-format
 msgid "failed to read %s"
 msgstr ""
 
-#: apply.c:3400
+#: apply.c:3401
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr ""
 
-#: apply.c:3429 apply.c:3672
+#: apply.c:3430 apply.c:3673
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr ""
 
-#: apply.c:3515 apply.c:3687
+#: apply.c:3516 apply.c:3688
 #, c-format
 msgid "%s: does not exist in index"
 msgstr ""
 
-#: apply.c:3524 apply.c:3695
+#: apply.c:3525 apply.c:3696
 #, c-format
 msgid "%s: does not match index"
 msgstr ""
 
-#: apply.c:3559
+#: apply.c:3560
 msgid "repository lacks the necessary blob to fall back on 3-way merge."
 msgstr ""
 
-#: apply.c:3562
+#: apply.c:3563
 #, c-format
 msgid "Falling back to three-way merge...\n"
 msgstr ""
 
-#: apply.c:3578 apply.c:3582
+#: apply.c:3579 apply.c:3583
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr ""
 
-#: apply.c:3594
+#: apply.c:3595
 #, c-format
 msgid "Failed to fall back on three-way merge...\n"
 msgstr ""
 
-#: apply.c:3608
+#: apply.c:3609
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr ""
 
-#: apply.c:3613
+#: apply.c:3614
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr ""
 
-#: apply.c:3639
+#: apply.c:3640
 msgid "removal patch leaves file contents"
 msgstr ""
 
-#: apply.c:3712
+#: apply.c:3713
 #, c-format
 msgid "%s: wrong type"
 msgstr ""
 
-#: apply.c:3714
+#: apply.c:3715
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr ""
 
-#: apply.c:3865 apply.c:3867 read-cache.c:830 read-cache.c:856
+#: apply.c:3866 apply.c:3868 read-cache.c:830 read-cache.c:856
 #: read-cache.c:1309
 #, c-format
 msgid "invalid path '%s'"
 msgstr ""
 
-#: apply.c:3923
+#: apply.c:3924
 #, c-format
 msgid "%s: already exists in index"
 msgstr ""
 
-#: apply.c:3926
+#: apply.c:3927
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr ""
 
-#: apply.c:3946
+#: apply.c:3947
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr ""
 
-#: apply.c:3951
+#: apply.c:3952
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr ""
 
-#: apply.c:3971
+#: apply.c:3972
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr ""
 
-#: apply.c:3975
+#: apply.c:3976
 #, c-format
 msgid "%s: patch does not apply"
 msgstr ""
 
-#: apply.c:3990
+#: apply.c:3991
 #, c-format
 msgid "Checking patch %s..."
 msgstr ""
 
-#: apply.c:4082
+#: apply.c:4083
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr ""
 
-#: apply.c:4089
+#: apply.c:4090
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr ""
 
-#: apply.c:4092
+#: apply.c:4093
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr ""
 
-#: apply.c:4097 builtin/checkout.c:278 builtin/reset.c:143
+#: apply.c:4098 builtin/checkout.c:279 builtin/reset.c:143
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr ""
 
-#: apply.c:4101
+#: apply.c:4102
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr ""
 
-#: apply.c:4111
+#: apply.c:4112
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr ""
 
-#: apply.c:4249
+#: apply.c:4250
 #, c-format
 msgid "unable to remove %s from index"
 msgstr ""
 
-#: apply.c:4283
+#: apply.c:4284
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr ""
 
-#: apply.c:4289
+#: apply.c:4290
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr ""
 
-#: apply.c:4297
+#: apply.c:4298
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr ""
 
-#: apply.c:4303 apply.c:4448
+#: apply.c:4304 apply.c:4449
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr ""
 
-#: apply.c:4346
+#: apply.c:4347
 #, c-format
 msgid "failed to write to '%s'"
 msgstr ""
 
-#: apply.c:4350
+#: apply.c:4351
 #, c-format
 msgid "closing file '%s'"
 msgstr ""
 
-#: apply.c:4420
+#: apply.c:4421
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr ""
 
-#: apply.c:4518
+#: apply.c:4519
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr ""
 
-#: apply.c:4526
+#: apply.c:4527
 msgid "internal error"
 msgstr ""
 
-#: apply.c:4529
+#: apply.c:4530
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] ""
 msgstr[1] ""
 
-#: apply.c:4540
+#: apply.c:4541
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr ""
 
-#: apply.c:4548 builtin/fetch.c:878 builtin/fetch.c:1168
+#: apply.c:4549 builtin/fetch.c:898 builtin/fetch.c:1194
 #, c-format
 msgid "cannot open %s"
 msgstr ""
 
-#: apply.c:4562
+#: apply.c:4563
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr ""
 
-#: apply.c:4566
+#: apply.c:4567
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr ""
 
-#: apply.c:4676
+#: apply.c:4686
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr ""
 
-#: apply.c:4684
+#: apply.c:4694
 msgid "unrecognized input"
 msgstr ""
 
-#: apply.c:4704
+#: apply.c:4714
 msgid "unable to read index file"
 msgstr ""
 
-#: apply.c:4859
+#: apply.c:4871
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr ""
 
-#: apply.c:4886
+#: apply.c:4898
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] ""
 msgstr[1] ""
 
-#: apply.c:4892 apply.c:4907
+#: apply.c:4904 apply.c:4919
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] ""
 msgstr[1] ""
 
-#: apply.c:4900
+#: apply.c:4912
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] ""
 msgstr[1] ""
 
-#: apply.c:4916 builtin/add.c:540 builtin/mv.c:301 builtin/rm.c:390
+#: apply.c:4928 builtin/add.c:540 builtin/mv.c:301 builtin/rm.c:390
 msgid "Unable to write new index file"
 msgstr ""
 
-#: apply.c:4943 apply.c:4946 builtin/am.c:2208 builtin/am.c:2211
-#: builtin/clone.c:123 builtin/fetch.c:128 builtin/merge.c:273
-#: builtin/pull.c:208 builtin/submodule--helper.c:407
+#: apply.c:4955 apply.c:4958 builtin/am.c:2197 builtin/am.c:2200
+#: builtin/clone.c:122 builtin/fetch.c:143 builtin/merge.c:273
+#: builtin/pull.c:209 builtin/submodule--helper.c:407
 #: builtin/submodule--helper.c:1367 builtin/submodule--helper.c:1370
 #: builtin/submodule--helper.c:1850 builtin/submodule--helper.c:1853
 #: builtin/submodule--helper.c:2092 git-add--interactive.perl:211
 msgid "path"
 msgstr ""
 
-#: apply.c:4944
+#: apply.c:4956
 msgid "don't apply changes matching the given path"
 msgstr ""
 
-#: apply.c:4947
+#: apply.c:4959
 msgid "apply changes matching the given path"
 msgstr ""
 
-#: apply.c:4949 builtin/am.c:2217
+#: apply.c:4961 builtin/am.c:2206
 msgid "num"
 msgstr ""
 
-#: apply.c:4950
+#: apply.c:4962
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr ""
 
-#: apply.c:4953
+#: apply.c:4965
 msgid "ignore additions made by the patch"
 msgstr ""
 
-#: apply.c:4955
+#: apply.c:4967
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr ""
 
-#: apply.c:4959
+#: apply.c:4971
 msgid "show number of added and deleted lines in decimal notation"
 msgstr ""
 
-#: apply.c:4961
+#: apply.c:4973
 msgid "instead of applying the patch, output a summary for the input"
 msgstr ""
 
-#: apply.c:4963
+#: apply.c:4975
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr ""
 
-#: apply.c:4965
+#: apply.c:4977
 msgid "make sure the patch is applicable to the current index"
 msgstr ""
 
-#: apply.c:4967
+#: apply.c:4979
 msgid "mark new files with `git add --intent-to-add`"
 msgstr ""
 
-#: apply.c:4969
+#: apply.c:4981
 msgid "apply a patch without touching the working tree"
 msgstr ""
 
-#: apply.c:4971
+#: apply.c:4983
 msgid "accept a patch that touches outside the working area"
 msgstr ""
 
-#: apply.c:4974
+#: apply.c:4986
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr ""
 
-#: apply.c:4976
+#: apply.c:4988
 msgid "attempt three-way merge if a patch does not apply"
 msgstr ""
 
-#: apply.c:4978
+#: apply.c:4990
 msgid "build a temporary index based on embedded index information"
 msgstr ""
 
-#: apply.c:4981 builtin/checkout-index.c:173 builtin/ls-files.c:524
+#: apply.c:4993 builtin/checkout-index.c:173 builtin/ls-files.c:524
 msgid "paths are separated with NUL character"
 msgstr ""
 
-#: apply.c:4983
+#: apply.c:4995
 msgid "ensure at least <n> lines of context match"
 msgstr ""
 
-#: apply.c:4984 builtin/am.c:2196 builtin/interpret-trailers.c:98
+#: apply.c:4996 builtin/am.c:2185 builtin/interpret-trailers.c:98
 #: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3330 builtin/rebase.c:1421
+#: builtin/pack-objects.c:3310 builtin/rebase.c:1445
 msgid "action"
 msgstr ""
 
-#: apply.c:4985
+#: apply.c:4997
 msgid "detect new or modified lines that have whitespace errors"
 msgstr ""
 
-#: apply.c:4988 apply.c:4991
+#: apply.c:5000 apply.c:5003
 msgid "ignore changes in whitespace when finding context"
 msgstr ""
 
-#: apply.c:4994
+#: apply.c:5006
 msgid "apply the patch in reverse"
 msgstr ""
 
-#: apply.c:4996
+#: apply.c:5008
 msgid "don't expect at least one line of context"
 msgstr ""
 
-#: apply.c:4998
+#: apply.c:5010
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr ""
 
-#: apply.c:5000
+#: apply.c:5012
 msgid "allow overlapping hunks"
 msgstr ""
 
-#: apply.c:5001 builtin/add.c:291 builtin/check-ignore.c:22
+#: apply.c:5013 builtin/add.c:291 builtin/check-ignore.c:22
 #: builtin/commit.c:1337 builtin/count-objects.c:98 builtin/fsck.c:786
-#: builtin/log.c:2068 builtin/mv.c:123 builtin/read-tree.c:128
+#: builtin/log.c:2085 builtin/mv.c:123 builtin/read-tree.c:128
 msgid "be verbose"
 msgstr ""
 
-#: apply.c:5003
+#: apply.c:5015
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr ""
 
-#: apply.c:5006
+#: apply.c:5018
 msgid "do not trust the line counts in the hunk headers"
 msgstr ""
 
-#: apply.c:5008 builtin/am.c:2205
+#: apply.c:5020 builtin/am.c:2194
 msgid "root"
 msgstr ""
 
-#: apply.c:5009
+#: apply.c:5021
 msgid "prepend <root> to all filenames"
 msgstr ""
 
@@ -770,7 +770,7 @@
 msgid "archive format"
 msgstr ""
 
-#: archive.c:458 builtin/log.c:1580
+#: archive.c:458 builtin/log.c:1581
 msgid "prefix"
 msgstr ""
 
@@ -778,11 +778,12 @@
 msgid "prepend prefix to each pathname in the archive"
 msgstr ""
 
-#: archive.c:460 builtin/blame.c:862 builtin/blame.c:874 builtin/blame.c:875
-#: builtin/commit-tree.c:117 builtin/config.c:129 builtin/fast-export.c:1134
-#: builtin/fast-export.c:1136 builtin/grep.c:897 builtin/hash-object.c:105
-#: builtin/ls-files.c:560 builtin/ls-files.c:563 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:177
+#: archive.c:460 builtin/blame.c:861 builtin/blame.c:873 builtin/blame.c:874
+#: builtin/commit-tree.c:117 builtin/config.c:129 builtin/fast-export.c:1162
+#: builtin/fast-export.c:1164 builtin/fast-export.c:1168 builtin/grep.c:899
+#: builtin/hash-object.c:105 builtin/ls-files.c:560 builtin/ls-files.c:563
+#: builtin/notes.c:412 builtin/notes.c:578 builtin/read-tree.c:123
+#: parse-options.h:186
 msgid "file"
 msgstr ""
 
@@ -814,7 +815,7 @@
 msgid "list supported archive formats"
 msgstr ""
 
-#: archive.c:479 builtin/archive.c:91 builtin/clone.c:113 builtin/clone.c:116
+#: archive.c:479 builtin/archive.c:91 builtin/clone.c:112 builtin/clone.c:115
 #: builtin/submodule--helper.c:1379 builtin/submodule--helper.c:1859
 msgid "repo"
 msgstr ""
@@ -823,7 +824,7 @@
 msgid "retrieve the archive from remote repository <repo>"
 msgstr ""
 
-#: archive.c:481 builtin/archive.c:93 builtin/difftool.c:707
+#: archive.c:481 builtin/archive.c:93 builtin/difftool.c:715
 #: builtin/notes.c:498
 msgid "command"
 msgstr ""
@@ -859,26 +860,26 @@
 msgid "cannot stream blob %s"
 msgstr ""
 
-#: archive-tar.c:260 archive-zip.c:363
+#: archive-tar.c:266 archive-zip.c:363
 #, c-format
 msgid "unsupported file mode: 0%o (SHA1: %s)"
 msgstr ""
 
-#: archive-tar.c:287 archive-zip.c:353
+#: archive-tar.c:293 archive-zip.c:353
 #, c-format
 msgid "cannot read %s"
 msgstr ""
 
-#: archive-tar.c:459
+#: archive-tar.c:465
 #, c-format
 msgid "unable to start '%s' filter"
 msgstr ""
 
-#: archive-tar.c:462
+#: archive-tar.c:468
 msgid "unable to redirect descriptor"
 msgstr ""
 
-#: archive-tar.c:469
+#: archive-tar.c:475
 #, c-format
 msgid "'%s' filter reported error"
 msgstr ""
@@ -903,17 +904,17 @@
 msgid "timestamp too large for this system: %<PRIuMAX>"
 msgstr ""
 
-#: attr.c:211
+#: attr.c:213
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr ""
 
-#: attr.c:368
+#: attr.c:370
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr ""
 
-#: attr.c:408
+#: attr.c:410
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1024,37 +1025,37 @@
 msgstr[0] ""
 msgstr[1] ""
 
-#: blame.c:2697
+#: blame.c:2700
 msgid "--contents and --reverse do not blend well."
 msgstr ""
 
-#: blame.c:2711
+#: blame.c:2714
 msgid "cannot use --contents with final commit object name"
 msgstr ""
 
-#: blame.c:2732
+#: blame.c:2735
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 
-#: blame.c:2741 bundle.c:167 ref-filter.c:2196 remote.c:1938 sequencer.c:2033
-#: sequencer.c:4348 builtin/commit.c:1020 builtin/log.c:387 builtin/log.c:963
-#: builtin/log.c:1451 builtin/log.c:1827 builtin/log.c:2117 builtin/merge.c:411
-#: builtin/pack-objects.c:3148 builtin/pack-objects.c:3163
+#: blame.c:2744 bundle.c:167 ref-filter.c:2203 remote.c:1941 sequencer.c:1971
+#: sequencer.c:4305 builtin/commit.c:1020 builtin/log.c:387 builtin/log.c:964
+#: builtin/log.c:1452 builtin/log.c:1844 builtin/log.c:2134 builtin/merge.c:411
+#: builtin/pack-objects.c:3128 builtin/pack-objects.c:3143
 #: builtin/shortlog.c:192
 msgid "revision walk setup failed"
 msgstr ""
 
-#: blame.c:2759
+#: blame.c:2762
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 
-#: blame.c:2770
+#: blame.c:2773
 #, c-format
 msgid "no such path %s in %s"
 msgstr ""
 
-#: blame.c:2781
+#: blame.c:2784
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr ""
@@ -1193,7 +1194,7 @@
 msgid "unrecognized header: %s%s (%d)"
 msgstr ""
 
-#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2283 sequencer.c:3024
+#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2221 sequencer.c:2962
 #: builtin/commit.c:791
 #, c-format
 msgid "could not open '%s'"
@@ -1246,7 +1247,7 @@
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr ""
 
-#: bundle.c:460 builtin/log.c:202 builtin/log.c:1732 builtin/shortlog.c:306
+#: bundle.c:460 builtin/log.c:202 builtin/log.c:1733 builtin/shortlog.c:306
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr ""
@@ -1269,8 +1270,8 @@
 msgid "invalid color value: %.*s"
 msgstr ""
 
-#: commit.c:50 sequencer.c:2727 builtin/am.c:355 builtin/am.c:399
-#: builtin/am.c:1378 builtin/am.c:2020 builtin/replace.c:455
+#: commit.c:50 sequencer.c:2665 builtin/am.c:354 builtin/am.c:398
+#: builtin/am.c:1366 builtin/am.c:2009 builtin/replace.c:456
 #, c-format
 msgid "could not parse %s"
 msgstr ""
@@ -1292,27 +1293,27 @@
 "\"git config advice.graftFileDeprecated false\""
 msgstr ""
 
-#: commit.c:1127
+#: commit.c:1128
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr ""
 
-#: commit.c:1130
+#: commit.c:1131
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr ""
 
-#: commit.c:1133
+#: commit.c:1134
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr ""
 
-#: commit.c:1136
+#: commit.c:1137
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr ""
 
-#: commit.c:1390
+#: commit.c:1391
 msgid ""
 "Warning: commit message did not conform to UTF-8.\n"
 "You may want to amend it after fixing the message, or set the config\n"
@@ -1369,193 +1370,208 @@
 msgid "unable to find all commit-graph files"
 msgstr ""
 
-#: commit-graph.c:554 commit-graph.c:614
+#: commit-graph.c:561 commit-graph.c:621
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr ""
 
-#: commit-graph.c:575
+#: commit-graph.c:582
 #, c-format
 msgid "could not find commit %s"
 msgstr ""
 
-#: commit-graph.c:1002 builtin/pack-objects.c:2657
+#: commit-graph.c:855 builtin/am.c:1287
+#, c-format
+msgid "unable to parse commit %s"
+msgstr ""
+
+#: commit-graph.c:859
+#, c-format
+msgid "unable to get tree for %s"
+msgstr ""
+
+#: commit-graph.c:1017 builtin/pack-objects.c:2641
 #, c-format
 msgid "unable to get type of object %s"
 msgstr ""
 
-#: commit-graph.c:1034
+#: commit-graph.c:1049
 msgid "Loading known commits in commit graph"
 msgstr ""
 
-#: commit-graph.c:1051
+#: commit-graph.c:1066
 msgid "Expanding reachable commits in commit graph"
 msgstr ""
 
-#: commit-graph.c:1070
+#: commit-graph.c:1085
 msgid "Clearing commit marks in commit graph"
 msgstr ""
 
-#: commit-graph.c:1089
+#: commit-graph.c:1104
 msgid "Computing commit graph generation numbers"
 msgstr ""
 
-#: commit-graph.c:1163
+#: commit-graph.c:1179
 #, c-format
 msgid "Finding commits for commit graph in %d pack"
 msgid_plural "Finding commits for commit graph in %d packs"
 msgstr[0] ""
 msgstr[1] ""
 
-#: commit-graph.c:1176
+#: commit-graph.c:1192
 #, c-format
 msgid "error adding pack %s"
 msgstr ""
 
-#: commit-graph.c:1180
+#: commit-graph.c:1196
 #, c-format
 msgid "error opening index for %s"
 msgstr ""
 
-#: commit-graph.c:1204
+#: commit-graph.c:1220
 #, c-format
 msgid "Finding commits for commit graph from %d ref"
 msgid_plural "Finding commits for commit graph from %d refs"
 msgstr[0] ""
 msgstr[1] ""
 
-#: commit-graph.c:1238
+#: commit-graph.c:1240
+#, c-format
+msgid "invalid commit object id: %s"
+msgstr ""
+
+#: commit-graph.c:1255
 msgid "Finding commits for commit graph among packed objects"
 msgstr ""
 
-#: commit-graph.c:1253
+#: commit-graph.c:1270
 msgid "Counting distinct commits in commit graph"
 msgstr ""
 
-#: commit-graph.c:1284
+#: commit-graph.c:1300
 msgid "Finding extra edges in commit graph"
 msgstr ""
 
-#: commit-graph.c:1332
+#: commit-graph.c:1346
 msgid "failed to write correct number of base graph ids"
 msgstr ""
 
-#: commit-graph.c:1365 midx.c:811
+#: commit-graph.c:1379 midx.c:810
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr ""
 
-#: commit-graph.c:1377 builtin/index-pack.c:306 builtin/repack.c:240
+#: commit-graph.c:1391 builtin/index-pack.c:306 builtin/repack.c:241
 #, c-format
 msgid "unable to create '%s'"
 msgstr ""
 
-#: commit-graph.c:1437
+#: commit-graph.c:1451
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] ""
 msgstr[1] ""
 
-#: commit-graph.c:1478
+#: commit-graph.c:1492
 msgid "unable to open commit-graph chain file"
 msgstr ""
 
-#: commit-graph.c:1490
+#: commit-graph.c:1504
 msgid "failed to rename base commit-graph file"
 msgstr ""
 
-#: commit-graph.c:1510
+#: commit-graph.c:1524
 msgid "failed to rename temporary commit-graph file"
 msgstr ""
 
-#: commit-graph.c:1621
+#: commit-graph.c:1635
 msgid "Scanning merged commits"
 msgstr ""
 
-#: commit-graph.c:1632
+#: commit-graph.c:1646
 #, c-format
 msgid "unexpected duplicate commit id %s"
 msgstr ""
 
-#: commit-graph.c:1657
+#: commit-graph.c:1670
 msgid "Merging commit-graph"
 msgstr ""
 
-#: commit-graph.c:1844
+#: commit-graph.c:1860
 #, c-format
 msgid "the commit graph format cannot write %d commits"
 msgstr ""
 
-#: commit-graph.c:1855
+#: commit-graph.c:1871
 msgid "too many commits to write graph"
 msgstr ""
 
-#: commit-graph.c:1945
+#: commit-graph.c:1961
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 
-#: commit-graph.c:1955
+#: commit-graph.c:1971
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr ""
 
-#: commit-graph.c:1965 commit-graph.c:1980
+#: commit-graph.c:1981 commit-graph.c:1996
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr ""
 
-#: commit-graph.c:1972
+#: commit-graph.c:1988
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr ""
 
-#: commit-graph.c:1989
+#: commit-graph.c:2006
 msgid "Verifying commits in commit graph"
 msgstr ""
 
-#: commit-graph.c:2002
+#: commit-graph.c:2020
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 
-#: commit-graph.c:2009
+#: commit-graph.c:2027
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr ""
 
-#: commit-graph.c:2019
+#: commit-graph.c:2037
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr ""
 
-#: commit-graph.c:2028
+#: commit-graph.c:2046
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr ""
 
-#: commit-graph.c:2041
+#: commit-graph.c:2059
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr ""
 
-#: commit-graph.c:2046
+#: commit-graph.c:2064
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
 msgstr ""
 
-#: commit-graph.c:2050
+#: commit-graph.c:2068
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
 msgstr ""
 
-#: commit-graph.c:2065
+#: commit-graph.c:2083
 #, c-format
 msgid "commit-graph generation for commit %s is %u != %u"
 msgstr ""
 
-#: commit-graph.c:2071
+#: commit-graph.c:2089
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
@@ -1597,7 +1613,7 @@
 msgid "key does not contain variable name: %s"
 msgstr ""
 
-#: config.c:406 sequencer.c:2463
+#: config.c:406 sequencer.c:2401
 #, c-format
 msgid "invalid key: %s"
 msgstr ""
@@ -1719,149 +1735,144 @@
 msgid "invalid mode for object creation: %s"
 msgstr ""
 
-#: config.c:1430
+#: config.c:1425
 #, c-format
 msgid "malformed value for %s"
 msgstr ""
 
-#: config.c:1456
+#: config.c:1451
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr ""
 
-#: config.c:1457
+#: config.c:1452
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr ""
 
-#: config.c:1518 builtin/pack-objects.c:3410
+#: config.c:1513 builtin/pack-objects.c:3394
 #, c-format
 msgid "bad pack compression level %d"
 msgstr ""
 
-#: config.c:1639
+#: config.c:1634
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr ""
 
-#: config.c:1642
+#: config.c:1637
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr ""
 
-#: config.c:1659
+#: config.c:1654
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr ""
 
-#: config.c:1689
+#: config.c:1684
 #, c-format
 msgid "failed to parse %s"
 msgstr ""
 
-#: config.c:1745
+#: config.c:1740
 msgid "unable to parse command-line config"
 msgstr ""
 
-#: config.c:2094
+#: config.c:2091
 msgid "unknown error occurred while reading the configuration files"
 msgstr ""
 
-#: config.c:2264
+#: config.c:2261
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr ""
 
-#: config.c:2307
-#, c-format
-msgid "unknown core.untrackedCache value '%s'; using 'keep' default value"
-msgstr ""
-
-#: config.c:2333
+#: config.c:2306
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr ""
 
-#: config.c:2379
+#: config.c:2352
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr ""
 
-#: config.c:2381
+#: config.c:2354
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr ""
 
-#: config.c:2462
+#: config.c:2435
 #, c-format
 msgid "invalid section name '%s'"
 msgstr ""
 
-#: config.c:2494
+#: config.c:2467
 #, c-format
 msgid "%s has multiple values"
 msgstr ""
 
-#: config.c:2523
+#: config.c:2496
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr ""
 
-#: config.c:2775 config.c:3099
+#: config.c:2748 config.c:3072
 #, c-format
 msgid "could not lock config file %s"
 msgstr ""
 
-#: config.c:2786
+#: config.c:2759
 #, c-format
 msgid "opening %s"
 msgstr ""
 
-#: config.c:2821 builtin/config.c:328
+#: config.c:2794 builtin/config.c:328
 #, c-format
 msgid "invalid pattern: %s"
 msgstr ""
 
-#: config.c:2846
+#: config.c:2819
 #, c-format
 msgid "invalid config file %s"
 msgstr ""
 
-#: config.c:2859 config.c:3112
+#: config.c:2832 config.c:3085
 #, c-format
 msgid "fstat on %s failed"
 msgstr ""
 
-#: config.c:2870
+#: config.c:2843
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr ""
 
-#: config.c:2879 config.c:3117
+#: config.c:2852 config.c:3090
 #, c-format
 msgid "chmod on %s failed"
 msgstr ""
 
-#: config.c:2964 config.c:3214
+#: config.c:2937 config.c:3187
 #, c-format
 msgid "could not write config file %s"
 msgstr ""
 
-#: config.c:2998
+#: config.c:2971
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr ""
 
-#: config.c:3000 builtin/remote.c:782
+#: config.c:2973 builtin/remote.c:782
 #, c-format
 msgid "could not unset '%s'"
 msgstr ""
 
-#: config.c:3090
+#: config.c:3063
 #, c-format
 msgid "invalid section name: %s"
 msgstr ""
 
-#: config.c:3257
+#: config.c:3230
 #, c-format
 msgid "missing value for '%s'"
 msgstr ""
@@ -1977,7 +1988,7 @@
 msgid "unknown port %s"
 msgstr ""
 
-#: connect.c:845 connect.c:1171
+#: connect.c:845 connect.c:1175
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr ""
@@ -1992,211 +2003,211 @@
 msgid "cannot start proxy %s"
 msgstr ""
 
-#: connect.c:924
+#: connect.c:928
 msgid "no path specified; see 'git help pull' for valid url syntax"
 msgstr ""
 
-#: connect.c:1119
+#: connect.c:1123
 msgid "ssh variant 'simple' does not support -4"
 msgstr ""
 
-#: connect.c:1131
+#: connect.c:1135
 msgid "ssh variant 'simple' does not support -6"
 msgstr ""
 
-#: connect.c:1148
+#: connect.c:1152
 msgid "ssh variant 'simple' does not support setting port"
 msgstr ""
 
-#: connect.c:1260
+#: connect.c:1264
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr ""
 
-#: connect.c:1307
+#: connect.c:1311
 msgid "unable to fork"
 msgstr ""
 
-#: connected.c:86 builtin/fsck.c:221 builtin/prune.c:43
+#: connected.c:88 builtin/fsck.c:221 builtin/prune.c:43
 msgid "Checking connectivity"
 msgstr ""
 
-#: connected.c:98
+#: connected.c:100
 msgid "Could not run 'git rev-list'"
 msgstr ""
 
-#: connected.c:118
+#: connected.c:120
 msgid "failed write to rev-list"
 msgstr ""
 
-#: connected.c:125
+#: connected.c:127
 msgid "failed to close rev-list's stdin"
 msgstr ""
 
-#: convert.c:193
+#: convert.c:194
 #, c-format
 msgid "illegal crlf_action %d"
 msgstr ""
 
-#: convert.c:206
+#: convert.c:207
 #, c-format
 msgid "CRLF would be replaced by LF in %s"
 msgstr ""
 
-#: convert.c:208
+#: convert.c:209
 #, c-format
 msgid ""
 "CRLF will be replaced by LF in %s.\n"
 "The file will have its original line endings in your working directory"
 msgstr ""
 
-#: convert.c:216
+#: convert.c:217
 #, c-format
 msgid "LF would be replaced by CRLF in %s"
 msgstr ""
 
-#: convert.c:218
+#: convert.c:219
 #, c-format
 msgid ""
 "LF will be replaced by CRLF in %s.\n"
 "The file will have its original line endings in your working directory"
 msgstr ""
 
-#: convert.c:279
+#: convert.c:280
 #, c-format
 msgid "BOM is prohibited in '%s' if encoded as %s"
 msgstr ""
 
-#: convert.c:286
+#: convert.c:287
 #, c-format
 msgid ""
 "The file '%s' contains a byte order mark (BOM). Please use UTF-%s as working-"
 "tree-encoding."
 msgstr ""
 
-#: convert.c:304
+#: convert.c:305
 #, c-format
 msgid "BOM is required in '%s' if encoded as %s"
 msgstr ""
 
-#: convert.c:306
+#: convert.c:307
 #, c-format
 msgid ""
 "The file '%s' is missing a byte order mark (BOM). Please use UTF-%sBE or UTF-"
 "%sLE (depending on the byte order) as working-tree-encoding."
 msgstr ""
 
-#: convert.c:424 convert.c:495
+#: convert.c:425 convert.c:496
 #, c-format
 msgid "failed to encode '%s' from %s to %s"
 msgstr ""
 
-#: convert.c:467
+#: convert.c:468
 #, c-format
 msgid "encoding '%s' from %s to %s and back is not the same"
 msgstr ""
 
-#: convert.c:673
+#: convert.c:674
 #, c-format
 msgid "cannot fork to run external filter '%s'"
 msgstr ""
 
-#: convert.c:693
+#: convert.c:694
 #, c-format
 msgid "cannot feed the input to external filter '%s'"
 msgstr ""
 
-#: convert.c:700
+#: convert.c:701
 #, c-format
 msgid "external filter '%s' failed %d"
 msgstr ""
 
-#: convert.c:735 convert.c:738
+#: convert.c:736 convert.c:739
 #, c-format
 msgid "read from external filter '%s' failed"
 msgstr ""
 
-#: convert.c:741 convert.c:796
+#: convert.c:742 convert.c:797
 #, c-format
 msgid "external filter '%s' failed"
 msgstr ""
 
-#: convert.c:844
+#: convert.c:845
 msgid "unexpected filter type"
 msgstr ""
 
-#: convert.c:855
+#: convert.c:856
 msgid "path name too long for external filter"
 msgstr ""
 
-#: convert.c:929
+#: convert.c:930
 #, c-format
 msgid ""
 "external filter '%s' is not available anymore although not all paths have "
 "been filtered"
 msgstr ""
 
-#: convert.c:1228
+#: convert.c:1229
 msgid "true/false are no valid working-tree-encodings"
 msgstr ""
 
-#: convert.c:1398 convert.c:1432
+#: convert.c:1417 convert.c:1451
 #, c-format
 msgid "%s: clean filter '%s' failed"
 msgstr ""
 
-#: convert.c:1476
+#: convert.c:1495
 #, c-format
 msgid "%s: smudge filter %s failed"
 msgstr ""
 
-#: date.c:137
+#: date.c:138
 msgid "in the future"
 msgstr ""
 
-#: date.c:143
+#: date.c:144
 #, c-format
 msgid "%<PRIuMAX> second ago"
 msgid_plural "%<PRIuMAX> seconds ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: date.c:150
+#: date.c:151
 #, c-format
 msgid "%<PRIuMAX> minute ago"
 msgid_plural "%<PRIuMAX> minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: date.c:157
+#: date.c:158
 #, c-format
 msgid "%<PRIuMAX> hour ago"
 msgid_plural "%<PRIuMAX> hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: date.c:164
+#: date.c:165
 #, c-format
 msgid "%<PRIuMAX> day ago"
 msgid_plural "%<PRIuMAX> days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: date.c:170
+#: date.c:171
 #, c-format
 msgid "%<PRIuMAX> week ago"
 msgid_plural "%<PRIuMAX> weeks ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: date.c:177
+#: date.c:178
 #, c-format
 msgid "%<PRIuMAX> month ago"
 msgid_plural "%<PRIuMAX> months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: date.c:188
+#: date.c:189
 #, c-format
 msgid "%<PRIuMAX> year"
 msgid_plural "%<PRIuMAX> years"
@@ -2204,14 +2215,14 @@
 msgstr[1] ""
 
 #. TRANSLATORS: "%s" is "<n> years"
-#: date.c:191
+#: date.c:192
 #, c-format
 msgid "%s, %<PRIuMAX> month ago"
 msgid_plural "%s, %<PRIuMAX> months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: date.c:196 date.c:201
+#: date.c:197 date.c:202
 #, c-format
 msgid "%<PRIuMAX> year ago"
 msgid_plural "%<PRIuMAX> years ago"
@@ -2247,7 +2258,7 @@
 msgid "failed to read orderfile '%s'"
 msgstr ""
 
-#: diffcore-rename.c:544
+#: diffcore-rename.c:543
 msgid "Performing inexact rename detection"
 msgstr ""
 
@@ -2302,562 +2313,562 @@
 "%s"
 msgstr ""
 
-#: diff.c:4215
+#: diff.c:4218
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr ""
 
-#: diff.c:4560
+#: diff.c:4563
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr ""
 
-#: diff.c:4563
+#: diff.c:4566
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr ""
 
-#: diff.c:4641
+#: diff.c:4644
 msgid "--follow requires exactly one pathspec"
 msgstr ""
 
-#: diff.c:4689
+#: diff.c:4692
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr ""
 
-#: diff.c:4694 diff.c:4699 diff.c:4704 diff.c:4709 diff.c:5222
+#: diff.c:4697 diff.c:4702 diff.c:4707 diff.c:4712 diff.c:5225
 #: parse-options.c:199 parse-options.c:203
 #, c-format
 msgid "%s expects a numerical value"
 msgstr ""
 
-#: diff.c:4726
+#: diff.c:4729
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
 "%s"
 msgstr ""
 
-#: diff.c:4811
+#: diff.c:4814
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr ""
 
-#: diff.c:4835
+#: diff.c:4838
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr ""
 
-#: diff.c:4849
+#: diff.c:4852
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr ""
 
-#: diff.c:4899 diff.c:4905
+#: diff.c:4902 diff.c:4908
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr ""
 
-#: diff.c:4917
+#: diff.c:4920
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr ""
 
-#: diff.c:4938
+#: diff.c:4941
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr ""
 
-#: diff.c:4957
+#: diff.c:4960
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr ""
 
-#: diff.c:4997
+#: diff.c:5000
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
 msgstr ""
 
-#: diff.c:5033 diff.c:5053
+#: diff.c:5036 diff.c:5056
 #, c-format
 msgid "invalid argument to %s"
 msgstr ""
 
-#: diff.c:5191
+#: diff.c:5194
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr ""
 
-#: diff.c:5247
+#: diff.c:5250
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr ""
 
-#: diff.c:5270
+#: diff.c:5273
 msgid "Diff output format options"
 msgstr ""
 
-#: diff.c:5272 diff.c:5278
+#: diff.c:5275 diff.c:5281
 msgid "generate patch"
 msgstr ""
 
-#: diff.c:5275 builtin/log.c:172
+#: diff.c:5278 builtin/log.c:172
 msgid "suppress diff output"
 msgstr ""
 
-#: diff.c:5280 diff.c:5394 diff.c:5401
+#: diff.c:5283 diff.c:5397 diff.c:5404
 msgid "<n>"
 msgstr ""
 
-#: diff.c:5281 diff.c:5284
+#: diff.c:5284 diff.c:5287
 msgid "generate diffs with <n> lines context"
 msgstr ""
 
-#: diff.c:5286
+#: diff.c:5289
 msgid "generate the diff in raw format"
 msgstr ""
 
-#: diff.c:5289
+#: diff.c:5292
 msgid "synonym for '-p --raw'"
 msgstr ""
 
-#: diff.c:5293
+#: diff.c:5296
 msgid "synonym for '-p --stat'"
 msgstr ""
 
-#: diff.c:5297
+#: diff.c:5300
 msgid "machine friendly --stat"
 msgstr ""
 
-#: diff.c:5300
+#: diff.c:5303
 msgid "output only the last line of --stat"
 msgstr ""
 
-#: diff.c:5302 diff.c:5310
+#: diff.c:5305 diff.c:5313
 msgid "<param1,param2>..."
 msgstr ""
 
-#: diff.c:5303
+#: diff.c:5306
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr ""
 
-#: diff.c:5307
+#: diff.c:5310
 msgid "synonym for --dirstat=cumulative"
 msgstr ""
 
-#: diff.c:5311
+#: diff.c:5314
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr ""
 
-#: diff.c:5315
+#: diff.c:5318
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 
-#: diff.c:5318
+#: diff.c:5321
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr ""
 
-#: diff.c:5321
+#: diff.c:5324
 msgid "show only names of changed files"
 msgstr ""
 
-#: diff.c:5324
+#: diff.c:5327
 msgid "show only names and status of changed files"
 msgstr ""
 
-#: diff.c:5326
+#: diff.c:5329
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr ""
 
-#: diff.c:5327
+#: diff.c:5330
 msgid "generate diffstat"
 msgstr ""
 
-#: diff.c:5329 diff.c:5332 diff.c:5335
+#: diff.c:5332 diff.c:5335 diff.c:5338
 msgid "<width>"
 msgstr ""
 
-#: diff.c:5330
+#: diff.c:5333
 msgid "generate diffstat with a given width"
 msgstr ""
 
-#: diff.c:5333
+#: diff.c:5336
 msgid "generate diffstat with a given name width"
 msgstr ""
 
-#: diff.c:5336
+#: diff.c:5339
 msgid "generate diffstat with a given graph width"
 msgstr ""
 
-#: diff.c:5338
+#: diff.c:5341
 msgid "<count>"
 msgstr ""
 
-#: diff.c:5339
+#: diff.c:5342
 msgid "generate diffstat with limited lines"
 msgstr ""
 
-#: diff.c:5342
+#: diff.c:5345
 msgid "generate compact summary in diffstat"
 msgstr ""
 
-#: diff.c:5345
+#: diff.c:5348
 msgid "output a binary diff that can be applied"
 msgstr ""
 
-#: diff.c:5348
+#: diff.c:5351
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr ""
 
-#: diff.c:5350
+#: diff.c:5353
 msgid "show colored diff"
 msgstr ""
 
-#: diff.c:5351
+#: diff.c:5354
 msgid "<kind>"
 msgstr ""
 
-#: diff.c:5352
+#: diff.c:5355
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
 msgstr ""
 
-#: diff.c:5355
+#: diff.c:5358
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
 msgstr ""
 
-#: diff.c:5358 diff.c:5361 diff.c:5364 diff.c:5470
+#: diff.c:5361 diff.c:5364 diff.c:5367 diff.c:5473
 msgid "<prefix>"
 msgstr ""
 
-#: diff.c:5359
+#: diff.c:5362
 msgid "show the given source prefix instead of \"a/\""
 msgstr ""
 
-#: diff.c:5362
+#: diff.c:5365
 msgid "show the given destination prefix instead of \"b/\""
 msgstr ""
 
-#: diff.c:5365
+#: diff.c:5368
 msgid "prepend an additional prefix to every line of output"
 msgstr ""
 
-#: diff.c:5368
+#: diff.c:5371
 msgid "do not show any source or destination prefix"
 msgstr ""
 
-#: diff.c:5371
+#: diff.c:5374
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr ""
 
-#: diff.c:5375 diff.c:5380 diff.c:5385
+#: diff.c:5378 diff.c:5383 diff.c:5388
 msgid "<char>"
 msgstr ""
 
-#: diff.c:5376
+#: diff.c:5379
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr ""
 
-#: diff.c:5381
+#: diff.c:5384
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr ""
 
-#: diff.c:5386
+#: diff.c:5389
 msgid "specify the character to indicate a context instead of ' '"
 msgstr ""
 
-#: diff.c:5389
+#: diff.c:5392
 msgid "Diff rename options"
 msgstr ""
 
-#: diff.c:5390
+#: diff.c:5393
 msgid "<n>[/<m>]"
 msgstr ""
 
-#: diff.c:5391
+#: diff.c:5394
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr ""
 
-#: diff.c:5395
+#: diff.c:5398
 msgid "detect renames"
 msgstr ""
 
-#: diff.c:5399
+#: diff.c:5402
 msgid "omit the preimage for deletes"
 msgstr ""
 
-#: diff.c:5402
+#: diff.c:5405
 msgid "detect copies"
 msgstr ""
 
-#: diff.c:5406
+#: diff.c:5409
 msgid "use unmodified files as source to find copies"
 msgstr ""
 
-#: diff.c:5408
+#: diff.c:5411
 msgid "disable rename detection"
 msgstr ""
 
-#: diff.c:5411
+#: diff.c:5414
 msgid "use empty blobs as rename source"
 msgstr ""
 
-#: diff.c:5413
+#: diff.c:5416
 msgid "continue listing the history of a file beyond renames"
 msgstr ""
 
-#: diff.c:5416
+#: diff.c:5419
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
 msgstr ""
 
-#: diff.c:5418
+#: diff.c:5421
 msgid "Diff algorithm options"
 msgstr ""
 
-#: diff.c:5420
+#: diff.c:5423
 msgid "produce the smallest possible diff"
 msgstr ""
 
-#: diff.c:5423
+#: diff.c:5426
 msgid "ignore whitespace when comparing lines"
 msgstr ""
 
-#: diff.c:5426
+#: diff.c:5429
 msgid "ignore changes in amount of whitespace"
 msgstr ""
 
-#: diff.c:5429
+#: diff.c:5432
 msgid "ignore changes in whitespace at EOL"
 msgstr ""
 
-#: diff.c:5432
+#: diff.c:5435
 msgid "ignore carrier-return at the end of line"
 msgstr ""
 
-#: diff.c:5435
+#: diff.c:5438
 msgid "ignore changes whose lines are all blank"
 msgstr ""
 
-#: diff.c:5438
+#: diff.c:5441
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr ""
 
-#: diff.c:5441
+#: diff.c:5444
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr ""
 
-#: diff.c:5445
+#: diff.c:5448
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr ""
 
-#: diff.c:5447
+#: diff.c:5450
 msgid "<algorithm>"
 msgstr ""
 
-#: diff.c:5448
+#: diff.c:5451
 msgid "choose a diff algorithm"
 msgstr ""
 
-#: diff.c:5450
+#: diff.c:5453
 msgid "<text>"
 msgstr ""
 
-#: diff.c:5451
+#: diff.c:5454
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr ""
 
-#: diff.c:5453 diff.c:5462 diff.c:5465
+#: diff.c:5456 diff.c:5465 diff.c:5468
 msgid "<mode>"
 msgstr ""
 
-#: diff.c:5454
+#: diff.c:5457
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr ""
 
-#: diff.c:5456 diff.c:5459 diff.c:5504
+#: diff.c:5459 diff.c:5462 diff.c:5507
 msgid "<regex>"
 msgstr ""
 
-#: diff.c:5457
+#: diff.c:5460
 msgid "use <regex> to decide what a word is"
 msgstr ""
 
-#: diff.c:5460
+#: diff.c:5463
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr ""
 
-#: diff.c:5463
+#: diff.c:5466
 msgid "moved lines of code are colored differently"
 msgstr ""
 
-#: diff.c:5466
+#: diff.c:5469
 msgid "how white spaces are ignored in --color-moved"
 msgstr ""
 
-#: diff.c:5469
+#: diff.c:5472
 msgid "Other diff options"
 msgstr ""
 
-#: diff.c:5471
+#: diff.c:5474
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 
-#: diff.c:5475
+#: diff.c:5478
 msgid "treat all files as text"
 msgstr ""
 
-#: diff.c:5477
+#: diff.c:5480
 msgid "swap two inputs, reverse the diff"
 msgstr ""
 
-#: diff.c:5479
+#: diff.c:5482
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr ""
 
-#: diff.c:5481
+#: diff.c:5484
 msgid "disable all output of the program"
 msgstr ""
 
-#: diff.c:5483
+#: diff.c:5486
 msgid "allow an external diff helper to be executed"
 msgstr ""
 
-#: diff.c:5485
+#: diff.c:5488
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 
-#: diff.c:5487
+#: diff.c:5490
 msgid "<when>"
 msgstr ""
 
-#: diff.c:5488
+#: diff.c:5491
 msgid "ignore changes to submodules in the diff generation"
 msgstr ""
 
-#: diff.c:5491
+#: diff.c:5494
 msgid "<format>"
 msgstr ""
 
-#: diff.c:5492
+#: diff.c:5495
 msgid "specify how differences in submodules are shown"
 msgstr ""
 
-#: diff.c:5496
+#: diff.c:5499
 msgid "hide 'git add -N' entries from the index"
 msgstr ""
 
-#: diff.c:5499
+#: diff.c:5502
 msgid "treat 'git add -N' entries as real in the index"
 msgstr ""
 
-#: diff.c:5501
+#: diff.c:5504
 msgid "<string>"
 msgstr ""
 
-#: diff.c:5502
-msgid ""
-"look for differences that change the number of occurrences of the specified "
-"string"
-msgstr ""
-
 #: diff.c:5505
 msgid ""
 "look for differences that change the number of occurrences of the specified "
-"regex"
+"string"
 msgstr ""
 
 #: diff.c:5508
-msgid "show all changes in the changeset with -S or -G"
+msgid ""
+"look for differences that change the number of occurrences of the specified "
+"regex"
 msgstr ""
 
 #: diff.c:5511
-msgid "treat <string> in -S as extended POSIX regular expression"
+msgid "show all changes in the changeset with -S or -G"
 msgstr ""
 
 #: diff.c:5514
+msgid "treat <string> in -S as extended POSIX regular expression"
+msgstr ""
+
+#: diff.c:5517
 msgid "control the order in which files appear in the output"
 msgstr ""
 
-#: diff.c:5515
+#: diff.c:5518
 msgid "<object-id>"
 msgstr ""
 
-#: diff.c:5516
+#: diff.c:5519
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
 msgstr ""
 
-#: diff.c:5518
+#: diff.c:5521
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr ""
 
-#: diff.c:5519
+#: diff.c:5522
 msgid "select files by diff type"
 msgstr ""
 
-#: diff.c:5521
+#: diff.c:5524
 msgid "<file>"
 msgstr ""
 
-#: diff.c:5522
+#: diff.c:5525
 msgid "Output to a specific file"
 msgstr ""
 
-#: diff.c:6177
+#: diff.c:6180
 msgid "inexact rename detection was skipped due to too many files."
 msgstr ""
 
-#: diff.c:6180
+#: diff.c:6183
 msgid "only found copies from modified paths due to too many files."
 msgstr ""
 
-#: diff.c:6183
+#: diff.c:6186
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
 msgstr ""
 
-#: dir.c:537
+#: dir.c:549
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
 msgstr ""
 
-#: dir.c:926
+#: dir.c:938
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr ""
 
-#: dir.c:1843
+#: dir.c:1877
 #, c-format
 msgid "could not open directory '%s'"
 msgstr ""
 
-#: dir.c:2085
+#: dir.c:2128
 msgid "failed to get kernel name and information"
 msgstr ""
 
-#: dir.c:2209
+#: dir.c:2252
 msgid "untracked cache is disabled on this system or location"
 msgstr ""
 
-#: dir.c:3013
+#: dir.c:3056
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr ""
 
-#: dir.c:3058 dir.c:3063
+#: dir.c:3101 dir.c:3106
 #, c-format
 msgid "could not create directories for %s"
 msgstr ""
 
-#: dir.c:3092
+#: dir.c:3135
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr ""
@@ -2876,12 +2887,12 @@
 msgid "could not stat file '%s'"
 msgstr ""
 
-#: environment.c:150
+#: environment.c:148
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr ""
 
-#: environment.c:332
+#: environment.c:330
 #, c-format
 msgid "could not set GIT_DIR to '%s'"
 msgstr ""
@@ -2891,158 +2902,154 @@
 msgid "too many args to run %s"
 msgstr ""
 
-#: fetch-object.c:17
-msgid "Remote with no URL"
-msgstr ""
-
-#: fetch-pack.c:151
+#: fetch-pack.c:150
 msgid "git fetch-pack: expected shallow list"
 msgstr ""
 
-#: fetch-pack.c:154
+#: fetch-pack.c:153
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr ""
 
-#: fetch-pack.c:165
+#: fetch-pack.c:164
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr ""
 
-#: fetch-pack.c:185
+#: fetch-pack.c:184
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr ""
 
-#: fetch-pack.c:196
+#: fetch-pack.c:195
 msgid "unable to write to remote"
 msgstr ""
 
-#: fetch-pack.c:258
+#: fetch-pack.c:257
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr ""
 
-#: fetch-pack.c:360 fetch-pack.c:1284
+#: fetch-pack.c:356 fetch-pack.c:1280
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr ""
 
-#: fetch-pack.c:366 fetch-pack.c:1290
+#: fetch-pack.c:362 fetch-pack.c:1286
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr ""
 
-#: fetch-pack.c:368 fetch-pack.c:1292
+#: fetch-pack.c:364 fetch-pack.c:1288
 #, c-format
 msgid "object not found: %s"
 msgstr ""
 
-#: fetch-pack.c:371 fetch-pack.c:1295
+#: fetch-pack.c:367 fetch-pack.c:1291
 #, c-format
 msgid "error in object: %s"
 msgstr ""
 
-#: fetch-pack.c:373 fetch-pack.c:1297
+#: fetch-pack.c:369 fetch-pack.c:1293
 #, c-format
 msgid "no shallow found: %s"
 msgstr ""
 
-#: fetch-pack.c:376 fetch-pack.c:1301
+#: fetch-pack.c:372 fetch-pack.c:1297
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr ""
 
-#: fetch-pack.c:417
+#: fetch-pack.c:414
 #, c-format
 msgid "got %s %d %s"
 msgstr ""
 
-#: fetch-pack.c:434
+#: fetch-pack.c:431
 #, c-format
 msgid "invalid commit %s"
 msgstr ""
 
-#: fetch-pack.c:465
+#: fetch-pack.c:462
 msgid "giving up"
 msgstr ""
 
-#: fetch-pack.c:477 progress.c:277
+#: fetch-pack.c:475 progress.c:312
 msgid "done"
 msgstr ""
 
-#: fetch-pack.c:489
+#: fetch-pack.c:487
 #, c-format
 msgid "got %s (%d) %s"
 msgstr ""
 
-#: fetch-pack.c:535
+#: fetch-pack.c:533
 #, c-format
 msgid "Marking %s as complete"
 msgstr ""
 
-#: fetch-pack.c:744
+#: fetch-pack.c:742
 #, c-format
 msgid "already have %s (%s)"
 msgstr ""
 
-#: fetch-pack.c:783
+#: fetch-pack.c:781
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr ""
 
-#: fetch-pack.c:791
+#: fetch-pack.c:789
 msgid "protocol error: bad pack header"
 msgstr ""
 
-#: fetch-pack.c:859
+#: fetch-pack.c:857
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr ""
 
-#: fetch-pack.c:875
+#: fetch-pack.c:873
 #, c-format
 msgid "%s failed"
 msgstr ""
 
-#: fetch-pack.c:877
+#: fetch-pack.c:875
 msgid "error in sideband demultiplexer"
 msgstr ""
 
-#: fetch-pack.c:908
+#: fetch-pack.c:907
 #, c-format
 msgid "Server version is %.*s"
 msgstr ""
 
-#: fetch-pack.c:913 fetch-pack.c:919 fetch-pack.c:922 fetch-pack.c:928
-#: fetch-pack.c:932 fetch-pack.c:936 fetch-pack.c:940 fetch-pack.c:944
-#: fetch-pack.c:948 fetch-pack.c:952 fetch-pack.c:956 fetch-pack.c:960
-#: fetch-pack.c:966 fetch-pack.c:972 fetch-pack.c:977 fetch-pack.c:982
+#: fetch-pack.c:912 fetch-pack.c:918 fetch-pack.c:921 fetch-pack.c:927
+#: fetch-pack.c:931 fetch-pack.c:935 fetch-pack.c:939 fetch-pack.c:943
+#: fetch-pack.c:947 fetch-pack.c:951 fetch-pack.c:955 fetch-pack.c:959
+#: fetch-pack.c:965 fetch-pack.c:971 fetch-pack.c:976 fetch-pack.c:981
 #, c-format
 msgid "Server supports %s"
 msgstr ""
 
-#: fetch-pack.c:915
+#: fetch-pack.c:914
 msgid "Server does not support shallow clients"
 msgstr ""
 
-#: fetch-pack.c:975
+#: fetch-pack.c:974
 msgid "Server does not support --shallow-since"
 msgstr ""
 
-#: fetch-pack.c:980
+#: fetch-pack.c:979
 msgid "Server does not support --shallow-exclude"
 msgstr ""
 
-#: fetch-pack.c:984
+#: fetch-pack.c:983
 msgid "Server does not support --deepen"
 msgstr ""
 
-#: fetch-pack.c:1001
+#: fetch-pack.c:1000
 msgid "no common commits"
 msgstr ""
 
-#: fetch-pack.c:1013 fetch-pack.c:1462
+#: fetch-pack.c:1012 fetch-pack.c:1468
 msgid "git fetch-pack: fetch failed."
 msgstr ""
 
-#: fetch-pack.c:1151
+#: fetch-pack.c:1150
 msgid "Server does not support shallow requests"
 msgstr ""
 
@@ -3050,72 +3057,72 @@
 msgid "Server supports filter"
 msgstr ""
 
-#: fetch-pack.c:1184
+#: fetch-pack.c:1180
 msgid "unable to write request to remote"
 msgstr ""
 
-#: fetch-pack.c:1202
+#: fetch-pack.c:1198
 #, c-format
 msgid "error reading section header '%s'"
 msgstr ""
 
-#: fetch-pack.c:1208
+#: fetch-pack.c:1204
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr ""
 
-#: fetch-pack.c:1247
+#: fetch-pack.c:1243
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr ""
 
-#: fetch-pack.c:1252
+#: fetch-pack.c:1248
 #, c-format
 msgid "error processing acks: %d"
 msgstr ""
 
-#: fetch-pack.c:1262
+#: fetch-pack.c:1258
 msgid "expected packfile to be sent after 'ready'"
 msgstr ""
 
-#: fetch-pack.c:1264
+#: fetch-pack.c:1260
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr ""
 
-#: fetch-pack.c:1306
+#: fetch-pack.c:1302
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr ""
 
-#: fetch-pack.c:1353
+#: fetch-pack.c:1349
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr ""
 
-#: fetch-pack.c:1358
+#: fetch-pack.c:1354
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr ""
 
-#: fetch-pack.c:1363
+#: fetch-pack.c:1359
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr ""
 
-#: fetch-pack.c:1689
+#: fetch-pack.c:1693
 msgid "no matching remote head"
 msgstr ""
 
-#: fetch-pack.c:1712 builtin/clone.c:686
+#: fetch-pack.c:1716 builtin/clone.c:685
 msgid "remote did not send all necessary objects"
 msgstr ""
 
-#: fetch-pack.c:1739
+#: fetch-pack.c:1743
 #, c-format
 msgid "no such remote ref %s"
 msgstr ""
 
-#: fetch-pack.c:1742
+#: fetch-pack.c:1746
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr ""
@@ -3138,18 +3145,24 @@
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr ""
 
-#: grep.c:2117
+#: grep.c:668
+msgid ""
+"given pattern contains NULL byte (via -f <file>). This is only supported "
+"with -P under PCRE v2"
+msgstr ""
+
+#: grep.c:2124
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr ""
 
-#: grep.c:2134 setup.c:164 builtin/clone.c:409 builtin/diff.c:82
+#: grep.c:2141 setup.c:165 builtin/clone.c:408 builtin/diff.c:82
 #: builtin/rm.c:135
 #, c-format
 msgid "failed to stat '%s'"
 msgstr ""
 
-#: grep.c:2145
+#: grep.c:2152
 #, c-format
 msgid "'%s': short read"
 msgstr ""
@@ -3285,12 +3298,12 @@
 msgid "git version [<options>]"
 msgstr ""
 
-#: help.c:782
+#: help.c:783
 #, c-format
 msgid "%s: %s - %s"
 msgstr ""
 
-#: help.c:786
+#: help.c:787
 msgid ""
 "\n"
 "Did you mean this?"
@@ -3348,40 +3361,55 @@
 msgid "invalid date format: %s"
 msgstr ""
 
-#: list-objects.c:129
+#: list-objects.c:127
 #, c-format
 msgid "entry '%s' in tree %s has tree mode, but is not a tree"
 msgstr ""
 
-#: list-objects.c:142
+#: list-objects.c:140
 #, c-format
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr ""
 
-#: list-objects.c:378
+#: list-objects.c:375
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr ""
 
-#: list-objects-filter-options.c:36
-msgid "multiple filter-specs cannot be combined"
+#: list-objects-filter.c:492
+#, c-format
+msgid "unable to access sparse blob in '%s'"
+msgstr ""
+
+#: list-objects-filter.c:495
+#, c-format
+msgid "unable to parse sparse filter data in %s"
 msgstr ""
 
 #: list-objects-filter-options.c:58
 msgid "expected 'tree:<depth>'"
 msgstr ""
 
-#: list-objects-filter-options.c:84
+#: list-objects-filter-options.c:73
 msgid "sparse:path filters support has been dropped"
 msgstr ""
 
-#: list-objects-filter-options.c:94
+#: list-objects-filter-options.c:86
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr ""
 
-#: list-objects-filter-options.c:158
-msgid "cannot change partial clone promisor remote"
+#: list-objects-filter-options.c:102
+#, c-format
+msgid "must escape char in sub-filter-spec: '%c'"
+msgstr ""
+
+#: list-objects-filter-options.c:144
+msgid "expected something after combine:"
+msgstr ""
+
+#: list-objects-filter-options.c:226
+msgid "multiple filter-specs cannot be combined"
 msgstr ""
 
 #: lockfile.c:151
@@ -3405,114 +3433,110 @@
 msgid "failed to read the cache"
 msgstr ""
 
-#: merge.c:107 rerere.c:720 builtin/am.c:1885 builtin/am.c:1919
-#: builtin/checkout.c:536 builtin/checkout.c:796 builtin/clone.c:786
+#: merge.c:107 rerere.c:720 builtin/am.c:1874 builtin/am.c:1908
+#: builtin/checkout.c:537 builtin/checkout.c:796 builtin/clone.c:785
 #: builtin/stash.c:264
 msgid "unable to write new index file"
 msgstr ""
 
-#: merge-recursive.c:322
+#: merge-recursive.c:367
 msgid "(bad commit)\n"
 msgstr ""
 
-#: merge-recursive.c:345
+#: merge-recursive.c:390
 #, c-format
 msgid "add_cacheinfo failed for path '%s'; merge aborting."
 msgstr ""
 
-#: merge-recursive.c:354
+#: merge-recursive.c:399
 #, c-format
 msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
 msgstr ""
 
-#: merge-recursive.c:437
-msgid "error building trees"
-msgstr ""
-
-#: merge-recursive.c:863
+#: merge-recursive.c:885
 #, c-format
 msgid "failed to create path '%s'%s"
 msgstr ""
 
-#: merge-recursive.c:874
+#: merge-recursive.c:896
 #, c-format
 msgid "Removing %s to make room for subdirectory\n"
 msgstr ""
 
-#: merge-recursive.c:888 merge-recursive.c:907
+#: merge-recursive.c:910 merge-recursive.c:929
 msgid ": perhaps a D/F conflict?"
 msgstr ""
 
-#: merge-recursive.c:897
+#: merge-recursive.c:919
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
 msgstr ""
 
-#: merge-recursive.c:938 builtin/cat-file.c:40
+#: merge-recursive.c:960 builtin/cat-file.c:41
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr ""
 
-#: merge-recursive.c:941
+#: merge-recursive.c:965
 #, c-format
 msgid "blob expected for %s '%s'"
 msgstr ""
 
-#: merge-recursive.c:965
+#: merge-recursive.c:990
 #, c-format
 msgid "failed to open '%s': %s"
 msgstr ""
 
-#: merge-recursive.c:976
+#: merge-recursive.c:1001
 #, c-format
 msgid "failed to symlink '%s': %s"
 msgstr ""
 
-#: merge-recursive.c:981
+#: merge-recursive.c:1006
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
 msgstr ""
 
-#: merge-recursive.c:1177
+#: merge-recursive.c:1199
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr ""
 
-#: merge-recursive.c:1184
+#: merge-recursive.c:1206
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr ""
 
-#: merge-recursive.c:1191
+#: merge-recursive.c:1213
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr ""
 
-#: merge-recursive.c:1199 merge-recursive.c:1211
+#: merge-recursive.c:1221 merge-recursive.c:1233
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr ""
 
-#: merge-recursive.c:1202 merge-recursive.c:1214
+#: merge-recursive.c:1224 merge-recursive.c:1236
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr ""
 
-#: merge-recursive.c:1237
+#: merge-recursive.c:1259
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 
-#: merge-recursive.c:1241
+#: merge-recursive.c:1263
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr ""
 
-#: merge-recursive.c:1242
+#: merge-recursive.c:1264
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr ""
 
-#: merge-recursive.c:1245
+#: merge-recursive.c:1267
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -3523,108 +3547,108 @@
 "which will accept this suggestion.\n"
 msgstr ""
 
-#: merge-recursive.c:1254
+#: merge-recursive.c:1276
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr ""
 
-#: merge-recursive.c:1327
+#: merge-recursive.c:1349
 msgid "Failed to execute internal merge"
 msgstr ""
 
-#: merge-recursive.c:1332
+#: merge-recursive.c:1354
 #, c-format
 msgid "Unable to add %s to database"
 msgstr ""
 
-#: merge-recursive.c:1364
+#: merge-recursive.c:1386
 #, c-format
 msgid "Auto-merging %s"
 msgstr ""
 
-#: merge-recursive.c:1387
+#: merge-recursive.c:1410
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr ""
 
-#: merge-recursive.c:1459
+#: merge-recursive.c:1482
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
 "in tree."
 msgstr ""
 
-#: merge-recursive.c:1464
+#: merge-recursive.c:1487
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
 "left in tree."
 msgstr ""
 
-#: merge-recursive.c:1471
+#: merge-recursive.c:1494
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
 "in tree at %s."
 msgstr ""
 
-#: merge-recursive.c:1476
+#: merge-recursive.c:1499
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
 "left in tree at %s."
 msgstr ""
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1534
 msgid "rename"
 msgstr ""
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1534
 msgid "renamed"
 msgstr ""
 
-#: merge-recursive.c:1591 merge-recursive.c:2450 merge-recursive.c:3094
+#: merge-recursive.c:1614 merge-recursive.c:2472 merge-recursive.c:3117
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr ""
 
-#: merge-recursive.c:1601
+#: merge-recursive.c:1624
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr ""
 
-#: merge-recursive.c:1659
+#: merge-recursive.c:1682
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 
-#: merge-recursive.c:1690
+#: merge-recursive.c:1713
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr ""
 
-#: merge-recursive.c:1695
+#: merge-recursive.c:1718
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr ""
 
-#: merge-recursive.c:1714
+#: merge-recursive.c:1737
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
 "\"->\"%s\" in \"%s\"%s"
 msgstr ""
 
-#: merge-recursive.c:1719
+#: merge-recursive.c:1742
 msgid " (left unresolved)"
 msgstr ""
 
-#: merge-recursive.c:1828
+#: merge-recursive.c:1851
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 
-#: merge-recursive.c:2035
+#: merge-recursive.c:2056
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -3632,323 +3656,323 @@
 "getting a majority of the files."
 msgstr ""
 
-#: merge-recursive.c:2067
+#: merge-recursive.c:2088
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
 "implicit directory rename(s) putting the following path(s) there: %s."
 msgstr ""
 
-#: merge-recursive.c:2077
+#: merge-recursive.c:2098
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
 "implicit directory renames tried to put these paths there: %s"
 msgstr ""
 
-#: merge-recursive.c:2169
+#: merge-recursive.c:2190
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
 ">%s in %s"
 msgstr ""
 
-#: merge-recursive.c:2413
+#: merge-recursive.c:2435
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
 "renamed."
 msgstr ""
 
-#: merge-recursive.c:2938
+#: merge-recursive.c:2961
 #, c-format
 msgid "cannot read object %s"
 msgstr ""
 
-#: merge-recursive.c:2941
+#: merge-recursive.c:2964
 #, c-format
 msgid "object %s is not a blob"
 msgstr ""
 
-#: merge-recursive.c:3005
+#: merge-recursive.c:3028
 msgid "modify"
 msgstr ""
 
-#: merge-recursive.c:3005
+#: merge-recursive.c:3028
 msgid "modified"
 msgstr ""
 
-#: merge-recursive.c:3017
+#: merge-recursive.c:3040
 msgid "content"
 msgstr ""
 
-#: merge-recursive.c:3021
-msgid "add/add"
-msgstr ""
-
 #: merge-recursive.c:3044
-#, c-format
-msgid "Skipped %s (merged same as existing)"
-msgstr ""
-
-#: merge-recursive.c:3066 git-submodule.sh:937
-msgid "submodule"
+msgid "add/add"
 msgstr ""
 
 #: merge-recursive.c:3067
 #, c-format
+msgid "Skipped %s (merged same as existing)"
+msgstr ""
+
+#: merge-recursive.c:3089 git-submodule.sh:937
+msgid "submodule"
+msgstr ""
+
+#: merge-recursive.c:3090
+#, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr ""
 
-#: merge-recursive.c:3097
+#: merge-recursive.c:3120
 #, c-format
 msgid "Adding as %s instead"
 msgstr ""
 
-#: merge-recursive.c:3179
+#: merge-recursive.c:3203
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
 "moving it to %s."
 msgstr ""
 
-#: merge-recursive.c:3182
+#: merge-recursive.c:3206
 #, c-format
 msgid ""
 "CONFLICT (file location): %s added in %s inside a directory that was renamed "
 "in %s, suggesting it should perhaps be moved to %s."
 msgstr ""
 
-#: merge-recursive.c:3186
+#: merge-recursive.c:3210
 #, c-format
 msgid ""
 "Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
 "%s; moving it to %s."
 msgstr ""
 
-#: merge-recursive.c:3189
+#: merge-recursive.c:3213
 #, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
 "was renamed in %s, suggesting it should perhaps be moved to %s."
 msgstr ""
 
-#: merge-recursive.c:3303
+#: merge-recursive.c:3327
 #, c-format
 msgid "Removing %s"
 msgstr ""
 
-#: merge-recursive.c:3326
+#: merge-recursive.c:3350
 msgid "file/directory"
 msgstr ""
 
-#: merge-recursive.c:3331
+#: merge-recursive.c:3355
 msgid "directory/file"
 msgstr ""
 
-#: merge-recursive.c:3338
+#: merge-recursive.c:3362
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
 
-#: merge-recursive.c:3347
+#: merge-recursive.c:3371
 #, c-format
 msgid "Adding %s"
 msgstr ""
 
-#: merge-recursive.c:3356
+#: merge-recursive.c:3380
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr ""
 
-#: merge-recursive.c:3394
-#, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by merge:\n"
-"  %s"
-msgstr ""
-
-#: merge-recursive.c:3405
+#: merge-recursive.c:3424
 msgid "Already up to date!"
 msgstr ""
 
-#: merge-recursive.c:3414
+#: merge-recursive.c:3433
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr ""
 
-#: merge-recursive.c:3513
+#: merge-recursive.c:3537
 msgid "Merging:"
 msgstr ""
 
-#: merge-recursive.c:3526
+#: merge-recursive.c:3550
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] ""
 msgstr[1] ""
 
-#: merge-recursive.c:3565
+#: merge-recursive.c:3600
 msgid "merge returned no commit"
 msgstr ""
 
-#: merge-recursive.c:3631
+#: merge-recursive.c:3659
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by merge:\n"
+"  %s"
+msgstr ""
+
+#: merge-recursive.c:3756
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr ""
 
-#: merge-recursive.c:3647 builtin/merge.c:698 builtin/merge.c:869
+#: merge-recursive.c:3774 builtin/merge.c:694 builtin/merge.c:874
 msgid "Unable to write index."
 msgstr ""
 
-#: midx.c:69
+#: midx.c:68
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr ""
 
-#: midx.c:85
+#: midx.c:84
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr ""
 
-#: midx.c:90
+#: midx.c:89
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr ""
 
-#: midx.c:95
+#: midx.c:94
 #, c-format
 msgid "hash version %u does not match"
 msgstr ""
 
-#: midx.c:109
+#: midx.c:108
 msgid "invalid chunk offset (too large)"
 msgstr ""
 
-#: midx.c:133
+#: midx.c:132
 msgid "terminating multi-pack-index chunk id appears earlier than expected"
 msgstr ""
 
-#: midx.c:146
+#: midx.c:145
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr ""
 
-#: midx.c:148
+#: midx.c:147
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr ""
 
-#: midx.c:150
+#: midx.c:149
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr ""
 
-#: midx.c:152
+#: midx.c:151
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr ""
 
-#: midx.c:166
+#: midx.c:165
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr ""
 
-#: midx.c:211
+#: midx.c:210
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr ""
 
-#: midx.c:261
+#: midx.c:260
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr ""
 
-#: midx.c:289
+#: midx.c:288
 msgid "error preparing packfile from multi-pack-index"
 msgstr ""
 
-#: midx.c:470
+#: midx.c:469
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr ""
 
-#: midx.c:476
+#: midx.c:475
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr ""
 
-#: midx.c:536
+#: midx.c:535
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr ""
 
-#: midx.c:865
+#: midx.c:864
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr ""
 
-#: midx.c:1036
+#: midx.c:1035
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr ""
 
-#: midx.c:1091
+#: midx.c:1090
 msgid "Looking for referenced packfiles"
 msgstr ""
 
-#: midx.c:1106
+#: midx.c:1105
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr ""
 
-#: midx.c:1110
+#: midx.c:1109
 msgid "Verifying OID order in MIDX"
 msgstr ""
 
-#: midx.c:1119
+#: midx.c:1118
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr ""
 
-#: midx.c:1138
+#: midx.c:1137
 msgid "Sorting objects by packfile"
 msgstr ""
 
-#: midx.c:1144
+#: midx.c:1143
 msgid "Verifying object offsets"
 msgstr ""
 
-#: midx.c:1160
+#: midx.c:1159
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr ""
 
-#: midx.c:1166
+#: midx.c:1165
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr ""
 
-#: midx.c:1175
+#: midx.c:1174
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr ""
 
-#: midx.c:1350
+#: midx.c:1349
 msgid "could not start pack-objects"
 msgstr ""
 
-#: midx.c:1369
+#: midx.c:1368
 msgid "could not finish pack-objects"
 msgstr ""
 
-#: name-hash.c:532
+#: name-hash.c:537
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
 msgstr ""
 
-#: name-hash.c:554
+#: name-hash.c:559
 #, c-format
 msgid "unable to create lazy_name thread: %s"
 msgstr ""
 
-#: name-hash.c:560
+#: name-hash.c:565
 #, c-format
 msgid "unable to join lazy_name thread: %s"
 msgstr ""
@@ -3989,41 +4013,41 @@
 msgid "Bad %s value: '%s'"
 msgstr ""
 
-#: object.c:54
+#: object.c:53
 #, c-format
 msgid "invalid object type \"%s\""
 msgstr ""
 
-#: object.c:174
+#: object.c:173
 #, c-format
 msgid "object %s is a %s, not a %s"
 msgstr ""
 
-#: object.c:234
+#: object.c:233
 #, c-format
 msgid "object %s has unknown type id %d"
 msgstr ""
 
-#: object.c:247
+#: object.c:246
 #, c-format
 msgid "unable to parse object: %s"
 msgstr ""
 
-#: object.c:267 object.c:278
+#: object.c:266 object.c:277
 #, c-format
 msgid "hash mismatch %s"
 msgstr ""
 
-#: packfile.c:648
+#: packfile.c:641
 msgid "offset before end of packfile (broken .idx?)"
 msgstr ""
 
-#: packfile.c:1899
+#: packfile.c:1887
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr ""
 
-#: packfile.c:1903
+#: packfile.c:1891
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr ""
@@ -4068,26 +4092,26 @@
 msgid "did you mean `--%s` (with two dashes ?)"
 msgstr ""
 
-#: parse-options.c:859
+#: parse-options.c:860
 #, c-format
 msgid "unknown option `%s'"
 msgstr ""
 
-#: parse-options.c:861
+#: parse-options.c:862
 #, c-format
 msgid "unknown switch `%c'"
 msgstr ""
 
-#: parse-options.c:863
+#: parse-options.c:864
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr ""
 
-#: parse-options.c:887
+#: parse-options.c:888
 msgid "..."
 msgstr ""
 
-#: parse-options.c:906
+#: parse-options.c:907
 #, c-format
 msgid "usage: %s"
 msgstr ""
@@ -4095,21 +4119,21 @@
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
 #.
-#: parse-options.c:912
+#: parse-options.c:913
 #, c-format
 msgid "   or: %s"
 msgstr ""
 
-#: parse-options.c:915
+#: parse-options.c:916
 #, c-format
 msgid "    %s"
 msgstr ""
 
-#: parse-options.c:954
+#: parse-options.c:955
 msgid "-NUM"
 msgstr ""
 
-#: parse-options.c:968
+#: parse-options.c:969
 #, c-format
 msgid "alias of --%s"
 msgstr ""
@@ -4274,29 +4298,38 @@
 msgid "unable to parse --pretty format"
 msgstr ""
 
-#: range-diff.c:70
+#: promisor-remote.c:25
+msgid "Remote with no URL"
+msgstr ""
+
+#: promisor-remote.c:61
+#, c-format
+msgid "promisor remote name cannot begin with '/': %s"
+msgstr ""
+
+#: range-diff.c:71
 msgid "could not start `log`"
 msgstr ""
 
-#: range-diff.c:72
+#: range-diff.c:73
 msgid "could not read `log` output"
 msgstr ""
 
-#: range-diff.c:91 sequencer.c:5021
+#: range-diff.c:92 sequencer.c:4985
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr ""
 
-#: range-diff.c:117
+#: range-diff.c:118
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr ""
 
-#: range-diff.c:274
+#: range-diff.c:275
 msgid "failed to generate diff"
 msgstr ""
 
-#: range-diff.c:506 range-diff.c:508
+#: range-diff.c:507 range-diff.c:509
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr ""
@@ -4340,156 +4373,156 @@
 msgid "'%s' appears as both a file and as a directory"
 msgstr ""
 
-#: read-cache.c:1499
+#: read-cache.c:1520
 msgid "Refresh index"
 msgstr ""
 
-#: read-cache.c:1613
+#: read-cache.c:1635
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
 "Using version %i"
 msgstr ""
 
-#: read-cache.c:1623
+#: read-cache.c:1645
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
 "Using version %i"
 msgstr ""
 
-#: read-cache.c:1679
+#: read-cache.c:1701
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr ""
 
-#: read-cache.c:1682
+#: read-cache.c:1704
 #, c-format
 msgid "bad index version %d"
 msgstr ""
 
-#: read-cache.c:1691
+#: read-cache.c:1713
 msgid "bad index file sha1 signature"
 msgstr ""
 
-#: read-cache.c:1721
+#: read-cache.c:1743
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr ""
 
-#: read-cache.c:1723
+#: read-cache.c:1745
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr ""
 
-#: read-cache.c:1760
+#: read-cache.c:1782
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr ""
 
-#: read-cache.c:1776
+#: read-cache.c:1798
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr ""
 
-#: read-cache.c:1833
+#: read-cache.c:1855
 msgid "unordered stage entries in index"
 msgstr ""
 
-#: read-cache.c:1836
+#: read-cache.c:1858
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr ""
 
-#: read-cache.c:1839
+#: read-cache.c:1861
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr ""
 
-#: read-cache.c:1946 read-cache.c:2234 rerere.c:565 rerere.c:599 rerere.c:1111
-#: builtin/add.c:460 builtin/check-ignore.c:178 builtin/checkout.c:467
-#: builtin/checkout.c:651 builtin/clean.c:956 builtin/commit.c:347
+#: read-cache.c:1967 read-cache.c:2255 rerere.c:565 rerere.c:599 rerere.c:1111
+#: builtin/add.c:460 builtin/check-ignore.c:178 builtin/checkout.c:468
+#: builtin/checkout.c:652 builtin/clean.c:967 builtin/commit.c:347
 #: builtin/diff-tree.c:120 builtin/grep.c:499 builtin/mv.c:145
 #: builtin/reset.c:245 builtin/rm.c:271 builtin/submodule--helper.c:330
 msgid "index file corrupt"
 msgstr ""
 
-#: read-cache.c:2087
+#: read-cache.c:2108
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr ""
 
-#: read-cache.c:2100
+#: read-cache.c:2121
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr ""
 
-#: read-cache.c:2133
+#: read-cache.c:2154
 #, c-format
 msgid "%s: index file open failed"
 msgstr ""
 
-#: read-cache.c:2137
+#: read-cache.c:2158
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr ""
 
-#: read-cache.c:2141
+#: read-cache.c:2162
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr ""
 
-#: read-cache.c:2145
+#: read-cache.c:2166
 #, c-format
 msgid "%s: unable to map index file"
 msgstr ""
 
-#: read-cache.c:2187
+#: read-cache.c:2208
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr ""
 
-#: read-cache.c:2214
+#: read-cache.c:2235
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr ""
 
-#: read-cache.c:2246
+#: read-cache.c:2267
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr ""
 
-#: read-cache.c:2293
+#: read-cache.c:2314
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr ""
 
-#: read-cache.c:2989 wrapper.c:658 builtin/merge.c:1114
+#: read-cache.c:3010 wrapper.c:622 builtin/merge.c:1119
 #, c-format
 msgid "could not close '%s'"
 msgstr ""
 
-#: read-cache.c:3092 sequencer.c:2358 sequencer.c:3928
+#: read-cache.c:3113 sequencer.c:2296 sequencer.c:3917
 #, c-format
 msgid "could not stat '%s'"
 msgstr ""
 
-#: read-cache.c:3105
+#: read-cache.c:3126
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr ""
 
-#: read-cache.c:3117
+#: read-cache.c:3138
 #, c-format
 msgid "unable to unlink: %s"
 msgstr ""
 
-#: read-cache.c:3142
+#: read-cache.c:3163
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr ""
 
-#: read-cache.c:3291
+#: read-cache.c:3312
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr ""
@@ -4561,8 +4594,8 @@
 msgid "Note that empty commits are commented out"
 msgstr ""
 
-#: rebase-interactive.c:105 rerere.c:485 rerere.c:692 sequencer.c:3447
-#: sequencer.c:3473 sequencer.c:5120 builtin/fsck.c:356 builtin/rebase.c:235
+#: rebase-interactive.c:105 rerere.c:485 rerere.c:692 sequencer.c:3388
+#: sequencer.c:3414 sequencer.c:5084 builtin/fsck.c:356 builtin/rebase.c:235
 #, c-format
 msgid "could not write '%s'"
 msgstr ""
@@ -4600,7 +4633,7 @@
 msgid "ignoring dangling symref %s"
 msgstr ""
 
-#: refs.c:669 ref-filter.c:2092
+#: refs.c:669 ref-filter.c:2098
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr ""
@@ -4625,14 +4658,14 @@
 msgid "unexpected object ID when writing '%s'"
 msgstr ""
 
-#: refs.c:833 sequencer.c:403 sequencer.c:2709 sequencer.c:2913
-#: sequencer.c:2927 sequencer.c:3184 sequencer.c:5037 wrapper.c:656
+#: refs.c:833 sequencer.c:403 sequencer.c:2647 sequencer.c:2851
+#: sequencer.c:2865 sequencer.c:3122 sequencer.c:5001 wrapper.c:620
 #, c-format
 msgid "could not write to '%s'"
 msgstr ""
 
-#: refs.c:860 wrapper.c:225 wrapper.c:395 builtin/am.c:715
-#: builtin/rebase.c:1003
+#: refs.c:860 wrapper.c:188 wrapper.c:358 builtin/am.c:714
+#: builtin/rebase.c:1004
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr ""
@@ -4667,21 +4700,21 @@
 msgid "update_ref failed for ref '%s': %s"
 msgstr ""
 
-#: refs.c:2012
+#: refs.c:2023
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr ""
 
-#: refs.c:2044
+#: refs.c:2055
 msgid "ref updates forbidden inside quarantine environment"
 msgstr ""
 
-#: refs.c:2140 refs.c:2170
+#: refs.c:2151 refs.c:2181
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr ""
 
-#: refs.c:2146 refs.c:2181
+#: refs.c:2157 refs.c:2192
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr ""
@@ -4691,13 +4724,13 @@
 msgid "could not remove reference %s"
 msgstr ""
 
-#: refs/files-backend.c:1248 refs/packed-backend.c:1532
-#: refs/packed-backend.c:1542
+#: refs/files-backend.c:1248 refs/packed-backend.c:1541
+#: refs/packed-backend.c:1551
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr ""
 
-#: refs/files-backend.c:1251 refs/packed-backend.c:1545
+#: refs/files-backend.c:1251 refs/packed-backend.c:1554
 #, c-format
 msgid "could not delete references: %s"
 msgstr ""
@@ -4707,7 +4740,7 @@
 msgid "invalid refspec '%s'"
 msgstr ""
 
-#: ref-filter.c:42 wt-status.c:1934
+#: ref-filter.c:42 wt-status.c:1938
 msgid "gone"
 msgstr ""
 
@@ -4726,280 +4759,280 @@
 msgid "ahead %d, behind %d"
 msgstr ""
 
-#: ref-filter.c:162
+#: ref-filter.c:165
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr ""
 
-#: ref-filter.c:164
+#: ref-filter.c:167
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr ""
 
-#: ref-filter.c:186
+#: ref-filter.c:189
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr ""
 
-#: ref-filter.c:190
+#: ref-filter.c:193
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr ""
 
-#: ref-filter.c:192
+#: ref-filter.c:195
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr ""
 
-#: ref-filter.c:247
+#: ref-filter.c:250
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr ""
 
-#: ref-filter.c:269
+#: ref-filter.c:272
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr ""
 
-#: ref-filter.c:277
+#: ref-filter.c:280
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr ""
 
-#: ref-filter.c:289
+#: ref-filter.c:292
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr ""
 
-#: ref-filter.c:298
+#: ref-filter.c:301
 #, c-format
 msgid "%%(subject) does not take arguments"
 msgstr ""
 
-#: ref-filter.c:320
+#: ref-filter.c:323
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr ""
 
-#: ref-filter.c:349
+#: ref-filter.c:352
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr ""
 
-#: ref-filter.c:351
+#: ref-filter.c:354
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr ""
 
-#: ref-filter.c:366
+#: ref-filter.c:369
 #, c-format
 msgid "positive value expected objectname:short=%s"
 msgstr ""
 
-#: ref-filter.c:370
+#: ref-filter.c:373
 #, c-format
 msgid "unrecognized %%(objectname) argument: %s"
 msgstr ""
 
-#: ref-filter.c:400
+#: ref-filter.c:403
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr ""
 
-#: ref-filter.c:412
+#: ref-filter.c:415
 #, c-format
 msgid "unrecognized position:%s"
 msgstr ""
 
-#: ref-filter.c:419
+#: ref-filter.c:422
 #, c-format
 msgid "unrecognized width:%s"
 msgstr ""
 
-#: ref-filter.c:428
+#: ref-filter.c:431
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr ""
 
-#: ref-filter.c:436
+#: ref-filter.c:439
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr ""
 
-#: ref-filter.c:454
+#: ref-filter.c:457
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr ""
 
-#: ref-filter.c:556
+#: ref-filter.c:559
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr ""
 
-#: ref-filter.c:583
+#: ref-filter.c:586
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr ""
 
-#: ref-filter.c:587
+#: ref-filter.c:590
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
 msgstr ""
 
-#: ref-filter.c:711
+#: ref-filter.c:714
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr ""
 
-#: ref-filter.c:774
+#: ref-filter.c:777
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr ""
 
-#: ref-filter.c:776
+#: ref-filter.c:779
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr ""
 
-#: ref-filter.c:778
+#: ref-filter.c:781
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr ""
 
-#: ref-filter.c:806
+#: ref-filter.c:809
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr ""
 
-#: ref-filter.c:808
+#: ref-filter.c:811
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr ""
 
-#: ref-filter.c:810
+#: ref-filter.c:813
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr ""
 
-#: ref-filter.c:825
+#: ref-filter.c:828
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr ""
 
-#: ref-filter.c:882
+#: ref-filter.c:885
 #, c-format
 msgid "malformed format string %s"
 msgstr ""
 
-#: ref-filter.c:1485
+#: ref-filter.c:1488
 #, c-format
 msgid "no branch, rebasing %s"
 msgstr ""
 
-#: ref-filter.c:1488
+#: ref-filter.c:1491
 #, c-format
 msgid "no branch, rebasing detached HEAD %s"
 msgstr ""
 
-#: ref-filter.c:1491
+#: ref-filter.c:1494
 #, c-format
 msgid "no branch, bisect started on %s"
 msgstr ""
 
-#: ref-filter.c:1501
+#: ref-filter.c:1504
 msgid "no branch"
 msgstr ""
 
-#: ref-filter.c:1537 ref-filter.c:1743
+#: ref-filter.c:1540 ref-filter.c:1749
 #, c-format
 msgid "missing object %s for %s"
 msgstr ""
 
-#: ref-filter.c:1547
+#: ref-filter.c:1550
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr ""
 
-#: ref-filter.c:1998
+#: ref-filter.c:2004
 #, c-format
 msgid "malformed object at '%s'"
 msgstr ""
 
-#: ref-filter.c:2087
+#: ref-filter.c:2093
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr ""
 
-#: ref-filter.c:2382
+#: ref-filter.c:2389
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr ""
 
-#: ref-filter.c:2482
+#: ref-filter.c:2489
 #, c-format
 msgid "option `%s' is incompatible with --merged"
 msgstr ""
 
-#: ref-filter.c:2485
+#: ref-filter.c:2492
 #, c-format
 msgid "option `%s' is incompatible with --no-merged"
 msgstr ""
 
-#: ref-filter.c:2495
+#: ref-filter.c:2502
 #, c-format
 msgid "malformed object name %s"
 msgstr ""
 
-#: ref-filter.c:2500
+#: ref-filter.c:2507
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr ""
 
-#: remote.c:363
+#: remote.c:366
 #, c-format
 msgid "config remote shorthand cannot begin with '/': %s"
 msgstr ""
 
-#: remote.c:410
+#: remote.c:413
 msgid "more than one receivepack given, using the first"
 msgstr ""
 
-#: remote.c:418
+#: remote.c:421
 msgid "more than one uploadpack given, using the first"
 msgstr ""
 
-#: remote.c:608
+#: remote.c:611
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
 msgstr ""
 
-#: remote.c:612
+#: remote.c:615
 #, c-format
 msgid "%s usually tracks %s, not %s"
 msgstr ""
 
-#: remote.c:616
+#: remote.c:619
 #, c-format
 msgid "%s tracks both %s and %s"
 msgstr ""
 
-#: remote.c:684
+#: remote.c:687
 #, c-format
 msgid "key '%s' of pattern had no '*'"
 msgstr ""
 
-#: remote.c:694
+#: remote.c:697
 #, c-format
 msgid "value '%s' of pattern has no '*'"
 msgstr ""
 
-#: remote.c:1000
+#: remote.c:1003
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr ""
 
-#: remote.c:1005
+#: remote.c:1008
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr ""
@@ -5008,7 +5041,7 @@
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1020
+#: remote.c:1023
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -5022,7 +5055,7 @@
 "Neither worked, so we gave up. You must fully qualify the ref."
 msgstr ""
 
-#: remote.c:1040
+#: remote.c:1043
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -5030,7 +5063,7 @@
 "'%s:refs/heads/%s'?"
 msgstr ""
 
-#: remote.c:1045
+#: remote.c:1048
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -5038,7 +5071,7 @@
 "'%s:refs/tags/%s'?"
 msgstr ""
 
-#: remote.c:1050
+#: remote.c:1053
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -5046,7 +5079,7 @@
 "'%s:refs/tags/%s'?"
 msgstr ""
 
-#: remote.c:1055
+#: remote.c:1058
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -5054,114 +5087,114 @@
 "'%s:refs/tags/%s'?"
 msgstr ""
 
-#: remote.c:1091
+#: remote.c:1094
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr ""
 
-#: remote.c:1102
+#: remote.c:1105
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr ""
 
-#: remote.c:1114
+#: remote.c:1117
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr ""
 
-#: remote.c:1121
+#: remote.c:1124
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr ""
 
-#: remote.c:1624 remote.c:1725
+#: remote.c:1627 remote.c:1728
 msgid "HEAD does not point to a branch"
 msgstr ""
 
-#: remote.c:1633
-#, c-format
-msgid "no such branch: '%s'"
-msgstr ""
-
 #: remote.c:1636
 #, c-format
+msgid "no such branch: '%s'"
+msgstr ""
+
+#: remote.c:1639
+#, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr ""
 
-#: remote.c:1642
+#: remote.c:1645
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr ""
 
-#: remote.c:1657
+#: remote.c:1660
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr ""
 
-#: remote.c:1669
+#: remote.c:1672
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr ""
 
-#: remote.c:1679
+#: remote.c:1682
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr ""
 
-#: remote.c:1692
+#: remote.c:1695
 msgid "push has no destination (push.default is 'nothing')"
 msgstr ""
 
-#: remote.c:1714
+#: remote.c:1717
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr ""
 
-#: remote.c:1840
+#: remote.c:1843
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr ""
 
-#: remote.c:1853
+#: remote.c:1856
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr ""
 
-#: remote.c:2016
+#: remote.c:2019
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr ""
 
-#: remote.c:2020
+#: remote.c:2023
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr ""
 
-#: remote.c:2023
+#: remote.c:2026
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr ""
 
-#: remote.c:2027
+#: remote.c:2030
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr ""
 
-#: remote.c:2030
+#: remote.c:2033
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr ""
 
-#: remote.c:2034
+#: remote.c:2037
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: remote.c:2040
+#: remote.c:2043
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr ""
 
-#: remote.c:2043
+#: remote.c:2046
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -5169,11 +5202,11 @@
 msgstr[0] ""
 msgstr[1] ""
 
-#: remote.c:2051
+#: remote.c:2054
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr ""
 
-#: remote.c:2054
+#: remote.c:2057
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -5184,11 +5217,11 @@
 msgstr[0] ""
 msgstr[1] ""
 
-#: remote.c:2064
+#: remote.c:2067
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr ""
 
-#: remote.c:2247
+#: remote.c:2250
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr ""
@@ -5266,7 +5299,7 @@
 msgid "Recorded preimage for '%s'"
 msgstr ""
 
-#: rerere.c:881 submodule.c:2023 builtin/log.c:1773
+#: rerere.c:881 submodule.c:2023 builtin/log.c:1790
 #: builtin/submodule--helper.c:1418 builtin/submodule--helper.c:1428
 #, c-format
 msgid "could not create directory '%s'"
@@ -5301,20 +5334,20 @@
 msgid "unable to open rr-cache directory"
 msgstr ""
 
-#: revision.c:2507
+#: revision.c:2509
 msgid "your current branch appears to be broken"
 msgstr ""
 
-#: revision.c:2510
+#: revision.c:2512
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr ""
 
-#: revision.c:2710
+#: revision.c:2720
 msgid "--first-parent is incompatible with --bisect"
 msgstr ""
 
-#: revision.c:2714
+#: revision.c:2724
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr ""
 
@@ -5334,39 +5367,39 @@
 "You can disable this warning with `git config advice.ignoredHook false`."
 msgstr ""
 
-#: send-pack.c:141
+#: send-pack.c:142
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr ""
 
-#: send-pack.c:143
+#: send-pack.c:144
 #, c-format
 msgid "unable to parse remote unpack status: %s"
 msgstr ""
 
-#: send-pack.c:145
+#: send-pack.c:146
 #, c-format
 msgid "remote unpack failed: %s"
 msgstr ""
 
-#: send-pack.c:306
+#: send-pack.c:307
 msgid "failed to sign the push certificate"
 msgstr ""
 
-#: send-pack.c:420
+#: send-pack.c:421
 msgid "the receiving end does not support --signed push"
 msgstr ""
 
-#: send-pack.c:422
+#: send-pack.c:423
 msgid ""
 "not sending a push certificate since the receiving end does not support --"
 "signed push"
 msgstr ""
 
-#: send-pack.c:434
+#: send-pack.c:435
 msgid "the receiving end does not support --atomic push"
 msgstr ""
 
-#: send-pack.c:439
+#: send-pack.c:440
 msgid "the receiving end does not support push options"
 msgstr ""
 
@@ -5380,7 +5413,7 @@
 msgid "could not delete '%s'"
 msgstr ""
 
-#: sequencer.c:311 builtin/rebase.c:759 builtin/rebase.c:1645 builtin/rm.c:369
+#: sequencer.c:311 builtin/rebase.c:760 builtin/rebase.c:1676 builtin/rm.c:369
 #, c-format
 msgid "could not remove '%s'"
 msgstr ""
@@ -5415,7 +5448,7 @@
 "and commit the result with 'git commit'"
 msgstr ""
 
-#: sequencer.c:401 sequencer.c:2909
+#: sequencer.c:401 sequencer.c:2847
 #, c-format
 msgid "could not lock '%s'"
 msgstr ""
@@ -5425,15 +5458,15 @@
 msgid "could not write eol to '%s'"
 msgstr ""
 
-#: sequencer.c:413 sequencer.c:2714 sequencer.c:2915 sequencer.c:2929
-#: sequencer.c:3192
+#: sequencer.c:413 sequencer.c:2652 sequencer.c:2853 sequencer.c:2867
+#: sequencer.c:3130
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr ""
 
-#: sequencer.c:436 sequencer.c:981 sequencer.c:1655 sequencer.c:2734
-#: sequencer.c:3174 sequencer.c:3283 builtin/am.c:245 builtin/commit.c:763
-#: builtin/merge.c:1112 builtin/rebase.c:567
+#: sequencer.c:436 sequencer.c:1585 sequencer.c:2672 sequencer.c:3112
+#: sequencer.c:3221 builtin/am.c:244 builtin/commit.c:763 builtin/merge.c:1117
+#: builtin/rebase.c:568
 #, c-format
 msgid "could not read '%s'"
 msgstr ""
@@ -5460,70 +5493,65 @@
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase -i".
 #.
-#: sequencer.c:632
+#: sequencer.c:631
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr ""
 
-#: sequencer.c:649
+#: sequencer.c:648
 msgid "unable to update cache tree"
 msgstr ""
 
-#: sequencer.c:663
+#: sequencer.c:662
 msgid "could not resolve HEAD commit"
 msgstr ""
 
-#: sequencer.c:743
+#: sequencer.c:742
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr ""
 
-#: sequencer.c:754
+#: sequencer.c:753
 #, c-format
 msgid "unable to dequote value of '%s'"
 msgstr ""
 
-#: sequencer.c:791 wrapper.c:227 wrapper.c:397 builtin/am.c:706
-#: builtin/am.c:798 builtin/merge.c:1109 builtin/rebase.c:1045
+#: sequencer.c:790 wrapper.c:190 wrapper.c:360 builtin/am.c:705
+#: builtin/am.c:797 builtin/merge.c:1114 builtin/rebase.c:1046
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr ""
 
-#: sequencer.c:801
+#: sequencer.c:800
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr ""
 
-#: sequencer.c:806
+#: sequencer.c:805
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr ""
 
-#: sequencer.c:811
+#: sequencer.c:810
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr ""
 
-#: sequencer.c:815
+#: sequencer.c:814
 #, c-format
 msgid "unknown variable '%s'"
 msgstr ""
 
-#: sequencer.c:820
+#: sequencer.c:819
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr ""
 
-#: sequencer.c:822
+#: sequencer.c:821
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr ""
 
-#: sequencer.c:824
+#: sequencer.c:823
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr ""
 
-#: sequencer.c:884
-#, c-format
-msgid "invalid date format '%s' in '%s'"
-msgstr ""
-
-#: sequencer.c:901
+#: sequencer.c:872
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -5540,15 +5568,11 @@
 "  git rebase --continue\n"
 msgstr ""
 
-#: sequencer.c:995
-msgid "writing root commit"
-msgstr ""
-
-#: sequencer.c:1216
+#: sequencer.c:1146
 msgid "'prepare-commit-msg' hook failed"
 msgstr ""
 
-#: sequencer.c:1223
+#: sequencer.c:1153
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -5563,7 +5587,7 @@
 "    git commit --amend --reset-author\n"
 msgstr ""
 
-#: sequencer.c:1236
+#: sequencer.c:1166
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -5577,346 +5601,346 @@
 "    git commit --amend --reset-author\n"
 msgstr ""
 
-#: sequencer.c:1278
+#: sequencer.c:1208
 msgid "couldn't look up newly created commit"
 msgstr ""
 
-#: sequencer.c:1280
+#: sequencer.c:1210
 msgid "could not parse newly created commit"
 msgstr ""
 
-#: sequencer.c:1326
+#: sequencer.c:1256
 msgid "unable to resolve HEAD after creating commit"
 msgstr ""
 
-#: sequencer.c:1328
+#: sequencer.c:1258
 msgid "detached HEAD"
 msgstr ""
 
-#: sequencer.c:1332
+#: sequencer.c:1262
 msgid " (root-commit)"
 msgstr ""
 
-#: sequencer.c:1353
+#: sequencer.c:1283
 msgid "could not parse HEAD"
 msgstr ""
 
-#: sequencer.c:1355
+#: sequencer.c:1285
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr ""
 
-#: sequencer.c:1359 builtin/commit.c:1571
+#: sequencer.c:1289 builtin/commit.c:1571
 msgid "could not parse HEAD commit"
 msgstr ""
 
-#: sequencer.c:1411 sequencer.c:2004
+#: sequencer.c:1341 sequencer.c:1933
 msgid "unable to parse commit author"
 msgstr ""
 
-#: sequencer.c:1421 builtin/am.c:1573 builtin/merge.c:684
+#: sequencer.c:1352 builtin/am.c:1561 builtin/merge.c:684
 msgid "git write-tree failed to write a tree"
 msgstr ""
 
-#: sequencer.c:1438 sequencer.c:1499
+#: sequencer.c:1369 sequencer.c:1429
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr ""
 
-#: sequencer.c:1465 builtin/am.c:1595 builtin/commit.c:1670 builtin/merge.c:878
-#: builtin/merge.c:903
+#: sequencer.c:1396 builtin/am.c:1583 builtin/commit.c:1670 builtin/merge.c:883
+#: builtin/merge.c:908
 msgid "failed to write commit object"
 msgstr ""
 
-#: sequencer.c:1526
+#: sequencer.c:1456
 #, c-format
 msgid "could not parse commit %s"
 msgstr ""
 
-#: sequencer.c:1531
+#: sequencer.c:1461
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr ""
 
-#: sequencer.c:1605 sequencer.c:1715
+#: sequencer.c:1535 sequencer.c:1645
 #, c-format
 msgid "unknown command: %d"
 msgstr ""
 
-#: sequencer.c:1662 sequencer.c:1687
+#: sequencer.c:1592 sequencer.c:1617
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr ""
 
-#: sequencer.c:1672
+#: sequencer.c:1602
 msgid "need a HEAD to fixup"
 msgstr ""
 
-#: sequencer.c:1674 sequencer.c:3219
+#: sequencer.c:1604 sequencer.c:3157
 msgid "could not read HEAD"
 msgstr ""
 
-#: sequencer.c:1676
+#: sequencer.c:1606
 msgid "could not read HEAD's commit message"
 msgstr ""
 
-#: sequencer.c:1682
+#: sequencer.c:1612
 #, c-format
 msgid "cannot write '%s'"
 msgstr ""
 
-#: sequencer.c:1689 git-rebase--preserve-merges.sh:496
+#: sequencer.c:1619 git-rebase--preserve-merges.sh:496
 msgid "This is the 1st commit message:"
 msgstr ""
 
-#: sequencer.c:1697
+#: sequencer.c:1627
 #, c-format
 msgid "could not read commit message of %s"
 msgstr ""
 
-#: sequencer.c:1704
+#: sequencer.c:1634
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr ""
 
-#: sequencer.c:1710
+#: sequencer.c:1640
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr ""
 
-#: sequencer.c:1798
+#: sequencer.c:1728
 msgid "your index file is unmerged."
 msgstr ""
 
-#: sequencer.c:1805
+#: sequencer.c:1735
 msgid "cannot fixup root commit"
 msgstr ""
 
-#: sequencer.c:1824
+#: sequencer.c:1754
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr ""
 
-#: sequencer.c:1832 sequencer.c:1840
+#: sequencer.c:1762 sequencer.c:1770
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr ""
 
-#: sequencer.c:1846
+#: sequencer.c:1776
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr ""
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:1865
+#: sequencer.c:1795
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr ""
 
-#: sequencer.c:1930
+#: sequencer.c:1860
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr ""
 
-#: sequencer.c:1985
+#: sequencer.c:1915
 #, c-format
 msgid "could not revert %s... %s"
 msgstr ""
 
-#: sequencer.c:1986
+#: sequencer.c:1916
 #, c-format
 msgid "could not apply %s... %s"
 msgstr ""
 
-#: sequencer.c:2045
+#: sequencer.c:1983
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr ""
 
-#: sequencer.c:2052
+#: sequencer.c:1990
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr ""
 
-#: sequencer.c:2128
+#: sequencer.c:2066
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr ""
 
-#: sequencer.c:2137
+#: sequencer.c:2075
 #, c-format
 msgid "missing arguments for %s"
 msgstr ""
 
-#: sequencer.c:2174
+#: sequencer.c:2112
 #, c-format
 msgid "could not parse '%.*s'"
 msgstr ""
 
-#: sequencer.c:2228
+#: sequencer.c:2166
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr ""
 
-#: sequencer.c:2239
+#: sequencer.c:2177
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr ""
 
-#: sequencer.c:2287 builtin/rebase.c:153 builtin/rebase.c:178
+#: sequencer.c:2225 builtin/rebase.c:153 builtin/rebase.c:178
 #: builtin/rebase.c:204 builtin/rebase.c:229
 #, c-format
 msgid "could not read '%s'."
 msgstr ""
 
-#: sequencer.c:2323
+#: sequencer.c:2261
 msgid "cancelling a cherry picking in progress"
 msgstr ""
 
-#: sequencer.c:2330
+#: sequencer.c:2268
 msgid "cancelling a revert in progress"
 msgstr ""
 
-#: sequencer.c:2364
+#: sequencer.c:2302
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr ""
 
-#: sequencer.c:2366
+#: sequencer.c:2304
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr ""
 
-#: sequencer.c:2371
+#: sequencer.c:2309
 msgid "no commits parsed."
 msgstr ""
 
-#: sequencer.c:2382
+#: sequencer.c:2320
 msgid "cannot cherry-pick during a revert."
 msgstr ""
 
-#: sequencer.c:2384
+#: sequencer.c:2322
 msgid "cannot revert during a cherry-pick."
 msgstr ""
 
-#: sequencer.c:2466
+#: sequencer.c:2404
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr ""
 
-#: sequencer.c:2553
+#: sequencer.c:2491
 msgid "unusable squash-onto"
 msgstr ""
 
-#: sequencer.c:2569
+#: sequencer.c:2507
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr ""
 
-#: sequencer.c:2652 sequencer.c:4351
+#: sequencer.c:2590 sequencer.c:4308
 msgid "empty commit set passed"
 msgstr ""
 
-#: sequencer.c:2668
+#: sequencer.c:2606
 msgid "revert is already in progress"
 msgstr ""
 
-#: sequencer.c:2670
+#: sequencer.c:2608
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr ""
 
-#: sequencer.c:2673
+#: sequencer.c:2611
 msgid "cherry-pick is already in progress"
 msgstr ""
 
-#: sequencer.c:2675
+#: sequencer.c:2613
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr ""
 
-#: sequencer.c:2689
+#: sequencer.c:2627
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr ""
 
-#: sequencer.c:2704
+#: sequencer.c:2642
 msgid "could not lock HEAD"
 msgstr ""
 
-#: sequencer.c:2764 sequencer.c:4103
+#: sequencer.c:2702 sequencer.c:4057
 msgid "no cherry-pick or revert in progress"
 msgstr ""
 
-#: sequencer.c:2766 sequencer.c:2777
+#: sequencer.c:2704 sequencer.c:2715
 msgid "cannot resolve HEAD"
 msgstr ""
 
-#: sequencer.c:2768 sequencer.c:2812
+#: sequencer.c:2706 sequencer.c:2750
 msgid "cannot abort from a branch yet to be born"
 msgstr ""
 
-#: sequencer.c:2798 builtin/grep.c:734
+#: sequencer.c:2736 builtin/grep.c:736
 #, c-format
 msgid "cannot open '%s'"
 msgstr ""
 
-#: sequencer.c:2800
+#: sequencer.c:2738
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr ""
 
-#: sequencer.c:2801
+#: sequencer.c:2739
 msgid "unexpected end of file"
 msgstr ""
 
-#: sequencer.c:2807
+#: sequencer.c:2745
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr ""
 
-#: sequencer.c:2818
+#: sequencer.c:2756
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr ""
 
-#: sequencer.c:2859
+#: sequencer.c:2797
 msgid "no revert in progress"
 msgstr ""
 
-#: sequencer.c:2867
+#: sequencer.c:2805
 msgid "no cherry-pick in progress"
 msgstr ""
 
-#: sequencer.c:2877
+#: sequencer.c:2815
 msgid "failed to skip the commit"
 msgstr ""
 
-#: sequencer.c:2884
+#: sequencer.c:2822
 msgid "there is nothing to skip"
 msgstr ""
 
-#: sequencer.c:2887
+#: sequencer.c:2825
 #, c-format
 msgid ""
 "have you committed already?\n"
 "try \"git %s --continue\""
 msgstr ""
 
-#: sequencer.c:3011 sequencer.c:4015
+#: sequencer.c:2949 sequencer.c:3969
 #, c-format
 msgid "could not update %s"
 msgstr ""
 
-#: sequencer.c:3049 sequencer.c:3995
+#: sequencer.c:2987 sequencer.c:3949
 msgid "cannot read HEAD"
 msgstr ""
 
-#: sequencer.c:3066
+#: sequencer.c:3004
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr ""
 
-#: sequencer.c:3074
+#: sequencer.c:3012
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -5928,27 +5952,27 @@
 "  git rebase --continue\n"
 msgstr ""
 
-#: sequencer.c:3084
+#: sequencer.c:3022
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr ""
 
-#: sequencer.c:3091
+#: sequencer.c:3029
 #, c-format
 msgid "Could not merge %.*s"
 msgstr ""
 
-#: sequencer.c:3105 sequencer.c:3109 builtin/difftool.c:633
+#: sequencer.c:3043 sequencer.c:3047 builtin/difftool.c:641
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr ""
 
-#: sequencer.c:3131 sequencer.c:3558 builtin/rebase.c:849 builtin/rebase.c:1582
-#: builtin/rebase.c:1953 builtin/rebase.c:2008
+#: sequencer.c:3069 sequencer.c:3506 builtin/rebase.c:850 builtin/rebase.c:1613
+#: builtin/rebase.c:1987 builtin/rebase.c:2031
 msgid "could not read index"
 msgstr ""
 
-#: sequencer.c:3136
+#: sequencer.c:3074
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -5958,11 +5982,11 @@
 "\n"
 msgstr ""
 
-#: sequencer.c:3142
+#: sequencer.c:3080
 msgid "and made changes to the index and/or the working tree\n"
 msgstr ""
 
-#: sequencer.c:3148
+#: sequencer.c:3086
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -5973,76 +5997,76 @@
 "\n"
 msgstr ""
 
-#: sequencer.c:3209
+#: sequencer.c:3147
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr ""
 
-#: sequencer.c:3263
+#: sequencer.c:3201
 msgid "writing fake root commit"
 msgstr ""
 
-#: sequencer.c:3268
+#: sequencer.c:3206
 msgid "writing squash-onto"
 msgstr ""
 
-#: sequencer.c:3306 builtin/rebase.c:854 builtin/rebase.c:860
+#: sequencer.c:3244 builtin/rebase.c:855 builtin/rebase.c:861
 #, c-format
 msgid "failed to find tree of %s"
 msgstr ""
 
-#: sequencer.c:3324 builtin/rebase.c:873
+#: sequencer.c:3262 builtin/rebase.c:874
 msgid "could not write index"
 msgstr ""
 
-#: sequencer.c:3351
+#: sequencer.c:3289
 #, c-format
 msgid "could not resolve '%s'"
 msgstr ""
 
-#: sequencer.c:3379
+#: sequencer.c:3320
 msgid "cannot merge without a current revision"
 msgstr ""
 
-#: sequencer.c:3401
+#: sequencer.c:3342
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr ""
 
-#: sequencer.c:3410
+#: sequencer.c:3351
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr ""
 
-#: sequencer.c:3422
+#: sequencer.c:3363
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr ""
 
-#: sequencer.c:3437
+#: sequencer.c:3378
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr ""
 
-#: sequencer.c:3590
+#: sequencer.c:3538
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr ""
 
-#: sequencer.c:3606
+#: sequencer.c:3554
 msgid "merge: Unable to write new index file"
 msgstr ""
 
-#: sequencer.c:3675 builtin/rebase.c:711
+#: sequencer.c:3623 builtin/rebase.c:712
 #, c-format
 msgid "Applied autostash.\n"
 msgstr ""
 
-#: sequencer.c:3687
+#: sequencer.c:3635
 #, c-format
 msgid "cannot store %s"
 msgstr ""
 
-#: sequencer.c:3690 builtin/rebase.c:727 git-rebase--preserve-merges.sh:113
+#: sequencer.c:3638 builtin/rebase.c:728 git-rebase--preserve-merges.sh:113
 #, c-format
 msgid ""
 "Applying autostash resulted in conflicts.\n"
@@ -6050,31 +6074,31 @@
 "You can run \"git stash pop\" or \"git stash drop\" at any time.\n"
 msgstr ""
 
-#: sequencer.c:3751
+#: sequencer.c:3699
 #, c-format
 msgid "could not checkout %s"
 msgstr ""
 
-#: sequencer.c:3765
+#: sequencer.c:3713
 #, c-format
 msgid "%s: not a valid OID"
 msgstr ""
 
-#: sequencer.c:3770 git-rebase--preserve-merges.sh:779
+#: sequencer.c:3718 git-rebase--preserve-merges.sh:779
 msgid "could not detach HEAD"
 msgstr ""
 
-#: sequencer.c:3785
+#: sequencer.c:3733
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr ""
 
-#: sequencer.c:3787
+#: sequencer.c:3735
 #, c-format
 msgid "Stopped at %s\n"
 msgstr ""
 
-#: sequencer.c:3795
+#: sequencer.c:3743
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -6087,121 +6111,121 @@
 "    git rebase --continue\n"
 msgstr ""
 
-#: sequencer.c:3877
+#: sequencer.c:3827
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr ""
 
-#: sequencer.c:3958
+#: sequencer.c:3898
 #, c-format
 msgid "unknown command %d"
 msgstr ""
 
-#: sequencer.c:4003
+#: sequencer.c:3957
 msgid "could not read orig-head"
 msgstr ""
 
-#: sequencer.c:4008
+#: sequencer.c:3962
 msgid "could not read 'onto'"
 msgstr ""
 
-#: sequencer.c:4022
+#: sequencer.c:3976
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr ""
 
-#: sequencer.c:4115
+#: sequencer.c:4069
 msgid "cannot rebase: You have unstaged changes."
 msgstr ""
 
-#: sequencer.c:4124
+#: sequencer.c:4078
 msgid "cannot amend non-existing commit"
 msgstr ""
 
-#: sequencer.c:4126
+#: sequencer.c:4080
 #, c-format
 msgid "invalid file: '%s'"
 msgstr ""
 
-#: sequencer.c:4128
+#: sequencer.c:4082
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr ""
 
-#: sequencer.c:4131
+#: sequencer.c:4085
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
 "first and then run 'git rebase --continue' again."
 msgstr ""
 
-#: sequencer.c:4167 sequencer.c:4205
+#: sequencer.c:4121 sequencer.c:4159
 #, c-format
 msgid "could not write file: '%s'"
 msgstr ""
 
-#: sequencer.c:4220
+#: sequencer.c:4174
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr ""
 
-#: sequencer.c:4227
+#: sequencer.c:4181
 msgid "could not commit staged changes."
 msgstr ""
 
-#: sequencer.c:4328
+#: sequencer.c:4285
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr ""
 
-#: sequencer.c:4332
+#: sequencer.c:4289
 #, c-format
 msgid "%s: bad revision"
 msgstr ""
 
-#: sequencer.c:4367
+#: sequencer.c:4324
 msgid "can't revert as initial commit"
 msgstr ""
 
-#: sequencer.c:4810
+#: sequencer.c:4774
 msgid "make_script: unhandled options"
 msgstr ""
 
-#: sequencer.c:4813
+#: sequencer.c:4777
 msgid "make_script: error preparing revisions"
 msgstr ""
 
-#: sequencer.c:4971
+#: sequencer.c:4935
 msgid ""
 "You can fix this with 'git rebase --edit-todo' and then run 'git rebase --"
 "continue'.\n"
 "Or you can abort the rebase with 'git rebase --abort'.\n"
 msgstr ""
 
-#: sequencer.c:5083 sequencer.c:5100
+#: sequencer.c:5047 sequencer.c:5064
 msgid "nothing to do"
 msgstr ""
 
-#: sequencer.c:5114
+#: sequencer.c:5078
 msgid "could not skip unnecessary pick commands"
 msgstr ""
 
-#: sequencer.c:5197
+#: sequencer.c:5166
 msgid "the script was already rearranged."
 msgstr ""
 
-#: setup.c:123
+#: setup.c:124
 #, c-format
 msgid "'%s' is outside repository"
 msgstr ""
 
-#: setup.c:173
+#: setup.c:174
 #, c-format
 msgid ""
 "%s: no such path in the working tree.\n"
 "Use 'git <command> -- <path>...' to specify paths that do not exist locally."
 msgstr ""
 
-#: setup.c:186
+#: setup.c:187
 #, c-format
 msgid ""
 "ambiguous argument '%s': unknown revision or path not in the working tree.\n"
@@ -6209,12 +6233,12 @@
 "'git <command> [<revision>...] -- [<file>...]'"
 msgstr ""
 
-#: setup.c:235
+#: setup.c:236
 #, c-format
 msgid "option '%s' must come before non-option arguments"
 msgstr ""
 
-#: setup.c:254
+#: setup.c:255
 #, c-format
 msgid ""
 "ambiguous argument '%s': both revision and filename\n"
@@ -6222,381 +6246,381 @@
 "'git <command> [<revision>...] -- [<file>...]'"
 msgstr ""
 
-#: setup.c:390
+#: setup.c:391
 msgid "unable to set up work tree using invalid config"
 msgstr ""
 
-#: setup.c:394
+#: setup.c:395
 msgid "this operation must be run in a work tree"
 msgstr ""
 
-#: setup.c:540
+#: setup.c:541
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
 msgstr ""
 
-#: setup.c:548
+#: setup.c:549
 msgid "unknown repository extensions found:"
 msgstr ""
 
-#: setup.c:567
+#: setup.c:568
 #, c-format
 msgid "error opening '%s'"
 msgstr ""
 
-#: setup.c:569
+#: setup.c:570
 #, c-format
 msgid "too large to be a .git file: '%s'"
 msgstr ""
 
-#: setup.c:571
+#: setup.c:572
 #, c-format
 msgid "error reading %s"
 msgstr ""
 
-#: setup.c:573
+#: setup.c:574
 #, c-format
 msgid "invalid gitfile format: %s"
 msgstr ""
 
-#: setup.c:575
+#: setup.c:576
 #, c-format
 msgid "no path in gitfile: %s"
 msgstr ""
 
-#: setup.c:577
+#: setup.c:578
 #, c-format
 msgid "not a git repository: %s"
 msgstr ""
 
-#: setup.c:676
+#: setup.c:677
 #, c-format
 msgid "'$%s' too big"
 msgstr ""
 
-#: setup.c:690
+#: setup.c:691
 #, c-format
 msgid "not a git repository: '%s'"
 msgstr ""
 
-#: setup.c:719 setup.c:721 setup.c:752
+#: setup.c:720 setup.c:722 setup.c:753
 #, c-format
 msgid "cannot chdir to '%s'"
 msgstr ""
 
-#: setup.c:724 setup.c:780 setup.c:790 setup.c:829 setup.c:837
+#: setup.c:725 setup.c:781 setup.c:791 setup.c:830 setup.c:838
 msgid "cannot come back to cwd"
 msgstr ""
 
-#: setup.c:851
+#: setup.c:852
 #, c-format
 msgid "failed to stat '%*s%s%s'"
 msgstr ""
 
-#: setup.c:1083
+#: setup.c:1090
 msgid "Unable to read current working directory"
 msgstr ""
 
-#: setup.c:1092 setup.c:1098
+#: setup.c:1099 setup.c:1105
 #, c-format
 msgid "cannot change to '%s'"
 msgstr ""
 
-#: setup.c:1103
+#: setup.c:1110
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
 msgstr ""
 
-#: setup.c:1109
+#: setup.c:1116
 #, c-format
 msgid ""
 "not a git repository (or any parent up to mount point %s)\n"
 "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."
 msgstr ""
 
-#: setup.c:1220
+#: setup.c:1227
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
 "The owner of files must always have read and write permissions."
 msgstr ""
 
-#: setup.c:1264
+#: setup.c:1271
 msgid "open /dev/null or dup failed"
 msgstr ""
 
-#: setup.c:1279
+#: setup.c:1286
 msgid "fork failed"
 msgstr ""
 
-#: setup.c:1284
+#: setup.c:1291
 msgid "setsid failed"
 msgstr ""
 
-#: sha1-file.c:453
+#: sha1-file.c:452
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr ""
 
-#: sha1-file.c:504
+#: sha1-file.c:503
 #, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr ""
 
-#: sha1-file.c:576
+#: sha1-file.c:575
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr ""
 
-#: sha1-file.c:583
+#: sha1-file.c:582
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr ""
 
-#: sha1-file.c:626
+#: sha1-file.c:625
 msgid "unable to fdopen alternates lockfile"
 msgstr ""
 
-#: sha1-file.c:644
+#: sha1-file.c:643
 msgid "unable to read alternates file"
 msgstr ""
 
-#: sha1-file.c:651
+#: sha1-file.c:650
 msgid "unable to move new alternates file into place"
 msgstr ""
 
-#: sha1-file.c:686
+#: sha1-file.c:685
 #, c-format
 msgid "path '%s' does not exist"
 msgstr ""
 
-#: sha1-file.c:712
+#: sha1-file.c:711
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr ""
 
-#: sha1-file.c:718
+#: sha1-file.c:717
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr ""
 
-#: sha1-file.c:724
+#: sha1-file.c:723
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr ""
 
-#: sha1-file.c:732
+#: sha1-file.c:731
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr ""
 
-#: sha1-file.c:792
+#: sha1-file.c:791
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr ""
 
-#: sha1-file.c:944
+#: sha1-file.c:943
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr ""
 
-#: sha1-file.c:969
+#: sha1-file.c:964
 msgid "mmap failed"
 msgstr ""
 
-#: sha1-file.c:1133
+#: sha1-file.c:1128
 #, c-format
 msgid "object file %s is empty"
 msgstr ""
 
-#: sha1-file.c:1257 sha1-file.c:2396
+#: sha1-file.c:1252 sha1-file.c:2392
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr ""
 
-#: sha1-file.c:1259 sha1-file.c:2400
+#: sha1-file.c:1254 sha1-file.c:2396
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr ""
 
-#: sha1-file.c:1301
+#: sha1-file.c:1296
 msgid "invalid object type"
 msgstr ""
 
-#: sha1-file.c:1385
+#: sha1-file.c:1380
 #, c-format
 msgid "unable to unpack %s header with --allow-unknown-type"
 msgstr ""
 
-#: sha1-file.c:1388
+#: sha1-file.c:1383
 #, c-format
 msgid "unable to unpack %s header"
 msgstr ""
 
-#: sha1-file.c:1394
+#: sha1-file.c:1389
 #, c-format
 msgid "unable to parse %s header with --allow-unknown-type"
 msgstr ""
 
-#: sha1-file.c:1397
+#: sha1-file.c:1392
 #, c-format
 msgid "unable to parse %s header"
 msgstr ""
 
-#: sha1-file.c:1588
+#: sha1-file.c:1584
 #, c-format
 msgid "failed to read object %s"
 msgstr ""
 
-#: sha1-file.c:1592
+#: sha1-file.c:1588
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr ""
 
-#: sha1-file.c:1596
+#: sha1-file.c:1592
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr ""
 
-#: sha1-file.c:1600
+#: sha1-file.c:1596
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr ""
 
-#: sha1-file.c:1703
+#: sha1-file.c:1699
 #, c-format
 msgid "unable to write file %s"
 msgstr ""
 
-#: sha1-file.c:1710
+#: sha1-file.c:1706
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr ""
 
-#: sha1-file.c:1717
+#: sha1-file.c:1713
 msgid "file write error"
 msgstr ""
 
-#: sha1-file.c:1736
+#: sha1-file.c:1732
 msgid "error when closing loose object file"
 msgstr ""
 
-#: sha1-file.c:1801
+#: sha1-file.c:1797
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr ""
 
-#: sha1-file.c:1803
+#: sha1-file.c:1799
 msgid "unable to create temporary file"
 msgstr ""
 
-#: sha1-file.c:1827
+#: sha1-file.c:1823
 msgid "unable to write loose object file"
 msgstr ""
 
-#: sha1-file.c:1833
+#: sha1-file.c:1829
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr ""
 
-#: sha1-file.c:1837
+#: sha1-file.c:1833
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr ""
 
-#: sha1-file.c:1841
+#: sha1-file.c:1837
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr ""
 
-#: sha1-file.c:1851 builtin/pack-objects.c:925
+#: sha1-file.c:1847 builtin/pack-objects.c:925
 #, c-format
 msgid "failed utime() on %s"
 msgstr ""
 
-#: sha1-file.c:1926
+#: sha1-file.c:1922
 #, c-format
 msgid "cannot read object for %s"
 msgstr ""
 
-#: sha1-file.c:1966
+#: sha1-file.c:1962
 msgid "corrupt commit"
 msgstr ""
 
-#: sha1-file.c:1974
+#: sha1-file.c:1970
 msgid "corrupt tag"
 msgstr ""
 
-#: sha1-file.c:2073
+#: sha1-file.c:2069
 #, c-format
 msgid "read error while indexing %s"
 msgstr ""
 
-#: sha1-file.c:2076
+#: sha1-file.c:2072
 #, c-format
 msgid "short read while indexing %s"
 msgstr ""
 
-#: sha1-file.c:2149 sha1-file.c:2158
+#: sha1-file.c:2145 sha1-file.c:2154
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr ""
 
-#: sha1-file.c:2164
+#: sha1-file.c:2160
 #, c-format
 msgid "%s: unsupported file type"
 msgstr ""
 
-#: sha1-file.c:2188
+#: sha1-file.c:2184
 #, c-format
 msgid "%s is not a valid object"
 msgstr ""
 
-#: sha1-file.c:2190
+#: sha1-file.c:2186
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr ""
 
-#: sha1-file.c:2217 builtin/index-pack.c:155
+#: sha1-file.c:2213 builtin/index-pack.c:155
 #, c-format
 msgid "unable to open %s"
 msgstr ""
 
-#: sha1-file.c:2407 sha1-file.c:2459
+#: sha1-file.c:2403 sha1-file.c:2455
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr ""
 
-#: sha1-file.c:2431
+#: sha1-file.c:2427
 #, c-format
 msgid "unable to mmap %s"
 msgstr ""
 
-#: sha1-file.c:2436
+#: sha1-file.c:2432
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr ""
 
-#: sha1-file.c:2442
+#: sha1-file.c:2438
 #, c-format
 msgid "unable to parse header of %s"
 msgstr ""
 
-#: sha1-file.c:2453
+#: sha1-file.c:2449
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr ""
 
-#: sha1-name.c:490
+#: sha1-name.c:487
 #, c-format
 msgid "short SHA1 %s is ambiguous"
 msgstr ""
 
-#: sha1-name.c:501
+#: sha1-name.c:498
 msgid "The candidates are:"
 msgstr ""
 
-#: sha1-name.c:800
+#: sha1-name.c:797
 msgid ""
 "Git normally never creates a ref that ends with 40 hex characters\n"
 "because it will be ignored when you just specify 40-hex. These refs\n"
@@ -6610,43 +6634,43 @@
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:821
+#: strbuf.c:822
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:823
+#: strbuf.c:824
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:831
+#: strbuf.c:832
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:833
+#: strbuf.c:834
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:840
+#: strbuf.c:841
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:842
+#: strbuf.c:843
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:848
+#: strbuf.c:849
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -6654,7 +6678,7 @@
 msgstr[1] ""
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:850
+#: strbuf.c:851
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
@@ -6766,26 +6790,26 @@
 msgid "ls-tree returned unexpected return code %d"
 msgstr ""
 
-#: submodule-config.c:232
+#: submodule-config.c:236
 #, c-format
 msgid "ignoring suspicious submodule name: %s"
 msgstr ""
 
-#: submodule-config.c:299
+#: submodule-config.c:303
 msgid "negative values not allowed for submodule.fetchjobs"
 msgstr ""
 
-#: submodule-config.c:397
+#: submodule-config.c:401
 #, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
 msgstr ""
 
-#: submodule-config.c:486
+#: submodule-config.c:490
 #, c-format
 msgid "invalid value for %s"
 msgstr ""
 
-#: submodule-config.c:755
+#: submodule-config.c:761
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr ""
@@ -6820,7 +6844,7 @@
 msgid "could not read from stdin"
 msgstr ""
 
-#: trailer.c:1011 wrapper.c:701
+#: trailer.c:1011 wrapper.c:665
 #, c-format
 msgid "could not stat %s"
 msgstr ""
@@ -6849,54 +6873,54 @@
 msgid "Would set upstream of '%s' to '%s' of '%s'\n"
 msgstr ""
 
-#: transport.c:142
+#: transport.c:145
 #, c-format
 msgid "could not read bundle '%s'"
 msgstr ""
 
-#: transport.c:208
+#: transport.c:214
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr ""
 
-#: transport.c:259
+#: transport.c:266
 msgid "see protocol.version in 'git help config' for more details"
 msgstr ""
 
-#: transport.c:260
+#: transport.c:267
 msgid "server options require protocol version 2 or later"
 msgstr ""
 
-#: transport.c:625
+#: transport.c:632
 msgid "could not parse transport.color.* config"
 msgstr ""
 
-#: transport.c:698
+#: transport.c:705
 msgid "support for protocol v2 not implemented yet"
 msgstr ""
 
-#: transport.c:825
+#: transport.c:831
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr ""
 
-#: transport.c:891
+#: transport.c:897
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr ""
 
-#: transport.c:945
+#: transport.c:949
 msgid "git-over-rsync is no longer supported"
 msgstr ""
 
-#: transport.c:1040
+#: transport.c:1044
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
 "not be found on any remote:\n"
 msgstr ""
 
-#: transport.c:1044
+#: transport.c:1048
 #, c-format
 msgid ""
 "\n"
@@ -6912,178 +6936,183 @@
 "\n"
 msgstr ""
 
-#: transport.c:1052
+#: transport.c:1056
 msgid "Aborting."
 msgstr ""
 
-#: transport.c:1193
+#: transport.c:1201
 msgid "failed to push all needed submodules"
 msgstr ""
 
-#: transport.c:1340 transport-helper.c:645
+#: transport.c:1345 transport-helper.c:655
 msgid "operation not supported by protocol"
 msgstr ""
 
-#: transport-helper.c:51 transport-helper.c:80
+#: transport-helper.c:61 transport-helper.c:90
 msgid "full write to remote helper failed"
 msgstr ""
 
-#: transport-helper.c:134
+#: transport-helper.c:144
 #, c-format
 msgid "unable to find remote helper for '%s'"
 msgstr ""
 
-#: transport-helper.c:150 transport-helper.c:559
+#: transport-helper.c:160 transport-helper.c:569
 msgid "can't dup helper output fd"
 msgstr ""
 
-#: transport-helper.c:201
+#: transport-helper.c:211
 #, c-format
 msgid ""
 "unknown mandatory capability %s; this remote helper probably needs newer "
 "version of Git"
 msgstr ""
 
-#: transport-helper.c:207
+#: transport-helper.c:217
 msgid "this remote helper should implement refspec capability"
 msgstr ""
 
-#: transport-helper.c:274 transport-helper.c:414
+#: transport-helper.c:284 transport-helper.c:424
 #, c-format
 msgid "%s unexpectedly said: '%s'"
 msgstr ""
 
-#: transport-helper.c:403
+#: transport-helper.c:413
 #, c-format
 msgid "%s also locked %s"
 msgstr ""
 
-#: transport-helper.c:481
+#: transport-helper.c:491
 msgid "couldn't run fast-import"
 msgstr ""
 
-#: transport-helper.c:504
+#: transport-helper.c:514
 msgid "error while running fast-import"
 msgstr ""
 
-#: transport-helper.c:533 transport-helper.c:1105
+#: transport-helper.c:543 transport-helper.c:1132
 #, c-format
 msgid "could not read ref %s"
 msgstr ""
 
-#: transport-helper.c:578
+#: transport-helper.c:588
 #, c-format
 msgid "unknown response to connect: %s"
 msgstr ""
 
-#: transport-helper.c:600
+#: transport-helper.c:610
 msgid "setting remote service path not supported by protocol"
 msgstr ""
 
-#: transport-helper.c:602
+#: transport-helper.c:612
 msgid "invalid remote service path"
 msgstr ""
 
-#: transport-helper.c:648
+#: transport-helper.c:658
 #, c-format
 msgid "can't connect to subservice %s"
 msgstr ""
 
-#: transport-helper.c:720
+#: transport-helper.c:734
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr ""
 
-#: transport-helper.c:773
+#: transport-helper.c:787
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr ""
 
-#: transport-helper.c:834
+#: transport-helper.c:848
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr ""
 
-#: transport-helper.c:837
+#: transport-helper.c:851
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr ""
 
-#: transport-helper.c:840
+#: transport-helper.c:854
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr ""
 
-#: transport-helper.c:847
+#: transport-helper.c:859
+#, c-format
+msgid "helper %s does not support --atomic"
+msgstr ""
+
+#: transport-helper.c:865
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr ""
 
-#: transport-helper.c:945
+#: transport-helper.c:963
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr ""
 
-#: transport-helper.c:950
+#: transport-helper.c:968
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr ""
 
-#: transport-helper.c:997
+#: transport-helper.c:1015
 msgid "couldn't run fast-export"
 msgstr ""
 
-#: transport-helper.c:1002
+#: transport-helper.c:1020
 msgid "error while running fast-export"
 msgstr ""
 
-#: transport-helper.c:1027
+#: transport-helper.c:1045
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
 "Perhaps you should specify a branch such as 'master'.\n"
 msgstr ""
 
-#: transport-helper.c:1091
+#: transport-helper.c:1118
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr ""
 
-#: transport-helper.c:1244
+#: transport-helper.c:1270
 #, c-format
 msgid "read(%s) failed"
 msgstr ""
 
-#: transport-helper.c:1271
+#: transport-helper.c:1297
 #, c-format
 msgid "write(%s) failed"
 msgstr ""
 
-#: transport-helper.c:1320
+#: transport-helper.c:1346
 #, c-format
 msgid "%s thread failed"
 msgstr ""
 
-#: transport-helper.c:1324
+#: transport-helper.c:1350
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr ""
 
-#: transport-helper.c:1343 transport-helper.c:1347
+#: transport-helper.c:1369 transport-helper.c:1373
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr ""
 
-#: transport-helper.c:1384
+#: transport-helper.c:1410
 #, c-format
 msgid "%s process failed to wait"
 msgstr ""
 
-#: transport-helper.c:1388
+#: transport-helper.c:1414
 #, c-format
 msgid "%s process failed"
 msgstr ""
 
-#: transport-helper.c:1406 transport-helper.c:1415
+#: transport-helper.c:1432 transport-helper.c:1441
 msgid "can't start thread for copying data"
 msgstr ""
 
@@ -7103,98 +7132,98 @@
 msgid "too-short tree file"
 msgstr ""
 
-#: unpack-trees.c:111
+#: unpack-trees.c:110
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
 "%%sPlease commit your changes or stash them before you switch branches."
 msgstr ""
 
-#: unpack-trees.c:113
+#: unpack-trees.c:112
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
 "%%s"
 msgstr ""
 
-#: unpack-trees.c:116
+#: unpack-trees.c:115
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
 "%%sPlease commit your changes or stash them before you merge."
 msgstr ""
 
-#: unpack-trees.c:118
+#: unpack-trees.c:117
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
 "%%s"
 msgstr ""
 
-#: unpack-trees.c:121
+#: unpack-trees.c:120
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
 "%%sPlease commit your changes or stash them before you %s."
 msgstr ""
 
-#: unpack-trees.c:123
+#: unpack-trees.c:122
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
 "%%s"
 msgstr ""
 
-#: unpack-trees.c:128
+#: unpack-trees.c:127
 #, c-format
 msgid ""
 "Updating the following directories would lose untracked files in them:\n"
 "%s"
 msgstr ""
 
-#: unpack-trees.c:132
+#: unpack-trees.c:131
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
 "%%sPlease move or remove them before you switch branches."
 msgstr ""
 
-#: unpack-trees.c:134
+#: unpack-trees.c:133
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
 "%%s"
 msgstr ""
 
-#: unpack-trees.c:137
+#: unpack-trees.c:136
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
 "%%sPlease move or remove them before you merge."
 msgstr ""
 
-#: unpack-trees.c:139
+#: unpack-trees.c:138
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
 "%%s"
 msgstr ""
 
-#: unpack-trees.c:142
+#: unpack-trees.c:141
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
 "%%sPlease move or remove them before you %s."
 msgstr ""
 
-#: unpack-trees.c:144
+#: unpack-trees.c:143
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
 "%%s"
 msgstr ""
 
-#: unpack-trees.c:150
+#: unpack-trees.c:149
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -7202,7 +7231,7 @@
 "%%sPlease move or remove them before you switch branches."
 msgstr ""
 
-#: unpack-trees.c:152
+#: unpack-trees.c:151
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -7210,47 +7239,47 @@
 "%%s"
 msgstr ""
 
-#: unpack-trees.c:155
+#: unpack-trees.c:154
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
 "%%sPlease move or remove them before you merge."
 msgstr ""
 
-#: unpack-trees.c:157
+#: unpack-trees.c:156
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
 "%%s"
 msgstr ""
 
-#: unpack-trees.c:160
+#: unpack-trees.c:159
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
 "%%sPlease move or remove them before you %s."
 msgstr ""
 
-#: unpack-trees.c:162
+#: unpack-trees.c:161
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
 "%%s"
 msgstr ""
 
-#: unpack-trees.c:170
+#: unpack-trees.c:169
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
 msgstr ""
 
-#: unpack-trees.c:173
+#: unpack-trees.c:172
 #, c-format
 msgid ""
 "Cannot update sparse checkout: the following entries are not up to date:\n"
 "%s"
 msgstr ""
 
-#: unpack-trees.c:175
+#: unpack-trees.c:174
 #, c-format
 msgid ""
 "The following working tree files would be overwritten by sparse checkout "
@@ -7258,7 +7287,7 @@
 "%s"
 msgstr ""
 
-#: unpack-trees.c:177
+#: unpack-trees.c:176
 #, c-format
 msgid ""
 "The following working tree files would be removed by sparse checkout "
@@ -7266,23 +7295,23 @@
 "%s"
 msgstr ""
 
-#: unpack-trees.c:179
+#: unpack-trees.c:178
 #, c-format
 msgid ""
 "Cannot update submodule:\n"
 "%s"
 msgstr ""
 
-#: unpack-trees.c:256
+#: unpack-trees.c:255
 #, c-format
 msgid "Aborting\n"
 msgstr ""
 
-#: unpack-trees.c:318
+#: unpack-trees.c:317
 msgid "Updating files"
 msgstr ""
 
-#: unpack-trees.c:350
+#: unpack-trees.c:349
 msgid ""
 "the following paths have collided (e.g. case-sensitive paths\n"
 "on a case-insensitive filesystem) and only one from the same\n"
@@ -7318,7 +7347,7 @@
 msgid "invalid '..' path segment"
 msgstr ""
 
-#: worktree.c:258 builtin/am.c:2095
+#: worktree.c:258 builtin/am.c:2084
 #, c-format
 msgid "failed to read '%s'"
 msgstr ""
@@ -7348,17 +7377,17 @@
 msgid "'%s' does not point back to '%s'"
 msgstr ""
 
-#: wrapper.c:223 wrapper.c:393
+#: wrapper.c:186 wrapper.c:356
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr ""
 
-#: wrapper.c:424 wrapper.c:624
+#: wrapper.c:387 wrapper.c:588
 #, c-format
 msgid "unable to access '%s'"
 msgstr ""
 
-#: wrapper.c:632
+#: wrapper.c:596
 msgid "unable to get current working directory"
 msgstr ""
 
@@ -7676,80 +7705,88 @@
 msgstr ""
 
 #: wt-status.c:1437
+msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
+msgstr ""
+
+#: wt-status.c:1439
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr ""
 
-#: wt-status.c:1447
+#: wt-status.c:1449
 msgid "Revert currently in progress."
 msgstr ""
 
-#: wt-status.c:1450
+#: wt-status.c:1452
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr ""
 
-#: wt-status.c:1456
+#: wt-status.c:1458
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr ""
 
-#: wt-status.c:1459
+#: wt-status.c:1461
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr ""
 
-#: wt-status.c:1462
+#: wt-status.c:1464
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr ""
 
-#: wt-status.c:1464
+#: wt-status.c:1466
+msgid "  (use \"git revert --skip\" to skip this patch)"
+msgstr ""
+
+#: wt-status.c:1468
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr ""
 
-#: wt-status.c:1474
+#: wt-status.c:1478
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr ""
 
-#: wt-status.c:1478
+#: wt-status.c:1482
 msgid "You are currently bisecting."
 msgstr ""
 
-#: wt-status.c:1481
+#: wt-status.c:1485
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr ""
 
-#: wt-status.c:1690
+#: wt-status.c:1694
 msgid "On branch "
 msgstr ""
 
-#: wt-status.c:1697
+#: wt-status.c:1701
 msgid "interactive rebase in progress; onto "
 msgstr ""
 
-#: wt-status.c:1699
+#: wt-status.c:1703
 msgid "rebase in progress; onto "
 msgstr ""
 
-#: wt-status.c:1709
+#: wt-status.c:1713
 msgid "Not currently on any branch."
 msgstr ""
 
-#: wt-status.c:1726
+#: wt-status.c:1730
 msgid "Initial commit"
 msgstr ""
 
-#: wt-status.c:1727
+#: wt-status.c:1731
 msgid "No commits yet"
 msgstr ""
 
-#: wt-status.c:1741
+#: wt-status.c:1745
 msgid "Untracked files"
 msgstr ""
 
-#: wt-status.c:1743
+#: wt-status.c:1747
 msgid "Ignored files"
 msgstr ""
 
-#: wt-status.c:1747
+#: wt-status.c:1751
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -7757,96 +7794,101 @@
 "new files yourself (see 'git help status')."
 msgstr ""
 
-#: wt-status.c:1753
+#: wt-status.c:1757
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr ""
 
-#: wt-status.c:1755
+#: wt-status.c:1759
 msgid " (use -u option to show untracked files)"
 msgstr ""
 
-#: wt-status.c:1761
+#: wt-status.c:1765
 msgid "No changes"
 msgstr ""
 
-#: wt-status.c:1766
+#: wt-status.c:1770
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 
-#: wt-status.c:1769
+#: wt-status.c:1773
 #, c-format
 msgid "no changes added to commit\n"
 msgstr ""
 
-#: wt-status.c:1772
+#: wt-status.c:1776
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
 "track)\n"
 msgstr ""
 
-#: wt-status.c:1775
+#: wt-status.c:1779
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr ""
 
-#: wt-status.c:1778
+#: wt-status.c:1782
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr ""
 
-#: wt-status.c:1781 wt-status.c:1786
+#: wt-status.c:1785 wt-status.c:1790
 #, c-format
 msgid "nothing to commit\n"
 msgstr ""
 
-#: wt-status.c:1784
+#: wt-status.c:1788
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr ""
 
-#: wt-status.c:1788
+#: wt-status.c:1792
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr ""
 
-#: wt-status.c:1901
+#: wt-status.c:1905
 msgid "No commits yet on "
 msgstr ""
 
-#: wt-status.c:1905
+#: wt-status.c:1909
 msgid "HEAD (no branch)"
 msgstr ""
 
-#: wt-status.c:1936
+#: wt-status.c:1940
 msgid "different"
 msgstr ""
 
-#: wt-status.c:1938 wt-status.c:1946
+#: wt-status.c:1942 wt-status.c:1950
 msgid "behind "
 msgstr ""
 
-#: wt-status.c:1941 wt-status.c:1944
+#: wt-status.c:1945 wt-status.c:1948
 msgid "ahead "
 msgstr ""
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2466
+#: wt-status.c:2470
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr ""
 
-#: wt-status.c:2472
+#: wt-status.c:2476
 msgid "additionally, your index contains uncommitted changes."
 msgstr ""
 
-#: wt-status.c:2474
+#: wt-status.c:2478
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr ""
 
+#: compat/precompose_utf8.c:58 builtin/clone.c:452
+#, c-format
+msgid "failed to unlink '%s'"
+msgstr ""
+
 #: builtin/add.c:25
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr ""
@@ -7869,7 +7911,7 @@
 msgid "Unstaged changes after refreshing the index:"
 msgstr ""
 
-#: builtin/add.c:234 builtin/rev-parse.c:896
+#: builtin/add.c:234 builtin/rev-parse.c:897
 msgid "Could not read the index"
 msgstr ""
 
@@ -7904,8 +7946,8 @@
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr ""
 
-#: builtin/add.c:290 builtin/clean.c:909 builtin/fetch.c:147 builtin/mv.c:124
-#: builtin/prune-packed.c:56 builtin/pull.c:222 builtin/push.c:560
+#: builtin/add.c:290 builtin/clean.c:910 builtin/fetch.c:162 builtin/mv.c:124
+#: builtin/prune-packed.c:56 builtin/pull.c:223 builtin/push.c:547
 #: builtin/remote.c:1345 builtin/rm.c:241 builtin/send-pack.c:165
 msgid "dry run"
 msgstr ""
@@ -7958,7 +8000,7 @@
 msgid "check if - even missing - files are ignored in dry run"
 msgstr ""
 
-#: builtin/add.c:309 builtin/update-index.c:1001
+#: builtin/add.c:309 builtin/update-index.c:1002
 msgid "override the executable bit of the listed files"
 msgstr ""
 
@@ -8021,132 +8063,128 @@
 msgid "Maybe you wanted to say 'git add .'?\n"
 msgstr ""
 
-#: builtin/am.c:348
+#: builtin/am.c:347
 msgid "could not parse author script"
 msgstr ""
 
-#: builtin/am.c:432
+#: builtin/am.c:431
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr ""
 
-#: builtin/am.c:474
+#: builtin/am.c:473
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr ""
 
-#: builtin/am.c:512
+#: builtin/am.c:511
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr ""
 
-#: builtin/am.c:538
+#: builtin/am.c:537
 msgid "fseek failed"
 msgstr ""
 
-#: builtin/am.c:726
+#: builtin/am.c:725
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr ""
 
-#: builtin/am.c:791
+#: builtin/am.c:790
 msgid "Only one StGIT patch series can be applied at once"
 msgstr ""
 
-#: builtin/am.c:839
+#: builtin/am.c:838
 msgid "invalid timestamp"
 msgstr ""
 
-#: builtin/am.c:844 builtin/am.c:856
+#: builtin/am.c:843 builtin/am.c:855
 msgid "invalid Date line"
 msgstr ""
 
-#: builtin/am.c:851
+#: builtin/am.c:850
 msgid "invalid timezone offset"
 msgstr ""
 
-#: builtin/am.c:944
+#: builtin/am.c:943
 msgid "Patch format detection failed."
 msgstr ""
 
-#: builtin/am.c:949 builtin/clone.c:407
+#: builtin/am.c:948 builtin/clone.c:406
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr ""
 
-#: builtin/am.c:954
+#: builtin/am.c:953
 msgid "Failed to split patches."
 msgstr ""
 
-#: builtin/am.c:1084 builtin/commit.c:374
-msgid "unable to write index file"
-msgstr ""
-
-#: builtin/am.c:1098
+#: builtin/am.c:1084
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr ""
 
-#: builtin/am.c:1099
+#: builtin/am.c:1085
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr ""
 
-#: builtin/am.c:1100
+#: builtin/am.c:1086
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr ""
 
-#: builtin/am.c:1183
+#: builtin/am.c:1169
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 
-#: builtin/am.c:1211
+#: builtin/am.c:1197
 msgid "Patch is empty."
 msgstr ""
 
-#: builtin/am.c:1277
+#: builtin/am.c:1262
+#, c-format
+msgid "missing author line in commit %s"
+msgstr ""
+
+#: builtin/am.c:1265
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr ""
 
-#: builtin/am.c:1299
-#, c-format
-msgid "unable to parse commit %s"
-msgstr ""
-
-#: builtin/am.c:1496
+#: builtin/am.c:1484
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
 
-#: builtin/am.c:1498
+#: builtin/am.c:1486
 msgid "Using index info to reconstruct a base tree..."
 msgstr ""
 
-#: builtin/am.c:1517
+#: builtin/am.c:1505
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
 msgstr ""
 
-#: builtin/am.c:1523
+#: builtin/am.c:1511
 msgid "Falling back to patching base and 3-way merge..."
 msgstr ""
 
-#: builtin/am.c:1549
+#: builtin/am.c:1537
 msgid "Failed to merge in the changes."
 msgstr ""
 
-#: builtin/am.c:1581
+#: builtin/am.c:1569
 msgid "applying to an empty history"
 msgstr ""
 
-#: builtin/am.c:1628 builtin/am.c:1632
+#: builtin/am.c:1616 builtin/am.c:1620
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr ""
 
-#: builtin/am.c:1650
+#: builtin/am.c:1638
 msgid "Commit Body is:"
 msgstr ""
 
@@ -8154,42 +8192,46 @@
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1660
+#: builtin/am.c:1648
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr ""
 
-#: builtin/am.c:1710
+#: builtin/am.c:1695 builtin/commit.c:374
+msgid "unable to write index file"
+msgstr ""
+
+#: builtin/am.c:1699
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr ""
 
-#: builtin/am.c:1750 builtin/am.c:1818
+#: builtin/am.c:1739 builtin/am.c:1807
 #, c-format
 msgid "Applying: %.*s"
 msgstr ""
 
-#: builtin/am.c:1767
+#: builtin/am.c:1756
 msgid "No changes -- Patch already applied."
 msgstr ""
 
-#: builtin/am.c:1773
+#: builtin/am.c:1762
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr ""
 
-#: builtin/am.c:1777
+#: builtin/am.c:1766
 msgid "Use 'git am --show-current-patch' to see the failed patch"
 msgstr ""
 
-#: builtin/am.c:1821
+#: builtin/am.c:1810
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
 "already introduced the same changes; you might want to skip this patch."
 msgstr ""
 
-#: builtin/am.c:1828
+#: builtin/am.c:1817
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -8197,185 +8239,185 @@
 "You might run `git rm` on a file to accept \"deleted by them\" for it."
 msgstr ""
 
-#: builtin/am.c:1935 builtin/am.c:1939 builtin/am.c:1951 builtin/reset.c:329
+#: builtin/am.c:1924 builtin/am.c:1928 builtin/am.c:1940 builtin/reset.c:329
 #: builtin/reset.c:337
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr ""
 
-#: builtin/am.c:1987
+#: builtin/am.c:1976
 msgid "failed to clean index"
 msgstr ""
 
-#: builtin/am.c:2031
+#: builtin/am.c:2020
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
 msgstr ""
 
-#: builtin/am.c:2128
+#: builtin/am.c:2117
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr ""
 
-#: builtin/am.c:2164
+#: builtin/am.c:2153
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr ""
 
-#: builtin/am.c:2165
+#: builtin/am.c:2154
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr ""
 
-#: builtin/am.c:2171
+#: builtin/am.c:2160
 msgid "run interactively"
 msgstr ""
 
-#: builtin/am.c:2173
+#: builtin/am.c:2162
 msgid "historical option -- no-op"
 msgstr ""
 
-#: builtin/am.c:2175
+#: builtin/am.c:2164
 msgid "allow fall back on 3way merging if needed"
 msgstr ""
 
-#: builtin/am.c:2176 builtin/init-db.c:494 builtin/prune-packed.c:58
-#: builtin/repack.c:296 builtin/stash.c:806
+#: builtin/am.c:2165 builtin/init-db.c:494 builtin/prune-packed.c:58
+#: builtin/repack.c:297 builtin/stash.c:812
 msgid "be quiet"
 msgstr ""
 
-#: builtin/am.c:2178
+#: builtin/am.c:2167
 msgid "add a Signed-off-by line to the commit message"
 msgstr ""
 
-#: builtin/am.c:2181
+#: builtin/am.c:2170
 msgid "recode into utf8 (default)"
 msgstr ""
 
-#: builtin/am.c:2183
+#: builtin/am.c:2172
 msgid "pass -k flag to git-mailinfo"
 msgstr ""
 
-#: builtin/am.c:2185
+#: builtin/am.c:2174
 msgid "pass -b flag to git-mailinfo"
 msgstr ""
 
-#: builtin/am.c:2187
+#: builtin/am.c:2176
 msgid "pass -m flag to git-mailinfo"
 msgstr ""
 
-#: builtin/am.c:2189
+#: builtin/am.c:2178
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr ""
 
-#: builtin/am.c:2192
+#: builtin/am.c:2181
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr ""
 
-#: builtin/am.c:2195
+#: builtin/am.c:2184
 msgid "strip everything before a scissors line"
 msgstr ""
 
-#: builtin/am.c:2197 builtin/am.c:2200 builtin/am.c:2203 builtin/am.c:2206
-#: builtin/am.c:2209 builtin/am.c:2212 builtin/am.c:2215 builtin/am.c:2218
-#: builtin/am.c:2224
+#: builtin/am.c:2186 builtin/am.c:2189 builtin/am.c:2192 builtin/am.c:2195
+#: builtin/am.c:2198 builtin/am.c:2201 builtin/am.c:2204 builtin/am.c:2207
+#: builtin/am.c:2213
 msgid "pass it through git-apply"
 msgstr ""
 
-#: builtin/am.c:2214 builtin/commit.c:1368 builtin/fmt-merge-msg.c:671
-#: builtin/fmt-merge-msg.c:674 builtin/grep.c:881 builtin/merge.c:249
-#: builtin/pull.c:159 builtin/pull.c:218 builtin/rebase.c:1418
-#: builtin/repack.c:307 builtin/repack.c:311 builtin/repack.c:313
+#: builtin/am.c:2203 builtin/commit.c:1368 builtin/fmt-merge-msg.c:671
+#: builtin/fmt-merge-msg.c:674 builtin/grep.c:883 builtin/merge.c:249
+#: builtin/pull.c:160 builtin/pull.c:219 builtin/rebase.c:1442
+#: builtin/repack.c:308 builtin/repack.c:312 builtin/repack.c:314
 #: builtin/show-branch.c:650 builtin/show-ref.c:172 builtin/tag.c:403
-#: parse-options.h:141 parse-options.h:162 parse-options.h:312
+#: parse-options.h:150 parse-options.h:171 parse-options.h:312
 msgid "n"
 msgstr ""
 
-#: builtin/am.c:2220 builtin/branch.c:661 builtin/for-each-ref.c:38
-#: builtin/replace.c:554 builtin/tag.c:437 builtin/verify-tag.c:38
+#: builtin/am.c:2209 builtin/branch.c:661 builtin/for-each-ref.c:38
+#: builtin/replace.c:555 builtin/tag.c:437 builtin/verify-tag.c:38
 msgid "format"
 msgstr ""
 
-#: builtin/am.c:2221
+#: builtin/am.c:2210
 msgid "format the patch(es) are in"
 msgstr ""
 
-#: builtin/am.c:2227
+#: builtin/am.c:2216
 msgid "override error message when patch failure occurs"
 msgstr ""
 
-#: builtin/am.c:2229
+#: builtin/am.c:2218
 msgid "continue applying patches after resolving a conflict"
 msgstr ""
 
-#: builtin/am.c:2232
+#: builtin/am.c:2221
 msgid "synonyms for --continue"
 msgstr ""
 
-#: builtin/am.c:2235
+#: builtin/am.c:2224
 msgid "skip the current patch"
 msgstr ""
 
-#: builtin/am.c:2238
+#: builtin/am.c:2227
 msgid "restore the original branch and abort the patching operation."
 msgstr ""
 
-#: builtin/am.c:2241
+#: builtin/am.c:2230
 msgid "abort the patching operation but keep HEAD where it is."
 msgstr ""
 
-#: builtin/am.c:2244
+#: builtin/am.c:2233
 msgid "show the patch being applied."
 msgstr ""
 
-#: builtin/am.c:2248
+#: builtin/am.c:2237
 msgid "lie about committer date"
 msgstr ""
 
-#: builtin/am.c:2250
+#: builtin/am.c:2239
 msgid "use current timestamp for author date"
 msgstr ""
 
-#: builtin/am.c:2252 builtin/commit-tree.c:120 builtin/commit.c:1511
-#: builtin/merge.c:286 builtin/pull.c:193 builtin/rebase.c:489
-#: builtin/rebase.c:1459 builtin/revert.c:117 builtin/tag.c:418
+#: builtin/am.c:2241 builtin/commit-tree.c:120 builtin/commit.c:1511
+#: builtin/merge.c:286 builtin/pull.c:194 builtin/rebase.c:490
+#: builtin/rebase.c:1483 builtin/revert.c:117 builtin/tag.c:418
 msgid "key-id"
 msgstr ""
 
-#: builtin/am.c:2253 builtin/rebase.c:490 builtin/rebase.c:1460
+#: builtin/am.c:2242 builtin/rebase.c:491 builtin/rebase.c:1484
 msgid "GPG-sign commits"
 msgstr ""
 
-#: builtin/am.c:2256
+#: builtin/am.c:2245
 msgid "(internal use for git-rebase)"
 msgstr ""
 
-#: builtin/am.c:2274
+#: builtin/am.c:2263
 msgid ""
 "The -b/--binary option has been a no-op for long time, and\n"
 "it will be removed. Please do not use it anymore."
 msgstr ""
 
-#: builtin/am.c:2281
+#: builtin/am.c:2270
 msgid "failed to read the index"
 msgstr ""
 
-#: builtin/am.c:2296
+#: builtin/am.c:2285
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr ""
 
-#: builtin/am.c:2320
+#: builtin/am.c:2309
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
 "Use \"git am --abort\" to remove it."
 msgstr ""
 
-#: builtin/am.c:2326
+#: builtin/am.c:2315
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr ""
 
-#: builtin/am.c:2336
+#: builtin/am.c:2325
 msgid "interactive mode requires patches on the command line"
 msgstr ""
 
@@ -8670,154 +8712,154 @@
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr ""
 
-#: builtin/blame.c:32
+#: builtin/blame.c:31
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
 msgstr ""
 
-#: builtin/blame.c:37
+#: builtin/blame.c:36
 msgid "<rev-opts> are documented in git-rev-list(1)"
 msgstr ""
 
-#: builtin/blame.c:410
+#: builtin/blame.c:409
 #, c-format
 msgid "expecting a color: %s"
 msgstr ""
 
-#: builtin/blame.c:417
+#: builtin/blame.c:416
 msgid "must end with a color"
 msgstr ""
 
-#: builtin/blame.c:730
+#: builtin/blame.c:729
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr ""
 
-#: builtin/blame.c:748
+#: builtin/blame.c:747
 msgid "invalid value for blame.coloring"
 msgstr ""
 
-#: builtin/blame.c:823
+#: builtin/blame.c:822
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr ""
 
-#: builtin/blame.c:845
+#: builtin/blame.c:844
 msgid "Show blame entries as we find them, incrementally"
 msgstr ""
 
-#: builtin/blame.c:846
+#: builtin/blame.c:845
 msgid "Show blank SHA-1 for boundary commits (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:847
+#: builtin/blame.c:846
 msgid "Do not treat root commits as boundaries (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:848
+#: builtin/blame.c:847
 msgid "Show work cost statistics"
 msgstr ""
 
-#: builtin/blame.c:849
+#: builtin/blame.c:848
 msgid "Force progress reporting"
 msgstr ""
 
-#: builtin/blame.c:850
+#: builtin/blame.c:849
 msgid "Show output score for blame entries"
 msgstr ""
 
-#: builtin/blame.c:851
+#: builtin/blame.c:850
 msgid "Show original filename (Default: auto)"
 msgstr ""
 
-#: builtin/blame.c:852
+#: builtin/blame.c:851
 msgid "Show original linenumber (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:853
+#: builtin/blame.c:852
 msgid "Show in a format designed for machine consumption"
 msgstr ""
 
-#: builtin/blame.c:854
+#: builtin/blame.c:853
 msgid "Show porcelain format with per-line commit information"
 msgstr ""
 
-#: builtin/blame.c:855
+#: builtin/blame.c:854
 msgid "Use the same output mode as git-annotate (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:856
+#: builtin/blame.c:855
 msgid "Show raw timestamp (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:857
+#: builtin/blame.c:856
 msgid "Show long commit SHA1 (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:858
+#: builtin/blame.c:857
 msgid "Suppress author name and timestamp (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:859
+#: builtin/blame.c:858
 msgid "Show author email instead of name (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:860
+#: builtin/blame.c:859
 msgid "Ignore whitespace differences"
 msgstr ""
 
-#: builtin/blame.c:861 builtin/log.c:1629
+#: builtin/blame.c:860 builtin/log.c:1630
 msgid "rev"
 msgstr ""
 
-#: builtin/blame.c:861
+#: builtin/blame.c:860
 msgid "Ignore <rev> when blaming"
 msgstr ""
 
-#: builtin/blame.c:862
+#: builtin/blame.c:861
 msgid "Ignore revisions from <file>"
 msgstr ""
 
-#: builtin/blame.c:863
+#: builtin/blame.c:862
 msgid "color redundant metadata from previous line differently"
 msgstr ""
 
-#: builtin/blame.c:864
+#: builtin/blame.c:863
 msgid "color lines by age"
 msgstr ""
 
-#: builtin/blame.c:871
+#: builtin/blame.c:870
 msgid "Use an experimental heuristic to improve diffs"
 msgstr ""
 
-#: builtin/blame.c:873
+#: builtin/blame.c:872
 msgid "Spend extra cycles to find better match"
 msgstr ""
 
-#: builtin/blame.c:874
+#: builtin/blame.c:873
 msgid "Use revisions from <file> instead of calling git-rev-list"
 msgstr ""
 
-#: builtin/blame.c:875
+#: builtin/blame.c:874
 msgid "Use <file>'s contents as the final image"
 msgstr ""
 
-#: builtin/blame.c:876 builtin/blame.c:877
+#: builtin/blame.c:875 builtin/blame.c:876
 msgid "score"
 msgstr ""
 
-#: builtin/blame.c:876
+#: builtin/blame.c:875
 msgid "Find line copies within and across files"
 msgstr ""
 
-#: builtin/blame.c:877
+#: builtin/blame.c:876
 msgid "Find line movements within and across files"
 msgstr ""
 
-#: builtin/blame.c:878
+#: builtin/blame.c:877
 msgid "n,m"
 msgstr ""
 
-#: builtin/blame.c:878
+#: builtin/blame.c:877
 msgid "Process only line range n,m, counting from 1"
 msgstr ""
 
@@ -9044,7 +9086,7 @@
 msgid "do not use"
 msgstr ""
 
-#: builtin/branch.c:626 builtin/rebase.c:485
+#: builtin/branch.c:626 builtin/rebase.c:486
 msgid "upstream"
 msgstr ""
 
@@ -9155,7 +9197,7 @@
 msgid "format to use for the output"
 msgstr ""
 
-#: builtin/branch.c:684 builtin/clone.c:761
+#: builtin/branch.c:684 builtin/clone.c:760
 msgid "HEAD not found below refs/heads!"
 msgstr ""
 
@@ -9251,83 +9293,83 @@
 msgid "Need a repository to unbundle."
 msgstr ""
 
-#: builtin/cat-file.c:594
+#: builtin/cat-file.c:595
 msgid ""
 "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
 "p | <type> | --textconv | --filters) [--path=<path>] <object>"
 msgstr ""
 
-#: builtin/cat-file.c:595
+#: builtin/cat-file.c:596
 msgid ""
 "git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
 "filters]"
 msgstr ""
 
-#: builtin/cat-file.c:616
+#: builtin/cat-file.c:617
 msgid "only one batch option may be specified"
 msgstr ""
 
-#: builtin/cat-file.c:634
+#: builtin/cat-file.c:635
 msgid "<type> can be one of: blob, tree, commit, tag"
 msgstr ""
 
-#: builtin/cat-file.c:635
+#: builtin/cat-file.c:636
 msgid "show object type"
 msgstr ""
 
-#: builtin/cat-file.c:636
+#: builtin/cat-file.c:637
 msgid "show object size"
 msgstr ""
 
-#: builtin/cat-file.c:638
+#: builtin/cat-file.c:639
 msgid "exit with zero when there's no error"
 msgstr ""
 
-#: builtin/cat-file.c:639
+#: builtin/cat-file.c:640
 msgid "pretty-print object's content"
 msgstr ""
 
-#: builtin/cat-file.c:641
+#: builtin/cat-file.c:642
 msgid "for blob objects, run textconv on object's content"
 msgstr ""
 
-#: builtin/cat-file.c:643
+#: builtin/cat-file.c:644
 msgid "for blob objects, run filters on object's content"
 msgstr ""
 
-#: builtin/cat-file.c:644 git-submodule.sh:936
+#: builtin/cat-file.c:645 git-submodule.sh:936
 msgid "blob"
 msgstr ""
 
-#: builtin/cat-file.c:645
+#: builtin/cat-file.c:646
 msgid "use a specific path for --textconv/--filters"
 msgstr ""
 
-#: builtin/cat-file.c:647
+#: builtin/cat-file.c:648
 msgid "allow -s and -t to work with broken/corrupt objects"
 msgstr ""
 
-#: builtin/cat-file.c:648
+#: builtin/cat-file.c:649
 msgid "buffer --batch output"
 msgstr ""
 
-#: builtin/cat-file.c:650
+#: builtin/cat-file.c:651
 msgid "show info and content of objects fed from the standard input"
 msgstr ""
 
-#: builtin/cat-file.c:654
+#: builtin/cat-file.c:655
 msgid "show info about objects fed from the standard input"
 msgstr ""
 
-#: builtin/cat-file.c:658
+#: builtin/cat-file.c:659
 msgid "follow in-tree symlinks (used with --batch or --batch-check)"
 msgstr ""
 
-#: builtin/cat-file.c:660
+#: builtin/cat-file.c:661
 msgid "show all objects with --batch or --batch-check"
 msgstr ""
 
-#: builtin/cat-file.c:662
+#: builtin/cat-file.c:663
 msgid "do not order --batch-all-objects output"
 msgstr ""
 
@@ -9355,8 +9397,8 @@
 msgid "terminate input and output records by a NUL character"
 msgstr ""
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1433 builtin/gc.c:538
-#: builtin/worktree.c:507
+#: builtin/check-ignore.c:21 builtin/checkout.c:1433 builtin/gc.c:537
+#: builtin/worktree.c:506
 msgid "suppress progress reporting"
 msgstr ""
 
@@ -9448,7 +9490,7 @@
 #: builtin/checkout-index.c:178 builtin/column.c:31
 #: builtin/submodule--helper.c:1373 builtin/submodule--helper.c:1376
 #: builtin/submodule--helper.c:1384 builtin/submodule--helper.c:1857
-#: builtin/worktree.c:680
+#: builtin/worktree.c:679
 msgid "string"
 msgstr ""
 
@@ -9476,109 +9518,104 @@
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr ""
 
-#: builtin/checkout.c:172 builtin/checkout.c:211
+#: builtin/checkout.c:173 builtin/checkout.c:212
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr ""
 
-#: builtin/checkout.c:174 builtin/checkout.c:213
+#: builtin/checkout.c:175 builtin/checkout.c:214
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr ""
 
-#: builtin/checkout.c:190
+#: builtin/checkout.c:191
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr ""
 
-#: builtin/checkout.c:240
+#: builtin/checkout.c:241
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr ""
 
-#: builtin/checkout.c:258
+#: builtin/checkout.c:259
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr ""
 
-#: builtin/checkout.c:274
+#: builtin/checkout.c:275
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr ""
 
-#: builtin/checkout.c:374
+#: builtin/checkout.c:375
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/checkout.c:379
+#: builtin/checkout.c:380
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/checkout.c:386
+#: builtin/checkout.c:387
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/checkout.c:409 builtin/checkout.c:412 builtin/checkout.c:415
-#: builtin/checkout.c:419
+#: builtin/checkout.c:410 builtin/checkout.c:413 builtin/checkout.c:416
+#: builtin/checkout.c:420
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr ""
 
-#: builtin/checkout.c:422 builtin/checkout.c:425
+#: builtin/checkout.c:423 builtin/checkout.c:426
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr ""
 
-#: builtin/checkout.c:429
+#: builtin/checkout.c:430
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr ""
 
-#: builtin/checkout.c:433
+#: builtin/checkout.c:434
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr ""
 
-#: builtin/checkout.c:437
+#: builtin/checkout.c:438
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr ""
 
-#: builtin/checkout.c:442 builtin/checkout.c:447
+#: builtin/checkout.c:443 builtin/checkout.c:448
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr ""
 
-#: builtin/checkout.c:506 builtin/checkout.c:513
+#: builtin/checkout.c:507 builtin/checkout.c:514
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr ""
 
-#: builtin/checkout.c:679
+#: builtin/checkout.c:680
 msgid "you need to resolve your current index first"
 msgstr ""
 
-#: builtin/checkout.c:729
+#: builtin/checkout.c:730
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
 "%s"
 msgstr ""
 
-#: builtin/checkout.c:736
-#, c-format
-msgid "staged changes in the following files may be lost: %s"
-msgstr ""
-
 #: builtin/checkout.c:833
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
@@ -9588,7 +9625,7 @@
 msgid "HEAD is now at"
 msgstr ""
 
-#: builtin/checkout.c:879 builtin/clone.c:714
+#: builtin/checkout.c:879 builtin/clone.c:713
 msgid "unable to update HEAD"
 msgstr ""
 
@@ -9682,7 +9719,7 @@
 "Please use -- (and optionally --no-guess) to disambiguate"
 msgstr ""
 
-#: builtin/checkout.c:1243 builtin/worktree.c:291 builtin/worktree.c:456
+#: builtin/checkout.c:1243 builtin/worktree.c:290 builtin/worktree.c:455
 #, c-format
 msgid "invalid reference: %s"
 msgstr ""
@@ -9775,9 +9812,9 @@
 msgid "missing branch or commit argument"
 msgstr ""
 
-#: builtin/checkout.c:1437 builtin/clone.c:91 builtin/fetch.c:151
-#: builtin/merge.c:285 builtin/pull.c:137 builtin/push.c:575
-#: builtin/send-pack.c:174
+#: builtin/checkout.c:1437 builtin/clone.c:90 builtin/commit-graph.c:59
+#: builtin/commit-graph.c:180 builtin/fetch.c:166 builtin/merge.c:285
+#: builtin/pull.c:138 builtin/push.c:562 builtin/send-pack.c:174
 msgid "force progress reporting"
 msgstr ""
 
@@ -9785,7 +9822,7 @@
 msgid "perform a 3-way merge with the new branch"
 msgstr ""
 
-#: builtin/checkout.c:1439 builtin/log.c:1617 parse-options.h:318
+#: builtin/checkout.c:1439 builtin/log.c:1618 parse-options.h:318
 msgid "style"
 msgstr ""
 
@@ -9793,7 +9830,7 @@
 msgid "conflict style (merge or diff3)"
 msgstr ""
 
-#: builtin/checkout.c:1452 builtin/worktree.c:504
+#: builtin/checkout.c:1452 builtin/worktree.c:503
 msgid "detach HEAD at named commit"
 msgstr ""
 
@@ -9895,9 +9932,9 @@
 "checkout.defaultRemote=origin in your config."
 msgstr ""
 
-#: builtin/checkout.c:1691 builtin/checkout.c:1693 builtin/checkout.c:1733
-#: builtin/checkout.c:1735 builtin/clone.c:121 builtin/remote.c:169
-#: builtin/remote.c:171 builtin/worktree.c:500 builtin/worktree.c:502
+#: builtin/checkout.c:1691 builtin/checkout.c:1693 builtin/checkout.c:1742
+#: builtin/checkout.c:1744 builtin/clone.c:120 builtin/remote.c:169
+#: builtin/remote.c:171 builtin/worktree.c:499 builtin/worktree.c:501
 msgid "branch"
 msgstr ""
 
@@ -9921,39 +9958,39 @@
 msgid "use overlay mode (default)"
 msgstr ""
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1743
 msgid "create and switch to a new branch"
 msgstr ""
 
-#: builtin/checkout.c:1736
+#: builtin/checkout.c:1745
 msgid "create/reset and switch to a branch"
 msgstr ""
 
-#: builtin/checkout.c:1738
+#: builtin/checkout.c:1747
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr ""
 
-#: builtin/checkout.c:1740
+#: builtin/checkout.c:1749
 msgid "throw away local modifications"
 msgstr ""
 
-#: builtin/checkout.c:1772
+#: builtin/checkout.c:1781
 msgid "which tree-ish to checkout from"
 msgstr ""
 
-#: builtin/checkout.c:1774
+#: builtin/checkout.c:1783
 msgid "restore the index"
 msgstr ""
 
-#: builtin/checkout.c:1776
+#: builtin/checkout.c:1785
 msgid "restore the working tree (default)"
 msgstr ""
 
-#: builtin/checkout.c:1778
+#: builtin/checkout.c:1787
 msgid "ignore unmerged entries"
 msgstr ""
 
-#: builtin/checkout.c:1779
+#: builtin/checkout.c:1788
 msgid "use overlay mode"
 msgstr ""
 
@@ -9992,7 +10029,7 @@
 msgid "could not lstat %s\n"
 msgstr ""
 
-#: builtin/clean.c:300 git-add--interactive.perl:593
+#: builtin/clean.c:301 git-add--interactive.perl:593
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -10001,7 +10038,7 @@
 "           - (empty) select nothing\n"
 msgstr ""
 
-#: builtin/clean.c:304 git-add--interactive.perl:602
+#: builtin/clean.c:305 git-add--interactive.perl:602
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -10014,38 +10051,38 @@
 "           - (empty) finish selecting\n"
 msgstr ""
 
-#: builtin/clean.c:520 git-add--interactive.perl:568
+#: builtin/clean.c:521 git-add--interactive.perl:568
 #: git-add--interactive.perl:573
 #, c-format, perl-format
 msgid "Huh (%s)?\n"
 msgstr ""
 
-#: builtin/clean.c:662
+#: builtin/clean.c:663
 #, c-format
 msgid "Input ignore patterns>> "
 msgstr ""
 
-#: builtin/clean.c:699
+#: builtin/clean.c:700
 #, c-format
 msgid "WARNING: Cannot find items matched by: %s"
 msgstr ""
 
-#: builtin/clean.c:720
+#: builtin/clean.c:721
 msgid "Select items to delete"
 msgstr ""
 
 #. TRANSLATORS: Make sure to keep [y/N] as is
-#: builtin/clean.c:761
+#: builtin/clean.c:762
 #, c-format
 msgid "Remove %s [y/N]? "
 msgstr ""
 
-#: builtin/clean.c:786 git-add--interactive.perl:1763
+#: builtin/clean.c:787 git-add--interactive.perl:1763
 #, c-format
 msgid "Bye.\n"
 msgstr ""
 
-#: builtin/clean.c:794
+#: builtin/clean.c:795
 msgid ""
 "clean               - start cleaning\n"
 "filter by pattern   - exclude items from deletion\n"
@@ -10056,405 +10093,400 @@
 "?                   - help for prompt selection"
 msgstr ""
 
-#: builtin/clean.c:821 git-add--interactive.perl:1849
+#: builtin/clean.c:822 git-add--interactive.perl:1849
 msgid "*** Commands ***"
 msgstr ""
 
-#: builtin/clean.c:822 git-add--interactive.perl:1846
+#: builtin/clean.c:823 git-add--interactive.perl:1846
 msgid "What now"
 msgstr ""
 
-#: builtin/clean.c:830
+#: builtin/clean.c:831
 msgid "Would remove the following item:"
 msgid_plural "Would remove the following items:"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/clean.c:846
+#: builtin/clean.c:847
 msgid "No more files to clean, exiting."
 msgstr ""
 
-#: builtin/clean.c:908
+#: builtin/clean.c:909
 msgid "do not print names of files removed"
 msgstr ""
 
-#: builtin/clean.c:910
+#: builtin/clean.c:911
 msgid "force"
 msgstr ""
 
-#: builtin/clean.c:911
+#: builtin/clean.c:912
 msgid "interactive cleaning"
 msgstr ""
 
-#: builtin/clean.c:913
+#: builtin/clean.c:914
 msgid "remove whole directories"
 msgstr ""
 
-#: builtin/clean.c:914 builtin/describe.c:546 builtin/describe.c:548
-#: builtin/grep.c:899 builtin/log.c:176 builtin/log.c:178
-#: builtin/ls-files.c:557 builtin/name-rev.c:413 builtin/name-rev.c:415
+#: builtin/clean.c:915 builtin/describe.c:548 builtin/describe.c:550
+#: builtin/grep.c:901 builtin/log.c:176 builtin/log.c:178
+#: builtin/ls-files.c:557 builtin/name-rev.c:417 builtin/name-rev.c:419
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr ""
 
-#: builtin/clean.c:915
+#: builtin/clean.c:916
 msgid "add <pattern> to ignore rules"
 msgstr ""
 
-#: builtin/clean.c:916
+#: builtin/clean.c:917
 msgid "remove ignored files, too"
 msgstr ""
 
-#: builtin/clean.c:918
+#: builtin/clean.c:919
 msgid "remove only ignored files"
 msgstr ""
 
-#: builtin/clean.c:936
+#: builtin/clean.c:937
 msgid "-x and -X cannot be used together"
 msgstr ""
 
-#: builtin/clean.c:940
+#: builtin/clean.c:941
 msgid ""
 "clean.requireForce set to true and neither -i, -n, nor -f given; refusing to "
 "clean"
 msgstr ""
 
-#: builtin/clean.c:943
+#: builtin/clean.c:944
 msgid ""
 "clean.requireForce defaults to true and neither -i, -n, nor -f given; "
 "refusing to clean"
 msgstr ""
 
-#: builtin/clone.c:46
+#: builtin/clone.c:45
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr ""
 
-#: builtin/clone.c:93
+#: builtin/clone.c:92
 msgid "don't create a checkout"
 msgstr ""
 
-#: builtin/clone.c:94 builtin/clone.c:96 builtin/init-db.c:489
+#: builtin/clone.c:93 builtin/clone.c:95 builtin/init-db.c:489
 msgid "create a bare repository"
 msgstr ""
 
-#: builtin/clone.c:98
+#: builtin/clone.c:97
 msgid "create a mirror repository (implies bare)"
 msgstr ""
 
-#: builtin/clone.c:100
+#: builtin/clone.c:99
 msgid "to clone from a local repository"
 msgstr ""
 
-#: builtin/clone.c:102
+#: builtin/clone.c:101
 msgid "don't use local hardlinks, always copy"
 msgstr ""
 
-#: builtin/clone.c:104
+#: builtin/clone.c:103
 msgid "setup as shared repository"
 msgstr ""
 
-#: builtin/clone.c:107
+#: builtin/clone.c:106
 msgid "pathspec"
 msgstr ""
 
-#: builtin/clone.c:107
+#: builtin/clone.c:106
 msgid "initialize submodules in the clone"
 msgstr ""
 
-#: builtin/clone.c:110
+#: builtin/clone.c:109
 msgid "number of submodules cloned in parallel"
 msgstr ""
 
-#: builtin/clone.c:111 builtin/init-db.c:486
+#: builtin/clone.c:110 builtin/init-db.c:486
 msgid "template-directory"
 msgstr ""
 
-#: builtin/clone.c:112 builtin/init-db.c:487
+#: builtin/clone.c:111 builtin/init-db.c:487
 msgid "directory from which templates will be used"
 msgstr ""
 
-#: builtin/clone.c:114 builtin/clone.c:116 builtin/submodule--helper.c:1380
+#: builtin/clone.c:113 builtin/clone.c:115 builtin/submodule--helper.c:1380
 #: builtin/submodule--helper.c:1860
 msgid "reference repository"
 msgstr ""
 
-#: builtin/clone.c:118 builtin/submodule--helper.c:1382
+#: builtin/clone.c:117 builtin/submodule--helper.c:1382
 #: builtin/submodule--helper.c:1862
 msgid "use --reference only while cloning"
 msgstr ""
 
-#: builtin/clone.c:119 builtin/column.c:27 builtin/merge-file.c:46
-#: builtin/pack-objects.c:3314 builtin/repack.c:319
+#: builtin/clone.c:118 builtin/column.c:27 builtin/merge-file.c:46
+#: builtin/pack-objects.c:3294 builtin/repack.c:320
 msgid "name"
 msgstr ""
 
-#: builtin/clone.c:120
+#: builtin/clone.c:119
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr ""
 
-#: builtin/clone.c:122
+#: builtin/clone.c:121
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr ""
 
-#: builtin/clone.c:124
+#: builtin/clone.c:123
 msgid "path to git-upload-pack on the remote"
 msgstr ""
 
-#: builtin/clone.c:125 builtin/fetch.c:152 builtin/grep.c:838
-#: builtin/pull.c:226
+#: builtin/clone.c:124 builtin/fetch.c:167 builtin/grep.c:840
+#: builtin/pull.c:227
 msgid "depth"
 msgstr ""
 
-#: builtin/clone.c:126
+#: builtin/clone.c:125
 msgid "create a shallow clone of that depth"
 msgstr ""
 
-#: builtin/clone.c:127 builtin/fetch.c:154 builtin/pack-objects.c:3303
+#: builtin/clone.c:126 builtin/fetch.c:169 builtin/pack-objects.c:3283
 msgid "time"
 msgstr ""
 
-#: builtin/clone.c:128
+#: builtin/clone.c:127
 msgid "create a shallow clone since a specific time"
 msgstr ""
 
-#: builtin/clone.c:129 builtin/fetch.c:156 builtin/fetch.c:179
-#: builtin/rebase.c:1395
+#: builtin/clone.c:128 builtin/fetch.c:171 builtin/fetch.c:194
+#: builtin/rebase.c:1417
 msgid "revision"
 msgstr ""
 
-#: builtin/clone.c:130 builtin/fetch.c:157
+#: builtin/clone.c:129 builtin/fetch.c:172
 msgid "deepen history of shallow clone, excluding rev"
 msgstr ""
 
-#: builtin/clone.c:132
+#: builtin/clone.c:131
 msgid "clone only one branch, HEAD or --branch"
 msgstr ""
 
-#: builtin/clone.c:134
+#: builtin/clone.c:133
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr ""
 
-#: builtin/clone.c:136
+#: builtin/clone.c:135
 msgid "any cloned submodules will be shallow"
 msgstr ""
 
-#: builtin/clone.c:137 builtin/init-db.c:495
+#: builtin/clone.c:136 builtin/init-db.c:495
 msgid "gitdir"
 msgstr ""
 
-#: builtin/clone.c:138 builtin/init-db.c:496
+#: builtin/clone.c:137 builtin/init-db.c:496
 msgid "separate git dir from working tree"
 msgstr ""
 
-#: builtin/clone.c:139
+#: builtin/clone.c:138
 msgid "key=value"
 msgstr ""
 
-#: builtin/clone.c:140
+#: builtin/clone.c:139
 msgid "set config inside the new repository"
 msgstr ""
 
-#: builtin/clone.c:142 builtin/fetch.c:174 builtin/ls-remote.c:76
-#: builtin/push.c:585 builtin/send-pack.c:172
+#: builtin/clone.c:141 builtin/fetch.c:189 builtin/ls-remote.c:76
+#: builtin/push.c:572 builtin/send-pack.c:172
 msgid "server-specific"
 msgstr ""
 
-#: builtin/clone.c:142 builtin/fetch.c:174 builtin/ls-remote.c:76
-#: builtin/push.c:585 builtin/send-pack.c:173
+#: builtin/clone.c:141 builtin/fetch.c:189 builtin/ls-remote.c:76
+#: builtin/push.c:572 builtin/send-pack.c:173
 msgid "option to transmit"
 msgstr ""
 
-#: builtin/clone.c:143 builtin/fetch.c:175 builtin/pull.c:239
-#: builtin/push.c:586
+#: builtin/clone.c:142 builtin/fetch.c:190 builtin/pull.c:240
+#: builtin/push.c:573
 msgid "use IPv4 addresses only"
 msgstr ""
 
-#: builtin/clone.c:145 builtin/fetch.c:177 builtin/pull.c:242
-#: builtin/push.c:588
+#: builtin/clone.c:144 builtin/fetch.c:192 builtin/pull.c:243
+#: builtin/push.c:575
 msgid "use IPv6 addresses only"
 msgstr ""
 
-#: builtin/clone.c:149
+#: builtin/clone.c:148
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr ""
 
-#: builtin/clone.c:285
+#: builtin/clone.c:284
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
 msgstr ""
 
-#: builtin/clone.c:338
+#: builtin/clone.c:337
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr ""
 
-#: builtin/clone.c:411
+#: builtin/clone.c:410
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr ""
 
-#: builtin/clone.c:428
+#: builtin/clone.c:427
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr ""
 
-#: builtin/clone.c:453
-#, c-format
-msgid "failed to unlink '%s'"
-msgstr ""
-
-#: builtin/clone.c:458
+#: builtin/clone.c:457
 #, c-format
 msgid "failed to create link '%s'"
 msgstr ""
 
-#: builtin/clone.c:462
+#: builtin/clone.c:461
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr ""
 
-#: builtin/clone.c:467
+#: builtin/clone.c:466
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr ""
 
-#: builtin/clone.c:492
+#: builtin/clone.c:491
 #, c-format
 msgid "done.\n"
 msgstr ""
 
-#: builtin/clone.c:506
+#: builtin/clone.c:505
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
 "and retry with 'git restore --source=HEAD :/'\n"
 msgstr ""
 
-#: builtin/clone.c:583
+#: builtin/clone.c:582
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr ""
 
-#: builtin/clone.c:702
+#: builtin/clone.c:701
 #, c-format
 msgid "unable to update %s"
 msgstr ""
 
-#: builtin/clone.c:752
+#: builtin/clone.c:751
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 
-#: builtin/clone.c:783
+#: builtin/clone.c:782
 msgid "unable to checkout working tree"
 msgstr ""
 
-#: builtin/clone.c:833
+#: builtin/clone.c:832
 msgid "unable to write parameters to config file"
 msgstr ""
 
-#: builtin/clone.c:896
+#: builtin/clone.c:895
 msgid "cannot repack to clean up"
 msgstr ""
 
-#: builtin/clone.c:898
+#: builtin/clone.c:897
 msgid "cannot unlink temporary alternates file"
 msgstr ""
 
-#: builtin/clone.c:938 builtin/receive-pack.c:1950
+#: builtin/clone.c:937 builtin/receive-pack.c:1948
 msgid "Too many arguments."
 msgstr ""
 
-#: builtin/clone.c:942
+#: builtin/clone.c:941
 msgid "You must specify a repository to clone."
 msgstr ""
 
-#: builtin/clone.c:955
+#: builtin/clone.c:954
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr ""
 
-#: builtin/clone.c:958
+#: builtin/clone.c:957
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr ""
 
-#: builtin/clone.c:971
+#: builtin/clone.c:970
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr ""
 
-#: builtin/clone.c:977 builtin/fetch.c:1660
+#: builtin/clone.c:976 builtin/fetch.c:1790
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr ""
 
-#: builtin/clone.c:987
+#: builtin/clone.c:986
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr ""
 
-#: builtin/clone.c:997
+#: builtin/clone.c:996
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr ""
 
-#: builtin/clone.c:1012 builtin/clone.c:1033 builtin/difftool.c:264
-#: builtin/worktree.c:303 builtin/worktree.c:335
+#: builtin/clone.c:1011 builtin/clone.c:1032 builtin/difftool.c:271
+#: builtin/log.c:1785 builtin/worktree.c:302 builtin/worktree.c:334
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr ""
 
-#: builtin/clone.c:1017
+#: builtin/clone.c:1016
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr ""
 
-#: builtin/clone.c:1037
+#: builtin/clone.c:1036
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr ""
 
-#: builtin/clone.c:1039
+#: builtin/clone.c:1038
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr ""
 
-#: builtin/clone.c:1063
+#: builtin/clone.c:1062
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
 msgstr ""
 
-#: builtin/clone.c:1124
+#: builtin/clone.c:1123
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr ""
 
-#: builtin/clone.c:1126
+#: builtin/clone.c:1125
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr ""
 
-#: builtin/clone.c:1128
+#: builtin/clone.c:1127
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 
-#: builtin/clone.c:1130
+#: builtin/clone.c:1129
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr ""
 
-#: builtin/clone.c:1133
+#: builtin/clone.c:1132
 msgid "source repository is shallow, ignoring --local"
 msgstr ""
 
-#: builtin/clone.c:1138
+#: builtin/clone.c:1137
 msgid "--local is ignored"
 msgstr ""
 
-#: builtin/clone.c:1215 builtin/clone.c:1223
+#: builtin/clone.c:1212 builtin/clone.c:1220
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr ""
 
-#: builtin/clone.c:1226
+#: builtin/clone.c:1223
 msgid "You appear to have cloned an empty repository."
 msgstr ""
 
@@ -10530,7 +10562,7 @@
 msgstr ""
 
 #: builtin/commit-tree.c:114 builtin/commit.c:1500 builtin/merge.c:270
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1460
+#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1469
 #: builtin/tag.c:412
 msgid "message"
 msgstr ""
@@ -10544,7 +10576,7 @@
 msgstr ""
 
 #: builtin/commit-tree.c:121 builtin/commit.c:1512 builtin/merge.c:287
-#: builtin/pull.c:194 builtin/revert.c:118
+#: builtin/pull.c:195 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr ""
 
@@ -10835,8 +10867,8 @@
 msgid "version"
 msgstr ""
 
-#: builtin/commit.c:1347 builtin/commit.c:1529 builtin/push.c:561
-#: builtin/worktree.c:651
+#: builtin/commit.c:1347 builtin/commit.c:1529 builtin/push.c:548
+#: builtin/worktree.c:650
 msgid "machine-readable output"
 msgstr ""
 
@@ -10849,8 +10881,8 @@
 msgstr ""
 
 #: builtin/commit.c:1355 builtin/commit.c:1359 builtin/commit.c:1537
-#: builtin/fast-export.c:1125 builtin/fast-export.c:1128
-#: builtin/fast-export.c:1131 builtin/rebase.c:1471 parse-options.h:332
+#: builtin/fast-export.c:1153 builtin/fast-export.c:1156
+#: builtin/fast-export.c:1159 builtin/rebase.c:1495 parse-options.h:332
 msgid "mode"
 msgstr ""
 
@@ -10864,7 +10896,7 @@
 "traditional)"
 msgstr ""
 
-#: builtin/commit.c:1362 parse-options.h:179
+#: builtin/commit.c:1362 parse-options.h:188
 msgid "when"
 msgstr ""
 
@@ -10914,7 +10946,7 @@
 msgid "override author for commit"
 msgstr ""
 
-#: builtin/commit.c:1499 builtin/gc.c:539
+#: builtin/commit.c:1499 builtin/gc.c:538
 msgid "date"
 msgstr ""
 
@@ -10947,8 +10979,8 @@
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr ""
 
-#: builtin/commit.c:1506 builtin/log.c:1564 builtin/merge.c:289
-#: builtin/pull.c:163 builtin/revert.c:110
+#: builtin/commit.c:1506 builtin/log.c:1565 builtin/merge.c:289
+#: builtin/pull.c:164 builtin/revert.c:110
 msgid "add Signed-off-by:"
 msgstr ""
 
@@ -11052,64 +11084,65 @@
 msgstr ""
 
 #: builtin/commit-graph.c:13 builtin/commit-graph.c:19
-msgid "git commit-graph verify [--object-dir <objdir>] [--shallow]"
+msgid ""
+"git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
 msgstr ""
 
 #: builtin/commit-graph.c:14 builtin/commit-graph.c:29
 msgid ""
 "git commit-graph write [--object-dir <objdir>] [--append|--split] [--"
-"reachable|--stdin-packs|--stdin-commits] <split options>"
+"reachable|--stdin-packs|--stdin-commits] [--[no-]progress] <split options>"
 msgstr ""
 
-#: builtin/commit-graph.c:54 builtin/commit-graph.c:100
-#: builtin/commit-graph.c:161 builtin/commit-graph.c:237 builtin/fetch.c:163
-#: builtin/log.c:1584
+#: builtin/commit-graph.c:55 builtin/commit-graph.c:107
+#: builtin/commit-graph.c:170 builtin/commit-graph.c:254 builtin/fetch.c:178
+#: builtin/log.c:1585
 msgid "dir"
 msgstr ""
 
-#: builtin/commit-graph.c:55 builtin/commit-graph.c:101
-#: builtin/commit-graph.c:162 builtin/commit-graph.c:238
+#: builtin/commit-graph.c:56 builtin/commit-graph.c:108
+#: builtin/commit-graph.c:171 builtin/commit-graph.c:255
 msgid "The object directory to store the graph"
 msgstr ""
 
-#: builtin/commit-graph.c:57
+#: builtin/commit-graph.c:58
 msgid "if the commit-graph is split, only verify the tip file"
 msgstr ""
 
-#: builtin/commit-graph.c:73 builtin/commit-graph.c:116
+#: builtin/commit-graph.c:80 builtin/commit-graph.c:125
 #, c-format
 msgid "Could not open commit-graph '%s'"
 msgstr ""
 
-#: builtin/commit-graph.c:164
+#: builtin/commit-graph.c:173
 msgid "start walk at all refs"
 msgstr ""
 
-#: builtin/commit-graph.c:166
+#: builtin/commit-graph.c:175
 msgid "scan pack-indexes listed by stdin for commits"
 msgstr ""
 
-#: builtin/commit-graph.c:168
+#: builtin/commit-graph.c:177
 msgid "start walk at commits listed by stdin"
 msgstr ""
 
-#: builtin/commit-graph.c:170
+#: builtin/commit-graph.c:179
 msgid "include all commits already in the commit-graph file"
 msgstr ""
 
-#: builtin/commit-graph.c:172
+#: builtin/commit-graph.c:182
 msgid "allow writing an incremental commit-graph file"
 msgstr ""
 
-#: builtin/commit-graph.c:174 builtin/commit-graph.c:178
+#: builtin/commit-graph.c:184 builtin/commit-graph.c:188
 msgid "maximum number of commits in a non-base split commit-graph"
 msgstr ""
 
-#: builtin/commit-graph.c:176
+#: builtin/commit-graph.c:186
 msgid "maximum ratio between two levels of a split commit-graph"
 msgstr ""
 
-#: builtin/commit-graph.c:191
+#: builtin/commit-graph.c:204
 msgid "use at most one of --reachable, --stdin-commits, or --stdin-packs"
 msgstr ""
 
@@ -11412,166 +11445,166 @@
 msgid "print sizes in human readable format"
 msgstr ""
 
-#: builtin/describe.c:27
+#: builtin/describe.c:26
 msgid "git describe [<options>] [<commit-ish>...]"
 msgstr ""
 
-#: builtin/describe.c:28
+#: builtin/describe.c:27
 msgid "git describe [<options>] --dirty"
 msgstr ""
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "head"
 msgstr ""
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "lightweight"
 msgstr ""
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "annotated"
 msgstr ""
 
-#: builtin/describe.c:273
+#: builtin/describe.c:275
 #, c-format
 msgid "annotated tag %s not available"
 msgstr ""
 
-#: builtin/describe.c:277
+#: builtin/describe.c:279
 #, c-format
 msgid "annotated tag %s has no embedded name"
 msgstr ""
 
-#: builtin/describe.c:279
+#: builtin/describe.c:281
 #, c-format
 msgid "tag '%s' is really '%s' here"
 msgstr ""
 
-#: builtin/describe.c:323
+#: builtin/describe.c:325
 #, c-format
 msgid "no tag exactly matches '%s'"
 msgstr ""
 
-#: builtin/describe.c:325
+#: builtin/describe.c:327
 #, c-format
 msgid "No exact match on refs or tags, searching to describe\n"
 msgstr ""
 
-#: builtin/describe.c:379
+#: builtin/describe.c:381
 #, c-format
 msgid "finished search at %s\n"
 msgstr ""
 
-#: builtin/describe.c:405
+#: builtin/describe.c:407
 #, c-format
 msgid ""
 "No annotated tags can describe '%s'.\n"
 "However, there were unannotated tags: try --tags."
 msgstr ""
 
-#: builtin/describe.c:409
+#: builtin/describe.c:411
 #, c-format
 msgid ""
 "No tags can describe '%s'.\n"
 "Try --always, or create some tags."
 msgstr ""
 
-#: builtin/describe.c:439
+#: builtin/describe.c:441
 #, c-format
 msgid "traversed %lu commits\n"
 msgstr ""
 
-#: builtin/describe.c:442
+#: builtin/describe.c:444
 #, c-format
 msgid ""
 "more than %i tags found; listed %i most recent\n"
 "gave up search at %s\n"
 msgstr ""
 
-#: builtin/describe.c:510
+#: builtin/describe.c:512
 #, c-format
 msgid "describe %s\n"
 msgstr ""
 
-#: builtin/describe.c:513
+#: builtin/describe.c:515
 #, c-format
 msgid "Not a valid object name %s"
 msgstr ""
 
-#: builtin/describe.c:521
+#: builtin/describe.c:523
 #, c-format
 msgid "%s is neither a commit nor blob"
 msgstr ""
 
-#: builtin/describe.c:535
+#: builtin/describe.c:537
 msgid "find the tag that comes after the commit"
 msgstr ""
 
-#: builtin/describe.c:536
+#: builtin/describe.c:538
 msgid "debug search strategy on stderr"
 msgstr ""
 
-#: builtin/describe.c:537
+#: builtin/describe.c:539
 msgid "use any ref"
 msgstr ""
 
-#: builtin/describe.c:538
+#: builtin/describe.c:540
 msgid "use any tag, even unannotated"
 msgstr ""
 
-#: builtin/describe.c:539
+#: builtin/describe.c:541
 msgid "always use long format"
 msgstr ""
 
-#: builtin/describe.c:540
+#: builtin/describe.c:542
 msgid "only follow first parent"
 msgstr ""
 
-#: builtin/describe.c:543
+#: builtin/describe.c:545
 msgid "only output exact matches"
 msgstr ""
 
-#: builtin/describe.c:545
+#: builtin/describe.c:547
 msgid "consider <n> most recent tags (default: 10)"
 msgstr ""
 
-#: builtin/describe.c:547
+#: builtin/describe.c:549
 msgid "only consider tags matching <pattern>"
 msgstr ""
 
-#: builtin/describe.c:549
+#: builtin/describe.c:551
 msgid "do not consider tags matching <pattern>"
 msgstr ""
 
-#: builtin/describe.c:551 builtin/name-rev.c:422
+#: builtin/describe.c:553 builtin/name-rev.c:426
 msgid "show abbreviated commit object as fallback"
 msgstr ""
 
-#: builtin/describe.c:552 builtin/describe.c:555
+#: builtin/describe.c:554 builtin/describe.c:557
 msgid "mark"
 msgstr ""
 
-#: builtin/describe.c:553
+#: builtin/describe.c:555
 msgid "append <mark> on dirty working tree (default: \"-dirty\")"
 msgstr ""
 
-#: builtin/describe.c:556
+#: builtin/describe.c:558
 msgid "append <mark> on broken working tree (default: \"-broken\")"
 msgstr ""
 
-#: builtin/describe.c:574
+#: builtin/describe.c:576
 msgid "--long is incompatible with --abbrev=0"
 msgstr ""
 
-#: builtin/describe.c:603
+#: builtin/describe.c:605
 msgid "No names found, cannot describe anything."
 msgstr ""
 
-#: builtin/describe.c:654
+#: builtin/describe.c:656
 msgid "--dirty is incompatible with commit-ishes"
 msgstr ""
 
-#: builtin/describe.c:656
+#: builtin/describe.c:658
 msgid "--broken is incompatible with commit-ishes"
 msgstr ""
 
@@ -11608,109 +11641,109 @@
 msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
 msgstr ""
 
-#: builtin/difftool.c:253
+#: builtin/difftool.c:260
 #, c-format
 msgid "failed: %d"
 msgstr ""
 
-#: builtin/difftool.c:295
+#: builtin/difftool.c:302
 #, c-format
 msgid "could not read symlink %s"
 msgstr ""
 
-#: builtin/difftool.c:297
+#: builtin/difftool.c:304
 #, c-format
 msgid "could not read symlink file %s"
 msgstr ""
 
-#: builtin/difftool.c:305
+#: builtin/difftool.c:312
 #, c-format
 msgid "could not read object %s for symlink %s"
 msgstr ""
 
-#: builtin/difftool.c:406
+#: builtin/difftool.c:413
 msgid ""
 "combined diff formats('-c' and '--cc') are not supported in\n"
 "directory diff mode('-d' and '--dir-diff')."
 msgstr ""
 
-#: builtin/difftool.c:626
+#: builtin/difftool.c:634
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr ""
 
-#: builtin/difftool.c:628
+#: builtin/difftool.c:636
 msgid "working tree file has been left."
 msgstr ""
 
-#: builtin/difftool.c:639
+#: builtin/difftool.c:647
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr ""
 
-#: builtin/difftool.c:640
+#: builtin/difftool.c:648
 msgid "you may want to cleanup or recover these."
 msgstr ""
 
-#: builtin/difftool.c:689
+#: builtin/difftool.c:697
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr ""
 
-#: builtin/difftool.c:691
+#: builtin/difftool.c:699
 msgid "perform a full-directory diff"
 msgstr ""
 
-#: builtin/difftool.c:693
+#: builtin/difftool.c:701
 msgid "do not prompt before launching a diff tool"
 msgstr ""
 
-#: builtin/difftool.c:698
+#: builtin/difftool.c:706
 msgid "use symlinks in dir-diff mode"
 msgstr ""
 
-#: builtin/difftool.c:699
+#: builtin/difftool.c:707
 msgid "tool"
 msgstr ""
 
-#: builtin/difftool.c:700
+#: builtin/difftool.c:708
 msgid "use the specified diff tool"
 msgstr ""
 
-#: builtin/difftool.c:702
+#: builtin/difftool.c:710
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr ""
 
-#: builtin/difftool.c:705
+#: builtin/difftool.c:713
 msgid ""
 "make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
 "code"
 msgstr ""
 
-#: builtin/difftool.c:708
+#: builtin/difftool.c:716
 msgid "specify a custom command for viewing diffs"
 msgstr ""
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:717
 msgid "passed to `diff`"
 msgstr ""
 
-#: builtin/difftool.c:724
+#: builtin/difftool.c:732
 msgid "difftool requires worktree or --no-index"
 msgstr ""
 
-#: builtin/difftool.c:731
+#: builtin/difftool.c:739
 msgid "--dir-diff is incompatible with --no-index"
 msgstr ""
 
-#: builtin/difftool.c:734
+#: builtin/difftool.c:742
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr ""
 
-#: builtin/difftool.c:742
+#: builtin/difftool.c:750
 msgid "no <tool> given for --tool=<tool>"
 msgstr ""
 
-#: builtin/difftool.c:749
+#: builtin/difftool.c:757
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr ""
 
@@ -11746,251 +11779,275 @@
 msgid "git fast-export [rev-list-opts]"
 msgstr ""
 
-#: builtin/fast-export.c:1124
+#: builtin/fast-export.c:852
+msgid "Error: Cannot export nested tags unless --mark-tags is specified."
+msgstr ""
+
+#: builtin/fast-export.c:1152
 msgid "show progress after <n> objects"
 msgstr ""
 
-#: builtin/fast-export.c:1126
+#: builtin/fast-export.c:1154
 msgid "select handling of signed tags"
 msgstr ""
 
-#: builtin/fast-export.c:1129
+#: builtin/fast-export.c:1157
 msgid "select handling of tags that tag filtered objects"
 msgstr ""
 
-#: builtin/fast-export.c:1132
+#: builtin/fast-export.c:1160
 msgid "select handling of commit messages in an alternate encoding"
 msgstr ""
 
-#: builtin/fast-export.c:1135
+#: builtin/fast-export.c:1163
 msgid "Dump marks to this file"
 msgstr ""
 
-#: builtin/fast-export.c:1137
+#: builtin/fast-export.c:1165
 msgid "Import marks from this file"
 msgstr ""
 
-#: builtin/fast-export.c:1139
+#: builtin/fast-export.c:1169
+msgid "Import marks from this file if it exists"
+msgstr ""
+
+#: builtin/fast-export.c:1171
 msgid "Fake a tagger when tags lack one"
 msgstr ""
 
-#: builtin/fast-export.c:1141
+#: builtin/fast-export.c:1173
 msgid "Output full tree for each commit"
 msgstr ""
 
-#: builtin/fast-export.c:1143
+#: builtin/fast-export.c:1175
 msgid "Use the done feature to terminate the stream"
 msgstr ""
 
-#: builtin/fast-export.c:1144
+#: builtin/fast-export.c:1176
 msgid "Skip output of blob data"
 msgstr ""
 
-#: builtin/fast-export.c:1145 builtin/log.c:1632
+#: builtin/fast-export.c:1177 builtin/log.c:1633
 msgid "refspec"
 msgstr ""
 
-#: builtin/fast-export.c:1146
+#: builtin/fast-export.c:1178
 msgid "Apply refspec to exported refs"
 msgstr ""
 
-#: builtin/fast-export.c:1147
+#: builtin/fast-export.c:1179
 msgid "anonymize output"
 msgstr ""
 
-#: builtin/fast-export.c:1149
+#: builtin/fast-export.c:1181
 msgid "Reference parents which are not in fast-export stream by object id"
 msgstr ""
 
-#: builtin/fast-export.c:1151
+#: builtin/fast-export.c:1183
 msgid "Show original object ids of blobs/commits"
 msgstr ""
 
-#: builtin/fetch.c:30
+#: builtin/fast-export.c:1185
+msgid "Label tags with mark ids"
+msgstr ""
+
+#: builtin/fast-export.c:1220
+msgid "Cannot pass both --import-marks and --import-marks-if-exists"
+msgstr ""
+
+#: builtin/fetch.c:34
 msgid "git fetch [<options>] [<repository> [<refspec>...]]"
 msgstr ""
 
-#: builtin/fetch.c:31
+#: builtin/fetch.c:35
 msgid "git fetch [<options>] <group>"
 msgstr ""
 
-#: builtin/fetch.c:32
+#: builtin/fetch.c:36
 msgid "git fetch --multiple [<options>] [(<repository> | <group>)...]"
 msgstr ""
 
-#: builtin/fetch.c:33
+#: builtin/fetch.c:37
 msgid "git fetch --all [<options>]"
 msgstr ""
 
-#: builtin/fetch.c:125 builtin/pull.c:203
+#: builtin/fetch.c:115
+msgid "fetch.parallel cannot be negative"
+msgstr ""
+
+#: builtin/fetch.c:138 builtin/pull.c:204
 msgid "fetch from all remotes"
 msgstr ""
 
-#: builtin/fetch.c:127 builtin/pull.c:206
+#: builtin/fetch.c:140 builtin/pull.c:248
+msgid "set upstream for git pull/fetch"
+msgstr ""
+
+#: builtin/fetch.c:142 builtin/pull.c:207
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr ""
 
-#: builtin/fetch.c:129 builtin/pull.c:209
+#: builtin/fetch.c:144 builtin/pull.c:210
 msgid "path to upload pack on remote end"
 msgstr ""
 
-#: builtin/fetch.c:130
+#: builtin/fetch.c:145
 msgid "force overwrite of local reference"
 msgstr ""
 
-#: builtin/fetch.c:132
+#: builtin/fetch.c:147
 msgid "fetch from multiple remotes"
 msgstr ""
 
-#: builtin/fetch.c:134 builtin/pull.c:213
+#: builtin/fetch.c:149 builtin/pull.c:214
 msgid "fetch all tags and associated objects"
 msgstr ""
 
-#: builtin/fetch.c:136
+#: builtin/fetch.c:151
 msgid "do not fetch all tags (--no-tags)"
 msgstr ""
 
-#: builtin/fetch.c:138
+#: builtin/fetch.c:153
 msgid "number of submodules fetched in parallel"
 msgstr ""
 
-#: builtin/fetch.c:140 builtin/pull.c:216
+#: builtin/fetch.c:155 builtin/pull.c:217
 msgid "prune remote-tracking branches no longer on remote"
 msgstr ""
 
-#: builtin/fetch.c:142
+#: builtin/fetch.c:157
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
 
-#: builtin/fetch.c:143 builtin/fetch.c:166 builtin/pull.c:140
+#: builtin/fetch.c:158 builtin/fetch.c:181 builtin/pull.c:141
 msgid "on-demand"
 msgstr ""
 
-#: builtin/fetch.c:144
+#: builtin/fetch.c:159
 msgid "control recursive fetching of submodules"
 msgstr ""
 
-#: builtin/fetch.c:148 builtin/pull.c:224
+#: builtin/fetch.c:163 builtin/pull.c:225
 msgid "keep downloaded pack"
 msgstr ""
 
-#: builtin/fetch.c:150
+#: builtin/fetch.c:165
 msgid "allow updating of HEAD ref"
 msgstr ""
 
-#: builtin/fetch.c:153 builtin/fetch.c:159 builtin/pull.c:227
+#: builtin/fetch.c:168 builtin/fetch.c:174 builtin/pull.c:228
 msgid "deepen history of shallow clone"
 msgstr ""
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:170
 msgid "deepen history of shallow repository based on time"
 msgstr ""
 
-#: builtin/fetch.c:161 builtin/pull.c:230
+#: builtin/fetch.c:176 builtin/pull.c:231
 msgid "convert to a complete repository"
 msgstr ""
 
-#: builtin/fetch.c:164
+#: builtin/fetch.c:179
 msgid "prepend this to submodule path output"
 msgstr ""
 
-#: builtin/fetch.c:167
+#: builtin/fetch.c:182
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
 msgstr ""
 
-#: builtin/fetch.c:171 builtin/pull.c:233
+#: builtin/fetch.c:186 builtin/pull.c:234
 msgid "accept refs that update .git/shallow"
 msgstr ""
 
-#: builtin/fetch.c:172 builtin/pull.c:235
+#: builtin/fetch.c:187 builtin/pull.c:236
 msgid "refmap"
 msgstr ""
 
-#: builtin/fetch.c:173 builtin/pull.c:236
+#: builtin/fetch.c:188 builtin/pull.c:237
 msgid "specify fetch refmap"
 msgstr ""
 
-#: builtin/fetch.c:180
+#: builtin/fetch.c:195
 msgid "report that we have only objects reachable from this object"
 msgstr ""
 
-#: builtin/fetch.c:183
+#: builtin/fetch.c:198
 msgid "run 'gc --auto' after fetching"
 msgstr ""
 
-#: builtin/fetch.c:185 builtin/pull.c:245
+#: builtin/fetch.c:200 builtin/pull.c:246
 msgid "check for forced-updates on all updated branches"
 msgstr ""
 
-#: builtin/fetch.c:491
+#: builtin/fetch.c:510
 msgid "Couldn't find remote ref HEAD"
 msgstr ""
 
-#: builtin/fetch.c:630
+#: builtin/fetch.c:650
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
 msgstr ""
 
-#: builtin/fetch.c:728
+#: builtin/fetch.c:748
 #, c-format
 msgid "object %s not found"
 msgstr ""
 
-#: builtin/fetch.c:732
+#: builtin/fetch.c:752
 msgid "[up to date]"
 msgstr ""
 
-#: builtin/fetch.c:745 builtin/fetch.c:761 builtin/fetch.c:833
+#: builtin/fetch.c:765 builtin/fetch.c:781 builtin/fetch.c:853
 msgid "[rejected]"
 msgstr ""
 
-#: builtin/fetch.c:746
+#: builtin/fetch.c:766
 msgid "can't fetch in current branch"
 msgstr ""
 
-#: builtin/fetch.c:756
+#: builtin/fetch.c:776
 msgid "[tag update]"
 msgstr ""
 
-#: builtin/fetch.c:757 builtin/fetch.c:794 builtin/fetch.c:816
-#: builtin/fetch.c:828
+#: builtin/fetch.c:777 builtin/fetch.c:814 builtin/fetch.c:836
+#: builtin/fetch.c:848
 msgid "unable to update local ref"
 msgstr ""
 
-#: builtin/fetch.c:761
+#: builtin/fetch.c:781
 msgid "would clobber existing tag"
 msgstr ""
 
-#: builtin/fetch.c:783
+#: builtin/fetch.c:803
 msgid "[new tag]"
 msgstr ""
 
-#: builtin/fetch.c:786
+#: builtin/fetch.c:806
 msgid "[new branch]"
 msgstr ""
 
-#: builtin/fetch.c:789
+#: builtin/fetch.c:809
 msgid "[new ref]"
 msgstr ""
 
-#: builtin/fetch.c:828
+#: builtin/fetch.c:848
 msgid "forced update"
 msgstr ""
 
-#: builtin/fetch.c:833
+#: builtin/fetch.c:853
 msgid "non-fast-forward"
 msgstr ""
 
-#: builtin/fetch.c:854
+#: builtin/fetch.c:874
 msgid ""
 "Fetch normally indicates which branches had a forced update,\n"
 "but that check has been disabled. To re-enable, use '--show-forced-updates'\n"
 "flag or run 'git config fetch.showForcedUpdates true'."
 msgstr ""
 
-#: builtin/fetch.c:858
+#: builtin/fetch.c:878
 #, c-format
 msgid ""
 "It took %.2f seconds to check forced updates. You can use\n"
@@ -11999,121 +12056,142 @@
 " to avoid this check.\n"
 msgstr ""
 
-#: builtin/fetch.c:888
+#: builtin/fetch.c:908
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr ""
 
-#: builtin/fetch.c:909
+#: builtin/fetch.c:929
 #, c-format
 msgid "reject %s because shallow roots are not allowed to be updated"
 msgstr ""
 
-#: builtin/fetch.c:1000 builtin/fetch.c:1131
+#: builtin/fetch.c:1020 builtin/fetch.c:1157
 #, c-format
 msgid "From %.*s\n"
 msgstr ""
 
-#: builtin/fetch.c:1011
+#: builtin/fetch.c:1031
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
 " 'git remote prune %s' to remove any old, conflicting branches"
 msgstr ""
 
-#: builtin/fetch.c:1101
+#: builtin/fetch.c:1127
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr ""
 
-#: builtin/fetch.c:1102
+#: builtin/fetch.c:1128
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr ""
 
-#: builtin/fetch.c:1134
+#: builtin/fetch.c:1160
 msgid "[deleted]"
 msgstr ""
 
-#: builtin/fetch.c:1135 builtin/remote.c:1036
+#: builtin/fetch.c:1161 builtin/remote.c:1036
 msgid "(none)"
 msgstr ""
 
-#: builtin/fetch.c:1158
+#: builtin/fetch.c:1184
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr ""
 
-#: builtin/fetch.c:1177
+#: builtin/fetch.c:1203
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr ""
 
-#: builtin/fetch.c:1180
+#: builtin/fetch.c:1206
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr ""
 
-#: builtin/fetch.c:1484
+#: builtin/fetch.c:1414
+msgid "multiple branch detected, incompatible with --set-upstream"
+msgstr ""
+
+#: builtin/fetch.c:1429
+msgid "not setting upstream for a remote remote-tracking branch"
+msgstr ""
+
+#: builtin/fetch.c:1431
+msgid "not setting upstream for a remote tag"
+msgstr ""
+
+#: builtin/fetch.c:1433
+msgid "unknown branch type"
+msgstr ""
+
+#: builtin/fetch.c:1435
+msgid ""
+"no source branch found.\n"
+"you need to specify exactly one branch with the --set-upstream option."
+msgstr ""
+
+#: builtin/fetch.c:1561 builtin/fetch.c:1623
 #, c-format
 msgid "Fetching %s\n"
 msgstr ""
 
-#: builtin/fetch.c:1486 builtin/remote.c:100
+#: builtin/fetch.c:1571 builtin/fetch.c:1625 builtin/remote.c:100
 #, c-format
 msgid "Could not fetch %s"
 msgstr ""
 
-#: builtin/fetch.c:1532
-msgid ""
-"--filter can only be used with the remote configured in extensions."
-"partialClone"
+#: builtin/fetch.c:1583
+#, c-format
+msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr ""
 
-#: builtin/fetch.c:1556
+#: builtin/fetch.c:1685
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
 msgstr ""
 
-#: builtin/fetch.c:1593
+#: builtin/fetch.c:1722
 msgid "You need to specify a tag name."
 msgstr ""
 
-#: builtin/fetch.c:1644
+#: builtin/fetch.c:1774
 msgid "Negative depth in --deepen is not supported"
 msgstr ""
 
-#: builtin/fetch.c:1646
+#: builtin/fetch.c:1776
 msgid "--deepen and --depth are mutually exclusive"
 msgstr ""
 
-#: builtin/fetch.c:1651
+#: builtin/fetch.c:1781
 msgid "--depth and --unshallow cannot be used together"
 msgstr ""
 
-#: builtin/fetch.c:1653
+#: builtin/fetch.c:1783
 msgid "--unshallow on a complete repository does not make sense"
 msgstr ""
 
-#: builtin/fetch.c:1669
+#: builtin/fetch.c:1799
 msgid "fetch --all does not take a repository argument"
 msgstr ""
 
-#: builtin/fetch.c:1671
+#: builtin/fetch.c:1801
 msgid "fetch --all does not make sense with refspecs"
 msgstr ""
 
-#: builtin/fetch.c:1680
+#: builtin/fetch.c:1810
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr ""
 
-#: builtin/fetch.c:1687
+#: builtin/fetch.c:1817
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr ""
 
-#: builtin/fetch.c:1703
+#: builtin/fetch.c:1835
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
@@ -12445,7 +12523,7 @@
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr ""
 
-#: builtin/gc.c:34
+#: builtin/gc.c:35
 msgid "git gc [<options>]"
 msgstr ""
 
@@ -12459,17 +12537,17 @@
 msgid "failed to parse '%s' value '%s'"
 msgstr ""
 
-#: builtin/gc.c:476 builtin/init-db.c:55
+#: builtin/gc.c:475 builtin/init-db.c:55
 #, c-format
 msgid "cannot stat '%s'"
 msgstr ""
 
-#: builtin/gc.c:485 builtin/notes.c:240 builtin/tag.c:529
+#: builtin/gc.c:484 builtin/notes.c:240 builtin/tag.c:529
 #, c-format
 msgid "cannot read '%s'"
 msgstr ""
 
-#: builtin/gc.c:492
+#: builtin/gc.c:491
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -12479,58 +12557,58 @@
 "%s"
 msgstr ""
 
-#: builtin/gc.c:540
+#: builtin/gc.c:539
 msgid "prune unreferenced objects"
 msgstr ""
 
-#: builtin/gc.c:542
+#: builtin/gc.c:541
 msgid "be more thorough (increased runtime)"
 msgstr ""
 
-#: builtin/gc.c:543
+#: builtin/gc.c:542
 msgid "enable auto-gc mode"
 msgstr ""
 
-#: builtin/gc.c:546
+#: builtin/gc.c:545
 msgid "force running gc even if there may be another gc running"
 msgstr ""
 
-#: builtin/gc.c:549
+#: builtin/gc.c:548
 msgid "repack all other packs except the largest pack"
 msgstr ""
 
-#: builtin/gc.c:566
+#: builtin/gc.c:565
 #, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr ""
 
-#: builtin/gc.c:577
+#: builtin/gc.c:576
 #, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr ""
 
-#: builtin/gc.c:597
+#: builtin/gc.c:596
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr ""
 
-#: builtin/gc.c:599
+#: builtin/gc.c:598
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr ""
 
-#: builtin/gc.c:600
+#: builtin/gc.c:599
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr ""
 
-#: builtin/gc.c:640
+#: builtin/gc.c:639
 #, c-format
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
 msgstr ""
 
-#: builtin/gc.c:695
+#: builtin/gc.c:694
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr ""
@@ -12554,257 +12632,257 @@
 #. grep.threads
 #.
 #: builtin/grep.c:287 builtin/index-pack.c:1534 builtin/index-pack.c:1727
-#: builtin/pack-objects.c:2728
+#: builtin/pack-objects.c:2708
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr ""
 
-#: builtin/grep.c:467 builtin/grep.c:591 builtin/grep.c:633
+#: builtin/grep.c:467 builtin/grep.c:592 builtin/grep.c:635
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr ""
 
-#: builtin/grep.c:648
+#: builtin/grep.c:650
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr ""
 
-#: builtin/grep.c:714
+#: builtin/grep.c:716
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr ""
 
-#: builtin/grep.c:813
+#: builtin/grep.c:815
 msgid "search in index instead of in the work tree"
 msgstr ""
 
-#: builtin/grep.c:815
+#: builtin/grep.c:817
 msgid "find in contents not managed by git"
 msgstr ""
 
-#: builtin/grep.c:817
+#: builtin/grep.c:819
 msgid "search in both tracked and untracked files"
 msgstr ""
 
-#: builtin/grep.c:819
+#: builtin/grep.c:821
 msgid "ignore files specified via '.gitignore'"
 msgstr ""
 
-#: builtin/grep.c:821
+#: builtin/grep.c:823
 msgid "recursively search in each submodule"
 msgstr ""
 
-#: builtin/grep.c:824
+#: builtin/grep.c:826
 msgid "show non-matching lines"
 msgstr ""
 
-#: builtin/grep.c:826
+#: builtin/grep.c:828
 msgid "case insensitive matching"
 msgstr ""
 
-#: builtin/grep.c:828
+#: builtin/grep.c:830
 msgid "match patterns only at word boundaries"
 msgstr ""
 
-#: builtin/grep.c:830
+#: builtin/grep.c:832
 msgid "process binary files as text"
 msgstr ""
 
-#: builtin/grep.c:832
+#: builtin/grep.c:834
 msgid "don't match patterns in binary files"
 msgstr ""
 
-#: builtin/grep.c:835
+#: builtin/grep.c:837
 msgid "process binary files with textconv filters"
 msgstr ""
 
-#: builtin/grep.c:837
+#: builtin/grep.c:839
 msgid "search in subdirectories (default)"
 msgstr ""
 
-#: builtin/grep.c:839
+#: builtin/grep.c:841
 msgid "descend at most <depth> levels"
 msgstr ""
 
-#: builtin/grep.c:843
+#: builtin/grep.c:845
 msgid "use extended POSIX regular expressions"
 msgstr ""
 
-#: builtin/grep.c:846
+#: builtin/grep.c:848
 msgid "use basic POSIX regular expressions (default)"
 msgstr ""
 
-#: builtin/grep.c:849
+#: builtin/grep.c:851
 msgid "interpret patterns as fixed strings"
 msgstr ""
 
-#: builtin/grep.c:852
+#: builtin/grep.c:854
 msgid "use Perl-compatible regular expressions"
 msgstr ""
 
-#: builtin/grep.c:855
+#: builtin/grep.c:857
 msgid "show line numbers"
 msgstr ""
 
-#: builtin/grep.c:856
+#: builtin/grep.c:858
 msgid "show column number of first match"
 msgstr ""
 
-#: builtin/grep.c:857
+#: builtin/grep.c:859
 msgid "don't show filenames"
 msgstr ""
 
-#: builtin/grep.c:858
+#: builtin/grep.c:860
 msgid "show filenames"
 msgstr ""
 
-#: builtin/grep.c:860
+#: builtin/grep.c:862
 msgid "show filenames relative to top directory"
 msgstr ""
 
-#: builtin/grep.c:862
+#: builtin/grep.c:864
 msgid "show only filenames instead of matching lines"
 msgstr ""
 
-#: builtin/grep.c:864
+#: builtin/grep.c:866
 msgid "synonym for --files-with-matches"
 msgstr ""
 
-#: builtin/grep.c:867
+#: builtin/grep.c:869
 msgid "show only the names of files without match"
 msgstr ""
 
-#: builtin/grep.c:869
+#: builtin/grep.c:871
 msgid "print NUL after filenames"
 msgstr ""
 
-#: builtin/grep.c:872
+#: builtin/grep.c:874
 msgid "show only matching parts of a line"
 msgstr ""
 
-#: builtin/grep.c:874
+#: builtin/grep.c:876
 msgid "show the number of matches instead of matching lines"
 msgstr ""
 
-#: builtin/grep.c:875
+#: builtin/grep.c:877
 msgid "highlight matches"
 msgstr ""
 
-#: builtin/grep.c:877
+#: builtin/grep.c:879
 msgid "print empty line between matches from different files"
 msgstr ""
 
-#: builtin/grep.c:879
+#: builtin/grep.c:881
 msgid "show filename only once above matches from same file"
 msgstr ""
 
-#: builtin/grep.c:882
+#: builtin/grep.c:884
 msgid "show <n> context lines before and after matches"
 msgstr ""
 
-#: builtin/grep.c:885
+#: builtin/grep.c:887
 msgid "show <n> context lines before matches"
 msgstr ""
 
-#: builtin/grep.c:887
+#: builtin/grep.c:889
 msgid "show <n> context lines after matches"
 msgstr ""
 
-#: builtin/grep.c:889
+#: builtin/grep.c:891
 msgid "use <n> worker threads"
 msgstr ""
 
-#: builtin/grep.c:890
+#: builtin/grep.c:892
 msgid "shortcut for -C NUM"
 msgstr ""
 
-#: builtin/grep.c:893
+#: builtin/grep.c:895
 msgid "show a line with the function name before matches"
 msgstr ""
 
-#: builtin/grep.c:895
+#: builtin/grep.c:897
 msgid "show the surrounding function"
 msgstr ""
 
-#: builtin/grep.c:898
+#: builtin/grep.c:900
 msgid "read patterns from file"
 msgstr ""
 
-#: builtin/grep.c:900
+#: builtin/grep.c:902
 msgid "match <pattern>"
 msgstr ""
 
-#: builtin/grep.c:902
+#: builtin/grep.c:904
 msgid "combine patterns specified with -e"
 msgstr ""
 
-#: builtin/grep.c:914
+#: builtin/grep.c:916
 msgid "indicate hit with exit status without output"
 msgstr ""
 
-#: builtin/grep.c:916
+#: builtin/grep.c:918
 msgid "show only matches from files that match all patterns"
 msgstr ""
 
-#: builtin/grep.c:918
+#: builtin/grep.c:920
 msgid "show parse tree for grep expression"
 msgstr ""
 
-#: builtin/grep.c:922
+#: builtin/grep.c:924
 msgid "pager"
 msgstr ""
 
-#: builtin/grep.c:922
+#: builtin/grep.c:924
 msgid "show matching files in the pager"
 msgstr ""
 
-#: builtin/grep.c:926
+#: builtin/grep.c:928
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr ""
 
-#: builtin/grep.c:990
+#: builtin/grep.c:992
 msgid "no pattern given"
 msgstr ""
 
-#: builtin/grep.c:1026
+#: builtin/grep.c:1028
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr ""
 
-#: builtin/grep.c:1034
+#: builtin/grep.c:1036
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr ""
 
-#: builtin/grep.c:1065
+#: builtin/grep.c:1067
 msgid "invalid option combination, ignoring --threads"
 msgstr ""
 
-#: builtin/grep.c:1068 builtin/pack-objects.c:3416
+#: builtin/grep.c:1070 builtin/pack-objects.c:3400
 msgid "no threads support, ignoring --threads"
 msgstr ""
 
-#: builtin/grep.c:1071 builtin/index-pack.c:1531 builtin/pack-objects.c:2725
+#: builtin/grep.c:1073 builtin/index-pack.c:1531 builtin/pack-objects.c:2705
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr ""
 
-#: builtin/grep.c:1094
+#: builtin/grep.c:1096
 msgid "--open-files-in-pager only works on the worktree"
 msgstr ""
 
-#: builtin/grep.c:1117
+#: builtin/grep.c:1119
 msgid "option not supported with --recurse-submodules"
 msgstr ""
 
-#: builtin/grep.c:1123
+#: builtin/grep.c:1125
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr ""
 
-#: builtin/grep.c:1129
+#: builtin/grep.c:1131
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr ""
 
-#: builtin/grep.c:1137
+#: builtin/grep.c:1139
 msgid "both --cached and trees are given"
 msgstr ""
 
@@ -13110,7 +13188,7 @@
 msgid "Resolving deltas"
 msgstr ""
 
-#: builtin/index-pack.c:1205 builtin/pack-objects.c:2497
+#: builtin/index-pack.c:1205 builtin/pack-objects.c:2481
 #, c-format
 msgid "unable to create thread: %s"
 msgstr ""
@@ -13175,7 +13253,7 @@
 msgid "cannot store index file"
 msgstr ""
 
-#: builtin/index-pack.c:1525 builtin/pack-objects.c:2736
+#: builtin/index-pack.c:1525 builtin/pack-objects.c:2716
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr ""
@@ -13450,341 +13528,341 @@
 msgid "git show %s: bad file"
 msgstr ""
 
-#: builtin/log.c:549 builtin/log.c:643
+#: builtin/log.c:549 builtin/log.c:644
 #, c-format
 msgid "could not read object %s"
 msgstr ""
 
-#: builtin/log.c:668
+#: builtin/log.c:669
 #, c-format
 msgid "unknown type: %d"
 msgstr ""
 
-#: builtin/log.c:791
+#: builtin/log.c:792
 msgid "format.headers without value"
 msgstr ""
 
-#: builtin/log.c:908
+#: builtin/log.c:909
 msgid "name of output directory is too long"
 msgstr ""
 
-#: builtin/log.c:924
+#: builtin/log.c:925
 #, c-format
 msgid "cannot open patch file %s"
 msgstr ""
 
-#: builtin/log.c:941
+#: builtin/log.c:942
 msgid "need exactly one range"
 msgstr ""
 
-#: builtin/log.c:951
+#: builtin/log.c:952
 msgid "not a range"
 msgstr ""
 
-#: builtin/log.c:1074
+#: builtin/log.c:1075
 msgid "cover letter needs email format"
 msgstr ""
 
-#: builtin/log.c:1080
+#: builtin/log.c:1081
 msgid "failed to create cover-letter file"
 msgstr ""
 
-#: builtin/log.c:1159
+#: builtin/log.c:1160
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr ""
 
-#: builtin/log.c:1186
+#: builtin/log.c:1187
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr ""
 
-#: builtin/log.c:1244
+#: builtin/log.c:1245
 msgid "two output directories?"
 msgstr ""
 
-#: builtin/log.c:1355 builtin/log.c:2099 builtin/log.c:2101 builtin/log.c:2113
+#: builtin/log.c:1356 builtin/log.c:2116 builtin/log.c:2118 builtin/log.c:2130
 #, c-format
 msgid "unknown commit %s"
 msgstr ""
 
-#: builtin/log.c:1365 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1366 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr ""
 
-#: builtin/log.c:1370
+#: builtin/log.c:1371
 msgid "could not find exact merge base"
 msgstr ""
 
-#: builtin/log.c:1374
+#: builtin/log.c:1375
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
 "Or you could specify base commit by --base=<base-commit-id> manually"
 msgstr ""
 
-#: builtin/log.c:1394
+#: builtin/log.c:1395
 msgid "failed to find exact merge base"
 msgstr ""
 
-#: builtin/log.c:1405
+#: builtin/log.c:1406
 msgid "base commit should be the ancestor of revision list"
 msgstr ""
 
-#: builtin/log.c:1409
+#: builtin/log.c:1410
 msgid "base commit shouldn't be in revision list"
 msgstr ""
 
-#: builtin/log.c:1462
+#: builtin/log.c:1463
 msgid "cannot get patch id"
 msgstr ""
 
-#: builtin/log.c:1514
+#: builtin/log.c:1515
 msgid "failed to infer range-diff ranges"
 msgstr ""
 
-#: builtin/log.c:1559
+#: builtin/log.c:1560
 msgid "use [PATCH n/m] even with a single patch"
 msgstr ""
 
-#: builtin/log.c:1562
+#: builtin/log.c:1563
 msgid "use [PATCH] even with multiple patches"
 msgstr ""
 
-#: builtin/log.c:1566
+#: builtin/log.c:1567
 msgid "print patches to standard out"
 msgstr ""
 
-#: builtin/log.c:1568
+#: builtin/log.c:1569
 msgid "generate a cover letter"
 msgstr ""
 
-#: builtin/log.c:1570
+#: builtin/log.c:1571
 msgid "use simple number sequence for output file names"
 msgstr ""
 
-#: builtin/log.c:1571
+#: builtin/log.c:1572
 msgid "sfx"
 msgstr ""
 
-#: builtin/log.c:1572
+#: builtin/log.c:1573
 msgid "use <sfx> instead of '.patch'"
 msgstr ""
 
-#: builtin/log.c:1574
+#: builtin/log.c:1575
 msgid "start numbering patches at <n> instead of 1"
 msgstr ""
 
-#: builtin/log.c:1576
+#: builtin/log.c:1577
 msgid "mark the series as Nth re-roll"
 msgstr ""
 
-#: builtin/log.c:1578
+#: builtin/log.c:1579
 msgid "Use [RFC PATCH] instead of [PATCH]"
 msgstr ""
 
-#: builtin/log.c:1581
+#: builtin/log.c:1582
 msgid "Use [<prefix>] instead of [PATCH]"
 msgstr ""
 
-#: builtin/log.c:1584
+#: builtin/log.c:1585
 msgid "store resulting files in <dir>"
 msgstr ""
 
-#: builtin/log.c:1587
+#: builtin/log.c:1588
 msgid "don't strip/add [PATCH]"
 msgstr ""
 
-#: builtin/log.c:1590
+#: builtin/log.c:1591
 msgid "don't output binary diffs"
 msgstr ""
 
-#: builtin/log.c:1592
+#: builtin/log.c:1593
 msgid "output all-zero hash in From header"
 msgstr ""
 
-#: builtin/log.c:1594
+#: builtin/log.c:1595
 msgid "don't include a patch matching a commit upstream"
 msgstr ""
 
-#: builtin/log.c:1596
+#: builtin/log.c:1597
 msgid "show patch format instead of default (patch + stat)"
 msgstr ""
 
-#: builtin/log.c:1598
+#: builtin/log.c:1599
 msgid "Messaging"
 msgstr ""
 
-#: builtin/log.c:1599
+#: builtin/log.c:1600
 msgid "header"
 msgstr ""
 
-#: builtin/log.c:1600
+#: builtin/log.c:1601
 msgid "add email header"
 msgstr ""
 
-#: builtin/log.c:1601 builtin/log.c:1603
+#: builtin/log.c:1602 builtin/log.c:1604
 msgid "email"
 msgstr ""
 
-#: builtin/log.c:1601
+#: builtin/log.c:1602
 msgid "add To: header"
 msgstr ""
 
-#: builtin/log.c:1603
+#: builtin/log.c:1604
 msgid "add Cc: header"
 msgstr ""
 
-#: builtin/log.c:1605
+#: builtin/log.c:1606
 msgid "ident"
 msgstr ""
 
-#: builtin/log.c:1606
+#: builtin/log.c:1607
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 
-#: builtin/log.c:1608
+#: builtin/log.c:1609
 msgid "message-id"
 msgstr ""
 
-#: builtin/log.c:1609
+#: builtin/log.c:1610
 msgid "make first mail a reply to <message-id>"
 msgstr ""
 
-#: builtin/log.c:1610 builtin/log.c:1613
+#: builtin/log.c:1611 builtin/log.c:1614
 msgid "boundary"
 msgstr ""
 
-#: builtin/log.c:1611
+#: builtin/log.c:1612
 msgid "attach the patch"
 msgstr ""
 
-#: builtin/log.c:1614
+#: builtin/log.c:1615
 msgid "inline the patch"
 msgstr ""
 
-#: builtin/log.c:1618
+#: builtin/log.c:1619
 msgid "enable message threading, styles: shallow, deep"
 msgstr ""
 
-#: builtin/log.c:1620
+#: builtin/log.c:1621
 msgid "signature"
 msgstr ""
 
-#: builtin/log.c:1621
+#: builtin/log.c:1622
 msgid "add a signature"
 msgstr ""
 
-#: builtin/log.c:1622
+#: builtin/log.c:1623
 msgid "base-commit"
 msgstr ""
 
-#: builtin/log.c:1623
+#: builtin/log.c:1624
 msgid "add prerequisite tree info to the patch series"
 msgstr ""
 
-#: builtin/log.c:1625
+#: builtin/log.c:1626
 msgid "add a signature from a file"
 msgstr ""
 
-#: builtin/log.c:1626
+#: builtin/log.c:1627
 msgid "don't print the patch filenames"
 msgstr ""
 
-#: builtin/log.c:1628
+#: builtin/log.c:1629
 msgid "show progress while generating patches"
 msgstr ""
 
-#: builtin/log.c:1630
+#: builtin/log.c:1631
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr ""
 
-#: builtin/log.c:1633
+#: builtin/log.c:1634
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
 
-#: builtin/log.c:1635
+#: builtin/log.c:1636
 msgid "percentage by which creation is weighted"
 msgstr ""
 
-#: builtin/log.c:1710
+#: builtin/log.c:1711
 #, c-format
 msgid "invalid ident line: %s"
 msgstr ""
 
-#: builtin/log.c:1725
+#: builtin/log.c:1726
 msgid "-n and -k are mutually exclusive"
 msgstr ""
 
-#: builtin/log.c:1727
+#: builtin/log.c:1728
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr ""
 
-#: builtin/log.c:1735
+#: builtin/log.c:1736
 msgid "--name-only does not make sense"
 msgstr ""
 
-#: builtin/log.c:1737
+#: builtin/log.c:1738
 msgid "--name-status does not make sense"
 msgstr ""
 
-#: builtin/log.c:1739
+#: builtin/log.c:1740
 msgid "--check does not make sense"
 msgstr ""
 
-#: builtin/log.c:1771
+#: builtin/log.c:1773
 msgid "standard output, or directory, which one?"
 msgstr ""
 
-#: builtin/log.c:1860
+#: builtin/log.c:1877
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr ""
 
-#: builtin/log.c:1864
+#: builtin/log.c:1881
 msgid "Interdiff:"
 msgstr ""
 
-#: builtin/log.c:1865
+#: builtin/log.c:1882
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr ""
 
-#: builtin/log.c:1871
+#: builtin/log.c:1888
 msgid "--creation-factor requires --range-diff"
 msgstr ""
 
-#: builtin/log.c:1875
+#: builtin/log.c:1892
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr ""
 
-#: builtin/log.c:1883
+#: builtin/log.c:1900
 msgid "Range-diff:"
 msgstr ""
 
-#: builtin/log.c:1884
+#: builtin/log.c:1901
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr ""
 
-#: builtin/log.c:1895
+#: builtin/log.c:1912
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr ""
 
-#: builtin/log.c:1931
+#: builtin/log.c:1948
 msgid "Generating patches"
 msgstr ""
 
-#: builtin/log.c:1975
+#: builtin/log.c:1992
 msgid "failed to create output files"
 msgstr ""
 
-#: builtin/log.c:2034
+#: builtin/log.c:2051
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr ""
 
-#: builtin/log.c:2088
+#: builtin/log.c:2105
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -13905,7 +13983,7 @@
 msgid "do not print remote URL"
 msgstr ""
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1464
+#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1488
 msgid "exec"
 msgstr ""
 
@@ -14014,31 +14092,31 @@
 msgid "Available custom strategies are:"
 msgstr ""
 
-#: builtin/merge.c:244 builtin/pull.c:151
+#: builtin/merge.c:244 builtin/pull.c:152
 msgid "do not show a diffstat at the end of the merge"
 msgstr ""
 
-#: builtin/merge.c:247 builtin/pull.c:154
+#: builtin/merge.c:247 builtin/pull.c:155
 msgid "show a diffstat at the end of the merge"
 msgstr ""
 
-#: builtin/merge.c:248 builtin/pull.c:157
+#: builtin/merge.c:248 builtin/pull.c:158
 msgid "(synonym to --stat)"
 msgstr ""
 
-#: builtin/merge.c:250 builtin/pull.c:160
+#: builtin/merge.c:250 builtin/pull.c:161
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr ""
 
-#: builtin/merge.c:253 builtin/pull.c:166
+#: builtin/merge.c:253 builtin/pull.c:167
 msgid "create a single commit instead of doing a merge"
 msgstr ""
 
-#: builtin/merge.c:255 builtin/pull.c:169
+#: builtin/merge.c:255 builtin/pull.c:170
 msgid "perform a commit if the merge succeeds (default)"
 msgstr ""
 
-#: builtin/merge.c:257 builtin/pull.c:172
+#: builtin/merge.c:257 builtin/pull.c:173
 msgid "edit message before committing"
 msgstr ""
 
@@ -14046,28 +14124,28 @@
 msgid "allow fast-forward (default)"
 msgstr ""
 
-#: builtin/merge.c:261 builtin/pull.c:179
+#: builtin/merge.c:261 builtin/pull.c:180
 msgid "abort if fast-forward is not possible"
 msgstr ""
 
-#: builtin/merge.c:265 builtin/pull.c:182
+#: builtin/merge.c:265 builtin/pull.c:183
 msgid "verify that the named commit has a valid GPG signature"
 msgstr ""
 
-#: builtin/merge.c:266 builtin/notes.c:787 builtin/pull.c:186
-#: builtin/rebase.c:492 builtin/rebase.c:1477 builtin/revert.c:114
+#: builtin/merge.c:266 builtin/notes.c:787 builtin/pull.c:187
+#: builtin/rebase.c:493 builtin/rebase.c:1501 builtin/revert.c:114
 msgid "strategy"
 msgstr ""
 
-#: builtin/merge.c:267 builtin/pull.c:187
+#: builtin/merge.c:267 builtin/pull.c:188
 msgid "merge strategy to use"
 msgstr ""
 
-#: builtin/merge.c:268 builtin/pull.c:190
+#: builtin/merge.c:268 builtin/pull.c:191
 msgid "option=value"
 msgstr ""
 
-#: builtin/merge.c:269 builtin/pull.c:191
+#: builtin/merge.c:269 builtin/pull.c:192
 msgid "option for selected merge strategy"
 msgstr ""
 
@@ -14087,12 +14165,12 @@
 msgid "continue the current in-progress merge"
 msgstr ""
 
-#: builtin/merge.c:284 builtin/pull.c:198
+#: builtin/merge.c:284 builtin/pull.c:199
 msgid "allow merging unrelated histories"
 msgstr ""
 
 #: builtin/merge.c:290
-msgid "verify commit-msg hook"
+msgid "bypass pre-merge-commit and commit-msg hooks"
 msgstr ""
 
 #: builtin/merge.c:307
@@ -14136,215 +14214,215 @@
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr ""
 
-#: builtin/merge.c:708
+#: builtin/merge.c:705
 msgid "Not handling anything other than two heads merge."
 msgstr ""
 
-#: builtin/merge.c:722
+#: builtin/merge.c:719
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr ""
 
-#: builtin/merge.c:737
+#: builtin/merge.c:734
 #, c-format
 msgid "unable to write %s"
 msgstr ""
 
-#: builtin/merge.c:789
+#: builtin/merge.c:786
 #, c-format
 msgid "Could not read from '%s'"
 msgstr ""
 
-#: builtin/merge.c:798
+#: builtin/merge.c:795
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr ""
 
-#: builtin/merge.c:804
+#: builtin/merge.c:801
 msgid ""
 "Please enter a commit message to explain why this merge is necessary,\n"
 "especially if it merges an updated upstream into a topic branch.\n"
 "\n"
 msgstr ""
 
-#: builtin/merge.c:809
+#: builtin/merge.c:806
 msgid "An empty message aborts the commit.\n"
 msgstr ""
 
-#: builtin/merge.c:812
+#: builtin/merge.c:809
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
 "the commit.\n"
 msgstr ""
 
-#: builtin/merge.c:853
+#: builtin/merge.c:862
 msgid "Empty commit message."
 msgstr ""
 
-#: builtin/merge.c:872
+#: builtin/merge.c:877
 #, c-format
 msgid "Wonderful.\n"
 msgstr ""
 
-#: builtin/merge.c:933
+#: builtin/merge.c:938
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 
-#: builtin/merge.c:972
+#: builtin/merge.c:977
 msgid "No current branch."
 msgstr ""
 
-#: builtin/merge.c:974
+#: builtin/merge.c:979
 msgid "No remote for the current branch."
 msgstr ""
 
-#: builtin/merge.c:976
+#: builtin/merge.c:981
 msgid "No default upstream defined for the current branch."
 msgstr ""
 
-#: builtin/merge.c:981
+#: builtin/merge.c:986
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr ""
 
-#: builtin/merge.c:1038
+#: builtin/merge.c:1043
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr ""
 
-#: builtin/merge.c:1141
+#: builtin/merge.c:1146
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr ""
 
-#: builtin/merge.c:1175
+#: builtin/merge.c:1180
 msgid "not something we can merge"
 msgstr ""
 
-#: builtin/merge.c:1278
+#: builtin/merge.c:1283
 msgid "--abort expects no arguments"
 msgstr ""
 
-#: builtin/merge.c:1282
+#: builtin/merge.c:1287
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr ""
 
-#: builtin/merge.c:1291
+#: builtin/merge.c:1296
 msgid "--quit expects no arguments"
 msgstr ""
 
-#: builtin/merge.c:1304
+#: builtin/merge.c:1309
 msgid "--continue expects no arguments"
 msgstr ""
 
-#: builtin/merge.c:1308
+#: builtin/merge.c:1313
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr ""
 
-#: builtin/merge.c:1324
+#: builtin/merge.c:1329
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
 msgstr ""
 
-#: builtin/merge.c:1331
+#: builtin/merge.c:1336
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
 msgstr ""
 
-#: builtin/merge.c:1334
+#: builtin/merge.c:1339
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr ""
 
-#: builtin/merge.c:1348
+#: builtin/merge.c:1353
 msgid "You cannot combine --squash with --no-ff."
 msgstr ""
 
-#: builtin/merge.c:1350
+#: builtin/merge.c:1355
 msgid "You cannot combine --squash with --commit."
 msgstr ""
 
-#: builtin/merge.c:1366
+#: builtin/merge.c:1371
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr ""
 
-#: builtin/merge.c:1383
+#: builtin/merge.c:1388
 msgid "Squash commit into empty head not supported yet"
 msgstr ""
 
-#: builtin/merge.c:1385
+#: builtin/merge.c:1390
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr ""
 
-#: builtin/merge.c:1390
+#: builtin/merge.c:1395
 #, c-format
 msgid "%s - not something we can merge"
 msgstr ""
 
-#: builtin/merge.c:1392
+#: builtin/merge.c:1397
 msgid "Can merge only exactly one commit into empty head"
 msgstr ""
 
-#: builtin/merge.c:1471
+#: builtin/merge.c:1476
 msgid "refusing to merge unrelated histories"
 msgstr ""
 
-#: builtin/merge.c:1480
+#: builtin/merge.c:1485
 msgid "Already up to date."
 msgstr ""
 
-#: builtin/merge.c:1490
+#: builtin/merge.c:1495
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr ""
 
-#: builtin/merge.c:1532
+#: builtin/merge.c:1537
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr ""
 
-#: builtin/merge.c:1539
+#: builtin/merge.c:1544
 #, c-format
 msgid "Nope.\n"
 msgstr ""
 
-#: builtin/merge.c:1564
+#: builtin/merge.c:1569
 msgid "Already up to date. Yeeah!"
 msgstr ""
 
-#: builtin/merge.c:1570
+#: builtin/merge.c:1575
 msgid "Not possible to fast-forward, aborting."
 msgstr ""
 
-#: builtin/merge.c:1593 builtin/merge.c:1658
+#: builtin/merge.c:1598 builtin/merge.c:1663
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr ""
 
-#: builtin/merge.c:1597
+#: builtin/merge.c:1602
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr ""
 
-#: builtin/merge.c:1649
+#: builtin/merge.c:1654
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr ""
 
-#: builtin/merge.c:1651
+#: builtin/merge.c:1656
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr ""
 
-#: builtin/merge.c:1660
+#: builtin/merge.c:1665
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr ""
 
-#: builtin/merge.c:1672
+#: builtin/merge.c:1677
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
@@ -14427,33 +14505,33 @@
 msgid "set labels for file1/orig-file/file2"
 msgstr ""
 
-#: builtin/merge-recursive.c:46
+#: builtin/merge-recursive.c:47
 #, c-format
 msgid "unknown option %s"
 msgstr ""
 
-#: builtin/merge-recursive.c:52
+#: builtin/merge-recursive.c:53
 #, c-format
 msgid "could not parse object '%s'"
 msgstr ""
 
-#: builtin/merge-recursive.c:56
+#: builtin/merge-recursive.c:57
 #, c-format
 msgid "cannot handle more than %d base. Ignoring %s."
 msgid_plural "cannot handle more than %d bases. Ignoring %s."
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/merge-recursive.c:64
+#: builtin/merge-recursive.c:65
 msgid "not handling anything other than two heads merge."
 msgstr ""
 
-#: builtin/merge-recursive.c:70 builtin/merge-recursive.c:72
+#: builtin/merge-recursive.c:74 builtin/merge-recursive.c:76
 #, c-format
 msgid "could not resolve ref '%s'"
 msgstr ""
 
-#: builtin/merge-recursive.c:78
+#: builtin/merge-recursive.c:82
 #, c-format
 msgid "Merging %s with %s\n"
 msgstr ""
@@ -14590,52 +14668,52 @@
 msgid "Renaming %s to %s\n"
 msgstr ""
 
-#: builtin/mv.c:277 builtin/remote.c:717 builtin/repack.c:510
+#: builtin/mv.c:277 builtin/remote.c:717 builtin/repack.c:511
 #, c-format
 msgid "renaming '%s' failed"
 msgstr ""
 
-#: builtin/name-rev.c:352
+#: builtin/name-rev.c:356
 msgid "git name-rev [<options>] <commit>..."
 msgstr ""
 
-#: builtin/name-rev.c:353
+#: builtin/name-rev.c:357
 msgid "git name-rev [<options>] --all"
 msgstr ""
 
-#: builtin/name-rev.c:354
+#: builtin/name-rev.c:358
 msgid "git name-rev [<options>] --stdin"
 msgstr ""
 
-#: builtin/name-rev.c:411
+#: builtin/name-rev.c:415
 msgid "print only names (no SHA-1)"
 msgstr ""
 
-#: builtin/name-rev.c:412
+#: builtin/name-rev.c:416
 msgid "only use tags to name the commits"
 msgstr ""
 
-#: builtin/name-rev.c:414
+#: builtin/name-rev.c:418
 msgid "only use refs matching <pattern>"
 msgstr ""
 
-#: builtin/name-rev.c:416
+#: builtin/name-rev.c:420
 msgid "ignore refs matching <pattern>"
 msgstr ""
 
-#: builtin/name-rev.c:418
+#: builtin/name-rev.c:422
 msgid "list all commits reachable from all refs"
 msgstr ""
 
-#: builtin/name-rev.c:419
+#: builtin/name-rev.c:423
 msgid "read from stdin"
 msgstr ""
 
-#: builtin/name-rev.c:420
+#: builtin/name-rev.c:424
 msgid "allow to print `undefined` names (default)"
 msgstr ""
 
-#: builtin/name-rev.c:426
+#: builtin/name-rev.c:430
 msgid "dereference tags in the input (internal use)"
 msgstr ""
 
@@ -15014,7 +15092,7 @@
 msgid "read object names from the standard input"
 msgstr ""
 
-#: builtin/notes.c:954 builtin/prune.c:130 builtin/worktree.c:165
+#: builtin/notes.c:954 builtin/prune.c:130 builtin/worktree.c:164
 msgid "do not remove, show only"
 msgstr ""
 
@@ -15030,7 +15108,7 @@
 msgid "use notes from <notes-ref>"
 msgstr ""
 
-#: builtin/notes.c:1034 builtin/stash.c:1598
+#: builtin/notes.c:1034 builtin/stash.c:1607
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr ""
@@ -15101,317 +15179,317 @@
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr ""
 
-#: builtin/pack-objects.c:1166
+#: builtin/pack-objects.c:1164
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr ""
 
-#: builtin/pack-objects.c:1597
+#: builtin/pack-objects.c:1592
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr ""
 
-#: builtin/pack-objects.c:1606
+#: builtin/pack-objects.c:1601
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr ""
 
-#: builtin/pack-objects.c:1875
+#: builtin/pack-objects.c:1870
 msgid "Counting objects"
 msgstr ""
 
-#: builtin/pack-objects.c:2005
+#: builtin/pack-objects.c:2000
 #, c-format
 msgid "unable to get size of %s"
 msgstr ""
 
-#: builtin/pack-objects.c:2020
+#: builtin/pack-objects.c:2015
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr ""
 
-#: builtin/pack-objects.c:2090 builtin/pack-objects.c:2106
-#: builtin/pack-objects.c:2116
+#: builtin/pack-objects.c:2085 builtin/pack-objects.c:2101
+#: builtin/pack-objects.c:2111
 #, c-format
 msgid "object %s cannot be read"
 msgstr ""
 
-#: builtin/pack-objects.c:2093 builtin/pack-objects.c:2120
+#: builtin/pack-objects.c:2088 builtin/pack-objects.c:2115
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr ""
 
-#: builtin/pack-objects.c:2130
+#: builtin/pack-objects.c:2125
 msgid "suboptimal pack - out of memory"
 msgstr ""
 
-#: builtin/pack-objects.c:2456
+#: builtin/pack-objects.c:2440
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr ""
 
-#: builtin/pack-objects.c:2588
+#: builtin/pack-objects.c:2572
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr ""
 
-#: builtin/pack-objects.c:2675
+#: builtin/pack-objects.c:2659
 msgid "Compressing objects"
 msgstr ""
 
-#: builtin/pack-objects.c:2681
+#: builtin/pack-objects.c:2665
 msgid "inconsistency with delta count"
 msgstr ""
 
-#: builtin/pack-objects.c:2762
+#: builtin/pack-objects.c:2742
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
 " %s"
 msgstr ""
 
-#: builtin/pack-objects.c:2768
+#: builtin/pack-objects.c:2748
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
 " %s"
 msgstr ""
 
-#: builtin/pack-objects.c:2866
+#: builtin/pack-objects.c:2846
 msgid "invalid value for --missing"
 msgstr ""
 
-#: builtin/pack-objects.c:2925 builtin/pack-objects.c:3033
+#: builtin/pack-objects.c:2905 builtin/pack-objects.c:3013
 msgid "cannot open pack index"
 msgstr ""
 
-#: builtin/pack-objects.c:2956
+#: builtin/pack-objects.c:2936
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr ""
 
-#: builtin/pack-objects.c:3041
+#: builtin/pack-objects.c:3021
 msgid "unable to force loose object"
 msgstr ""
 
-#: builtin/pack-objects.c:3133
+#: builtin/pack-objects.c:3113
 #, c-format
 msgid "not a rev '%s'"
 msgstr ""
 
-#: builtin/pack-objects.c:3136
+#: builtin/pack-objects.c:3116
 #, c-format
 msgid "bad revision '%s'"
 msgstr ""
 
-#: builtin/pack-objects.c:3161
+#: builtin/pack-objects.c:3141
 msgid "unable to add recent objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3214
+#: builtin/pack-objects.c:3194
 #, c-format
 msgid "unsupported index version %s"
 msgstr ""
 
-#: builtin/pack-objects.c:3218
+#: builtin/pack-objects.c:3198
 #, c-format
 msgid "bad index version '%s'"
 msgstr ""
 
-#: builtin/pack-objects.c:3248
+#: builtin/pack-objects.c:3228
 msgid "do not show progress meter"
 msgstr ""
 
-#: builtin/pack-objects.c:3250
+#: builtin/pack-objects.c:3230
 msgid "show progress meter"
 msgstr ""
 
-#: builtin/pack-objects.c:3252
+#: builtin/pack-objects.c:3232
 msgid "show progress meter during object writing phase"
 msgstr ""
 
-#: builtin/pack-objects.c:3255
+#: builtin/pack-objects.c:3235
 msgid "similar to --all-progress when progress meter is shown"
 msgstr ""
 
-#: builtin/pack-objects.c:3256
+#: builtin/pack-objects.c:3236
 msgid "<version>[,<offset>]"
 msgstr ""
 
-#: builtin/pack-objects.c:3257
+#: builtin/pack-objects.c:3237
 msgid "write the pack index file in the specified idx format version"
 msgstr ""
 
-#: builtin/pack-objects.c:3260
+#: builtin/pack-objects.c:3240
 msgid "maximum size of each output pack file"
 msgstr ""
 
-#: builtin/pack-objects.c:3262
+#: builtin/pack-objects.c:3242
 msgid "ignore borrowed objects from alternate object store"
 msgstr ""
 
-#: builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3244
 msgid "ignore packed objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3266
+#: builtin/pack-objects.c:3246
 msgid "limit pack window by objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3268
+#: builtin/pack-objects.c:3248
 msgid "limit pack window by memory in addition to object limit"
 msgstr ""
 
-#: builtin/pack-objects.c:3270
+#: builtin/pack-objects.c:3250
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr ""
 
-#: builtin/pack-objects.c:3272
+#: builtin/pack-objects.c:3252
 msgid "reuse existing deltas"
 msgstr ""
 
-#: builtin/pack-objects.c:3274
+#: builtin/pack-objects.c:3254
 msgid "reuse existing objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3276
+#: builtin/pack-objects.c:3256
 msgid "use OFS_DELTA objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3278
+#: builtin/pack-objects.c:3258
 msgid "use threads when searching for best delta matches"
 msgstr ""
 
-#: builtin/pack-objects.c:3280
+#: builtin/pack-objects.c:3260
 msgid "do not create an empty pack output"
 msgstr ""
 
-#: builtin/pack-objects.c:3282
+#: builtin/pack-objects.c:3262
 msgid "read revision arguments from standard input"
 msgstr ""
 
-#: builtin/pack-objects.c:3284
+#: builtin/pack-objects.c:3264
 msgid "limit the objects to those that are not yet packed"
 msgstr ""
 
-#: builtin/pack-objects.c:3287
+#: builtin/pack-objects.c:3267
 msgid "include objects reachable from any reference"
 msgstr ""
 
-#: builtin/pack-objects.c:3290
+#: builtin/pack-objects.c:3270
 msgid "include objects referred by reflog entries"
 msgstr ""
 
-#: builtin/pack-objects.c:3293
+#: builtin/pack-objects.c:3273
 msgid "include objects referred to by the index"
 msgstr ""
 
-#: builtin/pack-objects.c:3296
+#: builtin/pack-objects.c:3276
 msgid "output pack to stdout"
 msgstr ""
 
-#: builtin/pack-objects.c:3298
+#: builtin/pack-objects.c:3278
 msgid "include tag objects that refer to objects to be packed"
 msgstr ""
 
-#: builtin/pack-objects.c:3300
+#: builtin/pack-objects.c:3280
 msgid "keep unreachable objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3302
+#: builtin/pack-objects.c:3282
 msgid "pack loose unreachable objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3304
+#: builtin/pack-objects.c:3284
 msgid "unpack unreachable objects newer than <time>"
 msgstr ""
 
-#: builtin/pack-objects.c:3307
+#: builtin/pack-objects.c:3287
 msgid "use the sparse reachability algorithm"
 msgstr ""
 
-#: builtin/pack-objects.c:3309
+#: builtin/pack-objects.c:3289
 msgid "create thin packs"
 msgstr ""
 
-#: builtin/pack-objects.c:3311
+#: builtin/pack-objects.c:3291
 msgid "create packs suitable for shallow fetches"
 msgstr ""
 
-#: builtin/pack-objects.c:3313
+#: builtin/pack-objects.c:3293
 msgid "ignore packs that have companion .keep file"
 msgstr ""
 
-#: builtin/pack-objects.c:3315
+#: builtin/pack-objects.c:3295
 msgid "ignore this pack"
 msgstr ""
 
-#: builtin/pack-objects.c:3317
+#: builtin/pack-objects.c:3297
 msgid "pack compression level"
 msgstr ""
 
-#: builtin/pack-objects.c:3319
+#: builtin/pack-objects.c:3299
 msgid "do not hide commits by grafts"
 msgstr ""
 
-#: builtin/pack-objects.c:3321
+#: builtin/pack-objects.c:3301
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3323
+#: builtin/pack-objects.c:3303
 msgid "write a bitmap index together with the pack index"
 msgstr ""
 
-#: builtin/pack-objects.c:3327
+#: builtin/pack-objects.c:3307
 msgid "write a bitmap index if possible"
 msgstr ""
 
-#: builtin/pack-objects.c:3331
+#: builtin/pack-objects.c:3311
 msgid "handling for missing objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3334
+#: builtin/pack-objects.c:3314
 msgid "do not pack objects in promisor packfiles"
 msgstr ""
 
-#: builtin/pack-objects.c:3336
+#: builtin/pack-objects.c:3316
 msgid "respect islands during delta compression"
 msgstr ""
 
-#: builtin/pack-objects.c:3361
+#: builtin/pack-objects.c:3345
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr ""
 
-#: builtin/pack-objects.c:3366
+#: builtin/pack-objects.c:3350
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr ""
 
-#: builtin/pack-objects.c:3420
+#: builtin/pack-objects.c:3404
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 
-#: builtin/pack-objects.c:3422
+#: builtin/pack-objects.c:3406
 msgid "minimum pack size limit is 1 MiB"
 msgstr ""
 
-#: builtin/pack-objects.c:3427
+#: builtin/pack-objects.c:3411
 msgid "--thin cannot be used to build an indexable pack"
 msgstr ""
 
-#: builtin/pack-objects.c:3430
+#: builtin/pack-objects.c:3414
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr ""
 
-#: builtin/pack-objects.c:3436
+#: builtin/pack-objects.c:3420
 msgid "cannot use --filter without --stdout"
 msgstr ""
 
-#: builtin/pack-objects.c:3497
+#: builtin/pack-objects.c:3481
 msgid "Enumerating objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3527
+#: builtin/pack-objects.c:3511
 #, c-format
 msgid "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>)"
 msgstr ""
@@ -15465,61 +15543,61 @@
 msgid "git pull [<options>] [<repository> [<refspec>...]]"
 msgstr ""
 
-#: builtin/pull.c:141
+#: builtin/pull.c:142
 msgid "control for recursive fetching of submodules"
 msgstr ""
 
-#: builtin/pull.c:145
+#: builtin/pull.c:146
 msgid "Options related to merging"
 msgstr ""
 
-#: builtin/pull.c:148
+#: builtin/pull.c:149
 msgid "incorporate changes by rebasing rather than merging"
 msgstr ""
 
-#: builtin/pull.c:176 builtin/rebase.c:447 builtin/revert.c:126
+#: builtin/pull.c:177 builtin/rebase.c:448 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr ""
 
-#: builtin/pull.c:185
+#: builtin/pull.c:186
 msgid "automatically stash/stash pop before and after rebase"
 msgstr ""
 
-#: builtin/pull.c:201
+#: builtin/pull.c:202
 msgid "Options related to fetching"
 msgstr ""
 
-#: builtin/pull.c:211
+#: builtin/pull.c:212
 msgid "force overwrite of local branch"
 msgstr ""
 
-#: builtin/pull.c:219
+#: builtin/pull.c:220
 msgid "number of submodules pulled in parallel"
 msgstr ""
 
-#: builtin/pull.c:316
+#: builtin/pull.c:320
 #, c-format
 msgid "Invalid value for pull.ff: %s"
 msgstr ""
 
-#: builtin/pull.c:433
+#: builtin/pull.c:437
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
 "fetched."
 msgstr ""
 
-#: builtin/pull.c:435
+#: builtin/pull.c:439
 msgid ""
 "There are no candidates for merging among the refs that you just fetched."
 msgstr ""
 
-#: builtin/pull.c:436
+#: builtin/pull.c:440
 msgid ""
 "Generally this means that you provided a wildcard refspec which had no\n"
 "matches on the remote end."
 msgstr ""
 
-#: builtin/pull.c:439
+#: builtin/pull.c:443
 #, c-format
 msgid ""
 "You asked to pull from the remote '%s', but did not specify\n"
@@ -15527,74 +15605,74 @@
 "for your current branch, you must specify a branch on the command line."
 msgstr ""
 
-#: builtin/pull.c:444 builtin/rebase.c:1326 git-parse-remote.sh:73
+#: builtin/pull.c:448 builtin/rebase.c:1347 git-parse-remote.sh:73
 msgid "You are not currently on a branch."
 msgstr ""
 
-#: builtin/pull.c:446 builtin/pull.c:461 git-parse-remote.sh:79
+#: builtin/pull.c:450 builtin/pull.c:465 git-parse-remote.sh:79
 msgid "Please specify which branch you want to rebase against."
 msgstr ""
 
-#: builtin/pull.c:448 builtin/pull.c:463 git-parse-remote.sh:82
+#: builtin/pull.c:452 builtin/pull.c:467 git-parse-remote.sh:82
 msgid "Please specify which branch you want to merge with."
 msgstr ""
 
-#: builtin/pull.c:449 builtin/pull.c:464
+#: builtin/pull.c:453 builtin/pull.c:468
 msgid "See git-pull(1) for details."
 msgstr ""
 
-#: builtin/pull.c:451 builtin/pull.c:457 builtin/pull.c:466
-#: builtin/rebase.c:1332 git-parse-remote.sh:64
+#: builtin/pull.c:455 builtin/pull.c:461 builtin/pull.c:470
+#: builtin/rebase.c:1353 git-parse-remote.sh:64
 msgid "<remote>"
 msgstr ""
 
-#: builtin/pull.c:451 builtin/pull.c:466 builtin/pull.c:471
+#: builtin/pull.c:455 builtin/pull.c:470 builtin/pull.c:475
 #: git-parse-remote.sh:65
 msgid "<branch>"
 msgstr ""
 
-#: builtin/pull.c:459 builtin/rebase.c:1324 git-parse-remote.sh:75
+#: builtin/pull.c:463 builtin/rebase.c:1345 git-parse-remote.sh:75
 msgid "There is no tracking information for the current branch."
 msgstr ""
 
-#: builtin/pull.c:468 git-parse-remote.sh:95
+#: builtin/pull.c:472 git-parse-remote.sh:95
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:"
 msgstr ""
 
-#: builtin/pull.c:473
+#: builtin/pull.c:477
 #, c-format
 msgid ""
 "Your configuration specifies to merge with the ref '%s'\n"
 "from the remote, but no such ref was fetched."
 msgstr ""
 
-#: builtin/pull.c:581
+#: builtin/pull.c:587
 #, c-format
 msgid "unable to access commit %s"
 msgstr ""
 
-#: builtin/pull.c:861
+#: builtin/pull.c:867
 msgid "ignoring --verify-signatures for rebase"
 msgstr ""
 
-#: builtin/pull.c:916
+#: builtin/pull.c:922
 msgid "--[no-]autostash option is only valid with --rebase."
 msgstr ""
 
-#: builtin/pull.c:924
+#: builtin/pull.c:930
 msgid "Updating an unborn branch with changes added to the index."
 msgstr ""
 
-#: builtin/pull.c:928
+#: builtin/pull.c:934
 msgid "pull with rebase"
 msgstr ""
 
-#: builtin/pull.c:929
+#: builtin/pull.c:935
 msgid "please commit or stash them."
 msgstr ""
 
-#: builtin/pull.c:954
+#: builtin/pull.c:960
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -15602,7 +15680,7 @@
 "commit %s."
 msgstr ""
 
-#: builtin/pull.c:960
+#: builtin/pull.c:966
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -15613,15 +15691,15 @@
 "to recover."
 msgstr ""
 
-#: builtin/pull.c:975
+#: builtin/pull.c:981
 msgid "Cannot merge multiple branches into empty head."
 msgstr ""
 
-#: builtin/pull.c:979
+#: builtin/pull.c:985
 msgid "Cannot rebase onto multiple branches."
 msgstr ""
 
-#: builtin/pull.c:986
+#: builtin/pull.c:992
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 
@@ -15736,17 +15814,94 @@
 msgid "Pushing to %s\n"
 msgstr ""
 
-#: builtin/push.c:364
+#: builtin/push.c:366
 #, c-format
 msgid "failed to push some refs to '%s'"
 msgstr ""
 
-#: builtin/push.c:398
+#: builtin/push.c:541
+msgid "repository"
+msgstr ""
+
+#: builtin/push.c:542 builtin/send-pack.c:164
+msgid "push all refs"
+msgstr ""
+
+#: builtin/push.c:543 builtin/send-pack.c:166
+msgid "mirror all refs"
+msgstr ""
+
+#: builtin/push.c:545
+msgid "delete refs"
+msgstr ""
+
+#: builtin/push.c:546
+msgid "push tags (can't be used with --all or --mirror)"
+msgstr ""
+
+#: builtin/push.c:549 builtin/send-pack.c:167
+msgid "force updates"
+msgstr ""
+
+#: builtin/push.c:551 builtin/send-pack.c:181
+msgid "<refname>:<expect>"
+msgstr ""
+
+#: builtin/push.c:552 builtin/send-pack.c:182
+msgid "require old value of ref to be at this value"
+msgstr ""
+
+#: builtin/push.c:555
+msgid "control recursive pushing of submodules"
+msgstr ""
+
+#: builtin/push.c:557 builtin/send-pack.c:175
+msgid "use thin pack"
+msgstr ""
+
+#: builtin/push.c:558 builtin/push.c:559 builtin/send-pack.c:161
+#: builtin/send-pack.c:162
+msgid "receive pack program"
+msgstr ""
+
+#: builtin/push.c:560
+msgid "set upstream for git pull/status"
+msgstr ""
+
+#: builtin/push.c:563
+msgid "prune locally removed refs"
+msgstr ""
+
+#: builtin/push.c:565
+msgid "bypass pre-push hook"
+msgstr ""
+
+#: builtin/push.c:566
+msgid "push missing but relevant tags"
+msgstr ""
+
+#: builtin/push.c:569 builtin/send-pack.c:169
+msgid "GPG sign the push"
+msgstr ""
+
+#: builtin/push.c:571 builtin/send-pack.c:176
+msgid "request atomic transaction on remote side"
+msgstr ""
+
+#: builtin/push.c:589
+msgid "--delete is incompatible with --all, --mirror and --tags"
+msgstr ""
+
+#: builtin/push.c:591
+msgid "--delete doesn't make sense without any refs"
+msgstr ""
+
+#: builtin/push.c:611
 #, c-format
 msgid "bad repository '%s'"
 msgstr ""
 
-#: builtin/push.c:399
+#: builtin/push.c:612
 msgid ""
 "No configured push destination.\n"
 "Either specify the URL from the command-line or configure a remote "
@@ -15759,104 +15914,27 @@
 "    git push <name>\n"
 msgstr ""
 
-#: builtin/push.c:554
-msgid "repository"
-msgstr ""
-
-#: builtin/push.c:555 builtin/send-pack.c:164
-msgid "push all refs"
-msgstr ""
-
-#: builtin/push.c:556 builtin/send-pack.c:166
-msgid "mirror all refs"
-msgstr ""
-
-#: builtin/push.c:558
-msgid "delete refs"
-msgstr ""
-
-#: builtin/push.c:559
-msgid "push tags (can't be used with --all or --mirror)"
-msgstr ""
-
-#: builtin/push.c:562 builtin/send-pack.c:167
-msgid "force updates"
-msgstr ""
-
-#: builtin/push.c:564 builtin/send-pack.c:181
-msgid "<refname>:<expect>"
-msgstr ""
-
-#: builtin/push.c:565 builtin/send-pack.c:182
-msgid "require old value of ref to be at this value"
-msgstr ""
-
-#: builtin/push.c:568
-msgid "control recursive pushing of submodules"
-msgstr ""
-
-#: builtin/push.c:570 builtin/send-pack.c:175
-msgid "use thin pack"
-msgstr ""
-
-#: builtin/push.c:571 builtin/push.c:572 builtin/send-pack.c:161
-#: builtin/send-pack.c:162
-msgid "receive pack program"
-msgstr ""
-
-#: builtin/push.c:573
-msgid "set upstream for git pull/status"
-msgstr ""
-
-#: builtin/push.c:576
-msgid "prune locally removed refs"
-msgstr ""
-
-#: builtin/push.c:578
-msgid "bypass pre-push hook"
-msgstr ""
-
-#: builtin/push.c:579
-msgid "push missing but relevant tags"
-msgstr ""
-
-#: builtin/push.c:582 builtin/send-pack.c:169
-msgid "GPG sign the push"
-msgstr ""
-
-#: builtin/push.c:584 builtin/send-pack.c:176
-msgid "request atomic transaction on remote side"
-msgstr ""
-
-#: builtin/push.c:602
-msgid "--delete is incompatible with --all, --mirror and --tags"
-msgstr ""
-
-#: builtin/push.c:604
-msgid "--delete doesn't make sense without any refs"
-msgstr ""
-
-#: builtin/push.c:607
+#: builtin/push.c:627
 msgid "--all and --tags are incompatible"
 msgstr ""
 
-#: builtin/push.c:609
+#: builtin/push.c:629
 msgid "--all can't be combined with refspecs"
 msgstr ""
 
-#: builtin/push.c:613
+#: builtin/push.c:633
 msgid "--mirror and --tags are incompatible"
 msgstr ""
 
-#: builtin/push.c:615
+#: builtin/push.c:635
 msgid "--mirror can't be combined with refspecs"
 msgstr ""
 
-#: builtin/push.c:618
+#: builtin/push.c:638
 msgid "--all and --mirror are incompatible"
 msgstr ""
 
-#: builtin/push.c:637
+#: builtin/push.c:642
 msgid "push options must not have new line characters"
 msgstr ""
 
@@ -15970,8 +16048,8 @@
 
 #: builtin/rebase.c:32
 msgid ""
-"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] "
-"[<branch>]"
+"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
+"[<upstream> [<branch>]]"
 msgstr ""
 
 #: builtin/rebase.c:34
@@ -16010,189 +16088,189 @@
 msgid "could not generate todo list"
 msgstr ""
 
-#: builtin/rebase.c:382
+#: builtin/rebase.c:383
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr ""
 
-#: builtin/rebase.c:437
+#: builtin/rebase.c:438
 msgid "git rebase--interactive [<options>]"
 msgstr ""
 
-#: builtin/rebase.c:449
+#: builtin/rebase.c:450
 msgid "keep empty commits"
 msgstr ""
 
-#: builtin/rebase.c:451 builtin/revert.c:128
+#: builtin/rebase.c:452 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr ""
 
-#: builtin/rebase.c:452
+#: builtin/rebase.c:453
 msgid "rebase merge commits"
 msgstr ""
 
-#: builtin/rebase.c:454
+#: builtin/rebase.c:455
 msgid "keep original branch points of cousins"
 msgstr ""
 
-#: builtin/rebase.c:456
+#: builtin/rebase.c:457
 msgid "move commits that begin with squash!/fixup!"
 msgstr ""
 
-#: builtin/rebase.c:457
+#: builtin/rebase.c:458
 msgid "sign commits"
 msgstr ""
 
-#: builtin/rebase.c:459 builtin/rebase.c:1403
+#: builtin/rebase.c:460 builtin/rebase.c:1427
 msgid "display a diffstat of what changed upstream"
 msgstr ""
 
-#: builtin/rebase.c:461
+#: builtin/rebase.c:462
 msgid "continue rebase"
 msgstr ""
 
-#: builtin/rebase.c:463
+#: builtin/rebase.c:464
 msgid "skip commit"
 msgstr ""
 
-#: builtin/rebase.c:464
+#: builtin/rebase.c:465
 msgid "edit the todo list"
 msgstr ""
 
-#: builtin/rebase.c:466
+#: builtin/rebase.c:467
 msgid "show the current patch"
 msgstr ""
 
-#: builtin/rebase.c:469
+#: builtin/rebase.c:470
 msgid "shorten commit ids in the todo list"
 msgstr ""
 
-#: builtin/rebase.c:471
+#: builtin/rebase.c:472
 msgid "expand commit ids in the todo list"
 msgstr ""
 
-#: builtin/rebase.c:473
+#: builtin/rebase.c:474
 msgid "check the todo list"
 msgstr ""
 
-#: builtin/rebase.c:475
+#: builtin/rebase.c:476
 msgid "rearrange fixup/squash lines"
 msgstr ""
 
-#: builtin/rebase.c:477
+#: builtin/rebase.c:478
 msgid "insert exec commands in todo list"
 msgstr ""
 
-#: builtin/rebase.c:478
+#: builtin/rebase.c:479
 msgid "onto"
 msgstr ""
 
-#: builtin/rebase.c:481
+#: builtin/rebase.c:482
 msgid "restrict-revision"
 msgstr ""
 
-#: builtin/rebase.c:481
+#: builtin/rebase.c:482
 msgid "restrict revision"
 msgstr ""
 
-#: builtin/rebase.c:483
+#: builtin/rebase.c:484
 msgid "squash-onto"
 msgstr ""
 
-#: builtin/rebase.c:484
+#: builtin/rebase.c:485
 msgid "squash onto"
 msgstr ""
 
-#: builtin/rebase.c:486
+#: builtin/rebase.c:487
 msgid "the upstream commit"
 msgstr ""
 
-#: builtin/rebase.c:488
+#: builtin/rebase.c:489
 msgid "head-name"
 msgstr ""
 
-#: builtin/rebase.c:488
+#: builtin/rebase.c:489
 msgid "head name"
 msgstr ""
 
-#: builtin/rebase.c:493
+#: builtin/rebase.c:494
 msgid "rebase strategy"
 msgstr ""
 
-#: builtin/rebase.c:494
+#: builtin/rebase.c:495
 msgid "strategy-opts"
 msgstr ""
 
-#: builtin/rebase.c:495
+#: builtin/rebase.c:496
 msgid "strategy options"
 msgstr ""
 
-#: builtin/rebase.c:496
+#: builtin/rebase.c:497
 msgid "switch-to"
 msgstr ""
 
-#: builtin/rebase.c:497
+#: builtin/rebase.c:498
 msgid "the branch or commit to checkout"
 msgstr ""
 
-#: builtin/rebase.c:498
+#: builtin/rebase.c:499
 msgid "onto-name"
 msgstr ""
 
-#: builtin/rebase.c:498
+#: builtin/rebase.c:499
 msgid "onto name"
 msgstr ""
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "cmd"
 msgstr ""
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "the command to run"
 msgstr ""
 
-#: builtin/rebase.c:502 builtin/rebase.c:1486
+#: builtin/rebase.c:503 builtin/rebase.c:1510
 msgid "automatically re-schedule any `exec` that fails"
 msgstr ""
 
-#: builtin/rebase.c:518
+#: builtin/rebase.c:519
 msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
 msgstr ""
 
-#: builtin/rebase.c:534
+#: builtin/rebase.c:535
 #, c-format
 msgid "%s requires an interactive rebase"
 msgstr ""
 
-#: builtin/rebase.c:586
+#: builtin/rebase.c:587
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr ""
 
-#: builtin/rebase.c:601
+#: builtin/rebase.c:602
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr ""
 
-#: builtin/rebase.c:626
+#: builtin/rebase.c:627
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr ""
 
-#: builtin/rebase.c:702
+#: builtin/rebase.c:703
 #, c-format
 msgid "Could not read '%s'"
 msgstr ""
 
-#: builtin/rebase.c:720
+#: builtin/rebase.c:721
 #, c-format
 msgid "Cannot store %s"
 msgstr ""
 
-#: builtin/rebase.c:827
+#: builtin/rebase.c:828
 msgid "could not determine HEAD revision"
 msgstr ""
 
-#: builtin/rebase.c:950 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:951 git-rebase--preserve-merges.sh:81
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -16201,7 +16279,7 @@
 "abort\"."
 msgstr ""
 
-#: builtin/rebase.c:1031
+#: builtin/rebase.c:1032
 #, c-format
 msgid ""
 "\n"
@@ -16213,7 +16291,7 @@
 "As a result, git cannot rebase them."
 msgstr ""
 
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1339
 #, c-format
 msgid ""
 "%s\n"
@@ -16224,7 +16302,7 @@
 "\n"
 msgstr ""
 
-#: builtin/rebase.c:1334
+#: builtin/rebase.c:1355
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -16233,169 +16311,181 @@
 "\n"
 msgstr ""
 
-#: builtin/rebase.c:1364
+#: builtin/rebase.c:1385
 msgid "exec commands cannot contain newlines"
 msgstr ""
 
-#: builtin/rebase.c:1368
+#: builtin/rebase.c:1389
 msgid "empty exec command"
 msgstr ""
 
-#: builtin/rebase.c:1396
+#: builtin/rebase.c:1418
 msgid "rebase onto given branch instead of upstream"
 msgstr ""
 
-#: builtin/rebase.c:1398
+#: builtin/rebase.c:1420
+msgid "use the merge-base of upstream and branch as the current base"
+msgstr ""
+
+#: builtin/rebase.c:1422
 msgid "allow pre-rebase hook to run"
 msgstr ""
 
-#: builtin/rebase.c:1400
+#: builtin/rebase.c:1424
 msgid "be quiet. implies --no-stat"
 msgstr ""
 
-#: builtin/rebase.c:1406
+#: builtin/rebase.c:1430
 msgid "do not show diffstat of what changed upstream"
 msgstr ""
 
-#: builtin/rebase.c:1409
+#: builtin/rebase.c:1433
 msgid "add a Signed-off-by: line to each commit"
 msgstr ""
 
-#: builtin/rebase.c:1411 builtin/rebase.c:1415 builtin/rebase.c:1417
+#: builtin/rebase.c:1435 builtin/rebase.c:1439 builtin/rebase.c:1441
 msgid "passed to 'git am'"
 msgstr ""
 
-#: builtin/rebase.c:1419 builtin/rebase.c:1421
+#: builtin/rebase.c:1443 builtin/rebase.c:1445
 msgid "passed to 'git apply'"
 msgstr ""
 
-#: builtin/rebase.c:1423 builtin/rebase.c:1426
+#: builtin/rebase.c:1447 builtin/rebase.c:1450
 msgid "cherry-pick all commits, even if unchanged"
 msgstr ""
 
-#: builtin/rebase.c:1428
+#: builtin/rebase.c:1452
 msgid "continue"
 msgstr ""
 
-#: builtin/rebase.c:1431
+#: builtin/rebase.c:1455
 msgid "skip current patch and continue"
 msgstr ""
 
-#: builtin/rebase.c:1433
+#: builtin/rebase.c:1457
 msgid "abort and check out the original branch"
 msgstr ""
 
-#: builtin/rebase.c:1436
+#: builtin/rebase.c:1460
 msgid "abort but keep HEAD where it is"
 msgstr ""
 
-#: builtin/rebase.c:1437
+#: builtin/rebase.c:1461
 msgid "edit the todo list during an interactive rebase"
 msgstr ""
 
-#: builtin/rebase.c:1440
+#: builtin/rebase.c:1464
 msgid "show the patch file being applied or merged"
 msgstr ""
 
-#: builtin/rebase.c:1443
+#: builtin/rebase.c:1467
 msgid "use merging strategies to rebase"
 msgstr ""
 
-#: builtin/rebase.c:1447
+#: builtin/rebase.c:1471
 msgid "let the user edit the list of commits to rebase"
 msgstr ""
 
-#: builtin/rebase.c:1451
+#: builtin/rebase.c:1475
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr ""
 
-#: builtin/rebase.c:1455
+#: builtin/rebase.c:1479
 msgid "preserve empty commits during rebase"
 msgstr ""
 
-#: builtin/rebase.c:1457
+#: builtin/rebase.c:1481
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr ""
 
-#: builtin/rebase.c:1463
+#: builtin/rebase.c:1487
 msgid "automatically stash/stash pop before and after"
 msgstr ""
 
-#: builtin/rebase.c:1465
+#: builtin/rebase.c:1489
 msgid "add exec lines after each commit of the editable list"
 msgstr ""
 
-#: builtin/rebase.c:1469
+#: builtin/rebase.c:1493
 msgid "allow rebasing commits with empty messages"
 msgstr ""
 
-#: builtin/rebase.c:1472
+#: builtin/rebase.c:1496
 msgid "try to rebase merges instead of skipping them"
 msgstr ""
 
-#: builtin/rebase.c:1475
+#: builtin/rebase.c:1499
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr ""
 
-#: builtin/rebase.c:1477
+#: builtin/rebase.c:1501
 msgid "use the given merge strategy"
 msgstr ""
 
-#: builtin/rebase.c:1479 builtin/revert.c:115
+#: builtin/rebase.c:1503 builtin/revert.c:115
 msgid "option"
 msgstr ""
 
-#: builtin/rebase.c:1480
+#: builtin/rebase.c:1504
 msgid "pass the argument through to the merge strategy"
 msgstr ""
 
-#: builtin/rebase.c:1483
+#: builtin/rebase.c:1507
 msgid "rebase all reachable commits up to the root(s)"
 msgstr ""
 
-#: builtin/rebase.c:1500
+#: builtin/rebase.c:1524
 msgid ""
 "the rebase.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
 msgstr ""
 
-#: builtin/rebase.c:1506
+#: builtin/rebase.c:1530
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr ""
 
-#: builtin/rebase.c:1547
+#: builtin/rebase.c:1571
 msgid ""
 "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
 msgstr ""
 
-#: builtin/rebase.c:1551
-msgid "No rebase in progress?"
-msgstr ""
-
-#: builtin/rebase.c:1555
-msgid "The --edit-todo action can only be used during interactive rebase."
+#: builtin/rebase.c:1576
+msgid "cannot combine '--keep-base' with '--onto'"
 msgstr ""
 
 #: builtin/rebase.c:1578
+msgid "cannot combine '--keep-base' with '--root'"
+msgstr ""
+
+#: builtin/rebase.c:1582
+msgid "No rebase in progress?"
+msgstr ""
+
+#: builtin/rebase.c:1586
+msgid "The --edit-todo action can only be used during interactive rebase."
+msgstr ""
+
+#: builtin/rebase.c:1609
 msgid "Cannot read HEAD"
 msgstr ""
 
-#: builtin/rebase.c:1590
+#: builtin/rebase.c:1621
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
 msgstr ""
 
-#: builtin/rebase.c:1609
+#: builtin/rebase.c:1640
 msgid "could not discard worktree changes"
 msgstr ""
 
-#: builtin/rebase.c:1628
+#: builtin/rebase.c:1659
 #, c-format
 msgid "could not move back to %s"
 msgstr ""
 
-#: builtin/rebase.c:1673
+#: builtin/rebase.c:1704
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -16408,162 +16498,154 @@
 "valuable there.\n"
 msgstr ""
 
-#: builtin/rebase.c:1694
+#: builtin/rebase.c:1725
 msgid "switch `C' expects a numerical value"
 msgstr ""
 
-#: builtin/rebase.c:1735
+#: builtin/rebase.c:1766
 #, c-format
 msgid "Unknown mode: %s"
 msgstr ""
 
-#: builtin/rebase.c:1757
+#: builtin/rebase.c:1788
 msgid "--strategy requires --merge or --interactive"
 msgstr ""
 
-#: builtin/rebase.c:1797
+#: builtin/rebase.c:1828
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr ""
 
-#: builtin/rebase.c:1809
+#: builtin/rebase.c:1840
 msgid "cannot combine am options with either interactive or merge options"
 msgstr ""
 
-#: builtin/rebase.c:1828
+#: builtin/rebase.c:1859
 msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
 msgstr ""
 
-#: builtin/rebase.c:1832
+#: builtin/rebase.c:1863
 msgid ""
 "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
 msgstr ""
 
-#: builtin/rebase.c:1838
-msgid "cannot combine '--rebase-merges' with '--strategy-option'"
-msgstr ""
-
-#: builtin/rebase.c:1841
-msgid "cannot combine '--rebase-merges' with '--strategy'"
-msgstr ""
-
-#: builtin/rebase.c:1865
+#: builtin/rebase.c:1887
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr ""
 
-#: builtin/rebase.c:1871
+#: builtin/rebase.c:1893
 msgid "Could not create new root commit"
 msgstr ""
 
-#: builtin/rebase.c:1889
+#: builtin/rebase.c:1919
+#, c-format
+msgid "'%s': need exactly one merge base with branch"
+msgstr ""
+
+#: builtin/rebase.c:1922
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr ""
 
-#: builtin/rebase.c:1896
+#: builtin/rebase.c:1930
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr ""
 
-#: builtin/rebase.c:1921
+#: builtin/rebase.c:1955
 #, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr ""
 
-#: builtin/rebase.c:1929 builtin/submodule--helper.c:38
+#: builtin/rebase.c:1963 builtin/submodule--helper.c:38
 #: builtin/submodule--helper.c:1934
 #, c-format
 msgid "No such ref: %s"
 msgstr ""
 
-#: builtin/rebase.c:1940
+#: builtin/rebase.c:1974
 msgid "Could not resolve HEAD to a revision"
 msgstr ""
 
-#: builtin/rebase.c:1981
+#: builtin/rebase.c:2012
 msgid "Cannot autostash"
 msgstr ""
 
-#: builtin/rebase.c:1984
+#: builtin/rebase.c:2015
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr ""
 
-#: builtin/rebase.c:1990
+#: builtin/rebase.c:2021
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr ""
 
-#: builtin/rebase.c:1993
+#: builtin/rebase.c:2024
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr ""
 
-#: builtin/rebase.c:1996
+#: builtin/rebase.c:2027
 msgid "could not reset --hard"
 msgstr ""
 
-#: builtin/rebase.c:1997 builtin/reset.c:114
-#, c-format
-msgid "HEAD is now at %s"
-msgstr ""
-
-#: builtin/rebase.c:2013
+#: builtin/rebase.c:2036
 msgid "Please commit or stash them."
 msgstr ""
 
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:2063
 #, c-format
 msgid "could not parse '%s'"
 msgstr ""
 
-#: builtin/rebase.c:2053
+#: builtin/rebase.c:2076
 #, c-format
 msgid "could not switch to %s"
 msgstr ""
 
-#: builtin/rebase.c:2064
+#: builtin/rebase.c:2087
 msgid "HEAD is up to date."
 msgstr ""
 
-#: builtin/rebase.c:2066
+#: builtin/rebase.c:2089
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr ""
 
-#: builtin/rebase.c:2074
+#: builtin/rebase.c:2097
 msgid "HEAD is up to date, rebase forced."
 msgstr ""
 
-#: builtin/rebase.c:2076
+#: builtin/rebase.c:2099
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr ""
 
-#: builtin/rebase.c:2084
+#: builtin/rebase.c:2107
 msgid "The pre-rebase hook refused to rebase."
 msgstr ""
 
-#: builtin/rebase.c:2091
+#: builtin/rebase.c:2114
 #, c-format
 msgid "Changes to %s:\n"
 msgstr ""
 
-#: builtin/rebase.c:2094
+#: builtin/rebase.c:2117
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr ""
 
-#: builtin/rebase.c:2119
+#: builtin/rebase.c:2142
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 
-#: builtin/rebase.c:2128
+#: builtin/rebase.c:2151
 msgid "Could not detach HEAD"
 msgstr ""
 
-#: builtin/rebase.c:2137
+#: builtin/rebase.c:2160
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr ""
@@ -16572,7 +16654,7 @@
 msgid "git receive-pack <git-dir>"
 msgstr ""
 
-#: builtin/receive-pack.c:832
+#: builtin/receive-pack.c:830
 msgid ""
 "By default, updating the current branch in a non-bare repository\n"
 "is denied, because it will make the index and work tree inconsistent\n"
@@ -16589,7 +16671,7 @@
 "'receive.denyCurrentBranch' configuration variable to 'refuse'."
 msgstr ""
 
-#: builtin/receive-pack.c:852
+#: builtin/receive-pack.c:850
 msgid ""
 "By default, deleting the current branch is denied, because the next\n"
 "'git clone' won't result in any file checked out, causing confusion.\n"
@@ -16601,11 +16683,11 @@
 "To squelch this message, you can set it to 'refuse'."
 msgstr ""
 
-#: builtin/receive-pack.c:1938
+#: builtin/receive-pack.c:1936
 msgid "quiet"
 msgstr ""
 
-#: builtin/receive-pack.c:1952
+#: builtin/receive-pack.c:1950
 msgid "You must specify a directory."
 msgstr ""
 
@@ -17158,121 +17240,121 @@
 msgid "Unknown subcommand: %s"
 msgstr ""
 
-#: builtin/repack.c:22
+#: builtin/repack.c:23
 msgid "git repack [<options>]"
 msgstr ""
 
-#: builtin/repack.c:27
+#: builtin/repack.c:28
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
 msgstr ""
 
-#: builtin/repack.c:190
+#: builtin/repack.c:191
 msgid "could not start pack-objects to repack promisor objects"
 msgstr ""
 
-#: builtin/repack.c:229 builtin/repack.c:408
+#: builtin/repack.c:230 builtin/repack.c:409
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 
-#: builtin/repack.c:246
+#: builtin/repack.c:247
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr ""
 
-#: builtin/repack.c:284
+#: builtin/repack.c:285
 msgid "pack everything in a single pack"
 msgstr ""
 
-#: builtin/repack.c:286
+#: builtin/repack.c:287
 msgid "same as -a, and turn unreachable objects loose"
 msgstr ""
 
-#: builtin/repack.c:289
+#: builtin/repack.c:290
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr ""
 
-#: builtin/repack.c:291
+#: builtin/repack.c:292
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr ""
 
-#: builtin/repack.c:293
+#: builtin/repack.c:294
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr ""
 
-#: builtin/repack.c:295
+#: builtin/repack.c:296
 msgid "do not run git-update-server-info"
 msgstr ""
 
-#: builtin/repack.c:298
+#: builtin/repack.c:299
 msgid "pass --local to git-pack-objects"
 msgstr ""
 
-#: builtin/repack.c:300
+#: builtin/repack.c:301
 msgid "write bitmap index"
 msgstr ""
 
-#: builtin/repack.c:302
+#: builtin/repack.c:303
 msgid "pass --delta-islands to git-pack-objects"
 msgstr ""
 
-#: builtin/repack.c:303
+#: builtin/repack.c:304
 msgid "approxidate"
 msgstr ""
 
-#: builtin/repack.c:304
+#: builtin/repack.c:305
 msgid "with -A, do not loosen objects older than this"
 msgstr ""
 
-#: builtin/repack.c:306
+#: builtin/repack.c:307
 msgid "with -a, repack unreachable objects"
 msgstr ""
 
-#: builtin/repack.c:308
+#: builtin/repack.c:309
 msgid "size of the window used for delta compression"
 msgstr ""
 
-#: builtin/repack.c:309 builtin/repack.c:315
+#: builtin/repack.c:310 builtin/repack.c:316
 msgid "bytes"
 msgstr ""
 
-#: builtin/repack.c:310
+#: builtin/repack.c:311
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr ""
 
-#: builtin/repack.c:312
+#: builtin/repack.c:313
 msgid "limits the maximum delta depth"
 msgstr ""
 
-#: builtin/repack.c:314
+#: builtin/repack.c:315
 msgid "limits the maximum number of threads"
 msgstr ""
 
-#: builtin/repack.c:316
+#: builtin/repack.c:317
 msgid "maximum size of each packfile"
 msgstr ""
 
-#: builtin/repack.c:318
+#: builtin/repack.c:319
 msgid "repack objects in packs marked with .keep"
 msgstr ""
 
-#: builtin/repack.c:320
+#: builtin/repack.c:321
 msgid "do not repack this pack"
 msgstr ""
 
-#: builtin/repack.c:330
+#: builtin/repack.c:331
 msgid "cannot delete packs in a precious-objects repo"
 msgstr ""
 
-#: builtin/repack.c:334
+#: builtin/repack.c:335
 msgid "--keep-unreachable and -A are incompatible"
 msgstr ""
 
-#: builtin/repack.c:417
+#: builtin/repack.c:418
 msgid "Nothing new to pack."
 msgstr ""
 
-#: builtin/repack.c:478
+#: builtin/repack.c:479
 #, c-format
 msgid ""
 "WARNING: Some packs in use have been renamed by\n"
@@ -17284,7 +17366,7 @@
 "WARNING: Please rename them in %s manually:\n"
 msgstr ""
 
-#: builtin/repack.c:526
+#: builtin/repack.c:527
 #, c-format
 msgid "failed to remove '%s'"
 msgstr ""
@@ -17387,8 +17469,8 @@
 msgid "unable to write object to database"
 msgstr ""
 
-#: builtin/replace.c:322 builtin/replace.c:377 builtin/replace.c:422
-#: builtin/replace.c:452
+#: builtin/replace.c:322 builtin/replace.c:378 builtin/replace.c:423
+#: builtin/replace.c:453
 #, c-format
 msgid "not a valid object name: '%s'"
 msgstr ""
@@ -17407,124 +17489,124 @@
 msgid "new object is the same as the old one: '%s'"
 msgstr ""
 
-#: builtin/replace.c:383
+#: builtin/replace.c:384
 #, c-format
 msgid "could not parse %s as a commit"
 msgstr ""
 
-#: builtin/replace.c:414
+#: builtin/replace.c:415
 #, c-format
 msgid "bad mergetag in commit '%s'"
 msgstr ""
 
-#: builtin/replace.c:416
+#: builtin/replace.c:417
 #, c-format
 msgid "malformed mergetag in commit '%s'"
 msgstr ""
 
-#: builtin/replace.c:428
+#: builtin/replace.c:429
 #, c-format
 msgid ""
 "original commit '%s' contains mergetag '%s' that is discarded; use --edit "
 "instead of --graft"
 msgstr ""
 
-#: builtin/replace.c:467
+#: builtin/replace.c:468
 #, c-format
 msgid "the original commit '%s' has a gpg signature"
 msgstr ""
 
-#: builtin/replace.c:468
+#: builtin/replace.c:469
 msgid "the signature will be removed in the replacement commit!"
 msgstr ""
 
-#: builtin/replace.c:478
+#: builtin/replace.c:479
 #, c-format
 msgid "could not write replacement commit for: '%s'"
 msgstr ""
 
-#: builtin/replace.c:486
+#: builtin/replace.c:487
 #, c-format
 msgid "graft for '%s' unnecessary"
 msgstr ""
 
-#: builtin/replace.c:490
+#: builtin/replace.c:491
 #, c-format
 msgid "new commit is the same as the old one: '%s'"
 msgstr ""
 
-#: builtin/replace.c:525
+#: builtin/replace.c:526
 #, c-format
 msgid ""
 "could not convert the following graft(s):\n"
 "%s"
 msgstr ""
 
-#: builtin/replace.c:546
+#: builtin/replace.c:547
 msgid "list replace refs"
 msgstr ""
 
-#: builtin/replace.c:547
+#: builtin/replace.c:548
 msgid "delete replace refs"
 msgstr ""
 
-#: builtin/replace.c:548
+#: builtin/replace.c:549
 msgid "edit existing object"
 msgstr ""
 
-#: builtin/replace.c:549
+#: builtin/replace.c:550
 msgid "change a commit's parents"
 msgstr ""
 
-#: builtin/replace.c:550
+#: builtin/replace.c:551
 msgid "convert existing graft file"
 msgstr ""
 
-#: builtin/replace.c:551
+#: builtin/replace.c:552
 msgid "replace the ref if it exists"
 msgstr ""
 
-#: builtin/replace.c:553
+#: builtin/replace.c:554
 msgid "do not pretty-print contents for --edit"
 msgstr ""
 
-#: builtin/replace.c:554
+#: builtin/replace.c:555
 msgid "use this format"
 msgstr ""
 
-#: builtin/replace.c:567
+#: builtin/replace.c:568
 msgid "--format cannot be used when not listing"
 msgstr ""
 
-#: builtin/replace.c:575
+#: builtin/replace.c:576
 msgid "-f only makes sense when writing a replacement"
 msgstr ""
 
-#: builtin/replace.c:579
+#: builtin/replace.c:580
 msgid "--raw only makes sense with --edit"
 msgstr ""
 
-#: builtin/replace.c:585
+#: builtin/replace.c:586
 msgid "-d needs at least one argument"
 msgstr ""
 
-#: builtin/replace.c:591
+#: builtin/replace.c:592
 msgid "bad number of arguments"
 msgstr ""
 
-#: builtin/replace.c:597
+#: builtin/replace.c:598
 msgid "-e needs exactly one argument"
 msgstr ""
 
-#: builtin/replace.c:603
+#: builtin/replace.c:604
 msgid "-g needs at least one argument"
 msgstr ""
 
-#: builtin/replace.c:609
+#: builtin/replace.c:610
 msgid "--convert-graft-file takes no argument"
 msgstr ""
 
-#: builtin/replace.c:615
+#: builtin/replace.c:616
 msgid "only one pattern can be given with -l"
 msgstr ""
 
@@ -17591,13 +17673,18 @@
 msgid "Failed to find tree of %s."
 msgstr ""
 
+#: builtin/reset.c:114
+#, c-format
+msgid "HEAD is now at %s"
+msgstr ""
+
 #: builtin/reset.c:193
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr ""
 
-#: builtin/reset.c:293 builtin/stash.c:514 builtin/stash.c:589
-#: builtin/stash.c:613
+#: builtin/reset.c:293 builtin/stash.c:520 builtin/stash.c:595
+#: builtin/stash.c:619
 msgid "be quiet, only report errors"
 msgstr ""
 
@@ -17675,24 +17762,19 @@
 msgid "Could not write new index file."
 msgstr ""
 
-#: builtin/rev-list.c:412
+#: builtin/rev-list.c:411
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr ""
 
-#: builtin/rev-list.c:473
+#: builtin/rev-list.c:472
 msgid "object filtering requires --objects"
 msgstr ""
 
-#: builtin/rev-list.c:476
-#, c-format
-msgid "invalid sparse value '%s'"
-msgstr ""
-
-#: builtin/rev-list.c:527
+#: builtin/rev-list.c:522
 msgid "rev-list does not support display of notes"
 msgstr ""
 
-#: builtin/rev-list.c:530
+#: builtin/rev-list.c:525
 msgid "cannot combine --use-bitmap-index with object filtering"
 msgstr ""
 
@@ -18200,134 +18282,134 @@
 msgid "could not save index tree"
 msgstr ""
 
-#: builtin/stash.c:434
+#: builtin/stash.c:436
 msgid "could not restore untracked files from stash"
 msgstr ""
 
-#: builtin/stash.c:448
+#: builtin/stash.c:450
 #, c-format
 msgid "Merging %s with %s"
 msgstr ""
 
-#: builtin/stash.c:458 git-legacy-stash.sh:680
+#: builtin/stash.c:460 git-legacy-stash.sh:680
 msgid "Index was not unstashed."
 msgstr ""
 
-#: builtin/stash.c:516 builtin/stash.c:615
+#: builtin/stash.c:522 builtin/stash.c:621
 msgid "attempt to recreate the index"
 msgstr ""
 
-#: builtin/stash.c:549
+#: builtin/stash.c:555
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr ""
 
-#: builtin/stash.c:552
+#: builtin/stash.c:558
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr ""
 
-#: builtin/stash.c:577
+#: builtin/stash.c:583
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr ""
 
-#: builtin/stash.c:627 git-legacy-stash.sh:694
+#: builtin/stash.c:633 git-legacy-stash.sh:694
 msgid "The stash entry is kept in case you need it again."
 msgstr ""
 
-#: builtin/stash.c:650 git-legacy-stash.sh:712
+#: builtin/stash.c:656 git-legacy-stash.sh:712
 msgid "No branch name specified"
 msgstr ""
 
-#: builtin/stash.c:790 builtin/stash.c:827
+#: builtin/stash.c:796 builtin/stash.c:833
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr ""
 
-#: builtin/stash.c:808 builtin/stash.c:1461 builtin/stash.c:1497
+#: builtin/stash.c:814 builtin/stash.c:1470 builtin/stash.c:1506
 msgid "stash message"
 msgstr ""
 
-#: builtin/stash.c:818
+#: builtin/stash.c:824
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr ""
 
-#: builtin/stash.c:1040 git-legacy-stash.sh:217
+#: builtin/stash.c:1046 git-legacy-stash.sh:217
 msgid "No changes selected"
 msgstr ""
 
-#: builtin/stash.c:1136 git-legacy-stash.sh:150
+#: builtin/stash.c:1145 git-legacy-stash.sh:150
 msgid "You do not have the initial commit yet"
 msgstr ""
 
-#: builtin/stash.c:1163 git-legacy-stash.sh:165
+#: builtin/stash.c:1172 git-legacy-stash.sh:165
 msgid "Cannot save the current index state"
 msgstr ""
 
-#: builtin/stash.c:1172 git-legacy-stash.sh:180
+#: builtin/stash.c:1181 git-legacy-stash.sh:180
 msgid "Cannot save the untracked files"
 msgstr ""
 
-#: builtin/stash.c:1183 builtin/stash.c:1192 git-legacy-stash.sh:200
+#: builtin/stash.c:1192 builtin/stash.c:1201 git-legacy-stash.sh:200
 #: git-legacy-stash.sh:213
 msgid "Cannot save the current worktree state"
 msgstr ""
 
-#: builtin/stash.c:1220 git-legacy-stash.sh:233
+#: builtin/stash.c:1229 git-legacy-stash.sh:233
 msgid "Cannot record working tree state"
 msgstr ""
 
-#: builtin/stash.c:1269 git-legacy-stash.sh:337
+#: builtin/stash.c:1278 git-legacy-stash.sh:337
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr ""
 
-#: builtin/stash.c:1285
+#: builtin/stash.c:1294
 msgid "Did you forget to 'git add'?"
 msgstr ""
 
-#: builtin/stash.c:1300 git-legacy-stash.sh:345
+#: builtin/stash.c:1309 git-legacy-stash.sh:345
 msgid "No local changes to save"
 msgstr ""
 
-#: builtin/stash.c:1307 git-legacy-stash.sh:350
+#: builtin/stash.c:1316 git-legacy-stash.sh:350
 msgid "Cannot initialize stash"
 msgstr ""
 
-#: builtin/stash.c:1322 git-legacy-stash.sh:354
+#: builtin/stash.c:1331 git-legacy-stash.sh:354
 msgid "Cannot save the current status"
 msgstr ""
 
-#: builtin/stash.c:1327
+#: builtin/stash.c:1336
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr ""
 
-#: builtin/stash.c:1417 git-legacy-stash.sh:384
+#: builtin/stash.c:1426 git-legacy-stash.sh:384
 msgid "Cannot remove worktree changes"
 msgstr ""
 
-#: builtin/stash.c:1452 builtin/stash.c:1488
+#: builtin/stash.c:1461 builtin/stash.c:1497
 msgid "keep index"
 msgstr ""
 
-#: builtin/stash.c:1454 builtin/stash.c:1490
+#: builtin/stash.c:1463 builtin/stash.c:1499
 msgid "stash in patch mode"
 msgstr ""
 
-#: builtin/stash.c:1455 builtin/stash.c:1491
+#: builtin/stash.c:1464 builtin/stash.c:1500
 msgid "quiet mode"
 msgstr ""
 
-#: builtin/stash.c:1457 builtin/stash.c:1493
+#: builtin/stash.c:1466 builtin/stash.c:1502
 msgid "include untracked files in stash"
 msgstr ""
 
-#: builtin/stash.c:1459 builtin/stash.c:1495
+#: builtin/stash.c:1468 builtin/stash.c:1504
 msgid "include ignore files"
 msgstr ""
 
-#: builtin/stash.c:1555
+#: builtin/stash.c:1564
 #, c-format
 msgid "could not exec %s"
 msgstr ""
@@ -18678,7 +18760,7 @@
 msgstr ""
 
 #: builtin/submodule--helper.c:1877
-msgid "git submodule--helper update_clone [--prefix=<path>] [<path>...]"
+msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
 msgstr ""
 
 #: builtin/submodule--helper.c:1890
@@ -18730,7 +18812,7 @@
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr ""
 
-#: builtin/submodule--helper.c:2235 git.c:434 git.c:684
+#: builtin/submodule--helper.c:2235 git.c:433 git.c:683
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr ""
@@ -19032,185 +19114,185 @@
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr ""
 
-#: builtin/update-index.c:971
+#: builtin/update-index.c:972
 msgid "continue refresh even when index needs update"
 msgstr ""
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:975
 msgid "refresh: ignore submodules"
 msgstr ""
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:978
 msgid "do not ignore new files"
 msgstr ""
 
-#: builtin/update-index.c:979
+#: builtin/update-index.c:980
 msgid "let files replace directories and vice-versa"
 msgstr ""
 
-#: builtin/update-index.c:981
+#: builtin/update-index.c:982
 msgid "notice files missing from worktree"
 msgstr ""
 
-#: builtin/update-index.c:983
+#: builtin/update-index.c:984
 msgid "refresh even if index contains unmerged entries"
 msgstr ""
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:987
 msgid "refresh stat information"
 msgstr ""
 
-#: builtin/update-index.c:990
+#: builtin/update-index.c:991
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr ""
 
-#: builtin/update-index.c:994
+#: builtin/update-index.c:995
 msgid "<mode>,<object>,<path>"
 msgstr ""
 
-#: builtin/update-index.c:995
+#: builtin/update-index.c:996
 msgid "add the specified entry to the index"
 msgstr ""
 
-#: builtin/update-index.c:1005
+#: builtin/update-index.c:1006
 msgid "mark files as \"not changing\""
 msgstr ""
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1009
 msgid "clear assumed-unchanged bit"
 msgstr ""
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1012
 msgid "mark files as \"index-only\""
 msgstr ""
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1015
 msgid "clear skip-worktree bit"
 msgstr ""
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1018
 msgid "add to index only; do not add content to object database"
 msgstr ""
 
-#: builtin/update-index.c:1019
+#: builtin/update-index.c:1020
 msgid "remove named paths even if present in worktree"
 msgstr ""
 
-#: builtin/update-index.c:1021
+#: builtin/update-index.c:1022
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr ""
 
-#: builtin/update-index.c:1023
+#: builtin/update-index.c:1024
 msgid "read list of paths to be updated from standard input"
 msgstr ""
 
-#: builtin/update-index.c:1027
+#: builtin/update-index.c:1028
 msgid "add entries from standard input to the index"
 msgstr ""
 
-#: builtin/update-index.c:1031
+#: builtin/update-index.c:1032
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr ""
 
-#: builtin/update-index.c:1035
+#: builtin/update-index.c:1036
 msgid "only update entries that differ from HEAD"
 msgstr ""
 
-#: builtin/update-index.c:1039
+#: builtin/update-index.c:1040
 msgid "ignore files missing from worktree"
 msgstr ""
 
-#: builtin/update-index.c:1042
+#: builtin/update-index.c:1043
 msgid "report actions to standard output"
 msgstr ""
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1045
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr ""
 
-#: builtin/update-index.c:1048
+#: builtin/update-index.c:1049
 msgid "write index in this format"
 msgstr ""
 
-#: builtin/update-index.c:1050
+#: builtin/update-index.c:1051
 msgid "enable or disable split index"
 msgstr ""
 
-#: builtin/update-index.c:1052
+#: builtin/update-index.c:1053
 msgid "enable/disable untracked cache"
 msgstr ""
 
-#: builtin/update-index.c:1054
+#: builtin/update-index.c:1055
 msgid "test if the filesystem supports untracked cache"
 msgstr ""
 
-#: builtin/update-index.c:1056
+#: builtin/update-index.c:1057
 msgid "enable untracked cache without testing the filesystem"
 msgstr ""
 
-#: builtin/update-index.c:1058
+#: builtin/update-index.c:1059
 msgid "write out the index even if is not flagged as changed"
 msgstr ""
 
-#: builtin/update-index.c:1060
+#: builtin/update-index.c:1061
 msgid "enable or disable file system monitor"
 msgstr ""
 
-#: builtin/update-index.c:1062
+#: builtin/update-index.c:1063
 msgid "mark files as fsmonitor valid"
 msgstr ""
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1066
 msgid "clear fsmonitor valid bit"
 msgstr ""
 
-#: builtin/update-index.c:1168
+#: builtin/update-index.c:1169
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
 msgstr ""
 
-#: builtin/update-index.c:1177
+#: builtin/update-index.c:1178
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
 msgstr ""
 
-#: builtin/update-index.c:1188
+#: builtin/update-index.c:1190
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
 msgstr ""
 
-#: builtin/update-index.c:1192
+#: builtin/update-index.c:1194
 msgid "Untracked cache disabled"
 msgstr ""
 
-#: builtin/update-index.c:1200
+#: builtin/update-index.c:1202
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
 msgstr ""
 
-#: builtin/update-index.c:1204
+#: builtin/update-index.c:1206
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr ""
 
-#: builtin/update-index.c:1212
+#: builtin/update-index.c:1214
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr ""
 
-#: builtin/update-index.c:1216
+#: builtin/update-index.c:1218
 msgid "fsmonitor enabled"
 msgstr ""
 
-#: builtin/update-index.c:1219
+#: builtin/update-index.c:1221
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 
-#: builtin/update-index.c:1223
+#: builtin/update-index.c:1225
 msgid "fsmonitor disabled"
 msgstr ""
 
@@ -19302,272 +19384,272 @@
 msgid "print tag contents"
 msgstr ""
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:17
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr ""
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:18
 msgid "git worktree list [<options>]"
 msgstr ""
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:19
 msgid "git worktree lock [<options>] <path>"
 msgstr ""
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:20
 msgid "git worktree move <worktree> <new-path>"
 msgstr ""
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:21
 msgid "git worktree prune [<options>]"
 msgstr ""
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:22
 msgid "git worktree remove [<options>] <worktree>"
 msgstr ""
 
-#: builtin/worktree.c:24
+#: builtin/worktree.c:23
 msgid "git worktree unlock <path>"
 msgstr ""
 
-#: builtin/worktree.c:61 builtin/worktree.c:899
+#: builtin/worktree.c:60 builtin/worktree.c:898
 #, c-format
 msgid "failed to delete '%s'"
 msgstr ""
 
-#: builtin/worktree.c:80
+#: builtin/worktree.c:79
 #, c-format
 msgid "Removing worktrees/%s: not a valid directory"
 msgstr ""
 
-#: builtin/worktree.c:86
+#: builtin/worktree.c:85
 #, c-format
 msgid "Removing worktrees/%s: gitdir file does not exist"
 msgstr ""
 
-#: builtin/worktree.c:91 builtin/worktree.c:100
+#: builtin/worktree.c:90 builtin/worktree.c:99
 #, c-format
 msgid "Removing worktrees/%s: unable to read gitdir file (%s)"
 msgstr ""
 
-#: builtin/worktree.c:110
+#: builtin/worktree.c:109
 #, c-format
 msgid ""
 "Removing worktrees/%s: short read (expected %<PRIuMAX> bytes, read "
 "%<PRIuMAX>)"
 msgstr ""
 
-#: builtin/worktree.c:118
+#: builtin/worktree.c:117
 #, c-format
 msgid "Removing worktrees/%s: invalid gitdir file"
 msgstr ""
 
-#: builtin/worktree.c:127
+#: builtin/worktree.c:126
 #, c-format
 msgid "Removing worktrees/%s: gitdir file points to non-existent location"
 msgstr ""
 
-#: builtin/worktree.c:166
+#: builtin/worktree.c:165
 msgid "report pruned working trees"
 msgstr ""
 
-#: builtin/worktree.c:168
+#: builtin/worktree.c:167
 msgid "expire working trees older than <time>"
 msgstr ""
 
-#: builtin/worktree.c:235
+#: builtin/worktree.c:234
 #, c-format
 msgid "'%s' already exists"
 msgstr ""
 
-#: builtin/worktree.c:252
+#: builtin/worktree.c:251
 #, c-format
 msgid "unable to re-add worktree '%s'"
 msgstr ""
 
-#: builtin/worktree.c:257
+#: builtin/worktree.c:256
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
 "use 'add -f -f' to override, or 'unlock' and 'prune' or 'remove' to clear"
 msgstr ""
 
-#: builtin/worktree.c:259
+#: builtin/worktree.c:258
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
 "use 'add -f' to override, or 'prune' or 'remove' to clear"
 msgstr ""
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:308
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr ""
 
-#: builtin/worktree.c:440 builtin/worktree.c:446
+#: builtin/worktree.c:439 builtin/worktree.c:445
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr ""
 
-#: builtin/worktree.c:442
+#: builtin/worktree.c:441
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr ""
 
-#: builtin/worktree.c:451
+#: builtin/worktree.c:450
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr ""
 
-#: builtin/worktree.c:457
+#: builtin/worktree.c:456
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr ""
 
-#: builtin/worktree.c:498
+#: builtin/worktree.c:497
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr ""
 
-#: builtin/worktree.c:501
+#: builtin/worktree.c:500
 msgid "create a new branch"
 msgstr ""
 
-#: builtin/worktree.c:503
+#: builtin/worktree.c:502
 msgid "create or reset a branch"
 msgstr ""
 
-#: builtin/worktree.c:505
+#: builtin/worktree.c:504
 msgid "populate the new working tree"
 msgstr ""
 
-#: builtin/worktree.c:506
+#: builtin/worktree.c:505
 msgid "keep the new working tree locked"
 msgstr ""
 
-#: builtin/worktree.c:509
+#: builtin/worktree.c:508
 msgid "set up tracking mode (see git-branch(1))"
 msgstr ""
 
-#: builtin/worktree.c:512
+#: builtin/worktree.c:511
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr ""
 
-#: builtin/worktree.c:520
+#: builtin/worktree.c:519
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr ""
 
-#: builtin/worktree.c:581
+#: builtin/worktree.c:580
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr ""
 
-#: builtin/worktree.c:681
+#: builtin/worktree.c:680
 msgid "reason for locking"
 msgstr ""
 
-#: builtin/worktree.c:693 builtin/worktree.c:726 builtin/worktree.c:800
-#: builtin/worktree.c:927
+#: builtin/worktree.c:692 builtin/worktree.c:725 builtin/worktree.c:799
+#: builtin/worktree.c:926
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr ""
 
-#: builtin/worktree.c:695 builtin/worktree.c:728
+#: builtin/worktree.c:694 builtin/worktree.c:727
 msgid "The main working tree cannot be locked or unlocked"
 msgstr ""
 
-#: builtin/worktree.c:700
+#: builtin/worktree.c:699
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr ""
 
-#: builtin/worktree.c:702
+#: builtin/worktree.c:701
 #, c-format
 msgid "'%s' is already locked"
 msgstr ""
 
-#: builtin/worktree.c:730
+#: builtin/worktree.c:729
 #, c-format
 msgid "'%s' is not locked"
 msgstr ""
 
-#: builtin/worktree.c:771
+#: builtin/worktree.c:770
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr ""
 
-#: builtin/worktree.c:779
+#: builtin/worktree.c:778
 msgid "force move even if worktree is dirty or locked"
 msgstr ""
 
-#: builtin/worktree.c:802 builtin/worktree.c:929
+#: builtin/worktree.c:801 builtin/worktree.c:928
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr ""
 
-#: builtin/worktree.c:807
+#: builtin/worktree.c:806
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr ""
 
-#: builtin/worktree.c:813
+#: builtin/worktree.c:812
 #, c-format
 msgid "target '%s' already exists"
 msgstr ""
 
-#: builtin/worktree.c:821
+#: builtin/worktree.c:820
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
 "use 'move -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:823
+#: builtin/worktree.c:822
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:826
+#: builtin/worktree.c:825
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr ""
 
-#: builtin/worktree.c:831
+#: builtin/worktree.c:830
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr ""
 
-#: builtin/worktree.c:879
+#: builtin/worktree.c:878
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr ""
 
-#: builtin/worktree.c:883
+#: builtin/worktree.c:882
 #, c-format
-msgid "'%s' is dirty, use --force to delete it"
+msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
 
-#: builtin/worktree.c:888
+#: builtin/worktree.c:887
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr ""
 
-#: builtin/worktree.c:911
+#: builtin/worktree.c:910
 msgid "force removal even if worktree is dirty or locked"
 msgstr ""
 
-#: builtin/worktree.c:934
+#: builtin/worktree.c:933
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
 "use 'remove -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:936
+#: builtin/worktree.c:935
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:939
+#: builtin/worktree.c:938
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr ""
@@ -19588,6 +19670,16 @@
 msgid "only useful for debugging"
 msgstr ""
 
+#: fast-import.c:3118
+#, c-format
+msgid "Expected 'mark' command, got %s"
+msgstr ""
+
+#: fast-import.c:3123
+#, c-format
+msgid "Expected 'to' command, got %s"
+msgstr ""
+
 #: credential-cache--daemon.c:223
 #, c-format
 msgid ""
@@ -19683,51 +19775,51 @@
 "You can use '!git' in the alias to do this"
 msgstr ""
 
-#: git.c:377
+#: git.c:376
 #, c-format
 msgid "empty alias for %s"
 msgstr ""
 
-#: git.c:380
+#: git.c:379
 #, c-format
 msgid "recursive alias: %s"
 msgstr ""
 
-#: git.c:460
+#: git.c:459
 msgid "write failure on standard output"
 msgstr ""
 
-#: git.c:462
+#: git.c:461
 msgid "unknown write failure on standard output"
 msgstr ""
 
-#: git.c:464
+#: git.c:463
 msgid "close failed on standard output"
 msgstr ""
 
-#: git.c:793
+#: git.c:792
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr ""
 
-#: git.c:843
+#: git.c:842
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr ""
 
-#: git.c:856
+#: git.c:855
 #, c-format
 msgid ""
 "usage: %s\n"
 "\n"
 msgstr ""
 
-#: git.c:876
+#: git.c:875
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr ""
 
-#: git.c:888
+#: git.c:887
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr ""
@@ -19745,30 +19837,30 @@
 msgid "Public key pinning not supported with cURL < 7.44.0"
 msgstr ""
 
-#: http.c:876
+#: http.c:878
 msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
 msgstr ""
 
-#: http.c:949
+#: http.c:951
 msgid "Protocol restrictions not supported with cURL < 7.19.4"
 msgstr ""
 
-#: http.c:1085
+#: http.c:1088
 #, c-format
 msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
 msgstr ""
 
-#: http.c:1092
+#: http.c:1095
 #, c-format
 msgid "Could not set SSL backend to '%s': cURL was built without SSL backends"
 msgstr ""
 
-#: http.c:1096
+#: http.c:1099
 #, c-format
 msgid "Could not set SSL backend to '%s': already set"
 msgstr ""
 
-#: http.c:1965
+#: http.c:1968
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -19776,128 +19868,128 @@
 "   redirect: %s"
 msgstr ""
 
-#: remote-curl.c:157
+#: remote-curl.c:166
 #, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr ""
 
-#: remote-curl.c:254
+#: remote-curl.c:263
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr ""
 
-#: remote-curl.c:355
+#: remote-curl.c:364
 msgid "invalid server response; expected service, got flush packet"
 msgstr ""
 
-#: remote-curl.c:386
+#: remote-curl.c:395
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr ""
 
-#: remote-curl.c:446
+#: remote-curl.c:455
 #, c-format
 msgid "repository '%s' not found"
 msgstr ""
 
-#: remote-curl.c:450
+#: remote-curl.c:459
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr ""
 
-#: remote-curl.c:454
+#: remote-curl.c:463
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr ""
 
-#: remote-curl.c:460
+#: remote-curl.c:469
 #, c-format
 msgid "redirecting to %s"
 msgstr ""
 
-#: remote-curl.c:584
+#: remote-curl.c:593
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr ""
 
-#: remote-curl.c:664
+#: remote-curl.c:673
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr ""
 
-#: remote-curl.c:724
+#: remote-curl.c:733
 #, c-format
 msgid "RPC failed; %s"
 msgstr ""
 
-#: remote-curl.c:764
+#: remote-curl.c:773
 msgid "cannot handle pushes this big"
 msgstr ""
 
-#: remote-curl.c:879
+#: remote-curl.c:888
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr ""
 
-#: remote-curl.c:883
+#: remote-curl.c:892
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr ""
 
-#: remote-curl.c:1014
+#: remote-curl.c:1023
 msgid "dumb http transport does not support shallow capabilities"
 msgstr ""
 
-#: remote-curl.c:1028
+#: remote-curl.c:1037
 msgid "fetch failed."
 msgstr ""
 
-#: remote-curl.c:1076
+#: remote-curl.c:1085
 msgid "cannot fetch by sha1 over smart http"
 msgstr ""
 
-#: remote-curl.c:1120 remote-curl.c:1126
+#: remote-curl.c:1129 remote-curl.c:1135
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr ""
 
-#: remote-curl.c:1138 remote-curl.c:1252
+#: remote-curl.c:1147 remote-curl.c:1261
 #, c-format
 msgid "http transport does not support %s"
 msgstr ""
 
-#: remote-curl.c:1174
+#: remote-curl.c:1183
 msgid "git-http-push failed"
 msgstr ""
 
-#: remote-curl.c:1360
+#: remote-curl.c:1367
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr ""
 
-#: remote-curl.c:1392
+#: remote-curl.c:1399
 msgid "remote-curl: error reading command stream from git"
 msgstr ""
 
-#: remote-curl.c:1399
+#: remote-curl.c:1406
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr ""
 
-#: remote-curl.c:1439
+#: remote-curl.c:1446
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr ""
 
-#: list-objects-filter-options.h:61
+#: list-objects-filter-options.h:85
 msgid "args"
 msgstr ""
 
-#: list-objects-filter-options.h:62
+#: list-objects-filter-options.h:86
 msgid "object filtering"
 msgstr ""
 
-#: parse-options.h:170
+#: parse-options.h:179
 msgid "expiry-date"
 msgstr ""
 
-#: parse-options.h:184
+#: parse-options.h:193
 msgid "no-op (backward compatibility)"
 msgstr ""
 
diff --git a/po/it.po b/po/it.po
index 30ec99c..036276f 100644
--- a/po/it.po
+++ b/po/it.po
@@ -11,8 +11,8 @@
 msgstr ""
 "Project-Id-Version: Git\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2019-08-10 20:12+0800\n"
-"PO-Revision-Date: 2019-08-11 11:48+0200\n"
+"POT-Creation-Date: 2019-10-28 13:19+0800\n"
+"PO-Revision-Date: 2019-10-28 20:11+0100\n"
 "Last-Translator: Alessandro Menti <alessandro.menti@alessandromenti.it>\n"
 "Language-Team: Italian <>\n"
 "Language: it\n"
@@ -20,7 +20,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Lokalize 19.04.3\n"
+"X-Generator: Lokalize 19.08.2\n"
 
 #: advice.c:109
 #, c-format
@@ -76,7 +76,7 @@
 msgid "Exiting because of an unresolved conflict."
 msgstr "Esco a causa di un conflitto non risolto."
 
-#: advice.c:193 builtin/merge.c:1327
+#: advice.c:193 builtin/merge.c:1332
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Il merge non è stato concluso (esiste MERGE_HEAD)."
 
@@ -219,17 +219,7 @@
 msgid "inconsistent header lines %d and %d"
 msgstr "righe di intestazione %d e %d inconsistenti"
 
-#: apply.c:1460
-#, c-format
-msgid "recount: unexpected line: %.*s"
-msgstr "recount: riga inattesa: %.*s"
-
-#: apply.c:1529
-#, c-format
-msgid "patch fragment without header at line %d: %.*s"
-msgstr "frammento di patch senza intestazione alla riga %d: %.*s"
-
-#: apply.c:1551
+#: apply.c:1372
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -244,82 +234,92 @@
 "l'intestazione git diff non riporta le informazioni sul file una volta "
 "rimossi %d componenti iniziali del percorso (riga %d)"
 
-#: apply.c:1564
+#: apply.c:1385
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr "l'intestazione git diff non riporta le informazioni sul file (riga %d)"
 
-#: apply.c:1752
+#: apply.c:1481
+#, c-format
+msgid "recount: unexpected line: %.*s"
+msgstr "recount: riga inattesa: %.*s"
+
+#: apply.c:1550
+#, c-format
+msgid "patch fragment without header at line %d: %.*s"
+msgstr "frammento di patch senza intestazione alla riga %d: %.*s"
+
+#: apply.c:1753
 msgid "new file depends on old contents"
 msgstr "il nuovo file dipende da vecchi contenuti"
 
-#: apply.c:1754
+#: apply.c:1755
 msgid "deleted file still has contents"
 msgstr "il file eliminato ha ancora dei contenuti"
 
-#: apply.c:1788
+#: apply.c:1789
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "patch corrotta alla riga %d"
 
-#: apply.c:1825
+#: apply.c:1826
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "il nuovo file %s dipende da vecchi contenuti"
 
-#: apply.c:1827
+#: apply.c:1828
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "il file eliminato %s ha ancora dei contenuti"
 
-#: apply.c:1830
+#: apply.c:1831
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** attenzione: il file %s diventa vuoto ma non è eliminato"
 
-#: apply.c:1977
+#: apply.c:1978
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "patch binaria corrotta alla riga %d: %.*s"
 
-#: apply.c:2014
+#: apply.c:2015
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "patch binaria non riconosciuta alla riga %d"
 
-#: apply.c:2176
+#: apply.c:2177
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "patch con soli contenuti garbage alla riga %d"
 
-#: apply.c:2262
+#: apply.c:2263
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "impossibile leggere il collegamento simbolico %s"
 
-#: apply.c:2266
+#: apply.c:2267
 #, c-format
 msgid "unable to open or read %s"
 msgstr "impossibile aprire o leggere %s"
 
-#: apply.c:2925
+#: apply.c:2926
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "inizio della riga non valido: '%c'"
 
-#: apply.c:3046
+#: apply.c:3047
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "Applicazione frammento %d riuscita alla riga %d (offset: %d riga)."
 msgstr[1] "Applicazione frammento %d riuscita alla riga %d (offset: %d righe)."
 
-#: apply.c:3058
+#: apply.c:3059
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "Contesto ridotto a (%ld/%ld) per applicare il frammento alla riga %d"
 
-#: apply.c:3064
+#: apply.c:3065
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -328,26 +328,26 @@
 "durante la ricerca di:\n"
 "%.*s"
 
-#: apply.c:3086
+#: apply.c:3087
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "dati della patch binaria mancanti per '%s'"
 
-#: apply.c:3094
+#: apply.c:3095
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr ""
 "impossibile applicare una patch binaria al contrario senza l'hunk contrario "
 "per '%s'"
 
-#: apply.c:3141
+#: apply.c:3142
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr ""
 "impossibile applicare una patch binaria a '%s' senza la riga d'indice "
 "completa"
 
-#: apply.c:3151
+#: apply.c:3152
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
@@ -355,432 +355,432 @@
 "la patch si applica a '%s' (%s), che non corrisponde ai contenuti correnti "
 "del file."
 
-#: apply.c:3159
+#: apply.c:3160
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "la patch si applica a un file vuoto '%s' ma il file non è vuoto"
 
-#: apply.c:3177
+#: apply.c:3178
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "impossibile leggere la postimmagine %s necessaria per '%s'"
 
-#: apply.c:3190
+#: apply.c:3191
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "la patch binaria non si applica correttamente a '%s'"
 
-#: apply.c:3196
+#: apply.c:3197
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
 "la patch binaria su '%s' crea risultati non corretti (atteso %s, ricevuto %s)"
 
-#: apply.c:3217
+#: apply.c:3218
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "patch non riuscita: %s:%ld"
 
-#: apply.c:3340
+#: apply.c:3341
 #, c-format
 msgid "cannot checkout %s"
 msgstr "impossibile eseguire il checkout di '%s'"
 
-#: apply.c:3392 apply.c:3403 apply.c:3449 midx.c:62 setup.c:279
+#: apply.c:3393 apply.c:3404 apply.c:3450 midx.c:61 setup.c:280
 #, c-format
 msgid "failed to read %s"
 msgstr "lettura di %s non riuscita"
 
-#: apply.c:3400
+#: apply.c:3401
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "lettura di '%s' oltre un collegamento simbolico"
 
-#: apply.c:3429 apply.c:3672
+#: apply.c:3430 apply.c:3673
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "il percorso %s è stato rinominato/eliminato"
 
-#: apply.c:3515 apply.c:3687
+#: apply.c:3516 apply.c:3688
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s: non esiste nell'indice"
 
-#: apply.c:3524 apply.c:3695
+#: apply.c:3525 apply.c:3696
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s: non corrisponde all'indice"
 
-#: apply.c:3559
+#: apply.c:3560
 msgid "repository lacks the necessary blob to fall back on 3-way merge."
 msgstr ""
 "dal repository manca il blob necessario per ripiegare sul merge a tre vie."
 
-#: apply.c:3562
+#: apply.c:3563
 #, c-format
 msgid "Falling back to three-way merge...\n"
 msgstr "Ripiego sul merge a tre vie...\n"
 
-#: apply.c:3578 apply.c:3582
+#: apply.c:3579 apply.c:3583
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "impossibile leggere i contenuti correnti di '%s'"
 
-#: apply.c:3594
+#: apply.c:3595
 #, c-format
 msgid "Failed to fall back on three-way merge...\n"
 msgstr "Ripiego sul merge a tre vie non riuscito...\n"
 
-#: apply.c:3608
+#: apply.c:3609
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "Patch applicata a '%s' con conflitti.\n"
 
-#: apply.c:3613
+#: apply.c:3614
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "Patch '%s' applicata correttamente.\n"
 
-#: apply.c:3639
+#: apply.c:3640
 msgid "removal patch leaves file contents"
 msgstr "la rimozione della patch lascia contenuti del file"
 
-#: apply.c:3712
+#: apply.c:3713
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s: tipo errato"
 
-#: apply.c:3714
+#: apply.c:3715
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s ha il tipo %o, atteso %o"
 
-#: apply.c:3865 apply.c:3867 read-cache.c:830 read-cache.c:856
+#: apply.c:3866 apply.c:3868 read-cache.c:830 read-cache.c:856
 #: read-cache.c:1309
 #, c-format
 msgid "invalid path '%s'"
 msgstr "percorso '%s' non valido"
 
-#: apply.c:3923
+#: apply.c:3924
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s: esiste già nell'indice"
 
-#: apply.c:3926
+#: apply.c:3927
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s: esiste già nella directory di lavoro"
 
-#: apply.c:3946
+#: apply.c:3947
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "il nuovo modo (%o) di %s non corrisponde al vecchio modo (%o)"
 
-#: apply.c:3951
+#: apply.c:3952
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "il nuovo modo (%o) di %s non corrisponde al vecchio modo (%o) di %s"
 
-#: apply.c:3971
+#: apply.c:3972
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "il file interessato '%s' si trova oltre un collegamento simbolico"
 
-#: apply.c:3975
+#: apply.c:3976
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s: la patch non si applica correttamente"
 
-#: apply.c:3990
+#: apply.c:3991
 #, c-format
 msgid "Checking patch %s..."
 msgstr "Controllo della patch %s in corso..."
 
-#: apply.c:4082
+#: apply.c:4083
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "le informazioni SHA1 per il sottomodulo %s sono mancanti o inutili"
 
-#: apply.c:4089
+#: apply.c:4090
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "modifica modo per %s che non è nell'HEAD corrente"
 
-#: apply.c:4092
+#: apply.c:4093
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "le informazioni SHA1 sono mancanti o inutili (%s)."
 
-#: apply.c:4097 builtin/checkout.c:278 builtin/reset.c:143
+#: apply.c:4098 builtin/checkout.c:279 builtin/reset.c:143
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "make_cache_entry non riuscito per il percorso '%s'"
 
-#: apply.c:4101
+#: apply.c:4102
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "impossibile aggiungere %s all'indice temporaneo"
 
-#: apply.c:4111
+#: apply.c:4112
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "impossibile scrivere l'indice temporaneo in %s"
 
-#: apply.c:4249
+#: apply.c:4250
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "impossibile rimuovere %s dall'indice"
 
-#: apply.c:4283
+#: apply.c:4284
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "patch corrotta per il sottomodulo %s"
 
-#: apply.c:4289
+#: apply.c:4290
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "impossibile eseguire lo stat del file appena creato '%s'"
 
-#: apply.c:4297
+#: apply.c:4298
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr "impossibile creare l'archivio di backup per il file appena creato %s"
 
-#: apply.c:4303 apply.c:4448
+#: apply.c:4304 apply.c:4449
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "impossibile aggiungere la voce della cache per %s"
 
-#: apply.c:4346
+#: apply.c:4347
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "scrittura in '%s' non riuscita"
 
-#: apply.c:4350
+#: apply.c:4351
 #, c-format
 msgid "closing file '%s'"
 msgstr "chiusura del file '%s' in corso"
 
-#: apply.c:4420
+#: apply.c:4421
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "impossibile scrivere il file '%s' con modo %o"
 
-#: apply.c:4518
+#: apply.c:4519
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "Patch %s applicata correttamente."
 
-#: apply.c:4526
+#: apply.c:4527
 msgid "internal error"
 msgstr "errore interno"
 
-#: apply.c:4529
+#: apply.c:4530
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "Applicazione della patch %%s con %d frammento respinto..."
 msgstr[1] "Applicazione della patch %%s con %d frammenti respinti..."
 
-#: apply.c:4540
+#: apply.c:4541
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "nome file .rej troncato a %.*s.rej"
 
-#: apply.c:4548 builtin/fetch.c:878 builtin/fetch.c:1168
+#: apply.c:4549 builtin/fetch.c:898 builtin/fetch.c:1194
 #, c-format
 msgid "cannot open %s"
 msgstr "impossibile aprire %s"
 
-#: apply.c:4562
+#: apply.c:4563
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "Frammento %d applicato correttamente."
 
-#: apply.c:4566
+#: apply.c:4567
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "Frammento %d respinto."
 
-#: apply.c:4676
+#: apply.c:4686
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Patch '%s' ignorata."
 
-#: apply.c:4684
+#: apply.c:4694
 msgid "unrecognized input"
 msgstr "input non riconosciuto"
 
-#: apply.c:4704
+#: apply.c:4714
 msgid "unable to read index file"
 msgstr "impossibile leggere il file index"
 
-#: apply.c:4859
+#: apply.c:4871
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "impossibile aprire la patch '%s': %s"
 
-#: apply.c:4886
+#: apply.c:4898
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "%d errore di spazi bianchi soppresso"
 msgstr[1] "%d errori di spazi bianchi soppressi"
 
-#: apply.c:4892 apply.c:4907
+#: apply.c:4904 apply.c:4919
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d riga aggiunge errori di spazi bianchi."
 msgstr[1] "%d righe aggiungono errori di spazi bianchi."
 
-#: apply.c:4900
+#: apply.c:4912
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] "%d riga applicata dopo la correzione di errori di spazi bianchi."
 msgstr[1] "%d righe applicate dopo la correzione di errori di spazi bianchi."
 
-#: apply.c:4916 builtin/add.c:540 builtin/mv.c:301 builtin/rm.c:390
+#: apply.c:4928 builtin/add.c:540 builtin/mv.c:301 builtin/rm.c:390
 msgid "Unable to write new index file"
 msgstr "Impossibile scrivere il nuovo file index"
 
-#: apply.c:4943 apply.c:4946 builtin/am.c:2208 builtin/am.c:2211
-#: builtin/clone.c:123 builtin/fetch.c:128 builtin/merge.c:273
-#: builtin/pull.c:208 builtin/submodule--helper.c:407
+#: apply.c:4955 apply.c:4958 builtin/am.c:2197 builtin/am.c:2200
+#: builtin/clone.c:122 builtin/fetch.c:143 builtin/merge.c:273
+#: builtin/pull.c:209 builtin/submodule--helper.c:407
 #: builtin/submodule--helper.c:1367 builtin/submodule--helper.c:1370
 #: builtin/submodule--helper.c:1850 builtin/submodule--helper.c:1853
 #: builtin/submodule--helper.c:2092 git-add--interactive.perl:211
 msgid "path"
 msgstr "percorso"
 
-#: apply.c:4944
+#: apply.c:4956
 msgid "don't apply changes matching the given path"
 msgstr "non applicare le modifiche corrispondenti al percorso specificato"
 
-#: apply.c:4947
+#: apply.c:4959
 msgid "apply changes matching the given path"
 msgstr "applica le modifiche corrispondenti al percorso specificato"
 
-#: apply.c:4949 builtin/am.c:2217
+#: apply.c:4961 builtin/am.c:2206
 msgid "num"
 msgstr "num"
 
-#: apply.c:4950
+#: apply.c:4962
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "rimuovi <num> barre iniziali dai percorsi diff tradizionali"
 
-#: apply.c:4953
+#: apply.c:4965
 msgid "ignore additions made by the patch"
 msgstr "ignora le aggiunte create dalla patch"
 
-#: apply.c:4955
+#: apply.c:4967
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr ""
 "invece di applicare la patch, visualizza l'output di diffstat per l'input"
 
-#: apply.c:4959
+#: apply.c:4971
 msgid "show number of added and deleted lines in decimal notation"
 msgstr ""
 "visualizza il numero di righe aggiunte ed eliminate in notazione decimale"
 
-#: apply.c:4961
+#: apply.c:4973
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "invece di applicare la patch, visualizza un riassunto per l'input"
 
-#: apply.c:4963
+#: apply.c:4975
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "invece di applicare la patch, verifica se può essere applicata"
 
-#: apply.c:4965
+#: apply.c:4977
 msgid "make sure the patch is applicable to the current index"
 msgstr "assicura che la patch sia applicabile all'indice corrente"
 
-#: apply.c:4967
+#: apply.c:4979
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "contrassegna i nuovi file con `git add --intent-to-add`"
 
-#: apply.c:4969
+#: apply.c:4981
 msgid "apply a patch without touching the working tree"
 msgstr "applica una patch senza modificare l'albero di lavoro"
 
-#: apply.c:4971
+#: apply.c:4983
 msgid "accept a patch that touches outside the working area"
 msgstr ""
 "accetta una patch che apporta modifiche al di fuori dell'area di lavoro"
 
-#: apply.c:4974
+#: apply.c:4986
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "applica anche la patch (da usare con --stat/--summary/--check)"
 
-#: apply.c:4976
+#: apply.c:4988
 msgid "attempt three-way merge if a patch does not apply"
 msgstr "prova un merge a tre vie se la patch non si applica correttamente"
 
-#: apply.c:4978
+#: apply.c:4990
 msgid "build a temporary index based on embedded index information"
 msgstr "compila un index temporaneo basato sulle informazioni indice incluse"
 
-#: apply.c:4981 builtin/checkout-index.c:173 builtin/ls-files.c:524
+#: apply.c:4993 builtin/checkout-index.c:173 builtin/ls-files.c:524
 msgid "paths are separated with NUL character"
 msgstr "i percorsi sono separati con un carattere NUL"
 
-#: apply.c:4983
+#: apply.c:4995
 msgid "ensure at least <n> lines of context match"
 msgstr "assicura che almeno <n> righe di contesto corrispondano"
 
-#: apply.c:4984 builtin/am.c:2196 builtin/interpret-trailers.c:98
+#: apply.c:4996 builtin/am.c:2185 builtin/interpret-trailers.c:98
 #: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3330 builtin/rebase.c:1421
+#: builtin/pack-objects.c:3310 builtin/rebase.c:1445
 msgid "action"
 msgstr "azione"
 
-#: apply.c:4985
+#: apply.c:4997
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "rileva righe nuove o modificate che hanno errori di spazi bianchi"
 
-#: apply.c:4988 apply.c:4991
+#: apply.c:5000 apply.c:5003
 msgid "ignore changes in whitespace when finding context"
 msgstr "ignora modifiche agli spazi bianchi durante la ricerca dei contesti"
 
-#: apply.c:4994
+#: apply.c:5006
 msgid "apply the patch in reverse"
 msgstr "applica la patch in maniera inversa"
 
-#: apply.c:4996
+#: apply.c:5008
 msgid "don't expect at least one line of context"
 msgstr "non aspettare almeno una riga di contesto"
 
-#: apply.c:4998
+#: apply.c:5010
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "lascia i frammenti respinti nei file *.rej corrispondenti"
 
-#: apply.c:5000
+#: apply.c:5012
 msgid "allow overlapping hunks"
 msgstr "consenti la sovrapposizione dei frammenti"
 
-#: apply.c:5001 builtin/add.c:291 builtin/check-ignore.c:22
+#: apply.c:5013 builtin/add.c:291 builtin/check-ignore.c:22
 #: builtin/commit.c:1337 builtin/count-objects.c:98 builtin/fsck.c:786
-#: builtin/log.c:2068 builtin/mv.c:123 builtin/read-tree.c:128
+#: builtin/log.c:2085 builtin/mv.c:123 builtin/read-tree.c:128
 msgid "be verbose"
 msgstr "visualizza ulteriori dettagli"
 
-#: apply.c:5003
+#: apply.c:5015
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr ""
 "tollera carattere fine riga rilevato erroneamente come mancante alla fine "
 "del file"
 
-#: apply.c:5006
+#: apply.c:5018
 msgid "do not trust the line counts in the hunk headers"
 msgstr ""
 "non fare affidamento sul numero di righe nelle intestazioni dei frammenti"
 
-#: apply.c:5008 builtin/am.c:2205
+#: apply.c:5020 builtin/am.c:2194
 msgid "root"
 msgstr "radice"
 
-#: apply.c:5009
+#: apply.c:5021
 msgid "prepend <root> to all filenames"
 msgstr "anteponi <radice> a tutti i nomi file"
 
@@ -835,7 +835,7 @@
 msgid "archive format"
 msgstr "formato archivio"
 
-#: archive.c:458 builtin/log.c:1580
+#: archive.c:458 builtin/log.c:1581
 msgid "prefix"
 msgstr "prefisso"
 
@@ -843,11 +843,12 @@
 msgid "prepend prefix to each pathname in the archive"
 msgstr "anteponi <prefisso> a ogni nome percorso nell'archivio"
 
-#: archive.c:460 builtin/blame.c:862 builtin/blame.c:874 builtin/blame.c:875
-#: builtin/commit-tree.c:117 builtin/config.c:129 builtin/fast-export.c:1134
-#: builtin/fast-export.c:1136 builtin/grep.c:897 builtin/hash-object.c:105
-#: builtin/ls-files.c:560 builtin/ls-files.c:563 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:177
+#: archive.c:460 builtin/blame.c:861 builtin/blame.c:873 builtin/blame.c:874
+#: builtin/commit-tree.c:117 builtin/config.c:129 builtin/fast-export.c:1162
+#: builtin/fast-export.c:1164 builtin/fast-export.c:1168 builtin/grep.c:899
+#: builtin/hash-object.c:105 builtin/ls-files.c:560 builtin/ls-files.c:563
+#: builtin/notes.c:412 builtin/notes.c:578 builtin/read-tree.c:123
+#: parse-options.h:186
 msgid "file"
 msgstr "file"
 
@@ -879,7 +880,7 @@
 msgid "list supported archive formats"
 msgstr "elenca i formati archivio supportati"
 
-#: archive.c:479 builtin/archive.c:91 builtin/clone.c:113 builtin/clone.c:116
+#: archive.c:479 builtin/archive.c:91 builtin/clone.c:112 builtin/clone.c:115
 #: builtin/submodule--helper.c:1379 builtin/submodule--helper.c:1859
 msgid "repo"
 msgstr "repository"
@@ -888,7 +889,7 @@
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "recupera l'archivio dal repository remoto <repository>"
 
-#: archive.c:481 builtin/archive.c:93 builtin/difftool.c:707
+#: archive.c:481 builtin/archive.c:93 builtin/difftool.c:715
 #: builtin/notes.c:498
 msgid "command"
 msgstr "comando"
@@ -924,26 +925,26 @@
 msgid "cannot stream blob %s"
 msgstr "impossibile eseguire lo streaming del blob %s"
 
-#: archive-tar.c:260 archive-zip.c:363
+#: archive-tar.c:266 archive-zip.c:363
 #, c-format
 msgid "unsupported file mode: 0%o (SHA1: %s)"
 msgstr "modo file non supportato: 0%o (SHA1: %s)"
 
-#: archive-tar.c:287 archive-zip.c:353
+#: archive-tar.c:293 archive-zip.c:353
 #, c-format
 msgid "cannot read %s"
 msgstr "impossibile leggere %s"
 
-#: archive-tar.c:459
+#: archive-tar.c:465
 #, c-format
 msgid "unable to start '%s' filter"
 msgstr "impossibile avviare il filtro '%s'"
 
-#: archive-tar.c:462
+#: archive-tar.c:468
 msgid "unable to redirect descriptor"
 msgstr "impossibile ridirezionare il descrittore"
 
-#: archive-tar.c:469
+#: archive-tar.c:475
 #, c-format
 msgid "'%s' filter reported error"
 msgstr "il filtro '%s' ha segnalato un errore"
@@ -968,17 +969,17 @@
 msgid "timestamp too large for this system: %<PRIuMAX>"
 msgstr "timestamp troppo grande per questo sistema: %<PRIuMAX>"
 
-#: attr.c:211
+#: attr.c:213
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s non è un nome attributo valido"
 
-#: attr.c:368
+#: attr.c:370
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s non consentito: %s:%d"
 
-#: attr.c:408
+#: attr.c:410
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1107,41 +1108,41 @@
 msgstr[1] ""
 "Bisezione in corso: %d revisioni rimanenti da testare dopo questa %s\n"
 
-#: blame.c:2697
+#: blame.c:2700
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents e --reverse non sono compatibili."
 
-#: blame.c:2711
+#: blame.c:2714
 msgid "cannot use --contents with final commit object name"
 msgstr "impossibile usare --contents con il nome oggetto del commit finale"
 
-#: blame.c:2732
+#: blame.c:2735
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "le opzioni --reverse e --first-parent se usate insieme richiedono che sia "
 "specificato l'ultimo commit"
 
-#: blame.c:2741 bundle.c:167 ref-filter.c:2196 remote.c:1938 sequencer.c:2033
-#: sequencer.c:4348 builtin/commit.c:1020 builtin/log.c:387 builtin/log.c:963
-#: builtin/log.c:1451 builtin/log.c:1827 builtin/log.c:2117 builtin/merge.c:411
-#: builtin/pack-objects.c:3148 builtin/pack-objects.c:3163
+#: blame.c:2744 bundle.c:167 ref-filter.c:2203 remote.c:1941 sequencer.c:1971
+#: sequencer.c:4305 builtin/commit.c:1020 builtin/log.c:387 builtin/log.c:964
+#: builtin/log.c:1452 builtin/log.c:1844 builtin/log.c:2134 builtin/merge.c:411
+#: builtin/pack-objects.c:3128 builtin/pack-objects.c:3143
 #: builtin/shortlog.c:192
 msgid "revision walk setup failed"
 msgstr "impostazione percorso revisioni non riuscita"
 
-#: blame.c:2759
+#: blame.c:2762
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "le opzioni --reverse e --first-parent se usate insieme richiedono che sia "
 "specificato un intervallo nella catena del primo commit genitore"
 
-#: blame.c:2770
+#: blame.c:2773
 #, c-format
 msgid "no such path %s in %s"
 msgstr "il percorso %s in %s non esiste"
 
-#: blame.c:2781
+#: blame.c:2784
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "impossibile leggere il blob %s per il percorso %s"
@@ -1303,7 +1304,7 @@
 msgid "unrecognized header: %s%s (%d)"
 msgstr "intestazione non riconosciuta: %s%s (%d)"
 
-#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2283 sequencer.c:3024
+#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2221 sequencer.c:2962
 #: builtin/commit.c:791
 #, c-format
 msgid "could not open '%s'"
@@ -1356,7 +1357,7 @@
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "il riferimento '%s' è escluso dalle opzioni di rev-list"
 
-#: bundle.c:460 builtin/log.c:202 builtin/log.c:1732 builtin/shortlog.c:306
+#: bundle.c:460 builtin/log.c:202 builtin/log.c:1733 builtin/shortlog.c:306
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "argomento non riconosciuto: %s"
@@ -1379,8 +1380,8 @@
 msgid "invalid color value: %.*s"
 msgstr "valore colore non valido: %.*s"
 
-#: commit.c:50 sequencer.c:2727 builtin/am.c:355 builtin/am.c:399
-#: builtin/am.c:1378 builtin/am.c:2020 builtin/replace.c:455
+#: commit.c:50 sequencer.c:2665 builtin/am.c:354 builtin/am.c:398
+#: builtin/am.c:1366 builtin/am.c:2009 builtin/replace.c:456
 #, c-format
 msgid "could not parse %s"
 msgstr "impossibile analizzare %s"
@@ -1410,27 +1411,27 @@
 "Per disabilitare questo messaggio, esegui\n"
 "\"git config advice.graftFileDeprecated false\""
 
-#: commit.c:1127
+#: commit.c:1128
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr "Il commit %s ha una firma GPG non affidabile, presumibilmente di %s."
 
-#: commit.c:1130
+#: commit.c:1131
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "Il commit %s ha una firma GPG non valida presumibilmente di %s."
 
-#: commit.c:1133
+#: commit.c:1134
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "Il commit %s non ha una firma GPG."
 
-#: commit.c:1136
+#: commit.c:1137
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "Il commit %s ha una firma GPG valida di %s\n"
 
-#: commit.c:1390
+#: commit.c:1391
 msgid ""
 "Warning: commit message did not conform to UTF-8.\n"
 "You may want to amend it after fixing the message, or set the config\n"
@@ -1494,55 +1495,65 @@
 msgid "unable to find all commit-graph files"
 msgstr "impossibile trovare tutti i file grafo dei commit"
 
-#: commit-graph.c:554 commit-graph.c:614
+#: commit-graph.c:561 commit-graph.c:621
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr ""
 "posizione commit non valida. Il grafo dei commit è probabilmente corrotto"
 
-#: commit-graph.c:575
+#: commit-graph.c:582
 #, c-format
 msgid "could not find commit %s"
 msgstr "impossibile trovare il commit %s"
 
-#: commit-graph.c:1002 builtin/pack-objects.c:2657
+#: commit-graph.c:855 builtin/am.c:1287
+#, c-format
+msgid "unable to parse commit %s"
+msgstr "impossibile analizzare il commit %s"
+
+#: commit-graph.c:859
+#, c-format
+msgid "unable to get tree for %s"
+msgstr "impossibile recuperare l'albero per %s"
+
+#: commit-graph.c:1017 builtin/pack-objects.c:2641
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "impossibile recuperare il tipo dell'oggetto %s"
 
-#: commit-graph.c:1034
+#: commit-graph.c:1049
 msgid "Loading known commits in commit graph"
 msgstr "Caricamento commit noti nel grafo dei commit in corso"
 
-#: commit-graph.c:1051
+#: commit-graph.c:1066
 msgid "Expanding reachable commits in commit graph"
 msgstr "Espansione dei commit raggiungibili nel grafo dei commit in corso"
 
-#: commit-graph.c:1070
+#: commit-graph.c:1085
 msgid "Clearing commit marks in commit graph"
 msgstr "Rimozione dei contrassegni commit nel grafo dei commit in corso"
 
-#: commit-graph.c:1089
+#: commit-graph.c:1104
 msgid "Computing commit graph generation numbers"
 msgstr "Calcolo numeri generazione del grafo dei commit in corso"
 
-#: commit-graph.c:1163
+#: commit-graph.c:1179
 #, c-format
 msgid "Finding commits for commit graph in %d pack"
 msgid_plural "Finding commits for commit graph in %d packs"
 msgstr[0] "Ricerca dei commit per il grafo dei commit in %d pack in corso"
 msgstr[1] "Ricerca dei commit per il grafo dei commit in %d pack in corso"
 
-#: commit-graph.c:1176
+#: commit-graph.c:1192
 #, c-format
 msgid "error adding pack %s"
 msgstr "errore durante l'aggiunta del pack %s"
 
-#: commit-graph.c:1180
+#: commit-graph.c:1196
 #, c-format
 msgid "error opening index for %s"
 msgstr "errore durante l'apertura dell'indice per %s"
 
-#: commit-graph.c:1204
+#: commit-graph.c:1220
 #, c-format
 msgid "Finding commits for commit graph from %d ref"
 msgid_plural "Finding commits for commit graph from %d refs"
@@ -1551,132 +1562,137 @@
 msgstr[1] ""
 "Ricerca dei commit per il grafo dei commit da %d riferimenti in corso"
 
-#: commit-graph.c:1238
+#: commit-graph.c:1240
+#, c-format
+msgid "invalid commit object id: %s"
+msgstr "ID oggetto commit non valido: %s"
+
+#: commit-graph.c:1255
 msgid "Finding commits for commit graph among packed objects"
 msgstr ""
 "Ricerca dei commit per il grafo dei commit fra gli oggetti nei pack in corso"
 
-#: commit-graph.c:1253
+#: commit-graph.c:1270
 msgid "Counting distinct commits in commit graph"
 msgstr "Conteggio commit distinti nel grafo dei commit in corso"
 
-#: commit-graph.c:1284
+#: commit-graph.c:1300
 msgid "Finding extra edges in commit graph"
 msgstr "Ricerca degli archi aggiuntivi nel grafo dei commit in corso"
 
-#: commit-graph.c:1332
+#: commit-graph.c:1346
 msgid "failed to write correct number of base graph ids"
 msgstr "impossibile scrivere il numero esatto degli ID grafo di base"
 
-#: commit-graph.c:1365 midx.c:811
+#: commit-graph.c:1379 midx.c:810
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "impossibile creare le prime directory di %s"
 
-#: commit-graph.c:1377 builtin/index-pack.c:306 builtin/repack.c:240
+#: commit-graph.c:1391 builtin/index-pack.c:306 builtin/repack.c:241
 #, c-format
 msgid "unable to create '%s'"
 msgstr "impossibile creare '%s'"
 
-#: commit-graph.c:1437
+#: commit-graph.c:1451
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "Scrittura in %d passaggio del grafo dei commit in corso"
 msgstr[1] "Scrittura in %d passaggi del grafo dei commit in corso"
 
-#: commit-graph.c:1478
+#: commit-graph.c:1492
 msgid "unable to open commit-graph chain file"
 msgstr "impossibile aprire il file catena grafo dei commit"
 
-#: commit-graph.c:1490
+#: commit-graph.c:1504
 msgid "failed to rename base commit-graph file"
 msgstr "impossibile ridenominare il file di base grafo dei commit"
 
-#: commit-graph.c:1510
+#: commit-graph.c:1524
 msgid "failed to rename temporary commit-graph file"
 msgstr "impossibile ridenominare il file temporaneo grafo dei commit"
 
-#: commit-graph.c:1621
+#: commit-graph.c:1635
 msgid "Scanning merged commits"
 msgstr "Scansione dei commit sottoposti a merge in corso"
 
-#: commit-graph.c:1632
+#: commit-graph.c:1646
 #, c-format
 msgid "unexpected duplicate commit id %s"
 msgstr "ID commit duplicato inatteso: %s"
 
-#: commit-graph.c:1657
+#: commit-graph.c:1670
 msgid "Merging commit-graph"
 msgstr "Merge del grafo dei commit in corso"
 
-#: commit-graph.c:1844
+#: commit-graph.c:1860
 #, c-format
 msgid "the commit graph format cannot write %d commits"
 msgstr ""
 "il formato del grafo dei commit non può essere usato per scrivere %d commit"
 
-#: commit-graph.c:1855
+#: commit-graph.c:1871
 msgid "too many commits to write graph"
 msgstr "troppi commit da scrivere nel grafo"
 
-#: commit-graph.c:1945
+#: commit-graph.c:1961
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 "il file del grafo dei commit ha un checksum non corretto e probabilmente è "
 "corrotto"
 
-#: commit-graph.c:1955
+#: commit-graph.c:1971
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "il grafo dei commit ha un ordine OID non corretto: %s seguito da %s"
 
-#: commit-graph.c:1965 commit-graph.c:1980
+#: commit-graph.c:1981 commit-graph.c:1996
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr ""
 "il grafo dei commit ha un valore fanout non corretto: fanout[%d] = %u != %u"
 
-#: commit-graph.c:1972
+#: commit-graph.c:1988
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "impossibile analizzare il commit %s nel grafo dei commit"
 
-#: commit-graph.c:1989
+#: commit-graph.c:2006
 msgid "Verifying commits in commit graph"
 msgstr "Verifica dei commit nel grafo dei commit in corso"
 
-#: commit-graph.c:2002
+#: commit-graph.c:2020
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 "impossibile analizzare il commit %s dal database oggetti per il grafo dei "
 "commit"
 
-#: commit-graph.c:2009
+#: commit-graph.c:2027
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr ""
 "l'OID dell'albero radice per il commit %s nel grafo dei commit è %s != %s"
 
-#: commit-graph.c:2019
+#: commit-graph.c:2037
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr "l'elenco genitori nel grafo dei commit per il commit %s è troppo lungo"
 
-#: commit-graph.c:2028
+#: commit-graph.c:2046
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "il genitore nel grafo dei commit per %s è %s != %s"
 
-#: commit-graph.c:2041
+#: commit-graph.c:2059
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr ""
 "l'elenco genitori nel grafo dei commit per il commit %s è finito prima del "
 "previsto"
 
-#: commit-graph.c:2046
+#: commit-graph.c:2064
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
@@ -1684,7 +1700,7 @@
 "il grafo dei commit ha un numero generazione zero per il commit %s ma non "
 "pari a zero per gli altri"
 
-#: commit-graph.c:2050
+#: commit-graph.c:2068
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
@@ -1692,12 +1708,12 @@
 "il grafo dei commit ha un numero generazione non pari a zero per il commit "
 "%s ma pari a zero per gli altri"
 
-#: commit-graph.c:2065
+#: commit-graph.c:2083
 #, c-format
 msgid "commit-graph generation for commit %s is %u != %u"
 msgstr "il numero generazione nel grafo dei commit per il commit %s è %u != %u"
 
-#: commit-graph.c:2071
+#: commit-graph.c:2089
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
@@ -1746,7 +1762,7 @@
 msgid "key does not contain variable name: %s"
 msgstr "la chiave non contiene un nome variabile: %s"
 
-#: config.c:406 sequencer.c:2463
+#: config.c:406 sequencer.c:2401
 #, c-format
 msgid "invalid key: %s"
 msgstr "chiave non valida: %s"
@@ -1873,155 +1889,148 @@
 msgid "invalid mode for object creation: %s"
 msgstr "modalità non valida per la creazione di un oggetto: %s"
 
-#: config.c:1430
+#: config.c:1425
 #, c-format
 msgid "malformed value for %s"
 msgstr "valore malformato per %s"
 
-#: config.c:1456
+#: config.c:1451
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "valore malformato per %s: %s"
 
-#: config.c:1457
+#: config.c:1452
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr "dev'essere nothing, matching, simple, upstream o current"
 
-#: config.c:1518 builtin/pack-objects.c:3410
+#: config.c:1513 builtin/pack-objects.c:3394
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "livello compressione pack %d non valido"
 
-#: config.c:1639
+#: config.c:1634
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "impossibile caricare l'oggetto blob configurazione '%s'"
 
-#: config.c:1642
+#: config.c:1637
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "il riferimento '%s' non punta ad un blob"
 
-#: config.c:1659
+#: config.c:1654
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "impossibile risolvere il blob configurazione '%s'"
 
-#: config.c:1689
+#: config.c:1684
 #, c-format
 msgid "failed to parse %s"
 msgstr "analisi di %s non riuscita"
 
-#: config.c:1745
+#: config.c:1740
 msgid "unable to parse command-line config"
 msgstr "impossibile analizzare la configurazione a riga di comando"
 
-#: config.c:2094
+#: config.c:2091
 msgid "unknown error occurred while reading the configuration files"
 msgstr ""
 "si è verificato un errore imprevisto durante la lettura dei file di "
 "configurazione"
 
-#: config.c:2264
+#: config.c:2261
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "%s non valido: '%s'"
 
-#: config.c:2307
-#, c-format
-msgid "unknown core.untrackedCache value '%s'; using 'keep' default value"
-msgstr ""
-"valore core.untrackedCache '%s' non valido; utilizzerò il valore predefinito "
-"'keep'"
-
-#: config.c:2333
+#: config.c:2306
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr ""
 "il valore splitIndex.maxPercentChange '%d' dovrebbe essere compreso fra 0 e "
 "100"
 
-#: config.c:2379
+#: config.c:2352
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "impossibile analizzare '%s' dalla configurazione a riga di comando"
 
-#: config.c:2381
+#: config.c:2354
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "variabile configurazione '%s' errata nel file '%s' alla riga %d"
 
-#: config.c:2462
+#: config.c:2435
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "nome sezione '%s' non valido"
 
-#: config.c:2494
+#: config.c:2467
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s ha più valori"
 
-#: config.c:2523
+#: config.c:2496
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "scrittura del nuovo file di configurazione %s non riuscita"
 
-#: config.c:2775 config.c:3099
+#: config.c:2748 config.c:3072
 #, c-format
 msgid "could not lock config file %s"
 msgstr "impossibile bloccare il file di configurazione %s"
 
-#: config.c:2786
+#: config.c:2759
 #, c-format
 msgid "opening %s"
 msgstr "apertura di %s in corso"
 
-#: config.c:2821 builtin/config.c:328
+#: config.c:2794 builtin/config.c:328
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "pattern non valido: %s"
 
-#: config.c:2846
+#: config.c:2819
 #, c-format
 msgid "invalid config file %s"
 msgstr "file di configurazione %s non valido"
 
-#: config.c:2859 config.c:3112
+#: config.c:2832 config.c:3085
 #, c-format
 msgid "fstat on %s failed"
 msgstr "fstat di %s non riuscita"
 
-#: config.c:2870
+#: config.c:2843
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr "impossibile eseguire mmap su '%s'"
 
-#: config.c:2879 config.c:3117
+#: config.c:2852 config.c:3090
 #, c-format
 msgid "chmod on %s failed"
 msgstr "esecuzione chmod su %s non riuscita"
 
-#: config.c:2964 config.c:3214
+#: config.c:2937 config.c:3187
 #, c-format
 msgid "could not write config file %s"
 msgstr "impossibile scrivere il file di configurazione %s"
 
-#: config.c:2998
+#: config.c:2971
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "impossibile impostare '%s' a '%s'"
 
-#: config.c:3000 builtin/remote.c:782
+#: config.c:2973 builtin/remote.c:782
 #, c-format
 msgid "could not unset '%s'"
 msgstr "impossibile eliminare l'impostazione di '%s'"
 
-#: config.c:3090
+#: config.c:3063
 #, c-format
 msgid "invalid section name: %s"
 msgstr "nome sezione non valido: %s"
 
-#: config.c:3257
+#: config.c:3230
 #, c-format
 msgid "missing value for '%s'"
 msgstr "valore mancante per '%s'"
@@ -2146,7 +2155,7 @@
 msgid "unknown port %s"
 msgstr "porta %s sconosciuta"
 
-#: connect.c:845 connect.c:1171
+#: connect.c:845 connect.c:1175
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr "nome host strano '%s' bloccato"
@@ -2161,60 +2170,60 @@
 msgid "cannot start proxy %s"
 msgstr "impossibile avviare il proxy %s"
 
-#: connect.c:924
+#: connect.c:928
 msgid "no path specified; see 'git help pull' for valid url syntax"
 msgstr ""
 "nessun percorso specificato; vedere 'git help pull' per le sintassi URL "
 "valide"
 
-#: connect.c:1119
+#: connect.c:1123
 msgid "ssh variant 'simple' does not support -4"
 msgstr "la variante SSH 'simple' non supporta -4"
 
-#: connect.c:1131
+#: connect.c:1135
 msgid "ssh variant 'simple' does not support -6"
 msgstr "la variante SSH 'simple' non supporta -6"
 
-#: connect.c:1148
+#: connect.c:1152
 msgid "ssh variant 'simple' does not support setting port"
 msgstr "la variante SSH 'simple' non supporta l'impostazione della porta"
 
-#: connect.c:1260
+#: connect.c:1264
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr "percorso strano '%s' bloccato"
 
-#: connect.c:1307
+#: connect.c:1311
 msgid "unable to fork"
 msgstr "impossibile eseguire fork"
 
-#: connected.c:86 builtin/fsck.c:221 builtin/prune.c:43
+#: connected.c:88 builtin/fsck.c:221 builtin/prune.c:43
 msgid "Checking connectivity"
 msgstr "Controllo connessione in corso"
 
-#: connected.c:98
+#: connected.c:100
 msgid "Could not run 'git rev-list'"
 msgstr "Impossibile eseguire 'git-rev-list'"
 
-#: connected.c:118
+#: connected.c:120
 msgid "failed write to rev-list"
 msgstr "scrittura nella rev-list non riuscita"
 
-#: connected.c:125
+#: connected.c:127
 msgid "failed to close rev-list's stdin"
 msgstr "chiusura standard input della rev-list non riuscita"
 
-#: convert.c:193
+#: convert.c:194
 #, c-format
 msgid "illegal crlf_action %d"
 msgstr "crlf_action %d illecita"
 
-#: convert.c:206
+#: convert.c:207
 #, c-format
 msgid "CRLF would be replaced by LF in %s"
 msgstr "CRLF sarebbe sostituito da LF in %s"
 
-#: convert.c:208
+#: convert.c:209
 #, c-format
 msgid ""
 "CRLF will be replaced by LF in %s.\n"
@@ -2223,12 +2232,12 @@
 "CRLF sarà sostituito da LF in %s.\n"
 "Il file avrà i suoi fine riga originari nella propria directory di lavoro"
 
-#: convert.c:216
+#: convert.c:217
 #, c-format
 msgid "LF would be replaced by CRLF in %s"
 msgstr "LF sarebbe sostituito da CRLF in %s"
 
-#: convert.c:218
+#: convert.c:219
 #, c-format
 msgid ""
 "LF will be replaced by CRLF in %s.\n"
@@ -2237,12 +2246,12 @@
 "LF sarà sostituito da CRLF in %s.\n"
 "Il file avrà i suoi fine riga originari nella propria directory di lavoro"
 
-#: convert.c:279
+#: convert.c:280
 #, c-format
 msgid "BOM is prohibited in '%s' if encoded as %s"
 msgstr "Il BOM è vietato in '%s' se il file è codificato come %s"
 
-#: convert.c:286
+#: convert.c:287
 #, c-format
 msgid ""
 "The file '%s' contains a byte order mark (BOM). Please use UTF-%s as working-"
@@ -2251,12 +2260,12 @@
 "Il file '%s' contiene un indicatore dell'ordine dei byte (BOM). Usare UTF-%s "
 "come codifica dell'albero di lavoro."
 
-#: convert.c:304
+#: convert.c:305
 #, c-format
 msgid "BOM is required in '%s' if encoded as %s"
 msgstr "Il BOM è richiesto in '%s' se il file è codificato come %s"
 
-#: convert.c:306
+#: convert.c:307
 #, c-format
 msgid ""
 "The file '%s' is missing a byte order mark (BOM). Please use UTF-%sBE or UTF-"
@@ -2266,51 +2275,51 @@
 "o UTF-%sLE (a seconda dell'ordine dei byte) come codifica dell'albero di "
 "lavoro."
 
-#: convert.c:424 convert.c:495
+#: convert.c:425 convert.c:496
 #, c-format
 msgid "failed to encode '%s' from %s to %s"
 msgstr "conversione della codifica '%s' da %s a %s non riuscita"
 
-#: convert.c:467
+#: convert.c:468
 #, c-format
 msgid "encoding '%s' from %s to %s and back is not the same"
 msgstr ""
 "il risultato della codifica di '%s' da %s a %s e viceversa non è lo stesso"
 
-#: convert.c:673
+#: convert.c:674
 #, c-format
 msgid "cannot fork to run external filter '%s'"
 msgstr "impossibile eseguire fork per eseguire il filtro esterno '%s'"
 
-#: convert.c:693
+#: convert.c:694
 #, c-format
 msgid "cannot feed the input to external filter '%s'"
 msgstr "impossibile fornire l'input al filtro esterno '%s'"
 
-#: convert.c:700
+#: convert.c:701
 #, c-format
 msgid "external filter '%s' failed %d"
 msgstr "esecuzione del filtro esterno '%s' non riuscita: %d"
 
-#: convert.c:735 convert.c:738
+#: convert.c:736 convert.c:739
 #, c-format
 msgid "read from external filter '%s' failed"
 msgstr "lettura dal filtro esterno '%s' non riuscita"
 
-#: convert.c:741 convert.c:796
+#: convert.c:742 convert.c:797
 #, c-format
 msgid "external filter '%s' failed"
 msgstr "esecuzione del filtro esterno '%s' non riuscita"
 
-#: convert.c:844
+#: convert.c:845
 msgid "unexpected filter type"
 msgstr "tipo filtro inatteso"
 
-#: convert.c:855
+#: convert.c:856
 msgid "path name too long for external filter"
 msgstr "nome percorso troppo lungo per il filtro esterno"
 
-#: convert.c:929
+#: convert.c:930
 #, c-format
 msgid ""
 "external filter '%s' is not available anymore although not all paths have "
@@ -2319,67 +2328,67 @@
 "il filtro esterno '%s' non è più disponibile nonostante non tutti i percorsi "
 "siano stati filtrati"
 
-#: convert.c:1228
+#: convert.c:1229
 msgid "true/false are no valid working-tree-encodings"
 msgstr "true/false non sono codifiche dell'albero di lavoro valide"
 
-#: convert.c:1398 convert.c:1432
+#: convert.c:1417 convert.c:1451
 #, c-format
 msgid "%s: clean filter '%s' failed"
 msgstr "%s: esecuzione del filtro clean '%s' non riuscita"
 
-#: convert.c:1476
+#: convert.c:1495
 #, c-format
 msgid "%s: smudge filter %s failed"
 msgstr "%s: esecuzione del filtro smudge '%s' non riuscita"
 
-#: date.c:137
+#: date.c:138
 msgid "in the future"
 msgstr "in futuro"
 
-#: date.c:143
+#: date.c:144
 #, c-format
 msgid "%<PRIuMAX> second ago"
 msgid_plural "%<PRIuMAX> seconds ago"
 msgstr[0] "%<PRIuMAX> secondo fa"
 msgstr[1] "%<PRIuMAX> secondi fa"
 
-#: date.c:150
+#: date.c:151
 #, c-format
 msgid "%<PRIuMAX> minute ago"
 msgid_plural "%<PRIuMAX> minutes ago"
 msgstr[0] "%<PRIuMAX> minuto fa"
 msgstr[1] "%<PRIuMAX> minuti fa"
 
-#: date.c:157
+#: date.c:158
 #, c-format
 msgid "%<PRIuMAX> hour ago"
 msgid_plural "%<PRIuMAX> hours ago"
 msgstr[0] "%<PRIuMAX> ora fa"
 msgstr[1] "%<PRIuMAX> ore fa"
 
-#: date.c:164
+#: date.c:165
 #, c-format
 msgid "%<PRIuMAX> day ago"
 msgid_plural "%<PRIuMAX> days ago"
 msgstr[0] "%<PRIuMAX> giorno fa"
 msgstr[1] "%<PRIuMAX> giorni fa"
 
-#: date.c:170
+#: date.c:171
 #, c-format
 msgid "%<PRIuMAX> week ago"
 msgid_plural "%<PRIuMAX> weeks ago"
 msgstr[0] "%<PRIuMAX> settimana fa"
 msgstr[1] "%<PRIuMAX> settimane fa"
 
-#: date.c:177
+#: date.c:178
 #, c-format
 msgid "%<PRIuMAX> month ago"
 msgid_plural "%<PRIuMAX> months ago"
 msgstr[0] "%<PRIuMAX> mese fa"
 msgstr[1] "%<PRIuMAX> mesi fa"
 
-#: date.c:188
+#: date.c:189
 #, c-format
 msgid "%<PRIuMAX> year"
 msgid_plural "%<PRIuMAX> years"
@@ -2387,14 +2396,14 @@
 msgstr[1] "%<PRIuMAX> anni"
 
 #. TRANSLATORS: "%s" is "<n> years"
-#: date.c:191
+#: date.c:192
 #, c-format
 msgid "%s, %<PRIuMAX> month ago"
 msgid_plural "%s, %<PRIuMAX> months ago"
 msgstr[0] "%s, %<PRIuMAX> mese fa"
 msgstr[1] "%s, %<PRIuMAX> mesi fa"
 
-#: date.c:196 date.c:201
+#: date.c:197 date.c:202
 #, c-format
 msgid "%<PRIuMAX> year ago"
 msgid_plural "%<PRIuMAX> years ago"
@@ -2433,7 +2442,7 @@
 msgid "failed to read orderfile '%s'"
 msgstr "lettura dell'orderfile '%s' non riuscita"
 
-#: diffcore-rename.c:544
+#: diffcore-rename.c:543
 msgid "Performing inexact rename detection"
 msgstr "Rilevamento ridenominazione non esatta in corso"
 
@@ -2502,36 +2511,36 @@
 "Trovati errori nella variabile di configurazione 'diff.dirstat':\n"
 "%s"
 
-#: diff.c:4215
+#: diff.c:4218
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "processo esterno diff morto, mi fermo a %s"
 
-#: diff.c:4560
+#: diff.c:4563
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr ""
 "le opzioni --name-only, --name-status, --check e -s sono mutuamente esclusive"
 
-#: diff.c:4563
+#: diff.c:4566
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "le opzioni -G, -S e --find-object sono mutuamente esclusive"
 
-#: diff.c:4641
+#: diff.c:4644
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow richiede esattamente uno specificatore percorso"
 
-#: diff.c:4689
+#: diff.c:4692
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "valore non valido per --stat: %s"
 
-#: diff.c:4694 diff.c:4699 diff.c:4704 diff.c:4709 diff.c:5222
+#: diff.c:4697 diff.c:4702 diff.c:4707 diff.c:4712 diff.c:5225
 #: parse-options.c:199 parse-options.c:203
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s richiede un valore numerico"
 
-#: diff.c:4726
+#: diff.c:4729
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -2540,42 +2549,42 @@
 "Analisi del parametro dell'opzione --dirstat/-X non riuscita:\n"
 "%s"
 
-#: diff.c:4811
+#: diff.c:4814
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "classe modifica '%c' sconosciuta in --diff-filter=%s"
 
-#: diff.c:4835
+#: diff.c:4838
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "valore sconosciuto dopo ws-error-highlight=%.*s"
 
-#: diff.c:4849
+#: diff.c:4852
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "impossibile risolvere '%s'"
 
-#: diff.c:4899 diff.c:4905
+#: diff.c:4902 diff.c:4908
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s richiede il formato <n>/<m>"
 
-#: diff.c:4917
+#: diff.c:4920
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s richiede un carattere, ricevuto '%s'"
 
-#: diff.c:4938
+#: diff.c:4941
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "argomento --color-moved errato: %s"
 
-#: diff.c:4957
+#: diff.c:4960
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "modo non valido '%s' in --color-moved-ws"
 
-#: diff.c:4997
+#: diff.c:5000
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
@@ -2583,151 +2592,151 @@
 "l'opzione diff-algorithm accetta i valori \"myers\", \"minimal\", \"patience"
 "\" e \"histogram\""
 
-#: diff.c:5033 diff.c:5053
+#: diff.c:5036 diff.c:5056
 #, c-format
 msgid "invalid argument to %s"
 msgstr "argomento non valido per %s"
 
-#: diff.c:5191
+#: diff.c:5194
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "analisi del parametro dell'opzione --submodule non riuscita: '%s'"
 
-#: diff.c:5247
+#: diff.c:5250
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "argomento --word-diff errato: %s"
 
-#: diff.c:5270
+#: diff.c:5273
 msgid "Diff output format options"
 msgstr "Opzioni formato output diff"
 
-#: diff.c:5272 diff.c:5278
+#: diff.c:5275 diff.c:5281
 msgid "generate patch"
 msgstr "genera patch"
 
-#: diff.c:5275 builtin/log.c:172
+#: diff.c:5278 builtin/log.c:172
 msgid "suppress diff output"
 msgstr "non visualizzare l'output del diff"
 
-#: diff.c:5280 diff.c:5394 diff.c:5401
+#: diff.c:5283 diff.c:5397 diff.c:5404
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5281 diff.c:5284
+#: diff.c:5284 diff.c:5287
 msgid "generate diffs with <n> lines context"
 msgstr "genera diff con <n> righe di contesto"
 
-#: diff.c:5286
+#: diff.c:5289
 msgid "generate the diff in raw format"
 msgstr "genera il diff in formato grezzo"
 
-#: diff.c:5289
+#: diff.c:5292
 msgid "synonym for '-p --raw'"
 msgstr "sinonimo di '-p --raw'"
 
-#: diff.c:5293
+#: diff.c:5296
 msgid "synonym for '-p --stat'"
 msgstr "sinonimo di '-p --stat'"
 
-#: diff.c:5297
+#: diff.c:5300
 msgid "machine friendly --stat"
 msgstr "--stat leggibile da una macchina"
 
-#: diff.c:5300
+#: diff.c:5303
 msgid "output only the last line of --stat"
 msgstr "emetti in output solo l'ultima riga di --stat"
 
-#: diff.c:5302 diff.c:5310
+#: diff.c:5305 diff.c:5313
 msgid "<param1,param2>..."
 msgstr "<parametro1,parametro2>..."
 
-#: diff.c:5303
+#: diff.c:5306
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr ""
 "emetti in output la distribuzione del numero di modifiche relativo a ogni "
 "sottodirectory"
 
-#: diff.c:5307
+#: diff.c:5310
 msgid "synonym for --dirstat=cumulative"
 msgstr "sinonimo di --dirstat=cumulative"
 
-#: diff.c:5311
+#: diff.c:5314
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "sinonimo di --dirstat=files,parametro1,parametro2..."
 
-#: diff.c:5315
+#: diff.c:5318
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 "avvisa se le modifiche introducono marcatori conflitto o errori spazi bianchi"
 
-#: diff.c:5318
+#: diff.c:5321
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr ""
 "riassunto conciso (ad es. elementi creati, ridenominati e modifiche modi)"
 
-#: diff.c:5321
+#: diff.c:5324
 msgid "show only names of changed files"
 msgstr "visualizza solo i nomi dei file modificati"
 
-#: diff.c:5324
+#: diff.c:5327
 msgid "show only names and status of changed files"
 msgstr "visualizza solo i nomi e lo stato dei file modificati"
 
-#: diff.c:5326
+#: diff.c:5329
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<ampiezza>[,<ampiezza nome>[,<numero>]]"
 
-#: diff.c:5327
+#: diff.c:5330
 msgid "generate diffstat"
 msgstr "genera diffstat"
 
-#: diff.c:5329 diff.c:5332 diff.c:5335
+#: diff.c:5332 diff.c:5335 diff.c:5338
 msgid "<width>"
 msgstr "<ampiezza>"
 
-#: diff.c:5330
+#: diff.c:5333
 msgid "generate diffstat with a given width"
 msgstr "genera il diffstat con un'ampiezza specificata"
 
-#: diff.c:5333
+#: diff.c:5336
 msgid "generate diffstat with a given name width"
 msgstr "genera il diffstat con un'ampiezza nomi specificata"
 
-#: diff.c:5336
+#: diff.c:5339
 msgid "generate diffstat with a given graph width"
 msgstr "genera il diffstat con un'ampiezza grafo specificata"
 
-#: diff.c:5338
+#: diff.c:5341
 msgid "<count>"
 msgstr "<numero>"
 
-#: diff.c:5339
+#: diff.c:5342
 msgid "generate diffstat with limited lines"
 msgstr "genera il diffstat con righe limitate"
 
-#: diff.c:5342
+#: diff.c:5345
 msgid "generate compact summary in diffstat"
 msgstr "genera riassunto conciso nel diffstat"
 
-#: diff.c:5345
+#: diff.c:5348
 msgid "output a binary diff that can be applied"
 msgstr "stampa in output un diff binario che può essere applicato"
 
-#: diff.c:5348
+#: diff.c:5351
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr "visualizza i nomi oggetto pre e post immagine nelle righe \"indice\""
 
-#: diff.c:5350
+#: diff.c:5353
 msgid "show colored diff"
 msgstr "visualizza diff colorato"
 
-#: diff.c:5351
+#: diff.c:5354
 msgid "<kind>"
 msgstr "<tipo>"
 
-#: diff.c:5352
+#: diff.c:5355
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
@@ -2735,7 +2744,7 @@
 "evidenzia gli errori di spazi bianchi nelle righe 'contesto', 'vecchie' o "
 "'nuove' nel diff"
 
-#: diff.c:5355
+#: diff.c:5358
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -2743,91 +2752,91 @@
 "non rimuovere i nomi percorso e usare caratteri NUL come terminatori campo "
 "in --raw o --numstat"
 
-#: diff.c:5358 diff.c:5361 diff.c:5364 diff.c:5470
+#: diff.c:5361 diff.c:5364 diff.c:5367 diff.c:5473
 msgid "<prefix>"
 msgstr "<prefisso>"
 
-#: diff.c:5359
+#: diff.c:5362
 msgid "show the given source prefix instead of \"a/\""
 msgstr "visualizza il prefisso sorgente specificato invece di \"a/\""
 
-#: diff.c:5362
+#: diff.c:5365
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "visualizza il prefisso destinazione specificato invece di \"b/\""
 
-#: diff.c:5365
+#: diff.c:5368
 msgid "prepend an additional prefix to every line of output"
 msgstr "anteponi un prefisso aggiuntivo ad ogni riga dell'output"
 
-#: diff.c:5368
+#: diff.c:5371
 msgid "do not show any source or destination prefix"
 msgstr "non visualizzare alcun prefisso sorgente o destinazione"
 
-#: diff.c:5371
+#: diff.c:5374
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr ""
 "visualizza il contesto tra gli hunk del diff fino al numero di righe "
 "specificato"
 
-#: diff.c:5375 diff.c:5380 diff.c:5385
+#: diff.c:5378 diff.c:5383 diff.c:5388
 msgid "<char>"
 msgstr "<carattere>"
 
-#: diff.c:5376
+#: diff.c:5379
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "specifica il carattere che indica una nuova riga al posto di '+'"
 
-#: diff.c:5381
+#: diff.c:5384
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "specifica il carattere che indica una vecchia riga al posto di '-'"
 
-#: diff.c:5386
+#: diff.c:5389
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "specifica il carattere che indica un contesto al posto di ' '"
 
-#: diff.c:5389
+#: diff.c:5392
 msgid "Diff rename options"
 msgstr "Opzioni rinominazione diff"
 
-#: diff.c:5390
+#: diff.c:5393
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5391
+#: diff.c:5394
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr ""
 "spezza modifiche di riscrittura completa in coppie eliminazione/creazione"
 
-#: diff.c:5395
+#: diff.c:5398
 msgid "detect renames"
 msgstr "rileva le ridenominazioni"
 
-#: diff.c:5399
+#: diff.c:5402
 msgid "omit the preimage for deletes"
 msgstr "ometti la preimmagine per le eliminazioni"
 
-#: diff.c:5402
+#: diff.c:5405
 msgid "detect copies"
 msgstr "rileva le copie"
 
-#: diff.c:5406
+#: diff.c:5409
 msgid "use unmodified files as source to find copies"
 msgstr "usa file non modificati come sorgente per trovare copie"
 
-#: diff.c:5408
+#: diff.c:5411
 msgid "disable rename detection"
 msgstr "disabilita rilevamento ridenominazione"
 
-#: diff.c:5411
+#: diff.c:5414
 msgid "use empty blobs as rename source"
 msgstr "usa blob vuoti come sorgente ridenominazione"
 
-#: diff.c:5413
+#: diff.c:5416
 msgid "continue listing the history of a file beyond renames"
 msgstr ""
 "continua a elencare la cronologia di un file al di là delle ridenominazioni"
 
-#: diff.c:5416
+#: diff.c:5419
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
@@ -2835,159 +2844,159 @@
 "impedisci il rilevamento ridenominazione/copia se il numero delle "
 "destinazioni ridenominazione/copia eccede il limite specificato"
 
-#: diff.c:5418
+#: diff.c:5421
 msgid "Diff algorithm options"
 msgstr "Opzioni algoritmo diff"
 
-#: diff.c:5420
+#: diff.c:5423
 msgid "produce the smallest possible diff"
 msgstr "produci il diff più piccolo possibile"
 
-#: diff.c:5423
+#: diff.c:5426
 msgid "ignore whitespace when comparing lines"
 msgstr "ignora gli spazi bianchi durante il confronto delle righe"
 
-#: diff.c:5426
+#: diff.c:5429
 msgid "ignore changes in amount of whitespace"
 msgstr "ignora le modifiche al numero degli spazi bianchi"
 
-#: diff.c:5429
+#: diff.c:5432
 msgid "ignore changes in whitespace at EOL"
 msgstr "ignora modifiche agli spazi bianchi a fine riga"
 
-#: diff.c:5432
+#: diff.c:5435
 msgid "ignore carrier-return at the end of line"
 msgstr "ignora carattere ritorno a capo a fine riga"
 
-#: diff.c:5435
+#: diff.c:5438
 msgid "ignore changes whose lines are all blank"
 msgstr "ignora modifiche che riguardano solo righe vuote"
 
-#: diff.c:5438
+#: diff.c:5441
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr ""
 "euristica per spostare i limiti degli hunk nel diff per una lettura agevole"
 
-#: diff.c:5441
+#: diff.c:5444
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "genera il diff usando l'algoritmo \"patience diff\""
 
-#: diff.c:5445
+#: diff.c:5448
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "genera il diff usando l'algoritmo \"histogram diff\""
 
-#: diff.c:5447
+#: diff.c:5450
 msgid "<algorithm>"
 msgstr "<algoritmo>"
 
-#: diff.c:5448
+#: diff.c:5451
 msgid "choose a diff algorithm"
 msgstr "seleziona un algoritmo diff"
 
-#: diff.c:5450
+#: diff.c:5453
 msgid "<text>"
 msgstr "<testo>"
 
-#: diff.c:5451
+#: diff.c:5454
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "genera il diff usando l'algoritmo \"anchored diff\""
 
-#: diff.c:5453 diff.c:5462 diff.c:5465
+#: diff.c:5456 diff.c:5465 diff.c:5468
 msgid "<mode>"
 msgstr "<modalità>"
 
-#: diff.c:5454
+#: diff.c:5457
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr ""
 "visualizza il diff parola per parola usando <modalità> per delimitare le "
 "parole modificate"
 
-#: diff.c:5456 diff.c:5459 diff.c:5504
+#: diff.c:5459 diff.c:5462 diff.c:5507
 msgid "<regex>"
 msgstr "<espressione regolare>"
 
-#: diff.c:5457
+#: diff.c:5460
 msgid "use <regex> to decide what a word is"
 msgstr "usa <espressione regolare> per decidere cosa costituisce una parola"
 
-#: diff.c:5460
+#: diff.c:5463
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr ""
 "equivalente di --word-diff=color --word-diff-regex=<espressione regolare>"
 
-#: diff.c:5463
+#: diff.c:5466
 msgid "moved lines of code are colored differently"
 msgstr "le righe di codice spostate sono colorate in modo diverso"
 
-#: diff.c:5466
+#: diff.c:5469
 msgid "how white spaces are ignored in --color-moved"
 msgstr "modo in cui sono ignorati gli spazi bianchi in --color-moved"
 
-#: diff.c:5469
+#: diff.c:5472
 msgid "Other diff options"
 msgstr "Altre opzioni diff"
 
-#: diff.c:5471
+#: diff.c:5474
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 "se eseguito da una sottodirectory, escludi le modifiche esterne ad essa e "
 "visualizza i percorsi relativi"
 
-#: diff.c:5475
+#: diff.c:5478
 msgid "treat all files as text"
 msgstr "tratta tutti i file come se fossero di testo"
 
-#: diff.c:5477
+#: diff.c:5480
 msgid "swap two inputs, reverse the diff"
 msgstr "scambia i due input, genera un diff al contrario"
 
-#: diff.c:5479
+#: diff.c:5482
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "esci con codice 1 se ci sono differenze, con 0 altrimenti"
 
-#: diff.c:5481
+#: diff.c:5484
 msgid "disable all output of the program"
 msgstr "disabilita l'intero output del programma"
 
-#: diff.c:5483
+#: diff.c:5486
 msgid "allow an external diff helper to be executed"
 msgstr "consenti l'esecuzione di un helper diff esterno"
 
-#: diff.c:5485
+#: diff.c:5488
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 "esegui filtri di conversione in testo esterni quando si confrontano file "
 "binari"
 
-#: diff.c:5487
+#: diff.c:5490
 msgid "<when>"
 msgstr "<quando>"
 
-#: diff.c:5488
+#: diff.c:5491
 msgid "ignore changes to submodules in the diff generation"
 msgstr "ignora le modifiche ai sottomoduli durante la generazione del diff"
 
-#: diff.c:5491
+#: diff.c:5494
 msgid "<format>"
 msgstr "<formato>"
 
-#: diff.c:5492
+#: diff.c:5495
 msgid "specify how differences in submodules are shown"
 msgstr "specifica come verranno visualizzate le differenze nei sottomoduli"
 
-#: diff.c:5496
+#: diff.c:5499
 msgid "hide 'git add -N' entries from the index"
 msgstr "nascondi le voci 'git add -N' nell'indice"
 
-#: diff.c:5499
+#: diff.c:5502
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "tratta le voci 'git add -N' come reali nell'indice"
 
-#: diff.c:5501
+#: diff.c:5504
 msgid "<string>"
 msgstr "<stringa>"
 
-#: diff.c:5502
+#: diff.c:5505
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
@@ -2995,7 +3004,7 @@
 "cerca differenze che modificano il numero di occorrenze della stringa "
 "specificata"
 
-#: diff.c:5505
+#: diff.c:5508
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
@@ -3003,24 +3012,24 @@
 "cerca differenze che modificano il numero di occorrenze dell'espressione "
 "regolare specificata"
 
-#: diff.c:5508
+#: diff.c:5511
 msgid "show all changes in the changeset with -S or -G"
 msgstr "visualizza tutte le modifiche nel changeset con -S o -G"
 
-#: diff.c:5511
+#: diff.c:5514
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr ""
 "tratta la <stringa> nell'opzione -S come un'espressione regolare POSIX estesa"
 
-#: diff.c:5514
+#: diff.c:5517
 msgid "control the order in which files appear in the output"
 msgstr "controlla l'ordine con cui i file appariranno nell'output"
 
-#: diff.c:5515
+#: diff.c:5518
 msgid "<object-id>"
 msgstr "<ID oggetto>"
 
-#: diff.c:5516
+#: diff.c:5519
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
@@ -3028,34 +3037,34 @@
 "cerca differenze che modificano il numero di occorrenze dell'oggetto "
 "specificato"
 
-#: diff.c:5518
+#: diff.c:5521
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5519
+#: diff.c:5522
 msgid "select files by diff type"
 msgstr "seleziona file in base al tipo diff"
 
-#: diff.c:5521
+#: diff.c:5524
 msgid "<file>"
 msgstr "<file>"
 
-#: diff.c:5522
+#: diff.c:5525
 msgid "Output to a specific file"
 msgstr "Salva l'output in un file specifico"
 
-#: diff.c:6177
+#: diff.c:6180
 msgid "inexact rename detection was skipped due to too many files."
 msgstr ""
 "il rilevamento ridenominazione non esatta è stato omesso per la presenza di "
 "troppi file."
 
-#: diff.c:6180
+#: diff.c:6183
 msgid "only found copies from modified paths due to too many files."
 msgstr ""
 "trovate solo copie dai percorsi modificati per la presenza di troppi file."
 
-#: diff.c:6183
+#: diff.c:6186
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -3063,41 +3072,41 @@
 "potresti voler impostare la variabile %s ad almeno %d e riprovare ad "
 "eseguire il comando."
 
-#: dir.c:537
+#: dir.c:549
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
 msgstr ""
 "lo specificatore percorso '%s' non corrisponde ad alcun file noto a git"
 
-#: dir.c:926
+#: dir.c:938
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr "impossibile usare %s come file di esclusione"
 
-#: dir.c:1843
+#: dir.c:1877
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "impossibile aprire la directory '%s'"
 
-#: dir.c:2085
+#: dir.c:2128
 msgid "failed to get kernel name and information"
 msgstr "impossibile ottenere il nome e le informazioni sul kernel"
 
-#: dir.c:2209
+#: dir.c:2252
 msgid "untracked cache is disabled on this system or location"
 msgstr "la cache non tracciata è disabilitata su questo sistema o percorso"
 
-#: dir.c:3013
+#: dir.c:3056
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "file index corrotto nel repository %s"
 
-#: dir.c:3058 dir.c:3063
+#: dir.c:3101 dir.c:3106
 #, c-format
 msgid "could not create directories for %s"
 msgstr "impossibile creare le directory per %s"
 
-#: dir.c:3092
+#: dir.c:3135
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "impossibile migrare la directory git da '%s' a '%s'"
@@ -3117,12 +3126,12 @@
 msgid "could not stat file '%s'"
 msgstr "impossibile eseguire stat sul file '%s'"
 
-#: environment.c:150
+#: environment.c:148
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "percorso spazio dei nomi git \"%s\" non valido"
 
-#: environment.c:332
+#: environment.c:330
 #, c-format
 msgid "could not set GIT_DIR to '%s'"
 msgstr "impossibile impostare GIT_DIR a '%s'"
@@ -3132,160 +3141,156 @@
 msgid "too many args to run %s"
 msgstr "troppi argomenti per eseguire %s"
 
-#: fetch-object.c:17
-msgid "Remote with no URL"
-msgstr "Remoto senza URL"
-
-#: fetch-pack.c:151
+#: fetch-pack.c:150
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack: attesa lista shallow"
 
-#: fetch-pack.c:154
+#: fetch-pack.c:153
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr "git fetch-pack: atteso pacchetto flush dopo lista shallow"
 
-#: fetch-pack.c:165
+#: fetch-pack.c:164
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr "git fetch-pack: attesi ACK/NAK, ricevuto pacchetto flush"
 
-#: fetch-pack.c:185
+#: fetch-pack.c:184
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr "git fetch-pack: attesi ACK/NAK, ricevuto '%s'"
 
-#: fetch-pack.c:196
+#: fetch-pack.c:195
 msgid "unable to write to remote"
 msgstr "impossibile scrivere sul remoto"
 
-#: fetch-pack.c:258
+#: fetch-pack.c:257
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "--stateless-rpc richiede multi_ack_detailed"
 
-#: fetch-pack.c:360 fetch-pack.c:1284
+#: fetch-pack.c:356 fetch-pack.c:1280
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "riga shallow non valida: '%s'"
 
-#: fetch-pack.c:366 fetch-pack.c:1290
+#: fetch-pack.c:362 fetch-pack.c:1286
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "riga unshallow non valida: '%s'"
 
-#: fetch-pack.c:368 fetch-pack.c:1292
+#: fetch-pack.c:364 fetch-pack.c:1288
 #, c-format
 msgid "object not found: %s"
 msgstr "oggetto non trovato: %s"
 
-#: fetch-pack.c:371 fetch-pack.c:1295
+#: fetch-pack.c:367 fetch-pack.c:1291
 #, c-format
 msgid "error in object: %s"
 msgstr "errore nell'oggetto: %s"
 
-#: fetch-pack.c:373 fetch-pack.c:1297
+#: fetch-pack.c:369 fetch-pack.c:1293
 #, c-format
 msgid "no shallow found: %s"
 msgstr "nessuno shallow trovato: %s"
 
-#: fetch-pack.c:376 fetch-pack.c:1301
+#: fetch-pack.c:372 fetch-pack.c:1297
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "attesi shallow/unshallow, ricevuto %s"
 
-#: fetch-pack.c:417
+#: fetch-pack.c:414
 #, c-format
 msgid "got %s %d %s"
 msgstr "ricevuto %s %d %s"
 
-#: fetch-pack.c:434
+#: fetch-pack.c:431
 #, c-format
 msgid "invalid commit %s"
 msgstr "commit non valido: %s"
 
-#: fetch-pack.c:465
+#: fetch-pack.c:462
 msgid "giving up"
 msgstr "smetto di provare"
 
-#: fetch-pack.c:477 progress.c:277
+#: fetch-pack.c:475 progress.c:312
 msgid "done"
 msgstr "fatto"
 
-#: fetch-pack.c:489
+#: fetch-pack.c:487
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "ricevuto %s (%d) %s"
 
-#: fetch-pack.c:535
+#: fetch-pack.c:533
 #, c-format
 msgid "Marking %s as complete"
 msgstr "Contrassegno %s come completo"
 
-#: fetch-pack.c:744
+#: fetch-pack.c:742
 #, c-format
 msgid "already have %s (%s)"
 msgstr "ho già %s (%s)"
 
-#: fetch-pack.c:783
+#: fetch-pack.c:781
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr ""
 "fetch-pack: impossibile eseguire il fork del demultiplexer della banda "
 "laterlae"
 
-#: fetch-pack.c:791
+#: fetch-pack.c:789
 msgid "protocol error: bad pack header"
 msgstr "errore protocollo: intestazione pack non valida"
 
-#: fetch-pack.c:859
+#: fetch-pack.c:857
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack: impossibile eseguire il fork di %s"
 
-#: fetch-pack.c:875
+#: fetch-pack.c:873
 #, c-format
 msgid "%s failed"
 msgstr "%s non riuscito"
 
-#: fetch-pack.c:877
+#: fetch-pack.c:875
 msgid "error in sideband demultiplexer"
 msgstr "errore nel demultiplexer della banda laterale"
 
-#: fetch-pack.c:908
+#: fetch-pack.c:907
 #, c-format
 msgid "Server version is %.*s"
 msgstr "La versione del server è %.*s"
 
-#: fetch-pack.c:913 fetch-pack.c:919 fetch-pack.c:922 fetch-pack.c:928
-#: fetch-pack.c:932 fetch-pack.c:936 fetch-pack.c:940 fetch-pack.c:944
-#: fetch-pack.c:948 fetch-pack.c:952 fetch-pack.c:956 fetch-pack.c:960
-#: fetch-pack.c:966 fetch-pack.c:972 fetch-pack.c:977 fetch-pack.c:982
+#: fetch-pack.c:912 fetch-pack.c:918 fetch-pack.c:921 fetch-pack.c:927
+#: fetch-pack.c:931 fetch-pack.c:935 fetch-pack.c:939 fetch-pack.c:943
+#: fetch-pack.c:947 fetch-pack.c:951 fetch-pack.c:955 fetch-pack.c:959
+#: fetch-pack.c:965 fetch-pack.c:971 fetch-pack.c:976 fetch-pack.c:981
 #, c-format
 msgid "Server supports %s"
 msgstr "Il server supporta %s"
 
-#: fetch-pack.c:915
+#: fetch-pack.c:914
 msgid "Server does not support shallow clients"
 msgstr "Il server non supporta client shallow"
 
-#: fetch-pack.c:975
+#: fetch-pack.c:974
 msgid "Server does not support --shallow-since"
 msgstr "Il server non supporta --shallow-since"
 
-#: fetch-pack.c:980
+#: fetch-pack.c:979
 msgid "Server does not support --shallow-exclude"
 msgstr "Il server non supporta --shallow-exclude"
 
-#: fetch-pack.c:984
+#: fetch-pack.c:983
 msgid "Server does not support --deepen"
 msgstr "Il server non supporta --deepen"
 
-#: fetch-pack.c:1001
+#: fetch-pack.c:1000
 msgid "no common commits"
 msgstr "nessun commit in comune"
 
-#: fetch-pack.c:1013 fetch-pack.c:1462
+#: fetch-pack.c:1012 fetch-pack.c:1468
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: recupero non riuscito."
 
-#: fetch-pack.c:1151
+#: fetch-pack.c:1150
 msgid "Server does not support shallow requests"
 msgstr "Il server non supporta le richieste shallow"
 
@@ -3293,73 +3298,73 @@
 msgid "Server supports filter"
 msgstr "Il server supporta filter"
 
-#: fetch-pack.c:1184
+#: fetch-pack.c:1180
 msgid "unable to write request to remote"
 msgstr "impossibile scrivere la richiesta sul remoto"
 
-#: fetch-pack.c:1202
+#: fetch-pack.c:1198
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "errore durante la lettura dell'intestazione di sezione '%s'"
 
-#: fetch-pack.c:1208
+#: fetch-pack.c:1204
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "atteso '%s', ricevuto '%s'"
 
-#: fetch-pack.c:1247
+#: fetch-pack.c:1243
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "riga di conferma inattesa: '%s'"
 
-#: fetch-pack.c:1252
+#: fetch-pack.c:1248
 #, c-format
 msgid "error processing acks: %d"
 msgstr "errore durante l'elaborazione degli ack: %d"
 
-#: fetch-pack.c:1262
+#: fetch-pack.c:1258
 msgid "expected packfile to be sent after 'ready'"
 msgstr "ci si attendeva che il packfile fosse inviato dopo 'ready'"
 
-#: fetch-pack.c:1264
+#: fetch-pack.c:1260
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr ""
 "ci si attendeva che nessun'altra sezione fosse inviata in assenza di 'ready'"
 
-#: fetch-pack.c:1306
+#: fetch-pack.c:1302
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "errore durante l'elaborazione delle informazioni shallow: %d"
 
-#: fetch-pack.c:1353
+#: fetch-pack.c:1349
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "atteso wanted-ref, ricevuto '%s'"
 
-#: fetch-pack.c:1358
+#: fetch-pack.c:1354
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "wanted-ref inatteso: '%s'"
 
-#: fetch-pack.c:1363
+#: fetch-pack.c:1359
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "errore durante l'elaborazione dei riferimenti desiderati: %d"
 
-#: fetch-pack.c:1689
+#: fetch-pack.c:1693
 msgid "no matching remote head"
 msgstr "nessun head remoto corrispondente"
 
-#: fetch-pack.c:1712 builtin/clone.c:686
+#: fetch-pack.c:1716 builtin/clone.c:685
 msgid "remote did not send all necessary objects"
 msgstr "il remoto non ha inviato tutti gli oggetti necessari"
 
-#: fetch-pack.c:1739
+#: fetch-pack.c:1743
 #, c-format
 msgid "no such remote ref %s"
 msgstr "riferimento remoto non esistente: %s"
 
-#: fetch-pack.c:1742
+#: fetch-pack.c:1746
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "Il server non consente richieste per l'oggetto non pubblicizzato %s"
@@ -3382,18 +3387,26 @@
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr "ignoro il colore non valido '%.*s' in log.graphColors"
 
-#: grep.c:2117
+#: grep.c:668
+msgid ""
+"given pattern contains NULL byte (via -f <file>). This is only supported "
+"with -P under PCRE v2"
+msgstr ""
+"il pattern fornito (con -f <file>) contiene un byte NULL. Ciò è supportato "
+"solo con -P usando PCRE v2"
+
+#: grep.c:2124
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "'%s': impossibile leggere %s"
 
-#: grep.c:2134 setup.c:164 builtin/clone.c:409 builtin/diff.c:82
+#: grep.c:2141 setup.c:165 builtin/clone.c:408 builtin/diff.c:82
 #: builtin/rm.c:135
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "stat di '%s' non riuscito"
 
-#: grep.c:2145
+#: grep.c:2152
 #, c-format
 msgid "'%s': short read"
 msgstr "'%s': lettura troppo breve"
@@ -3536,12 +3549,12 @@
 msgid "git version [<options>]"
 msgstr "git version [<opzioni>]"
 
-#: help.c:782
+#: help.c:783
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s: %s - %s"
 
-#: help.c:786
+#: help.c:787
 msgid ""
 "\n"
 "Did you mean this?"
@@ -3616,41 +3629,58 @@
 msgid "invalid date format: %s"
 msgstr "formato data non valido: %s"
 
-#: list-objects.c:129
+#: list-objects.c:127
 #, c-format
 msgid "entry '%s' in tree %s has tree mode, but is not a tree"
 msgstr "la voce '%s' nell'albero %s ha la modalità albero, ma non è un albero"
 
-#: list-objects.c:142
+#: list-objects.c:140
 #, c-format
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr "la voce '%s' nell'albero %s ha la modalità blob, ma non è un blob"
 
-#: list-objects.c:378
+#: list-objects.c:375
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "impossibile caricare l'albero radice per il commit %s"
 
-#: list-objects-filter-options.c:36
-msgid "multiple filter-specs cannot be combined"
-msgstr "non è possibile combinare più specificatori filtro"
+#: list-objects-filter.c:492
+#, c-format
+msgid "unable to access sparse blob in '%s'"
+msgstr "impossibile accedere al blob sparse in '%s'"
+
+#: list-objects-filter.c:495
+#, c-format
+msgid "unable to parse sparse filter data in %s"
+msgstr "impossibile analizzare i dati filtro sparse in %s"
 
 #: list-objects-filter-options.c:58
 msgid "expected 'tree:<depth>'"
 msgstr "atteso 'tree:<profondità>'"
 
-#: list-objects-filter-options.c:84
+#: list-objects-filter-options.c:73
 msgid "sparse:path filters support has been dropped"
 msgstr "il supporto per i filtri sparse:percorso è stato rimosso"
 
-#: list-objects-filter-options.c:94
+#: list-objects-filter-options.c:86
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "specificatore filtro '%s' non valido"
 
-#: list-objects-filter-options.c:158
-msgid "cannot change partial clone promisor remote"
-msgstr "impossibile modificare il remoto promettente del clone parziale"
+#: list-objects-filter-options.c:102
+#, c-format
+msgid "must escape char in sub-filter-spec: '%c'"
+msgstr ""
+"è necessario eseguire l'escape del carattere nello specificatore del "
+"sottofiltro: '%c'"
+
+#: list-objects-filter-options.c:144
+msgid "expected something after combine:"
+msgstr "atteso qualcosa dopo la ricombinazione:"
+
+#: list-objects-filter-options.c:226
+msgid "multiple filter-specs cannot be combined"
+msgstr "non è possibile combinare più specificatori filtro"
 
 #: lockfile.c:151
 #, c-format
@@ -3681,119 +3711,115 @@
 msgid "failed to read the cache"
 msgstr "lettura della cache non riuscita"
 
-#: merge.c:107 rerere.c:720 builtin/am.c:1885 builtin/am.c:1919
-#: builtin/checkout.c:536 builtin/checkout.c:796 builtin/clone.c:786
+#: merge.c:107 rerere.c:720 builtin/am.c:1874 builtin/am.c:1908
+#: builtin/checkout.c:537 builtin/checkout.c:796 builtin/clone.c:785
 #: builtin/stash.c:264
 msgid "unable to write new index file"
 msgstr "impossibile scrivere il nuovo file index"
 
-#: merge-recursive.c:322
+#: merge-recursive.c:367
 msgid "(bad commit)\n"
 msgstr "(commit non valido)\n"
 
-#: merge-recursive.c:345
+#: merge-recursive.c:390
 #, c-format
 msgid "add_cacheinfo failed for path '%s'; merge aborting."
 msgstr "add_cacheinfo non riuscito per il percorso '%s'; interrompo il merge."
 
-#: merge-recursive.c:354
+#: merge-recursive.c:399
 #, c-format
 msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
 msgstr ""
 "aggiornamento add_cacheinfo non riuscito per il percorso '%s'; interrompo il "
 "merge."
 
-#: merge-recursive.c:437
-msgid "error building trees"
-msgstr "errore durante la costruzione degli alberi"
-
-#: merge-recursive.c:863
+#: merge-recursive.c:885
 #, c-format
 msgid "failed to create path '%s'%s"
 msgstr "creazione del percorso '%s' non riuscita%s"
 
-#: merge-recursive.c:874
+#: merge-recursive.c:896
 #, c-format
 msgid "Removing %s to make room for subdirectory\n"
 msgstr "Rimuovo %s per fare spazio alla sottodirectory\n"
 
-#: merge-recursive.c:888 merge-recursive.c:907
+#: merge-recursive.c:910 merge-recursive.c:929
 msgid ": perhaps a D/F conflict?"
 msgstr ": forse si tratta di un conflitto D/F?"
 
-#: merge-recursive.c:897
+#: merge-recursive.c:919
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
 msgstr "mi rifiuto di perdere un file non tracciato in '%s'"
 
-#: merge-recursive.c:938 builtin/cat-file.c:40
+#: merge-recursive.c:960 builtin/cat-file.c:41
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "impossibile leggere l'oggetto %s '%s'"
 
-#: merge-recursive.c:941
+#: merge-recursive.c:965
 #, c-format
 msgid "blob expected for %s '%s'"
 msgstr "atteso blob per %s '%s'"
 
-#: merge-recursive.c:965
+#: merge-recursive.c:990
 #, c-format
 msgid "failed to open '%s': %s"
 msgstr "apertura di '%s' non riuscita: %s"
 
-#: merge-recursive.c:976
+#: merge-recursive.c:1001
 #, c-format
 msgid "failed to symlink '%s': %s"
 msgstr "creazione del collegamento simbolico '%s' non riuscita: %s"
 
-#: merge-recursive.c:981
+#: merge-recursive.c:1006
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "non so che fare con %06o %s '%s'"
 
-#: merge-recursive.c:1177
+#: merge-recursive.c:1199
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "Merge del sottomodulo %s non riuscito (checkout non eseguito)"
 
-#: merge-recursive.c:1184
+#: merge-recursive.c:1206
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr "Merge del sottomodulo %s non riuscito (commit non presenti)"
 
-#: merge-recursive.c:1191
+#: merge-recursive.c:1213
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr ""
 "Merge del sottomodulo %s non riuscito (i commit non seguono la base del "
 "merge)"
 
-#: merge-recursive.c:1199 merge-recursive.c:1211
+#: merge-recursive.c:1221 merge-recursive.c:1233
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "Eseguo il fast forward del sottomodulo %s al seguente commit:"
 
-#: merge-recursive.c:1202 merge-recursive.c:1214
+#: merge-recursive.c:1224 merge-recursive.c:1236
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "Eseguo il fast forward del sottomodulo %s"
 
-#: merge-recursive.c:1237
+#: merge-recursive.c:1259
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 "Merge del sottomodulo %s non riuscito (merge dopo i commit non trovato)"
 
-#: merge-recursive.c:1241
+#: merge-recursive.c:1263
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "Merge del sottomodulo %s non riuscito (non fast forward)"
 
-#: merge-recursive.c:1242
+#: merge-recursive.c:1264
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr "Trovata possibile risoluzione merge per il sottomodulo:\n"
 
-#: merge-recursive.c:1245
+#: merge-recursive.c:1267
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -3810,32 +3836,32 @@
 "\n"
 "per accettare questo suggerimento.\n"
 
-#: merge-recursive.c:1254
+#: merge-recursive.c:1276
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr "Merge del sottomodulo %s non riuscito (più merge trovati)"
 
-#: merge-recursive.c:1327
+#: merge-recursive.c:1349
 msgid "Failed to execute internal merge"
 msgstr "Esecuzione del merge interno non riuscita"
 
-#: merge-recursive.c:1332
+#: merge-recursive.c:1354
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "Impossibile aggiungere %s al database"
 
-#: merge-recursive.c:1364
+#: merge-recursive.c:1386
 #, c-format
 msgid "Auto-merging %s"
 msgstr "Merge automatico di %s in corso"
 
-#: merge-recursive.c:1387
+#: merge-recursive.c:1410
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr ""
 "Errore: mi rifiuto di perdere il file non tracciato %s; scrivo invece in %s."
 
-#: merge-recursive.c:1459
+#: merge-recursive.c:1482
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -3844,7 +3870,7 @@
 "CONFLITTO (%s/eliminazione): %s eliminato in %s e %s in %s. Versione %s di "
 "%s lasciata nell'albero."
 
-#: merge-recursive.c:1464
+#: merge-recursive.c:1487
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -3853,7 +3879,7 @@
 "CONFLITTO (%s/eliminazione): %s eliminato in %s e %s come %s in %s. Versione "
 "%s di %s lasciata nell'albero."
 
-#: merge-recursive.c:1471
+#: merge-recursive.c:1494
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -3862,7 +3888,7 @@
 "CONFLITTO (%s/eliminazione): %s eliminato in %s e %s in %s. Versione %s di "
 "%s lasciata nell'albero in %s."
 
-#: merge-recursive.c:1476
+#: merge-recursive.c:1499
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -3871,43 +3897,43 @@
 "CONFLITTO (%s/eliminazione): %s eliminato in %s e %s come %s in %s. Versione "
 "%s di %s lasciata nell'albero in %s."
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1534
 msgid "rename"
 msgstr "ridenominazione"
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1534
 msgid "renamed"
 msgstr "rinominato"
 
-#: merge-recursive.c:1591 merge-recursive.c:2450 merge-recursive.c:3094
+#: merge-recursive.c:1614 merge-recursive.c:2472 merge-recursive.c:3117
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "Mi rifiuto di perdere un file sporco in %s"
 
-#: merge-recursive.c:1601
+#: merge-recursive.c:1624
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr ""
 "Mi rifiuto di perdere un file non tracciato in %s, benché sia d'ostacolo."
 
-#: merge-recursive.c:1659
+#: merge-recursive.c:1682
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 "CONFLITTO (ridenominazione/aggiunta): elemento ridenominato %s->%s in %s. %s "
 "aggiunto in %s"
 
-#: merge-recursive.c:1690
+#: merge-recursive.c:1713
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s è una directory in %s; la aggiungo come %s"
 
-#: merge-recursive.c:1695
+#: merge-recursive.c:1718
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr "Mi rifiuto di perdere un file non tracciato in %s; lo aggiungo come %s"
 
-#: merge-recursive.c:1714
+#: merge-recursive.c:1737
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -3916,18 +3942,18 @@
 "CONFLITTO (ridenominazione/ridenominazione): file ridenominato \"%s\"->\"%s"
 "\" nel branch \"%s\", ridenominato \"%s\"->\"%s\" in \"%s\"%s"
 
-#: merge-recursive.c:1719
+#: merge-recursive.c:1742
 msgid " (left unresolved)"
 msgstr " (lasciato irrisolto)"
 
-#: merge-recursive.c:1828
+#: merge-recursive.c:1851
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "CONFLITTO (ridenominazione/ridenominazione): file ridenominato %s->%s in %s. "
 "Ridenominato %s->%s in %s"
 
-#: merge-recursive.c:2035
+#: merge-recursive.c:2056
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -3938,7 +3964,7 @@
 "perché la directory %s è stata ridenominata in più directory diverse e "
 "nessuna directory di destinazione contiene la maggior parte dei file."
 
-#: merge-recursive.c:2067
+#: merge-recursive.c:2088
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -3948,7 +3974,7 @@
 "%s è d'ostacolo alle seguenti ridenominazioni directory che spostano in tale "
 "posizione i seguenti percorsi: %s."
 
-#: merge-recursive.c:2077
+#: merge-recursive.c:2098
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -3958,7 +3984,7 @@
 "un percorso in %s; delle ridenominazioni directory implicite hanno tentato "
 "di spostare in tale posizione i seguenti percorsi: %s"
 
-#: merge-recursive.c:2169
+#: merge-recursive.c:2190
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -3967,7 +3993,7 @@
 "CONFLITTO (ridenominazione/ridenominazione): directory ridenominata %s->%s "
 "in %s. Directory ridenominata %s->%s in %s"
 
-#: merge-recursive.c:2413
+#: merge-recursive.c:2435
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
@@ -3976,52 +4002,52 @@
 "ATTENZIONE: evito di applicare la ridenominazione %s -> %s a %s perché %s "
 "stesso è stato ridenominato."
 
-#: merge-recursive.c:2938
+#: merge-recursive.c:2961
 #, c-format
 msgid "cannot read object %s"
 msgstr "impossibile leggere l'oggetto %s"
 
-#: merge-recursive.c:2941
+#: merge-recursive.c:2964
 #, c-format
 msgid "object %s is not a blob"
 msgstr "l'oggetto %s non è un blob"
 
-#: merge-recursive.c:3005
+#: merge-recursive.c:3028
 msgid "modify"
 msgstr "modifica"
 
-#: merge-recursive.c:3005
+#: merge-recursive.c:3028
 msgid "modified"
 msgstr "modificato"
 
-#: merge-recursive.c:3017
+#: merge-recursive.c:3040
 msgid "content"
 msgstr "contenuto"
 
-#: merge-recursive.c:3021
+#: merge-recursive.c:3044
 msgid "add/add"
 msgstr "aggiunta/aggiunta"
 
-#: merge-recursive.c:3044
+#: merge-recursive.c:3067
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "Omesso %s (elemento sottoposto a merge uguale a quello esistente)"
 
-#: merge-recursive.c:3066 git-submodule.sh:937
+#: merge-recursive.c:3089 git-submodule.sh:937
 msgid "submodule"
 msgstr "sottomodulo"
 
-#: merge-recursive.c:3067
+#: merge-recursive.c:3090
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "CONFLITTO (%s): conflitto di merge in %s"
 
-#: merge-recursive.c:3097
+#: merge-recursive.c:3120
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Lo aggiungo come %s"
 
-#: merge-recursive.c:3179
+#: merge-recursive.c:3203
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
@@ -4030,7 +4056,7 @@
 "Percorso aggiornato: %s aggiunto in %s in una directory ridenominata in %s; "
 "lo sposto in %s."
 
-#: merge-recursive.c:3182
+#: merge-recursive.c:3206
 #, c-format
 msgid ""
 "CONFLICT (file location): %s added in %s inside a directory that was renamed "
@@ -4039,7 +4065,7 @@
 "CONFLITTO (posizione file): %s aggiunto in %s in una directory ridenominata "
 "in %s, il che suggerisce che forse dovrebbe essere spostato in %s."
 
-#: merge-recursive.c:3186
+#: merge-recursive.c:3210
 #, c-format
 msgid ""
 "Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
@@ -4048,7 +4074,7 @@
 "Percorso aggiornato: %s ridenominato in %s in %s in una directory "
 "ridenominata in %s; lo sposto in %s."
 
-#: merge-recursive.c:3189
+#: merge-recursive.c:3213
 #, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
@@ -4058,37 +4084,61 @@
 "ridenominata in %s, il che suggerisce che forse dovrebbe essere spostato in "
 "%s."
 
-#: merge-recursive.c:3303
+#: merge-recursive.c:3327
 #, c-format
 msgid "Removing %s"
 msgstr "Rimozione di %s"
 
-#: merge-recursive.c:3326
+#: merge-recursive.c:3350
 msgid "file/directory"
 msgstr "file/directory"
 
-#: merge-recursive.c:3331
+#: merge-recursive.c:3355
 msgid "directory/file"
 msgstr "directory/file"
 
-#: merge-recursive.c:3338
+#: merge-recursive.c:3362
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
 "CONFLITTO (%s): una directory denominata %s esiste già in %s. Aggiungo %s "
 "come %s"
 
-#: merge-recursive.c:3347
+#: merge-recursive.c:3371
 #, c-format
 msgid "Adding %s"
 msgstr "Aggiunta %s"
 
-#: merge-recursive.c:3356
+#: merge-recursive.c:3380
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "CONFLITTO (aggiungi/aggiungi): conflitto di merge in %s"
 
-#: merge-recursive.c:3394
+#: merge-recursive.c:3424
+msgid "Already up to date!"
+msgstr "Già aggiornato!"
+
+#: merge-recursive.c:3433
+#, c-format
+msgid "merging of trees %s and %s failed"
+msgstr "merge degli alberi %s e %s non riuscito"
+
+#: merge-recursive.c:3537
+msgid "Merging:"
+msgstr "Merge in corso:"
+
+#: merge-recursive.c:3550
+#, c-format
+msgid "found %u common ancestor:"
+msgid_plural "found %u common ancestors:"
+msgstr[0] "trovato %u antenato comune:"
+msgstr[1] "trovati %u antenati comuni:"
+
+#: merge-recursive.c:3600
+msgid "merge returned no commit"
+msgstr "il merge non ha restituito alcun commit"
+
+#: merge-recursive.c:3659
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -4097,189 +4147,165 @@
 "Le tue modifiche locali ai seguenti file sarebbero sovrascritte dal merge:\n"
 "  %s"
 
-#: merge-recursive.c:3405
-msgid "Already up to date!"
-msgstr "Già aggiornato!"
-
-#: merge-recursive.c:3414
-#, c-format
-msgid "merging of trees %s and %s failed"
-msgstr "merge degli alberi %s e %s non riuscito"
-
-#: merge-recursive.c:3513
-msgid "Merging:"
-msgstr "Merge in corso:"
-
-#: merge-recursive.c:3526
-#, c-format
-msgid "found %u common ancestor:"
-msgid_plural "found %u common ancestors:"
-msgstr[0] "trovato %u antenato comune:"
-msgstr[1] "trovati %u antenati comuni:"
-
-#: merge-recursive.c:3565
-msgid "merge returned no commit"
-msgstr "il merge non ha restituito alcun commit"
-
-#: merge-recursive.c:3631
+#: merge-recursive.c:3756
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "Impossibile analizzare l'oggetto '%s'"
 
-#: merge-recursive.c:3647 builtin/merge.c:698 builtin/merge.c:869
+#: merge-recursive.c:3774 builtin/merge.c:694 builtin/merge.c:874
 msgid "Unable to write index."
 msgstr "Impossibile scrivere l'indice."
 
-#: midx.c:69
+#: midx.c:68
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "il file multi-pack-index %s è troppo piccolo"
 
-#: midx.c:85
+#: midx.c:84
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr "la firma del multi-pack-index 0x%08x non corrisponde alla firma 0x%08x"
 
-#: midx.c:90
+#: midx.c:89
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "versione %d multi-pack-index non riconosciuta"
 
-#: midx.c:95
+#: midx.c:94
 #, c-format
 msgid "hash version %u does not match"
 msgstr "la versione dell'hash %u non corrisponde"
 
-#: midx.c:109
+#: midx.c:108
 msgid "invalid chunk offset (too large)"
 msgstr "offset blocco non valido (troppo grande)"
 
-#: midx.c:133
+#: midx.c:132
 msgid "terminating multi-pack-index chunk id appears earlier than expected"
 msgstr "l'ID blocco finale multi-pack-index compare prima di quanto previsto"
 
-#: midx.c:146
+#: midx.c:145
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "dal multi-pack-index manca il blocco richiesto pack-name"
 
-#: midx.c:148
+#: midx.c:147
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "dal multi-pack-index manca il blocco richiesto fanout OID"
 
-#: midx.c:150
+#: midx.c:149
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "dal multi-pack-index manca il blocco richiesto lookup OID"
 
-#: midx.c:152
+#: midx.c:151
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "dal multi-pack-index manca il blocco richiesto offset oggetti"
 
-#: midx.c:166
+#: midx.c:165
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr "nomi pack multi-pack-index in disordine: '%s' appare prima di '%s'"
 
-#: midx.c:211
+#: midx.c:210
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "pack-int-id non valido: %u (%u pack totali)"
 
-#: midx.c:261
+#: midx.c:260
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr ""
 "nel multi-pack-index è salvato un offset a 64 bit, ma off_t è troppo piccolo"
 
-#: midx.c:289
+#: midx.c:288
 msgid "error preparing packfile from multi-pack-index"
 msgstr "errore durante la preparazione del packfile dal multi-pack-index"
 
-#: midx.c:470
+#: midx.c:469
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "aggiunta del packfile '%s' non riuscita"
 
-#: midx.c:476
+#: midx.c:475
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "apertura del pack-index '%s' non riuscita"
 
-#: midx.c:536
+#: midx.c:535
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "ricerca dell'oggetto %d nel packfile non riuscita"
 
-#: midx.c:865
+#: midx.c:864
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "non ho visto il file pack %s da scartare"
 
-#: midx.c:1036
+#: midx.c:1035
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "pulizia del multi-pack-index %s non riuscita"
 
-#: midx.c:1091
+#: midx.c:1090
 msgid "Looking for referenced packfiles"
 msgstr "Ricerca di file pack referenziati in corso"
 
-#: midx.c:1106
+#: midx.c:1105
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr ""
 "fanout oid in disordine: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 
-#: midx.c:1110
+#: midx.c:1109
 msgid "Verifying OID order in MIDX"
 msgstr "Verifica ordine OID in MIDX in corso"
 
-#: midx.c:1119
+#: midx.c:1118
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "lookup oid in disordine: oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1138
+#: midx.c:1137
 msgid "Sorting objects by packfile"
 msgstr "Ordinamento degli oggetti nel packfile in corso"
 
-#: midx.c:1144
+#: midx.c:1143
 msgid "Verifying object offsets"
 msgstr "Verifica offset oggetti in corso"
 
-#: midx.c:1160
+#: midx.c:1159
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "caricamento voce pack per oid[%d] = %s non riuscito"
 
-#: midx.c:1166
+#: midx.c:1165
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "caricamento pack-index per il packfile %s non riuscito"
 
-#: midx.c:1175
+#: midx.c:1174
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "offset oggetto non corretto per oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 
-#: midx.c:1350
+#: midx.c:1349
 msgid "could not start pack-objects"
 msgstr "impossibile avviare pack-objects"
 
-#: midx.c:1369
+#: midx.c:1368
 msgid "could not finish pack-objects"
 msgstr "impossibile finire pack-objects"
 
-#: name-hash.c:532
+#: name-hash.c:537
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
 msgstr "impossibile creare il thread lazy_dir: %s"
 
-#: name-hash.c:554
+#: name-hash.c:559
 #, c-format
 msgid "unable to create lazy_name thread: %s"
 msgstr "impossibile creare il thread lazy_name: %s"
 
-#: name-hash.c:560
+#: name-hash.c:565
 #, c-format
 msgid "unable to join lazy_name thread: %s"
 msgstr "impossibile bloccare il thread lazy_name: %s"
@@ -4326,42 +4352,42 @@
 msgid "Bad %s value: '%s'"
 msgstr "Valore di %s errato: '%s'"
 
-#: object.c:54
+#: object.c:53
 #, c-format
 msgid "invalid object type \"%s\""
 msgstr "tipo oggetto \"%s\" non valido"
 
-#: object.c:174
+#: object.c:173
 #, c-format
 msgid "object %s is a %s, not a %s"
 msgstr "l'oggetto %s è un %s, non un %s"
 
-#: object.c:234
+#: object.c:233
 #, c-format
 msgid "object %s has unknown type id %d"
 msgstr "l'oggetto %s ha l'ID tipo sconosciuto %d"
 
-#: object.c:247
+#: object.c:246
 #, c-format
 msgid "unable to parse object: %s"
 msgstr "impossibile analizzare l'oggetto: %s"
 
-#: object.c:267 object.c:278
+#: object.c:266 object.c:277
 #, c-format
 msgid "hash mismatch %s"
 msgstr "hash non corrispondente: %s"
 
-#: packfile.c:648
+#: packfile.c:641
 msgid "offset before end of packfile (broken .idx?)"
 msgstr "offset collocato prima della fine del packfile (.idx corrotto?)"
 
-#: packfile.c:1899
+#: packfile.c:1887
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr ""
 "offset collocato prima dell'inizio dell'indice pack per %s (indice corrotto?)"
 
-#: packfile.c:1903
+#: packfile.c:1891
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr ""
@@ -4408,26 +4434,26 @@
 msgid "did you mean `--%s` (with two dashes ?)"
 msgstr "forse intendevi `--%s` (con due trattini)?"
 
-#: parse-options.c:859
+#: parse-options.c:860
 #, c-format
 msgid "unknown option `%s'"
 msgstr "opzione sconosciuta `%s'"
 
-#: parse-options.c:861
+#: parse-options.c:862
 #, c-format
 msgid "unknown switch `%c'"
 msgstr "opzione `%c` sconosciuta"
 
-#: parse-options.c:863
+#: parse-options.c:864
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr "opzione non ASCII sconosciuta presente nella stringa: `%s'"
 
-#: parse-options.c:887
+#: parse-options.c:888
 msgid "..."
 msgstr "..."
 
-#: parse-options.c:906
+#: parse-options.c:907
 #, c-format
 msgid "usage: %s"
 msgstr "uso: %s"
@@ -4435,21 +4461,21 @@
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
 #.
-#: parse-options.c:912
+#: parse-options.c:913
 #, c-format
 msgid "   or: %s"
 msgstr "  oppure: %s"
 
-#: parse-options.c:915
+#: parse-options.c:916
 #, c-format
 msgid "    %s"
 msgstr "    %s"
 
-#: parse-options.c:954
+#: parse-options.c:955
 msgid "-NUM"
 msgstr "-NUM"
 
-#: parse-options.c:968
+#: parse-options.c:969
 #, c-format
 msgid "alias of --%s"
 msgstr "alias di --%s"
@@ -4623,29 +4649,38 @@
 msgid "unable to parse --pretty format"
 msgstr "impossibile analizzare il formato --pretty"
 
-#: range-diff.c:70
+#: promisor-remote.c:25
+msgid "Remote with no URL"
+msgstr "Remoto senza URL"
+
+#: promisor-remote.c:61
+#, c-format
+msgid "promisor remote name cannot begin with '/': %s"
+msgstr "il nome del remoto promettente non può iniziare con '/': %s"
+
+#: range-diff.c:71
 msgid "could not start `log`"
 msgstr "impossibile avviare `log`"
 
-#: range-diff.c:72
+#: range-diff.c:73
 msgid "could not read `log` output"
 msgstr "impossibile leggere l'output di `log`"
 
-#: range-diff.c:91 sequencer.c:5021
+#: range-diff.c:92 sequencer.c:4985
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "impossibile analizzare il commit '%s'"
 
-#: range-diff.c:117
+#: range-diff.c:118
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "impossibile analizzare l'header Git '%.*s'"
 
-#: range-diff.c:274
+#: range-diff.c:275
 msgid "failed to generate diff"
 msgstr "generazione del diff non riuscita"
 
-#: range-diff.c:506 range-diff.c:508
+#: range-diff.c:507 range-diff.c:509
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "impossibile analizzare il registro di '%s'"
@@ -4691,11 +4726,11 @@
 msgid "'%s' appears as both a file and as a directory"
 msgstr "'%s' compare sia come file sia come directory"
 
-#: read-cache.c:1499
+#: read-cache.c:1520
 msgid "Refresh index"
 msgstr "Aggiornamento indice"
 
-#: read-cache.c:1613
+#: read-cache.c:1635
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -4704,7 +4739,7 @@
 "index.version impostato, ma il valore non è valido.\n"
 "Uso la versione %i"
 
-#: read-cache.c:1623
+#: read-cache.c:1645
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -4713,138 +4748,138 @@
 "GIT_INDEX_VERSION impostato, ma il valore non è valido.\n"
 "Uso la versione %i"
 
-#: read-cache.c:1679
+#: read-cache.c:1701
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "firma non valida: 0x%08x"
 
-#: read-cache.c:1682
+#: read-cache.c:1704
 #, c-format
 msgid "bad index version %d"
 msgstr "versione indice non valida: %d"
 
-#: read-cache.c:1691
+#: read-cache.c:1713
 msgid "bad index file sha1 signature"
 msgstr "firma SHA1 file indice non valida"
 
-#: read-cache.c:1721
+#: read-cache.c:1743
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "l'indice usa l'estensione %.4s che non comprendiamo"
 
-#: read-cache.c:1723
+#: read-cache.c:1745
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "estensione %.4s ignorata"
 
-#: read-cache.c:1760
+#: read-cache.c:1782
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "formato voce indice sconosciuto: 0x%08x"
 
-#: read-cache.c:1776
+#: read-cache.c:1798
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "campo nome malformato nell'indice, vicino al percorso '%s'"
 
-#: read-cache.c:1833
+#: read-cache.c:1855
 msgid "unordered stage entries in index"
 msgstr "voci stage non ordinate nell'indice"
 
-#: read-cache.c:1836
+#: read-cache.c:1858
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "voci stage multiple per il file sottoposto a merge '%s'"
 
-#: read-cache.c:1839
+#: read-cache.c:1861
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "voci stage non ordinate per '%s'"
 
-#: read-cache.c:1946 read-cache.c:2234 rerere.c:565 rerere.c:599 rerere.c:1111
-#: builtin/add.c:460 builtin/check-ignore.c:178 builtin/checkout.c:467
-#: builtin/checkout.c:651 builtin/clean.c:956 builtin/commit.c:347
+#: read-cache.c:1967 read-cache.c:2255 rerere.c:565 rerere.c:599 rerere.c:1111
+#: builtin/add.c:460 builtin/check-ignore.c:178 builtin/checkout.c:468
+#: builtin/checkout.c:652 builtin/clean.c:967 builtin/commit.c:347
 #: builtin/diff-tree.c:120 builtin/grep.c:499 builtin/mv.c:145
 #: builtin/reset.c:245 builtin/rm.c:271 builtin/submodule--helper.c:330
 msgid "index file corrupt"
 msgstr "file indice corrotto"
 
-#: read-cache.c:2087
+#: read-cache.c:2108
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "impossibile creare il thread load_cache_entries: %s"
 
-#: read-cache.c:2100
+#: read-cache.c:2121
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "impossibile bloccare il thread load_cache_entries: %s"
 
-#: read-cache.c:2133
+#: read-cache.c:2154
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s: apertura del file indice non riuscita"
 
-#: read-cache.c:2137
+#: read-cache.c:2158
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s: impossibile eseguire stat sull'indice aperto"
 
-#: read-cache.c:2141
+#: read-cache.c:2162
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s: file indice più piccolo della dimensione attesa"
 
-#: read-cache.c:2145
+#: read-cache.c:2166
 #, c-format
 msgid "%s: unable to map index file"
 msgstr "%s: impossibile mappare il file indice"
 
-#: read-cache.c:2187
+#: read-cache.c:2208
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "impossibile creare il thread load_index_extensions: %s"
 
-#: read-cache.c:2214
+#: read-cache.c:2235
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "impossibile bloccare il thread load_index_extensions: %s"
 
-#: read-cache.c:2246
+#: read-cache.c:2267
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "impossibile aggiornare l'indice condiviso '%s'"
 
-#: read-cache.c:2293
+#: read-cache.c:2314
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "indice corrotto, atteso %s in %s, presente %s"
 
-#: read-cache.c:2989 wrapper.c:658 builtin/merge.c:1114
+#: read-cache.c:3010 wrapper.c:622 builtin/merge.c:1119
 #, c-format
 msgid "could not close '%s'"
 msgstr "impossibile chiudere '%s'"
 
-#: read-cache.c:3092 sequencer.c:2358 sequencer.c:3928
+#: read-cache.c:3113 sequencer.c:2296 sequencer.c:3917
 #, c-format
 msgid "could not stat '%s'"
 msgstr "impossibile eseguire lo stat di '%s'"
 
-#: read-cache.c:3105
+#: read-cache.c:3126
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "impossibile aprire la directory git: %s"
 
-#: read-cache.c:3117
+#: read-cache.c:3138
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "impossibile eseguire unlink: %s"
 
-#: read-cache.c:3142
+#: read-cache.c:3163
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "impossibile correggere i permessi di '%s'"
 
-#: read-cache.c:3291
+#: read-cache.c:3312
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s: impossibile ripiegare sullo stadio 0"
@@ -4954,8 +4989,8 @@
 msgid "Note that empty commits are commented out"
 msgstr "Nota che i commit vuoti sono commentati"
 
-#: rebase-interactive.c:105 rerere.c:485 rerere.c:692 sequencer.c:3447
-#: sequencer.c:3473 sequencer.c:5120 builtin/fsck.c:356 builtin/rebase.c:235
+#: rebase-interactive.c:105 rerere.c:485 rerere.c:692 sequencer.c:3388
+#: sequencer.c:3414 sequencer.c:5084 builtin/fsck.c:356 builtin/rebase.c:235
 #, c-format
 msgid "could not write '%s'"
 msgstr "impossibile scrivere '%s'"
@@ -5003,7 +5038,7 @@
 msgid "ignoring dangling symref %s"
 msgstr "ignoro il riferimento simbolico pendente %s"
 
-#: refs.c:669 ref-filter.c:2092
+#: refs.c:669 ref-filter.c:2098
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "ignoro il riferimento rotto %s"
@@ -5028,14 +5063,14 @@
 msgid "unexpected object ID when writing '%s'"
 msgstr "ID oggetto inatteso durante la scrittura di '%s'"
 
-#: refs.c:833 sequencer.c:403 sequencer.c:2709 sequencer.c:2913
-#: sequencer.c:2927 sequencer.c:3184 sequencer.c:5037 wrapper.c:656
+#: refs.c:833 sequencer.c:403 sequencer.c:2647 sequencer.c:2851
+#: sequencer.c:2865 sequencer.c:3122 sequencer.c:5001 wrapper.c:620
 #, c-format
 msgid "could not write to '%s'"
 msgstr "impossibile scrivere su '%s'"
 
-#: refs.c:860 wrapper.c:225 wrapper.c:395 builtin/am.c:715
-#: builtin/rebase.c:1003
+#: refs.c:860 wrapper.c:188 wrapper.c:358 builtin/am.c:714
+#: builtin/rebase.c:1004
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "impossibile aprire '%s' in scrittura"
@@ -5070,21 +5105,21 @@
 msgid "update_ref failed for ref '%s': %s"
 msgstr "update_ref per il riferimento '%s' non riuscita: %s"
 
-#: refs.c:2012
+#: refs.c:2023
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "aggiornamenti multipli per il riferimento '%s' non consentiti"
 
-#: refs.c:2044
+#: refs.c:2055
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "aggiornamenti riferimento vietati nell'ambiente quarantena"
 
-#: refs.c:2140 refs.c:2170
+#: refs.c:2151 refs.c:2181
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "'%s' esiste già; impossibile creare '%s'"
 
-#: refs.c:2146 refs.c:2181
+#: refs.c:2157 refs.c:2192
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "impossibile gestire '%s' e '%s' contemporaneamente"
@@ -5094,13 +5129,13 @@
 msgid "could not remove reference %s"
 msgstr "impossibile rimuovere il riferimento %s"
 
-#: refs/files-backend.c:1248 refs/packed-backend.c:1532
-#: refs/packed-backend.c:1542
+#: refs/files-backend.c:1248 refs/packed-backend.c:1541
+#: refs/packed-backend.c:1551
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr "impossibile eliminare il riferimento %s: %s"
 
-#: refs/files-backend.c:1251 refs/packed-backend.c:1545
+#: refs/files-backend.c:1251 refs/packed-backend.c:1554
 #, c-format
 msgid "could not delete references: %s"
 msgstr "impossibile eliminare i riferimenti: %s"
@@ -5110,7 +5145,7 @@
 msgid "invalid refspec '%s'"
 msgstr "specificatore riferimento '%s' non valido"
 
-#: ref-filter.c:42 wt-status.c:1934
+#: ref-filter.c:42 wt-status.c:1938
 msgid "gone"
 msgstr "sparito"
 
@@ -5129,122 +5164,122 @@
 msgid "ahead %d, behind %d"
 msgstr "dopo %d, prima di %d"
 
-#: ref-filter.c:162
+#: ref-filter.c:165
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr "formato atteso: %%(color:<colore>)"
 
-#: ref-filter.c:164
+#: ref-filter.c:167
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr "colore non riconosciuto: %%(color:%s)"
 
-#: ref-filter.c:186
+#: ref-filter.c:189
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr "Atteso valore intero: refname:lstrip=%s"
 
-#: ref-filter.c:190
+#: ref-filter.c:193
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr "Atteso valore intero: refname:rstrip=%s"
 
-#: ref-filter.c:192
+#: ref-filter.c:195
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr "argomento %%(%s) non riconosciuto: %s"
 
-#: ref-filter.c:247
+#: ref-filter.c:250
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr "%%(objecttype) non accetta argomenti"
 
-#: ref-filter.c:269
+#: ref-filter.c:272
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr "argomento %%(objectsize) non riconosciuto: %s"
 
-#: ref-filter.c:277
+#: ref-filter.c:280
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr "%%(deltabase) non accetta argomenti"
 
-#: ref-filter.c:289
+#: ref-filter.c:292
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr "%%(body) non accetta argomenti"
 
-#: ref-filter.c:298
+#: ref-filter.c:301
 #, c-format
 msgid "%%(subject) does not take arguments"
 msgstr "%%(subject) non accetta argomenti"
 
-#: ref-filter.c:320
+#: ref-filter.c:323
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr "argomento %%(trailers) sconosciuto: %s"
 
-#: ref-filter.c:349
+#: ref-filter.c:352
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr "atteso valore positivo in contents:lines=%s"
 
-#: ref-filter.c:351
+#: ref-filter.c:354
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr "argomento %%(contents) non riconosciuto: %s"
 
-#: ref-filter.c:366
+#: ref-filter.c:369
 #, c-format
 msgid "positive value expected objectname:short=%s"
 msgstr "atteso valore positivo in objectname:short=%s"
 
-#: ref-filter.c:370
+#: ref-filter.c:373
 #, c-format
 msgid "unrecognized %%(objectname) argument: %s"
 msgstr "argomento %%(objectname) non riconosciuto: %s"
 
-#: ref-filter.c:400
+#: ref-filter.c:403
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr "formato atteso: %%(align:<ampiezza>,<posizione>)"
 
-#: ref-filter.c:412
+#: ref-filter.c:415
 #, c-format
 msgid "unrecognized position:%s"
 msgstr "valore non riconosciuto: position:%s"
 
-#: ref-filter.c:419
+#: ref-filter.c:422
 #, c-format
 msgid "unrecognized width:%s"
 msgstr "valore non riconosciuto: width:%s"
 
-#: ref-filter.c:428
+#: ref-filter.c:431
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr "argomento %%(align) non riconosciuto: %s"
 
-#: ref-filter.c:436
+#: ref-filter.c:439
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr "attesa ampiezza positiva con l'atom %%(align)"
 
-#: ref-filter.c:454
+#: ref-filter.c:457
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr "argomento %%(if) non riconosciuto: %s"
 
-#: ref-filter.c:556
+#: ref-filter.c:559
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "nome campo malformato: %.*s"
 
-#: ref-filter.c:583
+#: ref-filter.c:586
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "nome campo sconosciuto: %.*s"
 
-#: ref-filter.c:587
+#: ref-filter.c:590
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
@@ -5252,160 +5287,160 @@
 "non è un repository git, ma il campo '%.*s' richiede l'accesso ai dati "
 "oggetto"
 
-#: ref-filter.c:711
+#: ref-filter.c:714
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr "formato: atomo %%(if) usato senza un atomo %%(then)"
 
-#: ref-filter.c:774
+#: ref-filter.c:777
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr "formato: atomo %%(then) usato senza un atomo %%(if)"
 
-#: ref-filter.c:776
+#: ref-filter.c:779
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr "formato: atomo %%(then) usato più di una volta"
 
-#: ref-filter.c:778
+#: ref-filter.c:781
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "formato: atomo %%(then) usato dopo %%(else)"
 
-#: ref-filter.c:806
+#: ref-filter.c:809
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr "formato: atomo %%(else) usato senza un atomo %%(if)"
 
-#: ref-filter.c:808
+#: ref-filter.c:811
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr "formato: atomo %%(else) usato senza un atomo %%(then)"
 
-#: ref-filter.c:810
+#: ref-filter.c:813
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr "formato: atomo %%(else) usato più di una volta"
 
-#: ref-filter.c:825
+#: ref-filter.c:828
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr "formato: atomo %%(end) usato senza l'atomo corrispondente"
 
-#: ref-filter.c:882
+#: ref-filter.c:885
 #, c-format
 msgid "malformed format string %s"
 msgstr "stringa di formato %s malformata"
 
-#: ref-filter.c:1485
+#: ref-filter.c:1488
 #, c-format
 msgid "no branch, rebasing %s"
 msgstr "nessun branch, eseguo il rebase di %s"
 
-#: ref-filter.c:1488
+#: ref-filter.c:1491
 #, c-format
 msgid "no branch, rebasing detached HEAD %s"
 msgstr "nessun branch, eseguo il rebase dell'HEAD scollegato %s"
 
-#: ref-filter.c:1491
+#: ref-filter.c:1494
 #, c-format
 msgid "no branch, bisect started on %s"
 msgstr "nessun branch, bisezione avviata su %s"
 
-#: ref-filter.c:1501
+#: ref-filter.c:1504
 msgid "no branch"
 msgstr "nessun branch"
 
-#: ref-filter.c:1537 ref-filter.c:1743
+#: ref-filter.c:1540 ref-filter.c:1749
 #, c-format
 msgid "missing object %s for %s"
 msgstr "oggetto %s mancante per %s"
 
-#: ref-filter.c:1547
+#: ref-filter.c:1550
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "parse_object_buffer non riuscito su %s per %s"
 
-#: ref-filter.c:1998
+#: ref-filter.c:2004
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "oggetto malformato in '%s'"
 
-#: ref-filter.c:2087
+#: ref-filter.c:2093
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "ignoro il riferimento con il nome malformato %s"
 
-#: ref-filter.c:2382
+#: ref-filter.c:2389
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "formato: atomo %%(end) mancante"
 
-#: ref-filter.c:2482
+#: ref-filter.c:2489
 #, c-format
 msgid "option `%s' is incompatible with --merged"
 msgstr "l'opzione `%s' non è compatibile con --merged"
 
-#: ref-filter.c:2485
+#: ref-filter.c:2492
 #, c-format
 msgid "option `%s' is incompatible with --no-merged"
 msgstr "l'opzione `%s' non è compatibile con --no-merged"
 
-#: ref-filter.c:2495
+#: ref-filter.c:2502
 #, c-format
 msgid "malformed object name %s"
 msgstr "nome dell'oggetto %s malformato"
 
-#: ref-filter.c:2500
+#: ref-filter.c:2507
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "l'opzione `%s' deve puntare ad un commit"
 
-#: remote.c:363
+#: remote.c:366
 #, c-format
 msgid "config remote shorthand cannot begin with '/': %s"
 msgstr ""
 "la forma breve della configurazione del remoto non può iniziare con '/': %s"
 
-#: remote.c:410
+#: remote.c:413
 msgid "more than one receivepack given, using the first"
 msgstr "è stata specificata più di una direttiva receivepack, uso la prima"
 
-#: remote.c:418
+#: remote.c:421
 msgid "more than one uploadpack given, using the first"
 msgstr "è stata specificata più di una direttiva uploadpack, uso la prima"
 
-#: remote.c:608
+#: remote.c:611
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
 msgstr "Impossibile recuperare sia %s sia %s in %s"
 
-#: remote.c:612
+#: remote.c:615
 #, c-format
 msgid "%s usually tracks %s, not %s"
 msgstr "%s solitamente traccia %s, non %s"
 
-#: remote.c:616
+#: remote.c:619
 #, c-format
 msgid "%s tracks both %s and %s"
 msgstr "%s traccia sia %s sia %s"
 
-#: remote.c:684
+#: remote.c:687
 #, c-format
 msgid "key '%s' of pattern had no '*'"
 msgstr "la chiave '%s' del pattern non aveva un '*'"
 
-#: remote.c:694
+#: remote.c:697
 #, c-format
 msgid "value '%s' of pattern has no '*'"
 msgstr "il valore '%s' del pattern non ha un '*'"
 
-#: remote.c:1000
+#: remote.c:1003
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "nessuna corrispondenza per lo specificatore riferimento sorgente %s"
 
-#: remote.c:1005
+#: remote.c:1008
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr ""
@@ -5416,7 +5451,7 @@
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1020
+#: remote.c:1023
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -5442,7 +5477,7 @@
 "Nessuna delle due opzioni ha funzionato, quindi ci siamo arresi.\n"
 "Devi specificare un riferimento completamente qualificato."
 
-#: remote.c:1040
+#: remote.c:1043
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -5453,7 +5488,7 @@
 "è un oggetto tag. Forse intendevi creare un nuovo\n"
 "branch eseguendo il push a '%s:refs/heads/%s'?"
 
-#: remote.c:1045
+#: remote.c:1048
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -5464,7 +5499,7 @@
 "è un oggetto tag. Forse intendevi creare un nuovo\n"
 "branch eseguendo il push a '%s:refs/tags/%s'?"
 
-#: remote.c:1050
+#: remote.c:1053
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -5476,7 +5511,7 @@
 "tag a un nuovo albero eseguendo il push a\n"
 "'%s:refs/tags/%s'?"
 
-#: remote.c:1055
+#: remote.c:1058
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -5488,121 +5523,121 @@
 "tag a un nuovo blob eseguendo il push a\n"
 "'%s:refs/tags/%s'?"
 
-#: remote.c:1091
+#: remote.c:1094
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "%s non può essere risolto in un branch"
 
-#: remote.c:1102
+#: remote.c:1105
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "impossibile eliminare '%s': il riferimento remoto non esiste"
 
-#: remote.c:1114
+#: remote.c:1117
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr ""
 "sono state trovate più corrispondenze per lo specificatore riferimento "
 "destinazione %s"
 
-#: remote.c:1121
+#: remote.c:1124
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr ""
 "lo specificatore riferimento destinazione %s riceve dati da più di una "
 "sorgente"
 
-#: remote.c:1624 remote.c:1725
+#: remote.c:1627 remote.c:1728
 msgid "HEAD does not point to a branch"
 msgstr "HEAD non punta ad un branch"
 
-#: remote.c:1633
+#: remote.c:1636
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "branch '%s' non esistente"
 
-#: remote.c:1636
+#: remote.c:1639
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "nessun upstream configurato per il branch '%s'"
 
-#: remote.c:1642
+#: remote.c:1645
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr ""
 "branch upstream '%s' non memorizzato come branch che ne traccia uno remoto"
 
-#: remote.c:1657
+#: remote.c:1660
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr ""
 "la destinazione del push '%s' sul remoto '%s' non ha un branch locale che la "
 "traccia"
 
-#: remote.c:1669
+#: remote.c:1672
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "il branch '%s' non ha un remoto per il push"
 
-#: remote.c:1679
+#: remote.c:1682
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "gli specificatori riferimento per '%s' non includono '%s'"
 
-#: remote.c:1692
+#: remote.c:1695
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "il push non ha una destinazione (push.default è 'nothing')"
 
-#: remote.c:1714
+#: remote.c:1717
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "impossibile risolvere il push 'simple' a una singola destinazione"
 
-#: remote.c:1840
+#: remote.c:1843
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "impossibile trovare il riferimento remoto %s"
 
-#: remote.c:1853
+#: remote.c:1856
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* Ignoro localmente il riferimento strano '%s'"
 
-#: remote.c:2016
+#: remote.c:2019
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "Il tuo branch è basato su '%s', ma l'upstream è scomparso.\n"
 
-#: remote.c:2020
+#: remote.c:2023
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (usa \"git branch --unset-upstream\" per correggere la situazione)\n"
 
-#: remote.c:2023
+#: remote.c:2026
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Il tuo branch è aggiornato rispetto a '%s'.\n"
 
-#: remote.c:2027
+#: remote.c:2030
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Il tuo branch e '%s' fanno riferimento a commit differenti.\n"
 
-#: remote.c:2030
+#: remote.c:2033
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (usa \"%s\" per visualizzare i dettagli)\n"
 
-#: remote.c:2034
+#: remote.c:2037
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "Il tuo branch è avanti rispetto a '%s' di %d commit.\n"
 msgstr[1] "Il tuo branch è avanti rispetto a '%s' di %d commit.\n"
 
-#: remote.c:2040
+#: remote.c:2043
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (usa \"git push\" per pubblicare i tuoi commit locali)\n"
 
-#: remote.c:2043
+#: remote.c:2046
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -5614,11 +5649,11 @@
 "Il tuo branch, rispetto a '%s', è indietro di %d commit e ne posso eseguire "
 "il fast forward.\n"
 
-#: remote.c:2051
+#: remote.c:2054
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (usa \"git pull\" per aggiornare il tuo branch locale)\n"
 
-#: remote.c:2054
+#: remote.c:2057
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -5633,11 +5668,11 @@
 "Il tuo branch e '%s' sono diventati divergenti\n"
 "e hanno rispettivamente %d e %d commit differenti.\n"
 
-#: remote.c:2064
+#: remote.c:2067
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (usa \"git pull\" per eseguire il merge del branch remoto nel tuo)\n"
 
-#: remote.c:2247
+#: remote.c:2250
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "impossibile analizzare il nome oggetto atteso '%s'"
@@ -5715,7 +5750,7 @@
 msgid "Recorded preimage for '%s'"
 msgstr "Salvata preimmagine di '%s'"
 
-#: rerere.c:881 submodule.c:2023 builtin/log.c:1773
+#: rerere.c:881 submodule.c:2023 builtin/log.c:1790
 #: builtin/submodule--helper.c:1418 builtin/submodule--helper.c:1428
 #, c-format
 msgid "could not create directory '%s'"
@@ -5750,20 +5785,20 @@
 msgid "unable to open rr-cache directory"
 msgstr "impossibile aprire la directory cache rr"
 
-#: revision.c:2507
+#: revision.c:2509
 msgid "your current branch appears to be broken"
 msgstr "sembra che il tuo branch corrente sia rotto"
 
-#: revision.c:2510
+#: revision.c:2512
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "il tuo branch corrente '%s' non ha ancora commit"
 
-#: revision.c:2710
+#: revision.c:2720
 msgid "--first-parent is incompatible with --bisect"
 msgstr "--first-parent non è compatibile con --bisect"
 
-#: revision.c:2714
+#: revision.c:2724
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L non supporta ancora formati diff oltre a -p e -s"
 
@@ -5785,31 +5820,31 @@
 "L'hook '%s' è stato ignorato perché non è impostato come eseguibile.\n"
 "Puoi disabilitare quest'avviso con `git config advice.ignoredHook false`."
 
-#: send-pack.c:141
+#: send-pack.c:142
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr ""
 "pacchetto flush inatteso durante la lettura dello stato decompressione del "
 "remoto"
 
-#: send-pack.c:143
+#: send-pack.c:144
 #, c-format
 msgid "unable to parse remote unpack status: %s"
 msgstr "impossibile analizzare lo stato decompressione del remoto: %s"
 
-#: send-pack.c:145
+#: send-pack.c:146
 #, c-format
 msgid "remote unpack failed: %s"
 msgstr "decompressione sul remoto non riuscita: %s"
 
-#: send-pack.c:306
+#: send-pack.c:307
 msgid "failed to sign the push certificate"
 msgstr "firma del certificato per il push non riuscita"
 
-#: send-pack.c:420
+#: send-pack.c:421
 msgid "the receiving end does not support --signed push"
 msgstr "il ricevente non supporta i push --signed"
 
-#: send-pack.c:422
+#: send-pack.c:423
 msgid ""
 "not sending a push certificate since the receiving end does not support --"
 "signed push"
@@ -5817,11 +5852,11 @@
 "non invio un certificato push perché il ricevente non supporta i push --"
 "signed"
 
-#: send-pack.c:434
+#: send-pack.c:435
 msgid "the receiving end does not support --atomic push"
 msgstr "il ricevente non supporta i push --atomic"
 
-#: send-pack.c:439
+#: send-pack.c:440
 msgid "the receiving end does not support push options"
 msgstr "il ricevente non supporta le opzioni push"
 
@@ -5835,7 +5870,7 @@
 msgid "could not delete '%s'"
 msgstr "impossibile eliminare '%s'"
 
-#: sequencer.c:311 builtin/rebase.c:759 builtin/rebase.c:1645 builtin/rm.c:369
+#: sequencer.c:311 builtin/rebase.c:760 builtin/rebase.c:1676 builtin/rm.c:369
 #, c-format
 msgid "could not remove '%s'"
 msgstr "impossibile rimuovere '%s'"
@@ -5875,7 +5910,7 @@
 "con 'git add <path>' o 'git rm <path>' ed esegui\n"
 "il commit del risultato con 'git commit'"
 
-#: sequencer.c:401 sequencer.c:2909
+#: sequencer.c:401 sequencer.c:2847
 #, c-format
 msgid "could not lock '%s'"
 msgstr "impossibile bloccare '%s'"
@@ -5885,15 +5920,15 @@
 msgid "could not write eol to '%s'"
 msgstr "impossibile scrivere il carattere di fine riga in '%s'"
 
-#: sequencer.c:413 sequencer.c:2714 sequencer.c:2915 sequencer.c:2929
-#: sequencer.c:3192
+#: sequencer.c:413 sequencer.c:2652 sequencer.c:2853 sequencer.c:2867
+#: sequencer.c:3130
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "finalizzazione di '%s' non riuscita"
 
-#: sequencer.c:436 sequencer.c:981 sequencer.c:1655 sequencer.c:2734
-#: sequencer.c:3174 sequencer.c:3283 builtin/am.c:245 builtin/commit.c:763
-#: builtin/merge.c:1112 builtin/rebase.c:567
+#: sequencer.c:436 sequencer.c:1585 sequencer.c:2672 sequencer.c:3112
+#: sequencer.c:3221 builtin/am.c:244 builtin/commit.c:763 builtin/merge.c:1117
+#: builtin/rebase.c:568
 #, c-format
 msgid "could not read '%s'"
 msgstr "impossibile leggere '%s'"
@@ -5920,70 +5955,65 @@
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase -i".
 #.
-#: sequencer.c:632
+#: sequencer.c:631
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s: impossibile scrivere il nuovo file indice"
 
-#: sequencer.c:649
+#: sequencer.c:648
 msgid "unable to update cache tree"
 msgstr "impossibile aggiornare l'albero cache"
 
-#: sequencer.c:663
+#: sequencer.c:662
 msgid "could not resolve HEAD commit"
 msgstr "impossibile risolvere il commit HEAD"
 
-#: sequencer.c:743
+#: sequencer.c:742
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr "nessuna chiave presente in '%.*s'"
 
-#: sequencer.c:754
+#: sequencer.c:753
 #, c-format
 msgid "unable to dequote value of '%s'"
 msgstr "impossibile rimuovere gli apici dal valore di '%s'"
 
-#: sequencer.c:791 wrapper.c:227 wrapper.c:397 builtin/am.c:706
-#: builtin/am.c:798 builtin/merge.c:1109 builtin/rebase.c:1045
+#: sequencer.c:790 wrapper.c:190 wrapper.c:360 builtin/am.c:705
+#: builtin/am.c:797 builtin/merge.c:1114 builtin/rebase.c:1046
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "impossibile aprire '%s' in lettura"
 
-#: sequencer.c:801
+#: sequencer.c:800
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr "'GIT_AUTHOR_NAME' già specificato"
 
-#: sequencer.c:806
+#: sequencer.c:805
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr "'GIT_AUTHOR_EMAIL' già specificato"
 
-#: sequencer.c:811
+#: sequencer.c:810
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr "'GIT_AUTHOR_DATE' già specificato"
 
-#: sequencer.c:815
+#: sequencer.c:814
 #, c-format
 msgid "unknown variable '%s'"
 msgstr "variabile '%s' sconosciuta"
 
-#: sequencer.c:820
+#: sequencer.c:819
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr "'GIT_AUTHOR_NAME' mancante"
 
-#: sequencer.c:822
+#: sequencer.c:821
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr "'GIT_AUTHOR_EMAIL' mancante"
 
-#: sequencer.c:824
+#: sequencer.c:823
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr "'GIT_AUTHOR_DATE' mancante"
 
-#: sequencer.c:884
-#, c-format
-msgid "invalid date format '%s' in '%s'"
-msgstr "formato data '%s' non valido in '%s'"
-
-#: sequencer.c:901
+#: sequencer.c:872
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -6013,15 +6043,11 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:995
-msgid "writing root commit"
-msgstr "scrittura commit radice in corso"
-
-#: sequencer.c:1216
+#: sequencer.c:1146
 msgid "'prepare-commit-msg' hook failed"
 msgstr "hook 'prepare-commit-msg' non riuscito"
 
-#: sequencer.c:1223
+#: sequencer.c:1153
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -6048,7 +6074,7 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1236
+#: sequencer.c:1166
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -6074,329 +6100,329 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1278
+#: sequencer.c:1208
 msgid "couldn't look up newly created commit"
 msgstr "impossibile trovare il commit appena creato"
 
-#: sequencer.c:1280
+#: sequencer.c:1210
 msgid "could not parse newly created commit"
 msgstr "impossibile analizzare il commit appena creato"
 
-#: sequencer.c:1326
+#: sequencer.c:1256
 msgid "unable to resolve HEAD after creating commit"
 msgstr "impossibile risolvere HEAD dopo la creazione del commit"
 
-#: sequencer.c:1328
+#: sequencer.c:1258
 msgid "detached HEAD"
 msgstr "HEAD scollegato"
 
-#: sequencer.c:1332
+#: sequencer.c:1262
 msgid " (root-commit)"
 msgstr " (commit radice)"
 
-#: sequencer.c:1353
+#: sequencer.c:1283
 msgid "could not parse HEAD"
 msgstr "impossibile analizzare HEAD"
 
-#: sequencer.c:1355
+#: sequencer.c:1285
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "L'HEAD %s non è un commit!"
 
-#: sequencer.c:1359 builtin/commit.c:1571
+#: sequencer.c:1289 builtin/commit.c:1571
 msgid "could not parse HEAD commit"
 msgstr "impossibile analizzare il commit HEAD"
 
-#: sequencer.c:1411 sequencer.c:2004
+#: sequencer.c:1341 sequencer.c:1933
 msgid "unable to parse commit author"
 msgstr "impossibile analizzare l'autore del commit"
 
-#: sequencer.c:1421 builtin/am.c:1573 builtin/merge.c:684
+#: sequencer.c:1352 builtin/am.c:1561 builtin/merge.c:684
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree non è riuscito a scrivere un albero"
 
-#: sequencer.c:1438 sequencer.c:1499
+#: sequencer.c:1369 sequencer.c:1429
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "impossibile leggere il messaggio di commit da '%s'"
 
-#: sequencer.c:1465 builtin/am.c:1595 builtin/commit.c:1670 builtin/merge.c:878
-#: builtin/merge.c:903
+#: sequencer.c:1396 builtin/am.c:1583 builtin/commit.c:1670 builtin/merge.c:883
+#: builtin/merge.c:908
 msgid "failed to write commit object"
 msgstr "scrittura dell'oggetto del commit non riuscita"
 
-#: sequencer.c:1526
+#: sequencer.c:1456
 #, c-format
 msgid "could not parse commit %s"
 msgstr "impossibile analizzare il commit %s"
 
-#: sequencer.c:1531
+#: sequencer.c:1461
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "impossibile analizzare il commit genitore %s"
 
-#: sequencer.c:1605 sequencer.c:1715
+#: sequencer.c:1535 sequencer.c:1645
 #, c-format
 msgid "unknown command: %d"
 msgstr "comando sconosciuto: %d"
 
-#: sequencer.c:1662 sequencer.c:1687
+#: sequencer.c:1592 sequencer.c:1617
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr "Questa è una combinazione di %d commit."
 
-#: sequencer.c:1672
+#: sequencer.c:1602
 msgid "need a HEAD to fixup"
 msgstr "è necessaria un'HEAD per il fixup"
 
-#: sequencer.c:1674 sequencer.c:3219
+#: sequencer.c:1604 sequencer.c:3157
 msgid "could not read HEAD"
 msgstr "impossibile leggere l'HEAD"
 
-#: sequencer.c:1676
+#: sequencer.c:1606
 msgid "could not read HEAD's commit message"
 msgstr "impossibile leggere il messaggio di commit dell'HEAD"
 
-#: sequencer.c:1682
+#: sequencer.c:1612
 #, c-format
 msgid "cannot write '%s'"
 msgstr "impossibile scrivere '%s'"
 
-#: sequencer.c:1689 git-rebase--preserve-merges.sh:496
+#: sequencer.c:1619 git-rebase--preserve-merges.sh:496
 msgid "This is the 1st commit message:"
 msgstr "Questo è il primo messaggio di commit:"
 
-#: sequencer.c:1697
+#: sequencer.c:1627
 #, c-format
 msgid "could not read commit message of %s"
 msgstr "impossibile leggere il messaggio di commit di %s"
 
-#: sequencer.c:1704
+#: sequencer.c:1634
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Questo è il messaggio di commit numero %d:"
 
-#: sequencer.c:1710
+#: sequencer.c:1640
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "Il messaggio di commit numero %d sarà saltato:"
 
-#: sequencer.c:1798
+#: sequencer.c:1728
 msgid "your index file is unmerged."
 msgstr "il file indice non è stato sottoposto a merge."
 
-#: sequencer.c:1805
+#: sequencer.c:1735
 msgid "cannot fixup root commit"
 msgstr "impossibile eseguire il fixup sul commit radice"
 
-#: sequencer.c:1824
+#: sequencer.c:1754
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "il commit %s è un merge ma non è stata specificata l'opzione -m."
 
-#: sequencer.c:1832 sequencer.c:1840
+#: sequencer.c:1762 sequencer.c:1770
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "il commit %s non ha il genitore %d"
 
-#: sequencer.c:1846
+#: sequencer.c:1776
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "impossibile ottenere il messaggio di commit per %s"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:1865
+#: sequencer.c:1795
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: impossibile analizzare il commit genitore %s"
 
-#: sequencer.c:1930
+#: sequencer.c:1860
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "impossibile ridenominare '%s' in '%s'"
 
-#: sequencer.c:1985
+#: sequencer.c:1915
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "non è stato possibile eseguire il revert di %s... %s"
 
-#: sequencer.c:1986
+#: sequencer.c:1916
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "non è stato possibile applicare %s... %s"
 
-#: sequencer.c:2045
+#: sequencer.c:1983
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: lettura dell'indice non riuscita"
 
-#: sequencer.c:2052
+#: sequencer.c:1990
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: aggiornamento dell'indice non riuscito"
 
-#: sequencer.c:2128
+#: sequencer.c:2066
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s non accetta argomenti: '%s'"
 
-#: sequencer.c:2137
+#: sequencer.c:2075
 #, c-format
 msgid "missing arguments for %s"
 msgstr "argomenti mancanti per %s"
 
-#: sequencer.c:2174
+#: sequencer.c:2112
 #, c-format
 msgid "could not parse '%.*s'"
 msgstr "impossibile analizzare '%.*s'"
 
-#: sequencer.c:2228
+#: sequencer.c:2166
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "riga %d non valida: %.*s"
 
-#: sequencer.c:2239
+#: sequencer.c:2177
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "impossibile eseguire '%s' senza un commit precedente"
 
-#: sequencer.c:2287 builtin/rebase.c:153 builtin/rebase.c:178
+#: sequencer.c:2225 builtin/rebase.c:153 builtin/rebase.c:178
 #: builtin/rebase.c:204 builtin/rebase.c:229
 #, c-format
 msgid "could not read '%s'."
 msgstr "impossibile leggere '%s'."
 
-#: sequencer.c:2323
+#: sequencer.c:2261
 msgid "cancelling a cherry picking in progress"
 msgstr "annullo un'operazione di cherry-pick in corso"
 
-#: sequencer.c:2330
+#: sequencer.c:2268
 msgid "cancelling a revert in progress"
 msgstr "annullo un'operazione di revert in corso"
 
-#: sequencer.c:2364
+#: sequencer.c:2302
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "correggi la situazione usando 'git rebase --edit-todo'."
 
-#: sequencer.c:2366
+#: sequencer.c:2304
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "foglio istruzioni inutilizzabile: '%s'"
 
-#: sequencer.c:2371
+#: sequencer.c:2309
 msgid "no commits parsed."
 msgstr "nessun commit analizzato."
 
-#: sequencer.c:2382
+#: sequencer.c:2320
 msgid "cannot cherry-pick during a revert."
 msgstr "impossibile eseguire un cherry-pick durante un revert."
 
-#: sequencer.c:2384
+#: sequencer.c:2322
 msgid "cannot revert during a cherry-pick."
 msgstr "impossibile eseguire un revert durante un cherry-pick."
 
-#: sequencer.c:2466
+#: sequencer.c:2404
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr "valore non valido per %s: %s"
 
-#: sequencer.c:2553
+#: sequencer.c:2491
 msgid "unusable squash-onto"
 msgstr "squash-onto inutilizzabile"
 
-#: sequencer.c:2569
+#: sequencer.c:2507
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "foglio opzioni malformati: '%s'"
 
-#: sequencer.c:2652 sequencer.c:4351
+#: sequencer.c:2590 sequencer.c:4308
 msgid "empty commit set passed"
 msgstr "è stato passato un insieme di commit vuoto"
 
-#: sequencer.c:2668
+#: sequencer.c:2606
 msgid "revert is already in progress"
 msgstr "un'operazione di revert è già in corso"
 
-#: sequencer.c:2670
+#: sequencer.c:2608
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "prova \"git revert (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2673
+#: sequencer.c:2611
 msgid "cherry-pick is already in progress"
 msgstr "un'operazione di cherry-pick è già in corso"
 
-#: sequencer.c:2675
+#: sequencer.c:2613
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "prova \"git cherry-pick (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2689
+#: sequencer.c:2627
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "impossibile creare la directory sequencer '%s'"
 
-#: sequencer.c:2704
+#: sequencer.c:2642
 msgid "could not lock HEAD"
 msgstr "impossibile bloccare HEAD"
 
-#: sequencer.c:2764 sequencer.c:4103
+#: sequencer.c:2702 sequencer.c:4057
 msgid "no cherry-pick or revert in progress"
 msgstr "nessuna operazione di cherry-pick o revert in corso"
 
-#: sequencer.c:2766 sequencer.c:2777
+#: sequencer.c:2704 sequencer.c:2715
 msgid "cannot resolve HEAD"
 msgstr "impossibile risolvere HEAD"
 
-#: sequencer.c:2768 sequencer.c:2812
+#: sequencer.c:2706 sequencer.c:2750
 msgid "cannot abort from a branch yet to be born"
 msgstr ""
 "impossibile interrompere l'operazione da un branch che deve essere ancora "
 "creato"
 
-#: sequencer.c:2798 builtin/grep.c:734
+#: sequencer.c:2736 builtin/grep.c:736
 #, c-format
 msgid "cannot open '%s'"
 msgstr "impossibile aprire '%s'"
 
-#: sequencer.c:2800
+#: sequencer.c:2738
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "impossibile leggere '%s': %s"
 
-#: sequencer.c:2801
+#: sequencer.c:2739
 msgid "unexpected end of file"
 msgstr "fine del file inattesa"
 
-#: sequencer.c:2807
+#: sequencer.c:2745
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr ""
 "il file '%s' in cui è stato salvato l'HEAD prima del cherry pick è corrotto"
 
-#: sequencer.c:2818
+#: sequencer.c:2756
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr ""
 "Sembra che tu abbia spostato l'HEAD. Non eseguo il rewind, controlla l'HEAD!"
 
-#: sequencer.c:2859
+#: sequencer.c:2797
 msgid "no revert in progress"
 msgstr "nessun revert in corso"
 
-#: sequencer.c:2867
+#: sequencer.c:2805
 msgid "no cherry-pick in progress"
 msgstr "nessun cherry-pick in corso"
 
-#: sequencer.c:2877
+#: sequencer.c:2815
 msgid "failed to skip the commit"
 msgstr "salto del commit non riuscito"
 
-#: sequencer.c:2884
+#: sequencer.c:2822
 msgid "there is nothing to skip"
 msgstr "non c'è nulla da saltare"
 
-#: sequencer.c:2887
+#: sequencer.c:2825
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -6405,21 +6431,21 @@
 "hai già eseguito il commit?\n"
 "prova \"git %s --continue\""
 
-#: sequencer.c:3011 sequencer.c:4015
+#: sequencer.c:2949 sequencer.c:3969
 #, c-format
 msgid "could not update %s"
 msgstr "impossibile aggiornare %s"
 
-#: sequencer.c:3049 sequencer.c:3995
+#: sequencer.c:2987 sequencer.c:3949
 msgid "cannot read HEAD"
 msgstr "impossibile leggere l'HEAD"
 
-#: sequencer.c:3066
+#: sequencer.c:3004
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "impossibile copiare '%s' in '%s'"
 
-#: sequencer.c:3074
+#: sequencer.c:3012
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -6438,27 +6464,27 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:3084
+#: sequencer.c:3022
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "Impossibile applicare %s... %.*s"
 
-#: sequencer.c:3091
+#: sequencer.c:3029
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "Impossibile eseguire il merge di %.*s"
 
-#: sequencer.c:3105 sequencer.c:3109 builtin/difftool.c:633
+#: sequencer.c:3043 sequencer.c:3047 builtin/difftool.c:641
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "impossibile copiare '%s' in '%s'"
 
-#: sequencer.c:3131 sequencer.c:3558 builtin/rebase.c:849 builtin/rebase.c:1582
-#: builtin/rebase.c:1953 builtin/rebase.c:2008
+#: sequencer.c:3069 sequencer.c:3506 builtin/rebase.c:850 builtin/rebase.c:1613
+#: builtin/rebase.c:1987 builtin/rebase.c:2031
 msgid "could not read index"
 msgstr "impossibile leggere l'indice"
 
-#: sequencer.c:3136
+#: sequencer.c:3074
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -6473,11 +6499,11 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3142
+#: sequencer.c:3080
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "e sono state apportate modifiche all'indice e/o all'albero di lavoro\n"
 
-#: sequencer.c:3148
+#: sequencer.c:3086
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -6494,76 +6520,76 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3209
+#: sequencer.c:3147
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "nome etichetta illecito: '%.*s'"
 
-#: sequencer.c:3263
+#: sequencer.c:3201
 msgid "writing fake root commit"
 msgstr "scrittura commit radice falso in corso"
 
-#: sequencer.c:3268
+#: sequencer.c:3206
 msgid "writing squash-onto"
 msgstr "scrittura squash-onto in corso"
 
-#: sequencer.c:3306 builtin/rebase.c:854 builtin/rebase.c:860
+#: sequencer.c:3244 builtin/rebase.c:855 builtin/rebase.c:861
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "impossibile trovare l'albero di %s"
 
-#: sequencer.c:3324 builtin/rebase.c:873
+#: sequencer.c:3262 builtin/rebase.c:874
 msgid "could not write index"
 msgstr "impossibile scrivere l'indice"
 
-#: sequencer.c:3351
+#: sequencer.c:3289
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "impossibile risolvere '%s'"
 
-#: sequencer.c:3379
+#: sequencer.c:3320
 msgid "cannot merge without a current revision"
 msgstr "impossibile eseguire il merge senza una revisione corrente"
 
-#: sequencer.c:3401
+#: sequencer.c:3342
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "impossibile analizzare '%.*s'"
 
-#: sequencer.c:3410
+#: sequencer.c:3351
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "non c'è nulla di cui eseguire il merge: '%.*s'"
 
-#: sequencer.c:3422
+#: sequencer.c:3363
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr "il merge octopus non può essere eseguito su un [nuovo commit radice]"
 
-#: sequencer.c:3437
+#: sequencer.c:3378
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "impossibile ottenere il messaggio di commit per '%s'"
 
-#: sequencer.c:3590
+#: sequencer.c:3538
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "non è stato nemmeno possibile tentare di eseguire il merge di '%.*s'"
 
-#: sequencer.c:3606
+#: sequencer.c:3554
 msgid "merge: Unable to write new index file"
 msgstr "merge: impossibile scrivere il nuovo file indice"
 
-#: sequencer.c:3675 builtin/rebase.c:711
+#: sequencer.c:3623 builtin/rebase.c:712
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Stash automatico applicato.\n"
 
-#: sequencer.c:3687
+#: sequencer.c:3635
 #, c-format
 msgid "cannot store %s"
 msgstr "impossibile memorizzare %s"
 
-#: sequencer.c:3690 builtin/rebase.c:727 git-rebase--preserve-merges.sh:113
+#: sequencer.c:3638 builtin/rebase.c:728 git-rebase--preserve-merges.sh:113
 #, c-format
 msgid ""
 "Applying autostash resulted in conflicts.\n"
@@ -6574,31 +6600,31 @@
 "Le tue modifiche sono al sicuro nello stash.\n"
 "Puoi eseguire \"git stash pop\" o \"git stash drop\" in qualunque momento.\n"
 
-#: sequencer.c:3751
+#: sequencer.c:3699
 #, c-format
 msgid "could not checkout %s"
 msgstr "impossibile eseguire il checkout di %s"
 
-#: sequencer.c:3765
+#: sequencer.c:3713
 #, c-format
 msgid "%s: not a valid OID"
 msgstr "%s: non è un OID valido"
 
-#: sequencer.c:3770 git-rebase--preserve-merges.sh:779
+#: sequencer.c:3718 git-rebase--preserve-merges.sh:779
 msgid "could not detach HEAD"
 msgstr "impossibile scollegare l'HEAD"
 
-#: sequencer.c:3785
+#: sequencer.c:3733
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "Fermato a HEAD\n"
 
-#: sequencer.c:3787
+#: sequencer.c:3735
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Fermato a %s\n"
 
-#: sequencer.c:3795
+#: sequencer.c:3743
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -6620,49 +6646,49 @@
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:3877
+#: sequencer.c:3827
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Fermato a %s... %.*s\n"
 
-#: sequencer.c:3958
+#: sequencer.c:3898
 #, c-format
 msgid "unknown command %d"
 msgstr "comando %d sconosciuto"
 
-#: sequencer.c:4003
+#: sequencer.c:3957
 msgid "could not read orig-head"
 msgstr "impossibile leggere orig-head"
 
-#: sequencer.c:4008
+#: sequencer.c:3962
 msgid "could not read 'onto'"
 msgstr "impossibile leggere 'onto'"
 
-#: sequencer.c:4022
+#: sequencer.c:3976
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "impossibile aggiornare l'HEAD a %s"
 
-#: sequencer.c:4115
+#: sequencer.c:4069
 msgid "cannot rebase: You have unstaged changes."
 msgstr ""
 "impossibile eseguire il rebase: ci sono delle modifiche non in staging."
 
-#: sequencer.c:4124
+#: sequencer.c:4078
 msgid "cannot amend non-existing commit"
 msgstr "impossibile modificare un commit inesistente"
 
-#: sequencer.c:4126
+#: sequencer.c:4080
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "file non valido: '%s'"
 
-#: sequencer.c:4128
+#: sequencer.c:4082
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "contenuti non validi: '%s'"
 
-#: sequencer.c:4131
+#: sequencer.c:4085
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -6673,42 +6699,42 @@
 "di lavoro. Eseguine prima il commit e quindi esegui nuovamente 'git rebase\n"
 "--continue'."
 
-#: sequencer.c:4167 sequencer.c:4205
+#: sequencer.c:4121 sequencer.c:4159
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "impossibile scrivere il file: '%s'"
 
-#: sequencer.c:4220
+#: sequencer.c:4174
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "impossibile rimuovere CHERRY_PICK_HEAD"
 
-#: sequencer.c:4227
+#: sequencer.c:4181
 msgid "could not commit staged changes."
 msgstr "impossibile eseguire il commit delle modifiche in staging."
 
-#: sequencer.c:4328
+#: sequencer.c:4285
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: impossibile eseguire il cherry pick di un %s"
 
-#: sequencer.c:4332
+#: sequencer.c:4289
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: revisione non valida"
 
-#: sequencer.c:4367
+#: sequencer.c:4324
 msgid "can't revert as initial commit"
 msgstr "impossibile eseguire il revert come commit iniziale"
 
-#: sequencer.c:4810
+#: sequencer.c:4774
 msgid "make_script: unhandled options"
 msgstr "make_script: opzioni non gestite"
 
-#: sequencer.c:4813
+#: sequencer.c:4777
 msgid "make_script: error preparing revisions"
 msgstr "make_script: errore durante la preparazione delle revisioni"
 
-#: sequencer.c:4971
+#: sequencer.c:4935
 msgid ""
 "You can fix this with 'git rebase --edit-todo' and then run 'git rebase --"
 "continue'.\n"
@@ -6718,24 +6744,24 @@
 "eseguire 'git rebase --continue'.\n"
 "Oppure puoi interrompere il rebase con 'git rebase --abort'.\n"
 
-#: sequencer.c:5083 sequencer.c:5100
+#: sequencer.c:5047 sequencer.c:5064
 msgid "nothing to do"
 msgstr "nulla da fare"
 
-#: sequencer.c:5114
+#: sequencer.c:5078
 msgid "could not skip unnecessary pick commands"
 msgstr "impossibile saltare i comandi pick non necessari"
 
-#: sequencer.c:5197
+#: sequencer.c:5166
 msgid "the script was already rearranged."
 msgstr "lo script è già stato riordinato."
 
-#: setup.c:123
+#: setup.c:124
 #, c-format
 msgid "'%s' is outside repository"
 msgstr "'%s' è al di fuori del repository"
 
-#: setup.c:173
+#: setup.c:174
 #, c-format
 msgid ""
 "%s: no such path in the working tree.\n"
@@ -6745,7 +6771,7 @@
 "Usa 'git <comando> -- <percorso>...' per specificare percorsi non esistenti "
 "localmente."
 
-#: setup.c:186
+#: setup.c:187
 #, c-format
 msgid ""
 "ambiguous argument '%s': unknown revision or path not in the working tree.\n"
@@ -6757,14 +6783,14 @@
 "Usa '--' per separare i percorsi dalle revisioni, come segue:\n"
 "'git <comando> [<revisione>...] -- [<file>...]'"
 
-#: setup.c:235
+#: setup.c:236
 #, c-format
 msgid "option '%s' must come before non-option arguments"
 msgstr ""
 "l'opzione '%s' deve essere specificata prima degli argomenti che non "
 "costituiscono un'opzione"
 
-#: setup.c:254
+#: setup.c:255
 #, c-format
 msgid ""
 "ambiguous argument '%s': both revision and filename\n"
@@ -6775,93 +6801,93 @@
 "Usa '--' per separare i percorsi dalle revisioni, come segue:\n"
 "'git <comando> [<revisione>...] -- [<file>...]'"
 
-#: setup.c:390
+#: setup.c:391
 msgid "unable to set up work tree using invalid config"
 msgstr ""
 "impossibile preparare l'albero di lavoro usando una configurazione non valida"
 
-#: setup.c:394
+#: setup.c:395
 msgid "this operation must be run in a work tree"
 msgstr "quest'operazione deve essere eseguita in un albero di lavoro"
 
-#: setup.c:540
+#: setup.c:541
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
 msgstr "Attesa versione repository Git <= %d, trovata %d"
 
-#: setup.c:548
+#: setup.c:549
 msgid "unknown repository extensions found:"
 msgstr "trovate estensioni repository sconosciute:"
 
-#: setup.c:567
+#: setup.c:568
 #, c-format
 msgid "error opening '%s'"
 msgstr "errore durante l'apertura di '%s'"
 
-#: setup.c:569
+#: setup.c:570
 #, c-format
 msgid "too large to be a .git file: '%s'"
 msgstr "'%s' troppo grande per essere un file .git"
 
-#: setup.c:571
+#: setup.c:572
 #, c-format
 msgid "error reading %s"
 msgstr "errore durante la lettura di %s"
 
-#: setup.c:573
+#: setup.c:574
 #, c-format
 msgid "invalid gitfile format: %s"
 msgstr "formato file Git non valido: %s"
 
-#: setup.c:575
+#: setup.c:576
 #, c-format
 msgid "no path in gitfile: %s"
 msgstr "nessun percorso presente nel file Git: %s"
 
-#: setup.c:577
+#: setup.c:578
 #, c-format
 msgid "not a git repository: %s"
 msgstr "%s non è un repository Git"
 
-#: setup.c:676
+#: setup.c:677
 #, c-format
 msgid "'$%s' too big"
 msgstr "'$%s' è troppo grande"
 
-#: setup.c:690
+#: setup.c:691
 #, c-format
 msgid "not a git repository: '%s'"
 msgstr "'%s' non è un repository Git"
 
-#: setup.c:719 setup.c:721 setup.c:752
+#: setup.c:720 setup.c:722 setup.c:753
 #, c-format
 msgid "cannot chdir to '%s'"
 msgstr "impossibile modificare la directory corrente in '%s'"
 
-#: setup.c:724 setup.c:780 setup.c:790 setup.c:829 setup.c:837
+#: setup.c:725 setup.c:781 setup.c:791 setup.c:830 setup.c:838
 msgid "cannot come back to cwd"
 msgstr "impossibile tornare alla directory di lavoro corrente"
 
-#: setup.c:851
+#: setup.c:852
 #, c-format
 msgid "failed to stat '%*s%s%s'"
 msgstr "stat di '%*s%s%s' non riuscito"
 
-#: setup.c:1083
+#: setup.c:1090
 msgid "Unable to read current working directory"
 msgstr "Impossibile leggere la directory di lavoro corrente"
 
-#: setup.c:1092 setup.c:1098
+#: setup.c:1099 setup.c:1105
 #, c-format
 msgid "cannot change to '%s'"
 msgstr "impossibile entrare in '%s'"
 
-#: setup.c:1103
+#: setup.c:1110
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
 msgstr "%s non è un repository Git (né lo è alcuna delle directory genitrici)"
 
-#: setup.c:1109
+#: setup.c:1116
 #, c-format
 msgid ""
 "not a git repository (or any parent up to mount point %s)\n"
@@ -6871,7 +6897,7 @@
 "Mi fermo al limite del filesystem (l'opzione GIT_DISCOVERY_ACROSS_FILESYSTEM "
 "non è impostata)."
 
-#: setup.c:1220
+#: setup.c:1227
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -6881,289 +6907,289 @@
 "(0%.3o).\n"
 "Il proprietario dei file deve avere sempre i permessi di lettura e scrittura."
 
-#: setup.c:1264
+#: setup.c:1271
 msgid "open /dev/null or dup failed"
 msgstr "apertura di /dev/null o dup non riuscita"
 
-#: setup.c:1279
+#: setup.c:1286
 msgid "fork failed"
 msgstr "fork non riuscita"
 
-#: setup.c:1284
+#: setup.c:1291
 msgid "setsid failed"
 msgstr "setsid non riuscita"
 
-#: sha1-file.c:453
+#: sha1-file.c:452
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr ""
 "la directory oggetti %s non esiste; controlla .git/objects/info/alternates"
 
-#: sha1-file.c:504
+#: sha1-file.c:503
 #, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr "impossibile normalizzare il percorso alternativo oggetto: %s"
 
-#: sha1-file.c:576
+#: sha1-file.c:575
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr ""
 "%s: ignoro gli archivi oggetto alternativi, la nidificazione è troppo "
 "profonda"
 
-#: sha1-file.c:583
+#: sha1-file.c:582
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr "impossibile normalizzare la directory oggetti: %s"
 
-#: sha1-file.c:626
+#: sha1-file.c:625
 msgid "unable to fdopen alternates lockfile"
 msgstr "impossibile eseguire fdopen sul file di lock alternates"
 
-#: sha1-file.c:644
+#: sha1-file.c:643
 msgid "unable to read alternates file"
 msgstr "impossibile leggere il file alternates"
 
-#: sha1-file.c:651
+#: sha1-file.c:650
 msgid "unable to move new alternates file into place"
 msgstr "impossibile spostare il nuovo file alternates nella posizione corretta"
 
-#: sha1-file.c:686
+#: sha1-file.c:685
 #, c-format
 msgid "path '%s' does not exist"
 msgstr "il percorso '%s' non esiste"
 
-#: sha1-file.c:712
+#: sha1-file.c:711
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr ""
 "l'aggiunta del repository di riferimento '%s' come checkout collegato non è "
 "ancora supportata."
 
-#: sha1-file.c:718
+#: sha1-file.c:717
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "il repository di riferimento '%s' non è un repository locale."
 
-#: sha1-file.c:724
+#: sha1-file.c:723
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr "il repository di riferimento '%s' è shallow"
 
-#: sha1-file.c:732
+#: sha1-file.c:731
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr "il repository di riferimento '%s' è un graft"
 
-#: sha1-file.c:792
+#: sha1-file.c:791
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr "riga non valida durante l'analisi dei riferimenti degli alternati: %s"
 
-#: sha1-file.c:944
+#: sha1-file.c:943
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr "tento di eseguire mmap %<PRIuMAX> al di sopra del limite %<PRIuMAX>"
 
-#: sha1-file.c:969
+#: sha1-file.c:964
 msgid "mmap failed"
 msgstr "mmap non riuscita"
 
-#: sha1-file.c:1133
+#: sha1-file.c:1128
 #, c-format
 msgid "object file %s is empty"
 msgstr "l'oggetto %s è vuoto"
 
-#: sha1-file.c:1257 sha1-file.c:2396
+#: sha1-file.c:1252 sha1-file.c:2392
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr "oggetto sciolto '%s' corrotto"
 
-#: sha1-file.c:1259 sha1-file.c:2400
+#: sha1-file.c:1254 sha1-file.c:2396
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr "dati inutilizzabili presenti alla fine dell'oggetto sciolto '%s'"
 
-#: sha1-file.c:1301
+#: sha1-file.c:1296
 msgid "invalid object type"
 msgstr "tipo oggetto non valido"
 
-#: sha1-file.c:1385
+#: sha1-file.c:1380
 #, c-format
 msgid "unable to unpack %s header with --allow-unknown-type"
 msgstr "impossibile decomprimere l'intestazione %s con --allow-unknown-type"
 
-#: sha1-file.c:1388
+#: sha1-file.c:1383
 #, c-format
 msgid "unable to unpack %s header"
 msgstr "impossibile decomprimere l'intestazione %s"
 
-#: sha1-file.c:1394
+#: sha1-file.c:1389
 #, c-format
 msgid "unable to parse %s header with --allow-unknown-type"
 msgstr "impossibile analizzare l'intestazione %s con --allow-unknown-type"
 
-#: sha1-file.c:1397
+#: sha1-file.c:1392
 #, c-format
 msgid "unable to parse %s header"
 msgstr "impossibile analizzare l'intestazione %s"
 
-#: sha1-file.c:1588
+#: sha1-file.c:1584
 #, c-format
 msgid "failed to read object %s"
 msgstr "lettura dell'oggetto %s non riuscita"
 
-#: sha1-file.c:1592
+#: sha1-file.c:1588
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr "%s sostitutivo non trovato per %s"
 
-#: sha1-file.c:1596
+#: sha1-file.c:1592
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr "l'oggetto sciolto %s (salvato in %s) è corrotto"
 
-#: sha1-file.c:1600
+#: sha1-file.c:1596
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr "l'oggetto archiviato %s (salvato in %s) è corrotto"
 
-#: sha1-file.c:1703
+#: sha1-file.c:1699
 #, c-format
 msgid "unable to write file %s"
 msgstr "impossibile scrivere il file %s"
 
-#: sha1-file.c:1710
+#: sha1-file.c:1706
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr "impossibile impostare i permessi a '%s'"
 
-#: sha1-file.c:1717
+#: sha1-file.c:1713
 msgid "file write error"
 msgstr "errore di scrittura del file"
 
-#: sha1-file.c:1736
+#: sha1-file.c:1732
 msgid "error when closing loose object file"
 msgstr "errore durante la chiusura del file oggetto sciolto"
 
-#: sha1-file.c:1801
+#: sha1-file.c:1797
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr ""
 "permessi non sufficienti per l'aggiunta di un oggetto al database repository "
 "%s"
 
-#: sha1-file.c:1803
+#: sha1-file.c:1799
 msgid "unable to create temporary file"
 msgstr "impossibile creare il file temporaneo"
 
-#: sha1-file.c:1827
+#: sha1-file.c:1823
 msgid "unable to write loose object file"
 msgstr "impossibile scrivere il file oggetto sciolto"
 
-#: sha1-file.c:1833
+#: sha1-file.c:1829
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr "impossibile comprimere con deflate il nuovo oggetto %s (%d)"
 
-#: sha1-file.c:1837
+#: sha1-file.c:1833
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr "deflateEnd non riuscita sull'oggetto %s (%d)"
 
-#: sha1-file.c:1841
+#: sha1-file.c:1837
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr "sono confuso dall'origine dati oggetto non stabile per %s"
 
-#: sha1-file.c:1851 builtin/pack-objects.c:925
+#: sha1-file.c:1847 builtin/pack-objects.c:925
 #, c-format
 msgid "failed utime() on %s"
 msgstr "utime() di %s non riuscita"
 
-#: sha1-file.c:1926
+#: sha1-file.c:1922
 #, c-format
 msgid "cannot read object for %s"
 msgstr "impossibile leggere l'oggetto per %s"
 
-#: sha1-file.c:1966
+#: sha1-file.c:1962
 msgid "corrupt commit"
 msgstr "commit corrotto"
 
-#: sha1-file.c:1974
+#: sha1-file.c:1970
 msgid "corrupt tag"
 msgstr "tag corrotto"
 
-#: sha1-file.c:2073
+#: sha1-file.c:2069
 #, c-format
 msgid "read error while indexing %s"
 msgstr "errore di lettura durante l'indicizzazione di %s"
 
-#: sha1-file.c:2076
+#: sha1-file.c:2072
 #, c-format
 msgid "short read while indexing %s"
 msgstr "lettura troppo breve durante l'indicizzazione di %s"
 
-#: sha1-file.c:2149 sha1-file.c:2158
+#: sha1-file.c:2145 sha1-file.c:2154
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr "%s: inserimento del record nel database non riuscito"
 
-#: sha1-file.c:2164
+#: sha1-file.c:2160
 #, c-format
 msgid "%s: unsupported file type"
 msgstr "%s: tipo di file non supportato"
 
-#: sha1-file.c:2188
+#: sha1-file.c:2184
 #, c-format
 msgid "%s is not a valid object"
 msgstr "%s non è un oggetto valido"
 
-#: sha1-file.c:2190
+#: sha1-file.c:2186
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr "%s non è un oggetto '%s' valido"
 
-#: sha1-file.c:2217 builtin/index-pack.c:155
+#: sha1-file.c:2213 builtin/index-pack.c:155
 #, c-format
 msgid "unable to open %s"
 msgstr "impossibile aprire %s"
 
-#: sha1-file.c:2407 sha1-file.c:2459
+#: sha1-file.c:2403 sha1-file.c:2455
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr "mancata corrispondenza per %s (atteso %s)"
 
-#: sha1-file.c:2431
+#: sha1-file.c:2427
 #, c-format
 msgid "unable to mmap %s"
 msgstr "impossibile eseguire mmap su %s"
 
-#: sha1-file.c:2436
+#: sha1-file.c:2432
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr "impossibile decomprimere l'intestazione di %s"
 
-#: sha1-file.c:2442
+#: sha1-file.c:2438
 #, c-format
 msgid "unable to parse header of %s"
 msgstr "impossibile analizzare l'intestazione di %s"
 
-#: sha1-file.c:2453
+#: sha1-file.c:2449
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr "impossibile decomprimere i contenuti di %s"
 
-#: sha1-name.c:490
+#: sha1-name.c:487
 #, c-format
 msgid "short SHA1 %s is ambiguous"
 msgstr "lo SHA1 breve %s è ambiguo"
 
-#: sha1-name.c:501
+#: sha1-name.c:498
 msgid "The candidates are:"
 msgstr "I candidati sono:"
 
-#: sha1-name.c:800
+#: sha1-name.c:797
 msgid ""
 "Git normally never creates a ref that ends with 40 hex characters\n"
 "because it will be ignored when you just specify 40-hex. These refs\n"
@@ -7188,43 +7214,43 @@
 "messaggio eseguendo \"git config advice.objectNameWarning false\""
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:821
+#: strbuf.c:822
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:823
+#: strbuf.c:824
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u GiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:831
+#: strbuf.c:832
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:833
+#: strbuf.c:834
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u MiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:840
+#: strbuf.c:841
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:842
+#: strbuf.c:843
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u KiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:848
+#: strbuf.c:849
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -7232,7 +7258,7 @@
 msgstr[1] "%u byte"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:850
+#: strbuf.c:851
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
@@ -7353,28 +7379,28 @@
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree ha restituito il valore di ritorno inatteso %d"
 
-#: submodule-config.c:232
+#: submodule-config.c:236
 #, c-format
 msgid "ignoring suspicious submodule name: %s"
 msgstr "ignoro un nome sottomodulo sospetto: %s"
 
-#: submodule-config.c:299
+#: submodule-config.c:303
 msgid "negative values not allowed for submodule.fetchjobs"
 msgstr "i valori negativi non sono consentiti per submodule.fetchjobs"
 
-#: submodule-config.c:397
+#: submodule-config.c:401
 #, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
 msgstr ""
 "ignoro '%s' che potrebbe essere interpretato come argomento della riga di "
 "comando: %s"
 
-#: submodule-config.c:486
+#: submodule-config.c:490
 #, c-format
 msgid "invalid value for %s"
 msgstr "valore non valido per %s"
 
-#: submodule-config.c:755
+#: submodule-config.c:761
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr "Impossibile aggiornare la voce .gitmodules %s"
@@ -7409,7 +7435,7 @@
 msgid "could not read from stdin"
 msgstr "impossibile leggere dallo standard input"
 
-#: trailer.c:1011 wrapper.c:701
+#: trailer.c:1011 wrapper.c:665
 #, c-format
 msgid "could not stat %s"
 msgstr "impossibile eseguire lo stat di '%s'"
@@ -7438,47 +7464,47 @@
 msgid "Would set upstream of '%s' to '%s' of '%s'\n"
 msgstr "L'upstream di '%s' sarebbe impostato a '%s' di '%s'\n"
 
-#: transport.c:142
+#: transport.c:145
 #, c-format
 msgid "could not read bundle '%s'"
 msgstr "impossibile leggere il bundle '%s'"
 
-#: transport.c:208
+#: transport.c:214
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr "trasporto: opzione profondità '%s' non valida"
 
-#: transport.c:259
+#: transport.c:266
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "vedi protocol.version in 'git help config' per maggiori dettagli"
 
-#: transport.c:260
+#: transport.c:267
 msgid "server options require protocol version 2 or later"
 msgstr "le opzioni server richiedono la versione 2 o successiva del protocollo"
 
-#: transport.c:625
+#: transport.c:632
 msgid "could not parse transport.color.* config"
 msgstr "impossibile analizzare la configurazione transport.color.*"
 
-#: transport.c:698
+#: transport.c:705
 msgid "support for protocol v2 not implemented yet"
 msgstr "supporto alla versione 2 del protocollo non ancora implementato"
 
-#: transport.c:825
+#: transport.c:831
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "valore sconosciuto per la configurazione '%s': %s"
 
-#: transport.c:891
+#: transport.c:897
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "trasporto '%s' non consentito"
 
-#: transport.c:945
+#: transport.c:949
 msgid "git-over-rsync is no longer supported"
 msgstr "git-over-rsync non è più supportato"
 
-#: transport.c:1040
+#: transport.c:1044
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -7487,7 +7513,7 @@
 "I seguenti percorsi sottomodulo contengono modifiche\n"
 "non trovate su nessun remoto:\n"
 
-#: transport.c:1044
+#: transport.c:1048
 #, c-format
 msgid ""
 "\n"
@@ -7514,32 +7540,32 @@
 "per eseguirne il push a un remoto.\n"
 "\n"
 
-#: transport.c:1052
+#: transport.c:1056
 msgid "Aborting."
 msgstr "Interrompo l'operazione."
 
-#: transport.c:1193
+#: transport.c:1201
 msgid "failed to push all needed submodules"
 msgstr "push di tutti i sottomoduli richiesti non riuscito"
 
-#: transport.c:1340 transport-helper.c:645
+#: transport.c:1345 transport-helper.c:655
 msgid "operation not supported by protocol"
 msgstr "operazione non supportata dal protocollo"
 
-#: transport-helper.c:51 transport-helper.c:80
+#: transport-helper.c:61 transport-helper.c:90
 msgid "full write to remote helper failed"
 msgstr "scrittura completa verso l'helper remoto non riuscita"
 
-#: transport-helper.c:134
+#: transport-helper.c:144
 #, c-format
 msgid "unable to find remote helper for '%s'"
 msgstr "impossibile trovare l'helper remoto per '%s'"
 
-#: transport-helper.c:150 transport-helper.c:559
+#: transport-helper.c:160 transport-helper.c:569
 msgid "can't dup helper output fd"
 msgstr "impossibile duplicare il descrittore file dell'output helper"
 
-#: transport-helper.c:201
+#: transport-helper.c:211
 #, c-format
 msgid ""
 "unknown mandatory capability %s; this remote helper probably needs newer "
@@ -7548,103 +7574,108 @@
 "capability necessaria %s sconosciuta; quest'helper remoto probabilmente "
 "richiede una versione di Git più recente"
 
-#: transport-helper.c:207
+#: transport-helper.c:217
 msgid "this remote helper should implement refspec capability"
 msgstr "questo helper remoto dovrebbe implementare la capability refspec"
 
-#: transport-helper.c:274 transport-helper.c:414
+#: transport-helper.c:284 transport-helper.c:424
 #, c-format
 msgid "%s unexpectedly said: '%s'"
 msgstr "%s ha inviato un messaggio inatteso: '%s'"
 
-#: transport-helper.c:403
+#: transport-helper.c:413
 #, c-format
 msgid "%s also locked %s"
 msgstr "%s ha bloccato anche %s"
 
-#: transport-helper.c:481
+#: transport-helper.c:491
 msgid "couldn't run fast-import"
 msgstr "impossibile eseguire fast-import"
 
-#: transport-helper.c:504
+#: transport-helper.c:514
 msgid "error while running fast-import"
 msgstr "errore durante l'esecuzione di fast-import"
 
-#: transport-helper.c:533 transport-helper.c:1105
+#: transport-helper.c:543 transport-helper.c:1132
 #, c-format
 msgid "could not read ref %s"
 msgstr "impossibile leggere il riferimento %s"
 
-#: transport-helper.c:578
+#: transport-helper.c:588
 #, c-format
 msgid "unknown response to connect: %s"
 msgstr "risposta inattesa a connect: %s"
 
-#: transport-helper.c:600
+#: transport-helper.c:610
 msgid "setting remote service path not supported by protocol"
 msgstr ""
 "l'impostazione del percorso del servizio remoto non è supportata dal "
 "protocollo"
 
-#: transport-helper.c:602
+#: transport-helper.c:612
 msgid "invalid remote service path"
 msgstr "percorso servizio remoto non valido"
 
-#: transport-helper.c:648
+#: transport-helper.c:658
 #, c-format
 msgid "can't connect to subservice %s"
 msgstr "impossibile connettersi al sottoservizio %s"
 
-#: transport-helper.c:720
+#: transport-helper.c:734
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "attesi ok/error, l'helper ha inviato '%s'"
 
-#: transport-helper.c:773
+#: transport-helper.c:787
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "l'helper ha segnalato uno stato inatteso di %s"
 
-#: transport-helper.c:834
+#: transport-helper.c:848
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "l'helper %s non supporta dry-run"
 
-#: transport-helper.c:837
+#: transport-helper.c:851
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "l'helper %s non supporta --signed"
 
-#: transport-helper.c:840
+#: transport-helper.c:854
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "l'helper %s non supporta --signed=if-asked"
 
-#: transport-helper.c:847
+#: transport-helper.c:859
+#, c-format
+msgid "helper %s does not support --atomic"
+msgstr "l'helper %s non supporta --atomic"
+
+#: transport-helper.c:865
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "l'helper %s non supporta 'push-option'"
 
-#: transport-helper.c:945
+#: transport-helper.c:963
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr ""
 "l'helper remoto non supporta il push; è necessario uno specificatore "
 "riferimento"
 
-#: transport-helper.c:950
+#: transport-helper.c:968
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "l'helper %s non supporta 'force'"
 
-#: transport-helper.c:997
+#: transport-helper.c:1015
 msgid "couldn't run fast-export"
 msgstr "impossibile eseguire fast-export"
 
-#: transport-helper.c:1002
+#: transport-helper.c:1020
 msgid "error while running fast-export"
 msgstr "errore durante l'esecuzione di fast-export"
 
-#: transport-helper.c:1027
+#: transport-helper.c:1045
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -7653,47 +7684,47 @@
 "Nessun riferimento in comune e nessuno specificato; non eseguo nulla.\n"
 "Forse dovresti specificare un branch come 'master'.\n"
 
-#: transport-helper.c:1091
+#: transport-helper.c:1118
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "risposta malformata nell'elenco riferimenti: %s"
 
-#: transport-helper.c:1244
+#: transport-helper.c:1270
 #, c-format
 msgid "read(%s) failed"
 msgstr "read(%s) non riuscita"
 
-#: transport-helper.c:1271
+#: transport-helper.c:1297
 #, c-format
 msgid "write(%s) failed"
 msgstr "write(%s) non riuscita"
 
-#: transport-helper.c:1320
+#: transport-helper.c:1346
 #, c-format
 msgid "%s thread failed"
 msgstr "thread %s non riuscito"
 
-#: transport-helper.c:1324
+#: transport-helper.c:1350
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "join non riuscita per il thread %s: %s"
 
-#: transport-helper.c:1343 transport-helper.c:1347
+#: transport-helper.c:1369 transport-helper.c:1373
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "impossibile avviare il thread per la copia dei dati: %s"
 
-#: transport-helper.c:1384
+#: transport-helper.c:1410
 #, c-format
 msgid "%s process failed to wait"
 msgstr "wait non riuscita per il processo %s"
 
-#: transport-helper.c:1388
+#: transport-helper.c:1414
 #, c-format
 msgid "%s process failed"
 msgstr "processo %s non riuscito"
 
-#: transport-helper.c:1406 transport-helper.c:1415
+#: transport-helper.c:1432 transport-helper.c:1441
 msgid "can't start thread for copying data"
 msgstr "impossibile avviare il thread per la copia dei dati"
 
@@ -7713,7 +7744,7 @@
 msgid "too-short tree file"
 msgstr "file alber troppo corto"
 
-#: unpack-trees.c:111
+#: unpack-trees.c:110
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -7723,7 +7754,7 @@
 "checkout:\n"
 "%%sEsegui il commit o lo stash delle modifiche prima di cambiare branch."
 
-#: unpack-trees.c:113
+#: unpack-trees.c:112
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -7733,7 +7764,7 @@
 "checkout:\n"
 "%%s"
 
-#: unpack-trees.c:116
+#: unpack-trees.c:115
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -7743,7 +7774,7 @@
 "merge:\n"
 "%%sEsegui il commit o lo stash delle modifiche prima di eseguire il merge."
 
-#: unpack-trees.c:118
+#: unpack-trees.c:117
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -7753,7 +7784,7 @@
 "merge:\n"
 "%%s"
 
-#: unpack-trees.c:121
+#: unpack-trees.c:120
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -7764,7 +7795,7 @@
 "%%sEsegui il commit o lo stash delle modifiche prima di eseguire "
 "l'operazione di %s."
 
-#: unpack-trees.c:123
+#: unpack-trees.c:122
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -7774,7 +7805,7 @@
 "l'operazione di %s:\n"
 "%%s"
 
-#: unpack-trees.c:128
+#: unpack-trees.c:127
 #, c-format
 msgid ""
 "Updating the following directories would lose untracked files in them:\n"
@@ -7784,7 +7815,7 @@
 "tracciati in esse contenuti vengano persi:\n"
 "%s"
 
-#: unpack-trees.c:132
+#: unpack-trees.c:131
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -7794,7 +7825,7 @@
 "eliminati con il checkout:\n"
 "%%sSpostali o eliminali prima di cambiare branch."
 
-#: unpack-trees.c:134
+#: unpack-trees.c:133
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -7804,7 +7835,7 @@
 "eliminati con il checkout:\n"
 "%%s"
 
-#: unpack-trees.c:137
+#: unpack-trees.c:136
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -7814,7 +7845,7 @@
 "eliminati dal merge:\n"
 "%%sSpostali o eliminali prima di eseguire il merge."
 
-#: unpack-trees.c:139
+#: unpack-trees.c:138
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -7824,7 +7855,7 @@
 "eliminati dal merge:\n"
 "%%s"
 
-#: unpack-trees.c:142
+#: unpack-trees.c:141
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -7834,7 +7865,7 @@
 "eliminati con l'operazione di %s:\n"
 "%%sSpostali o eliminali prima di eseguire l'operazione di %s."
 
-#: unpack-trees.c:144
+#: unpack-trees.c:143
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -7844,7 +7875,7 @@
 "eliminati con l'operazione di %s:\n"
 "%%s"
 
-#: unpack-trees.c:150
+#: unpack-trees.c:149
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -7855,7 +7886,7 @@
 "sovrascritti con il checkout:\n"
 "%%sSpostali o eliminali prima di cambiare branch."
 
-#: unpack-trees.c:152
+#: unpack-trees.c:151
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -7866,7 +7897,7 @@
 "sovrascritti con il checkout:\n"
 "%%s"
 
-#: unpack-trees.c:155
+#: unpack-trees.c:154
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -7876,7 +7907,7 @@
 "sovrascritti dal merge:\n"
 "%%sSpostali o eliminali prima di eseguire il merge."
 
-#: unpack-trees.c:157
+#: unpack-trees.c:156
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -7886,7 +7917,7 @@
 "sovrascritti dal merge:\n"
 "%%s"
 
-#: unpack-trees.c:160
+#: unpack-trees.c:159
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -7896,7 +7927,7 @@
 "sovrascritti con l'operazione di %s:\n"
 "%%sSpostali o eliminali prima di eseguire l'operazione di %s."
 
-#: unpack-trees.c:162
+#: unpack-trees.c:161
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -7906,13 +7937,13 @@
 "sovrascritti con l'operazione di %s:\n"
 "%%s"
 
-#: unpack-trees.c:170
+#: unpack-trees.c:169
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
 msgstr ""
 "La voce '%s' si sovrappone a '%s'. Impossibile eseguire il collegamento."
 
-#: unpack-trees.c:173
+#: unpack-trees.c:172
 #, c-format
 msgid ""
 "Cannot update sparse checkout: the following entries are not up to date:\n"
@@ -7922,7 +7953,7 @@
 "aggiornate:\n"
 "%s"
 
-#: unpack-trees.c:175
+#: unpack-trees.c:174
 #, c-format
 msgid ""
 "The following working tree files would be overwritten by sparse checkout "
@@ -7933,7 +7964,7 @@
 "l'aggiornamento del checkout sparse:\n"
 "%s"
 
-#: unpack-trees.c:177
+#: unpack-trees.c:176
 #, c-format
 msgid ""
 "The following working tree files would be removed by sparse checkout "
@@ -7944,7 +7975,7 @@
 "l'aggiornamento del checkout sparse:\n"
 "%s"
 
-#: unpack-trees.c:179
+#: unpack-trees.c:178
 #, c-format
 msgid ""
 "Cannot update submodule:\n"
@@ -7953,16 +7984,16 @@
 "Impossibile aggiornare il sottomodulo:\n"
 "%s"
 
-#: unpack-trees.c:256
+#: unpack-trees.c:255
 #, c-format
 msgid "Aborting\n"
 msgstr "Interrompo l'operazione\n"
 
-#: unpack-trees.c:318
+#: unpack-trees.c:317
 msgid "Updating files"
 msgstr "Aggiornamento dei file in corso"
 
-#: unpack-trees.c:350
+#: unpack-trees.c:349
 msgid ""
 "the following paths have collided (e.g. case-sensitive paths\n"
 "on a case-insensitive filesystem) and only one from the same\n"
@@ -8002,7 +8033,7 @@
 msgid "invalid '..' path segment"
 msgstr "parte percorso '..' non valida"
 
-#: worktree.c:258 builtin/am.c:2095
+#: worktree.c:258 builtin/am.c:2084
 #, c-format
 msgid "failed to read '%s'"
 msgstr "lettura di '%s' non riuscita"
@@ -8035,17 +8066,17 @@
 msgid "'%s' does not point back to '%s'"
 msgstr "'%s' non punta a '%s'"
 
-#: wrapper.c:223 wrapper.c:393
+#: wrapper.c:186 wrapper.c:356
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr "impossibile aprire '%s' in lettura e scrittura"
 
-#: wrapper.c:424 wrapper.c:624
+#: wrapper.c:387 wrapper.c:588
 #, c-format
 msgid "unable to access '%s'"
 msgstr "impossibile accedere a '%s'"
 
-#: wrapper.c:632
+#: wrapper.c:596
 msgid "unable to get current working directory"
 msgstr "impossibile ottenere la directory di lavoro corrente"
 
@@ -8402,82 +8433,90 @@
 "\")"
 
 #: wt-status.c:1437
+msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
+msgstr "  (usa \"git cherry-pick --skip\" per saltare questa patch)"
+
+#: wt-status.c:1439
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr ""
 "  (usa \"git cherry-pick --abort\" per annullare l'operazione di cherry-pick)"
 
-#: wt-status.c:1447
+#: wt-status.c:1449
 msgid "Revert currently in progress."
 msgstr "Revert in corso."
 
-#: wt-status.c:1450
+#: wt-status.c:1452
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Attualmente stai eseguendo il revert del commit %s."
 
-#: wt-status.c:1456
+#: wt-status.c:1458
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (risolvi i conflitti ed esegui \"git revert --continue\")"
 
-#: wt-status.c:1459
+#: wt-status.c:1461
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (esegui \"git revert --continue\" per continuare)"
 
-#: wt-status.c:1462
+#: wt-status.c:1464
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr ""
 "  (tutti i conflitti sono stati risolti: esegui \"git revert --continue\")"
 
-#: wt-status.c:1464
+#: wt-status.c:1466
+msgid "  (use \"git revert --skip\" to skip this patch)"
+msgstr "  (usa \"git revert --skip\" per saltare questa patch)"
+
+#: wt-status.c:1468
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (usa \"git revert --abort\" per annullare l'operazione di revert)"
 
-#: wt-status.c:1474
+#: wt-status.c:1478
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "Attualmente stai eseguendo una bisezione partendo dal branch '%s'."
 
-#: wt-status.c:1478
+#: wt-status.c:1482
 msgid "You are currently bisecting."
 msgstr "Attualmente stai eseguendo una bisezione."
 
-#: wt-status.c:1481
+#: wt-status.c:1485
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (usa \"git bisect reset\" per tornare al branch originario)"
 
-#: wt-status.c:1690
+#: wt-status.c:1694
 msgid "On branch "
 msgstr "Sul branch "
 
-#: wt-status.c:1697
+#: wt-status.c:1701
 msgid "interactive rebase in progress; onto "
 msgstr "rebase interattivo in corso su "
 
-#: wt-status.c:1699
+#: wt-status.c:1703
 msgid "rebase in progress; onto "
 msgstr "rebase in corso su "
 
-#: wt-status.c:1709
+#: wt-status.c:1713
 msgid "Not currently on any branch."
 msgstr "Attualmente non sei su alcun branch."
 
-#: wt-status.c:1726
+#: wt-status.c:1730
 msgid "Initial commit"
 msgstr "Commit iniziale"
 
-#: wt-status.c:1727
+#: wt-status.c:1731
 msgid "No commits yet"
 msgstr "Non ci sono ancora commit"
 
-#: wt-status.c:1741
+#: wt-status.c:1745
 msgid "Untracked files"
 msgstr "File non tracciati"
 
-#: wt-status.c:1743
+#: wt-status.c:1747
 msgid "Ignored files"
 msgstr "File ignorati"
 
-#: wt-status.c:1747
+#: wt-status.c:1751
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -8489,31 +8528,31 @@
 "ma devi stare attento a non dimenticarti di aggiungere\n"
 "autonomamente i file nuovi (vedi 'git help status')."
 
-#: wt-status.c:1753
+#: wt-status.c:1757
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "File non tracciati non elencati%s"
 
-#: wt-status.c:1755
+#: wt-status.c:1759
 msgid " (use -u option to show untracked files)"
 msgstr " (usa l'opzione -u per visualizzare i file non tracciati)"
 
-#: wt-status.c:1761
+#: wt-status.c:1765
 msgid "No changes"
 msgstr "Nessuna modifica"
 
-#: wt-status.c:1766
+#: wt-status.c:1770
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 "nessuna modifica aggiunta al commit (usa \"git add\" e/o \"git commit -a\")\n"
 
-#: wt-status.c:1769
+#: wt-status.c:1773
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "nessuna modifica aggiunta al commit\n"
 
-#: wt-status.c:1772
+#: wt-status.c:1776
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -8522,74 +8561,79 @@
 "non è stato aggiunto nulla al commit ma sono presenti file non tracciati "
 "(usa \"git add\" per tracciarli)\n"
 
-#: wt-status.c:1775
+#: wt-status.c:1779
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr ""
 "non è stato aggiunto nulla al commit ma sono presenti file non tracciati\n"
 
-#: wt-status.c:1778
+#: wt-status.c:1782
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr ""
 "non c'è nulla di cui eseguire il commit (crea/copia dei file e usa \"git add"
 "\" per tracciarli)\n"
 
-#: wt-status.c:1781 wt-status.c:1786
+#: wt-status.c:1785 wt-status.c:1790
 #, c-format
 msgid "nothing to commit\n"
 msgstr "non c'è nulla di cui eseguire il commit\n"
 
-#: wt-status.c:1784
+#: wt-status.c:1788
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr ""
 "non c'è nulla di cui eseguire il commit (usa -u per visualizzare i file non "
 "tracciati)\n"
 
-#: wt-status.c:1788
+#: wt-status.c:1792
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "non c'è nulla di cui eseguire il commit, l'albero di lavoro è pulito\n"
 
-#: wt-status.c:1901
+#: wt-status.c:1905
 msgid "No commits yet on "
 msgstr "Non ci sono ancora commit su"
 
-#: wt-status.c:1905
+#: wt-status.c:1909
 msgid "HEAD (no branch)"
 msgstr "HEAD (nessun branch)"
 
-#: wt-status.c:1936
+#: wt-status.c:1940
 msgid "different"
 msgstr "differente"
 
-#: wt-status.c:1938 wt-status.c:1946
+#: wt-status.c:1942 wt-status.c:1950
 msgid "behind "
 msgstr "indietro "
 
-#: wt-status.c:1941 wt-status.c:1944
+#: wt-status.c:1945 wt-status.c:1948
 msgid "ahead "
 msgstr "avanti "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2466
+#: wt-status.c:2470
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "impossibile eseguire %s: ci sono delle modifiche non in staging."
 
-#: wt-status.c:2472
+#: wt-status.c:2476
 msgid "additionally, your index contains uncommitted changes."
 msgstr ""
 "inoltre, l'indice contiene modifiche di cui non è stato eseguito il commit."
 
-#: wt-status.c:2474
+#: wt-status.c:2478
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr ""
 "impossibile eseguire %s: l'indice contiene modifiche di cui non è stato "
 "eseguito il commit."
 
+#: compat/precompose_utf8.c:58 builtin/clone.c:452
+#, c-format
+msgid "failed to unlink '%s'"
+msgstr "unlink di '%s' non riuscito"
+
 #: builtin/add.c:25
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<opzioni>] [--] <specificatore percorso>..."
@@ -8612,7 +8656,7 @@
 msgid "Unstaged changes after refreshing the index:"
 msgstr "Modifiche non nell'area di staging dopo l'aggiornamento dell'indice:"
 
-#: builtin/add.c:234 builtin/rev-parse.c:896
+#: builtin/add.c:234 builtin/rev-parse.c:897
 msgid "Could not read the index"
 msgstr "Impossibile leggere l'indice"
 
@@ -8647,8 +8691,8 @@
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr "I seguenti percorsi sono ignorati da uno dei file .gitignore:\n"
 
-#: builtin/add.c:290 builtin/clean.c:909 builtin/fetch.c:147 builtin/mv.c:124
-#: builtin/prune-packed.c:56 builtin/pull.c:222 builtin/push.c:560
+#: builtin/add.c:290 builtin/clean.c:910 builtin/fetch.c:162 builtin/mv.c:124
+#: builtin/prune-packed.c:56 builtin/pull.c:223 builtin/push.c:547
 #: builtin/remote.c:1345 builtin/rm.c:241 builtin/send-pack.c:165
 msgid "dry run"
 msgstr "test controllato"
@@ -8704,7 +8748,7 @@
 "controlla se i file - anche quelli mancanti - sono ignorati durante il test "
 "controllato"
 
-#: builtin/add.c:309 builtin/update-index.c:1001
+#: builtin/add.c:309 builtin/update-index.c:1002
 msgid "override the executable bit of the listed files"
 msgstr "esegui l'override del bit eseguibile dei file elencati"
 
@@ -8780,115 +8824,111 @@
 msgid "Maybe you wanted to say 'git add .'?\n"
 msgstr "Forse intendevi dire 'git add .'?\n"
 
-#: builtin/am.c:348
+#: builtin/am.c:347
 msgid "could not parse author script"
 msgstr "impossibile analizzare lo script author"
 
-#: builtin/am.c:432
+#: builtin/am.c:431
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "'%s' è stato eliminato dall'hook applypatch-msg"
 
-#: builtin/am.c:474
+#: builtin/am.c:473
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Riga di input malformata: '%s'."
 
-#: builtin/am.c:512
+#: builtin/am.c:511
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Copia delle note da '%s' a '%s' non riuscita"
 
-#: builtin/am.c:538
+#: builtin/am.c:537
 msgid "fseek failed"
 msgstr "fseek non riuscita"
 
-#: builtin/am.c:726
+#: builtin/am.c:725
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "impossibile analizzare la patch '%s'"
 
-#: builtin/am.c:791
+#: builtin/am.c:790
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Può essere applicata solo una serie di patch StGIT per volta"
 
-#: builtin/am.c:839
+#: builtin/am.c:838
 msgid "invalid timestamp"
 msgstr "timestamp non valido"
 
-#: builtin/am.c:844 builtin/am.c:856
+#: builtin/am.c:843 builtin/am.c:855
 msgid "invalid Date line"
 msgstr "riga Date non valida"
 
-#: builtin/am.c:851
+#: builtin/am.c:850
 msgid "invalid timezone offset"
 msgstr "offset fuso orario non valido"
 
-#: builtin/am.c:944
+#: builtin/am.c:943
 msgid "Patch format detection failed."
 msgstr "Rilevamento del formato della patch non riuscito."
 
-#: builtin/am.c:949 builtin/clone.c:407
+#: builtin/am.c:948 builtin/clone.c:406
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "creazione della directory '%s' non riuscita"
 
-#: builtin/am.c:954
+#: builtin/am.c:953
 msgid "Failed to split patches."
 msgstr "Divisione delle patch non riuscita."
 
-#: builtin/am.c:1084 builtin/commit.c:374
-msgid "unable to write index file"
-msgstr "impossibile scrivere il file indice"
-
-#: builtin/am.c:1098
+#: builtin/am.c:1084
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "Una volta risolto questo problema, esegui \"%s --continue\"."
 
-#: builtin/am.c:1099
+#: builtin/am.c:1085
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "Se preferisci saltare questa patch, esegui invece \"%s --skip\"."
 
-#: builtin/am.c:1100
+#: builtin/am.c:1086
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr ""
 "Per ripristinare il branch originario e terminare il patching, esegui \"%s --"
 "abort\"."
 
-#: builtin/am.c:1183
+#: builtin/am.c:1169
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 "Patch inviata con format=flowed; gli spazi al termine delle righe potrebbero "
 "essere andati perduti."
 
-#: builtin/am.c:1211
+#: builtin/am.c:1197
 msgid "Patch is empty."
 msgstr "La patch è vuota."
 
-#: builtin/am.c:1277
+#: builtin/am.c:1262
+#, c-format
+msgid "missing author line in commit %s"
+msgstr "riga autore mancante nel commit %s"
+
+#: builtin/am.c:1265
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "riga ident non valida: %.*s"
 
-#: builtin/am.c:1299
-#, c-format
-msgid "unable to parse commit %s"
-msgstr "impossibile analizzare il commit %s"
-
-#: builtin/am.c:1496
+#: builtin/am.c:1484
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
 "Dal repository mancano i blob necessari per ripiegare sul merge a tre vie."
 
-#: builtin/am.c:1498
+#: builtin/am.c:1486
 msgid "Using index info to reconstruct a base tree..."
 msgstr ""
 "Utilizzo le informazioni dell'indice per ricostruire un albero di base..."
 
-#: builtin/am.c:1517
+#: builtin/am.c:1505
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -8896,24 +8936,24 @@
 "Hai modificato manualmente la patch?\n"
 "Non può essere applicata ai blob registrati nel suo indice."
 
-#: builtin/am.c:1523
+#: builtin/am.c:1511
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "Ripiego sul patching della base e sul merge a tre vie..."
 
-#: builtin/am.c:1549
+#: builtin/am.c:1537
 msgid "Failed to merge in the changes."
 msgstr "Merge delle modifiche non riuscito."
 
-#: builtin/am.c:1581
+#: builtin/am.c:1569
 msgid "applying to an empty history"
 msgstr "applicazione a una cronologia vuota"
 
-#: builtin/am.c:1628 builtin/am.c:1632
+#: builtin/am.c:1616 builtin/am.c:1620
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "impossibile riprendere l'attività: %s non esiste."
 
-#: builtin/am.c:1650
+#: builtin/am.c:1638
 msgid "Commit Body is:"
 msgstr "Il corpo del commit è:"
 
@@ -8921,37 +8961,41 @@
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1660
+#: builtin/am.c:1648
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr ""
 "Applico? Sì [y]/No [n]/Modifica [e]/[V]isualizza patch/[A]ccetta tutto:"
 
-#: builtin/am.c:1710
+#: builtin/am.c:1695 builtin/commit.c:374
+msgid "unable to write index file"
+msgstr "impossibile scrivere il file indice"
+
+#: builtin/am.c:1699
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Indice sporco: impossibile applicare le patch (elemento sporco: %s)"
 
-#: builtin/am.c:1750 builtin/am.c:1818
+#: builtin/am.c:1739 builtin/am.c:1807
 #, c-format
 msgid "Applying: %.*s"
 msgstr "Applicazione in corso: %.*s"
 
-#: builtin/am.c:1767
+#: builtin/am.c:1756
 msgid "No changes -- Patch already applied."
 msgstr "Nessuna modifica -- patch già applicata."
 
-#: builtin/am.c:1773
+#: builtin/am.c:1762
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "Patch non riuscita a %s %.*s"
 
-#: builtin/am.c:1777
+#: builtin/am.c:1766
 msgid "Use 'git am --show-current-patch' to see the failed patch"
 msgstr ""
 "Usa 'git am --show-current-patch' per visualizzare la patch non riuscita"
 
-#: builtin/am.c:1821
+#: builtin/am.c:1810
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -8961,7 +9005,7 @@
 "Se non rimane nulla da aggiungere all'area di staging, forse qualcos'altro\n"
 "ha già introdotto le stesse modifiche; potresti voler saltare questa patch."
 
-#: builtin/am.c:1828
+#: builtin/am.c:1817
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -8974,17 +9018,17 @@
 "Potresti eseguire `git rm` su un file per accettarne la risoluzione "
 "\"eliminato da loro\"."
 
-#: builtin/am.c:1935 builtin/am.c:1939 builtin/am.c:1951 builtin/reset.c:329
+#: builtin/am.c:1924 builtin/am.c:1928 builtin/am.c:1940 builtin/reset.c:329
 #: builtin/reset.c:337
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "Impossibile analizzare l'oggetto '%s'."
 
-#: builtin/am.c:1987
+#: builtin/am.c:1976
 msgid "failed to clean index"
 msgstr "pulizia dell'indice non riuscita"
 
-#: builtin/am.c:2031
+#: builtin/am.c:2020
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -8993,148 +9037,148 @@
 "'am'.\n"
 "Non ritorno indietro a ORIG_HEAD"
 
-#: builtin/am.c:2128
+#: builtin/am.c:2117
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr "Valore non valido per --patch-format: %s"
 
-#: builtin/am.c:2164
+#: builtin/am.c:2153
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<opzioni>] [(<mbox> | <Maildir>)...]"
 
-#: builtin/am.c:2165
+#: builtin/am.c:2154
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<opzioni>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2171
+#: builtin/am.c:2160
 msgid "run interactively"
 msgstr "esegui in modalità interattiva"
 
-#: builtin/am.c:2173
+#: builtin/am.c:2162
 msgid "historical option -- no-op"
 msgstr "opzione storica -- non esegue nulla"
 
-#: builtin/am.c:2175
+#: builtin/am.c:2164
 msgid "allow fall back on 3way merging if needed"
 msgstr "consenti il ripiego sul merge a tre vie se necessario"
 
-#: builtin/am.c:2176 builtin/init-db.c:494 builtin/prune-packed.c:58
-#: builtin/repack.c:296 builtin/stash.c:806
+#: builtin/am.c:2165 builtin/init-db.c:494 builtin/prune-packed.c:58
+#: builtin/repack.c:297 builtin/stash.c:812
 msgid "be quiet"
 msgstr "non visualizzare messaggi"
 
-#: builtin/am.c:2178
+#: builtin/am.c:2167
 msgid "add a Signed-off-by line to the commit message"
 msgstr "aggiungi una riga Signed-off-by al messaggio di commit"
 
-#: builtin/am.c:2181
+#: builtin/am.c:2170
 msgid "recode into utf8 (default)"
 msgstr "converti codifica in UTF-8 (impostazione predefinita)"
 
-#: builtin/am.c:2183
+#: builtin/am.c:2172
 msgid "pass -k flag to git-mailinfo"
 msgstr "fornisci l'argomento -k a git-mailinfo"
 
-#: builtin/am.c:2185
+#: builtin/am.c:2174
 msgid "pass -b flag to git-mailinfo"
 msgstr "fornisci l'argomento -b a git-mailinfo"
 
-#: builtin/am.c:2187
+#: builtin/am.c:2176
 msgid "pass -m flag to git-mailinfo"
 msgstr "fornisci l'argomento -m a git-mailinfo"
 
-#: builtin/am.c:2189
+#: builtin/am.c:2178
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "fornisci a git-mailsplit l'argomento --keep-cr per il formato mbox"
 
-#: builtin/am.c:2192
+#: builtin/am.c:2181
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr ""
 "non fornire l'argomento --keep-cr a git-mailsplit indipendentemente dal "
 "valore di am.keepcr"
 
-#: builtin/am.c:2195
+#: builtin/am.c:2184
 msgid "strip everything before a scissors line"
 msgstr "rimuovi tutte le righe prima di una riga \"taglia qui\""
 
-#: builtin/am.c:2197 builtin/am.c:2200 builtin/am.c:2203 builtin/am.c:2206
-#: builtin/am.c:2209 builtin/am.c:2212 builtin/am.c:2215 builtin/am.c:2218
-#: builtin/am.c:2224
+#: builtin/am.c:2186 builtin/am.c:2189 builtin/am.c:2192 builtin/am.c:2195
+#: builtin/am.c:2198 builtin/am.c:2201 builtin/am.c:2204 builtin/am.c:2207
+#: builtin/am.c:2213
 msgid "pass it through git-apply"
 msgstr "passa l'argomento a git-apply"
 
-#: builtin/am.c:2214 builtin/commit.c:1368 builtin/fmt-merge-msg.c:671
-#: builtin/fmt-merge-msg.c:674 builtin/grep.c:881 builtin/merge.c:249
-#: builtin/pull.c:159 builtin/pull.c:218 builtin/rebase.c:1418
-#: builtin/repack.c:307 builtin/repack.c:311 builtin/repack.c:313
+#: builtin/am.c:2203 builtin/commit.c:1368 builtin/fmt-merge-msg.c:671
+#: builtin/fmt-merge-msg.c:674 builtin/grep.c:883 builtin/merge.c:249
+#: builtin/pull.c:160 builtin/pull.c:219 builtin/rebase.c:1442
+#: builtin/repack.c:308 builtin/repack.c:312 builtin/repack.c:314
 #: builtin/show-branch.c:650 builtin/show-ref.c:172 builtin/tag.c:403
-#: parse-options.h:141 parse-options.h:162 parse-options.h:312
+#: parse-options.h:150 parse-options.h:171 parse-options.h:312
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2220 builtin/branch.c:661 builtin/for-each-ref.c:38
-#: builtin/replace.c:554 builtin/tag.c:437 builtin/verify-tag.c:38
+#: builtin/am.c:2209 builtin/branch.c:661 builtin/for-each-ref.c:38
+#: builtin/replace.c:555 builtin/tag.c:437 builtin/verify-tag.c:38
 msgid "format"
 msgstr "formato"
 
-#: builtin/am.c:2221
+#: builtin/am.c:2210
 msgid "format the patch(es) are in"
 msgstr "il formato delle patch"
 
-#: builtin/am.c:2227
+#: builtin/am.c:2216
 msgid "override error message when patch failure occurs"
 msgstr ""
 "esegui l'override del messaggio d'errore quando si verifica un errore legato "
 "alle patch"
 
-#: builtin/am.c:2229
+#: builtin/am.c:2218
 msgid "continue applying patches after resolving a conflict"
 msgstr ""
 "continua l'applicazione delle patch dopo la risoluzione di un conflitto"
 
-#: builtin/am.c:2232
+#: builtin/am.c:2221
 msgid "synonyms for --continue"
 msgstr "sinonimi di --continue"
 
-#: builtin/am.c:2235
+#: builtin/am.c:2224
 msgid "skip the current patch"
 msgstr "salta la patch corrente"
 
-#: builtin/am.c:2238
+#: builtin/am.c:2227
 msgid "restore the original branch and abort the patching operation."
 msgstr "ripristina il branch originario e interrompi l'operazione di patching."
 
-#: builtin/am.c:2241
+#: builtin/am.c:2230
 msgid "abort the patching operation but keep HEAD where it is."
 msgstr "interrompi l'operazione di patching ma mantieni HEAD dov'è."
 
-#: builtin/am.c:2244
+#: builtin/am.c:2233
 msgid "show the patch being applied."
 msgstr "visualizza la patch in fase di applicazione."
 
-#: builtin/am.c:2248
+#: builtin/am.c:2237
 msgid "lie about committer date"
 msgstr "menti sulla data del commit"
 
-#: builtin/am.c:2250
+#: builtin/am.c:2239
 msgid "use current timestamp for author date"
 msgstr "usa il timestamp corrente come data autore"
 
-#: builtin/am.c:2252 builtin/commit-tree.c:120 builtin/commit.c:1511
-#: builtin/merge.c:286 builtin/pull.c:193 builtin/rebase.c:489
-#: builtin/rebase.c:1459 builtin/revert.c:117 builtin/tag.c:418
+#: builtin/am.c:2241 builtin/commit-tree.c:120 builtin/commit.c:1511
+#: builtin/merge.c:286 builtin/pull.c:194 builtin/rebase.c:490
+#: builtin/rebase.c:1483 builtin/revert.c:117 builtin/tag.c:418
 msgid "key-id"
 msgstr "ID chiave"
 
-#: builtin/am.c:2253 builtin/rebase.c:490 builtin/rebase.c:1460
+#: builtin/am.c:2242 builtin/rebase.c:491 builtin/rebase.c:1484
 msgid "GPG-sign commits"
 msgstr "firma i commit con GPG"
 
-#: builtin/am.c:2256
+#: builtin/am.c:2245
 msgid "(internal use for git-rebase)"
 msgstr "(a uso interno per git-rebase)"
 
-#: builtin/am.c:2274
+#: builtin/am.c:2263
 msgid ""
 "The -b/--binary option has been a no-op for long time, and\n"
 "it will be removed. Please do not use it anymore."
@@ -9142,18 +9186,18 @@
 "L'opzione -b/--binary non esegue nulla da molto tempo e\n"
 "sarà rimossa. Non usarla più."
 
-#: builtin/am.c:2281
+#: builtin/am.c:2270
 msgid "failed to read the index"
 msgstr "lettura dell'indice non riuscita"
 
-#: builtin/am.c:2296
+#: builtin/am.c:2285
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr ""
 "la directory di rebase precedente %s esiste ancora ma è stata specificata "
 "un'mbox."
 
-#: builtin/am.c:2320
+#: builtin/am.c:2309
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -9162,11 +9206,11 @@
 "Trovata directory smarrita %s.\n"
 "Usa \"git am --abort\" per eliminarla."
 
-#: builtin/am.c:2326
+#: builtin/am.c:2315
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "Operazione di risoluzione non in corso, non riprendiamo."
 
-#: builtin/am.c:2336
+#: builtin/am.c:2325
 msgid "interactive mode requires patches on the command line"
 msgstr ""
 "la modalità interattiva richiede che le patch siano fornite sulla riga di "
@@ -9489,172 +9533,172 @@
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms richiede zero o un argomento"
 
-#: builtin/blame.c:32
+#: builtin/blame.c:31
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
 msgstr "git blame [<opzioni>] [<opzioni revisione>] [<revisione>] [--] <file>"
 
-#: builtin/blame.c:37
+#: builtin/blame.c:36
 msgid "<rev-opts> are documented in git-rev-list(1)"
 msgstr "le <opzioni revisione> sono documentate in git-rev-list(1)"
 
-#: builtin/blame.c:410
+#: builtin/blame.c:409
 #, c-format
 msgid "expecting a color: %s"
 msgstr "atteso colore: %s"
 
-#: builtin/blame.c:417
+#: builtin/blame.c:416
 msgid "must end with a color"
 msgstr "deve terminare con un colore"
 
-#: builtin/blame.c:730
+#: builtin/blame.c:729
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr "colore '%s' non valido in color.blame.repeatedLines"
 
-#: builtin/blame.c:748
+#: builtin/blame.c:747
 msgid "invalid value for blame.coloring"
 msgstr "valore non valido per blame.coloring"
 
-#: builtin/blame.c:823
+#: builtin/blame.c:822
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "impossibile trovare la revisione %s da ignorare"
 
-#: builtin/blame.c:845
+#: builtin/blame.c:844
 msgid "Show blame entries as we find them, incrementally"
 msgstr ""
 "Visualizza le voci blame incrementalmente, a mano a mano che le troviamo"
 
-#: builtin/blame.c:846
+#: builtin/blame.c:845
 msgid "Show blank SHA-1 for boundary commits (Default: off)"
 msgstr ""
 "Visualizza un hash SHA-1 vuoto per i commit limite (impostazione "
 "predefinita: off)"
 
-#: builtin/blame.c:847
+#: builtin/blame.c:846
 msgid "Do not treat root commits as boundaries (Default: off)"
 msgstr ""
 "Non gestire i commit radice come commit limite (impostazione predefinita: "
 "off)"
 
-#: builtin/blame.c:848
+#: builtin/blame.c:847
 msgid "Show work cost statistics"
 msgstr "Visualizza le statistiche sul costo dell'operazione"
 
-#: builtin/blame.c:849
+#: builtin/blame.c:848
 msgid "Force progress reporting"
 msgstr "Forza l'indicazione d'avanzamento dell'operazione"
 
-#: builtin/blame.c:850
+#: builtin/blame.c:849
 msgid "Show output score for blame entries"
 msgstr "Visualizza il punteggio di output per le voci blame"
 
-#: builtin/blame.c:851
+#: builtin/blame.c:850
 msgid "Show original filename (Default: auto)"
 msgstr ""
 "Visualizza il nome file originario (impostazione predefinita: automatico)"
 
-#: builtin/blame.c:852
+#: builtin/blame.c:851
 msgid "Show original linenumber (Default: off)"
 msgstr ""
 "Visualizza il numero di riga originario (impostazione predefinita: off)"
 
-#: builtin/blame.c:853
+#: builtin/blame.c:852
 msgid "Show in a format designed for machine consumption"
 msgstr ""
 "Visualizza l'output in un formato progettato per l'utilizzo da parte di una "
 "macchina"
 
-#: builtin/blame.c:854
+#: builtin/blame.c:853
 msgid "Show porcelain format with per-line commit information"
 msgstr ""
 "Visualizza il formato porcelain con le informazioni sul commit per ogni riga"
 
-#: builtin/blame.c:855
+#: builtin/blame.c:854
 msgid "Use the same output mode as git-annotate (Default: off)"
 msgstr ""
 "Usa la stessa modalità di output di git-annotate (impostazione predefinita: "
 "off)"
 
-#: builtin/blame.c:856
+#: builtin/blame.c:855
 msgid "Show raw timestamp (Default: off)"
 msgstr "Visualizza il timestamp grezzo (impostazione predefinita: off)"
 
-#: builtin/blame.c:857
+#: builtin/blame.c:856
 msgid "Show long commit SHA1 (Default: off)"
 msgstr ""
 "Visualizza l'hash SHA1 del commit in forma lunga (impostazione predefinita: "
 "off)"
 
-#: builtin/blame.c:858
+#: builtin/blame.c:857
 msgid "Suppress author name and timestamp (Default: off)"
 msgstr ""
 "Non visualizzare il nome autore e il timestamp (impostazione predefinita: "
 "off)"
 
-#: builtin/blame.c:859
+#: builtin/blame.c:858
 msgid "Show author email instead of name (Default: off)"
 msgstr ""
 "Visualizza l'indirizzo e-mail dell'autore invece del nome (impostazione "
 "predefinita: off)"
 
-#: builtin/blame.c:860
+#: builtin/blame.c:859
 msgid "Ignore whitespace differences"
 msgstr "Ignora le differenze relative agli spazi bianchi"
 
-#: builtin/blame.c:861 builtin/log.c:1629
+#: builtin/blame.c:860 builtin/log.c:1630
 msgid "rev"
 msgstr "revisione"
 
-#: builtin/blame.c:861
+#: builtin/blame.c:860
 msgid "Ignore <rev> when blaming"
 msgstr "Ignora <revisione> durante l'esecuzione del blame"
 
-#: builtin/blame.c:862
+#: builtin/blame.c:861
 msgid "Ignore revisions from <file>"
 msgstr "Ignora le revisioni specificate in <file>"
 
-#: builtin/blame.c:863
+#: builtin/blame.c:862
 msgid "color redundant metadata from previous line differently"
 msgstr "colora in modo differente i metadati ridondanti della riga precedente"
 
-#: builtin/blame.c:864
+#: builtin/blame.c:863
 msgid "color lines by age"
 msgstr "colora le righe in base all'età"
 
-#: builtin/blame.c:871
+#: builtin/blame.c:870
 msgid "Use an experimental heuristic to improve diffs"
 msgstr "Usa un'euristica sperimentale per migliorare i diff"
 
-#: builtin/blame.c:873
+#: builtin/blame.c:872
 msgid "Spend extra cycles to find better match"
 msgstr "Usa cicli extra per trovare una corrispondenza migliore"
 
-#: builtin/blame.c:874
+#: builtin/blame.c:873
 msgid "Use revisions from <file> instead of calling git-rev-list"
 msgstr "Usa le revisioni salvate in <file> anziché richiamare git-rev-list"
 
-#: builtin/blame.c:875
+#: builtin/blame.c:874
 msgid "Use <file>'s contents as the final image"
 msgstr "Usa i contenuti di <file> come immagine finale"
 
-#: builtin/blame.c:876 builtin/blame.c:877
+#: builtin/blame.c:875 builtin/blame.c:876
 msgid "score"
 msgstr "punteggio"
 
-#: builtin/blame.c:876
+#: builtin/blame.c:875
 msgid "Find line copies within and across files"
 msgstr "Trova copie delle righe all'interno e fra file"
 
-#: builtin/blame.c:877
+#: builtin/blame.c:876
 msgid "Find line movements within and across files"
 msgstr "Trova righe spostate all'interno e fra file"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:877
 msgid "n,m"
 msgstr "n,m"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:877
 msgid "Process only line range n,m, counting from 1"
 msgstr "Elabora solo l'intervallo righe n,m, contandole da 1"
 
@@ -9900,7 +9944,7 @@
 msgid "do not use"
 msgstr "non usare"
 
-#: builtin/branch.c:626 builtin/rebase.c:485
+#: builtin/branch.c:626 builtin/rebase.c:486
 msgid "upstream"
 msgstr "upstream"
 
@@ -10012,7 +10056,7 @@
 msgid "format to use for the output"
 msgstr "formato da usare per l'output"
 
-#: builtin/branch.c:684 builtin/clone.c:761
+#: builtin/branch.c:684 builtin/clone.c:760
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD non trovato fra i riferimenti/head!"
 
@@ -10121,7 +10165,7 @@
 msgid "Need a repository to unbundle."
 msgstr "Per decomprimere un bundle è necessario un repository."
 
-#: builtin/cat-file.c:594
+#: builtin/cat-file.c:595
 msgid ""
 "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
 "p | <type> | --textconv | --filters) [--path=<path>] <object>"
@@ -10129,7 +10173,7 @@
 "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
 "p | <tipo> | --textconv | --filters) [--path=<percorso>] <oggetto>"
 
-#: builtin/cat-file.c:595
+#: builtin/cat-file.c:596
 msgid ""
 "git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
 "filters]"
@@ -10137,75 +10181,75 @@
 "git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
 "filters]"
 
-#: builtin/cat-file.c:616
+#: builtin/cat-file.c:617
 msgid "only one batch option may be specified"
 msgstr "può essere specificata solo un'opzione batch"
 
-#: builtin/cat-file.c:634
+#: builtin/cat-file.c:635
 msgid "<type> can be one of: blob, tree, commit, tag"
 msgstr "<tipo> può essere uno fra blob, tree, commit, tag"
 
-#: builtin/cat-file.c:635
+#: builtin/cat-file.c:636
 msgid "show object type"
 msgstr "visualizza tipo oggetto"
 
-#: builtin/cat-file.c:636
+#: builtin/cat-file.c:637
 msgid "show object size"
 msgstr "visualizza dimensioni oggetto"
 
-#: builtin/cat-file.c:638
+#: builtin/cat-file.c:639
 msgid "exit with zero when there's no error"
 msgstr "esci con codice d'uscita zero se non si sono verificati errori"
 
-#: builtin/cat-file.c:639
+#: builtin/cat-file.c:640
 msgid "pretty-print object's content"
 msgstr "stampa il contenuto dell'oggetto con un formato leggibile"
 
-#: builtin/cat-file.c:641
+#: builtin/cat-file.c:642
 msgid "for blob objects, run textconv on object's content"
 msgstr "esegui textconv sul contenuto dell'oggetto (per gli oggetti blob)"
 
-#: builtin/cat-file.c:643
+#: builtin/cat-file.c:644
 msgid "for blob objects, run filters on object's content"
 msgstr "esegui i filtri sul contenuto dell'oggetto (per gli oggetti blob)"
 
-#: builtin/cat-file.c:644 git-submodule.sh:936
+#: builtin/cat-file.c:645 git-submodule.sh:936
 msgid "blob"
 msgstr "blob"
 
-#: builtin/cat-file.c:645
+#: builtin/cat-file.c:646
 msgid "use a specific path for --textconv/--filters"
 msgstr "usa un percorso specifico per --textconv/--filters"
 
-#: builtin/cat-file.c:647
+#: builtin/cat-file.c:648
 msgid "allow -s and -t to work with broken/corrupt objects"
 msgstr "consenti a -s e -t di funzionare con oggetti malformati/corrotti"
 
-#: builtin/cat-file.c:648
+#: builtin/cat-file.c:649
 msgid "buffer --batch output"
 msgstr "esegui il buffering dell'output di --batch"
 
-#: builtin/cat-file.c:650
+#: builtin/cat-file.c:651
 msgid "show info and content of objects fed from the standard input"
 msgstr ""
 "visualizza le informazioni e il contenuto degli oggetti forniti nello "
 "standard input"
 
-#: builtin/cat-file.c:654
+#: builtin/cat-file.c:655
 msgid "show info about objects fed from the standard input"
 msgstr "visualizza le informazioni degli oggetti forniti nello standard input"
 
-#: builtin/cat-file.c:658
+#: builtin/cat-file.c:659
 msgid "follow in-tree symlinks (used with --batch or --batch-check)"
 msgstr ""
 "segui i collegamenti simbolici entro l'albero (usato con --batch o --batch-"
 "check)"
 
-#: builtin/cat-file.c:660
+#: builtin/cat-file.c:661
 msgid "show all objects with --batch or --batch-check"
 msgstr "visualizza tutti gli oggetti con --batch o --batch-check"
 
-#: builtin/cat-file.c:662
+#: builtin/cat-file.c:663
 msgid "do not order --batch-all-objects output"
 msgstr "non ordinare l'output di --batch-all-objects"
 
@@ -10233,8 +10277,8 @@
 msgid "terminate input and output records by a NUL character"
 msgstr "termina i record di input e output con un carattere NUL"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1433 builtin/gc.c:538
-#: builtin/worktree.c:507
+#: builtin/check-ignore.c:21 builtin/checkout.c:1433 builtin/gc.c:537
+#: builtin/worktree.c:506
 msgid "suppress progress reporting"
 msgstr "non visualizzare l'avanzamento dell'operazione"
 
@@ -10326,7 +10370,7 @@
 #: builtin/checkout-index.c:178 builtin/column.c:31
 #: builtin/submodule--helper.c:1373 builtin/submodule--helper.c:1376
 #: builtin/submodule--helper.c:1384 builtin/submodule--helper.c:1857
-#: builtin/worktree.c:680
+#: builtin/worktree.c:679
 msgid "string"
 msgstr "stringa"
 
@@ -10354,100 +10398,100 @@
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<opzioni>] [--source=<branch>] <file>..."
 
-#: builtin/checkout.c:172 builtin/checkout.c:211
+#: builtin/checkout.c:173 builtin/checkout.c:212
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "il percorso '%s' non ha la nostra versione"
 
-#: builtin/checkout.c:174 builtin/checkout.c:213
+#: builtin/checkout.c:175 builtin/checkout.c:214
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "il percorso '%s' non ha la loro versione"
 
-#: builtin/checkout.c:190
+#: builtin/checkout.c:191
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "il percorso '%s' non ha tutte le versioni necessarie"
 
-#: builtin/checkout.c:240
+#: builtin/checkout.c:241
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "il percorso '%s' non ha le versioni necessarie"
 
-#: builtin/checkout.c:258
+#: builtin/checkout.c:259
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "percorso '%s': impossibile eseguire il merge"
 
-#: builtin/checkout.c:274
+#: builtin/checkout.c:275
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "Impossibile aggiungere il risultato del merge per '%s'"
 
-#: builtin/checkout.c:374
+#: builtin/checkout.c:375
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "Ricreato %d conflitto di merge"
 msgstr[1] "Ricreati %d conflitti di merge"
 
-#: builtin/checkout.c:379
+#: builtin/checkout.c:380
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "Aggiornato %d percorso da %s"
 msgstr[1] "Aggiornati %d percorsi da %s"
 
-#: builtin/checkout.c:386
+#: builtin/checkout.c:387
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "Aggiornato %d percorso dall'indice"
 msgstr[1] "Aggiornati %d percorsi dall'indice"
 
-#: builtin/checkout.c:409 builtin/checkout.c:412 builtin/checkout.c:415
-#: builtin/checkout.c:419
+#: builtin/checkout.c:410 builtin/checkout.c:413 builtin/checkout.c:416
+#: builtin/checkout.c:420
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "'%s' non può essere usato con i percorsi in fase di aggiornamento"
 
-#: builtin/checkout.c:422 builtin/checkout.c:425
+#: builtin/checkout.c:423 builtin/checkout.c:426
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr "'%s' non può essere usato con %s"
 
-#: builtin/checkout.c:429
+#: builtin/checkout.c:430
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr ""
 "Impossibile aggiornare dei percorsi e passare al branch '%s' "
 "contemporaneamente."
 
-#: builtin/checkout.c:433
+#: builtin/checkout.c:434
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "né '%s' né '%s' sono stati specificati"
 
-#: builtin/checkout.c:437
+#: builtin/checkout.c:438
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "'%s' dev'essere usato quando '%s' non è specificato"
 
-#: builtin/checkout.c:442 builtin/checkout.c:447
+#: builtin/checkout.c:443 builtin/checkout.c:448
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "'%s' o '%s' non possono essere usati con %s"
 
-#: builtin/checkout.c:506 builtin/checkout.c:513
+#: builtin/checkout.c:507 builtin/checkout.c:514
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "il percorso '%s' non è stato sottoposto a merge"
 
-#: builtin/checkout.c:679
+#: builtin/checkout.c:680
 msgid "you need to resolve your current index first"
 msgstr "prima devi risolvere l'indice corrente"
 
-#: builtin/checkout.c:729
+#: builtin/checkout.c:730
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -10456,11 +10500,6 @@
 "impossibile continuare con modifiche in stage nei file seguenti:\n"
 "%s"
 
-#: builtin/checkout.c:736
-#, c-format
-msgid "staged changes in the following files may be lost: %s"
-msgstr "le modifiche in stage nei seguenti file potrebbero andare perdute: %s"
-
 #: builtin/checkout.c:833
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
@@ -10470,7 +10509,7 @@
 msgid "HEAD is now at"
 msgstr "HEAD si trova ora a"
 
-#: builtin/checkout.c:879 builtin/clone.c:714
+#: builtin/checkout.c:879 builtin/clone.c:713
 msgid "unable to update HEAD"
 msgstr "impossibile aggiornare HEAD"
 
@@ -10584,7 +10623,7 @@
 "'%s' potrebbe essere sia un file locale, sia un branch da tracciare.\n"
 "Usa -- (e facoltativamente --no-guess) per rimuovere l'ambiguità"
 
-#: builtin/checkout.c:1243 builtin/worktree.c:291 builtin/worktree.c:456
+#: builtin/checkout.c:1243 builtin/worktree.c:290 builtin/worktree.c:455
 #, c-format
 msgid "invalid reference: %s"
 msgstr "riferimento non valido: %s"
@@ -10687,9 +10726,9 @@
 msgid "missing branch or commit argument"
 msgstr "argomento branch o commit mancante"
 
-#: builtin/checkout.c:1437 builtin/clone.c:91 builtin/fetch.c:151
-#: builtin/merge.c:285 builtin/pull.c:137 builtin/push.c:575
-#: builtin/send-pack.c:174
+#: builtin/checkout.c:1437 builtin/clone.c:90 builtin/commit-graph.c:59
+#: builtin/commit-graph.c:180 builtin/fetch.c:166 builtin/merge.c:285
+#: builtin/pull.c:138 builtin/push.c:562 builtin/send-pack.c:174
 msgid "force progress reporting"
 msgstr "forza l'indicazione d'avanzamento dell'operazione"
 
@@ -10697,7 +10736,7 @@
 msgid "perform a 3-way merge with the new branch"
 msgstr "esegui un merge a tre vie con il nuovo branch"
 
-#: builtin/checkout.c:1439 builtin/log.c:1617 parse-options.h:318
+#: builtin/checkout.c:1439 builtin/log.c:1618 parse-options.h:318
 msgid "style"
 msgstr "stile"
 
@@ -10705,7 +10744,7 @@
 msgid "conflict style (merge or diff3)"
 msgstr "stile conflitti (merge o diff3)"
 
-#: builtin/checkout.c:1452 builtin/worktree.c:504
+#: builtin/checkout.c:1452 builtin/worktree.c:503
 msgid "detach HEAD at named commit"
 msgstr "scollega l'HEAD al commit specificato"
 
@@ -10828,9 +10867,9 @@
 "rispetto a un particolare remoto, ad es. 'origin', potresti voler\n"
 "impostare checkout.defaultRemote=origin nel tuo file di configurazione."
 
-#: builtin/checkout.c:1691 builtin/checkout.c:1693 builtin/checkout.c:1733
-#: builtin/checkout.c:1735 builtin/clone.c:121 builtin/remote.c:169
-#: builtin/remote.c:171 builtin/worktree.c:500 builtin/worktree.c:502
+#: builtin/checkout.c:1691 builtin/checkout.c:1693 builtin/checkout.c:1742
+#: builtin/checkout.c:1744 builtin/clone.c:120 builtin/remote.c:169
+#: builtin/remote.c:171 builtin/worktree.c:499 builtin/worktree.c:501
 msgid "branch"
 msgstr "branch"
 
@@ -10854,39 +10893,39 @@
 msgid "use overlay mode (default)"
 msgstr "usa modalità overlay (impostazione predefinita)"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1743
 msgid "create and switch to a new branch"
 msgstr "crea un nuovo branch e passa a quest'ultimo"
 
-#: builtin/checkout.c:1736
+#: builtin/checkout.c:1745
 msgid "create/reset and switch to a branch"
 msgstr "crea/reimposta un branch e passa a quest'ultimo"
 
-#: builtin/checkout.c:1738
+#: builtin/checkout.c:1747
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "prevedi 'git switch <branch inesistente>'"
 
-#: builtin/checkout.c:1740
+#: builtin/checkout.c:1749
 msgid "throw away local modifications"
 msgstr "scarta le modifiche locali"
 
-#: builtin/checkout.c:1772
+#: builtin/checkout.c:1781
 msgid "which tree-ish to checkout from"
 msgstr "albero da cui eseguire il checkout"
 
-#: builtin/checkout.c:1774
+#: builtin/checkout.c:1783
 msgid "restore the index"
 msgstr "ripristina l'indice"
 
-#: builtin/checkout.c:1776
+#: builtin/checkout.c:1785
 msgid "restore the working tree (default)"
 msgstr "ripristina l'albero di lavoro (impostazione predefinita)"
 
-#: builtin/checkout.c:1778
+#: builtin/checkout.c:1787
 msgid "ignore unmerged entries"
 msgstr "ignora voci non sottoposte a merge"
 
-#: builtin/checkout.c:1779
+#: builtin/checkout.c:1788
 msgid "use overlay mode"
 msgstr "usa modalità overlay"
 
@@ -10927,7 +10966,7 @@
 msgid "could not lstat %s\n"
 msgstr "impossibile eseguire l'lstat di %s\n"
 
-#: builtin/clean.c:300 git-add--interactive.perl:593
+#: builtin/clean.c:301 git-add--interactive.perl:593
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -10940,7 +10979,7 @@
 "pippo      - seleziona un elemento basandoti su un prefisso univoco\n"
 "           - (vuoto) non selezionare niente\n"
 
-#: builtin/clean.c:304 git-add--interactive.perl:602
+#: builtin/clean.c:305 git-add--interactive.perl:602
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -10961,38 +11000,38 @@
 "*          - seleziona tutti gli elementi\n"
 "           - (vuoto) termina il processo di selezione\n"
 
-#: builtin/clean.c:520 git-add--interactive.perl:568
+#: builtin/clean.c:521 git-add--interactive.perl:568
 #: git-add--interactive.perl:573
 #, c-format, perl-format
 msgid "Huh (%s)?\n"
 msgstr "Eh (%s)?\n"
 
-#: builtin/clean.c:662
+#: builtin/clean.c:663
 #, c-format
 msgid "Input ignore patterns>> "
 msgstr "Immetti i pattern da ignorare>> "
 
-#: builtin/clean.c:699
+#: builtin/clean.c:700
 #, c-format
 msgid "WARNING: Cannot find items matched by: %s"
 msgstr "ATTENZIONE: Impossibile trovare elementi corrispondenti a %s"
 
-#: builtin/clean.c:720
+#: builtin/clean.c:721
 msgid "Select items to delete"
 msgstr "Seleziona gli elementi da eliminare"
 
 #. TRANSLATORS: Make sure to keep [y/N] as is
-#: builtin/clean.c:761
+#: builtin/clean.c:762
 #, c-format
 msgid "Remove %s [y/N]? "
 msgstr "Eliminare %s [y/N]? "
 
-#: builtin/clean.c:786 git-add--interactive.perl:1763
+#: builtin/clean.c:787 git-add--interactive.perl:1763
 #, c-format
 msgid "Bye.\n"
 msgstr "Ciao.\n"
 
-#: builtin/clean.c:794
+#: builtin/clean.c:795
 msgid ""
 "clean               - start cleaning\n"
 "filter by pattern   - exclude items from deletion\n"
@@ -11011,64 +11050,64 @@
 "help                - visualizza questa schermata\n"
 "?                   - guida al prompt di selezione"
 
-#: builtin/clean.c:821 git-add--interactive.perl:1849
+#: builtin/clean.c:822 git-add--interactive.perl:1849
 msgid "*** Commands ***"
 msgstr "*** Comandi ***"
 
-#: builtin/clean.c:822 git-add--interactive.perl:1846
+#: builtin/clean.c:823 git-add--interactive.perl:1846
 msgid "What now"
 msgstr "Cosa faccio ora"
 
-#: builtin/clean.c:830
+#: builtin/clean.c:831
 msgid "Would remove the following item:"
 msgid_plural "Would remove the following items:"
 msgstr[0] "Eliminerei il seguente elemento:"
 msgstr[1] "Eliminerei i seguenti elementi:"
 
-#: builtin/clean.c:846
+#: builtin/clean.c:847
 msgid "No more files to clean, exiting."
 msgstr "Non ci sono più file da ripulire, esco."
 
-#: builtin/clean.c:908
+#: builtin/clean.c:909
 msgid "do not print names of files removed"
 msgstr "non stampare i nomi dei file eliminati"
 
-#: builtin/clean.c:910
+#: builtin/clean.c:911
 msgid "force"
 msgstr "forza l'operazione"
 
-#: builtin/clean.c:911
+#: builtin/clean.c:912
 msgid "interactive cleaning"
 msgstr "pulizia interattiva"
 
-#: builtin/clean.c:913
+#: builtin/clean.c:914
 msgid "remove whole directories"
 msgstr "rimuovi intere directory"
 
-#: builtin/clean.c:914 builtin/describe.c:546 builtin/describe.c:548
-#: builtin/grep.c:899 builtin/log.c:176 builtin/log.c:178
-#: builtin/ls-files.c:557 builtin/name-rev.c:413 builtin/name-rev.c:415
+#: builtin/clean.c:915 builtin/describe.c:548 builtin/describe.c:550
+#: builtin/grep.c:901 builtin/log.c:176 builtin/log.c:178
+#: builtin/ls-files.c:557 builtin/name-rev.c:417 builtin/name-rev.c:419
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr "pattern"
 
-#: builtin/clean.c:915
+#: builtin/clean.c:916
 msgid "add <pattern> to ignore rules"
 msgstr "aggiungi <pattern> alle regole usate per ignorare i file"
 
-#: builtin/clean.c:916
+#: builtin/clean.c:917
 msgid "remove ignored files, too"
 msgstr "elimina anche i file ignorati"
 
-#: builtin/clean.c:918
+#: builtin/clean.c:919
 msgid "remove only ignored files"
 msgstr "elimina solo i file ignorati"
 
-#: builtin/clean.c:936
+#: builtin/clean.c:937
 msgid "-x and -X cannot be used together"
 msgstr "-x e -X non possono essere usati insieme"
 
-#: builtin/clean.c:940
+#: builtin/clean.c:941
 msgid ""
 "clean.requireForce set to true and neither -i, -n, nor -f given; refusing to "
 "clean"
@@ -11076,7 +11115,7 @@
 "clean.requireForce è impostato a true e né -i, né -n, né -f sono stati "
 "specificati; mi rifiuto di eseguire la pulizia"
 
-#: builtin/clean.c:943
+#: builtin/clean.c:944
 msgid ""
 "clean.requireForce defaults to true and neither -i, -n, nor -f given; "
 "refusing to clean"
@@ -11084,164 +11123,164 @@
 "clean.requireForce è true per impostazione predefinita e né -i, né -n, né -f "
 "sono stati specificati; mi rifiuto di eseguire la pulizia"
 
-#: builtin/clone.c:46
+#: builtin/clone.c:45
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<opzioni>] [--] <repository> [<directory>]"
 
-#: builtin/clone.c:93
+#: builtin/clone.c:92
 msgid "don't create a checkout"
 msgstr "non creare un checkout"
 
-#: builtin/clone.c:94 builtin/clone.c:96 builtin/init-db.c:489
+#: builtin/clone.c:93 builtin/clone.c:95 builtin/init-db.c:489
 msgid "create a bare repository"
 msgstr "crea un repository spoglio"
 
-#: builtin/clone.c:98
+#: builtin/clone.c:97
 msgid "create a mirror repository (implies bare)"
 msgstr "crea un repository mirror (implica che sia spoglio)"
 
-#: builtin/clone.c:100
+#: builtin/clone.c:99
 msgid "to clone from a local repository"
 msgstr "per clonare da un repository locale"
 
-#: builtin/clone.c:102
+#: builtin/clone.c:101
 msgid "don't use local hardlinks, always copy"
 msgstr "non usare i collegamenti reali locali, copia sempre i file"
 
-#: builtin/clone.c:104
+#: builtin/clone.c:103
 msgid "setup as shared repository"
 msgstr "imposta il repository come condiviso"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:106
 msgid "pathspec"
 msgstr "specificatore percorso"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:106
 msgid "initialize submodules in the clone"
 msgstr "inizializza sottomoduli durante la clonazione"
 
-#: builtin/clone.c:110
+#: builtin/clone.c:109
 msgid "number of submodules cloned in parallel"
 msgstr "numero di sottomoduli clonati in parallelo"
 
-#: builtin/clone.c:111 builtin/init-db.c:486
+#: builtin/clone.c:110 builtin/init-db.c:486
 msgid "template-directory"
 msgstr "directory modelli"
 
-#: builtin/clone.c:112 builtin/init-db.c:487
+#: builtin/clone.c:111 builtin/init-db.c:487
 msgid "directory from which templates will be used"
 msgstr "directory da cui saranno recuperati i modelli"
 
-#: builtin/clone.c:114 builtin/clone.c:116 builtin/submodule--helper.c:1380
+#: builtin/clone.c:113 builtin/clone.c:115 builtin/submodule--helper.c:1380
 #: builtin/submodule--helper.c:1860
 msgid "reference repository"
 msgstr "repository di riferimento"
 
-#: builtin/clone.c:118 builtin/submodule--helper.c:1382
+#: builtin/clone.c:117 builtin/submodule--helper.c:1382
 #: builtin/submodule--helper.c:1862
 msgid "use --reference only while cloning"
 msgstr "usa --reference solo durante la clonazione"
 
-#: builtin/clone.c:119 builtin/column.c:27 builtin/merge-file.c:46
-#: builtin/pack-objects.c:3314 builtin/repack.c:319
+#: builtin/clone.c:118 builtin/column.c:27 builtin/merge-file.c:46
+#: builtin/pack-objects.c:3294 builtin/repack.c:320
 msgid "name"
 msgstr "nome"
 
-#: builtin/clone.c:120
+#: builtin/clone.c:119
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "usa <nome> anziché 'origin' per tracciare l'upstream"
 
-#: builtin/clone.c:122
+#: builtin/clone.c:121
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "esegui il checkout di <branch> anziché dell'HEAD del remoto"
 
-#: builtin/clone.c:124
+#: builtin/clone.c:123
 msgid "path to git-upload-pack on the remote"
 msgstr "percorso al comando remoto git-upload-pack"
 
-#: builtin/clone.c:125 builtin/fetch.c:152 builtin/grep.c:838
-#: builtin/pull.c:226
+#: builtin/clone.c:124 builtin/fetch.c:167 builtin/grep.c:840
+#: builtin/pull.c:227
 msgid "depth"
 msgstr "profondità"
 
-#: builtin/clone.c:126
+#: builtin/clone.c:125
 msgid "create a shallow clone of that depth"
 msgstr "crea un clone shallow con questa profondità"
 
-#: builtin/clone.c:127 builtin/fetch.c:154 builtin/pack-objects.c:3303
+#: builtin/clone.c:126 builtin/fetch.c:169 builtin/pack-objects.c:3283
 msgid "time"
 msgstr "tempo"
 
-#: builtin/clone.c:128
+#: builtin/clone.c:127
 msgid "create a shallow clone since a specific time"
 msgstr "crea un clone shallow a partire dall'istante specificato"
 
-#: builtin/clone.c:129 builtin/fetch.c:156 builtin/fetch.c:179
-#: builtin/rebase.c:1395
+#: builtin/clone.c:128 builtin/fetch.c:171 builtin/fetch.c:194
+#: builtin/rebase.c:1417
 msgid "revision"
 msgstr "revisione"
 
-#: builtin/clone.c:130 builtin/fetch.c:157
+#: builtin/clone.c:129 builtin/fetch.c:172
 msgid "deepen history of shallow clone, excluding rev"
 msgstr ""
 "aumenta la profondità della cronologia del clone shallow fino alla revisione "
 "specificata esclusa"
 
-#: builtin/clone.c:132
+#: builtin/clone.c:131
 msgid "clone only one branch, HEAD or --branch"
 msgstr "clona solo un branch, HEAD o quello specificato con --branch"
 
-#: builtin/clone.c:134
+#: builtin/clone.c:133
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr "non clonare alcun tag e fai sì che i fetch successivi non li seguano"
 
-#: builtin/clone.c:136
+#: builtin/clone.c:135
 msgid "any cloned submodules will be shallow"
 msgstr "tutti i sottomoduli clonati saranno shallow"
 
-#: builtin/clone.c:137 builtin/init-db.c:495
+#: builtin/clone.c:136 builtin/init-db.c:495
 msgid "gitdir"
 msgstr "directory Git"
 
-#: builtin/clone.c:138 builtin/init-db.c:496
+#: builtin/clone.c:137 builtin/init-db.c:496
 msgid "separate git dir from working tree"
 msgstr "separa la directory Git dall'albero di lavoro"
 
-#: builtin/clone.c:139
+#: builtin/clone.c:138
 msgid "key=value"
 msgstr "chiave=valore"
 
-#: builtin/clone.c:140
+#: builtin/clone.c:139
 msgid "set config inside the new repository"
 msgstr "imposta la configurazione nel nuovo repository"
 
-#: builtin/clone.c:142 builtin/fetch.c:174 builtin/ls-remote.c:76
-#: builtin/push.c:585 builtin/send-pack.c:172
+#: builtin/clone.c:141 builtin/fetch.c:189 builtin/ls-remote.c:76
+#: builtin/push.c:572 builtin/send-pack.c:172
 msgid "server-specific"
 msgstr "specifica del server"
 
-#: builtin/clone.c:142 builtin/fetch.c:174 builtin/ls-remote.c:76
-#: builtin/push.c:585 builtin/send-pack.c:173
+#: builtin/clone.c:141 builtin/fetch.c:189 builtin/ls-remote.c:76
+#: builtin/push.c:572 builtin/send-pack.c:173
 msgid "option to transmit"
 msgstr "opzione da trasmettere"
 
-#: builtin/clone.c:143 builtin/fetch.c:175 builtin/pull.c:239
-#: builtin/push.c:586
+#: builtin/clone.c:142 builtin/fetch.c:190 builtin/pull.c:240
+#: builtin/push.c:573
 msgid "use IPv4 addresses only"
 msgstr "usa solo indirizzi IPv4"
 
-#: builtin/clone.c:145 builtin/fetch.c:177 builtin/pull.c:242
-#: builtin/push.c:588
+#: builtin/clone.c:144 builtin/fetch.c:192 builtin/pull.c:243
+#: builtin/push.c:575
 msgid "use IPv6 addresses only"
 msgstr "usa solo indirizzi IPv6"
 
-#: builtin/clone.c:149
+#: builtin/clone.c:148
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr ""
 "tutti i sottomoduli clonati useranno il loro rispettivo branch remoto "
 "tracciato"
 
-#: builtin/clone.c:285
+#: builtin/clone.c:284
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -11249,47 +11288,42 @@
 "Non è stato possibile indovinare alcun nome directory.\n"
 "Specifica una directory tramite la riga di comando"
 
-#: builtin/clone.c:338
+#: builtin/clone.c:337
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "informazione: Impossibile aggiungere un alternato a '%s': %s\n"
 
-#: builtin/clone.c:411
+#: builtin/clone.c:410
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s esiste e non è una directory"
 
-#: builtin/clone.c:428
+#: builtin/clone.c:427
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "impossibile avviare l'iteratore su '%s'"
 
-#: builtin/clone.c:453
-#, c-format
-msgid "failed to unlink '%s'"
-msgstr "unlink di '%s' non riuscito"
-
-#: builtin/clone.c:458
+#: builtin/clone.c:457
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "creazione del collegamento '%s' non riuscita"
 
-#: builtin/clone.c:462
+#: builtin/clone.c:461
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "copia del file in '%s' non riuscita"
 
-#: builtin/clone.c:467
+#: builtin/clone.c:466
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "iterazione su '%s' non riuscita"
 
-#: builtin/clone.c:492
+#: builtin/clone.c:491
 #, c-format
 msgid "done.\n"
 msgstr "fatto.\n"
 
-#: builtin/clone.c:506
+#: builtin/clone.c:505
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -11300,98 +11334,98 @@
 "con 'git status' e riprovare ad eseguire il checkout con\n"
 "'git restore --source=HEAD :/'\n"
 
-#: builtin/clone.c:583
+#: builtin/clone.c:582
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "Impossibile trovare il branch remoto %s da clonare."
 
-#: builtin/clone.c:702
+#: builtin/clone.c:701
 #, c-format
 msgid "unable to update %s"
 msgstr "impossibile aggiornare %s"
 
-#: builtin/clone.c:752
+#: builtin/clone.c:751
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 "l'HEAD remoto fa riferimento a un riferimento inesistente, impossibile "
 "eseguire il checkout.\n"
 
-#: builtin/clone.c:783
+#: builtin/clone.c:782
 msgid "unable to checkout working tree"
 msgstr "impossibile eseguire il checkout dell'albero di lavoro"
 
-#: builtin/clone.c:833
+#: builtin/clone.c:832
 msgid "unable to write parameters to config file"
 msgstr "impossibile scrivere i parametri nel file di configurazione"
 
-#: builtin/clone.c:896
+#: builtin/clone.c:895
 msgid "cannot repack to clean up"
 msgstr "impossibile eseguire il repack per pulire l'area di lavoro"
 
-#: builtin/clone.c:898
+#: builtin/clone.c:897
 msgid "cannot unlink temporary alternates file"
 msgstr "impossibile eseguire l'unlink del file alternates temporaneo"
 
-#: builtin/clone.c:938 builtin/receive-pack.c:1950
+#: builtin/clone.c:937 builtin/receive-pack.c:1948
 msgid "Too many arguments."
 msgstr "Troppi argomenti."
 
-#: builtin/clone.c:942
+#: builtin/clone.c:941
 msgid "You must specify a repository to clone."
 msgstr "Devi specificare un repository da clonare."
 
-#: builtin/clone.c:955
+#: builtin/clone.c:954
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "le opzioni --bare e --origin %s non sono compatibili."
 
-#: builtin/clone.c:958
+#: builtin/clone.c:957
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "le opzioni --bare e --separate-git-dir non sono compatibili."
 
-#: builtin/clone.c:971
+#: builtin/clone.c:970
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "il repository '%s' non esiste"
 
-#: builtin/clone.c:977 builtin/fetch.c:1660
+#: builtin/clone.c:976 builtin/fetch.c:1790
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "la profondità %s non è un numero positivo"
 
-#: builtin/clone.c:987
+#: builtin/clone.c:986
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr ""
 "il percorso di destinazione '%s' esiste già e non è una directory vuota."
 
-#: builtin/clone.c:997
+#: builtin/clone.c:996
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "l'albero di lavoro '%s' esiste già."
 
-#: builtin/clone.c:1012 builtin/clone.c:1033 builtin/difftool.c:264
-#: builtin/worktree.c:303 builtin/worktree.c:335
+#: builtin/clone.c:1011 builtin/clone.c:1032 builtin/difftool.c:271
+#: builtin/log.c:1785 builtin/worktree.c:302 builtin/worktree.c:334
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "impossibile creare le prime directory di '%s'"
 
-#: builtin/clone.c:1017
+#: builtin/clone.c:1016
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "impossibile creare la directory dell'albero di lavoro '%s'"
 
-#: builtin/clone.c:1037
+#: builtin/clone.c:1036
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Clone nel repository spoglio '%s' in corso...\n"
 
-#: builtin/clone.c:1039
+#: builtin/clone.c:1038
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Clone in '%s' in corso...\n"
 
-#: builtin/clone.c:1063
+#: builtin/clone.c:1062
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
@@ -11399,36 +11433,36 @@
 "il clone --recursive non è compatibile né con --reference né con --reference-"
 "if-able"
 
-#: builtin/clone.c:1124
+#: builtin/clone.c:1123
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "L'opzione --depth è ignorata nei cloni locali; usa file://."
 
-#: builtin/clone.c:1126
+#: builtin/clone.c:1125
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr "L'opzione --shallow-since è ignorata nei cloni locali; usa file://."
 
-#: builtin/clone.c:1128
+#: builtin/clone.c:1127
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr "L'opzione --shallow-exclude è ignorata nei cloni locali; usa file://."
 
-#: builtin/clone.c:1130
+#: builtin/clone.c:1129
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr "L'opzione --filter è ignorata nei cloni locali; usa file://."
 
-#: builtin/clone.c:1133
+#: builtin/clone.c:1132
 msgid "source repository is shallow, ignoring --local"
 msgstr "il repository sorgente è shallow, ignoro l'opzione --local"
 
-#: builtin/clone.c:1138
+#: builtin/clone.c:1137
 msgid "--local is ignored"
 msgstr "l'opzione --local è ignorata"
 
-#: builtin/clone.c:1215 builtin/clone.c:1223
+#: builtin/clone.c:1212 builtin/clone.c:1220
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "Il branch remoto %s non è stato trovato nell'upstream %s"
 
-#: builtin/clone.c:1226
+#: builtin/clone.c:1223
 msgid "You appear to have cloned an empty repository."
 msgstr "Sembra che tu abbia clonato un repository vuoto."
 
@@ -11506,7 +11540,7 @@
 msgstr "ID di un oggetto commit genitore"
 
 #: builtin/commit-tree.c:114 builtin/commit.c:1500 builtin/merge.c:270
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1460
+#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1469
 #: builtin/tag.c:412
 msgid "message"
 msgstr "messaggio"
@@ -11520,7 +11554,7 @@
 msgstr "leggi il messaggio di log del commit da un file"
 
 #: builtin/commit-tree.c:121 builtin/commit.c:1512 builtin/merge.c:287
-#: builtin/pull.c:194 builtin/revert.c:118
+#: builtin/pull.c:195 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "firma il commit con GPG"
 
@@ -11852,8 +11886,8 @@
 msgid "version"
 msgstr "versione"
 
-#: builtin/commit.c:1347 builtin/commit.c:1529 builtin/push.c:561
-#: builtin/worktree.c:651
+#: builtin/commit.c:1347 builtin/commit.c:1529 builtin/push.c:548
+#: builtin/worktree.c:650
 msgid "machine-readable output"
 msgstr "output leggibile da una macchina"
 
@@ -11866,8 +11900,8 @@
 msgstr "termina le voci con NUL"
 
 #: builtin/commit.c:1355 builtin/commit.c:1359 builtin/commit.c:1537
-#: builtin/fast-export.c:1125 builtin/fast-export.c:1128
-#: builtin/fast-export.c:1131 builtin/rebase.c:1471 parse-options.h:332
+#: builtin/fast-export.c:1153 builtin/fast-export.c:1156
+#: builtin/fast-export.c:1159 builtin/rebase.c:1495 parse-options.h:332
 msgid "mode"
 msgstr "modo"
 
@@ -11885,7 +11919,7 @@
 "visualizza file ignorati, modalità facoltative: traditional, matching, no. "
 "(Impostazione predefinita: traditional)"
 
-#: builtin/commit.c:1362 parse-options.h:179
+#: builtin/commit.c:1362 parse-options.h:188
 msgid "when"
 msgstr "quando"
 
@@ -11940,7 +11974,7 @@
 msgid "override author for commit"
 msgstr "sovrascrivi l'autore per il commit"
 
-#: builtin/commit.c:1499 builtin/gc.c:539
+#: builtin/commit.c:1499 builtin/gc.c:538
 msgid "date"
 msgstr "data"
 
@@ -11976,8 +12010,8 @@
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr "il commit ora ha me come autore (opzione usata con -C/-c/--amend)"
 
-#: builtin/commit.c:1506 builtin/log.c:1564 builtin/merge.c:289
-#: builtin/pull.c:163 builtin/revert.c:110
+#: builtin/commit.c:1506 builtin/log.c:1565 builtin/merge.c:289
+#: builtin/pull.c:164 builtin/revert.c:110
 msgid "add Signed-off-by:"
 msgstr "aggiungi Signed-off-by:"
 
@@ -12086,67 +12120,70 @@
 msgstr "git commit-graph read [--object-dir <directory oggetti>]"
 
 #: builtin/commit-graph.c:13 builtin/commit-graph.c:19
-msgid "git commit-graph verify [--object-dir <objdir>] [--shallow]"
-msgstr "git commit-graph verify [--object-dir <directory oggetti>] [--shallow]"
+msgid ""
+"git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
+msgstr ""
+"git commit-graph verify [--object-dir <directory oggetti>] [--shallow] [--"
+"[no-]progress]"
 
 #: builtin/commit-graph.c:14 builtin/commit-graph.c:29
 msgid ""
 "git commit-graph write [--object-dir <objdir>] [--append|--split] [--"
-"reachable|--stdin-packs|--stdin-commits] <split options>"
+"reachable|--stdin-packs|--stdin-commits] [--[no-]progress] <split options>"
 msgstr ""
 "git commit-graph write [--object-dir <directory oggetti>] [--append|--split] "
-"[--reachable|--stdin-packs|--stdin-commits] <opzioni split>"
+"[--reachable|--stdin-packs|--stdin-commits] [--[no-]progress] <opzioni split>"
 
-#: builtin/commit-graph.c:54 builtin/commit-graph.c:100
-#: builtin/commit-graph.c:161 builtin/commit-graph.c:237 builtin/fetch.c:163
-#: builtin/log.c:1584
+#: builtin/commit-graph.c:55 builtin/commit-graph.c:107
+#: builtin/commit-graph.c:170 builtin/commit-graph.c:254 builtin/fetch.c:178
+#: builtin/log.c:1585
 msgid "dir"
 msgstr "directory"
 
-#: builtin/commit-graph.c:55 builtin/commit-graph.c:101
-#: builtin/commit-graph.c:162 builtin/commit-graph.c:238
+#: builtin/commit-graph.c:56 builtin/commit-graph.c:108
+#: builtin/commit-graph.c:171 builtin/commit-graph.c:255
 msgid "The object directory to store the graph"
 msgstr "La directory oggetti in cui memorizzare il grafo"
 
-#: builtin/commit-graph.c:57
+#: builtin/commit-graph.c:58
 msgid "if the commit-graph is split, only verify the tip file"
 msgstr "se il grafo dei commit è diviso, verifica solo l'ultimo file"
 
-#: builtin/commit-graph.c:73 builtin/commit-graph.c:116
+#: builtin/commit-graph.c:80 builtin/commit-graph.c:125
 #, c-format
 msgid "Could not open commit-graph '%s'"
 msgstr "Impossibile aprire il grafo dei commit '%s'"
 
-#: builtin/commit-graph.c:164
+#: builtin/commit-graph.c:173
 msgid "start walk at all refs"
 msgstr "inizia la visita da tutti i riferimenti"
 
-#: builtin/commit-graph.c:166
+#: builtin/commit-graph.c:175
 msgid "scan pack-indexes listed by stdin for commits"
 msgstr ""
 "esamina i pack-index elencati sullo standard input alla ricerca di commit"
 
-#: builtin/commit-graph.c:168
+#: builtin/commit-graph.c:177
 msgid "start walk at commits listed by stdin"
 msgstr "inizia la visita ai commit elencati sullo standard input"
 
-#: builtin/commit-graph.c:170
+#: builtin/commit-graph.c:179
 msgid "include all commits already in the commit-graph file"
 msgstr "includi tutti i commit già presenti nel file commit-graph"
 
-#: builtin/commit-graph.c:172
+#: builtin/commit-graph.c:182
 msgid "allow writing an incremental commit-graph file"
 msgstr "consenti la scrittura di un file grafo dei commit incrementale"
 
-#: builtin/commit-graph.c:174 builtin/commit-graph.c:178
+#: builtin/commit-graph.c:184 builtin/commit-graph.c:188
 msgid "maximum number of commits in a non-base split commit-graph"
 msgstr "numero massimo di commit in un grafo dei commit diviso non di base"
 
-#: builtin/commit-graph.c:176
+#: builtin/commit-graph.c:186
 msgid "maximum ratio between two levels of a split commit-graph"
 msgstr "rapporto massimo fra due livelli di un grafo dei commit diviso"
 
-#: builtin/commit-graph.c:191
+#: builtin/commit-graph.c:204
 msgid "use at most one of --reachable, --stdin-commits, or --stdin-packs"
 msgstr "usa al più un'opzione fra --reachable, --stdin-commits o --stdin-packs"
 
@@ -12468,59 +12505,59 @@
 msgid "print sizes in human readable format"
 msgstr "stampa le dimensioni in un formato leggibile"
 
-#: builtin/describe.c:27
+#: builtin/describe.c:26
 msgid "git describe [<options>] [<commit-ish>...]"
 msgstr "git describe [<opzioni>] [<espressione commit>...]"
 
-#: builtin/describe.c:28
+#: builtin/describe.c:27
 msgid "git describe [<options>] --dirty"
 msgstr "git describe [<opzioni>] --dirty"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "head"
 msgstr "head"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "lightweight"
 msgstr "leggero"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "annotated"
 msgstr "annotato"
 
-#: builtin/describe.c:273
+#: builtin/describe.c:275
 #, c-format
 msgid "annotated tag %s not available"
 msgstr "il tag annotato %s non è disponibile"
 
-#: builtin/describe.c:277
+#: builtin/describe.c:279
 #, c-format
 msgid "annotated tag %s has no embedded name"
 msgstr "il tag annotato %s non ha un nome incorporato"
 
-#: builtin/describe.c:279
+#: builtin/describe.c:281
 #, c-format
 msgid "tag '%s' is really '%s' here"
 msgstr "il tag '%s' in realtà qui è '%s'"
 
-#: builtin/describe.c:323
+#: builtin/describe.c:325
 #, c-format
 msgid "no tag exactly matches '%s'"
 msgstr "nessun tag corrisponde esattamente a '%s'"
 
-#: builtin/describe.c:325
+#: builtin/describe.c:327
 #, c-format
 msgid "No exact match on refs or tags, searching to describe\n"
 msgstr ""
 "Nessuna corrispondenza esatta sui riferimenti o sui tag, sto eseguendo una "
 "ricerca per descrivere il commit\n"
 
-#: builtin/describe.c:379
+#: builtin/describe.c:381
 #, c-format
 msgid "finished search at %s\n"
 msgstr "ricerca terminata in %s\n"
 
-#: builtin/describe.c:405
+#: builtin/describe.c:407
 #, c-format
 msgid ""
 "No annotated tags can describe '%s'.\n"
@@ -12529,7 +12566,7 @@
 "Nessun tag annotato può descrivere '%s'.\n"
 "Ciò nonostante, c'erano dei tag non annotati: prova con --tags."
 
-#: builtin/describe.c:409
+#: builtin/describe.c:411
 #, c-format
 msgid ""
 "No tags can describe '%s'.\n"
@@ -12538,12 +12575,12 @@
 "Nessun tag può descrivere '%s'.\n"
 "Prova con --always o crea dei tag."
 
-#: builtin/describe.c:439
+#: builtin/describe.c:441
 #, c-format
 msgid "traversed %lu commits\n"
 msgstr "ho attraversato %lu commit\n"
 
-#: builtin/describe.c:442
+#: builtin/describe.c:444
 #, c-format
 msgid ""
 "more than %i tags found; listed %i most recent\n"
@@ -12552,94 +12589,94 @@
 "trovati più di %i tag; ho elencato i %i più recenti\n"
 "ho terminato la ricerca in %s\n"
 
-#: builtin/describe.c:510
+#: builtin/describe.c:512
 #, c-format
 msgid "describe %s\n"
 msgstr "descrivi %s\n"
 
-#: builtin/describe.c:513
+#: builtin/describe.c:515
 #, c-format
 msgid "Not a valid object name %s"
 msgstr "%s non è un nome oggetto valido"
 
-#: builtin/describe.c:521
+#: builtin/describe.c:523
 #, c-format
 msgid "%s is neither a commit nor blob"
 msgstr "%s non è né un commit né un blob"
 
-#: builtin/describe.c:535
+#: builtin/describe.c:537
 msgid "find the tag that comes after the commit"
 msgstr "trova il tag successivo al commit"
 
-#: builtin/describe.c:536
+#: builtin/describe.c:538
 msgid "debug search strategy on stderr"
 msgstr "esegui il debug della strategia di ricerca sullo standard error"
 
-#: builtin/describe.c:537
+#: builtin/describe.c:539
 msgid "use any ref"
 msgstr "usa qualunque riferimento"
 
-#: builtin/describe.c:538
+#: builtin/describe.c:540
 msgid "use any tag, even unannotated"
 msgstr "usa qualunque tag, anche quelli non annotati"
 
-#: builtin/describe.c:539
+#: builtin/describe.c:541
 msgid "always use long format"
 msgstr "usa sempre il formato lungo"
 
-#: builtin/describe.c:540
+#: builtin/describe.c:542
 msgid "only follow first parent"
 msgstr "segui solo il primo genitore"
 
-#: builtin/describe.c:543
+#: builtin/describe.c:545
 msgid "only output exact matches"
 msgstr "visualizza solo le corrispondenze esatte"
 
-#: builtin/describe.c:545
+#: builtin/describe.c:547
 msgid "consider <n> most recent tags (default: 10)"
 msgstr "considera gli <n> tag più recenti (impostazione predefinita: 10)"
 
-#: builtin/describe.c:547
+#: builtin/describe.c:549
 msgid "only consider tags matching <pattern>"
 msgstr "considera solo i tag corrispondenti al <pattern>"
 
-#: builtin/describe.c:549
+#: builtin/describe.c:551
 msgid "do not consider tags matching <pattern>"
 msgstr "non considerare i tag corrispondenti al <pattern>"
 
-#: builtin/describe.c:551 builtin/name-rev.c:422
+#: builtin/describe.c:553 builtin/name-rev.c:426
 msgid "show abbreviated commit object as fallback"
 msgstr "visualizza l'oggetto commit abbreviato come fallback"
 
-#: builtin/describe.c:552 builtin/describe.c:555
+#: builtin/describe.c:554 builtin/describe.c:557
 msgid "mark"
 msgstr "contrassegno"
 
-#: builtin/describe.c:553
+#: builtin/describe.c:555
 msgid "append <mark> on dirty working tree (default: \"-dirty\")"
 msgstr ""
 "aggiungi <contrassegno> all'albero di lavoro sporco (impostazione "
 "predefinita: \"-dirty\")"
 
-#: builtin/describe.c:556
+#: builtin/describe.c:558
 msgid "append <mark> on broken working tree (default: \"-broken\")"
 msgstr ""
 "aggiungi <contrassegno> all'albero di lavoro rotto (impostazione "
 "predefinita: \"-broken\")"
 
-#: builtin/describe.c:574
+#: builtin/describe.c:576
 msgid "--long is incompatible with --abbrev=0"
 msgstr "--long non è compatibile con --abbrev=0"
 
-#: builtin/describe.c:603
+#: builtin/describe.c:605
 msgid "No names found, cannot describe anything."
 msgstr "Nessun nome trovato, non è possibile descrivere nulla."
 
-#: builtin/describe.c:654
+#: builtin/describe.c:656
 msgid "--dirty is incompatible with commit-ishes"
 msgstr "--dirty non è compatibile con le espressioni commit"
 
-#: builtin/describe.c:656
+#: builtin/describe.c:658
 msgid "--broken is incompatible with commit-ishes"
 msgstr "--broken non è compatibile con le espressioni commit"
 
@@ -12676,27 +12713,27 @@
 msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
 msgstr "git difftool [<opzioni>] [<commit> [<commit>]] [--] [<percorso>...]"
 
-#: builtin/difftool.c:253
+#: builtin/difftool.c:260
 #, c-format
 msgid "failed: %d"
 msgstr "non riuscito: %d"
 
-#: builtin/difftool.c:295
+#: builtin/difftool.c:302
 #, c-format
 msgid "could not read symlink %s"
 msgstr "impossibile leggere il collegamento simbolico %s"
 
-#: builtin/difftool.c:297
+#: builtin/difftool.c:304
 #, c-format
 msgid "could not read symlink file %s"
 msgstr "impossibile leggere il file collegamento simbolico %s"
 
-#: builtin/difftool.c:305
+#: builtin/difftool.c:312
 #, c-format
 msgid "could not read object %s for symlink %s"
 msgstr "impossibile leggere l'oggetto %s per il collegamento simbolico %s"
 
-#: builtin/difftool.c:406
+#: builtin/difftool.c:413
 msgid ""
 "combined diff formats('-c' and '--cc') are not supported in\n"
 "directory diff mode('-d' and '--dir-diff')."
@@ -12704,54 +12741,54 @@
 "i formati diff combinati ('-c' e '--cc') non sono supportati in\n"
 "modalità diff directory ('-d' e '--dir-diff')."
 
-#: builtin/difftool.c:626
+#: builtin/difftool.c:634
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "entrambi i file risultano modificati: '%s' e '%s'."
 
-#: builtin/difftool.c:628
+#: builtin/difftool.c:636
 msgid "working tree file has been left."
 msgstr "il file nell'albero di lavoro è stato mantenuto."
 
-#: builtin/difftool.c:639
+#: builtin/difftool.c:647
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "esistono file temporanei in '%s'."
 
-#: builtin/difftool.c:640
+#: builtin/difftool.c:648
 msgid "you may want to cleanup or recover these."
 msgstr "potresti voler ripulirli o ripristinarli."
 
-#: builtin/difftool.c:689
+#: builtin/difftool.c:697
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr "usa `diff.guitool` anziché `diff.tool`"
 
-#: builtin/difftool.c:691
+#: builtin/difftool.c:699
 msgid "perform a full-directory diff"
 msgstr "esegui un diff directory completo"
 
-#: builtin/difftool.c:693
+#: builtin/difftool.c:701
 msgid "do not prompt before launching a diff tool"
 msgstr "non chiedere conferma prima di lanciare un tool diff"
 
-#: builtin/difftool.c:698
+#: builtin/difftool.c:706
 msgid "use symlinks in dir-diff mode"
 msgstr "usa collegamenti simbolici in modalità diff directory"
 
-#: builtin/difftool.c:699
+#: builtin/difftool.c:707
 msgid "tool"
 msgstr "strumento"
 
-#: builtin/difftool.c:700
+#: builtin/difftool.c:708
 msgid "use the specified diff tool"
 msgstr "usa lo strumento diff specificato"
 
-#: builtin/difftool.c:702
+#: builtin/difftool.c:710
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr ""
 "stampa un elenco di strumenti diff che possono essere usati con `--tool`"
 
-#: builtin/difftool.c:705
+#: builtin/difftool.c:713
 msgid ""
 "make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
 "code"
@@ -12759,31 +12796,31 @@
 "fai sì che 'git-difftool' esca quando uno strumento diff invocato "
 "restituisce un codice d'uscita diverso da zero"
 
-#: builtin/difftool.c:708
+#: builtin/difftool.c:716
 msgid "specify a custom command for viewing diffs"
 msgstr "specifica un comando personalizzato per visualizzare i diff"
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:717
 msgid "passed to `diff`"
 msgstr "fornito a `diff`"
 
-#: builtin/difftool.c:724
+#: builtin/difftool.c:732
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool richiede un albero di lavoro o --no-index"
 
-#: builtin/difftool.c:731
+#: builtin/difftool.c:739
 msgid "--dir-diff is incompatible with --no-index"
 msgstr "--dir-diff non è compatibile con --no-index"
 
-#: builtin/difftool.c:734
+#: builtin/difftool.c:742
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr "le opzioni --gui, --tool ed --extcmd sono mutualmente esclusive"
 
-#: builtin/difftool.c:742
+#: builtin/difftool.c:750
 msgid "no <tool> given for --tool=<tool>"
 msgstr "nessuno <strumento> specificato per --tool=<strumento>"
 
-#: builtin/difftool.c:749
+#: builtin/difftool.c:757
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "nessun <comando> specificato per --extcmd=<comando>"
 
@@ -12825,161 +12862,189 @@
 msgid "git fast-export [rev-list-opts]"
 msgstr "git fast-export [opzioni-elenco-rev]"
 
-#: builtin/fast-export.c:1124
+#: builtin/fast-export.c:852
+msgid "Error: Cannot export nested tags unless --mark-tags is specified."
+msgstr ""
+"Errore: Impossibile esportare i tag nidificati a meno che non sia "
+"specificata l'opzione --mark-tags."
+
+#: builtin/fast-export.c:1152
 msgid "show progress after <n> objects"
 msgstr "visualizza l'avanzamento dopo <n> oggetti"
 
-#: builtin/fast-export.c:1126
+#: builtin/fast-export.c:1154
 msgid "select handling of signed tags"
 msgstr "seleziona la gestione dei tag firmati"
 
-#: builtin/fast-export.c:1129
+#: builtin/fast-export.c:1157
 msgid "select handling of tags that tag filtered objects"
 msgstr "seleziona la gestione dei tag che contrassegnano oggetti filtrati"
 
-#: builtin/fast-export.c:1132
+#: builtin/fast-export.c:1160
 msgid "select handling of commit messages in an alternate encoding"
 msgstr ""
 "seleziona la gestione dei messaggi di commit in una codifica alternativa"
 
-#: builtin/fast-export.c:1135
+#: builtin/fast-export.c:1163
 msgid "Dump marks to this file"
 msgstr "Esegui il dump dei contrassegni in questo file"
 
-#: builtin/fast-export.c:1137
+#: builtin/fast-export.c:1165
 msgid "Import marks from this file"
 msgstr "Importa i contrassegni da questo file"
 
-#: builtin/fast-export.c:1139
+#: builtin/fast-export.c:1169
+msgid "Import marks from this file if it exists"
+msgstr "Importa i contrassegni da questo file se esiste"
+
+#: builtin/fast-export.c:1171
 msgid "Fake a tagger when tags lack one"
 msgstr "Usa un tagger falso se i tag non ne hanno uno"
 
-#: builtin/fast-export.c:1141
+#: builtin/fast-export.c:1173
 msgid "Output full tree for each commit"
 msgstr "Visualizza in output l'albero completo per ogni commit"
 
-#: builtin/fast-export.c:1143
+#: builtin/fast-export.c:1175
 msgid "Use the done feature to terminate the stream"
 msgstr "Usa la funzionalità \"fatto\" per terminare il flusso"
 
-#: builtin/fast-export.c:1144
+#: builtin/fast-export.c:1176
 msgid "Skip output of blob data"
 msgstr "Ometti l'output dei dati dei blob"
 
-#: builtin/fast-export.c:1145 builtin/log.c:1632
+#: builtin/fast-export.c:1177 builtin/log.c:1633
 msgid "refspec"
 msgstr "specificatore riferimento"
 
-#: builtin/fast-export.c:1146
+#: builtin/fast-export.c:1178
 msgid "Apply refspec to exported refs"
 msgstr "Applica lo specificatore riferimento ai riferimenti esportati"
 
-#: builtin/fast-export.c:1147
+#: builtin/fast-export.c:1179
 msgid "anonymize output"
 msgstr "rendi anonimo l'output"
 
-#: builtin/fast-export.c:1149
+#: builtin/fast-export.c:1181
 msgid "Reference parents which are not in fast-export stream by object id"
 msgstr ""
 "Fai riferimento ai genitori non nel flusso fast-export tramite l'ID oggetto"
 
-#: builtin/fast-export.c:1151
+#: builtin/fast-export.c:1183
 msgid "Show original object ids of blobs/commits"
 msgstr "Visualizza gli ID oggetto originari dei blob/commit"
 
-#: builtin/fetch.c:30
+#: builtin/fast-export.c:1185
+msgid "Label tags with mark ids"
+msgstr "Etichetta i tag con ID contrassegno"
+
+#: builtin/fast-export.c:1220
+msgid "Cannot pass both --import-marks and --import-marks-if-exists"
+msgstr ""
+"Impossibile fornire entrambe le opzioni --import-marks e --import-marks-if-"
+"exists"
+
+#: builtin/fetch.c:34
 msgid "git fetch [<options>] [<repository> [<refspec>...]]"
 msgstr "git fetch [<opzioni>] [<repository> [<specificatore riferimento>...]]"
 
-#: builtin/fetch.c:31
+#: builtin/fetch.c:35
 msgid "git fetch [<options>] <group>"
 msgstr "git fetch [<opzioni>] <gruppo>"
 
-#: builtin/fetch.c:32
+#: builtin/fetch.c:36
 msgid "git fetch --multiple [<options>] [(<repository> | <group>)...]"
 msgstr "git fetch --multiple [<opzioni>] [(<repository> | <gruppo>)...]"
 
-#: builtin/fetch.c:33
+#: builtin/fetch.c:37
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<opzioni>]"
 
-#: builtin/fetch.c:125 builtin/pull.c:203
+#: builtin/fetch.c:115
+msgid "fetch.parallel cannot be negative"
+msgstr "fetch.parallel non può essere negativo"
+
+#: builtin/fetch.c:138 builtin/pull.c:204
 msgid "fetch from all remotes"
 msgstr "esegui il fetch da tutti i remoti"
 
-#: builtin/fetch.c:127 builtin/pull.c:206
+#: builtin/fetch.c:140 builtin/pull.c:248
+msgid "set upstream for git pull/fetch"
+msgstr "imposta l'upstream per git pull/fetch"
+
+#: builtin/fetch.c:142 builtin/pull.c:207
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "aggiungi i dati a .git/FETCH_HEAD anziché sovrascriverli"
 
-#: builtin/fetch.c:129 builtin/pull.c:209
+#: builtin/fetch.c:144 builtin/pull.c:210
 msgid "path to upload pack on remote end"
 msgstr "percorso in cui caricare il pack sul remoto"
 
-#: builtin/fetch.c:130
+#: builtin/fetch.c:145
 msgid "force overwrite of local reference"
 msgstr "forza la sovrascrittura del riferimento locale"
 
-#: builtin/fetch.c:132
+#: builtin/fetch.c:147
 msgid "fetch from multiple remotes"
 msgstr "esegui il fetch da più remoti"
 
-#: builtin/fetch.c:134 builtin/pull.c:213
+#: builtin/fetch.c:149 builtin/pull.c:214
 msgid "fetch all tags and associated objects"
 msgstr "esegui il fetch di tutti i tag e degli oggetti associati"
 
-#: builtin/fetch.c:136
+#: builtin/fetch.c:151
 msgid "do not fetch all tags (--no-tags)"
 msgstr "non eseguire il fetch di alcun tag (--no-tags)"
 
-#: builtin/fetch.c:138
+#: builtin/fetch.c:153
 msgid "number of submodules fetched in parallel"
 msgstr "numero di sottomoduli recuperati in parallelo"
 
-#: builtin/fetch.c:140 builtin/pull.c:216
+#: builtin/fetch.c:155 builtin/pull.c:217
 msgid "prune remote-tracking branches no longer on remote"
 msgstr ""
 "elimina i branch che ne tracciano uno remoto ma non più presenti sul remoto"
 
-#: builtin/fetch.c:142
+#: builtin/fetch.c:157
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
 "elimina i tag locali non più presenti sul remoto e sovrascrivi i tag "
 "modificati"
 
-#: builtin/fetch.c:143 builtin/fetch.c:166 builtin/pull.c:140
+#: builtin/fetch.c:158 builtin/fetch.c:181 builtin/pull.c:141
 msgid "on-demand"
 msgstr "a richiesta"
 
-#: builtin/fetch.c:144
+#: builtin/fetch.c:159
 msgid "control recursive fetching of submodules"
 msgstr "controlla il recupero ricorsivo dei sottomoduli"
 
-#: builtin/fetch.c:148 builtin/pull.c:224
+#: builtin/fetch.c:163 builtin/pull.c:225
 msgid "keep downloaded pack"
 msgstr "mantieni il pack scaricato"
 
-#: builtin/fetch.c:150
+#: builtin/fetch.c:165
 msgid "allow updating of HEAD ref"
 msgstr "consenti l'aggiornamento del riferimento HEAD"
 
-#: builtin/fetch.c:153 builtin/fetch.c:159 builtin/pull.c:227
+#: builtin/fetch.c:168 builtin/fetch.c:174 builtin/pull.c:228
 msgid "deepen history of shallow clone"
 msgstr "aumenta la profondità della cronologia di un clone shallow"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:170
 msgid "deepen history of shallow repository based on time"
 msgstr ""
 "aumenta la profondità della cronologia di un clone shallow in base al tempo"
 
-#: builtin/fetch.c:161 builtin/pull.c:230
+#: builtin/fetch.c:176 builtin/pull.c:231
 msgid "convert to a complete repository"
 msgstr "converti in un repository completo"
 
-#: builtin/fetch.c:164
+#: builtin/fetch.c:179
 msgid "prepend this to submodule path output"
 msgstr "anteponi questo prefisso all'output del percorso del sottomodulo"
 
-#: builtin/fetch.c:167
+#: builtin/fetch.c:182
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
@@ -12987,90 +13052,90 @@
 "impostazione predefinita per il recupero ricorsivo dei sottomoduli (a "
 "priorità minore rispetto ai file di configurazione)"
 
-#: builtin/fetch.c:171 builtin/pull.c:233
+#: builtin/fetch.c:186 builtin/pull.c:234
 msgid "accept refs that update .git/shallow"
 msgstr "accetta i riferimenti che aggiornano .git/shallow"
 
-#: builtin/fetch.c:172 builtin/pull.c:235
+#: builtin/fetch.c:187 builtin/pull.c:236
 msgid "refmap"
 msgstr "mappa riferimenti"
 
-#: builtin/fetch.c:173 builtin/pull.c:236
+#: builtin/fetch.c:188 builtin/pull.c:237
 msgid "specify fetch refmap"
 msgstr "specifica la mappa dei riferimenti per il fetch"
 
-#: builtin/fetch.c:180
+#: builtin/fetch.c:195
 msgid "report that we have only objects reachable from this object"
 msgstr "segnala che abbiamo solo oggetti raggiungibili da quest'oggetto"
 
-#: builtin/fetch.c:183
+#: builtin/fetch.c:198
 msgid "run 'gc --auto' after fetching"
 msgstr "esegui 'gc --auto' dopo il fetch"
 
-#: builtin/fetch.c:185 builtin/pull.c:245
+#: builtin/fetch.c:200 builtin/pull.c:246
 msgid "check for forced-updates on all updated branches"
 msgstr "controlla aggiornamenti forzati su tutti i branch aggiornati"
 
-#: builtin/fetch.c:491
+#: builtin/fetch.c:510
 msgid "Couldn't find remote ref HEAD"
 msgstr "Impossibile trovare l'HEAD del riferimento remoto"
 
-#: builtin/fetch.c:630
+#: builtin/fetch.c:650
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
 msgstr "il valore dell'opzione fetch.output contiene il valore non valido %s"
 
-#: builtin/fetch.c:728
+#: builtin/fetch.c:748
 #, c-format
 msgid "object %s not found"
 msgstr "oggetto %s non trovato"
 
-#: builtin/fetch.c:732
+#: builtin/fetch.c:752
 msgid "[up to date]"
 msgstr "[aggiornato]"
 
-#: builtin/fetch.c:745 builtin/fetch.c:761 builtin/fetch.c:833
+#: builtin/fetch.c:765 builtin/fetch.c:781 builtin/fetch.c:853
 msgid "[rejected]"
 msgstr "[rifiutato]"
 
-#: builtin/fetch.c:746
+#: builtin/fetch.c:766
 msgid "can't fetch in current branch"
 msgstr "impossibile eseguire il fetch nel branch corrente"
 
-#: builtin/fetch.c:756
+#: builtin/fetch.c:776
 msgid "[tag update]"
 msgstr "[tag aggiornato]"
 
-#: builtin/fetch.c:757 builtin/fetch.c:794 builtin/fetch.c:816
-#: builtin/fetch.c:828
+#: builtin/fetch.c:777 builtin/fetch.c:814 builtin/fetch.c:836
+#: builtin/fetch.c:848
 msgid "unable to update local ref"
 msgstr "impossibile aggiornare il riferimento locale"
 
-#: builtin/fetch.c:761
+#: builtin/fetch.c:781
 msgid "would clobber existing tag"
 msgstr "sovrascriverebbe il tag esistente"
 
-#: builtin/fetch.c:783
+#: builtin/fetch.c:803
 msgid "[new tag]"
 msgstr "[nuovo tag]"
 
-#: builtin/fetch.c:786
+#: builtin/fetch.c:806
 msgid "[new branch]"
 msgstr "[nuovo branch]"
 
-#: builtin/fetch.c:789
+#: builtin/fetch.c:809
 msgid "[new ref]"
 msgstr "[nuovo riferimento]"
 
-#: builtin/fetch.c:828
+#: builtin/fetch.c:848
 msgid "forced update"
 msgstr "aggiornamento forzato"
 
-#: builtin/fetch.c:833
+#: builtin/fetch.c:853
 msgid "non-fast-forward"
 msgstr "non fast forward"
 
-#: builtin/fetch.c:854
+#: builtin/fetch.c:874
 msgid ""
 "Fetch normally indicates which branches had a forced update,\n"
 "but that check has been disabled. To re-enable, use '--show-forced-updates'\n"
@@ -13081,7 +13146,7 @@
 "riabilitarlo, usa l'opzione '--show-forced-updates' o esegui 'git config\n"
 "fetch.showForcedUpdates true'."
 
-#: builtin/fetch.c:858
+#: builtin/fetch.c:878
 #, c-format
 msgid ""
 "It took %.2f seconds to check forced updates. You can use\n"
@@ -13093,22 +13158,22 @@
 "aggiornamenti forzati. Puoi usare '--no-show-forced-updates' o eseguire\n"
 "'git config fetch.showForcedUpdates false' per omettere questo controllo.\n"
 
-#: builtin/fetch.c:888
+#: builtin/fetch.c:908
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s non ha inviato tutti gli oggetti necessari\n"
 
-#: builtin/fetch.c:909
+#: builtin/fetch.c:929
 #, c-format
 msgid "reject %s because shallow roots are not allowed to be updated"
 msgstr "%s rifiutato perché non è consentito aggiornare radici shallow"
 
-#: builtin/fetch.c:1000 builtin/fetch.c:1131
+#: builtin/fetch.c:1020 builtin/fetch.c:1157
 #, c-format
 msgid "From %.*s\n"
 msgstr "Da %.*s\n"
 
-#: builtin/fetch.c:1011
+#: builtin/fetch.c:1031
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -13118,60 +13183,81 @@
 "eseguire\n"
 " 'git remote prune %s' per rimuovere ogni branch vecchio in conflitto"
 
-#: builtin/fetch.c:1101
+#: builtin/fetch.c:1127
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s diventerà pendente)"
 
-#: builtin/fetch.c:1102
+#: builtin/fetch.c:1128
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s è diventato pendente)"
 
-#: builtin/fetch.c:1134
+#: builtin/fetch.c:1160
 msgid "[deleted]"
 msgstr "[eliminato]"
 
-#: builtin/fetch.c:1135 builtin/remote.c:1036
+#: builtin/fetch.c:1161 builtin/remote.c:1036
 msgid "(none)"
 msgstr "(nessuno)"
 
-#: builtin/fetch.c:1158
+#: builtin/fetch.c:1184
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr ""
 "Mi rifiuto di eseguire il fetch nel branch corrente %s di un repository non "
 "bare"
 
-#: builtin/fetch.c:1177
+#: builtin/fetch.c:1203
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr "L'opzione \"%s\" con il valore \"%s\" non è valida per %s"
 
-#: builtin/fetch.c:1180
+#: builtin/fetch.c:1206
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr "L'opzione \"%s\" è ignorata per %s\n"
 
-#: builtin/fetch.c:1484
+#: builtin/fetch.c:1414
+msgid "multiple branch detected, incompatible with --set-upstream"
+msgstr "rilevati branch multipli, stato incompatibile con --set-upstream"
+
+#: builtin/fetch.c:1429
+msgid "not setting upstream for a remote remote-tracking branch"
+msgstr "non imposto l'upstream per un branch remoto che ne traccia uno remoto"
+
+#: builtin/fetch.c:1431
+msgid "not setting upstream for a remote tag"
+msgstr "non imposto l'upstream per un tag remoto"
+
+#: builtin/fetch.c:1433
+msgid "unknown branch type"
+msgstr "tipo branch sconosciuto"
+
+#: builtin/fetch.c:1435
+msgid ""
+"no source branch found.\n"
+"you need to specify exactly one branch with the --set-upstream option."
+msgstr ""
+"nessun branch sorgente trovato.\n"
+"devi specificare esattamente un branch con l'opzione --set-upstream."
+
+#: builtin/fetch.c:1561 builtin/fetch.c:1623
 #, c-format
 msgid "Fetching %s\n"
 msgstr "Recupero di %s in corso\n"
 
-#: builtin/fetch.c:1486 builtin/remote.c:100
+#: builtin/fetch.c:1571 builtin/fetch.c:1625 builtin/remote.c:100
 #, c-format
 msgid "Could not fetch %s"
 msgstr "Impossibile recuperare %s"
 
-#: builtin/fetch.c:1532
-msgid ""
-"--filter can only be used with the remote configured in extensions."
-"partialClone"
-msgstr ""
-"--filter può essere usato solo con il remoto configurato nelle estensioni."
-"partialClone"
+#: builtin/fetch.c:1583
+#, c-format
+msgid "could not fetch '%s' (exit code: %d)\n"
+msgstr "impossibile recuperare '%s' (codice di uscita: %d)\n"
 
-#: builtin/fetch.c:1556
+#: builtin/fetch.c:1685
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
@@ -13179,45 +13265,45 @@
 "Non è stato specificato alcun repository remoto. Specifica un URL o il\n"
 "nome di un remoto da cui dovranno essere recuperate le nuove revisioni."
 
-#: builtin/fetch.c:1593
+#: builtin/fetch.c:1722
 msgid "You need to specify a tag name."
 msgstr "Devi specificare il nome di un tag."
 
-#: builtin/fetch.c:1644
+#: builtin/fetch.c:1774
 msgid "Negative depth in --deepen is not supported"
 msgstr "Le profondità negative in --deepen non sono supportate"
 
-#: builtin/fetch.c:1646
+#: builtin/fetch.c:1776
 msgid "--deepen and --depth are mutually exclusive"
 msgstr "le opzioni --deepen e --depth sono mutualmente esclusive"
 
-#: builtin/fetch.c:1651
+#: builtin/fetch.c:1781
 msgid "--depth and --unshallow cannot be used together"
 msgstr "--depth e --unshallow non possono essere usati insieme."
 
-#: builtin/fetch.c:1653
+#: builtin/fetch.c:1783
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "--unshallow su un repository completo non ha senso"
 
-#: builtin/fetch.c:1669
+#: builtin/fetch.c:1799
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all non richiede un repository come argomento"
 
-#: builtin/fetch.c:1671
+#: builtin/fetch.c:1801
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all non ha senso con degli specificatori riferimento"
 
-#: builtin/fetch.c:1680
+#: builtin/fetch.c:1810
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr "Remoto o gruppo remoti non esistente: %s"
 
-#: builtin/fetch.c:1687
+#: builtin/fetch.c:1817
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr ""
 "Recuperare un gruppo e specificare gli specificatori riferimento non ha senso"
 
-#: builtin/fetch.c:1703
+#: builtin/fetch.c:1835
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
@@ -13557,7 +13643,7 @@
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "parametro non valido: atteso SHA1, presente '%s'"
 
-#: builtin/gc.c:34
+#: builtin/gc.c:35
 msgid "git gc [<options>]"
 msgstr "git gc [<opzioni>]"
 
@@ -13571,17 +13657,17 @@
 msgid "failed to parse '%s' value '%s'"
 msgstr "analisi dell'opzione '%s' con valore '%s' non riuscita"
 
-#: builtin/gc.c:476 builtin/init-db.c:55
+#: builtin/gc.c:475 builtin/init-db.c:55
 #, c-format
 msgid "cannot stat '%s'"
 msgstr "impossibile eseguire lo stat di '%s'"
 
-#: builtin/gc.c:485 builtin/notes.c:240 builtin/tag.c:529
+#: builtin/gc.c:484 builtin/notes.c:240 builtin/tag.c:529
 #, c-format
 msgid "cannot read '%s'"
 msgstr "impossibile leggere '%s'"
 
-#: builtin/gc.c:492
+#: builtin/gc.c:491
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -13597,56 +13683,56 @@
 "\n"
 "%s"
 
-#: builtin/gc.c:540
+#: builtin/gc.c:539
 msgid "prune unreferenced objects"
 msgstr "elimina oggetti non referenziati"
 
-#: builtin/gc.c:542
+#: builtin/gc.c:541
 msgid "be more thorough (increased runtime)"
 msgstr "sii più accurato (tempi di esecuzione maggiori)"
 
-#: builtin/gc.c:543
+#: builtin/gc.c:542
 msgid "enable auto-gc mode"
 msgstr "abilita modalità garbage collector automatica"
 
-#: builtin/gc.c:546
+#: builtin/gc.c:545
 msgid "force running gc even if there may be another gc running"
 msgstr ""
 "forza l'esecuzione del garbage collector anche nel caso in cui ve ne "
 "potrebbe essere un altro in esecuzione"
 
-#: builtin/gc.c:549
+#: builtin/gc.c:548
 msgid "repack all other packs except the largest pack"
 msgstr ""
 "esegui il repack di tutti gli altri pack ad eccezione di quello più grande"
 
-#: builtin/gc.c:566
+#: builtin/gc.c:565
 #, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr "analisi del valore %s di gc.logexpiry non riuscita"
 
-#: builtin/gc.c:577
+#: builtin/gc.c:576
 #, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr "analisi del valore %s per la scadenza delle eliminazioni non riuscita"
 
-#: builtin/gc.c:597
+#: builtin/gc.c:596
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr ""
 "Comprimo il repository in background per ottenere le migliori prestazioni.\n"
 
-#: builtin/gc.c:599
+#: builtin/gc.c:598
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr "Comprimo il repository per ottenere le migliori prestazioni.\n"
 
-#: builtin/gc.c:600
+#: builtin/gc.c:599
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr "Vedi \"git help gc\" per le operazioni di manutenzione manuali.\n"
 
-#: builtin/gc.c:640
+#: builtin/gc.c:639
 #, c-format
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
@@ -13654,7 +13740,7 @@
 "gc è già in esecuzione sul computer '%s' con PID %<PRIuMAX> (usa --force se "
 "non lo è)"
 
-#: builtin/gc.c:695
+#: builtin/gc.c:694
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr ""
@@ -13681,262 +13767,262 @@
 #. grep.threads
 #.
 #: builtin/grep.c:287 builtin/index-pack.c:1534 builtin/index-pack.c:1727
-#: builtin/pack-objects.c:2728
+#: builtin/pack-objects.c:2708
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "non vi è supporto per i thread, ignoro %s"
 
-#: builtin/grep.c:467 builtin/grep.c:591 builtin/grep.c:633
+#: builtin/grep.c:467 builtin/grep.c:592 builtin/grep.c:635
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "impossibile leggere il tree (%s)"
 
-#: builtin/grep.c:648
+#: builtin/grep.c:650
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "impossibile eseguire grep su un oggetto di tipo %s"
 
-#: builtin/grep.c:714
+#: builtin/grep.c:716
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "switch '%c' richiede un valore numerico"
 
-#: builtin/grep.c:813
+#: builtin/grep.c:815
 msgid "search in index instead of in the work tree"
 msgstr "cerca nell'index anziché nell'albero di lavoro"
 
-#: builtin/grep.c:815
+#: builtin/grep.c:817
 msgid "find in contents not managed by git"
 msgstr "la ricerca nei contenuti non è gestita da Git"
 
-#: builtin/grep.c:817
+#: builtin/grep.c:819
 msgid "search in both tracked and untracked files"
 msgstr "cerca sia nei file tracciati sia in quelli non tracciati"
 
-#: builtin/grep.c:819
+#: builtin/grep.c:821
 msgid "ignore files specified via '.gitignore'"
 msgstr "ignora i file specificati in '.gitignore'"
 
-#: builtin/grep.c:821
+#: builtin/grep.c:823
 msgid "recursively search in each submodule"
 msgstr "cerca ricorsivamente in ogni sottomodulo"
 
-#: builtin/grep.c:824
+#: builtin/grep.c:826
 msgid "show non-matching lines"
 msgstr "visualizza le righe non corrispondenti"
 
-#: builtin/grep.c:826
+#: builtin/grep.c:828
 msgid "case insensitive matching"
 msgstr "ricerca corrispondenze senza differenze maiuscole/minuscole"
 
-#: builtin/grep.c:828
+#: builtin/grep.c:830
 msgid "match patterns only at word boundaries"
 msgstr "cerca corrispondenze ai pattern solo a inizio/fine parola"
 
-#: builtin/grep.c:830
+#: builtin/grep.c:832
 msgid "process binary files as text"
 msgstr "elabora i file binari come testuali"
 
-#: builtin/grep.c:832
+#: builtin/grep.c:834
 msgid "don't match patterns in binary files"
 msgstr "non cercare corrispondenze ai pattern nei file binari"
 
-#: builtin/grep.c:835
+#: builtin/grep.c:837
 msgid "process binary files with textconv filters"
 msgstr "elabora i file binari con filtri di conversione in testo"
 
-#: builtin/grep.c:837
+#: builtin/grep.c:839
 msgid "search in subdirectories (default)"
 msgstr "cerca nelle sottodirectory (impostazione predefinita)"
 
-#: builtin/grep.c:839
+#: builtin/grep.c:841
 msgid "descend at most <depth> levels"
 msgstr "scendi al più di <profondità> livelli"
 
-#: builtin/grep.c:843
+#: builtin/grep.c:845
 msgid "use extended POSIX regular expressions"
 msgstr "usa espressioni regolari POSIX estese"
 
-#: builtin/grep.c:846
+#: builtin/grep.c:848
 msgid "use basic POSIX regular expressions (default)"
 msgstr "usa espressioni regolari POSIX di base (impostazione predefinita)"
 
-#: builtin/grep.c:849
+#: builtin/grep.c:851
 msgid "interpret patterns as fixed strings"
 msgstr "interpreta i pattern come stringhe fisse"
 
-#: builtin/grep.c:852
+#: builtin/grep.c:854
 msgid "use Perl-compatible regular expressions"
 msgstr "usa espressioni regolari compatibili con Perl"
 
-#: builtin/grep.c:855
+#: builtin/grep.c:857
 msgid "show line numbers"
 msgstr "visualizza numeri di riga"
 
-#: builtin/grep.c:856
+#: builtin/grep.c:858
 msgid "show column number of first match"
 msgstr "visualizza il numero di colonna della prima corrispondenza"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:859
 msgid "don't show filenames"
 msgstr "non visualizzare i nomi file"
 
-#: builtin/grep.c:858
+#: builtin/grep.c:860
 msgid "show filenames"
 msgstr "visualizza i nomi file"
 
-#: builtin/grep.c:860
+#: builtin/grep.c:862
 msgid "show filenames relative to top directory"
 msgstr "visualizza i nomi file relativi alla directory di primo livello"
 
-#: builtin/grep.c:862
+#: builtin/grep.c:864
 msgid "show only filenames instead of matching lines"
 msgstr "visualizza solo i nomi file anziché le righe corrispondenti"
 
-#: builtin/grep.c:864
+#: builtin/grep.c:866
 msgid "synonym for --files-with-matches"
 msgstr "sinonimo di --files-with-matches"
 
-#: builtin/grep.c:867
+#: builtin/grep.c:869
 msgid "show only the names of files without match"
 msgstr "visualizza solo i nomi dei file non corrispondenti"
 
-#: builtin/grep.c:869
+#: builtin/grep.c:871
 msgid "print NUL after filenames"
 msgstr "stampa NUL dopo i nomi file"
 
-#: builtin/grep.c:872
+#: builtin/grep.c:874
 msgid "show only matching parts of a line"
 msgstr "visualizza solo le parti corrispondenti di una riga"
 
-#: builtin/grep.c:874
+#: builtin/grep.c:876
 msgid "show the number of matches instead of matching lines"
 msgstr "visualizza il numero di corrispondenze anziché le righe corrispondenti"
 
-#: builtin/grep.c:875
+#: builtin/grep.c:877
 msgid "highlight matches"
 msgstr "evidenzia corrispondenze"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:879
 msgid "print empty line between matches from different files"
 msgstr "stampa una riga vuota fra le corrispondenze in file differenti"
 
-#: builtin/grep.c:879
+#: builtin/grep.c:881
 msgid "show filename only once above matches from same file"
 msgstr ""
 "visualizza il nome file solo una volta prima delle corrispondenze nello "
 "stesso file"
 
-#: builtin/grep.c:882
+#: builtin/grep.c:884
 msgid "show <n> context lines before and after matches"
 msgstr "visualizza <n> righe di contesto prima e dopo le corrispondenze"
 
-#: builtin/grep.c:885
+#: builtin/grep.c:887
 msgid "show <n> context lines before matches"
 msgstr "visualizza <n> righe di contesto prima delle corrispondenze"
 
-#: builtin/grep.c:887
+#: builtin/grep.c:889
 msgid "show <n> context lines after matches"
 msgstr "visualizza <n> righe di contesto dopo le corrispondenze"
 
-#: builtin/grep.c:889
+#: builtin/grep.c:891
 msgid "use <n> worker threads"
 msgstr "usa <n> thread di lavoro"
 
-#: builtin/grep.c:890
+#: builtin/grep.c:892
 msgid "shortcut for -C NUM"
 msgstr "scorciatoia per -C NUM"
 
-#: builtin/grep.c:893
+#: builtin/grep.c:895
 msgid "show a line with the function name before matches"
 msgstr "visualizza una riga con il nome funzione prima delle corrispondenze"
 
-#: builtin/grep.c:895
+#: builtin/grep.c:897
 msgid "show the surrounding function"
 msgstr "visualizza la funzione circostante"
 
-#: builtin/grep.c:898
+#: builtin/grep.c:900
 msgid "read patterns from file"
 msgstr "leggi le corrispondenze da un file"
 
-#: builtin/grep.c:900
+#: builtin/grep.c:902
 msgid "match <pattern>"
 msgstr "cerca corrispondenze con <pattern>"
 
-#: builtin/grep.c:902
+#: builtin/grep.c:904
 msgid "combine patterns specified with -e"
 msgstr "combina i pattern specificati con -e"
 
-#: builtin/grep.c:914
+#: builtin/grep.c:916
 msgid "indicate hit with exit status without output"
 msgstr ""
 "segnala una corrispondenza con il codice di uscita senza emettere output"
 
-#: builtin/grep.c:916
+#: builtin/grep.c:918
 msgid "show only matches from files that match all patterns"
 msgstr ""
 "visualizza solo le corrispondenze nei file in cui vi sono corrispondenze per "
 "tutti i pattern"
 
-#: builtin/grep.c:918
+#: builtin/grep.c:920
 msgid "show parse tree for grep expression"
 msgstr "visualizza l'albero di analisi per l'espressione grep"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:924
 msgid "pager"
 msgstr "pager"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:924
 msgid "show matching files in the pager"
 msgstr "visualizza i file corrispondenti nel pager"
 
-#: builtin/grep.c:926
+#: builtin/grep.c:928
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "consenti"
 
-#: builtin/grep.c:990
+#: builtin/grep.c:992
 msgid "no pattern given"
 msgstr "nessun pattern specificato"
 
-#: builtin/grep.c:1026
+#: builtin/grep.c:1028
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr "--no-index o --untracked non possono essere usate con le revisioni"
 
-#: builtin/grep.c:1034
+#: builtin/grep.c:1036
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "impossibile risolvere la revisione %s"
 
-#: builtin/grep.c:1065
+#: builtin/grep.c:1067
 msgid "invalid option combination, ignoring --threads"
 msgstr "combinazione di opzioni non valida, ignoro --threads"
 
-#: builtin/grep.c:1068 builtin/pack-objects.c:3416
+#: builtin/grep.c:1070 builtin/pack-objects.c:3400
 msgid "no threads support, ignoring --threads"
 msgstr "non vi è supporto per i thread, ignoro --threads"
 
-#: builtin/grep.c:1071 builtin/index-pack.c:1531 builtin/pack-objects.c:2725
+#: builtin/grep.c:1073 builtin/index-pack.c:1531 builtin/pack-objects.c:2705
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "specificato numero non valido di thread (%d)"
 
-#: builtin/grep.c:1094
+#: builtin/grep.c:1096
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "--open-files-in-pager funziona solo sull'albero di lavoro"
 
-#: builtin/grep.c:1117
+#: builtin/grep.c:1119
 msgid "option not supported with --recurse-submodules"
 msgstr "opzione non supportata con --recurse-submodules"
 
-#: builtin/grep.c:1123
+#: builtin/grep.c:1125
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr "--cached o --untracked non possono essere usate con --no-index"
 
-#: builtin/grep.c:1129
+#: builtin/grep.c:1131
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr "--[no-]exclude-standard non può essere usata per i contenuti tracciati"
 
-#: builtin/grep.c:1137
+#: builtin/grep.c:1139
 msgid "both --cached and trees are given"
 msgstr "sono specificati sia --cached sia degli alberi"
 
@@ -14250,7 +14336,7 @@
 msgid "Resolving deltas"
 msgstr "Risoluzione dei delta"
 
-#: builtin/index-pack.c:1205 builtin/pack-objects.c:2497
+#: builtin/index-pack.c:1205 builtin/pack-objects.c:2481
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "impossibile creare il thread: %s"
@@ -14315,7 +14401,7 @@
 msgid "cannot store index file"
 msgstr "impossibile archiviare index file"
 
-#: builtin/index-pack.c:1525 builtin/pack-objects.c:2736
+#: builtin/index-pack.c:1525 builtin/pack-objects.c:2716
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "pack.indexversion=%<PRIu32> non valida"
@@ -14596,74 +14682,74 @@
 msgid "git show %s: bad file"
 msgstr "git show %s: file non valido"
 
-#: builtin/log.c:549 builtin/log.c:643
+#: builtin/log.c:549 builtin/log.c:644
 #, c-format
 msgid "could not read object %s"
 msgstr "impossibile leggere l'oggetto %s"
 
-#: builtin/log.c:668
+#: builtin/log.c:669
 #, c-format
 msgid "unknown type: %d"
 msgstr "tipo sconosciuto: %d"
 
-#: builtin/log.c:791
+#: builtin/log.c:792
 msgid "format.headers without value"
 msgstr "format.headers non ha alcun valore"
 
-#: builtin/log.c:908
+#: builtin/log.c:909
 msgid "name of output directory is too long"
 msgstr "il nome della directory di output è troppo lungo"
 
-#: builtin/log.c:924
+#: builtin/log.c:925
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "impossibile aprire il file patch %s"
 
-#: builtin/log.c:941
+#: builtin/log.c:942
 msgid "need exactly one range"
 msgstr "è necessario specificare esattamente un intervallo"
 
-#: builtin/log.c:951
+#: builtin/log.c:952
 msgid "not a range"
 msgstr "il valore non è un intervallo"
 
-#: builtin/log.c:1074
+#: builtin/log.c:1075
 msgid "cover letter needs email format"
 msgstr "la lettera di accompagnamento dev'essere in formato e-mail"
 
-#: builtin/log.c:1080
+#: builtin/log.c:1081
 msgid "failed to create cover-letter file"
 msgstr "creazione del file lettera di accompagnamento non riuscita"
 
-#: builtin/log.c:1159
+#: builtin/log.c:1160
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "valore in-reply-to folle: %s"
 
-#: builtin/log.c:1186
+#: builtin/log.c:1187
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<opzioni>] [<da> | <intervallo revisioni>]"
 
-#: builtin/log.c:1244
+#: builtin/log.c:1245
 msgid "two output directories?"
 msgstr "due directory di output?"
 
-#: builtin/log.c:1355 builtin/log.c:2099 builtin/log.c:2101 builtin/log.c:2113
+#: builtin/log.c:1356 builtin/log.c:2116 builtin/log.c:2118 builtin/log.c:2130
 #, c-format
 msgid "unknown commit %s"
 msgstr "commit %s sconosciuto"
 
-#: builtin/log.c:1365 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1366 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "impossibile risolvere '%s' come riferimento valido"
 
-#: builtin/log.c:1370
+#: builtin/log.c:1371
 msgid "could not find exact merge base"
 msgstr "impossibile trovare esattamente la base del merge"
 
-#: builtin/log.c:1374
+#: builtin/log.c:1375
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -14675,278 +14761,278 @@
 "In alternativa puoi specificare manualmente il commit di base con\n"
 "--base=<ID commit di base>"
 
-#: builtin/log.c:1394
+#: builtin/log.c:1395
 msgid "failed to find exact merge base"
 msgstr "impossibile trovare esattamente la base del merge"
 
-#: builtin/log.c:1405
+#: builtin/log.c:1406
 msgid "base commit should be the ancestor of revision list"
 msgstr "il commit di base dovrebbe essere l'antenato dell'elenco revisioni"
 
-#: builtin/log.c:1409
+#: builtin/log.c:1410
 msgid "base commit shouldn't be in revision list"
 msgstr "il commit di base non dovrebbe essere nell'elenco revisioni"
 
-#: builtin/log.c:1462
+#: builtin/log.c:1463
 msgid "cannot get patch id"
 msgstr "impossibile ottenere l'ID della patch"
 
-#: builtin/log.c:1514
+#: builtin/log.c:1515
 msgid "failed to infer range-diff ranges"
 msgstr "inferenza degli intervalli range-diff non riuscita"
 
-#: builtin/log.c:1559
+#: builtin/log.c:1560
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "usa [PATCH n/m] anche con una singola patch"
 
-#: builtin/log.c:1562
+#: builtin/log.c:1563
 msgid "use [PATCH] even with multiple patches"
 msgstr "usa [PATCH] anche con più patch"
 
-#: builtin/log.c:1566
+#: builtin/log.c:1567
 msgid "print patches to standard out"
 msgstr "stampa le patch sullo standard output"
 
-#: builtin/log.c:1568
+#: builtin/log.c:1569
 msgid "generate a cover letter"
 msgstr "genera una lettera di accompagnamento"
 
-#: builtin/log.c:1570
+#: builtin/log.c:1571
 msgid "use simple number sequence for output file names"
 msgstr "usa una sequenza numerica semplice per i nomi file di output"
 
-#: builtin/log.c:1571
+#: builtin/log.c:1572
 msgid "sfx"
 msgstr "suff"
 
-#: builtin/log.c:1572
+#: builtin/log.c:1573
 msgid "use <sfx> instead of '.patch'"
 msgstr "usa <suff> anziché '.patch'"
 
-#: builtin/log.c:1574
+#: builtin/log.c:1575
 msgid "start numbering patches at <n> instead of 1"
 msgstr "inizia a numerare le patch da <n> anziché da 1"
 
-#: builtin/log.c:1576
+#: builtin/log.c:1577
 msgid "mark the series as Nth re-roll"
 msgstr "contrassegna la serie come l'n-esima versione revisionata"
 
-#: builtin/log.c:1578
+#: builtin/log.c:1579
 msgid "Use [RFC PATCH] instead of [PATCH]"
 msgstr "Usa [RFC PATCH] anziché [PATCH]"
 
-#: builtin/log.c:1581
+#: builtin/log.c:1582
 msgid "Use [<prefix>] instead of [PATCH]"
 msgstr "Usa [<prefisso>] anziché [PATCH]"
 
-#: builtin/log.c:1584
+#: builtin/log.c:1585
 msgid "store resulting files in <dir>"
 msgstr "salva i file risultanti in <dir>"
 
-#: builtin/log.c:1587
+#: builtin/log.c:1588
 msgid "don't strip/add [PATCH]"
 msgstr "non eliminare/aggiungere [PATCH]"
 
-#: builtin/log.c:1590
+#: builtin/log.c:1591
 msgid "don't output binary diffs"
 msgstr "non mandare in output diff binari"
 
-#: builtin/log.c:1592
+#: builtin/log.c:1593
 msgid "output all-zero hash in From header"
 msgstr "manda in output un hash costituito da soli zeri nell'intestazione From"
 
-#: builtin/log.c:1594
+#: builtin/log.c:1595
 msgid "don't include a patch matching a commit upstream"
 msgstr "non includere una patch corrispondente a un commit upstream"
 
-#: builtin/log.c:1596
+#: builtin/log.c:1597
 msgid "show patch format instead of default (patch + stat)"
 msgstr ""
 "visualizza il formato della patch anziché l'impostazione predefinita (patch "
 "+ stat)"
 
-#: builtin/log.c:1598
+#: builtin/log.c:1599
 msgid "Messaging"
 msgstr "Messaggistica"
 
-#: builtin/log.c:1599
+#: builtin/log.c:1600
 msgid "header"
 msgstr "intestazione"
 
-#: builtin/log.c:1600
+#: builtin/log.c:1601
 msgid "add email header"
 msgstr "aggiungi intestazione e-mail"
 
-#: builtin/log.c:1601 builtin/log.c:1603
+#: builtin/log.c:1602 builtin/log.c:1604
 msgid "email"
 msgstr "e-mail"
 
-#: builtin/log.c:1601
+#: builtin/log.c:1602
 msgid "add To: header"
 msgstr "aggiungi intestazione A:"
 
-#: builtin/log.c:1603
+#: builtin/log.c:1604
 msgid "add Cc: header"
 msgstr "aggiungi intestazione Cc:"
 
-#: builtin/log.c:1605
+#: builtin/log.c:1606
 msgid "ident"
 msgstr "identità"
 
-#: builtin/log.c:1606
+#: builtin/log.c:1607
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 "imposta l'indirizzo Da a <identità> (o all'identità di chi ha creato il "
 "commit se assente)"
 
-#: builtin/log.c:1608
+#: builtin/log.c:1609
 msgid "message-id"
 msgstr "ID messaggio"
 
-#: builtin/log.c:1609
+#: builtin/log.c:1610
 msgid "make first mail a reply to <message-id>"
 msgstr "rendi la prima e-mail una risposta a <ID messaggio>"
 
-#: builtin/log.c:1610 builtin/log.c:1613
+#: builtin/log.c:1611 builtin/log.c:1614
 msgid "boundary"
 msgstr "delimitatore"
 
-#: builtin/log.c:1611
+#: builtin/log.c:1612
 msgid "attach the patch"
 msgstr "allega la patch"
 
-#: builtin/log.c:1614
+#: builtin/log.c:1615
 msgid "inline the patch"
 msgstr "includi la patch nel messaggio"
 
-#: builtin/log.c:1618
+#: builtin/log.c:1619
 msgid "enable message threading, styles: shallow, deep"
 msgstr ""
 "abilita il raggruppamento messaggi per conversazione, stili: superficiale, "
 "profondo"
 
-#: builtin/log.c:1620
+#: builtin/log.c:1621
 msgid "signature"
 msgstr "firma"
 
-#: builtin/log.c:1621
+#: builtin/log.c:1622
 msgid "add a signature"
 msgstr "aggiungi una firma"
 
-#: builtin/log.c:1622
+#: builtin/log.c:1623
 msgid "base-commit"
 msgstr "commit di base"
 
-#: builtin/log.c:1623
+#: builtin/log.c:1624
 msgid "add prerequisite tree info to the patch series"
 msgstr ""
 "aggiungi le informazioni prerequisito per l'albero alla serie delle patch"
 
-#: builtin/log.c:1625
+#: builtin/log.c:1626
 msgid "add a signature from a file"
 msgstr "aggiungi una firma da file"
 
-#: builtin/log.c:1626
+#: builtin/log.c:1627
 msgid "don't print the patch filenames"
 msgstr "non stampare i nomi file delle patch"
 
-#: builtin/log.c:1628
+#: builtin/log.c:1629
 msgid "show progress while generating patches"
 msgstr "visualizza l'avanzamento dell'operazione di generazione patch"
 
-#: builtin/log.c:1630
+#: builtin/log.c:1631
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr ""
 "visualizza le modifiche rispetto a <revisione> nella lettera di "
 "accompagnamento o in una patch singola"
 
-#: builtin/log.c:1633
+#: builtin/log.c:1634
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
 "visualizza le modifiche rispetto a <specificatore revisione> nella lettera "
 "di accompagnamento o in una patch singola"
 
-#: builtin/log.c:1635
+#: builtin/log.c:1636
 msgid "percentage by which creation is weighted"
 msgstr "percentuale in base a cui viene pesata la creazione"
 
-#: builtin/log.c:1710
+#: builtin/log.c:1711
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "riga ident non valida: %s"
 
-#: builtin/log.c:1725
+#: builtin/log.c:1726
 msgid "-n and -k are mutually exclusive"
 msgstr "le opzioni -n e -k sono mutuamente esclusive"
 
-#: builtin/log.c:1727
+#: builtin/log.c:1728
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr "le opzioni --subject-prefix/--rfc e -k sono mutuamente esclusive"
 
-#: builtin/log.c:1735
+#: builtin/log.c:1736
 msgid "--name-only does not make sense"
 msgstr "--name-only non ha senso"
 
-#: builtin/log.c:1737
+#: builtin/log.c:1738
 msgid "--name-status does not make sense"
 msgstr "--name-status non ha senso"
 
-#: builtin/log.c:1739
+#: builtin/log.c:1740
 msgid "--check does not make sense"
 msgstr "--check non ha senso"
 
-#: builtin/log.c:1771
+#: builtin/log.c:1773
 msgid "standard output, or directory, which one?"
 msgstr "standard output, o directory, quale dei due?"
 
-#: builtin/log.c:1860
+#: builtin/log.c:1877
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff richiede --cover-letter o una singola patch"
 
-#: builtin/log.c:1864
+#: builtin/log.c:1881
 msgid "Interdiff:"
 msgstr "Interdiff:"
 
-#: builtin/log.c:1865
+#: builtin/log.c:1882
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Interdiff rispetto alla versione %d:"
 
-#: builtin/log.c:1871
+#: builtin/log.c:1888
 msgid "--creation-factor requires --range-diff"
 msgstr "--creation-factor richiede --range-diff"
 
-#: builtin/log.c:1875
+#: builtin/log.c:1892
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff richiede --cover-letter o una singola patch"
 
-#: builtin/log.c:1883
+#: builtin/log.c:1900
 msgid "Range-diff:"
 msgstr "Range-diff:"
 
-#: builtin/log.c:1884
+#: builtin/log.c:1901
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "Range-diff rispetto alla versione %d:"
 
-#: builtin/log.c:1895
+#: builtin/log.c:1912
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "impossibile leggere il file firma '%s'"
 
-#: builtin/log.c:1931
+#: builtin/log.c:1948
 msgid "Generating patches"
 msgstr "Generazione delle patch in corso"
 
-#: builtin/log.c:1975
+#: builtin/log.c:1992
 msgid "failed to create output files"
 msgstr "creazione dei file di output non riuscita"
 
-#: builtin/log.c:2034
+#: builtin/log.c:2051
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<upstream> [<head> [<limite>]]]"
 
-#: builtin/log.c:2088
+#: builtin/log.c:2105
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -15078,7 +15164,7 @@
 msgid "do not print remote URL"
 msgstr "non stampare l'URL del remoto"
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1464
+#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1488
 msgid "exec"
 msgstr "eseguibile"
 
@@ -15190,33 +15276,33 @@
 msgid "Available custom strategies are:"
 msgstr "Le strategie personalizzate disponibili sono:"
 
-#: builtin/merge.c:244 builtin/pull.c:151
+#: builtin/merge.c:244 builtin/pull.c:152
 msgid "do not show a diffstat at the end of the merge"
 msgstr "non visualizzare un diffstat al termine del merge"
 
-#: builtin/merge.c:247 builtin/pull.c:154
+#: builtin/merge.c:247 builtin/pull.c:155
 msgid "show a diffstat at the end of the merge"
 msgstr "visualizza un diffstat al termine del merge"
 
-#: builtin/merge.c:248 builtin/pull.c:157
+#: builtin/merge.c:248 builtin/pull.c:158
 msgid "(synonym to --stat)"
 msgstr "(sinonimo di --stat)"
 
-#: builtin/merge.c:250 builtin/pull.c:160
+#: builtin/merge.c:250 builtin/pull.c:161
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr ""
 "aggiungi (al più <n>) voci dal registro breve al messaggio di commit del "
 "merge"
 
-#: builtin/merge.c:253 builtin/pull.c:166
+#: builtin/merge.c:253 builtin/pull.c:167
 msgid "create a single commit instead of doing a merge"
 msgstr "crea un singolo commit anziché eseguire un merge"
 
-#: builtin/merge.c:255 builtin/pull.c:169
+#: builtin/merge.c:255 builtin/pull.c:170
 msgid "perform a commit if the merge succeeds (default)"
 msgstr "esegui un commit se il merge ha successo (impostazione predefinita)"
 
-#: builtin/merge.c:257 builtin/pull.c:172
+#: builtin/merge.c:257 builtin/pull.c:173
 msgid "edit message before committing"
 msgstr "modifica il messaggio prima di eseguire il commit"
 
@@ -15224,28 +15310,28 @@
 msgid "allow fast-forward (default)"
 msgstr "consenti fast forward (impostazione predefinita)"
 
-#: builtin/merge.c:261 builtin/pull.c:179
+#: builtin/merge.c:261 builtin/pull.c:180
 msgid "abort if fast-forward is not possible"
 msgstr "interrompi se il fast forward non è possibile"
 
-#: builtin/merge.c:265 builtin/pull.c:182
+#: builtin/merge.c:265 builtin/pull.c:183
 msgid "verify that the named commit has a valid GPG signature"
 msgstr "verifica che il commit specificato abbia una firma GPG valida"
 
-#: builtin/merge.c:266 builtin/notes.c:787 builtin/pull.c:186
-#: builtin/rebase.c:492 builtin/rebase.c:1477 builtin/revert.c:114
+#: builtin/merge.c:266 builtin/notes.c:787 builtin/pull.c:187
+#: builtin/rebase.c:493 builtin/rebase.c:1501 builtin/revert.c:114
 msgid "strategy"
 msgstr "strategia"
 
-#: builtin/merge.c:267 builtin/pull.c:187
+#: builtin/merge.c:267 builtin/pull.c:188
 msgid "merge strategy to use"
 msgstr "strategia di merge da usare"
 
-#: builtin/merge.c:268 builtin/pull.c:190
+#: builtin/merge.c:268 builtin/pull.c:191
 msgid "option=value"
 msgstr "opzione=valore"
 
-#: builtin/merge.c:269 builtin/pull.c:191
+#: builtin/merge.c:269 builtin/pull.c:192
 msgid "option for selected merge strategy"
 msgstr "opzione per la strategia di merge selezionata"
 
@@ -15265,13 +15351,13 @@
 msgid "continue the current in-progress merge"
 msgstr "continua il merge attualmente in corso"
 
-#: builtin/merge.c:284 builtin/pull.c:198
+#: builtin/merge.c:284 builtin/pull.c:199
 msgid "allow merging unrelated histories"
 msgstr "consenti di unire cronologie non correlate"
 
 #: builtin/merge.c:290
-msgid "verify commit-msg hook"
-msgstr "verifica hook commit-msg"
+msgid "bypass pre-merge-commit and commit-msg hooks"
+msgstr "ignora gli hook pre-merge-commit e commit-msg"
 
 #: builtin/merge.c:307
 msgid "could not run stash."
@@ -15314,32 +15400,32 @@
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "Stringa branch.%s.mergeoptions errata: %s"
 
-#: builtin/merge.c:708
+#: builtin/merge.c:705
 msgid "Not handling anything other than two heads merge."
 msgstr "Non gestisco nulla che non sia il merge di due head."
 
-#: builtin/merge.c:722
+#: builtin/merge.c:719
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr "Opzione sconosciuta per merge-recursive: -X%s"
 
-#: builtin/merge.c:737
+#: builtin/merge.c:734
 #, c-format
 msgid "unable to write %s"
 msgstr "impossibile scrivere %s"
 
-#: builtin/merge.c:789
+#: builtin/merge.c:786
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "Non è stato possibile leggere da '%s'"
 
-#: builtin/merge.c:798
+#: builtin/merge.c:795
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr ""
 "Non eseguo il commit del merge; usa 'git commit' per completare il merge.\n"
 
-#: builtin/merge.c:804
+#: builtin/merge.c:801
 msgid ""
 "Please enter a commit message to explain why this merge is necessary,\n"
 "especially if it merges an updated upstream into a topic branch.\n"
@@ -15350,11 +15436,11 @@
 "aggiornato in un topic branch.\n"
 "\n"
 
-#: builtin/merge.c:809
+#: builtin/merge.c:806
 msgid "An empty message aborts the commit.\n"
 msgstr "Un messaggio vuoto interromperà il commit.\n"
 
-#: builtin/merge.c:812
+#: builtin/merge.c:809
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -15363,74 +15449,74 @@
 "Le righe che iniziano con '%c' saranno ignorate e un messaggio vuoto\n"
 "interromperà il commit.\n"
 
-#: builtin/merge.c:853
+#: builtin/merge.c:862
 msgid "Empty commit message."
 msgstr "Messaggio di commit vuoto."
 
-#: builtin/merge.c:872
+#: builtin/merge.c:877
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Splendido.\n"
 
-#: builtin/merge.c:933
+#: builtin/merge.c:938
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 "Merge automatico fallito; risolvi i conflitti ed esegui il commit\n"
 "del risultato.\n"
 
-#: builtin/merge.c:972
+#: builtin/merge.c:977
 msgid "No current branch."
 msgstr "Nessun branch corrente."
 
-#: builtin/merge.c:974
+#: builtin/merge.c:979
 msgid "No remote for the current branch."
 msgstr "Nessun remote per il branch corrente."
 
-#: builtin/merge.c:976
+#: builtin/merge.c:981
 msgid "No default upstream defined for the current branch."
 msgstr "Nessun upstream di default definito per il branch corrente."
 
-#: builtin/merge.c:981
+#: builtin/merge.c:986
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "Nessun branch che tracci un remoto per %s da %s"
 
-#: builtin/merge.c:1038
+#: builtin/merge.c:1043
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Valore errato '%s' nell'ambiente '%s'"
 
-#: builtin/merge.c:1141
+#: builtin/merge.c:1146
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "non è qualcosa di cui possiamo eseguire il merge in %s: %s"
 
-#: builtin/merge.c:1175
+#: builtin/merge.c:1180
 msgid "not something we can merge"
 msgstr "non è qualcosa di cui possiamo eseguire il merge"
 
-#: builtin/merge.c:1278
+#: builtin/merge.c:1283
 msgid "--abort expects no arguments"
 msgstr "--abort non richiede argomenti"
 
-#: builtin/merge.c:1282
+#: builtin/merge.c:1287
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "Non c'è nessun merge da interrompere (MERGE_HEAD mancante)."
 
-#: builtin/merge.c:1291
+#: builtin/merge.c:1296
 msgid "--quit expects no arguments"
 msgstr "--quit non richiede argomenti"
 
-#: builtin/merge.c:1304
+#: builtin/merge.c:1309
 msgid "--continue expects no arguments"
 msgstr "--continue non richiede argomenti"
 
-#: builtin/merge.c:1308
+#: builtin/merge.c:1313
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "Non c'è nessun merge in corso (MERGE_HEAD mancante)."
 
-#: builtin/merge.c:1324
+#: builtin/merge.c:1329
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -15438,7 +15524,7 @@
 "Non hai concluso il merge (MERGE_HEAD esiste).\n"
 "Esegui il commit delle modifiche prima di eseguire il merge."
 
-#: builtin/merge.c:1331
+#: builtin/merge.c:1336
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -15446,96 +15532,96 @@
 "Non hai concluso il cherry-pick (CHERRY_PICK_HEAD esiste).\n"
 "Esegui il commit delle modifiche prima di eseguire il merge."
 
-#: builtin/merge.c:1334
+#: builtin/merge.c:1339
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "Il cherry-pick non è stato concluso (CHERRY_PICK_HEAD esiste)."
 
-#: builtin/merge.c:1348
+#: builtin/merge.c:1353
 msgid "You cannot combine --squash with --no-ff."
 msgstr "Non è possibile combinare --squash con --no-ff."
 
-#: builtin/merge.c:1350
+#: builtin/merge.c:1355
 msgid "You cannot combine --squash with --commit."
 msgstr "Non è possibile combinare --squash con --commit."
 
-#: builtin/merge.c:1366
+#: builtin/merge.c:1371
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr "Nessun commit specificato e merge.defaultToUpstream non impostato."
 
-#: builtin/merge.c:1383
+#: builtin/merge.c:1388
 msgid "Squash commit into empty head not supported yet"
 msgstr "Lo squash di un commit in un'head vuota non è ancora supportato"
 
-#: builtin/merge.c:1385
+#: builtin/merge.c:1390
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr "Un commit non fast forward non ha senso in un'head vuota"
 
-#: builtin/merge.c:1390
+#: builtin/merge.c:1395
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - non è qualcosa per cui possiamo eseguire il merge"
 
-#: builtin/merge.c:1392
+#: builtin/merge.c:1397
 msgid "Can merge only exactly one commit into empty head"
 msgstr "Si può eseguire solo il merge di uno e un solo commit in un'head vuota"
 
-#: builtin/merge.c:1471
+#: builtin/merge.c:1476
 msgid "refusing to merge unrelated histories"
 msgstr "mi rifiuto di eseguire il merge di cronologie non correlate"
 
-#: builtin/merge.c:1480
+#: builtin/merge.c:1485
 msgid "Already up to date."
 msgstr "Già aggiornato."
 
-#: builtin/merge.c:1490
+#: builtin/merge.c:1495
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Aggiornamento di %s..%s\n"
 
-#: builtin/merge.c:1532
+#: builtin/merge.c:1537
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "Provo con un merge veramente banale dentro l'indice...\n"
 
-#: builtin/merge.c:1539
+#: builtin/merge.c:1544
 #, c-format
 msgid "Nope.\n"
 msgstr "No.\n"
 
-#: builtin/merge.c:1564
+#: builtin/merge.c:1569
 msgid "Already up to date. Yeeah!"
 msgstr "Già aggiornato. Oh sì!"
 
-#: builtin/merge.c:1570
+#: builtin/merge.c:1575
 msgid "Not possible to fast-forward, aborting."
 msgstr "Fast forward non possibile, interrompo l'operazione."
 
-#: builtin/merge.c:1593 builtin/merge.c:1658
+#: builtin/merge.c:1598 builtin/merge.c:1663
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Ripristino l'albero in uno stato pulito...\n"
 
-#: builtin/merge.c:1597
+#: builtin/merge.c:1602
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Tentativo con la strategia di merge %s...\n"
 
-#: builtin/merge.c:1649
+#: builtin/merge.c:1654
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Nessuna strategia di merge ha gestito il merge.\n"
 
-#: builtin/merge.c:1651
+#: builtin/merge.c:1656
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "Merge con la strategia %s fallito.\n"
 
-#: builtin/merge.c:1660
+#: builtin/merge.c:1665
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr "Uso %s per preparare una risoluzione manuale.\n"
 
-#: builtin/merge.c:1672
+#: builtin/merge.c:1677
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
@@ -15624,33 +15710,33 @@
 msgid "set labels for file1/orig-file/file2"
 msgstr "imposta etichette per file1/file originale/file2"
 
-#: builtin/merge-recursive.c:46
+#: builtin/merge-recursive.c:47
 #, c-format
 msgid "unknown option %s"
 msgstr "opzione sconosciuta %s"
 
-#: builtin/merge-recursive.c:52
+#: builtin/merge-recursive.c:53
 #, c-format
 msgid "could not parse object '%s'"
 msgstr "impossibile analizzare l'oggetto '%s'"
 
-#: builtin/merge-recursive.c:56
+#: builtin/merge-recursive.c:57
 #, c-format
 msgid "cannot handle more than %d base. Ignoring %s."
 msgid_plural "cannot handle more than %d bases. Ignoring %s."
 msgstr[0] "impossibile gestire più di %d base. Ignoro %s."
 msgstr[1] "impossibile gestire più di %d basi. Ignoro %s."
 
-#: builtin/merge-recursive.c:64
+#: builtin/merge-recursive.c:65
 msgid "not handling anything other than two heads merge."
 msgstr "non gestisco nulla che non sia il merge di due head."
 
-#: builtin/merge-recursive.c:70 builtin/merge-recursive.c:72
+#: builtin/merge-recursive.c:74 builtin/merge-recursive.c:76
 #, c-format
 msgid "could not resolve ref '%s'"
 msgstr "impossibile risolvere il riferimento '%s'"
 
-#: builtin/merge-recursive.c:78
+#: builtin/merge-recursive.c:82
 #, c-format
 msgid "Merging %s with %s\n"
 msgstr "Merge di %s con %s in corso\n"
@@ -15794,52 +15880,52 @@
 msgid "Renaming %s to %s\n"
 msgstr "Rinominazione di %s in %s in corso\n"
 
-#: builtin/mv.c:277 builtin/remote.c:717 builtin/repack.c:510
+#: builtin/mv.c:277 builtin/remote.c:717 builtin/repack.c:511
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "rinomina di '%s' non riuscita"
 
-#: builtin/name-rev.c:352
+#: builtin/name-rev.c:356
 msgid "git name-rev [<options>] <commit>..."
 msgstr "git name-rev [<opzioni>] <commit>..."
 
-#: builtin/name-rev.c:353
+#: builtin/name-rev.c:357
 msgid "git name-rev [<options>] --all"
 msgstr "git name-rev [<opzioni>] --all"
 
-#: builtin/name-rev.c:354
+#: builtin/name-rev.c:358
 msgid "git name-rev [<options>] --stdin"
 msgstr "git name-rev [<opzioni>] --stdin"
 
-#: builtin/name-rev.c:411
+#: builtin/name-rev.c:415
 msgid "print only names (no SHA-1)"
 msgstr "stampa solo i nomi (non lo SHA-1)"
 
-#: builtin/name-rev.c:412
+#: builtin/name-rev.c:416
 msgid "only use tags to name the commits"
 msgstr "usa solo tag per denominare i commit"
 
-#: builtin/name-rev.c:414
+#: builtin/name-rev.c:418
 msgid "only use refs matching <pattern>"
 msgstr "usa solo i riferimenti corrispondenti a <pattern>"
 
-#: builtin/name-rev.c:416
+#: builtin/name-rev.c:420
 msgid "ignore refs matching <pattern>"
 msgstr "ignora i riferimenti corrispondenti a <pattern>"
 
-#: builtin/name-rev.c:418
+#: builtin/name-rev.c:422
 msgid "list all commits reachable from all refs"
 msgstr "elenca tutti i commit raggiungibili da tutti i riferimenti"
 
-#: builtin/name-rev.c:419
+#: builtin/name-rev.c:423
 msgid "read from stdin"
 msgstr "leggi dallo standard input"
 
-#: builtin/name-rev.c:420
+#: builtin/name-rev.c:424
 msgid "allow to print `undefined` names (default)"
 msgstr "consenti di stampare nomi `non definito` (impostazione predefinita)"
 
-#: builtin/name-rev.c:426
+#: builtin/name-rev.c:430
 msgid "dereference tags in the input (internal use)"
 msgstr "dereferenzia tag nell'input (uso interno)"
 
@@ -16243,7 +16329,7 @@
 msgid "read object names from the standard input"
 msgstr "leggi i nomi degli oggetti dallo standard input"
 
-#: builtin/notes.c:954 builtin/prune.c:130 builtin/worktree.c:165
+#: builtin/notes.c:954 builtin/prune.c:130 builtin/worktree.c:164
 msgid "do not remove, show only"
 msgstr "non rimuovere, limitati a visualizzare"
 
@@ -16259,7 +16345,7 @@
 msgid "use notes from <notes-ref>"
 msgstr "usa le note in <riferimento note>"
 
-#: builtin/notes.c:1034 builtin/stash.c:1598
+#: builtin/notes.c:1034 builtin/stash.c:1607
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "sottocomando sconosciuto: %s"
@@ -16336,71 +16422,71 @@
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "scritti %<PRIu32> oggetti quando me ne attendevo %<PRIu32>"
 
-#: builtin/pack-objects.c:1166
+#: builtin/pack-objects.c:1164
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr ""
 "disabilito la scrittura delle bitmap perché alcuni oggetti non saranno "
 "sottoposti a pack"
 
-#: builtin/pack-objects.c:1597
+#: builtin/pack-objects.c:1592
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "overflow dell'offset base del delta nel pack per %s"
 
-#: builtin/pack-objects.c:1606
+#: builtin/pack-objects.c:1601
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "offset base del delta fuori dall'intervallo consentito per %s"
 
-#: builtin/pack-objects.c:1875
+#: builtin/pack-objects.c:1870
 msgid "Counting objects"
 msgstr "Conteggio degli oggetti in corso"
 
-#: builtin/pack-objects.c:2005
+#: builtin/pack-objects.c:2000
 #, c-format
 msgid "unable to get size of %s"
 msgstr "impossibile recuperare le dimensioni di %s"
 
-#: builtin/pack-objects.c:2020
+#: builtin/pack-objects.c:2015
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "impossibile analizzare l'intestazione oggetto di %s"
 
-#: builtin/pack-objects.c:2090 builtin/pack-objects.c:2106
-#: builtin/pack-objects.c:2116
+#: builtin/pack-objects.c:2085 builtin/pack-objects.c:2101
+#: builtin/pack-objects.c:2111
 #, c-format
 msgid "object %s cannot be read"
 msgstr "impossibile leggere l'oggetto %s"
 
-#: builtin/pack-objects.c:2093 builtin/pack-objects.c:2120
+#: builtin/pack-objects.c:2088 builtin/pack-objects.c:2115
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr ""
 "oggetto %s: lunghezza oggetto inconsistente (%<PRIuMAX> contro %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2130
+#: builtin/pack-objects.c:2125
 msgid "suboptimal pack - out of memory"
 msgstr "pack subottimo - memoria esaurita"
 
-#: builtin/pack-objects.c:2456
+#: builtin/pack-objects.c:2440
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Compressione delta in corso, uso fino a %d thread"
 
-#: builtin/pack-objects.c:2588
+#: builtin/pack-objects.c:2572
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "impossibile eseguire il pack degli oggetti raggiungibili dal tag %s"
 
-#: builtin/pack-objects.c:2675
+#: builtin/pack-objects.c:2659
 msgid "Compressing objects"
 msgstr "Compressione oggetti in corso"
 
-#: builtin/pack-objects.c:2681
+#: builtin/pack-objects.c:2665
 msgid "inconsistency with delta count"
 msgstr "inconsistenza con il numero dei delta"
 
-#: builtin/pack-objects.c:2762
+#: builtin/pack-objects.c:2742
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -16409,7 +16495,7 @@
 "atteso ID oggetto arco, ricevuti dati errati:\n"
 " %s"
 
-#: builtin/pack-objects.c:2768
+#: builtin/pack-objects.c:2748
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -16418,251 +16504,251 @@
 "atteso ID oggetto, ricevuti dati errati:\n"
 " %s"
 
-#: builtin/pack-objects.c:2866
+#: builtin/pack-objects.c:2846
 msgid "invalid value for --missing"
 msgstr "valore non valido per --missing"
 
-#: builtin/pack-objects.c:2925 builtin/pack-objects.c:3033
+#: builtin/pack-objects.c:2905 builtin/pack-objects.c:3013
 msgid "cannot open pack index"
 msgstr "impossibile aprire l'indice pack"
 
-#: builtin/pack-objects.c:2956
+#: builtin/pack-objects.c:2936
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "impossibile esaminare l'oggetto sciolto %s"
 
-#: builtin/pack-objects.c:3041
+#: builtin/pack-objects.c:3021
 msgid "unable to force loose object"
 msgstr "impossibile forzare l'oggetto sciolto"
 
-#: builtin/pack-objects.c:3133
+#: builtin/pack-objects.c:3113
 #, c-format
 msgid "not a rev '%s'"
 msgstr "'%s' non è una revisione"
 
-#: builtin/pack-objects.c:3136
+#: builtin/pack-objects.c:3116
 #, c-format
 msgid "bad revision '%s'"
 msgstr "revisione '%s' errata"
 
-#: builtin/pack-objects.c:3161
+#: builtin/pack-objects.c:3141
 msgid "unable to add recent objects"
 msgstr "impossibile aggiungere gli oggetti recenti"
 
-#: builtin/pack-objects.c:3214
+#: builtin/pack-objects.c:3194
 #, c-format
 msgid "unsupported index version %s"
 msgstr "versione %s di index non supportata"
 
-#: builtin/pack-objects.c:3218
+#: builtin/pack-objects.c:3198
 #, c-format
 msgid "bad index version '%s'"
 msgstr "versione '%s' di index errata"
 
-#: builtin/pack-objects.c:3248
+#: builtin/pack-objects.c:3228
 msgid "do not show progress meter"
 msgstr "non visualizzare la barra di avanzamento"
 
-#: builtin/pack-objects.c:3250
+#: builtin/pack-objects.c:3230
 msgid "show progress meter"
 msgstr "visualizza la barra di avanzamento"
 
-#: builtin/pack-objects.c:3252
+#: builtin/pack-objects.c:3232
 msgid "show progress meter during object writing phase"
 msgstr ""
 "visualizza la barra di avanzamento durante la fase di scrittura oggetti"
 
-#: builtin/pack-objects.c:3255
+#: builtin/pack-objects.c:3235
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "simile a --all-progress quando è visualizzata la barra di avanzamento"
 
-#: builtin/pack-objects.c:3256
+#: builtin/pack-objects.c:3236
 msgid "<version>[,<offset>]"
 msgstr "<versione>[,<offset>]"
 
-#: builtin/pack-objects.c:3257
+#: builtin/pack-objects.c:3237
 msgid "write the pack index file in the specified idx format version"
 msgstr "scrivi il file indice pack usando la versione formato idx specificata"
 
-#: builtin/pack-objects.c:3260
+#: builtin/pack-objects.c:3240
 msgid "maximum size of each output pack file"
 msgstr "dimensione massima di ogni file pack in output"
 
-#: builtin/pack-objects.c:3262
+#: builtin/pack-objects.c:3242
 msgid "ignore borrowed objects from alternate object store"
 msgstr "ignora gli oggetti presi in prestito dallo store oggetti alternativo"
 
-#: builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3244
 msgid "ignore packed objects"
 msgstr "ignora gli oggetti sottoposti a pack"
 
-#: builtin/pack-objects.c:3266
+#: builtin/pack-objects.c:3246
 msgid "limit pack window by objects"
 msgstr "limita la finestra di pack al numero di oggetti specificato"
 
-#: builtin/pack-objects.c:3268
+#: builtin/pack-objects.c:3248
 msgid "limit pack window by memory in addition to object limit"
 msgstr ""
 "limita la finestra di pack alla memoria specificata in aggiunta al limite "
 "sugli oggetti"
 
-#: builtin/pack-objects.c:3270
+#: builtin/pack-objects.c:3250
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr "lunghezza massima della catena di delta consentita nel pack risultante"
 
-#: builtin/pack-objects.c:3272
+#: builtin/pack-objects.c:3252
 msgid "reuse existing deltas"
 msgstr "riusa i delta esistenti"
 
-#: builtin/pack-objects.c:3274
+#: builtin/pack-objects.c:3254
 msgid "reuse existing objects"
 msgstr "riusa gli oggetti esistenti"
 
-#: builtin/pack-objects.c:3276
+#: builtin/pack-objects.c:3256
 msgid "use OFS_DELTA objects"
 msgstr "usa oggetti OFS_DELTA"
 
-#: builtin/pack-objects.c:3278
+#: builtin/pack-objects.c:3258
 msgid "use threads when searching for best delta matches"
 msgstr ""
 "usa più thread durante la ricerca delle migliori corrispondenze per i delta"
 
-#: builtin/pack-objects.c:3280
+#: builtin/pack-objects.c:3260
 msgid "do not create an empty pack output"
 msgstr "non creare un output pack vuoto"
 
-#: builtin/pack-objects.c:3282
+#: builtin/pack-objects.c:3262
 msgid "read revision arguments from standard input"
 msgstr "leggi gli argomenti revisione dallo standard input"
 
-#: builtin/pack-objects.c:3284
+#: builtin/pack-objects.c:3264
 msgid "limit the objects to those that are not yet packed"
 msgstr "limita gli oggetti a quelli non ancora sottoposti a pack"
 
-#: builtin/pack-objects.c:3287
+#: builtin/pack-objects.c:3267
 msgid "include objects reachable from any reference"
 msgstr "includi gli oggetti raggiungibili da qualunque riferimento"
 
-#: builtin/pack-objects.c:3290
+#: builtin/pack-objects.c:3270
 msgid "include objects referred by reflog entries"
 msgstr "includi gli oggetti referenziati da voci del log riferimenti"
 
-#: builtin/pack-objects.c:3293
+#: builtin/pack-objects.c:3273
 msgid "include objects referred to by the index"
 msgstr "includi gli oggetti referenziati dall'indice"
 
-#: builtin/pack-objects.c:3296
+#: builtin/pack-objects.c:3276
 msgid "output pack to stdout"
 msgstr "invia il pack in output sullo standard output"
 
-#: builtin/pack-objects.c:3298
+#: builtin/pack-objects.c:3278
 msgid "include tag objects that refer to objects to be packed"
 msgstr ""
 "includi gli oggetti tag che fanno riferimento agli oggetti da sottoporre a "
 "pack"
 
-#: builtin/pack-objects.c:3300
+#: builtin/pack-objects.c:3280
 msgid "keep unreachable objects"
 msgstr "mantieni gli oggetti non raggiungibili"
 
-#: builtin/pack-objects.c:3302
+#: builtin/pack-objects.c:3282
 msgid "pack loose unreachable objects"
 msgstr "esegui il pack degli oggetti non raggiungibili sciolti"
 
-#: builtin/pack-objects.c:3304
+#: builtin/pack-objects.c:3284
 msgid "unpack unreachable objects newer than <time>"
 msgstr "decomprimi gli oggetti non raggiungibili più recenti di <tempo>"
 
-#: builtin/pack-objects.c:3307
+#: builtin/pack-objects.c:3287
 msgid "use the sparse reachability algorithm"
 msgstr "usa l'algoritmo di raggiungibilità sparse"
 
-#: builtin/pack-objects.c:3309
+#: builtin/pack-objects.c:3289
 msgid "create thin packs"
 msgstr "crea pack thin"
 
-#: builtin/pack-objects.c:3311
+#: builtin/pack-objects.c:3291
 msgid "create packs suitable for shallow fetches"
 msgstr "crea pack adatti per fetch shallow"
 
-#: builtin/pack-objects.c:3313
+#: builtin/pack-objects.c:3293
 msgid "ignore packs that have companion .keep file"
 msgstr "ignora i pack che hanno un file .keep che li accompagna"
 
-#: builtin/pack-objects.c:3315
+#: builtin/pack-objects.c:3295
 msgid "ignore this pack"
 msgstr "ignora questo pack"
 
-#: builtin/pack-objects.c:3317
+#: builtin/pack-objects.c:3297
 msgid "pack compression level"
 msgstr "livello compressione pack"
 
-#: builtin/pack-objects.c:3319
+#: builtin/pack-objects.c:3299
 msgid "do not hide commits by grafts"
 msgstr "non nascondere i commit innestati"
 
-#: builtin/pack-objects.c:3321
+#: builtin/pack-objects.c:3301
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr ""
 "usa un indice bitmap se disponibile per velocizzare il conteggio degli "
 "oggetti"
 
-#: builtin/pack-objects.c:3323
+#: builtin/pack-objects.c:3303
 msgid "write a bitmap index together with the pack index"
 msgstr "scrivi un indice bitmap insieme all'indice pack"
 
-#: builtin/pack-objects.c:3327
+#: builtin/pack-objects.c:3307
 msgid "write a bitmap index if possible"
 msgstr "scrivi un indice bitmap se possibile"
 
-#: builtin/pack-objects.c:3331
+#: builtin/pack-objects.c:3311
 msgid "handling for missing objects"
 msgstr "azione da eseguire sugli oggetti mancanti"
 
-#: builtin/pack-objects.c:3334
+#: builtin/pack-objects.c:3314
 msgid "do not pack objects in promisor packfiles"
 msgstr "non eseguire il pack degli oggetti nei file pack promettenti"
 
-#: builtin/pack-objects.c:3336
+#: builtin/pack-objects.c:3316
 msgid "respect islands during delta compression"
 msgstr "rispetta le isole durante la compressione delta"
 
-#: builtin/pack-objects.c:3361
+#: builtin/pack-objects.c:3345
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "la profondità della catena dei delta (%d) è troppo elevata, forzo %d"
 
-#: builtin/pack-objects.c:3366
+#: builtin/pack-objects.c:3350
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "il valore pack.deltaCacheLimit è troppo elevato, forzo %d"
 
-#: builtin/pack-objects.c:3420
+#: builtin/pack-objects.c:3404
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 "--max-pack-size non può essere usato per generare un pack da trasferire"
 
-#: builtin/pack-objects.c:3422
+#: builtin/pack-objects.c:3406
 msgid "minimum pack size limit is 1 MiB"
 msgstr "il limite minimo delle dimensioni dei pack è 1 MiB"
 
-#: builtin/pack-objects.c:3427
+#: builtin/pack-objects.c:3411
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "--thin non può essere usato per generare un pack indicizzabile"
 
-#: builtin/pack-objects.c:3430
+#: builtin/pack-objects.c:3414
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr "--keep-unreachable e --unpack-unreachable non sono compatibili"
 
-#: builtin/pack-objects.c:3436
+#: builtin/pack-objects.c:3420
 msgid "cannot use --filter without --stdout"
 msgstr "impossibile usare --filter senza --stdout"
 
-#: builtin/pack-objects.c:3497
+#: builtin/pack-objects.c:3481
 msgid "Enumerating objects"
 msgstr "Enumerazione degli oggetti in corso"
 
-#: builtin/pack-objects.c:3527
+#: builtin/pack-objects.c:3511
 #, c-format
 msgid "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>)"
 msgstr ""
@@ -16719,44 +16805,44 @@
 msgid "git pull [<options>] [<repository> [<refspec>...]]"
 msgstr "git pull [<opzioni>] [<repository> [<specificatore riferimento>...]]"
 
-#: builtin/pull.c:141
+#: builtin/pull.c:142
 msgid "control for recursive fetching of submodules"
 msgstr "controlla il recupero ricorsivo dei sottomoduli"
 
-#: builtin/pull.c:145
+#: builtin/pull.c:146
 msgid "Options related to merging"
 msgstr "Opzioni relative al merge"
 
-#: builtin/pull.c:148
+#: builtin/pull.c:149
 msgid "incorporate changes by rebasing rather than merging"
 msgstr "incorpora le modifiche eseguendo un rebase anziché un merge"
 
-#: builtin/pull.c:176 builtin/rebase.c:447 builtin/revert.c:126
+#: builtin/pull.c:177 builtin/rebase.c:448 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "consenti fast forward"
 
-#: builtin/pull.c:185
+#: builtin/pull.c:186
 msgid "automatically stash/stash pop before and after rebase"
 msgstr "esegui stash/stash pop automaticamente prima e dopo il rebase"
 
-#: builtin/pull.c:201
+#: builtin/pull.c:202
 msgid "Options related to fetching"
 msgstr "Opzioni relative al fetch"
 
-#: builtin/pull.c:211
+#: builtin/pull.c:212
 msgid "force overwrite of local branch"
 msgstr "forza la sovrascrittura del branch locale"
 
-#: builtin/pull.c:219
+#: builtin/pull.c:220
 msgid "number of submodules pulled in parallel"
 msgstr "numero di sottomoduli recuperati in parallelo"
 
-#: builtin/pull.c:316
+#: builtin/pull.c:320
 #, c-format
 msgid "Invalid value for pull.ff: %s"
 msgstr "Valore non valido per pull.ff: %s"
 
-#: builtin/pull.c:433
+#: builtin/pull.c:437
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
 "fetched."
@@ -16764,14 +16850,14 @@
 "Non ci sono candidati in base ai quali eseguire il rebase fra i riferimenti "
 "appena recuperati."
 
-#: builtin/pull.c:435
+#: builtin/pull.c:439
 msgid ""
 "There are no candidates for merging among the refs that you just fetched."
 msgstr ""
 "Non ci sono candidati in base ai quali eseguire il merge fra i riferimenti "
 "appena recuperati."
 
-#: builtin/pull.c:436
+#: builtin/pull.c:440
 msgid ""
 "Generally this means that you provided a wildcard refspec which had no\n"
 "matches on the remote end."
@@ -16779,7 +16865,7 @@
 "In generale, questo significa che hai fornito uno specificatore\n"
 "riferimento che non aveva corrispondenze nel remoto."
 
-#: builtin/pull.c:439
+#: builtin/pull.c:443
 #, c-format
 msgid ""
 "You asked to pull from the remote '%s', but did not specify\n"
@@ -16791,44 +16877,44 @@
 "configurato come predefinito per il branch corrente, devi\n"
 "specificare un branch sulla riga di comando."
 
-#: builtin/pull.c:444 builtin/rebase.c:1326 git-parse-remote.sh:73
+#: builtin/pull.c:448 builtin/rebase.c:1347 git-parse-remote.sh:73
 msgid "You are not currently on a branch."
 msgstr "Attualmente non sei su un branch."
 
-#: builtin/pull.c:446 builtin/pull.c:461 git-parse-remote.sh:79
+#: builtin/pull.c:450 builtin/pull.c:465 git-parse-remote.sh:79
 msgid "Please specify which branch you want to rebase against."
 msgstr "Specifica il branch in base a cui vuoi effettuare il rebase."
 
-#: builtin/pull.c:448 builtin/pull.c:463 git-parse-remote.sh:82
+#: builtin/pull.c:452 builtin/pull.c:467 git-parse-remote.sh:82
 msgid "Please specify which branch you want to merge with."
 msgstr "Specifica il branch in base a cui vuoi effettuare il merge."
 
-#: builtin/pull.c:449 builtin/pull.c:464
+#: builtin/pull.c:453 builtin/pull.c:468
 msgid "See git-pull(1) for details."
 msgstr "Vedi git-pull(1) per ulteriori dettagli."
 
-#: builtin/pull.c:451 builtin/pull.c:457 builtin/pull.c:466
-#: builtin/rebase.c:1332 git-parse-remote.sh:64
+#: builtin/pull.c:455 builtin/pull.c:461 builtin/pull.c:470
+#: builtin/rebase.c:1353 git-parse-remote.sh:64
 msgid "<remote>"
 msgstr "<remoto>"
 
-#: builtin/pull.c:451 builtin/pull.c:466 builtin/pull.c:471
+#: builtin/pull.c:455 builtin/pull.c:470 builtin/pull.c:475
 #: git-parse-remote.sh:65
 msgid "<branch>"
 msgstr "<branch>"
 
-#: builtin/pull.c:459 builtin/rebase.c:1324 git-parse-remote.sh:75
+#: builtin/pull.c:463 builtin/rebase.c:1345 git-parse-remote.sh:75
 msgid "There is no tracking information for the current branch."
 msgstr "Non ci sono informazioni di tracciamento per il branch corrente."
 
-#: builtin/pull.c:468 git-parse-remote.sh:95
+#: builtin/pull.c:472 git-parse-remote.sh:95
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:"
 msgstr ""
 "Se vuoi impostare le informazioni di tracciamento per questo branch puoi "
 "farlo con:"
 
-#: builtin/pull.c:473
+#: builtin/pull.c:477
 #, c-format
 msgid ""
 "Your configuration specifies to merge with the ref '%s'\n"
@@ -16838,32 +16924,32 @@
 "il merge con il riferimento '%s' del remoto, ma un tale\n"
 "riferimento non è stato recuperato."
 
-#: builtin/pull.c:581
+#: builtin/pull.c:587
 #, c-format
 msgid "unable to access commit %s"
 msgstr "impossibile accedere al commit %s"
 
-#: builtin/pull.c:861
+#: builtin/pull.c:867
 msgid "ignoring --verify-signatures for rebase"
 msgstr "ignoro --verify-signature per il rebase"
 
-#: builtin/pull.c:916
+#: builtin/pull.c:922
 msgid "--[no-]autostash option is only valid with --rebase."
 msgstr "l'opzione --[no-]autostash option è valida solo con --rebase."
 
-#: builtin/pull.c:924
+#: builtin/pull.c:930
 msgid "Updating an unborn branch with changes added to the index."
 msgstr "Aggiorno un branch non nato con le modifiche aggiunte all'indice."
 
-#: builtin/pull.c:928
+#: builtin/pull.c:934
 msgid "pull with rebase"
 msgstr "pull con rebase"
 
-#: builtin/pull.c:929
+#: builtin/pull.c:935
 msgid "please commit or stash them."
 msgstr "eseguine il commit o lo stash."
 
-#: builtin/pull.c:954
+#: builtin/pull.c:960
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -16875,7 +16961,7 @@
 "Eseguo il fast forward dell'albero\n"
 "di lavoro dal commit %s."
 
-#: builtin/pull.c:960
+#: builtin/pull.c:966
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -16894,15 +16980,15 @@
 "$ git reset --hard\n"
 "per eseguire il ripristino."
 
-#: builtin/pull.c:975
+#: builtin/pull.c:981
 msgid "Cannot merge multiple branches into empty head."
 msgstr "Impossibile eseguire il merge di più branch in un head vuoto."
 
-#: builtin/pull.c:979
+#: builtin/pull.c:985
 msgid "Cannot rebase onto multiple branches."
 msgstr "Impossibile eseguire il rebase su più branch."
 
-#: builtin/pull.c:986
+#: builtin/pull.c:992
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 "impossibile eseguire il rebase se ci sono delle modifiche registrate "
@@ -17073,17 +17159,95 @@
 msgid "Pushing to %s\n"
 msgstr "Push su %s in corso\n"
 
-#: builtin/push.c:364
+#: builtin/push.c:366
 #, c-format
 msgid "failed to push some refs to '%s'"
 msgstr "push di alcuni riferimenti su '%s' non riuscito"
 
-#: builtin/push.c:398
+#: builtin/push.c:541
+msgid "repository"
+msgstr "repository"
+
+#: builtin/push.c:542 builtin/send-pack.c:164
+msgid "push all refs"
+msgstr "esegui il push di tutti i riferimenti"
+
+#: builtin/push.c:543 builtin/send-pack.c:166
+msgid "mirror all refs"
+msgstr "esegui il mirror di tutti i riferimenti"
+
+#: builtin/push.c:545
+msgid "delete refs"
+msgstr "elimina riferimenti"
+
+#: builtin/push.c:546
+msgid "push tags (can't be used with --all or --mirror)"
+msgstr "esegui il push dei tag (non può essere usato con --all o --mirror)"
+
+#: builtin/push.c:549 builtin/send-pack.c:167
+msgid "force updates"
+msgstr "forza gli aggiornamenti"
+
+#: builtin/push.c:551 builtin/send-pack.c:181
+msgid "<refname>:<expect>"
+msgstr "<nome riferimento>:<valore atteso>"
+
+#: builtin/push.c:552 builtin/send-pack.c:182
+msgid "require old value of ref to be at this value"
+msgstr ""
+"richiedi che il vecchio valore del riferimento corrisponda a questo valore"
+
+#: builtin/push.c:555
+msgid "control recursive pushing of submodules"
+msgstr "controlla il push ricorsivo dei sottomoduli"
+
+#: builtin/push.c:557 builtin/send-pack.c:175
+msgid "use thin pack"
+msgstr "usa un thin pack"
+
+#: builtin/push.c:558 builtin/push.c:559 builtin/send-pack.c:161
+#: builtin/send-pack.c:162
+msgid "receive pack program"
+msgstr "programma ricezione pack"
+
+#: builtin/push.c:560
+msgid "set upstream for git pull/status"
+msgstr "imposta l'upstream per git pull/status"
+
+#: builtin/push.c:563
+msgid "prune locally removed refs"
+msgstr "elimina i riferimenti rimossi localmente"
+
+#: builtin/push.c:565
+msgid "bypass pre-push hook"
+msgstr "ignora l'hook pre-push"
+
+#: builtin/push.c:566
+msgid "push missing but relevant tags"
+msgstr "esegui il push dei tag mancanti ma rilevanti"
+
+#: builtin/push.c:569 builtin/send-pack.c:169
+msgid "GPG sign the push"
+msgstr "firma il push con GPG"
+
+#: builtin/push.c:571 builtin/send-pack.c:176
+msgid "request atomic transaction on remote side"
+msgstr "richiedi l'atomicità della transazione al remoto"
+
+#: builtin/push.c:589
+msgid "--delete is incompatible with --all, --mirror and --tags"
+msgstr "--delete non è compatibile con --all, --mirror e --tags"
+
+#: builtin/push.c:591
+msgid "--delete doesn't make sense without any refs"
+msgstr "--delete non ha senso senza alcun ref"
+
+#: builtin/push.c:611
 #, c-format
 msgid "bad repository '%s'"
 msgstr "repository '%s' errato"
 
-#: builtin/push.c:399
+#: builtin/push.c:612
 msgid ""
 "No configured push destination.\n"
 "Either specify the URL from the command-line or configure a remote "
@@ -17105,105 +17269,27 @@
 "\n"
 "    git push <nome>\n"
 
-#: builtin/push.c:554
-msgid "repository"
-msgstr "repository"
-
-#: builtin/push.c:555 builtin/send-pack.c:164
-msgid "push all refs"
-msgstr "esegui il push di tutti i riferimenti"
-
-#: builtin/push.c:556 builtin/send-pack.c:166
-msgid "mirror all refs"
-msgstr "esegui il mirror di tutti i riferimenti"
-
-#: builtin/push.c:558
-msgid "delete refs"
-msgstr "elimina riferimenti"
-
-#: builtin/push.c:559
-msgid "push tags (can't be used with --all or --mirror)"
-msgstr "esegui il push dei tag (non può essere usato con --all o --mirror)"
-
-#: builtin/push.c:562 builtin/send-pack.c:167
-msgid "force updates"
-msgstr "forza gli aggiornamenti"
-
-#: builtin/push.c:564 builtin/send-pack.c:181
-msgid "<refname>:<expect>"
-msgstr "<nome riferimento>:<valore atteso>"
-
-#: builtin/push.c:565 builtin/send-pack.c:182
-msgid "require old value of ref to be at this value"
-msgstr ""
-"richiedi che il vecchio valore del riferimento corrisponda a questo valore"
-
-#: builtin/push.c:568
-msgid "control recursive pushing of submodules"
-msgstr "controlla il push ricorsivo dei sottomoduli"
-
-#: builtin/push.c:570 builtin/send-pack.c:175
-msgid "use thin pack"
-msgstr "usa un thin pack"
-
-#: builtin/push.c:571 builtin/push.c:572 builtin/send-pack.c:161
-#: builtin/send-pack.c:162
-msgid "receive pack program"
-msgstr "programma ricezione pack"
-
-#: builtin/push.c:573
-msgid "set upstream for git pull/status"
-msgstr "imposta l'upstream per git pull/status"
-
-#: builtin/push.c:576
-msgid "prune locally removed refs"
-msgstr "elimina i riferimenti rimossi localmente"
-
-#: builtin/push.c:578
-msgid "bypass pre-push hook"
-msgstr "ignora l'hook pre-push"
-
-#: builtin/push.c:579
-msgid "push missing but relevant tags"
-msgstr "esegui il push dei tag mancanti ma rilevanti"
-
-#: builtin/push.c:582 builtin/send-pack.c:169
-msgid "GPG sign the push"
-msgstr "firma il push con GPG"
-
-#: builtin/push.c:584 builtin/send-pack.c:176
-msgid "request atomic transaction on remote side"
-msgstr "richiedi l'atomicità della transazione al remoto"
-
-#: builtin/push.c:602
-msgid "--delete is incompatible with --all, --mirror and --tags"
-msgstr "--delete non è compatibile con --all, --mirror e --tags"
-
-#: builtin/push.c:604
-msgid "--delete doesn't make sense without any refs"
-msgstr "--delete non ha senso senza alcun ref"
-
-#: builtin/push.c:607
+#: builtin/push.c:627
 msgid "--all and --tags are incompatible"
 msgstr "--all e --tags non sono compatibili"
 
-#: builtin/push.c:609
+#: builtin/push.c:629
 msgid "--all can't be combined with refspecs"
 msgstr "--all non può essere combinato con degli specificatori riferimento"
 
-#: builtin/push.c:613
+#: builtin/push.c:633
 msgid "--mirror and --tags are incompatible"
 msgstr "--mirror e --tags non sono compatibili"
 
-#: builtin/push.c:615
+#: builtin/push.c:635
 msgid "--mirror can't be combined with refspecs"
 msgstr "--mirror non può essere combinato con degli specificatori riferimento"
 
-#: builtin/push.c:618
+#: builtin/push.c:638
 msgid "--all and --mirror are incompatible"
 msgstr "--all e --mirror non sono compatibili"
 
-#: builtin/push.c:637
+#: builtin/push.c:642
 msgid "push options must not have new line characters"
 msgstr "le opzioni push non devono avere caratteri di fine riga"
 
@@ -17326,11 +17412,11 @@
 
 #: builtin/rebase.c:32
 msgid ""
-"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] "
-"[<branch>]"
+"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
+"[<upstream> [<branch>]]"
 msgstr ""
-"git rebase [-i] [options] [--exec <comando>] [--onto <nuova base>] "
-"[<upstream>] [<branch>]"
+"git rebase [-i] [opzioni] [--exec <comando>] [--onto <nuova base> | --keep-"
+"base] [<upstream> [<branch>]]"
 
 #: builtin/rebase.c:34
 msgid ""
@@ -17370,190 +17456,190 @@
 msgid "could not generate todo list"
 msgstr "impossibile generare l'elenco todo"
 
-#: builtin/rebase.c:382
+#: builtin/rebase.c:383
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr ""
 "le opzioni --upstream o --onto richiedono che sia fornito un commit di base"
 
-#: builtin/rebase.c:437
+#: builtin/rebase.c:438
 msgid "git rebase--interactive [<options>]"
 msgstr "git rebase --interactive [<opzioni>]"
 
-#: builtin/rebase.c:449
+#: builtin/rebase.c:450
 msgid "keep empty commits"
 msgstr "mantieni i commit vuoti"
 
-#: builtin/rebase.c:451 builtin/revert.c:128
+#: builtin/rebase.c:452 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr "consenti commit con messaggi vuoti"
 
-#: builtin/rebase.c:452
+#: builtin/rebase.c:453
 msgid "rebase merge commits"
 msgstr "esegui il rebase dei commit di merge"
 
-#: builtin/rebase.c:454
+#: builtin/rebase.c:455
 msgid "keep original branch points of cousins"
 msgstr "mantieni i punti di branch originali dei cugini"
 
-#: builtin/rebase.c:456
+#: builtin/rebase.c:457
 msgid "move commits that begin with squash!/fixup!"
 msgstr "sposta i commit che iniziano con squash!/fixup!"
 
-#: builtin/rebase.c:457
+#: builtin/rebase.c:458
 msgid "sign commits"
 msgstr "firma i commit"
 
-#: builtin/rebase.c:459 builtin/rebase.c:1403
+#: builtin/rebase.c:460 builtin/rebase.c:1427
 msgid "display a diffstat of what changed upstream"
 msgstr "visualizza un diffstat delle modifiche upstream"
 
-#: builtin/rebase.c:461
+#: builtin/rebase.c:462
 msgid "continue rebase"
 msgstr "continua il rebase"
 
-#: builtin/rebase.c:463
+#: builtin/rebase.c:464
 msgid "skip commit"
 msgstr "salta il commit"
 
-#: builtin/rebase.c:464
+#: builtin/rebase.c:465
 msgid "edit the todo list"
 msgstr "modifica l'elenco todo"
 
-#: builtin/rebase.c:466
+#: builtin/rebase.c:467
 msgid "show the current patch"
 msgstr "visualizza la patch corrente"
 
-#: builtin/rebase.c:469
+#: builtin/rebase.c:470
 msgid "shorten commit ids in the todo list"
 msgstr "abbrevia gli ID dei commit nell'elenco todo"
 
-#: builtin/rebase.c:471
+#: builtin/rebase.c:472
 msgid "expand commit ids in the todo list"
 msgstr "espandi gli ID dei commit nell'elenco todo"
 
-#: builtin/rebase.c:473
+#: builtin/rebase.c:474
 msgid "check the todo list"
 msgstr "controlla l'elenco todo"
 
-#: builtin/rebase.c:475
+#: builtin/rebase.c:476
 msgid "rearrange fixup/squash lines"
 msgstr "ridisponi le righe fixup/squash"
 
-#: builtin/rebase.c:477
+#: builtin/rebase.c:478
 msgid "insert exec commands in todo list"
 msgstr "inserisci i comandi exec nell'elenco todo"
 
-#: builtin/rebase.c:478
+#: builtin/rebase.c:479
 msgid "onto"
 msgstr "su"
 
-#: builtin/rebase.c:481
+#: builtin/rebase.c:482
 msgid "restrict-revision"
 msgstr "revisioni-limite"
 
-#: builtin/rebase.c:481
+#: builtin/rebase.c:482
 msgid "restrict revision"
 msgstr "limita la revisione"
 
-#: builtin/rebase.c:483
+#: builtin/rebase.c:484
 msgid "squash-onto"
 msgstr "squash-su"
 
-#: builtin/rebase.c:484
+#: builtin/rebase.c:485
 msgid "squash onto"
 msgstr "esegui lo squash su"
 
-#: builtin/rebase.c:486
+#: builtin/rebase.c:487
 msgid "the upstream commit"
 msgstr "il commit upstream"
 
-#: builtin/rebase.c:488
+#: builtin/rebase.c:489
 msgid "head-name"
 msgstr "nome head"
 
-#: builtin/rebase.c:488
+#: builtin/rebase.c:489
 msgid "head name"
 msgstr "nome head"
 
-#: builtin/rebase.c:493
+#: builtin/rebase.c:494
 msgid "rebase strategy"
 msgstr "strategia di rebase"
 
-#: builtin/rebase.c:494
+#: builtin/rebase.c:495
 msgid "strategy-opts"
 msgstr "opzioni strategia"
 
-#: builtin/rebase.c:495
+#: builtin/rebase.c:496
 msgid "strategy options"
 msgstr "opzioni strategia"
 
-#: builtin/rebase.c:496
+#: builtin/rebase.c:497
 msgid "switch-to"
 msgstr "passa a"
 
-#: builtin/rebase.c:497
+#: builtin/rebase.c:498
 msgid "the branch or commit to checkout"
 msgstr "il branch o il commit di cui eseguire il checkout"
 
-#: builtin/rebase.c:498
+#: builtin/rebase.c:499
 msgid "onto-name"
 msgstr "nome"
 
-#: builtin/rebase.c:498
+#: builtin/rebase.c:499
 msgid "onto name"
 msgstr "sul nome"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "cmd"
 msgstr "comando"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "the command to run"
 msgstr "il comando da eseguire"
 
-#: builtin/rebase.c:502 builtin/rebase.c:1486
+#: builtin/rebase.c:503 builtin/rebase.c:1510
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "schedula nuovamente le operazioni `exec` non riuscite automaticamente"
 
-#: builtin/rebase.c:518
+#: builtin/rebase.c:519
 msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
 msgstr "--[no-]rebase-cousins non ha effetto senza --rebase-merges"
 
-#: builtin/rebase.c:534
+#: builtin/rebase.c:535
 #, c-format
 msgid "%s requires an interactive rebase"
 msgstr "%s richiede un rebase interattivo"
 
-#: builtin/rebase.c:586
+#: builtin/rebase.c:587
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "impossibile ottenere 'onto': '%s'"
 
-#: builtin/rebase.c:601
+#: builtin/rebase.c:602
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "orig-head non valida: '%s'"
 
-#: builtin/rebase.c:626
+#: builtin/rebase.c:627
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "ignoro il valore non valido per allow_rerere_autoupdate: '%s'"
 
-#: builtin/rebase.c:702
+#: builtin/rebase.c:703
 #, c-format
 msgid "Could not read '%s'"
 msgstr "Impossibile leggere '%s'"
 
-#: builtin/rebase.c:720
+#: builtin/rebase.c:721
 #, c-format
 msgid "Cannot store %s"
 msgstr "Impossibile memorizzare %s"
 
-#: builtin/rebase.c:827
+#: builtin/rebase.c:828
 msgid "could not determine HEAD revision"
 msgstr "impossibile determinare la revisione HEAD"
 
-#: builtin/rebase.c:950 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:951 git-rebase--preserve-merges.sh:81
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -17569,7 +17655,7 @@
 "Per interrompere l'operazione e tornare allo stato precedente\n"
 "il \"git rebase\", esegui \"git rebase --abort\"."
 
-#: builtin/rebase.c:1031
+#: builtin/rebase.c:1032
 #, c-format
 msgid ""
 "\n"
@@ -17588,7 +17674,7 @@
 "\n"
 "Di conseguenza, Git non può eseguirne il rebase."
 
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1339
 #, c-format
 msgid ""
 "%s\n"
@@ -17605,7 +17691,7 @@
 "    git rebase '<branch>'\n"
 "\n"
 
-#: builtin/rebase.c:1334
+#: builtin/rebase.c:1355
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -17619,131 +17705,135 @@
 "    git branch --set-upstream-to=%s/<branch> %s\n"
 "\n"
 
-#: builtin/rebase.c:1364
+#: builtin/rebase.c:1385
 msgid "exec commands cannot contain newlines"
 msgstr "i comandi exec non possono contenere caratteri di fine riga"
 
-#: builtin/rebase.c:1368
+#: builtin/rebase.c:1389
 msgid "empty exec command"
 msgstr "comando exec vuoto"
 
-#: builtin/rebase.c:1396
+#: builtin/rebase.c:1418
 msgid "rebase onto given branch instead of upstream"
 msgstr "esegui il rebase sul branch specificato anziché su quello upstream"
 
-#: builtin/rebase.c:1398
+#: builtin/rebase.c:1420
+msgid "use the merge-base of upstream and branch as the current base"
+msgstr "usa la base del merge dell'upstream e del branch come base corrente"
+
+#: builtin/rebase.c:1422
 msgid "allow pre-rebase hook to run"
 msgstr "consenti l'esecuzione dell'hook pre-rebase"
 
-#: builtin/rebase.c:1400
+#: builtin/rebase.c:1424
 msgid "be quiet. implies --no-stat"
 msgstr "sii silenzioso. implica --no-stat"
 
-#: builtin/rebase.c:1406
+#: builtin/rebase.c:1430
 msgid "do not show diffstat of what changed upstream"
 msgstr "non visualizzare un diffstat delle modifiche upstream"
 
-#: builtin/rebase.c:1409
+#: builtin/rebase.c:1433
 msgid "add a Signed-off-by: line to each commit"
 msgstr "aggiungi una riga Signed-off-by: a ogni commit"
 
-#: builtin/rebase.c:1411 builtin/rebase.c:1415 builtin/rebase.c:1417
+#: builtin/rebase.c:1435 builtin/rebase.c:1439 builtin/rebase.c:1441
 msgid "passed to 'git am'"
 msgstr "passato a 'git am'"
 
-#: builtin/rebase.c:1419 builtin/rebase.c:1421
+#: builtin/rebase.c:1443 builtin/rebase.c:1445
 msgid "passed to 'git apply'"
 msgstr "passato a 'git apply'"
 
-#: builtin/rebase.c:1423 builtin/rebase.c:1426
+#: builtin/rebase.c:1447 builtin/rebase.c:1450
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "esegui il cherry-pick di tutti i commit, anche se non modificati"
 
-#: builtin/rebase.c:1428
+#: builtin/rebase.c:1452
 msgid "continue"
 msgstr "continua"
 
-#: builtin/rebase.c:1431
+#: builtin/rebase.c:1455
 msgid "skip current patch and continue"
 msgstr "salta la patch corrente e continua"
 
-#: builtin/rebase.c:1433
+#: builtin/rebase.c:1457
 msgid "abort and check out the original branch"
 msgstr "interrompi ed esegui il checkout del branch originario"
 
-#: builtin/rebase.c:1436
+#: builtin/rebase.c:1460
 msgid "abort but keep HEAD where it is"
 msgstr "interrompi ma mantieni l'HEAD dov'è"
 
-#: builtin/rebase.c:1437
+#: builtin/rebase.c:1461
 msgid "edit the todo list during an interactive rebase"
 msgstr "modifica l'elenco todo durante un rebase interattivo"
 
-#: builtin/rebase.c:1440
+#: builtin/rebase.c:1464
 msgid "show the patch file being applied or merged"
 msgstr ""
 "visualizza il file patch che sta per essere applicato o sottoposto a merge"
 
-#: builtin/rebase.c:1443
+#: builtin/rebase.c:1467
 msgid "use merging strategies to rebase"
 msgstr "usa le strategie di merge per eseguire il rebase"
 
-#: builtin/rebase.c:1447
+#: builtin/rebase.c:1471
 msgid "let the user edit the list of commits to rebase"
 msgstr ""
 "consenti all'utente di modificare l'elenco dei commit di cui eseguire il "
 "rebase"
 
-#: builtin/rebase.c:1451
+#: builtin/rebase.c:1475
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr "(DEPRECATO) prova a ricreare i merge anziché ignorarli"
 
-#: builtin/rebase.c:1455
+#: builtin/rebase.c:1479
 msgid "preserve empty commits during rebase"
 msgstr "mantieni i commit vuoti durante il rebase"
 
-#: builtin/rebase.c:1457
+#: builtin/rebase.c:1481
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "sposta i commit che iniziano con squash!/fixup! in -i"
 
-#: builtin/rebase.c:1463
+#: builtin/rebase.c:1487
 msgid "automatically stash/stash pop before and after"
 msgstr "esegui stash/stash pop automaticamente prima e dopo"
 
-#: builtin/rebase.c:1465
+#: builtin/rebase.c:1489
 msgid "add exec lines after each commit of the editable list"
 msgstr "aggiungi righe exec dopo ogni commit della lista modificabile"
 
-#: builtin/rebase.c:1469
+#: builtin/rebase.c:1493
 msgid "allow rebasing commits with empty messages"
 msgstr "consenti il rebase di commit con messaggi vuoti"
 
-#: builtin/rebase.c:1472
+#: builtin/rebase.c:1496
 msgid "try to rebase merges instead of skipping them"
 msgstr "prova ad eseguire il rebase dei merge anziché saltarli"
 
-#: builtin/rebase.c:1475
+#: builtin/rebase.c:1499
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr ""
 "usa 'merge-base --fork-point' per ridefinire più precisamente l'upstream"
 
-#: builtin/rebase.c:1477
+#: builtin/rebase.c:1501
 msgid "use the given merge strategy"
 msgstr "usa la strategia di merge specificata"
 
-#: builtin/rebase.c:1479 builtin/revert.c:115
+#: builtin/rebase.c:1503 builtin/revert.c:115
 msgid "option"
 msgstr "opzione"
 
-#: builtin/rebase.c:1480
+#: builtin/rebase.c:1504
 msgid "pass the argument through to the merge strategy"
 msgstr "passa l'argomento alla strategia di merge"
 
-#: builtin/rebase.c:1483
+#: builtin/rebase.c:1507
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "esegui il rebase di tutti i commit raggiungibili fino a quelli radice"
 
-#: builtin/rebase.c:1500
+#: builtin/rebase.c:1524
 msgid ""
 "the rebase.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
@@ -17751,29 +17841,37 @@
 "il supporto per rebase.useBuiltin è stato rimosso!\n"
 "Vedi la voce relativa in 'git help config' per i dettagli."
 
-#: builtin/rebase.c:1506
+#: builtin/rebase.c:1530
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "Sembra che 'git am' sia in corso. Impossibile eseguire il rebase."
 
-#: builtin/rebase.c:1547
+#: builtin/rebase.c:1571
 msgid ""
 "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
 msgstr "git rebase --preserve-merges è deprecato. Usa --rebase-merges."
 
-#: builtin/rebase.c:1551
+#: builtin/rebase.c:1576
+msgid "cannot combine '--keep-base' with '--onto'"
+msgstr "impossibile combinare '--keep-base' con '--onto'"
+
+#: builtin/rebase.c:1578
+msgid "cannot combine '--keep-base' with '--root'"
+msgstr "impossibile combinare '--keep-base' con '--root'"
+
+#: builtin/rebase.c:1582
 msgid "No rebase in progress?"
 msgstr "Nessun rebase in corso?"
 
-#: builtin/rebase.c:1555
+#: builtin/rebase.c:1586
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr ""
 "L'azione --edit-todo può essere usata solo durante un rebase interattivo."
 
-#: builtin/rebase.c:1578
+#: builtin/rebase.c:1609
 msgid "Cannot read HEAD"
 msgstr "Impossibile leggere l'HEAD"
 
-#: builtin/rebase.c:1590
+#: builtin/rebase.c:1621
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -17782,16 +17880,16 @@
 "quindi contrassegnarli come risolti usando\n"
 "git add"
 
-#: builtin/rebase.c:1609
+#: builtin/rebase.c:1640
 msgid "could not discard worktree changes"
 msgstr "impossibile scartare le modifiche all'albero di lavoro"
 
-#: builtin/rebase.c:1628
+#: builtin/rebase.c:1659
 #, c-format
 msgid "could not move back to %s"
 msgstr "impossibile ritornare a %s"
 
-#: builtin/rebase.c:1673
+#: builtin/rebase.c:1704
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -17812,166 +17910,160 @@
 "ed eseguimi di nuovo. Mi fermo nel caso in cui tu abbia ancora\n"
 "salvato qualcosa di importante lì.\n"
 
-#: builtin/rebase.c:1694
+#: builtin/rebase.c:1725
 msgid "switch `C' expects a numerical value"
 msgstr "l'opzione `C` richiede un valore numerico"
 
-#: builtin/rebase.c:1735
+#: builtin/rebase.c:1766
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Modo sconosciuto: %s"
 
-#: builtin/rebase.c:1757
+#: builtin/rebase.c:1788
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy richiede --merge o --interactive"
 
-#: builtin/rebase.c:1797
+#: builtin/rebase.c:1828
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec richiede --exec o --interactive"
 
-#: builtin/rebase.c:1809
+#: builtin/rebase.c:1840
 msgid "cannot combine am options with either interactive or merge options"
 msgstr "non è possibile combinare le opzioni am con quelle interactive o merge"
 
-#: builtin/rebase.c:1828
+#: builtin/rebase.c:1859
 msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
 msgstr "impossibile combinare '--preserve-merges' con '--rebase-merges'"
 
-#: builtin/rebase.c:1832
+#: builtin/rebase.c:1863
 msgid ""
 "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
 msgstr ""
 "errore: impossibile combinare '--preserve-merges' con '--reschedule-failed-"
 "exec'"
 
-#: builtin/rebase.c:1838
-msgid "cannot combine '--rebase-merges' with '--strategy-option'"
-msgstr "impossibile combinare '--rebase-merges' con '--strategy-option'"
-
-#: builtin/rebase.c:1841
-msgid "cannot combine '--rebase-merges' with '--strategy'"
-msgstr "impossibile combinare '--rebase-merges' con '--strategy'"
-
-#: builtin/rebase.c:1865
+#: builtin/rebase.c:1887
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "upstream non valido: '%s'"
 
-#: builtin/rebase.c:1871
+#: builtin/rebase.c:1893
 msgid "Could not create new root commit"
 msgstr "Impossibile creare il nuovo commit radice"
 
-#: builtin/rebase.c:1889
+#: builtin/rebase.c:1919
+#, c-format
+msgid "'%s': need exactly one merge base with branch"
+msgstr ""
+"'%s': è necessario specificare esattamente una base per il merge con il "
+"branch"
+
+#: builtin/rebase.c:1922
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "'%s': è necessario specificare esattamente una base per il merge"
 
-#: builtin/rebase.c:1896
+#: builtin/rebase.c:1930
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "'%s' non punta a un commit valido"
 
-#: builtin/rebase.c:1921
+#: builtin/rebase.c:1955
 #, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr "errore fatale: branch/commit '%s' inesistente"
 
-#: builtin/rebase.c:1929 builtin/submodule--helper.c:38
+#: builtin/rebase.c:1963 builtin/submodule--helper.c:38
 #: builtin/submodule--helper.c:1934
 #, c-format
 msgid "No such ref: %s"
 msgstr "Riferimento non esistente: %s"
 
-#: builtin/rebase.c:1940
+#: builtin/rebase.c:1974
 msgid "Could not resolve HEAD to a revision"
 msgstr "Impossibile risolvere HEAD come revisione"
 
-#: builtin/rebase.c:1981
+#: builtin/rebase.c:2012
 msgid "Cannot autostash"
 msgstr "Impossibile eseguire lo stash automatico"
 
-#: builtin/rebase.c:1984
+#: builtin/rebase.c:2015
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Risposta stash non attesa: '%s'"
 
-#: builtin/rebase.c:1990
+#: builtin/rebase.c:2021
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "Impossibile creare la directory '%s'"
 
-#: builtin/rebase.c:1993
+#: builtin/rebase.c:2024
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Stash automatico creato: %s\n"
 
-#: builtin/rebase.c:1996
+#: builtin/rebase.c:2027
 msgid "could not reset --hard"
 msgstr "impossibile eseguire reset --hard"
 
-#: builtin/rebase.c:1997 builtin/reset.c:114
-#, c-format
-msgid "HEAD is now at %s"
-msgstr "HEAD ora si trova a %s"
-
-#: builtin/rebase.c:2013
+#: builtin/rebase.c:2036
 msgid "Please commit or stash them."
 msgstr "Eseguine il commit o lo stash."
 
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:2063
 #, c-format
 msgid "could not parse '%s'"
 msgstr "impossibile analizzare '%s'"
 
-#: builtin/rebase.c:2053
+#: builtin/rebase.c:2076
 #, c-format
 msgid "could not switch to %s"
 msgstr "impossibile passare a %s"
 
-#: builtin/rebase.c:2064
+#: builtin/rebase.c:2087
 msgid "HEAD is up to date."
 msgstr "HEAD è aggiornato."
 
-#: builtin/rebase.c:2066
+#: builtin/rebase.c:2089
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "Il branch corrente %s è aggiornato.\n"
 
-#: builtin/rebase.c:2074
+#: builtin/rebase.c:2097
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD è aggiornato, forzo il rebase."
 
-#: builtin/rebase.c:2076
+#: builtin/rebase.c:2099
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "Il branch corrente %s è aggiornato, forzo il rebase.\n"
 
-#: builtin/rebase.c:2084
+#: builtin/rebase.c:2107
 msgid "The pre-rebase hook refused to rebase."
 msgstr "L'hook pre-rebase ha rifiutato di consentire il rebase."
 
-#: builtin/rebase.c:2091
+#: builtin/rebase.c:2114
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Modifiche a %s:\n"
 
-#: builtin/rebase.c:2094
+#: builtin/rebase.c:2117
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Modifiche da %s a %s:\n"
 
-#: builtin/rebase.c:2119
+#: builtin/rebase.c:2142
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 "Per prima cosa, ripristino l'head per riapplicare le tue modifiche su di "
 "esso...\n"
 
-#: builtin/rebase.c:2128
+#: builtin/rebase.c:2151
 msgid "Could not detach HEAD"
 msgstr "Impossibile scollegare l'HEAD"
 
-#: builtin/rebase.c:2137
+#: builtin/rebase.c:2160
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Fast forward da %s a %s eseguito.\n"
@@ -17980,7 +18072,7 @@
 msgid "git receive-pack <git-dir>"
 msgstr "git receive-pack <directory Git>"
 
-#: builtin/receive-pack.c:832
+#: builtin/receive-pack.c:830
 msgid ""
 "By default, updating the current branch in a non-bare repository\n"
 "is denied, because it will make the index and work tree inconsistent\n"
@@ -18013,7 +18105,7 @@
 "il comportamento predefinito, imposta la variabile di\n"
 "configurazione 'receive.denyCurrentBranch' a 'refuse'."
 
-#: builtin/receive-pack.c:852
+#: builtin/receive-pack.c:850
 msgid ""
 "By default, deleting the current branch is denied, because the next\n"
 "'git clone' won't result in any file checked out, causing confusion.\n"
@@ -18036,11 +18128,11 @@
 "Per non visualizzare più questo messaggio, puoi impostarla a\n"
 "'refuse'."
 
-#: builtin/receive-pack.c:1938
+#: builtin/receive-pack.c:1936
 msgid "quiet"
 msgstr "non visualizzare messaggi"
 
-#: builtin/receive-pack.c:1952
+#: builtin/receive-pack.c:1950
 msgid "You must specify a directory."
 msgstr "Devi specificare una directory."
 
@@ -18622,11 +18714,11 @@
 msgid "Unknown subcommand: %s"
 msgstr "Sottocomando sconosciuto: %s"
 
-#: builtin/repack.c:22
+#: builtin/repack.c:23
 msgid "git repack [<options>]"
 msgstr "git repack [<opzioni>]"
 
-#: builtin/repack.c:27
+#: builtin/repack.c:28
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -18635,118 +18727,118 @@
 "Usa --no-write-bitmap-index o disabilita l'opzione di configurazione\n"
 "pack.writebitmaps."
 
-#: builtin/repack.c:190
+#: builtin/repack.c:191
 msgid "could not start pack-objects to repack promisor objects"
 msgstr ""
 "impossibile avviare pack-objects per eseguire il repack degli oggetti "
 "promettenti"
 
-#: builtin/repack.c:229 builtin/repack.c:408
+#: builtin/repack.c:230 builtin/repack.c:409
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 "repack: Da pack-objects mi attendevo solo righe con gli ID completi "
 "esadecimali degli oggetti."
 
-#: builtin/repack.c:246
+#: builtin/repack.c:247
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr ""
 "impossibile portare a termine pack-objects per eseguire il repack degli "
 "oggetti promettenti"
 
-#: builtin/repack.c:284
+#: builtin/repack.c:285
 msgid "pack everything in a single pack"
 msgstr "esegui il pack di tutto in un singolo pack"
 
-#: builtin/repack.c:286
+#: builtin/repack.c:287
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "come -a e rendi sciolti gli oggetti non raggiungibili"
 
-#: builtin/repack.c:289
+#: builtin/repack.c:290
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "rimuovi i pack ridondanti ed esegui git-prune-packed"
 
-#: builtin/repack.c:291
+#: builtin/repack.c:292
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "fornisci l'opzione --no-reuse-delta a git-pack-objects"
 
-#: builtin/repack.c:293
+#: builtin/repack.c:294
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "fornisci l'opzione --no-reuse-object a git-pack-objects"
 
-#: builtin/repack.c:295
+#: builtin/repack.c:296
 msgid "do not run git-update-server-info"
 msgstr "non eseguire git-update-server-info"
 
-#: builtin/repack.c:298
+#: builtin/repack.c:299
 msgid "pass --local to git-pack-objects"
 msgstr "fornisci l'opzione --local a git-pack-objects"
 
-#: builtin/repack.c:300
+#: builtin/repack.c:301
 msgid "write bitmap index"
 msgstr "scrivi l'indice bitmap"
 
-#: builtin/repack.c:302
+#: builtin/repack.c:303
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "fornisci l'opzione --delta-islands a git-pack-objects"
 
-#: builtin/repack.c:303
+#: builtin/repack.c:304
 msgid "approxidate"
 msgstr "data approssimativa"
 
-#: builtin/repack.c:304
+#: builtin/repack.c:305
 msgid "with -A, do not loosen objects older than this"
 msgstr "con -A, non rendere sciolti gli oggetti meno recenti di questa data"
 
-#: builtin/repack.c:306
+#: builtin/repack.c:307
 msgid "with -a, repack unreachable objects"
 msgstr "con -a, esegui il repack degli oggetti non raggiungibili"
 
-#: builtin/repack.c:308
+#: builtin/repack.c:309
 msgid "size of the window used for delta compression"
 msgstr "dimensione della finestra usata per la compressione delta"
 
-#: builtin/repack.c:309 builtin/repack.c:315
+#: builtin/repack.c:310 builtin/repack.c:316
 msgid "bytes"
 msgstr "byte"
 
-#: builtin/repack.c:310
+#: builtin/repack.c:311
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr ""
 "come sopra, ma limita le dimensioni della memoria invece del numero di voci"
 
-#: builtin/repack.c:312
+#: builtin/repack.c:313
 msgid "limits the maximum delta depth"
 msgstr "limita la profondità massima dei delta"
 
-#: builtin/repack.c:314
+#: builtin/repack.c:315
 msgid "limits the maximum number of threads"
 msgstr "limita il numero massimo di thread"
 
-#: builtin/repack.c:316
+#: builtin/repack.c:317
 msgid "maximum size of each packfile"
 msgstr "dimensione massima di ogni file pack"
 
-#: builtin/repack.c:318
+#: builtin/repack.c:319
 msgid "repack objects in packs marked with .keep"
 msgstr "esegui il repack degli oggetti nei pack contrassegnati con .keep"
 
-#: builtin/repack.c:320
+#: builtin/repack.c:321
 msgid "do not repack this pack"
 msgstr "non eseguire il repack di questo pack"
 
-#: builtin/repack.c:330
+#: builtin/repack.c:331
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "impossibile eliminare i pack in un repository 'oggetti preziosi'"
 
-#: builtin/repack.c:334
+#: builtin/repack.c:335
 msgid "--keep-unreachable and -A are incompatible"
 msgstr "--keep-unreachable e -A non sono compatibili"
 
-#: builtin/repack.c:417
+#: builtin/repack.c:418
 msgid "Nothing new to pack."
 msgstr "Non ci sono oggetti nuovi di cui eseguire il pack."
 
-#: builtin/repack.c:478
+#: builtin/repack.c:479
 #, c-format
 msgid ""
 "WARNING: Some packs in use have been renamed by\n"
@@ -18766,7 +18858,7 @@
 "AVVISO: non è riuscito. Ridenominali manualmente\n"
 "AVVISO: entro %s:\n"
 
-#: builtin/repack.c:526
+#: builtin/repack.c:527
 #, c-format
 msgid "failed to remove '%s'"
 msgstr "eliminazione di '%s' non riuscita"
@@ -18874,8 +18966,8 @@
 msgid "unable to write object to database"
 msgstr "impossibile scrivere l'oggetto nel database"
 
-#: builtin/replace.c:322 builtin/replace.c:377 builtin/replace.c:422
-#: builtin/replace.c:452
+#: builtin/replace.c:322 builtin/replace.c:378 builtin/replace.c:423
+#: builtin/replace.c:453
 #, c-format
 msgid "not a valid object name: '%s'"
 msgstr "nome oggetto non valido: '%s'"
@@ -18894,22 +18986,22 @@
 msgid "new object is the same as the old one: '%s'"
 msgstr "il nuovo oggetto è lo stesso di quello vecchio: '%s'"
 
-#: builtin/replace.c:383
+#: builtin/replace.c:384
 #, c-format
 msgid "could not parse %s as a commit"
 msgstr "impossibile analizzare %s come commit"
 
-#: builtin/replace.c:414
+#: builtin/replace.c:415
 #, c-format
 msgid "bad mergetag in commit '%s'"
 msgstr "tag merge non valido nel commit '%s'"
 
-#: builtin/replace.c:416
+#: builtin/replace.c:417
 #, c-format
 msgid "malformed mergetag in commit '%s'"
 msgstr "tag merge malformato nel commit '%s'"
 
-#: builtin/replace.c:428
+#: builtin/replace.c:429
 #, c-format
 msgid ""
 "original commit '%s' contains mergetag '%s' that is discarded; use --edit "
@@ -18918,31 +19010,31 @@
 "il commit originario '%s' contiene il tag merge '%s' che è stato scartato; "
 "usa --edit anziché --graft"
 
-#: builtin/replace.c:467
+#: builtin/replace.c:468
 #, c-format
 msgid "the original commit '%s' has a gpg signature"
 msgstr "il commit originario '%s' ha una firma GPG"
 
-#: builtin/replace.c:468
+#: builtin/replace.c:469
 msgid "the signature will be removed in the replacement commit!"
 msgstr "la firma sarà rimossa nel commit sostitutivo!"
 
-#: builtin/replace.c:478
+#: builtin/replace.c:479
 #, c-format
 msgid "could not write replacement commit for: '%s'"
 msgstr "impossibile scrivere il commit sostitutivo per '%s'"
 
-#: builtin/replace.c:486
+#: builtin/replace.c:487
 #, c-format
 msgid "graft for '%s' unnecessary"
 msgstr "graft per '%s' non necessario"
 
-#: builtin/replace.c:490
+#: builtin/replace.c:491
 #, c-format
 msgid "new commit is the same as the old one: '%s'"
 msgstr "il nuovo commit è lo stesso di quello vecchio: '%s'"
 
-#: builtin/replace.c:525
+#: builtin/replace.c:526
 #, c-format
 msgid ""
 "could not convert the following graft(s):\n"
@@ -18951,71 +19043,71 @@
 "impossibile convertire i seguenti graft:\n"
 "%s"
 
-#: builtin/replace.c:546
+#: builtin/replace.c:547
 msgid "list replace refs"
 msgstr "elenca i riferimenti sostitutivi"
 
-#: builtin/replace.c:547
+#: builtin/replace.c:548
 msgid "delete replace refs"
 msgstr "elimina i riferimenti sostitutivi"
 
-#: builtin/replace.c:548
+#: builtin/replace.c:549
 msgid "edit existing object"
 msgstr "modifica l'oggetto esistente"
 
-#: builtin/replace.c:549
+#: builtin/replace.c:550
 msgid "change a commit's parents"
 msgstr "cambia i genitori di un commit"
 
-#: builtin/replace.c:550
+#: builtin/replace.c:551
 msgid "convert existing graft file"
 msgstr "converti un file graft esistente"
 
-#: builtin/replace.c:551
+#: builtin/replace.c:552
 msgid "replace the ref if it exists"
 msgstr "sostituisci il riferimento se esiste"
 
-#: builtin/replace.c:553
+#: builtin/replace.c:554
 msgid "do not pretty-print contents for --edit"
 msgstr "non stampare i contenuti in un formato leggibile (per --edit)"
 
-#: builtin/replace.c:554
+#: builtin/replace.c:555
 msgid "use this format"
 msgstr "usa questo formato"
 
-#: builtin/replace.c:567
+#: builtin/replace.c:568
 msgid "--format cannot be used when not listing"
 msgstr "--format non può essere usato quando non si elencano voci"
 
-#: builtin/replace.c:575
+#: builtin/replace.c:576
 msgid "-f only makes sense when writing a replacement"
 msgstr "-f ha senso solo se si sta scrivendo un oggetto sostitutivo"
 
-#: builtin/replace.c:579
+#: builtin/replace.c:580
 msgid "--raw only makes sense with --edit"
 msgstr "--raw ha senso solo con --edit"
 
-#: builtin/replace.c:585
+#: builtin/replace.c:586
 msgid "-d needs at least one argument"
 msgstr "-d richiede almeno un argomento"
 
-#: builtin/replace.c:591
+#: builtin/replace.c:592
 msgid "bad number of arguments"
 msgstr "numero di argomenti errato"
 
-#: builtin/replace.c:597
+#: builtin/replace.c:598
 msgid "-e needs exactly one argument"
 msgstr "-e richiede esattamente un argomento"
 
-#: builtin/replace.c:603
+#: builtin/replace.c:604
 msgid "-g needs at least one argument"
 msgstr "-g richiede almeno un argomento"
 
-#: builtin/replace.c:609
+#: builtin/replace.c:610
 msgid "--convert-graft-file takes no argument"
 msgstr "--convert-graft-file non richiede argomenti"
 
-#: builtin/replace.c:615
+#: builtin/replace.c:616
 msgid "only one pattern can be given with -l"
 msgstr "con -l può essere specificato solo un pattern"
 
@@ -19084,13 +19176,18 @@
 msgid "Failed to find tree of %s."
 msgstr "Impossibile trovare l'albero di %s."
 
+#: builtin/reset.c:114
+#, c-format
+msgid "HEAD is now at %s"
+msgstr "HEAD ora si trova a %s"
+
 #: builtin/reset.c:193
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Impossibile eseguire un %s reset nel corso di un merge."
 
-#: builtin/reset.c:293 builtin/stash.c:514 builtin/stash.c:589
-#: builtin/stash.c:613
+#: builtin/reset.c:293 builtin/stash.c:520 builtin/stash.c:595
+#: builtin/stash.c:619
 msgid "be quiet, only report errors"
 msgstr "non visualizzare messaggi, segnala solo gli errori"
 
@@ -19174,24 +19271,19 @@
 msgid "Could not write new index file."
 msgstr "Impossibile scrivere il nuovo file indice."
 
-#: builtin/rev-list.c:412
+#: builtin/rev-list.c:411
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr "impossibile combinare --exclude-promisor-objects e --missing"
 
-#: builtin/rev-list.c:473
+#: builtin/rev-list.c:472
 msgid "object filtering requires --objects"
 msgstr "il filtraggio oggetti richiede --objects"
 
-#: builtin/rev-list.c:476
-#, c-format
-msgid "invalid sparse value '%s'"
-msgstr "valore sparse non valido: '%s'"
-
-#: builtin/rev-list.c:527
+#: builtin/rev-list.c:522
 msgid "rev-list does not support display of notes"
 msgstr "rev-list non supporta la visualizzazione delle note"
 
-#: builtin/rev-list.c:530
+#: builtin/rev-list.c:525
 msgid "cannot combine --use-bitmap-index with object filtering"
 msgstr "impossibile combinare --use-bitmap-index con il filtraggio oggetti"
 
@@ -19742,136 +19834,136 @@
 msgid "could not save index tree"
 msgstr "impossibile salvare l'albero indice"
 
-#: builtin/stash.c:434
+#: builtin/stash.c:436
 msgid "could not restore untracked files from stash"
 msgstr "non è stato possibile ripristinare i file non tracciati dallo stash"
 
-#: builtin/stash.c:448
+#: builtin/stash.c:450
 #, c-format
 msgid "Merging %s with %s"
 msgstr "Merge di %s con %s in corso"
 
-#: builtin/stash.c:458 git-legacy-stash.sh:680
+#: builtin/stash.c:460 git-legacy-stash.sh:680
 msgid "Index was not unstashed."
 msgstr "L'indice non è stato rimosso dallo stash."
 
-#: builtin/stash.c:516 builtin/stash.c:615
+#: builtin/stash.c:522 builtin/stash.c:621
 msgid "attempt to recreate the index"
 msgstr "tenta di ricreare l'indice"
 
-#: builtin/stash.c:549
+#: builtin/stash.c:555
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "Ho scartato %s (%s)"
 
-#: builtin/stash.c:552
+#: builtin/stash.c:558
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s: Impossibile scartare la voce di stash"
 
-#: builtin/stash.c:577
+#: builtin/stash.c:583
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "'%s' non è un riferimento stash"
 
-#: builtin/stash.c:627 git-legacy-stash.sh:694
+#: builtin/stash.c:633 git-legacy-stash.sh:694
 msgid "The stash entry is kept in case you need it again."
 msgstr ""
 "La voce di stash è mantenuta nel caso in cui tu ne abbia nuovamente bisogno."
 
-#: builtin/stash.c:650 git-legacy-stash.sh:712
+#: builtin/stash.c:656 git-legacy-stash.sh:712
 msgid "No branch name specified"
 msgstr "Nome del branch non specificato"
 
-#: builtin/stash.c:790 builtin/stash.c:827
+#: builtin/stash.c:796 builtin/stash.c:833
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "Impossibile aggiornare %s con %s"
 
-#: builtin/stash.c:808 builtin/stash.c:1461 builtin/stash.c:1497
+#: builtin/stash.c:814 builtin/stash.c:1470 builtin/stash.c:1506
 msgid "stash message"
 msgstr "messaggio di stash"
 
-#: builtin/stash.c:818
+#: builtin/stash.c:824
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" richiede un argomento <commit>"
 
-#: builtin/stash.c:1040 git-legacy-stash.sh:217
+#: builtin/stash.c:1046 git-legacy-stash.sh:217
 msgid "No changes selected"
 msgstr "Nessuna modifica selezionata"
 
-#: builtin/stash.c:1136 git-legacy-stash.sh:150
+#: builtin/stash.c:1145 git-legacy-stash.sh:150
 msgid "You do not have the initial commit yet"
 msgstr "Non hai ancora un commit iniziale"
 
-#: builtin/stash.c:1163 git-legacy-stash.sh:165
+#: builtin/stash.c:1172 git-legacy-stash.sh:165
 msgid "Cannot save the current index state"
 msgstr "Impossibile salvare lo stato corrente di index"
 
-#: builtin/stash.c:1172 git-legacy-stash.sh:180
+#: builtin/stash.c:1181 git-legacy-stash.sh:180
 msgid "Cannot save the untracked files"
 msgstr "Impossibile salvare i file non tracciati"
 
-#: builtin/stash.c:1183 builtin/stash.c:1192 git-legacy-stash.sh:200
+#: builtin/stash.c:1192 builtin/stash.c:1201 git-legacy-stash.sh:200
 #: git-legacy-stash.sh:213
 msgid "Cannot save the current worktree state"
 msgstr "Impossibile salvare lo stato corrente dell'albero di lavoro"
 
-#: builtin/stash.c:1220 git-legacy-stash.sh:233
+#: builtin/stash.c:1229 git-legacy-stash.sh:233
 msgid "Cannot record working tree state"
 msgstr "Impossibile registrare lo stato dell'albero di lavoro"
 
-#: builtin/stash.c:1269 git-legacy-stash.sh:337
+#: builtin/stash.c:1278 git-legacy-stash.sh:337
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr ""
 "Impossibile usare --patch e --include-untracked o --all allo stesso tempo"
 
-#: builtin/stash.c:1285
+#: builtin/stash.c:1294
 msgid "Did you forget to 'git add'?"
 msgstr "Ti sei scordato di eseguire 'git add'?"
 
-#: builtin/stash.c:1300 git-legacy-stash.sh:345
+#: builtin/stash.c:1309 git-legacy-stash.sh:345
 msgid "No local changes to save"
 msgstr "Nessuna modifica locale da salvare"
 
-#: builtin/stash.c:1307 git-legacy-stash.sh:350
+#: builtin/stash.c:1316 git-legacy-stash.sh:350
 msgid "Cannot initialize stash"
 msgstr "Impossibile inizializzare stash"
 
-#: builtin/stash.c:1322 git-legacy-stash.sh:354
+#: builtin/stash.c:1331 git-legacy-stash.sh:354
 msgid "Cannot save the current status"
 msgstr "Impossibile salvare lo stato attuale"
 
-#: builtin/stash.c:1327
+#: builtin/stash.c:1336
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Directory di lavoro e stato indice salvati: %s"
 
-#: builtin/stash.c:1417 git-legacy-stash.sh:384
+#: builtin/stash.c:1426 git-legacy-stash.sh:384
 msgid "Cannot remove worktree changes"
 msgstr "Impossibile rimuovere le modifiche all'albero di lavoro"
 
-#: builtin/stash.c:1452 builtin/stash.c:1488
+#: builtin/stash.c:1461 builtin/stash.c:1497
 msgid "keep index"
 msgstr "mantieni l'indice"
 
-#: builtin/stash.c:1454 builtin/stash.c:1490
+#: builtin/stash.c:1463 builtin/stash.c:1499
 msgid "stash in patch mode"
 msgstr "esegui lo stash in modalità patch"
 
-#: builtin/stash.c:1455 builtin/stash.c:1491
+#: builtin/stash.c:1464 builtin/stash.c:1500
 msgid "quiet mode"
 msgstr "modalità silenziosa"
 
-#: builtin/stash.c:1457 builtin/stash.c:1493
+#: builtin/stash.c:1466 builtin/stash.c:1502
 msgid "include untracked files in stash"
 msgstr "includi i file non tracciati nello stash"
 
-#: builtin/stash.c:1459 builtin/stash.c:1495
+#: builtin/stash.c:1468 builtin/stash.c:1504
 msgid "include ignore files"
 msgstr "includi i file ignorati"
 
-#: builtin/stash.c:1555
+#: builtin/stash.c:1564
 #, c-format
 msgid "could not exec %s"
 msgstr "impossibile eseguire %s"
@@ -20250,9 +20342,9 @@
 msgstr "non stampare l'indicazione di avanzamento della clonazione"
 
 #: builtin/submodule--helper.c:1877
-msgid "git submodule--helper update_clone [--prefix=<path>] [<path>...]"
+msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
 msgstr ""
-"git submodule--helper update_clone [--prefix=<percorso>] [<percorso>...]"
+"git submodule--helper update-clone [--prefix=<percorso>] [<percorso>...]"
 
 #: builtin/submodule--helper.c:1890
 msgid "bad value for update parameter"
@@ -20305,7 +20397,7 @@
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr "assicurati che il file .gitmodules sia nell'albero di lavoro"
 
-#: builtin/submodule--helper.c:2235 git.c:434 git.c:684
+#: builtin/submodule--helper.c:2235 git.c:433 git.c:683
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s non supporta --super-prefix"
@@ -20640,146 +20732,146 @@
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<opzioni>] [--] [<file>...]"
 
-#: builtin/update-index.c:971
+#: builtin/update-index.c:972
 msgid "continue refresh even when index needs update"
 msgstr ""
 "continua l'aggiornamento anche nel caso in cui l'indice richieda di essere "
 "aggiornato"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:975
 msgid "refresh: ignore submodules"
 msgstr "aggiornamento: ignora i sottomoduli"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:978
 msgid "do not ignore new files"
 msgstr "non ignorare i nuovi file"
 
-#: builtin/update-index.c:979
+#: builtin/update-index.c:980
 msgid "let files replace directories and vice-versa"
 msgstr "consenti che dei file sostituiscano delle directory e viceversa"
 
-#: builtin/update-index.c:981
+#: builtin/update-index.c:982
 msgid "notice files missing from worktree"
 msgstr "nota se dei file mancano dall'albero di lavoro"
 
-#: builtin/update-index.c:983
+#: builtin/update-index.c:984
 msgid "refresh even if index contains unmerged entries"
 msgstr ""
 "esegui l'aggiornamento anche se l'indice contiene delle voci non sottoposte "
 "a merge"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:987
 msgid "refresh stat information"
 msgstr "aggiorna le informazioni stat"
 
-#: builtin/update-index.c:990
+#: builtin/update-index.c:991
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "come --refresh, ma ignora l'impostazione assume-unchanged"
 
-#: builtin/update-index.c:994
+#: builtin/update-index.c:995
 msgid "<mode>,<object>,<path>"
 msgstr "<modo>,<oggetto>,<percorso>"
 
-#: builtin/update-index.c:995
+#: builtin/update-index.c:996
 msgid "add the specified entry to the index"
 msgstr "aggiunge la voce specificata all'indice"
 
-#: builtin/update-index.c:1005
+#: builtin/update-index.c:1006
 msgid "mark files as \"not changing\""
 msgstr "contrassegna i file come \"non saranno modificati\""
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1009
 msgid "clear assumed-unchanged bit"
 msgstr "reimposta a zero il bit \"non saranno modificati\""
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1012
 msgid "mark files as \"index-only\""
 msgstr "contrassegna i file come \"solamente da indicizzare\""
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1015
 msgid "clear skip-worktree bit"
 msgstr "reimposta a zero il bit \"solamente da indicizzare\""
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1018
 msgid "add to index only; do not add content to object database"
 msgstr ""
 "aggiungi solo all'indice; non aggiungere il contenuto al database oggetti"
 
-#: builtin/update-index.c:1019
+#: builtin/update-index.c:1020
 msgid "remove named paths even if present in worktree"
 msgstr "rimuovi i percorsi specificati anche se presenti nell'albero di lavoro"
 
-#: builtin/update-index.c:1021
+#: builtin/update-index.c:1022
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "con --stdin: le righe di input sono terminate da byte NULL"
 
-#: builtin/update-index.c:1023
+#: builtin/update-index.c:1024
 msgid "read list of paths to be updated from standard input"
 msgstr "leggi l'elenco dei percorsi da aggiornare dallo standard input"
 
-#: builtin/update-index.c:1027
+#: builtin/update-index.c:1028
 msgid "add entries from standard input to the index"
 msgstr "aggiungi le voci specificate sullo standard input all'indice"
 
-#: builtin/update-index.c:1031
+#: builtin/update-index.c:1032
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "ripopola le fasi 2 e 3 per i percorsi elencati"
 
-#: builtin/update-index.c:1035
+#: builtin/update-index.c:1036
 msgid "only update entries that differ from HEAD"
 msgstr "aggiorna solo le voci differenti rispetto all'HEAD"
 
-#: builtin/update-index.c:1039
+#: builtin/update-index.c:1040
 msgid "ignore files missing from worktree"
 msgstr "ignora i file mancanti nell'albero di lavoro"
 
-#: builtin/update-index.c:1042
+#: builtin/update-index.c:1043
 msgid "report actions to standard output"
 msgstr "stampa le azioni sullo standard output"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1045
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr ""
 "(per i comandi ad alto livello) dimentica i conflitti non risolti salvati"
 
-#: builtin/update-index.c:1048
+#: builtin/update-index.c:1049
 msgid "write index in this format"
 msgstr "scrivi l'indice in questo formato"
 
-#: builtin/update-index.c:1050
+#: builtin/update-index.c:1051
 msgid "enable or disable split index"
 msgstr "abilita o disabilita l'indice suddiviso"
 
-#: builtin/update-index.c:1052
+#: builtin/update-index.c:1053
 msgid "enable/disable untracked cache"
 msgstr "abilita/disabilita la cache non tracciata"
 
-#: builtin/update-index.c:1054
+#: builtin/update-index.c:1055
 msgid "test if the filesystem supports untracked cache"
 msgstr "verifica se il filesystem supporta la cache non tracciata"
 
-#: builtin/update-index.c:1056
+#: builtin/update-index.c:1057
 msgid "enable untracked cache without testing the filesystem"
 msgstr "abilita la cache non tracciata senza testare il filesystem"
 
-#: builtin/update-index.c:1058
+#: builtin/update-index.c:1059
 msgid "write out the index even if is not flagged as changed"
 msgstr "scrivi l'indice anche se non è stato contrassegnato come modificato"
 
-#: builtin/update-index.c:1060
+#: builtin/update-index.c:1061
 msgid "enable or disable file system monitor"
 msgstr "abilita o disabilita il monitor del filesystem"
 
-#: builtin/update-index.c:1062
+#: builtin/update-index.c:1063
 msgid "mark files as fsmonitor valid"
 msgstr "contrassegna i file come validi rispetto al monitor del filesystem"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1066
 msgid "clear fsmonitor valid bit"
 msgstr ""
 "reimposta a zero il bit \"file validi rispetto al monitor del filesystem\""
 
-#: builtin/update-index.c:1168
+#: builtin/update-index.c:1169
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
@@ -20787,7 +20879,7 @@
 "core.splitIndex è impostato a false; rimuovilo o modificalo se vuoi "
 "veramente abilitare l'indice suddiviso"
 
-#: builtin/update-index.c:1177
+#: builtin/update-index.c:1178
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
@@ -20795,7 +20887,7 @@
 "core.splitIndex è impostato a true; rimuovilo o modificalo se vuoi veramente "
 "disabilitare l'indice suddiviso"
 
-#: builtin/update-index.c:1188
+#: builtin/update-index.c:1190
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -20803,11 +20895,11 @@
 "core.untrackedCache è impostato a true; rimuovilo o modificalo se vuoi "
 "veramente disabilitare la cache non tracciata"
 
-#: builtin/update-index.c:1192
+#: builtin/update-index.c:1194
 msgid "Untracked cache disabled"
 msgstr "Cache non tracciata disabilitata"
 
-#: builtin/update-index.c:1200
+#: builtin/update-index.c:1202
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -20815,29 +20907,29 @@
 "core.untrackedCache è impostato a false; rimuovilo o modificalo se vuoi "
 "veramente abilitare la cache non tracciata"
 
-#: builtin/update-index.c:1204
+#: builtin/update-index.c:1206
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "Cache non tracciata abilitata per '%s'"
 
-#: builtin/update-index.c:1212
+#: builtin/update-index.c:1214
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr ""
 "core.fsmonitor non è impostato; impostalo se vuoi veramente abilitare il "
 "monitor del filesystem"
 
-#: builtin/update-index.c:1216
+#: builtin/update-index.c:1218
 msgid "fsmonitor enabled"
 msgstr "monitor filesystem abilitato"
 
-#: builtin/update-index.c:1219
+#: builtin/update-index.c:1221
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 "core.fsmonitor è impostato; rimuovi tale impostazione se vuoi veramente "
 "disabilitare il monitor del filesystem"
 
-#: builtin/update-index.c:1223
+#: builtin/update-index.c:1225
 msgid "fsmonitor disabled"
 msgstr "monitor filesystem disabilitato"
 
@@ -20933,55 +21025,55 @@
 msgid "print tag contents"
 msgstr "stampa i contenuti del tag"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:17
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [<opzioni>] <percorso> [<espressione commit>]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:18
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [<opzioni>]"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:19
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [<opzioni>] <percorso>"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:20
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move <albero di lavoro> <nuovo percorso>"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:21
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [<opzioni>]"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:22
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<opzioni>] <albero di lavoro>"
 
-#: builtin/worktree.c:24
+#: builtin/worktree.c:23
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <percorso>"
 
-#: builtin/worktree.c:61 builtin/worktree.c:899
+#: builtin/worktree.c:60 builtin/worktree.c:898
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "eliminazione di '%s' non riuscita"
 
-#: builtin/worktree.c:80
+#: builtin/worktree.c:79
 #, c-format
 msgid "Removing worktrees/%s: not a valid directory"
 msgstr "Rimuovo worktrees/%s: non è una directory valida"
 
-#: builtin/worktree.c:86
+#: builtin/worktree.c:85
 #, c-format
 msgid "Removing worktrees/%s: gitdir file does not exist"
 msgstr "Rimuovo worktrees/%s: il file gitdir non esiste"
 
-#: builtin/worktree.c:91 builtin/worktree.c:100
+#: builtin/worktree.c:90 builtin/worktree.c:99
 #, c-format
 msgid "Removing worktrees/%s: unable to read gitdir file (%s)"
 msgstr "Rimuovo worktrees/%s: impossibile leggere il file gitdir (%s)"
 
-#: builtin/worktree.c:110
+#: builtin/worktree.c:109
 #, c-format
 msgid ""
 "Removing worktrees/%s: short read (expected %<PRIuMAX> bytes, read "
@@ -20990,35 +21082,35 @@
 "Rimuovo worktrees/%s: letti meno dati del previsto (attesi %<PRIuMAX>byte, "
 "%<PRIuMAX> letti)"
 
-#: builtin/worktree.c:118
+#: builtin/worktree.c:117
 #, c-format
 msgid "Removing worktrees/%s: invalid gitdir file"
 msgstr "Rimuovo worktrees/%s: file gitdir non valido"
 
-#: builtin/worktree.c:127
+#: builtin/worktree.c:126
 #, c-format
 msgid "Removing worktrees/%s: gitdir file points to non-existent location"
 msgstr "Rimuovo worktrees/%s: il file gitdir punta a un percorso non esistente"
 
-#: builtin/worktree.c:166
+#: builtin/worktree.c:165
 msgid "report pruned working trees"
 msgstr "segnala gli alberi di lavoro eliminati"
 
-#: builtin/worktree.c:168
+#: builtin/worktree.c:167
 msgid "expire working trees older than <time>"
 msgstr "fai scadere gli alberi di lavoro più vecchi di <tempo>"
 
-#: builtin/worktree.c:235
+#: builtin/worktree.c:234
 #, c-format
 msgid "'%s' already exists"
 msgstr "'%s' esiste già"
 
-#: builtin/worktree.c:252
+#: builtin/worktree.c:251
 #, c-format
 msgid "unable to re-add worktree '%s'"
 msgstr "impossibile aggiungere nuovamente l'albero di lavoro '%s'"
 
-#: builtin/worktree.c:257
+#: builtin/worktree.c:256
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -21028,7 +21120,7 @@
 "usa 'add -f -f' per eseguire l'override, o 'unlock' e 'prune' o 'remove' per "
 "rimuoverlo"
 
-#: builtin/worktree.c:259
+#: builtin/worktree.c:258
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -21037,129 +21129,129 @@
 "'%s' è un albero di lavoro mancante ma già registrato;\n"
 "usa 'add -f' per eseguire l'override, o 'prune' o 'remove' per rimuoverlo"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:308
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "impossibile creare la directory di '%s'"
 
-#: builtin/worktree.c:440 builtin/worktree.c:446
+#: builtin/worktree.c:439 builtin/worktree.c:445
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "Preparazione dell'albero di lavoro in corso (nuovo branch '%s')"
 
-#: builtin/worktree.c:442
+#: builtin/worktree.c:441
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr ""
 "Preparazione dell'albero di lavoro in corso (reimposto il branch '%s'; era a "
 "%s)"
 
-#: builtin/worktree.c:451
+#: builtin/worktree.c:450
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "Preparazione dell'albero di lavoro in corso (checkout di '%s')"
 
-#: builtin/worktree.c:457
+#: builtin/worktree.c:456
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "Preparazione dell'albero di lavoro in corso (HEAD scollegato %s)"
 
-#: builtin/worktree.c:498
+#: builtin/worktree.c:497
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr ""
 "esegui il checkout di <branch> anche se tale operazione è stata eseguita in "
 "un altro albero di lavoro"
 
-#: builtin/worktree.c:501
+#: builtin/worktree.c:500
 msgid "create a new branch"
 msgstr "crea un nuovo branch"
 
-#: builtin/worktree.c:503
+#: builtin/worktree.c:502
 msgid "create or reset a branch"
 msgstr "crea o reimposta un branch"
 
-#: builtin/worktree.c:505
+#: builtin/worktree.c:504
 msgid "populate the new working tree"
 msgstr "popola il nuovo albero di lavoro"
 
-#: builtin/worktree.c:506
+#: builtin/worktree.c:505
 msgid "keep the new working tree locked"
 msgstr "mantieni bloccato il nuovo albero di lavoro"
 
-#: builtin/worktree.c:509
+#: builtin/worktree.c:508
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "imposta la modalità tracking (vedi git-branch(1))"
 
-#: builtin/worktree.c:512
+#: builtin/worktree.c:511
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr ""
 "tenta di cercare una corrispondenza fra il nome del nuovo branch e un branch "
 "remoto da tracciare"
 
-#: builtin/worktree.c:520
+#: builtin/worktree.c:519
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr "le opzioni -b, -B e --detach sono mutualmente esclusive"
 
-#: builtin/worktree.c:581
+#: builtin/worktree.c:580
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr ""
 "l'opzione --[no-]track può essere usata solo se viene creato un nuovo branch"
 
-#: builtin/worktree.c:681
+#: builtin/worktree.c:680
 msgid "reason for locking"
 msgstr "motivo di blocco"
 
-#: builtin/worktree.c:693 builtin/worktree.c:726 builtin/worktree.c:800
-#: builtin/worktree.c:927
+#: builtin/worktree.c:692 builtin/worktree.c:725 builtin/worktree.c:799
+#: builtin/worktree.c:926
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "'%s' non è un albero di lavoro"
 
-#: builtin/worktree.c:695 builtin/worktree.c:728
+#: builtin/worktree.c:694 builtin/worktree.c:727
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "Non è possibile bloccare o sbloccare l'albero di lavoro principale"
 
-#: builtin/worktree.c:700
+#: builtin/worktree.c:699
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "'%s' è già bloccato per questo motivo: %s"
 
-#: builtin/worktree.c:702
+#: builtin/worktree.c:701
 #, c-format
 msgid "'%s' is already locked"
 msgstr "'%s' è già bloccato"
 
-#: builtin/worktree.c:730
+#: builtin/worktree.c:729
 #, c-format
 msgid "'%s' is not locked"
 msgstr "'%s' non è bloccato"
 
-#: builtin/worktree.c:771
+#: builtin/worktree.c:770
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr ""
 "gli alberi di lavoro contenenti sottomoduli non possono essere spostati o "
 "rimossi"
 
-#: builtin/worktree.c:779
+#: builtin/worktree.c:778
 msgid "force move even if worktree is dirty or locked"
 msgstr "forza lo spostamento anche se l'albero di lavoro è sporco o bloccato"
 
-#: builtin/worktree.c:802 builtin/worktree.c:929
+#: builtin/worktree.c:801 builtin/worktree.c:928
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "'%s' è un albero di lavoro principale"
 
-#: builtin/worktree.c:807
+#: builtin/worktree.c:806
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "impossibile determinare il nome destinazione da '%s'"
 
-#: builtin/worktree.c:813
+#: builtin/worktree.c:812
 #, c-format
 msgid "target '%s' already exists"
 msgstr "la destinazione '%s' esiste già"
 
-#: builtin/worktree.c:821
+#: builtin/worktree.c:820
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -21169,7 +21261,7 @@
 "usa 'move -f -f' per eseguirne l'override o sbloccalo prima di eseguire "
 "l'operazione"
 
-#: builtin/worktree.c:823
+#: builtin/worktree.c:822
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -21178,36 +21270,37 @@
 "usa 'move -f -f' per eseguirne l'override o sbloccalo prima di eseguire "
 "l'operazione"
 
-#: builtin/worktree.c:826
+#: builtin/worktree.c:825
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "validazione non riuscita, impossibile spostare l'albero di lavoro: %s"
 
-#: builtin/worktree.c:831
+#: builtin/worktree.c:830
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "spostamento di '%s' in '%s' non riuscito"
 
-#: builtin/worktree.c:879
+#: builtin/worktree.c:878
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "esecuzione di 'git status' su '%s' non riuscita"
 
-#: builtin/worktree.c:883
+#: builtin/worktree.c:882
 #, c-format
-msgid "'%s' is dirty, use --force to delete it"
-msgstr "'%s' è sporco, usa --force per eliminarlo"
+msgid "'%s' contains modified or untracked files, use --force to delete it"
+msgstr ""
+"'%s' contiene file modificati o non tracciati, usa --force per eliminarlo"
 
-#: builtin/worktree.c:888
+#: builtin/worktree.c:887
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "esecuzione di 'git status' su '%s' non riuscita, codice %d"
 
-#: builtin/worktree.c:911
+#: builtin/worktree.c:910
 msgid "force removal even if worktree is dirty or locked"
 msgstr "forza la rimozione anche se l'albero di lavoro è sporco o bloccato"
 
-#: builtin/worktree.c:934
+#: builtin/worktree.c:933
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -21217,7 +21310,7 @@
 "usa 'remove -f -f' per eseguirne l'override o sbloccalo prima di eseguire "
 "l'operazione"
 
-#: builtin/worktree.c:936
+#: builtin/worktree.c:935
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -21226,7 +21319,7 @@
 "usa 'remove -f -f' per eseguirne l'override o sbloccalo prima di eseguire "
 "l'operazione"
 
-#: builtin/worktree.c:939
+#: builtin/worktree.c:938
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "validazione non riuscita, impossibile rimuovere l'albero di lavoro: %s"
@@ -21247,6 +21340,16 @@
 msgid "only useful for debugging"
 msgstr "utile solo per il debug"
 
+#: fast-import.c:3118
+#, c-format
+msgid "Expected 'mark' command, got %s"
+msgstr "Atteso comando 'mark', ricevuto %s"
+
+#: fast-import.c:3123
+#, c-format
+msgid "Expected 'to' command, got %s"
+msgstr "Atteso comando 'to', ricevuto %s"
+
 #: credential-cache--daemon.c:223
 #, c-format
 msgid ""
@@ -21362,39 +21465,39 @@
 "l'alias '%s' modifica le variabili d'ambiente.\n"
 "Puoi usare '!git' nell'alias per farlo"
 
-#: git.c:377
+#: git.c:376
 #, c-format
 msgid "empty alias for %s"
 msgstr "alias vuoto per %s"
 
-#: git.c:380
+#: git.c:379
 #, c-format
 msgid "recursive alias: %s"
 msgstr "alias ricorsivo: %s"
 
-#: git.c:460
+#: git.c:459
 msgid "write failure on standard output"
 msgstr "errore di scrittura sullo standard output"
 
-#: git.c:462
+#: git.c:461
 msgid "unknown write failure on standard output"
 msgstr "errore di scrittura sconosciuto sullo standard output"
 
-#: git.c:464
+#: git.c:463
 msgid "close failed on standard output"
 msgstr "chiusura dello standard output non riuscita"
 
-#: git.c:793
+#: git.c:792
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr "rilevato ciclo alias: l'espansione di '%s' non termina:%s"
 
-#: git.c:843
+#: git.c:842
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "impossibile gestire %s come comando incorporato"
 
-#: git.c:856
+#: git.c:855
 #, c-format
 msgid ""
 "usage: %s\n"
@@ -21403,12 +21506,12 @@
 "uso: %s\n"
 "\n"
 
-#: git.c:876
+#: git.c:875
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr "espansione dell'alias '%s' non riuscita; '%s' non è un comando Git\n"
 
-#: git.c:888
+#: git.c:887
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr "esecuzione del comando '%s' non riuscita: %s\n"
@@ -21426,32 +21529,32 @@
 msgid "Public key pinning not supported with cURL < 7.44.0"
 msgstr "Il pinning delle chiavi pubbliche non è supportato con cURL < 7.44.0"
 
-#: http.c:876
+#: http.c:878
 msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
 msgstr "CURLSSLOPT_NO_REVOKE non è supportato con cURL < 7.44.0"
 
-#: http.c:949
+#: http.c:951
 msgid "Protocol restrictions not supported with cURL < 7.19.4"
 msgstr "Le restrizioni protocollo non sono supportate con cURL < 7.19.4"
 
-#: http.c:1085
+#: http.c:1088
 #, c-format
 msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
 msgstr "Backend SSL '%s' non supportato. Backend SSL supportati:"
 
-#: http.c:1092
+#: http.c:1095
 #, c-format
 msgid "Could not set SSL backend to '%s': cURL was built without SSL backends"
 msgstr ""
 "Impossibile impostare il backend SSL a '%s': cURL è stato compilato senza "
 "backend SSL"
 
-#: http.c:1096
+#: http.c:1099
 #, c-format
 msgid "Could not set SSL backend to '%s': already set"
 msgstr "Impossibile impostare il backend SSL a '%s': già impostato"
 
-#: http.c:1965
+#: http.c:1968
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -21462,136 +21565,136 @@
 "  richiesta: %s\n"
 "   redirect: %s"
 
-#: remote-curl.c:157
+#: remote-curl.c:166
 #, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr "virgolette non valide nel valore push-option: '%s'"
 
-#: remote-curl.c:254
+#: remote-curl.c:263
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr "%sinfo/refs non valido: è un repository Git?"
 
-#: remote-curl.c:355
+#: remote-curl.c:364
 msgid "invalid server response; expected service, got flush packet"
 msgstr ""
 "risposta del server non valida; atteso servizio, ricevuto pacchetto flush"
 
-#: remote-curl.c:386
+#: remote-curl.c:395
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr "risposta del server non valida; ricevuto '%s'"
 
-#: remote-curl.c:446
+#: remote-curl.c:455
 #, c-format
 msgid "repository '%s' not found"
 msgstr "repository '%s' non trovato"
 
-#: remote-curl.c:450
+#: remote-curl.c:459
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr "Autenticazione non riuscita per '%s'"
 
-#: remote-curl.c:454
+#: remote-curl.c:463
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "impossibile accedere a '%s': %s"
 
-#: remote-curl.c:460
+#: remote-curl.c:469
 #, c-format
 msgid "redirecting to %s"
 msgstr "redirezione a %s in corso"
 
-#: remote-curl.c:584
+#: remote-curl.c:593
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr ""
 "non dovrebbe esserci un pacchetto fine file se non si è accomodanti con "
 "questi ultimi"
 
-#: remote-curl.c:664
+#: remote-curl.c:673
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr ""
 "impossibile ritornare a un punto precedente dei dati POST RPC - prova ad "
 "aumentare il valore di http.postBuffer"
 
-#: remote-curl.c:724
+#: remote-curl.c:733
 #, c-format
 msgid "RPC failed; %s"
 msgstr "RPC non riuscita; %s"
 
-#: remote-curl.c:764
+#: remote-curl.c:773
 msgid "cannot handle pushes this big"
 msgstr "impossibile gestire push così grandi"
 
-#: remote-curl.c:879
+#: remote-curl.c:888
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr ""
 "impossibile eseguire il deflate della richiesta; errore deflate zlib %d"
 
-#: remote-curl.c:883
+#: remote-curl.c:892
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr "impossibile eseguire il deflate della richiesta; errore fine zlib %d"
 
-#: remote-curl.c:1014
+#: remote-curl.c:1023
 msgid "dumb http transport does not support shallow capabilities"
 msgstr "il trasporto http stupido non supporta le funzionalità shallow"
 
-#: remote-curl.c:1028
+#: remote-curl.c:1037
 msgid "fetch failed."
 msgstr "recupero non riuscito."
 
-#: remote-curl.c:1076
+#: remote-curl.c:1085
 msgid "cannot fetch by sha1 over smart http"
 msgstr ""
 "impossibile recuperare i dati in base allo SHA1 con il trasporto HTTP "
 "intelligente"
 
-#: remote-curl.c:1120 remote-curl.c:1126
+#: remote-curl.c:1129 remote-curl.c:1135
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr "errore protocollo: atteso SHA/riferimento, ricevuto '%s'"
 
-#: remote-curl.c:1138 remote-curl.c:1252
+#: remote-curl.c:1147 remote-curl.c:1261
 #, c-format
 msgid "http transport does not support %s"
 msgstr "il trasporto HTTP non supporta %s"
 
-#: remote-curl.c:1174
+#: remote-curl.c:1183
 msgid "git-http-push failed"
 msgstr "git-http-push non riuscito"
 
-#: remote-curl.c:1360
+#: remote-curl.c:1367
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr "remote-curl: uso: git remote-curl <remoto> [<URL>]"
 
-#: remote-curl.c:1392
+#: remote-curl.c:1399
 msgid "remote-curl: error reading command stream from git"
 msgstr "remote-curl: errore durante la lettura del flusso dei comandi da Git"
 
-#: remote-curl.c:1399
+#: remote-curl.c:1406
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr "remote-curl: tentato un fetch senza un repository locale"
 
-#: remote-curl.c:1439
+#: remote-curl.c:1446
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr "remote-curl: ricevuto comando sconosciuto '%s' da Git"
 
-#: list-objects-filter-options.h:61
+#: list-objects-filter-options.h:85
 msgid "args"
 msgstr "argomenti"
 
-#: list-objects-filter-options.h:62
+#: list-objects-filter-options.h:86
 msgid "object filtering"
 msgstr "filtraggio oggetti"
 
-#: parse-options.h:170
+#: parse-options.h:179
 msgid "expiry-date"
 msgstr "data-scadenza"
 
-#: parse-options.h:184
+#: parse-options.h:193
 msgid "no-op (backward compatibility)"
 msgstr "no-op (retrocompatibilità)"
 
@@ -24060,6 +24163,47 @@
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "Inviare %s? [y|N]: "
 
+#, c-format
+#~ msgid "unknown core.untrackedCache value '%s'; using 'keep' default value"
+#~ msgstr ""
+#~ "valore core.untrackedCache '%s' non valido; utilizzerò il valore "
+#~ "predefinito 'keep'"
+
+#~ msgid "cannot change partial clone promisor remote"
+#~ msgstr "impossibile modificare il remoto promettente del clone parziale"
+
+#~ msgid "error building trees"
+#~ msgstr "errore durante la costruzione degli alberi"
+
+#, c-format
+#~ msgid "invalid date format '%s' in '%s'"
+#~ msgstr "formato data '%s' non valido in '%s'"
+
+#~ msgid "writing root commit"
+#~ msgstr "scrittura commit radice in corso"
+
+#, c-format
+#~ msgid "staged changes in the following files may be lost: %s"
+#~ msgstr ""
+#~ "le modifiche in stage nei seguenti file potrebbero andare perdute: %s"
+
+#~ msgid ""
+#~ "--filter can only be used with the remote configured in extensions."
+#~ "partialClone"
+#~ msgstr ""
+#~ "--filter può essere usato solo con il remoto configurato nelle estensioni."
+#~ "partialClone"
+
+#~ msgid "verify commit-msg hook"
+#~ msgstr "verifica hook commit-msg"
+
+#~ msgid "cannot combine '--rebase-merges' with '--strategy-option'"
+#~ msgstr "impossibile combinare '--rebase-merges' con '--strategy-option'"
+
+#, c-format
+#~ msgid "invalid sparse value '%s'"
+#~ msgstr "valore sparse non valido: '%s'"
+
 #~ msgid ""
 #~ "Fetch normally indicates which branches had a forced update, but that "
 #~ "check has been disabled."
diff --git a/po/sv.po b/po/sv.po
index 4ad206d..25f245e 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -5,10 +5,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: git 2.23.0\n"
+"Project-Id-Version: git 2.24.0\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2019-07-30 09:59+0800\n"
-"PO-Revision-Date: 2019-07-31 12:40+0200\n"
+"POT-Creation-Date: 2019-10-28 13:19+0800\n"
+"PO-Revision-Date: 2019-10-30 23:18+0100\n"
 "Last-Translator: Peter Krefting <peter@softwolves.pp.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
 "Language: sv\n"
@@ -16,7 +16,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 2.0.2\n"
+"X-Generator: Gtranslator 2.91.7\n"
 
 #: advice.c:109
 #, c-format
@@ -70,7 +70,7 @@
 msgid "Exiting because of an unresolved conflict."
 msgstr "Avslutar på grund av olöst konflikgt."
 
-#: advice.c:193 builtin/merge.c:1327
+#: advice.c:193 builtin/merge.c:1332
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Du har inte avslutat sammanslagningen (MERGE_HEAD finns)."
 
@@ -208,17 +208,7 @@
 msgid "inconsistent header lines %d and %d"
 msgstr "huvudet är inkonsekvent mellan rad %d och %d"
 
-#: apply.c:1460
-#, c-format
-msgid "recount: unexpected line: %.*s"
-msgstr "recount: förväntade rad: %.*s"
-
-#: apply.c:1529
-#, c-format
-msgid "patch fragment without header at line %d: %.*s"
-msgstr "patch-fragment utan huvud på rad %d: %.*s"
-
-#: apply.c:1551
+#: apply.c:1372
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -234,82 +224,92 @@
 "sökvägskomponenter\n"
 "tas bort (rad %d)"
 
-#: apply.c:1564
+#: apply.c:1385
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr "git-diff-huvudet saknar filnamnsinformation (rad %d)"
 
-#: apply.c:1752
+#: apply.c:1481
+#, c-format
+msgid "recount: unexpected line: %.*s"
+msgstr "recount: förväntade rad: %.*s"
+
+#: apply.c:1550
+#, c-format
+msgid "patch fragment without header at line %d: %.*s"
+msgstr "patch-fragment utan huvud på rad %d: %.*s"
+
+#: apply.c:1753
 msgid "new file depends on old contents"
 msgstr "ny fil beror på gammalt innehåll"
 
-#: apply.c:1754
+#: apply.c:1755
 msgid "deleted file still has contents"
 msgstr "borttagen fil har fortfarande innehåll"
 
-#: apply.c:1788
+#: apply.c:1789
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "trasig patch på rad %d"
 
-#: apply.c:1825
+#: apply.c:1826
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "nya filen %s beror på gammalt innehåll"
 
-#: apply.c:1827
+#: apply.c:1828
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "borttagna filen %s har fortfarande innehåll"
 
-#: apply.c:1830
+#: apply.c:1831
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** varning: filen %s blir tom men har inte tagits bort"
 
-#: apply.c:1977
+#: apply.c:1978
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "trasig binärpatch på rad %d: %.*s"
 
-#: apply.c:2014
+#: apply.c:2015
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "binärpatchen på rad %d känns inte igen"
 
-#: apply.c:2176
+#: apply.c:2177
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "patch med bara skräp på rad %d"
 
-#: apply.c:2262
+#: apply.c:2263
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "kunde inte läsa symboliska länken %s"
 
-#: apply.c:2266
+#: apply.c:2267
 #, c-format
 msgid "unable to open or read %s"
 msgstr "kunde inte öppna eller läsa %s"
 
-#: apply.c:2925
+#: apply.c:2926
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "felaktig inledning på rad: \"%c\""
 
-#: apply.c:3046
+#: apply.c:3047
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "Stycke %d lyckades på %d (offset %d rad)."
 msgstr[1] "Stycke %d lyckades på %d (offset %d rader)."
 
-#: apply.c:3058
+#: apply.c:3059
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "Sammanhang reducerat till (%ld/%ld) för att tillämpa fragment vid %d"
 
-#: apply.c:3064
+#: apply.c:3065
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -318,25 +318,25 @@
 "vid sökning efter:\n"
 "%.*s"
 
-#: apply.c:3086
+#: apply.c:3087
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "saknar binära patchdata för \"%s\""
 
-#: apply.c:3094
+#: apply.c:3095
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr ""
 "kan inte applicera en binärpatch baklänges utan den omvända patchen för \"%s"
 "\""
 
-#: apply.c:3141
+#: apply.c:3142
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr ""
 "kan inte applicera binärpatch på \"%s\" utan den fullständiga indexraden"
 
-#: apply.c:3151
+#: apply.c:3152
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
@@ -344,426 +344,426 @@
 "patchen appliceras på \"%s\" (%s), som inte motsvarar det nuvarande "
 "innehållet."
 
-#: apply.c:3159
+#: apply.c:3160
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "patchen appliceras på en tom \"%s\", men den är inte tom"
 
-#: apply.c:3177
+#: apply.c:3178
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "nödvändig efterbild %s för \"%s\" kan inte läsas"
 
-#: apply.c:3190
+#: apply.c:3191
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "binärpatchen kan inte tillämpas på \"%s\""
 
-#: apply.c:3196
+#: apply.c:3197
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr "binärpatchen på \"%s\" ger felaktigt resultat (förväntade %s, fick %s)"
 
-#: apply.c:3217
+#: apply.c:3218
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "patch misslyckades: %s:%ld"
 
-#: apply.c:3340
+#: apply.c:3341
 #, c-format
 msgid "cannot checkout %s"
 msgstr "kan inte checka ut %s"
 
-#: apply.c:3392 apply.c:3403 apply.c:3449 midx.c:62 setup.c:279
+#: apply.c:3393 apply.c:3404 apply.c:3450 midx.c:61 setup.c:280
 #, c-format
 msgid "failed to read %s"
 msgstr "misslyckades läsa %s"
 
-#: apply.c:3400
+#: apply.c:3401
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "läser från \"%s\" som är på andra sidan av en symbolisk länk"
 
-#: apply.c:3429 apply.c:3672
+#: apply.c:3430 apply.c:3673
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "sökvägen %s har ändrat namn/tagits bort"
 
-#: apply.c:3515 apply.c:3687
+#: apply.c:3516 apply.c:3688
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s: finns inte i indexet"
 
-#: apply.c:3524 apply.c:3695
+#: apply.c:3525 apply.c:3696
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s: motsvarar inte indexet"
 
-#: apply.c:3559
+#: apply.c:3560
 msgid "repository lacks the necessary blob to fall back on 3-way merge."
 msgstr ""
 "arkivet saknar objekt som behövs för att falla tillbaka på 3-"
 "vägssammanslagning."
 
-#: apply.c:3562
+#: apply.c:3563
 #, c-format
 msgid "Falling back to three-way merge...\n"
 msgstr "Faller tillbaka på trevägssammanslagning...\n"
 
-#: apply.c:3578 apply.c:3582
+#: apply.c:3579 apply.c:3583
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "kunde inte läsa aktuellt innehåll i \"%s\""
 
-#: apply.c:3594
+#: apply.c:3595
 #, c-format
 msgid "Failed to fall back on three-way merge...\n"
 msgstr "Misslyckades falla tillbaka på trevägssammanslagning...\n"
 
-#: apply.c:3608
+#: apply.c:3609
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "Applicerade patchen på \"%s\" med konflikter.\n"
 
-#: apply.c:3613
+#: apply.c:3614
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "Tillämpade patchen på  \"%s\" rent.\n"
 
-#: apply.c:3639
+#: apply.c:3640
 msgid "removal patch leaves file contents"
 msgstr "patch för borttagning lämnar kvar filinnehåll"
 
-#: apply.c:3712
+#: apply.c:3713
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s: fel typ"
 
-#: apply.c:3714
+#: apply.c:3715
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s har typen %o, förväntade %o"
 
-#: apply.c:3865 apply.c:3867 read-cache.c:830 read-cache.c:856
+#: apply.c:3866 apply.c:3868 read-cache.c:830 read-cache.c:856
 #: read-cache.c:1309
 #, c-format
 msgid "invalid path '%s'"
 msgstr "ogiltig sökväg \"%s\""
 
-#: apply.c:3923
+#: apply.c:3924
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s: finns redan i indexet"
 
-#: apply.c:3926
+#: apply.c:3927
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s: finns redan i arbetskatalogen"
 
-#: apply.c:3946
+#: apply.c:3947
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "nytt läge (%o) för %s motsvarar inte gammalt läge (%o)"
 
-#: apply.c:3951
+#: apply.c:3952
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "nytt läge (%o) för %s motsvarar inte gammalt läge (%o) för %s"
 
-#: apply.c:3971
+#: apply.c:3972
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "den berörda filen \"%s\" är på andra sidan av en symbolisk länk"
 
-#: apply.c:3975
+#: apply.c:3976
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s: patchen kan inte tillämpas"
 
-#: apply.c:3990
+#: apply.c:3991
 #, c-format
 msgid "Checking patch %s..."
 msgstr "Kontrollerar patchen %s..."
 
-#: apply.c:4082
+#: apply.c:4083
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "sha1-informationen saknas eller är oanvändbar för undermodulen %s"
 
-#: apply.c:4089
+#: apply.c:4090
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "nytt läge för %s, som inte finns i nuvarande HEAD"
 
-#: apply.c:4092
+#: apply.c:4093
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "sha1-informationen saknas eller är oanvändbar (%s)."
 
-#: apply.c:4097 builtin/checkout.c:278 builtin/reset.c:143
+#: apply.c:4098 builtin/checkout.c:279 builtin/reset.c:143
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "make_cache_entry misslyckades för sökvägen \"%s\""
 
-#: apply.c:4101
+#: apply.c:4102
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "kunde inte lägga till %s till temporärt index"
 
-#: apply.c:4111
+#: apply.c:4112
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "kunde inte skriva temporärt index till %s"
 
-#: apply.c:4249
+#: apply.c:4250
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "kan inte ta bort %s från indexet"
 
-#: apply.c:4283
+#: apply.c:4284
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "trasig patch för undermodulen %s"
 
-#: apply.c:4289
+#: apply.c:4290
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "kan inte ta status på nyligen skapade filen \"%s\""
 
-#: apply.c:4297
+#: apply.c:4298
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr "kan inte skapa säkerhetsminne för nyligen skapade filen %s"
 
-#: apply.c:4303 apply.c:4448
+#: apply.c:4304 apply.c:4449
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "kan inte lägga till cachepost för %s"
 
-#: apply.c:4346
+#: apply.c:4347
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "misslyckades skriva till \"%s\""
 
-#: apply.c:4350
+#: apply.c:4351
 #, c-format
 msgid "closing file '%s'"
 msgstr "stänger filen \"%s\""
 
-#: apply.c:4420
+#: apply.c:4421
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "kan inte skriva filen \"%s\" läge %o"
 
-#: apply.c:4518
+#: apply.c:4519
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "Tillämpade patchen %s rent."
 
-#: apply.c:4526
+#: apply.c:4527
 msgid "internal error"
 msgstr "internt fel"
 
-#: apply.c:4529
+#: apply.c:4530
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "Tillämpade patchen %%s med %d refuserad..."
 msgstr[1] "Tillämpade patchen %%s med %d refuserade..."
 
-#: apply.c:4540
+#: apply.c:4541
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "trunkerar .rej-filnamnet till %.*s.rej"
 
-#: apply.c:4548 builtin/fetch.c:869 builtin/fetch.c:1161
+#: apply.c:4549 builtin/fetch.c:898 builtin/fetch.c:1194
 #, c-format
 msgid "cannot open %s"
 msgstr "kan inte öppna %s"
 
-#: apply.c:4562
+#: apply.c:4563
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "Stycke %d tillämpades rent."
 
-#: apply.c:4566
+#: apply.c:4567
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "Refuserar stycke %d."
 
-#: apply.c:4676
+#: apply.c:4686
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Ignorerar patch \"%s\"."
 
-#: apply.c:4684
+#: apply.c:4694
 msgid "unrecognized input"
 msgstr "indata känns inte igen"
 
-#: apply.c:4704
+#: apply.c:4714
 msgid "unable to read index file"
 msgstr "kan inte läsa indexfilen"
 
-#: apply.c:4859
+#: apply.c:4871
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "kan inte öppna patchen \"%s\": %s"
 
-#: apply.c:4886
+#: apply.c:4898
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "undertryckte %d fel i blanksteg"
 msgstr[1] "undertryckte %d fel i blanksteg"
 
-#: apply.c:4892 apply.c:4907
+#: apply.c:4904 apply.c:4919
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d rad lägger till fel i blanksteg."
 msgstr[1] "%d rader lägger till fel i blanksteg."
 
-#: apply.c:4900
+#: apply.c:4912
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] "%d rad applicerade efter att ha rättat fel i blanksteg."
 msgstr[1] "%d rader applicerade efter att ha rättat fel i blanksteg."
 
-#: apply.c:4916 builtin/add.c:540 builtin/mv.c:301 builtin/rm.c:390
+#: apply.c:4928 builtin/add.c:540 builtin/mv.c:301 builtin/rm.c:390
 msgid "Unable to write new index file"
 msgstr "Kunde inte skriva ny indexfil"
 
-#: apply.c:4943 apply.c:4946 builtin/am.c:2208 builtin/am.c:2211
-#: builtin/clone.c:123 builtin/fetch.c:128 builtin/merge.c:273
-#: builtin/pull.c:208 builtin/submodule--helper.c:407
+#: apply.c:4955 apply.c:4958 builtin/am.c:2197 builtin/am.c:2200
+#: builtin/clone.c:122 builtin/fetch.c:143 builtin/merge.c:273
+#: builtin/pull.c:209 builtin/submodule--helper.c:407
 #: builtin/submodule--helper.c:1367 builtin/submodule--helper.c:1370
 #: builtin/submodule--helper.c:1850 builtin/submodule--helper.c:1853
 #: builtin/submodule--helper.c:2092 git-add--interactive.perl:211
 msgid "path"
 msgstr "sökväg"
 
-#: apply.c:4944
+#: apply.c:4956
 msgid "don't apply changes matching the given path"
 msgstr "tillämpa inte ändringar som motsvarar given sökväg"
 
-#: apply.c:4947
+#: apply.c:4959
 msgid "apply changes matching the given path"
 msgstr "tillämpa ändringar som motsvarar given sökväg"
 
-#: apply.c:4949 builtin/am.c:2217
+#: apply.c:4961 builtin/am.c:2206
 msgid "num"
 msgstr "antal"
 
-#: apply.c:4950
+#: apply.c:4962
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "ta bort <antal> inledande snedstreck från traditionella diff-sökvägar"
 
-#: apply.c:4953
+#: apply.c:4965
 msgid "ignore additions made by the patch"
 msgstr "ignorera tillägg gjorda av patchen"
 
-#: apply.c:4955
+#: apply.c:4967
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "istället för att tillämpa patchen, skriv ut diffstat för indata"
 
-#: apply.c:4959
+#: apply.c:4971
 msgid "show number of added and deleted lines in decimal notation"
 msgstr "visa antal tillagda och borttagna rader decimalt"
 
-#: apply.c:4961
+#: apply.c:4973
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "istället för att tillämpa patchen, skriv ut en summering av indata"
 
-#: apply.c:4963
+#: apply.c:4975
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "istället för att tillämpa patchen, se om patchen kan tillämpas"
 
-#: apply.c:4965
+#: apply.c:4977
 msgid "make sure the patch is applicable to the current index"
 msgstr "se till att patchen kan tillämpas på aktuellt index"
 
-#: apply.c:4967
+#: apply.c:4979
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "markera nya filer med \"git add --intent-to-add\""
 
-#: apply.c:4969
+#: apply.c:4981
 msgid "apply a patch without touching the working tree"
 msgstr "tillämpa en patch utan att röra arbetskatalogen"
 
-#: apply.c:4971
+#: apply.c:4983
 msgid "accept a patch that touches outside the working area"
 msgstr "godta en patch som rör filer utanför arbetskatalogen"
 
-#: apply.c:4974
+#: apply.c:4986
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "tillämpa också patchen (använd med --stat/--summary/--check)"
 
-#: apply.c:4976
+#: apply.c:4988
 msgid "attempt three-way merge if a patch does not apply"
 msgstr "försök en trevägssammanslagning om patchen inte kan tillämpas"
 
-#: apply.c:4978
+#: apply.c:4990
 msgid "build a temporary index based on embedded index information"
 msgstr "bygg ett temporärt index baserat på inbyggd indexinformation"
 
-#: apply.c:4981 builtin/checkout-index.c:173 builtin/ls-files.c:524
+#: apply.c:4993 builtin/checkout-index.c:173 builtin/ls-files.c:524
 msgid "paths are separated with NUL character"
 msgstr "sökvägar avdelas med NUL-tecken"
 
-#: apply.c:4983
+#: apply.c:4995
 msgid "ensure at least <n> lines of context match"
 msgstr "se till att åtminstone <n> rader sammanhang är lika"
 
-#: apply.c:4984 builtin/am.c:2196 builtin/interpret-trailers.c:98
+#: apply.c:4996 builtin/am.c:2185 builtin/interpret-trailers.c:98
 #: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3319 builtin/rebase.c:1421
+#: builtin/pack-objects.c:3310 builtin/rebase.c:1445
 msgid "action"
 msgstr "åtgärd"
 
-#: apply.c:4985
+#: apply.c:4997
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "detektera nya eller ändrade rader som har fel i blanktecken"
 
-#: apply.c:4988 apply.c:4991
+#: apply.c:5000 apply.c:5003
 msgid "ignore changes in whitespace when finding context"
 msgstr "ignorera ändringar i blanktecken för sammanhang"
 
-#: apply.c:4994
+#: apply.c:5006
 msgid "apply the patch in reverse"
 msgstr "tillämpa patchen baklänges"
 
-#: apply.c:4996
+#: apply.c:5008
 msgid "don't expect at least one line of context"
 msgstr "förvänta inte minst en rad sammanhang"
 
-#: apply.c:4998
+#: apply.c:5010
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "lämna refuserade stycken i motsvarande *.rej-filer"
 
-#: apply.c:5000
+#: apply.c:5012
 msgid "allow overlapping hunks"
 msgstr "tillåt överlappande stycken"
 
-#: apply.c:5001 builtin/add.c:291 builtin/check-ignore.c:22
+#: apply.c:5013 builtin/add.c:291 builtin/check-ignore.c:22
 #: builtin/commit.c:1337 builtin/count-objects.c:98 builtin/fsck.c:786
 #: builtin/log.c:2085 builtin/mv.c:123 builtin/read-tree.c:128
 msgid "be verbose"
 msgstr "var pratsam"
 
-#: apply.c:5003
+#: apply.c:5015
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr "tolerera felaktigt detekterade saknade nyradstecken vid filslut"
 
-#: apply.c:5006
+#: apply.c:5018
 msgid "do not trust the line counts in the hunk headers"
 msgstr "lite inte på antalet linjer i styckehuvuden"
 
-#: apply.c:5008 builtin/am.c:2205
+#: apply.c:5020 builtin/am.c:2194
 msgid "root"
 msgstr "rot"
 
-#: apply.c:5009
+#: apply.c:5021
 msgid "prepend <root> to all filenames"
 msgstr "lägg till <rot> i alla filnamn"
 
@@ -818,7 +818,7 @@
 msgid "archive format"
 msgstr "arkivformat"
 
-#: archive.c:458 builtin/log.c:1597
+#: archive.c:458 builtin/log.c:1581
 msgid "prefix"
 msgstr "prefix"
 
@@ -826,11 +826,12 @@
 msgid "prepend prefix to each pathname in the archive"
 msgstr "lägg till prefix till varje sökväg i arkivet"
 
-#: archive.c:460 builtin/blame.c:862 builtin/blame.c:874 builtin/blame.c:875
-#: builtin/commit-tree.c:117 builtin/config.c:129 builtin/fast-export.c:1134
-#: builtin/fast-export.c:1136 builtin/grep.c:897 builtin/hash-object.c:105
-#: builtin/ls-files.c:560 builtin/ls-files.c:563 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:177
+#: archive.c:460 builtin/blame.c:861 builtin/blame.c:873 builtin/blame.c:874
+#: builtin/commit-tree.c:117 builtin/config.c:129 builtin/fast-export.c:1162
+#: builtin/fast-export.c:1164 builtin/fast-export.c:1168 builtin/grep.c:899
+#: builtin/hash-object.c:105 builtin/ls-files.c:560 builtin/ls-files.c:563
+#: builtin/notes.c:412 builtin/notes.c:578 builtin/read-tree.c:123
+#: parse-options.h:186
 msgid "file"
 msgstr "fil"
 
@@ -862,7 +863,7 @@
 msgid "list supported archive formats"
 msgstr "visa understödda arkivformat"
 
-#: archive.c:479 builtin/archive.c:91 builtin/clone.c:113 builtin/clone.c:116
+#: archive.c:479 builtin/archive.c:91 builtin/clone.c:112 builtin/clone.c:115
 #: builtin/submodule--helper.c:1379 builtin/submodule--helper.c:1859
 msgid "repo"
 msgstr "arkiv"
@@ -871,7 +872,7 @@
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "hämta arkivet från fjärrarkivet <arkiv>"
 
-#: archive.c:481 builtin/archive.c:93 builtin/difftool.c:707
+#: archive.c:481 builtin/archive.c:93 builtin/difftool.c:715
 #: builtin/notes.c:498
 msgid "command"
 msgstr "kommando"
@@ -907,26 +908,26 @@
 msgid "cannot stream blob %s"
 msgstr "kan inte strömma blob:en %s"
 
-#: archive-tar.c:260 archive-zip.c:363
+#: archive-tar.c:266 archive-zip.c:363
 #, c-format
 msgid "unsupported file mode: 0%o (SHA1: %s)"
 msgstr "filens läge stöds ej: 0%o (SHA1: %s)"
 
-#: archive-tar.c:287 archive-zip.c:353
+#: archive-tar.c:293 archive-zip.c:353
 #, c-format
 msgid "cannot read %s"
 msgstr "kan inte läsa %s"
 
-#: archive-tar.c:459
+#: archive-tar.c:465
 #, c-format
 msgid "unable to start '%s' filter"
 msgstr "kunde inte starta filtret \"%s\""
 
-#: archive-tar.c:462
+#: archive-tar.c:468
 msgid "unable to redirect descriptor"
 msgstr "kan inte omdirigera handtag"
 
-#: archive-tar.c:469
+#: archive-tar.c:475
 #, c-format
 msgid "'%s' filter reported error"
 msgstr "filtret \"%s\" rapporterade fel"
@@ -941,7 +942,7 @@
 msgid "path too long (%d chars, SHA1: %s): %s"
 msgstr "sökvägen för lång (%d tecken, SHA1: %s): %s"
 
-#: archive-zip.c:474 builtin/pack-objects.c:226 builtin/pack-objects.c:229
+#: archive-zip.c:474 builtin/pack-objects.c:230 builtin/pack-objects.c:233
 #, c-format
 msgid "deflate error (%d)"
 msgstr "fel i deflate (%d)"
@@ -951,17 +952,17 @@
 msgid "timestamp too large for this system: %<PRIuMAX>"
 msgstr "tidsstämpeln för stor för detta system: %<PRIuMAX>"
 
-#: attr.c:211
+#: attr.c:213
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr "%-*s är inte ett giltigt namn på attribut"
 
-#: attr.c:368
+#: attr.c:370
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s inte tillåtet: %s:%d"
 
-#: attr.c:408
+#: attr.c:410
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1089,41 +1090,41 @@
 msgstr[0] "Bisect: %d revision kvar att testa efter denna %s\n"
 msgstr[1] "Bisect: %d revisioner kvar att testa efter denna %s\n"
 
-#: blame.c:2697
+#: blame.c:2700
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents och --reverse fungerar inte så bra tillsammans."
 
-#: blame.c:2711
+#: blame.c:2714
 msgid "cannot use --contents with final commit object name"
 msgstr "kan inte använda --contents med namn på slutgiltigt incheckningsobjekt"
 
-#: blame.c:2732
+#: blame.c:2735
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "--reverse och --first-parent tillsammans kräver att du anger senaste "
 "incheckningen"
 
-#: blame.c:2741 bundle.c:167 ref-filter.c:2196 remote.c:1938 sequencer.c:2033
-#: sequencer.c:4348 builtin/commit.c:1020 builtin/log.c:404 builtin/log.c:980
-#: builtin/log.c:1468 builtin/log.c:1844 builtin/log.c:2134 builtin/merge.c:411
-#: builtin/pack-objects.c:3142 builtin/pack-objects.c:3157
+#: blame.c:2744 bundle.c:167 ref-filter.c:2203 remote.c:1941 sequencer.c:1971
+#: sequencer.c:4305 builtin/commit.c:1020 builtin/log.c:387 builtin/log.c:964
+#: builtin/log.c:1452 builtin/log.c:1844 builtin/log.c:2134 builtin/merge.c:411
+#: builtin/pack-objects.c:3128 builtin/pack-objects.c:3143
 #: builtin/shortlog.c:192
 msgid "revision walk setup failed"
 msgstr "misslyckades skapa revisionstraversering"
 
-#: blame.c:2759
+#: blame.c:2762
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "--reverse --first-parent tillsammans kräver ett intervall på första-förälder-"
 "kedjan"
 
-#: blame.c:2770
+#: blame.c:2773
 #, c-format
 msgid "no such path %s in %s"
 msgstr "sökvägen %s i %s finns inte"
 
-#: blame.c:2781
+#: blame.c:2784
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "kan inte läsa objektet %s för sökvägen %s"
@@ -1281,7 +1282,7 @@
 msgid "unrecognized header: %s%s (%d)"
 msgstr "okänt huvud: %s%s (%d)"
 
-#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2283 sequencer.c:3024
+#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2221 sequencer.c:2962
 #: builtin/commit.c:791
 #, c-format
 msgid "could not open '%s'"
@@ -1334,7 +1335,7 @@
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "referensen \"%s\" exkluderas av argumenten till rev-list"
 
-#: bundle.c:460 builtin/log.c:212 builtin/log.c:1749 builtin/shortlog.c:306
+#: bundle.c:460 builtin/log.c:202 builtin/log.c:1733 builtin/shortlog.c:306
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "okänt argument: %s"
@@ -1357,8 +1358,8 @@
 msgid "invalid color value: %.*s"
 msgstr "felaktigt färgvärde: %.*s"
 
-#: commit.c:50 sequencer.c:2727 builtin/am.c:355 builtin/am.c:399
-#: builtin/am.c:1378 builtin/am.c:2020 builtin/replace.c:455
+#: commit.c:50 sequencer.c:2665 builtin/am.c:354 builtin/am.c:398
+#: builtin/am.c:1366 builtin/am.c:2009 builtin/replace.c:456
 #, c-format
 msgid "could not parse %s"
 msgstr "kunde inte tolka %s"
@@ -1388,29 +1389,29 @@
 "Slå av detta meddelande genom att skriva\n"
 "\"git config advice.graftFileDeprecated false\""
 
-#: commit.c:1127
+#: commit.c:1128
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr ""
 "Incheckningen %s har en obetrodd GPG-signatur som påstås vara gjord av %s."
 
-#: commit.c:1130
+#: commit.c:1131
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr ""
 "Incheckningen %s har en felaktig GPG-signatur som påstås vara gjord av %s."
 
-#: commit.c:1133
+#: commit.c:1134
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "Incheckning %s har inte någon GPG-signatur."
 
-#: commit.c:1136
+#: commit.c:1137
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "Incheckningen %s har en korrekt GPG-signatur av %s\n"
 
-#: commit.c:1390
+#: commit.c:1391
 msgid ""
 "Warning: commit message did not conform to UTF-8.\n"
 "You may want to amend it after fixing the message, or set the config\n"
@@ -1472,180 +1473,195 @@
 msgid "unable to find all commit-graph files"
 msgstr "kan inte hitta alla incheckingsgraffiler"
 
-#: commit-graph.c:553 commit-graph.c:613
+#: commit-graph.c:561 commit-graph.c:621
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr "ogiltig incheckningsposition. incheckningsgrafen är troligtvis trasig"
 
-#: commit-graph.c:574
+#: commit-graph.c:582
 #, c-format
 msgid "could not find commit %s"
 msgstr "kunde inte hitta incheckningen %s"
 
-#: commit-graph.c:1001 builtin/pack-objects.c:2651
+#: commit-graph.c:855 builtin/am.c:1287
+#, c-format
+msgid "unable to parse commit %s"
+msgstr "kunde inte tolka incheckningen %s"
+
+#: commit-graph.c:859
+#, c-format
+msgid "unable to get tree for %s"
+msgstr "kunde inte hämta trädet på %s"
+
+#: commit-graph.c:1017 builtin/pack-objects.c:2641
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "kunde inte hämta typ för objektet %s"
 
-#: commit-graph.c:1033
+#: commit-graph.c:1049
 msgid "Loading known commits in commit graph"
 msgstr "Läser in kända incheckningar i incheckningsgraf"
 
-#: commit-graph.c:1050
+#: commit-graph.c:1066
 msgid "Expanding reachable commits in commit graph"
 msgstr "Expanderar nåbara incheckningar i incheckningsgraf"
 
-#: commit-graph.c:1069
+#: commit-graph.c:1085
 msgid "Clearing commit marks in commit graph"
 msgstr "Rensar incheckningsmärken i incheckningsgraf"
 
-#: commit-graph.c:1088
+#: commit-graph.c:1104
 msgid "Computing commit graph generation numbers"
 msgstr "Beräknar generationsvärden för incheckningsgraf"
 
-#: commit-graph.c:1162
+#: commit-graph.c:1179
 #, c-format
 msgid "Finding commits for commit graph in %d pack"
 msgid_plural "Finding commits for commit graph in %d packs"
 msgstr[0] "Söker incheckningar för incheckingsgraf i %d paket"
 msgstr[1] "Söker incheckningar för incheckingsgraf i %d paket"
 
-#: commit-graph.c:1175
+#: commit-graph.c:1192
 #, c-format
 msgid "error adding pack %s"
 msgstr "fel vid tillägg av paketet %s"
 
-#: commit-graph.c:1179
+#: commit-graph.c:1196
 #, c-format
 msgid "error opening index for %s"
 msgstr "fel vid öppning av indexet för %s"
 
-#: commit-graph.c:1203
+#: commit-graph.c:1220
 #, c-format
 msgid "Finding commits for commit graph from %d ref"
 msgid_plural "Finding commits for commit graph from %d refs"
 msgstr[0] "Söker incheckningar för incheckingsgraf från %d referens"
 msgstr[1] "Söker incheckningar för incheckingsgraf från %d referenser"
 
-#: commit-graph.c:1237
+#: commit-graph.c:1240
+#, c-format
+msgid "invalid commit object id: %s"
+msgstr "ogiltigt inchecknings-objekt-id %s"
+
+#: commit-graph.c:1255
 msgid "Finding commits for commit graph among packed objects"
 msgstr "Söker incheckningar för incheckingsgraf i packade objekt"
 
-#: commit-graph.c:1252
+#: commit-graph.c:1270
 msgid "Counting distinct commits in commit graph"
 msgstr "Räknar olika incheckningar i incheckningsgraf"
 
-#: commit-graph.c:1283
+#: commit-graph.c:1300
 msgid "Finding extra edges in commit graph"
 msgstr "Söker ytterligare kanter i incheckingsgraf"
 
-#: commit-graph.c:1331
+#: commit-graph.c:1346
 msgid "failed to write correct number of base graph ids"
 msgstr "kunde inte skriva korrekt antal bas-graf-id:n"
 
-#: commit-graph.c:1364 midx.c:811
+#: commit-graph.c:1379 midx.c:810
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "kunde inte skapa inledande kataloger för %s"
 
-#: commit-graph.c:1376 builtin/index-pack.c:306 builtin/repack.c:251
+#: commit-graph.c:1391 builtin/index-pack.c:306 builtin/repack.c:241
 #, c-format
 msgid "unable to create '%s'"
 msgstr "kunde inte skapa \"%s\""
 
-#: commit-graph.c:1436
+#: commit-graph.c:1451
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "Skriver ut incheckningsgraf i %d pass"
 msgstr[1] "Skriver ut incheckningsgraf i %d pass"
 
-#: commit-graph.c:1477
+#: commit-graph.c:1492
 msgid "unable to open commit-graph chain file"
 msgstr "Kunde inte öppna incheckningsgrafkedjefilen"
 
-#: commit-graph.c:1489
+#: commit-graph.c:1504
 msgid "failed to rename base commit-graph file"
 msgstr "kunde inte byta namn på bas-incheckingsgraffilen"
 
-#: commit-graph.c:1509
+#: commit-graph.c:1524
 msgid "failed to rename temporary commit-graph file"
 msgstr "kunde inte byta namn på temporär incheckningsgraffil"
 
-#: commit-graph.c:1620
+#: commit-graph.c:1635
 msgid "Scanning merged commits"
 msgstr "Söker sammanslagna incheckningar"
 
-#: commit-graph.c:1631
+#: commit-graph.c:1646
 #, c-format
 msgid "unexpected duplicate commit id %s"
 msgstr "oväntat duplicerat inchecknings-id %s"
 
-#: commit-graph.c:1656
+#: commit-graph.c:1670
 msgid "Merging commit-graph"
 msgstr "Slår ihop incheckningsgraf"
 
-#: commit-graph.c:1842
+#: commit-graph.c:1860
 #, c-format
 msgid "the commit graph format cannot write %d commits"
 msgstr "formatet på incheckningsgrafen kan inte visa %d incheckningar"
 
-#: commit-graph.c:1853
+#: commit-graph.c:1871
 msgid "too many commits to write graph"
 msgstr "för många incheckningar för att skriva graf"
 
-#: commit-graph.c:1943
+#: commit-graph.c:1961
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 "filen med incheckningsgraf har felaktig checksumma och är troligtvis trasig"
 
-#: commit-graph.c:1953
+#: commit-graph.c:1971
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "incheckningsgrafen har felaktig OID-ordning: %s så %s"
 
-#: commit-graph.c:1963 commit-graph.c:1978
+#: commit-graph.c:1981 commit-graph.c:1996
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr ""
 "incheckningsgrafen har felaktig utbredningsvärde: fanout[%d] = %u != %u"
 
-#: commit-graph.c:1970
+#: commit-graph.c:1988
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "kunde inte tolka incheckning %s från incheckningsgraf"
 
-#: commit-graph.c:1987
+#: commit-graph.c:2006
 msgid "Verifying commits in commit graph"
 msgstr "Bekräftar incheckningar i incheckningsgrafen"
 
-#: commit-graph.c:2000
+#: commit-graph.c:2020
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 "misslyckades tolka incheckning %s från objektdatabasen för incheckningsgraf"
 
-#: commit-graph.c:2007
+#: commit-graph.c:2027
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr "rot-trädets OID för incheckningen %s i incheckningsgrafen är %s != %s"
 
-#: commit-graph.c:2017
+#: commit-graph.c:2037
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr "incheckningsgrafens föräldralista för incheckningen %s är för lång"
 
-#: commit-graph.c:2026
+#: commit-graph.c:2046
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "incheckningsgrafens förälder för %s är %s != %s"
 
-#: commit-graph.c:2039
+#: commit-graph.c:2059
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr ""
 "incheckningsgrafens föräldralista för incheckningen %s avslutas för tidigt"
 
-#: commit-graph.c:2044
+#: commit-graph.c:2064
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
@@ -1653,7 +1669,7 @@
 "incheckningsgrafen har generationsnummer noll för incheckningen %s, men icke-"
 "noll på annan plats"
 
-#: commit-graph.c:2048
+#: commit-graph.c:2068
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
@@ -1661,12 +1677,12 @@
 "incheckningsgrafen har generationsnummer skilt från noll för incheckningen "
 "%s, men noll på annan plats"
 
-#: commit-graph.c:2063
+#: commit-graph.c:2083
 #, c-format
 msgid "commit-graph generation for commit %s is %u != %u"
 msgstr "incheckningsgrafens generation för incheckningen %s är %u != %u"
 
-#: commit-graph.c:2069
+#: commit-graph.c:2089
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
@@ -1705,289 +1721,283 @@
 msgid "relative config include conditionals must come from files"
 msgstr "relativa konfigureringsinkluderingsvillkor måste komma från filer"
 
-#: config.c:375
+#: config.c:376
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "nyckeln innehåller inte ett stycke: %s"
 
-#: config.c:381
+#: config.c:382
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr "nyckeln innehåller inte variabelnamn: %s"
 
-#: config.c:405 sequencer.c:2463
+#: config.c:406 sequencer.c:2401
 #, c-format
 msgid "invalid key: %s"
 msgstr "felaktig nyckel: %s"
 
-#: config.c:411
+#: config.c:412
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "ogiltig nyckel (nyradstecken): %s"
 
-#: config.c:447 config.c:459
+#: config.c:448 config.c:460
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "falsk konfigureringsparameter: %s"
 
-#: config.c:494
+#: config.c:495
 #, c-format
 msgid "bogus format in %s"
 msgstr "felaktigt format i %s"
 
-#: config.c:820
+#: config.c:821
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "felaktig konfigurationsfil rad %d i blob:en %s"
 
-#: config.c:824
+#: config.c:825
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "felaktig konfigurationsfil rad %d i filen %s"
 
-#: config.c:828
+#: config.c:829
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "felaktig konfigurationsfil rad %d i standard in"
 
-#: config.c:832
+#: config.c:833
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "felaktig konfigurationsfil rad %d i undermoduls-blob:en %s"
 
-#: config.c:836
+#: config.c:837
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "felaktig konfigurationsfil rad %d i kommandoraden %s"
 
-#: config.c:840
+#: config.c:841
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "felaktig konfigurationsfil rad %d i %s"
 
-#: config.c:977
+#: config.c:978
 msgid "out of range"
 msgstr "utanför intervallet"
 
-#: config.c:977
+#: config.c:978
 msgid "invalid unit"
 msgstr "ogiltig enhet"
 
-#: config.c:978
+#: config.c:979
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "felaktigt numeriskt konfigurationsvärde \"%s\" för \"%s\": %s"
 
-#: config.c:997
+#: config.c:998
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr ""
 "felaktigt numeriskt konfigurationsvärde \"%s\" för \"%s\" i blob:en %s: %s"
 
-#: config.c:1000
+#: config.c:1001
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr ""
 "felaktigt numeriskt konfigurationsvärde \"%s\" för \"%s\" i filen %s: %s"
 
-#: config.c:1003
+#: config.c:1004
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr ""
 "felaktigt numeriskt konfigurationsvärde \"%s\" för \"%s\" i standard in: %s"
 
-#: config.c:1006
+#: config.c:1007
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr ""
 "felaktigt numeriskt konfigurationsvärde \"%s\" för \"%s\" i undermodul-blob:"
 "en %s: %s"
 
-#: config.c:1009
+#: config.c:1010
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr ""
 "felaktigt numeriskt konfigurationsvärde \"%s\" för \"%s\" i kommandoraden "
 "%s: %s"
 
-#: config.c:1012
+#: config.c:1013
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr "felaktigt numeriskt konfigurationsvärde \"%s\" för \"%s\" i %s: %s"
 
-#: config.c:1107
+#: config.c:1108
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "misslyckades expandera användarkatalog i: \"%s\""
 
-#: config.c:1116
+#: config.c:1117
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "\"%s\" för \"%s\" är inte en giltig tidsstämpel"
 
-#: config.c:1207
+#: config.c:1208
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "förkortningslängd utanför intervallet: %d"
 
-#: config.c:1221 config.c:1232
+#: config.c:1222 config.c:1233
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "felaktigt zlib-komprimeringsgrad %d"
 
-#: config.c:1324
+#: config.c:1325
 msgid "core.commentChar should only be one character"
 msgstr "core.commentChar kan bara vara ett tecken"
 
-#: config.c:1357
+#: config.c:1358
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "felaktigt läge för skapande av objekt: %s"
 
-#: config.c:1429
+#: config.c:1425
 #, c-format
 msgid "malformed value for %s"
 msgstr "felformat värde för %s"
 
-#: config.c:1455
+#: config.c:1451
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "felformat värde för %s: %s"
 
-#: config.c:1456
+#: config.c:1452
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr "måste vara en av nothing, matching, simple, upstream eller current"
 
-#: config.c:1517 builtin/pack-objects.c:3399
+#: config.c:1513 builtin/pack-objects.c:3394
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "felaktig paketkomprimeringsgrad %d"
 
-#: config.c:1638
+#: config.c:1634
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "kunde inte läsa konfigurerings-blobobjektet \"%s\""
 
-#: config.c:1641
+#: config.c:1637
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "referensen \"%s\" pekar inte på en blob"
 
-#: config.c:1658
+#: config.c:1654
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "kan inte slå upp konfigurerings-bloben \"%s\""
 
-#: config.c:1688
+#: config.c:1684
 #, c-format
 msgid "failed to parse %s"
 msgstr "kunde inte tolka %s"
 
-#: config.c:1744
+#: config.c:1740
 msgid "unable to parse command-line config"
 msgstr "kan inte tolka kommandoradskonfiguration"
 
-#: config.c:2093
+#: config.c:2091
 msgid "unknown error occurred while reading the configuration files"
 msgstr "okänt fel uppstod vid läsning av konfigurationsfilerna"
 
-#: config.c:2263
+#: config.c:2261
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "Felaktigt %s: \"%s\""
 
 #: config.c:2306
 #, c-format
-msgid "unknown core.untrackedCache value '%s'; using 'keep' default value"
-msgstr ""
-"okänt värde \"%s\" för core.untrackedCache; använder standardvärdet \"keep\""
-
-#: config.c:2332
-#, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr "värdet \"%d\" för splitIndex.maxPercentage borde vara mellan 0 och 100"
 
-#: config.c:2378
+#: config.c:2352
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "kunde inte tolka värdet \"%s\" från kommandoradskonfiguration"
 
-#: config.c:2380
+#: config.c:2354
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "felaktig konfigurationsvariabel \"%s\" i filen \"%s\" på rad %d"
 
-#: config.c:2461
+#: config.c:2435
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "felaktigt sektionsnamn \"%s\""
 
-#: config.c:2493
+#: config.c:2467
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s har flera värden"
 
-#: config.c:2522
+#: config.c:2496
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "kan inte skriva nya konfigurationsfilen \"%s\""
 
-#: config.c:2774 config.c:3098
+#: config.c:2748 config.c:3072
 #, c-format
 msgid "could not lock config file %s"
 msgstr "kunde inte låsa konfigurationsfilen %s"
 
-#: config.c:2785
+#: config.c:2759
 #, c-format
 msgid "opening %s"
 msgstr "öppnar %s"
 
-#: config.c:2820 builtin/config.c:328
+#: config.c:2794 builtin/config.c:328
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "ogiltigt mönster: %s"
 
-#: config.c:2845
+#: config.c:2819
 #, c-format
 msgid "invalid config file %s"
 msgstr "ogiltig konfigurationsfil: \"%s\""
 
-#: config.c:2858 config.c:3111
+#: config.c:2832 config.c:3085
 #, c-format
 msgid "fstat on %s failed"
 msgstr "fstat misslyckades på %s"
 
-#: config.c:2869
+#: config.c:2843
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr "kunde inte utföra mmap på \"%s\""
 
-#: config.c:2878 config.c:3116
+#: config.c:2852 config.c:3090
 #, c-format
 msgid "chmod on %s failed"
 msgstr "chmod misslyckades på %s"
 
-#: config.c:2963 config.c:3213
+#: config.c:2937 config.c:3187
 #, c-format
 msgid "could not write config file %s"
 msgstr "kunde inte skriva konfigurationsfilen %s"
 
-#: config.c:2997
+#: config.c:2971
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "kunde inte ställa in \"%s\" till \"%s\""
 
-#: config.c:2999 builtin/remote.c:782
+#: config.c:2973 builtin/remote.c:782
 #, c-format
 msgid "could not unset '%s'"
 msgstr "kunde inte ta bort inställning för \"%s\""
 
-#: config.c:3089
+#: config.c:3063
 #, c-format
 msgid "invalid section name: %s"
 msgstr "felaktigt namn på stycke: %s"
 
-#: config.c:3256
+#: config.c:3230
 #, c-format
 msgid "missing value for '%s'"
 msgstr "värde saknas för \"%s\""
@@ -2111,7 +2121,7 @@
 msgid "unknown port %s"
 msgstr "okänd port %s"
 
-#: connect.c:845 connect.c:1171
+#: connect.c:845 connect.c:1175
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr "konstigt värdnamn \"%s\" blockerat"
@@ -2126,60 +2136,60 @@
 msgid "cannot start proxy %s"
 msgstr "kan inte starta mellanserver (proxy) %s"
 
-#: connect.c:924
+#: connect.c:928
 msgid "no path specified; see 'git help pull' for valid url syntax"
 msgstr "ingen sökväg angavs; se \"git help pull\" för giltig URL-syntax"
 
-#: connect.c:1119
+#: connect.c:1123
 msgid "ssh variant 'simple' does not support -4"
 msgstr "ssh-varianten \"simple\" stöder inte -4"
 
-#: connect.c:1131
+#: connect.c:1135
 msgid "ssh variant 'simple' does not support -6"
 msgstr "ssh-varianten \"simple\" stöder inte -6"
 
-#: connect.c:1148
+#: connect.c:1152
 msgid "ssh variant 'simple' does not support setting port"
 msgstr "ssh-varianten \"simple\" stöder inte val av port"
 
-#: connect.c:1260
+#: connect.c:1264
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr "konstigt sökvägsnamn \"%s\" blockerat"
 
-#: connect.c:1307
+#: connect.c:1311
 msgid "unable to fork"
 msgstr "kunde inte grena (fork)"
 
 # Vague original, not networking-related, but rather related to the actual
 # objects in the database.
-#: connected.c:86 builtin/fsck.c:221 builtin/prune.c:43
+#: connected.c:88 builtin/fsck.c:221 builtin/prune.c:43
 msgid "Checking connectivity"
 msgstr "Kontrollerar konnektivitet"
 
-#: connected.c:98
+#: connected.c:100
 msgid "Could not run 'git rev-list'"
 msgstr "Kunde inte köra \"git rev-list\""
 
-#: connected.c:118
+#: connected.c:120
 msgid "failed write to rev-list"
 msgstr "kunde inte skriva till rev-list"
 
-#: connected.c:125
+#: connected.c:127
 msgid "failed to close rev-list's stdin"
 msgstr "kunde inte stänga rev-list:s standard in"
 
-#: convert.c:193
+#: convert.c:194
 #, c-format
 msgid "illegal crlf_action %d"
 msgstr "felaktig crlf_action %d"
 
-#: convert.c:206
+#: convert.c:207
 #, c-format
 msgid "CRLF would be replaced by LF in %s"
 msgstr "CRLF skulle ersättas av LF i %s"
 
-#: convert.c:208
+#: convert.c:209
 #, c-format
 msgid ""
 "CRLF will be replaced by LF in %s.\n"
@@ -2188,12 +2198,12 @@
 "CRLF kommer att ersättas av LF i %s.\n"
 "Filen kommer att ha sina ursprungliga radbrytningar i din arbetskatalog"
 
-#: convert.c:216
+#: convert.c:217
 #, c-format
 msgid "LF would be replaced by CRLF in %s"
 msgstr "LF skulle ersättas av CRLF i %s"
 
-#: convert.c:218
+#: convert.c:219
 #, c-format
 msgid ""
 "LF will be replaced by CRLF in %s.\n"
@@ -2202,12 +2212,12 @@
 "LF kommer att ersättas av CRLF i %s.\n"
 "Filen kommer att ha sina ursprungliga radbrytningar i din arbetskatalog"
 
-#: convert.c:279
+#: convert.c:280
 #, c-format
 msgid "BOM is prohibited in '%s' if encoded as %s"
 msgstr "BOM är förbjudet i \"%s\" om kodat som %s"
 
-#: convert.c:286
+#: convert.c:287
 #, c-format
 msgid ""
 "The file '%s' contains a byte order mark (BOM). Please use UTF-%s as working-"
@@ -2216,12 +2226,12 @@
 "Filen \"%s\" innehåller byte order mark (BOM). Använd UTF-%s som "
 "teckenkodning i arbetskatalogen."
 
-#: convert.c:304
+#: convert.c:305
 #, c-format
 msgid "BOM is required in '%s' if encoded as %s"
 msgstr "BOM krävs om \"%s\" kodas som %s"
 
-#: convert.c:306
+#: convert.c:307
 #, c-format
 msgid ""
 "The file '%s' is missing a byte order mark (BOM). Please use UTF-%sBE or UTF-"
@@ -2230,51 +2240,51 @@
 "Filen \"%s\" saknar byte order mark (BOM). Använd UTF-%sBE eller UTF-%sLE "
 "(beroende på byteordning) som teckenkodning i arbetskatalogen."
 
-#: convert.c:424 convert.c:495
+#: convert.c:425 convert.c:496
 #, c-format
 msgid "failed to encode '%s' from %s to %s"
 msgstr "misslyckades omkoda \"%s\" från %s till %s"
 
-#: convert.c:467
+#: convert.c:468
 #, c-format
 msgid "encoding '%s' from %s to %s and back is not the same"
 msgstr ""
 "omkodning av \"%s\" från %s till %s och tillbaka ger inte samma resultat"
 
-#: convert.c:673
+#: convert.c:674
 #, c-format
 msgid "cannot fork to run external filter '%s'"
 msgstr "kan inte grena (fork) för att köra externt filter \"%s\""
 
-#: convert.c:693
+#: convert.c:694
 #, c-format
 msgid "cannot feed the input to external filter '%s'"
 msgstr "kunde inte skicka indata till externt filter \"%s\""
 
-#: convert.c:700
+#: convert.c:701
 #, c-format
 msgid "external filter '%s' failed %d"
 msgstr "externt filter \"%s\" misslyckades %d"
 
-#: convert.c:735 convert.c:738
+#: convert.c:736 convert.c:739
 #, c-format
 msgid "read from external filter '%s' failed"
 msgstr "läsning från externt filter \"%s\" misslyckades"
 
-#: convert.c:741 convert.c:796
+#: convert.c:742 convert.c:797
 #, c-format
 msgid "external filter '%s' failed"
 msgstr "externt filter \"%s\" misslyckades"
 
-#: convert.c:844
+#: convert.c:845
 msgid "unexpected filter type"
 msgstr "oväntad filtertyp"
 
-#: convert.c:855
+#: convert.c:856
 msgid "path name too long for external filter"
 msgstr "sökvägen för lång för externt filter"
 
-#: convert.c:929
+#: convert.c:930
 #, c-format
 msgid ""
 "external filter '%s' is not available anymore although not all paths have "
@@ -2283,67 +2293,67 @@
 "externt filter \"%s\" är inte längre tillgängligt trots att alla sökvägar "
 "inte har filtrerats"
 
-#: convert.c:1228
+#: convert.c:1229
 msgid "true/false are no valid working-tree-encodings"
 msgstr "true/false är inte giltig teckenkodning för arbetskatalogen"
 
-#: convert.c:1398 convert.c:1432
+#: convert.c:1417 convert.c:1451
 #, c-format
 msgid "%s: clean filter '%s' failed"
 msgstr "%s: \"clean\"-filtret \"%s\" misslyckades"
 
-#: convert.c:1476
+#: convert.c:1495
 #, c-format
 msgid "%s: smudge filter %s failed"
 msgstr "%s: \"smudge\"-filtret \"%s\" misslyckades"
 
-#: date.c:137
+#: date.c:138
 msgid "in the future"
 msgstr "i framtiden"
 
-#: date.c:143
+#: date.c:144
 #, c-format
 msgid "%<PRIuMAX> second ago"
 msgid_plural "%<PRIuMAX> seconds ago"
 msgstr[0] "%<PRIuMAX> sekund sedan"
 msgstr[1] "%<PRIuMAX> sekunder sedan"
 
-#: date.c:150
+#: date.c:151
 #, c-format
 msgid "%<PRIuMAX> minute ago"
 msgid_plural "%<PRIuMAX> minutes ago"
 msgstr[0] "%<PRIuMAX> minut sedan"
 msgstr[1] "%<PRIuMAX> minuter sedan"
 
-#: date.c:157
+#: date.c:158
 #, c-format
 msgid "%<PRIuMAX> hour ago"
 msgid_plural "%<PRIuMAX> hours ago"
 msgstr[0] "%<PRIuMAX> timme sedan"
 msgstr[1] "%<PRIuMAX> timmar sedan"
 
-#: date.c:164
+#: date.c:165
 #, c-format
 msgid "%<PRIuMAX> day ago"
 msgid_plural "%<PRIuMAX> days ago"
 msgstr[0] "%<PRIuMAX> dag sedan"
 msgstr[1] "%<PRIuMAX> dagar sedan"
 
-#: date.c:170
+#: date.c:171
 #, c-format
 msgid "%<PRIuMAX> week ago"
 msgid_plural "%<PRIuMAX> weeks ago"
 msgstr[0] "%<PRIuMAX> vecka sedan"
 msgstr[1] "%<PRIuMAX> veckor sedan"
 
-#: date.c:177
+#: date.c:178
 #, c-format
 msgid "%<PRIuMAX> month ago"
 msgid_plural "%<PRIuMAX> months ago"
 msgstr[0] "%<PRIuMAX> månad sedan"
 msgstr[1] "%<PRIuMAX> månader sedan"
 
-#: date.c:188
+#: date.c:189
 #, c-format
 msgid "%<PRIuMAX> year"
 msgid_plural "%<PRIuMAX> years"
@@ -2351,14 +2361,14 @@
 msgstr[1] "%<PRIuMAX> år"
 
 #. TRANSLATORS: "%s" is "<n> years"
-#: date.c:191
+#: date.c:192
 #, c-format
 msgid "%s, %<PRIuMAX> month ago"
 msgid_plural "%s, %<PRIuMAX> months ago"
 msgstr[0] "%s, %<PRIuMAX> månad sedan"
 msgstr[1] "%s, %<PRIuMAX> månader sedan"
 
-#: date.c:196 date.c:201
+#: date.c:197 date.c:202
 #, c-format
 msgid "%<PRIuMAX> year ago"
 msgid_plural "%<PRIuMAX> years ago"
@@ -2394,7 +2404,7 @@
 msgid "failed to read orderfile '%s'"
 msgstr "kunde inte läsa orderfilen \"%s\""
 
-#: diffcore-rename.c:544
+#: diffcore-rename.c:543
 msgid "Performing inexact rename detection"
 msgstr "Utför onöjaktig namnbytesdetektering"
 
@@ -2460,35 +2470,35 @@
 "Hittade fel i konfigurationsvariabeln \"diff.dirstat\":\n"
 "%s"
 
-#: diff.c:4215
+#: diff.c:4218
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "extern diff dog, stannar vid %s"
 
-#: diff.c:4560
+#: diff.c:4563
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr "--name-only, --name-status, -check och -s är ömsesidigt uteslutande"
 
-#: diff.c:4563
+#: diff.c:4566
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "-G, -S och --find-object är ömsesidigt uteslutande"
 
-#: diff.c:4641
+#: diff.c:4644
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow kräver exakt en sökvägsangivelse"
 
-#: diff.c:4689
+#: diff.c:4692
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "ogiltigt värde för --stat: %s"
 
-#: diff.c:4694 diff.c:4699 diff.c:4704 diff.c:4709 diff.c:5222
+#: diff.c:4697 diff.c:4702 diff.c:4707 diff.c:4712 diff.c:5225
 #: parse-options.c:199 parse-options.c:203
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s förväntar ett numeriskt värde"
 
-#: diff.c:4726
+#: diff.c:4729
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -2497,42 +2507,42 @@
 "Misslyckades tolka argument till flaggan --dirstat/-X;\n"
 "%s"
 
-#: diff.c:4811
+#: diff.c:4814
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "okänd ändringsklass \"%c\" i --diff-filter=%s"
 
-#: diff.c:4835
+#: diff.c:4838
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "okänt värde efter ws-error-highlight=%.*s"
 
-#: diff.c:4849
+#: diff.c:4852
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "kunde inte slå upp \"%s\""
 
-#: diff.c:4899 diff.c:4905
+#: diff.c:4902 diff.c:4908
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s förväntar formen <n>/<m>"
 
-#: diff.c:4917
+#: diff.c:4920
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s förväntar ett tecken, fick \"%s\""
 
-#: diff.c:4938
+#: diff.c:4941
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "felaktigt argument till --color-moved: %s"
 
-#: diff.c:4957
+#: diff.c:4960
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "ogiltigt läge %s\" i --color-moved-ws"
 
-#: diff.c:4997
+#: diff.c:5000
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
@@ -2540,149 +2550,149 @@
 "flaggan diff-algorithm godtar\"myers\", \"minimal\", \"patience\" och "
 "\"histogram\""
 
-#: diff.c:5033 diff.c:5053
+#: diff.c:5036 diff.c:5056
 #, c-format
 msgid "invalid argument to %s"
 msgstr "ogiltigt argument för %s"
 
-#: diff.c:5191
+#: diff.c:5194
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "misslyckades tolka argument till flaggan --submodule: \"%s\""
 
-#: diff.c:5247
+#: diff.c:5250
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "felaktigt argument --word-diff: %s"
 
-#: diff.c:5270
+#: diff.c:5273
 msgid "Diff output format options"
 msgstr "Formatflaggor för diff-utdata"
 
-#: diff.c:5272 diff.c:5278
+#: diff.c:5275 diff.c:5281
 msgid "generate patch"
 msgstr "skapar patch"
 
-#: diff.c:5275 builtin/log.c:182
+#: diff.c:5278 builtin/log.c:172
 msgid "suppress diff output"
 msgstr "undertryck diff-utdata"
 
-#: diff.c:5280 diff.c:5394 diff.c:5401
+#: diff.c:5283 diff.c:5397 diff.c:5404
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5281 diff.c:5284
+#: diff.c:5284 diff.c:5287
 msgid "generate diffs with <n> lines context"
 msgstr "skapa diffar med <n> rader sammanhang"
 
-#: diff.c:5286
+#: diff.c:5289
 msgid "generate the diff in raw format"
 msgstr "generera diff i råformat"
 
-#: diff.c:5289
+#: diff.c:5292
 msgid "synonym for '-p --raw'"
 msgstr "synonym till \"-p --raw\""
 
-#: diff.c:5293
+#: diff.c:5296
 msgid "synonym for '-p --stat'"
 msgstr "synonym till \"-p --stat\""
 
-#: diff.c:5297
+#: diff.c:5300
 msgid "machine friendly --stat"
 msgstr "maskinläsbar --stat"
 
-#: diff.c:5300
+#: diff.c:5303
 msgid "output only the last line of --stat"
 msgstr "skriv bara ut den sista raden för --stat"
 
-#: diff.c:5302 diff.c:5310
+#: diff.c:5305 diff.c:5313
 msgid "<param1,param2>..."
 msgstr "<param1,param2>..."
 
-#: diff.c:5303
+#: diff.c:5306
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr ""
 "skriv ut distributionen av relativa mängder ändringar för varje underkatalog"
 
-#: diff.c:5307
+#: diff.c:5310
 msgid "synonym for --dirstat=cumulative"
 msgstr "synonym för --dirstat=cumulative"
 
-#: diff.c:5311
+#: diff.c:5314
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "synonym för --dirstat=filer,param1,param2..."
 
-#: diff.c:5315
+#: diff.c:5318
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr "varna om ändringar introducerar konfliktmarkörer eller blankstegsfel"
 
-#: diff.c:5318
+#: diff.c:5321
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr "kortfattad summering såsom skapade, namnbyten och ändrade lägen"
 
-#: diff.c:5321
+#: diff.c:5324
 msgid "show only names of changed files"
 msgstr "visa endast namnen på ändrade filer"
 
-#: diff.c:5324
+#: diff.c:5327
 msgid "show only names and status of changed files"
 msgstr "visa endast namn och status för ändrade filer"
 
-#: diff.c:5326
+#: diff.c:5329
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<bredd>[,<namn-bredd>[,<antal>]]"
 
-#: diff.c:5327
+#: diff.c:5330
 msgid "generate diffstat"
 msgstr "skapa diffstat"
 
-#: diff.c:5329 diff.c:5332 diff.c:5335
+#: diff.c:5332 diff.c:5335 diff.c:5338
 msgid "<width>"
 msgstr "<bredd>"
 
-#: diff.c:5330
+#: diff.c:5333
 msgid "generate diffstat with a given width"
 msgstr "generera en diffstat med given bredd"
 
-#: diff.c:5333
+#: diff.c:5336
 msgid "generate diffstat with a given name width"
 msgstr "generera en diffstat med given namnbredd"
 
-#: diff.c:5336
+#: diff.c:5339
 msgid "generate diffstat with a given graph width"
 msgstr "generera en diffstat med given grafbredd"
 
-#: diff.c:5338
+#: diff.c:5341
 msgid "<count>"
 msgstr "<antal>"
 
-#: diff.c:5339
+#: diff.c:5342
 msgid "generate diffstat with limited lines"
 msgstr "generera diffstat med begränsade rader"
 
-#: diff.c:5342
+#: diff.c:5345
 msgid "generate compact summary in diffstat"
 msgstr "skapa kompakt översikt i diffstat"
 
-#: diff.c:5345
+#: diff.c:5348
 msgid "output a binary diff that can be applied"
 msgstr "skapa en binärdiff som kan appliceras"
 
-#: diff.c:5348
+#: diff.c:5351
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr ""
 "visa fullständiga objektnamn i \"index\"-rader för läget både före och efter"
 
-#: diff.c:5350
+#: diff.c:5353
 msgid "show colored diff"
 msgstr "visa färgad diff"
 
-#: diff.c:5351
+#: diff.c:5354
 msgid "<kind>"
 msgstr "<typ>"
 
-#: diff.c:5352
+#: diff.c:5355
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
@@ -2690,7 +2700,7 @@
 "ljusmarkera blankstegsfel i \"context\" (sammanhang), \"old\" (gamla) eller "
 "\"new\" (nya) rader i diffen"
 
-#: diff.c:5355
+#: diff.c:5358
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -2698,87 +2708,87 @@
 "skriv inte om sökvägsnamn och använd NUL-tecken som fältseparerare i --raw "
 "eller --numstat"
 
-#: diff.c:5358 diff.c:5361 diff.c:5364 diff.c:5470
+#: diff.c:5361 diff.c:5364 diff.c:5367 diff.c:5473
 msgid "<prefix>"
 msgstr "<prefix>"
 
-#: diff.c:5359
+#: diff.c:5362
 msgid "show the given source prefix instead of \"a/\""
 msgstr "visa givet källprefix istället för \"a/\""
 
-#: diff.c:5362
+#: diff.c:5365
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "visa givet målprefix istället för \"b/\""
 
-#: diff.c:5365
+#: diff.c:5368
 msgid "prepend an additional prefix to every line of output"
 msgstr "lägg till ytterligare prefix på alla rader i utdata"
 
-#: diff.c:5368
+#: diff.c:5371
 msgid "do not show any source or destination prefix"
 msgstr "visa inte käll- eller målprefix"
 
-#: diff.c:5371
+#: diff.c:5374
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr "visa sammnhang mellan diff-stycken upp till angivet antal rader"
 
-#: diff.c:5375 diff.c:5380 diff.c:5385
+#: diff.c:5378 diff.c:5383 diff.c:5388
 msgid "<char>"
 msgstr "<tecken>"
 
-#: diff.c:5376
+#: diff.c:5379
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "ange tecken för att ange ny rad istället för \"+\""
 
-#: diff.c:5381
+#: diff.c:5384
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "ange tecken för att ange gammal rad istället för \"-\""
 
-#: diff.c:5386
+#: diff.c:5389
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "ange tecken för att ange sammanhang istället för \" \""
 
-#: diff.c:5389
+#: diff.c:5392
 msgid "Diff rename options"
 msgstr "Diff-namnbytesflaggor"
 
-#: diff.c:5390
+#: diff.c:5393
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5391
+#: diff.c:5394
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr "dela upp kompletta omskrivningar till ta bort och skapa-par"
 
-#: diff.c:5395
+#: diff.c:5398
 msgid "detect renames"
 msgstr "detektera namnändringar"
 
-#: diff.c:5399
+#: diff.c:5402
 msgid "omit the preimage for deletes"
 msgstr "ta bort för-version för borttagningar"
 
-#: diff.c:5402
+#: diff.c:5405
 msgid "detect copies"
 msgstr "detektera kopior"
 
-#: diff.c:5406
+#: diff.c:5409
 msgid "use unmodified files as source to find copies"
 msgstr "använd oförändrade som källa för att hitta kopior"
 
-#: diff.c:5408
+#: diff.c:5411
 msgid "disable rename detection"
 msgstr "inaktivera detektering av namnbyten"
 
-#: diff.c:5411
+#: diff.c:5414
 msgid "use empty blobs as rename source"
 msgstr "använd tomma blob:ar som namnändringskälla"
 
-#: diff.c:5413
+#: diff.c:5416
 msgid "continue listing the history of a file beyond renames"
 msgstr "fortsätt lista historiken för en fil bortom namnändringar"
 
-#: diff.c:5416
+#: diff.c:5419
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
@@ -2786,159 +2796,159 @@
 "förhindra namnbyte/kopie-detektering om antalet namnbyten/kopior överskriver "
 "given gräns"
 
-#: diff.c:5418
+#: diff.c:5421
 msgid "Diff algorithm options"
 msgstr "Alternativ för diff-algoritm"
 
-#: diff.c:5420
+#: diff.c:5423
 msgid "produce the smallest possible diff"
 msgstr "skapa minsta möjliga diff"
 
-#: diff.c:5423
+#: diff.c:5426
 msgid "ignore whitespace when comparing lines"
 msgstr "ignorera blanktecken vid radjämförelse"
 
-#: diff.c:5426
+#: diff.c:5429
 msgid "ignore changes in amount of whitespace"
 msgstr "ignorera ändringar i antal blanktecken vid radjämförelse"
 
-#: diff.c:5429
+#: diff.c:5432
 msgid "ignore changes in whitespace at EOL"
 msgstr "ignorera blanktecken vid radslut"
 
-#: diff.c:5432
+#: diff.c:5435
 msgid "ignore carrier-return at the end of line"
 msgstr "ignorera CR-tecken vid radslut"
 
-#: diff.c:5435
+#: diff.c:5438
 msgid "ignore changes whose lines are all blank"
 msgstr "ignorera ändringar i rader som är helt blanka"
 
-#: diff.c:5438
+#: diff.c:5441
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr "heuristik för att flytta diff-gränser för lättare läsning"
 
-#: diff.c:5441
+#: diff.c:5444
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "skapa diffar med algoritmen \"patience diff\""
 
-#: diff.c:5445
+#: diff.c:5448
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "skapa diffar med algoritmen \"histogram diff\""
 
-#: diff.c:5447
+#: diff.c:5450
 msgid "<algorithm>"
 msgstr "<algoritm>"
 
-#: diff.c:5448
+#: diff.c:5451
 msgid "choose a diff algorithm"
 msgstr "välj en diff-algoritm"
 
-#: diff.c:5450
+#: diff.c:5453
 msgid "<text>"
 msgstr "<text>"
 
-#: diff.c:5451
+#: diff.c:5454
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "skapa diffar med algoritmen \"anchored diff\""
 
-#: diff.c:5453 diff.c:5462 diff.c:5465
+#: diff.c:5456 diff.c:5465 diff.c:5468
 msgid "<mode>"
 msgstr "<läge>"
 
-#: diff.c:5454
+#: diff.c:5457
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr "visa orddiff, där <läge> avgränsar ändrade ord"
 
-#: diff.c:5456 diff.c:5459 diff.c:5504
+#: diff.c:5459 diff.c:5462 diff.c:5507
 msgid "<regex>"
 msgstr "<reguttr>"
 
-#: diff.c:5457
+#: diff.c:5460
 msgid "use <regex> to decide what a word is"
 msgstr "använd <reguttr> för att bestämma vad som är ett ord"
 
-#: diff.c:5460
+#: diff.c:5463
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "motsvarar --word-diff=color --word-diff-regex=<reguttr>"
 
-#: diff.c:5463
+#: diff.c:5466
 msgid "moved lines of code are colored differently"
 msgstr "flyttade kodrader färgas på annat sätt"
 
-#: diff.c:5466
+#: diff.c:5469
 msgid "how white spaces are ignored in --color-moved"
 msgstr "hur blanktecken ignoreras i --color-moved"
 
-#: diff.c:5469
+#: diff.c:5472
 msgid "Other diff options"
 msgstr "Andra diff-flaggor"
 
-#: diff.c:5471
+#: diff.c:5474
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 "vid start från underkatalog, uteslut ändringar utanför och visa relativa "
 "sökvägar"
 
-#: diff.c:5475
+#: diff.c:5478
 msgid "treat all files as text"
 msgstr "hantera alla filer som text"
 
-#: diff.c:5477
+#: diff.c:5480
 msgid "swap two inputs, reverse the diff"
 msgstr "växla två indatafiler, vänd diffen"
 
-#: diff.c:5479
+#: diff.c:5482
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "avsluta med 1 vid ändringar, annars 0"
 
-#: diff.c:5481
+#: diff.c:5484
 msgid "disable all output of the program"
 msgstr "slå av alla utdata från programmet"
 
-#: diff.c:5483
+#: diff.c:5486
 msgid "allow an external diff helper to be executed"
 msgstr "tillåt köra en extern diff-hjälpare"
 
-#: diff.c:5485
+#: diff.c:5488
 msgid "run external text conversion filters when comparing binary files"
 msgstr "kör externt textkonverteringsfiler när binärfiler jämförs"
 
-#: diff.c:5487
+#: diff.c:5490
 msgid "<when>"
 msgstr "<när>"
 
-#: diff.c:5488
+#: diff.c:5491
 msgid "ignore changes to submodules in the diff generation"
 msgstr "ignorera ändringar i undermoduler när diffen skapas"
 
-#: diff.c:5491
+#: diff.c:5494
 msgid "<format>"
 msgstr "<format>"
 
-#: diff.c:5492
+#: diff.c:5495
 msgid "specify how differences in submodules are shown"
 msgstr "ange hur ändringar i undermoduler visas"
 
-#: diff.c:5496
+#: diff.c:5499
 msgid "hide 'git add -N' entries from the index"
 msgstr "dölj \"git add -N\"-poster från indexet"
 
-#: diff.c:5499
+#: diff.c:5502
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "tolka \"git add -N\"-poster som äkta i indexet"
 
-#: diff.c:5501
+#: diff.c:5504
 msgid "<string>"
 msgstr "<sträng>"
 
-#: diff.c:5502
+#: diff.c:5505
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
 msgstr "se efter ändringar som ändrar antalet förekomster av angiven sträng"
 
-#: diff.c:5505
+#: diff.c:5508
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
@@ -2946,94 +2956,94 @@
 "se efter ändringar som ändrar antalet förekomster av angivet reguljärt "
 "uttryck"
 
-#: diff.c:5508
+#: diff.c:5511
 msgid "show all changes in the changeset with -S or -G"
 msgstr "visa alla ändringar i ändringsuppsättningen med -S eller -G"
 
-#: diff.c:5511
+#: diff.c:5514
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "tolka <sträng> i -S som utökade POSIX-reguljära uttryck"
 
-#: diff.c:5514
+#: diff.c:5517
 msgid "control the order in which files appear in the output"
 msgstr "styr ordningen i vilken filer visas i utdata"
 
-#: diff.c:5515
+#: diff.c:5518
 msgid "<object-id>"
 msgstr "<objekt-id>"
 
-#: diff.c:5516
+#: diff.c:5519
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
 msgstr "se efter ändringar som ändrar antalet förekomster av angivet objekt"
 
-#: diff.c:5518
+#: diff.c:5521
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5519
+#: diff.c:5522
 msgid "select files by diff type"
 msgstr "välj filter efter diff-typ"
 
-#: diff.c:5521
+#: diff.c:5524
 msgid "<file>"
 msgstr "<fil>"
 
-#: diff.c:5522
+#: diff.c:5525
 msgid "Output to a specific file"
 msgstr "Skriv utdata till en specifik fil"
 
-#: diff.c:6177
+#: diff.c:6180
 msgid "inexact rename detection was skipped due to too many files."
 msgstr ""
 "onöjaktig namnbytesdetektering utfördes inte på grund av för många filer."
 
-#: diff.c:6180
+#: diff.c:6183
 msgid "only found copies from modified paths due to too many files."
 msgstr "hittade bara kopior från ändrade sökvägar på grund av för många filer."
 
-#: diff.c:6183
+#: diff.c:6186
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
 msgstr ""
 "du kan sätta variabeln %s till åtminstone %d och försöka kommandot på nytt."
 
-#: dir.c:537
+#: dir.c:549
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
 msgstr "sökvägsangivelsen \"%s\" motsvarade inte några av git kända filer"
 
-#: dir.c:926
+#: dir.c:938
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr "kan inte använda %s som exkluderingsfil"
 
-#: dir.c:1843
+#: dir.c:1877
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "kunde inte öppna katalogen \"%s\""
 
-#: dir.c:2085
+#: dir.c:2128
 msgid "failed to get kernel name and information"
 msgstr "misslyckades hämta kärnans namn och information"
 
-#: dir.c:2209
+#: dir.c:2252
 msgid "untracked cache is disabled on this system or location"
 msgstr "ospårad cache är inaktiverad på systemet eller platsen"
 
-#: dir.c:3013
+#: dir.c:3056
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "indexfilen trasig i arkivet %s"
 
-#: dir.c:3058 dir.c:3063
+#: dir.c:3101 dir.c:3106
 #, c-format
 msgid "could not create directories for %s"
 msgstr "kunde inte skapa kataloger för %s"
 
-#: dir.c:3092
+#: dir.c:3135
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "kunde inte migrera git-katalog från \"%s\" till \"%s\""
@@ -3052,12 +3062,12 @@
 msgid "could not stat file '%s'"
 msgstr "kunde inte ta status på filen \"%s\""
 
-#: environment.c:150
+#: environment.c:148
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "felaktig git-namnrymdssökväg \"%s\""
 
-#: environment.c:332
+#: environment.c:330
 #, c-format
 msgid "could not set GIT_DIR to '%s'"
 msgstr "kunde inte ställa in GIT_DIR till \"%s\""
@@ -3067,158 +3077,154 @@
 msgid "too many args to run %s"
 msgstr "för många flaggor för att köra %s"
 
-#: fetch-object.c:17
-msgid "Remote with no URL"
-msgstr "Fjärr utan URL"
-
-#: fetch-pack.c:151
+#: fetch-pack.c:150
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack: förväntade grund lista"
 
-#: fetch-pack.c:154
+#: fetch-pack.c:153
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr "git fetch-pack: förväntade ett flush-paket efter grund lista"
 
-#: fetch-pack.c:165
+#: fetch-pack.c:164
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr "git fetch-pack: förväntade ACK/NAK, fick flush-paket"
 
-#: fetch-pack.c:185
+#: fetch-pack.c:184
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr "git fetch-pack: förväntade ACK/NAK, fick \"%s\""
 
-#: fetch-pack.c:196
+#: fetch-pack.c:195
 msgid "unable to write to remote"
 msgstr "kunde inte skriva till fjärren"
 
-#: fetch-pack.c:258
+#: fetch-pack.c:257
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "--stateless-rpc kräver \"multi_ack_detailed\""
 
-#: fetch-pack.c:360 fetch-pack.c:1284
+#: fetch-pack.c:356 fetch-pack.c:1280
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "ogiltig \"shallow\"-rad: %s"
 
-#: fetch-pack.c:366 fetch-pack.c:1290
+#: fetch-pack.c:362 fetch-pack.c:1286
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "ogiltig \"unshallow\"-rad: %s"
 
-#: fetch-pack.c:368 fetch-pack.c:1292
+#: fetch-pack.c:364 fetch-pack.c:1288
 #, c-format
 msgid "object not found: %s"
 msgstr "objektet hittades inte: %s"
 
-#: fetch-pack.c:371 fetch-pack.c:1295
+#: fetch-pack.c:367 fetch-pack.c:1291
 #, c-format
 msgid "error in object: %s"
 msgstr "fel i objekt: %s"
 
-#: fetch-pack.c:373 fetch-pack.c:1297
+#: fetch-pack.c:369 fetch-pack.c:1293
 #, c-format
 msgid "no shallow found: %s"
 msgstr "ingen \"shallow\" hittades: %s"
 
-#: fetch-pack.c:376 fetch-pack.c:1301
+#: fetch-pack.c:372 fetch-pack.c:1297
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "förväntade shallow/unshallow, fick %s"
 
-#: fetch-pack.c:417
+#: fetch-pack.c:414
 #, c-format
 msgid "got %s %d %s"
 msgstr "fick %s %d %s"
 
-#: fetch-pack.c:434
+#: fetch-pack.c:431
 #, c-format
 msgid "invalid commit %s"
 msgstr "ogiltig incheckning %s"
 
-#: fetch-pack.c:465
+#: fetch-pack.c:462
 msgid "giving up"
 msgstr "ger upp"
 
-#: fetch-pack.c:477 progress.c:277
+#: fetch-pack.c:475 progress.c:312
 msgid "done"
 msgstr "klart"
 
-#: fetch-pack.c:489
+#: fetch-pack.c:487
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "fick %s (%d) %s"
 
-#: fetch-pack.c:535
+#: fetch-pack.c:533
 #, c-format
 msgid "Marking %s as complete"
 msgstr "Markerar %s som komplett"
 
-#: fetch-pack.c:744
+#: fetch-pack.c:742
 #, c-format
 msgid "already have %s (%s)"
 msgstr "har redan %s (%s)"
 
-#: fetch-pack.c:783
+#: fetch-pack.c:781
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-patch: kunde inte grena av sidbandsmultiplexare"
 
-#: fetch-pack.c:791
+#: fetch-pack.c:789
 msgid "protocol error: bad pack header"
 msgstr "protokollfel: felaktigt packhuvud"
 
-#: fetch-pack.c:859
+#: fetch-pack.c:857
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-patch: kunde inte grena av %s"
 
-#: fetch-pack.c:875
+#: fetch-pack.c:873
 #, c-format
 msgid "%s failed"
 msgstr "%s misslyckades"
 
-#: fetch-pack.c:877
+#: fetch-pack.c:875
 msgid "error in sideband demultiplexer"
 msgstr "fel i sidbands-avmultiplexare"
 
-#: fetch-pack.c:908
+#: fetch-pack.c:907
 #, c-format
 msgid "Server version is %.*s"
 msgstr "Serverversionen är %.*s"
 
-#: fetch-pack.c:913 fetch-pack.c:919 fetch-pack.c:922 fetch-pack.c:928
-#: fetch-pack.c:932 fetch-pack.c:936 fetch-pack.c:940 fetch-pack.c:944
-#: fetch-pack.c:948 fetch-pack.c:952 fetch-pack.c:956 fetch-pack.c:960
-#: fetch-pack.c:966 fetch-pack.c:972 fetch-pack.c:977 fetch-pack.c:982
+#: fetch-pack.c:912 fetch-pack.c:918 fetch-pack.c:921 fetch-pack.c:927
+#: fetch-pack.c:931 fetch-pack.c:935 fetch-pack.c:939 fetch-pack.c:943
+#: fetch-pack.c:947 fetch-pack.c:951 fetch-pack.c:955 fetch-pack.c:959
+#: fetch-pack.c:965 fetch-pack.c:971 fetch-pack.c:976 fetch-pack.c:981
 #, c-format
 msgid "Server supports %s"
 msgstr "Servern stöder %s"
 
-#: fetch-pack.c:915
+#: fetch-pack.c:914
 msgid "Server does not support shallow clients"
 msgstr "Servern stöder inte klienter med grunda arkiv"
 
-#: fetch-pack.c:975
+#: fetch-pack.c:974
 msgid "Server does not support --shallow-since"
 msgstr "Servern stöder inte --shallow-since"
 
-#: fetch-pack.c:980
+#: fetch-pack.c:979
 msgid "Server does not support --shallow-exclude"
 msgstr "Servern stöder inte --shallow-exclude"
 
-#: fetch-pack.c:984
+#: fetch-pack.c:983
 msgid "Server does not support --deepen"
 msgstr "Servern stöder inte --deepen"
 
-#: fetch-pack.c:1001
+#: fetch-pack.c:1000
 msgid "no common commits"
 msgstr "inga gemensamma incheckningar"
 
-#: fetch-pack.c:1013 fetch-pack.c:1462
+#: fetch-pack.c:1012 fetch-pack.c:1468
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-patch: hämtning misslyckades."
 
-#: fetch-pack.c:1151
+#: fetch-pack.c:1150
 msgid "Server does not support shallow requests"
 msgstr "Servern stöder inte grunda förfrågningar"
 
@@ -3226,73 +3232,73 @@
 msgid "Server supports filter"
 msgstr "Servern stöder filter"
 
-#: fetch-pack.c:1184
+#: fetch-pack.c:1180
 msgid "unable to write request to remote"
 msgstr "kunde inte skriva anrop till fjärren"
 
-#: fetch-pack.c:1202
+#: fetch-pack.c:1198
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "fel vid läsning av styckehuvudet \"%s\""
 
-#: fetch-pack.c:1208
+#: fetch-pack.c:1204
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "förväntade \"%s\", tog emot \"%s\""
 
-#: fetch-pack.c:1247
+#: fetch-pack.c:1243
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "förväntade bekräftelserad: \"%s\""
 
-#: fetch-pack.c:1252
+#: fetch-pack.c:1248
 #, c-format
 msgid "error processing acks: %d"
 msgstr "fel vid hantering av bekräftelser: %d"
 
-#: fetch-pack.c:1262
+#: fetch-pack.c:1258
 msgid "expected packfile to be sent after 'ready'"
 msgstr "väntade att paketfil skulle sändas efter \"ready\""
 
-#: fetch-pack.c:1264
+#: fetch-pack.c:1260
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr ""
 "väntade inte att några ytterligare sektioner skulle sändas efter \"ready\""
 
-#: fetch-pack.c:1306
+#: fetch-pack.c:1302
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "fel vid hantering av grund (\"shallow\") info: %d"
 
-#: fetch-pack.c:1353
+#: fetch-pack.c:1349
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "förväntade wanted-ref, fick %s"
 
-#: fetch-pack.c:1358
+#: fetch-pack.c:1354
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "oväntad wanted-ref: \"%s\""
 
-#: fetch-pack.c:1363
+#: fetch-pack.c:1359
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "fel vid hantering av önskade referenser: %d"
 
-#: fetch-pack.c:1689
+#: fetch-pack.c:1693
 msgid "no matching remote head"
 msgstr "inget motsvarande fjärrhuvud"
 
-#: fetch-pack.c:1712 builtin/clone.c:686
+#: fetch-pack.c:1716 builtin/clone.c:685
 msgid "remote did not send all necessary objects"
 msgstr "fjärren sände inte alla nödvändiga objekt"
 
-#: fetch-pack.c:1739
+#: fetch-pack.c:1743
 #, c-format
 msgid "no such remote ref %s"
 msgstr "ingen sådan fjärreferens: %s"
 
-#: fetch-pack.c:1742
+#: fetch-pack.c:1746
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "Servern tillåter inte förfrågan om ej tillkännagivet objekt %s"
@@ -3315,18 +3321,26 @@
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr "ignorera felaktig färg \"%.*s\" i log.graphColors"
 
-#: grep.c:2117
+#: grep.c:668
+msgid ""
+"given pattern contains NULL byte (via -f <file>). This is only supported "
+"with -P under PCRE v2"
+msgstr ""
+"angivet mönster innehåller NULL-byte (via -f <fil>). Detta stöds endast med -"
+"P under PCRE v2"
+
+#: grep.c:2124
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "\"%s\" kunde inte läsa %s"
 
-#: grep.c:2134 setup.c:164 builtin/clone.c:409 builtin/diff.c:82
+#: grep.c:2141 setup.c:165 builtin/clone.c:408 builtin/diff.c:82
 #: builtin/rm.c:135
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "misslyckades ta status på \"%s\""
 
-#: grep.c:2145
+#: grep.c:2152
 #, c-format
 msgid "'%s': short read"
 msgstr "\"%s\": kort läsning"
@@ -3469,12 +3483,12 @@
 msgid "git version [<options>]"
 msgstr "git version [<flaggor>]"
 
-#: help.c:782
+#: help.c:783
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s: %s - %s"
 
-#: help.c:786
+#: help.c:787
 msgid ""
 "\n"
 "Did you mean this?"
@@ -3547,41 +3561,56 @@
 msgid "invalid date format: %s"
 msgstr "felaktigt datumformat: %s"
 
-#: list-objects.c:129
+#: list-objects.c:127
 #, c-format
 msgid "entry '%s' in tree %s has tree mode, but is not a tree"
 msgstr "posten \"%s\" i trädet %s har träd-läge, men är inte ett träd"
 
-#: list-objects.c:142
+#: list-objects.c:140
 #, c-format
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr "posten \"%s\" i trädet %s har blob-läge, men är inte en blob"
 
-#: list-objects.c:378
+#: list-objects.c:375
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "kunde inte läsa in rot-trädet för incheckningen %s"
 
-#: list-objects-filter-options.c:36
-msgid "multiple filter-specs cannot be combined"
-msgstr "flera filterspecifikationer kan inte kombineras"
+#: list-objects-filter.c:492
+#, c-format
+msgid "unable to access sparse blob in '%s'"
+msgstr "kunde inte nå gles blob på \"%s\""
+
+#: list-objects-filter.c:495
+#, c-format
+msgid "unable to parse sparse filter data in %s"
+msgstr "kunde inte tolka gles filterdata i %s"
 
 #: list-objects-filter-options.c:58
 msgid "expected 'tree:<depth>'"
 msgstr "förväntade \"tree:<djup>\""
 
-#: list-objects-filter-options.c:84
+#: list-objects-filter-options.c:73
 msgid "sparse:path filters support has been dropped"
 msgstr "sparse:sökväg-filter stöds inte längre"
 
-#: list-objects-filter-options.c:94
+#: list-objects-filter-options.c:86
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "felaktig filterspecifikation: \"%s\""
 
-#: list-objects-filter-options.c:158
-msgid "cannot change partial clone promisor remote"
-msgstr "kan inte ändra kontraktsfjärr för delvis kloning"
+#: list-objects-filter-options.c:102
+#, c-format
+msgid "must escape char in sub-filter-spec: '%c'"
+msgstr "måste använda specialsekvens i delfilter-spec: \"%c\""
+
+#: list-objects-filter-options.c:144
+msgid "expected something after combine:"
+msgstr "förväntade någonting efter combine:"
+
+#: list-objects-filter-options.c:226
+msgid "multiple filter-specs cannot be combined"
+msgstr "flera filterspecifikationer kan inte kombineras"
 
 #: lockfile.c:151
 #, c-format
@@ -3612,121 +3641,117 @@
 msgid "failed to read the cache"
 msgstr "misslyckades läsa cachen"
 
-#: merge.c:107 rerere.c:720 builtin/am.c:1885 builtin/am.c:1919
-#: builtin/checkout.c:536 builtin/checkout.c:796 builtin/clone.c:786
+#: merge.c:107 rerere.c:720 builtin/am.c:1874 builtin/am.c:1908
+#: builtin/checkout.c:537 builtin/checkout.c:796 builtin/clone.c:785
 #: builtin/stash.c:264
 msgid "unable to write new index file"
 msgstr "kunde inte skriva ny indexfil"
 
-#: merge-recursive.c:322
+#: merge-recursive.c:367
 msgid "(bad commit)\n"
 msgstr "(felaktig incheckning)\n"
 
-#: merge-recursive.c:345
+#: merge-recursive.c:390
 #, c-format
 msgid "add_cacheinfo failed for path '%s'; merge aborting."
 msgstr ""
 "add_cahceinfo misslyckades för sökvägen \"%s\"; avslutar sammanslagningen."
 
-#: merge-recursive.c:354
+#: merge-recursive.c:399
 #, c-format
 msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
 msgstr ""
 "add_cacheinfo misslyckades uppdatera för sökvägen \"%s\"; avslutar "
 "sammanslagningen."
 
-#: merge-recursive.c:437
-msgid "error building trees"
-msgstr "fel vid byggande av träd"
-
-#: merge-recursive.c:863
+#: merge-recursive.c:885
 #, c-format
 msgid "failed to create path '%s'%s"
 msgstr "misslyckades skapa sökvägen \"%s\"%s"
 
-#: merge-recursive.c:874
+#: merge-recursive.c:896
 #, c-format
 msgid "Removing %s to make room for subdirectory\n"
 msgstr "Tar bort %s för att göra plats för underkatalog\n"
 
-#: merge-recursive.c:888 merge-recursive.c:907
+#: merge-recursive.c:910 merge-recursive.c:929
 msgid ": perhaps a D/F conflict?"
 msgstr ": kanske en K/F-konflikt?"
 
-#: merge-recursive.c:897
+#: merge-recursive.c:919
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
 msgstr "vägrar förlora ospårad fil vid \"%s\""
 
-#: merge-recursive.c:938 builtin/cat-file.c:40
+#: merge-recursive.c:960 builtin/cat-file.c:41
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "kan inte läsa objektet %s: \"%s\""
 
-#: merge-recursive.c:941
+#: merge-recursive.c:965
 #, c-format
 msgid "blob expected for %s '%s'"
 msgstr "blob förväntades för %s \"%s\""
 
-#: merge-recursive.c:965
+#: merge-recursive.c:990
 #, c-format
 msgid "failed to open '%s': %s"
 msgstr "misslyckades öppna \"%s\": %s"
 
-#: merge-recursive.c:976
+#: merge-recursive.c:1001
 #, c-format
 msgid "failed to symlink '%s': %s"
 msgstr "misslyckades skapa symboliska länken \"%s\": %s"
 
-#: merge-recursive.c:981
+#: merge-recursive.c:1006
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "vet inte hur %06o %s \"%s\" skall hanteras"
 
-#: merge-recursive.c:1177
+#: merge-recursive.c:1199
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "Misslyckades slå ihop undermodulen %s (ej utcheckad)"
 
-#: merge-recursive.c:1184
+#: merge-recursive.c:1206
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr "Misslyckades slå ihop undermodulen %s (incheckningar saknas)"
 
-#: merge-recursive.c:1191
+#: merge-recursive.c:1213
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr ""
 "Misslyckades slå ihop undermodulen %s (incheckningar följer inte "
 "sammanslagningsbasen)"
 
-#: merge-recursive.c:1199 merge-recursive.c:1211
+#: merge-recursive.c:1221 merge-recursive.c:1233
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "Snabbspolar undermodulen %s till följande incheckning:"
 
-#: merge-recursive.c:1202 merge-recursive.c:1214
+#: merge-recursive.c:1224 merge-recursive.c:1236
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "Snabbspolar undermodulen %s"
 
-#: merge-recursive.c:1237
+#: merge-recursive.c:1259
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 "Misslyckades slå ihop undermodulen %s (sammanslagning efter incheckningar "
 "hittades inte)"
 
-#: merge-recursive.c:1241
+#: merge-recursive.c:1263
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "Misslyckades slå ihop undermodulen %s (ej snabbspolning)"
 
-#: merge-recursive.c:1242
+#: merge-recursive.c:1264
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr "Hittade en möjlig lösning av sammanslagning för undermodulen:\n"
 
-#: merge-recursive.c:1245
+#: merge-recursive.c:1267
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -3743,32 +3768,32 @@
 "\n"
 "vilket godtar lösningen.\n"
 
-#: merge-recursive.c:1254
+#: merge-recursive.c:1276
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr ""
 "Misslyckades slå ihop undermodulen %s (flera sammanslagningar hittades)"
 
-#: merge-recursive.c:1327
+#: merge-recursive.c:1349
 msgid "Failed to execute internal merge"
 msgstr "Misslyckades exekvera intern sammanslagning"
 
-#: merge-recursive.c:1332
+#: merge-recursive.c:1354
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "Kunde inte lägga till %s till databasen"
 
-#: merge-recursive.c:1364
+#: merge-recursive.c:1386
 #, c-format
 msgid "Auto-merging %s"
 msgstr "Slår ihop %s automatiskt"
 
-#: merge-recursive.c:1387
+#: merge-recursive.c:1410
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr "Fel: Vägrar förlora ospårad fil vid %s; skriver till %s istället."
 
-#: merge-recursive.c:1459
+#: merge-recursive.c:1482
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -3777,7 +3802,7 @@
 "KONFLIKT (%s/radera): %s raderad i %s och %s i %s. Versionen %s av %s lämnad "
 "i trädet."
 
-#: merge-recursive.c:1464
+#: merge-recursive.c:1487
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -3786,7 +3811,7 @@
 "KONFLIKT (%s/radera): %s raderad i %s och %s till %s i %s. Versionen %s av "
 "%s lämnad i trädet."
 
-#: merge-recursive.c:1471
+#: merge-recursive.c:1494
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -3795,7 +3820,7 @@
 "KONFLIKT (%s/radera): %s raderad i %s och %s i %s. Versionen %s av %s lämnad "
 "i trädet vid %s."
 
-#: merge-recursive.c:1476
+#: merge-recursive.c:1499
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -3804,40 +3829,40 @@
 "KONFLIKT (%s/radera): %s raderad i %s och %s till %s i %s. Versionen %s av "
 "%s lämnad i trädet vid %s."
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1534
 msgid "rename"
 msgstr "namnbyte"
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1534
 msgid "renamed"
 msgstr "namnbytt"
 
-#: merge-recursive.c:1591 merge-recursive.c:2450 merge-recursive.c:3093
+#: merge-recursive.c:1614 merge-recursive.c:2472 merge-recursive.c:3117
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "Vägrar förlora lortig fil vid \"%s\""
 
-#: merge-recursive.c:1601
+#: merge-recursive.c:1624
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr "Vägrar förlora ospårad fil vid %s, trots att den är i vägen."
 
-#: merge-recursive.c:1659
+#: merge-recursive.c:1682
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr "KONFLIKT (namnbyte/tillägg): Namnbyte %s->%s i %s. Lade till %s i %s"
 
-#: merge-recursive.c:1690
+#: merge-recursive.c:1713
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s är en katalog i %s lägger till som %s istället"
 
-#: merge-recursive.c:1695
+#: merge-recursive.c:1718
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr "Vägrar förlora ospårad fil vid %s; lägger till som %s istället"
 
-#: merge-recursive.c:1714
+#: merge-recursive.c:1737
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -3846,17 +3871,17 @@
 "KONFLIKT (namnbyte/namnbyte): Namnbyte \"%s\"->\"%s\" på grenen \"%s\" "
 "namnbyte \"%s\"->\"%s\" i \"%s\"%s"
 
-#: merge-recursive.c:1719
+#: merge-recursive.c:1742
 msgid " (left unresolved)"
 msgstr " (lämnad olöst)"
 
-#: merge-recursive.c:1828
+#: merge-recursive.c:1851
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "KONFLIKT (namnbyte/namnbyte): Namnbyte %s->%s i %s. Namnbyte %s->%s i %s"
 
-#: merge-recursive.c:2035
+#: merge-recursive.c:2056
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -3867,7 +3892,7 @@
 "katalogen %s bytte namn till flera andra kataloger, utan att någon "
 "destination fick en majoritet av filerna."
 
-#: merge-recursive.c:2067
+#: merge-recursive.c:2088
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -3876,7 +3901,7 @@
 "KONFLIKT (implicit nämnändrad kat): Befintlig fil/kat vid %s är i vägen för "
 "implicit namnändrad(e) katalog(er) som lägger dit följande sökväg(ar): %s."
 
-#: merge-recursive.c:2077
+#: merge-recursive.c:2098
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -3885,7 +3910,7 @@
 "KONFLIKT (implicit namnändrad kat): Kan inte koppla mer än en sökväg till "
 "%s; implicita katalognamnändringar försökte lägga följande sökvägar där: %s"
 
-#: merge-recursive.c:2169
+#: merge-recursive.c:2190
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -3894,7 +3919,7 @@
 "KONFLIKT (namnbyte/namnbyte): Namnbytt katalog %s->%s i %s. Namnbytt katalog "
 "%s->%s i %s"
 
-#: merge-recursive.c:2413
+#: merge-recursive.c:2435
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
@@ -3903,52 +3928,52 @@
 "VARNING: Undviker att applicera namnändring %s -> %s på %s, då %s själv har "
 "bytt namn."
 
-#: merge-recursive.c:2937
+#: merge-recursive.c:2961
 #, c-format
 msgid "cannot read object %s"
 msgstr "kan inte läsa objektet %s"
 
-#: merge-recursive.c:2940
+#: merge-recursive.c:2964
 #, c-format
 msgid "object %s is not a blob"
 msgstr "objektet %s är inte en blob"
 
-#: merge-recursive.c:3004
+#: merge-recursive.c:3028
 msgid "modify"
 msgstr "ändra"
 
-#: merge-recursive.c:3004
+#: merge-recursive.c:3028
 msgid "modified"
 msgstr "ändrad"
 
-#: merge-recursive.c:3016
+#: merge-recursive.c:3040
 msgid "content"
 msgstr "innehåll"
 
-#: merge-recursive.c:3020
+#: merge-recursive.c:3044
 msgid "add/add"
 msgstr "tillägg/tillägg"
 
-#: merge-recursive.c:3043
+#: merge-recursive.c:3067
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "Hoppade över %s (sammanslagen samma som befintlig)"
 
-#: merge-recursive.c:3065 git-submodule.sh:937
+#: merge-recursive.c:3089 git-submodule.sh:937
 msgid "submodule"
 msgstr "undermodul"
 
-#: merge-recursive.c:3066
+#: merge-recursive.c:3090
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "KONFLIKT (%s): Sammanslagningskonflikt i %s"
 
-#: merge-recursive.c:3096
+#: merge-recursive.c:3120
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Lägger till som %s istället"
 
-#: merge-recursive.c:3178
+#: merge-recursive.c:3203
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
@@ -3957,7 +3982,7 @@
 "Uppdaterad sökväg: %s lade till %s inuti en katalog som bytte namn i %s; "
 "flyttar den till %s."
 
-#: merge-recursive.c:3181
+#: merge-recursive.c:3206
 #, c-format
 msgid ""
 "CONFLICT (file location): %s added in %s inside a directory that was renamed "
@@ -3966,7 +3991,7 @@
 "KONFLIKT (filplacering): %s lade till %s inuti en katalog som bytte namn i "
 "%s, föreslår att den bör flyttas till%s."
 
-#: merge-recursive.c:3185
+#: merge-recursive.c:3210
 #, c-format
 msgid ""
 "Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
@@ -3975,7 +4000,7 @@
 "Uppdaterad sökväg: %s bytte namn till %s i %s, inuti en katalog som bytte "
 "namn i %s; flyttar den till %s."
 
-#: merge-recursive.c:3188
+#: merge-recursive.c:3213
 #, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
@@ -3984,36 +4009,60 @@
 "KONFLIKT (filplacering): %s bytte namn till %s i %s, inuti en katalog som "
 "bytte namn i %s; flyttar den till %s."
 
-#: merge-recursive.c:3302
+#: merge-recursive.c:3327
 #, c-format
 msgid "Removing %s"
 msgstr "Tar bort %s"
 
-#: merge-recursive.c:3325
+#: merge-recursive.c:3350
 msgid "file/directory"
 msgstr "fil/katalog"
 
-#: merge-recursive.c:3330
+#: merge-recursive.c:3355
 msgid "directory/file"
 msgstr "katalog/fil"
 
-#: merge-recursive.c:3337
+#: merge-recursive.c:3362
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
 "KONFLIKT (%s): Det finns en katalog med namnet %s i %s. Lägger till %s som %s"
 
-#: merge-recursive.c:3346
+#: merge-recursive.c:3371
 #, c-format
 msgid "Adding %s"
 msgstr "Lägger till %s"
 
-#: merge-recursive.c:3355
+#: merge-recursive.c:3380
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "KONFLIKT (tillägg/tillägg): Sammanslagningskonflikt i %s"
 
-#: merge-recursive.c:3393
+#: merge-recursive.c:3424
+msgid "Already up to date!"
+msgstr "Redan à jour!"
+
+#: merge-recursive.c:3433
+#, c-format
+msgid "merging of trees %s and %s failed"
+msgstr "sammanslagning av träden %s och %s misslyckades"
+
+#: merge-recursive.c:3537
+msgid "Merging:"
+msgstr "Slår ihop:"
+
+#: merge-recursive.c:3550
+#, c-format
+msgid "found %u common ancestor:"
+msgid_plural "found %u common ancestors:"
+msgstr[0] "hittade %u gemensam förfader:"
+msgstr[1] "hittade %u gemensamma förfäder:"
+
+#: merge-recursive.c:3600
+msgid "merge returned no commit"
+msgstr "sammanslagningen returnerade ingen incheckning"
+
+#: merge-recursive.c:3659
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -4023,188 +4072,164 @@
 "sammanslagning:\n"
 "  %s"
 
-#: merge-recursive.c:3404
-msgid "Already up to date!"
-msgstr "Redan à jour!"
-
-#: merge-recursive.c:3413
-#, c-format
-msgid "merging of trees %s and %s failed"
-msgstr "sammanslagning av träden %s och %s misslyckades"
-
-#: merge-recursive.c:3512
-msgid "Merging:"
-msgstr "Slår ihop:"
-
-#: merge-recursive.c:3525
-#, c-format
-msgid "found %u common ancestor:"
-msgid_plural "found %u common ancestors:"
-msgstr[0] "hittade %u gemensam förfader:"
-msgstr[1] "hittade %u gemensamma förfäder:"
-
-#: merge-recursive.c:3564
-msgid "merge returned no commit"
-msgstr "sammanslagningen returnerade ingen incheckning"
-
-#: merge-recursive.c:3630
+#: merge-recursive.c:3756
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "Kunde inte tolka objektet \"%s\""
 
-#: merge-recursive.c:3646 builtin/merge.c:698 builtin/merge.c:869
+#: merge-recursive.c:3774 builtin/merge.c:694 builtin/merge.c:874
 msgid "Unable to write index."
 msgstr "Kunde inte skriva indexet."
 
-#: midx.c:69
+#: midx.c:68
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "multi-pack-indexfilen %s är för liten"
 
-#: midx.c:85
+#: midx.c:84
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr "multi-pack-indexsignaturen 0x%08x stämmer inte med signaturen 0x%08x"
 
-#: midx.c:90
+#: midx.c:89
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "multi-pack-indexversionen %d stöds inte"
 
-#: midx.c:95
+#: midx.c:94
 #, c-format
 msgid "hash version %u does not match"
 msgstr "hash-versionen %u stämmer inte"
 
-#: midx.c:109
+#: midx.c:108
 msgid "invalid chunk offset (too large)"
 msgstr "felaktigt offset för stycke (för stort)"
 
-#: midx.c:133
+#: midx.c:132
 msgid "terminating multi-pack-index chunk id appears earlier than expected"
-msgstr "avslutande multi-pack-index-stycke-ID förekommer tidigare än förväntat"
+msgstr "avslutande multi-pack-index-stycke-id förekommer tidigare än förväntat"
 
-#: midx.c:146
+#: midx.c:145
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "multi-pack-index saknar krävd paketnamn-stycke"
 
-#: midx.c:148
+#: midx.c:147
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "multi-pack-index saknar krävt OID-utbredningsstycke"
 
-#: midx.c:150
+#: midx.c:149
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "multi-pack-index saknar krävt OID-uppslagnignsstycke"
 
-#: midx.c:152
+#: midx.c:151
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "multi-pack-index saknar krävt objekt-offsetstycke"
 
-#: midx.c:166
+#: midx.c:165
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr "multi-pack-index-paketnamn i fel ordning: \"%s\" före \"%s\""
 
-#: midx.c:211
+#: midx.c:210
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "bad pack-int-id: %u (%u paket totalt)"
 
-#: midx.c:261
+#: midx.c:260
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr "multi-pack-index skriver 64-bitars offset, men off_t är för liten"
 
-#: midx.c:289
+#: midx.c:288
 msgid "error preparing packfile from multi-pack-index"
 msgstr "fel när paketfiler från multi-pack-index skulle förberedas"
 
-#: midx.c:470
+#: midx.c:469
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "misslyckades läsa paketfilen \"%s\""
 
-#: midx.c:476
+#: midx.c:475
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "misslyckades öppna paketindexet \"%s\""
 
-#: midx.c:536
+#: midx.c:535
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "misslyckades hitta objekt %d i paketfilen"
 
-#: midx.c:865
+#: midx.c:864
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "såg inte paketfilen %s som skulle kastas"
 
-#: midx.c:1036
+#: midx.c:1035
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "misslyckades städa multi-pack-index på %s"
 
-#: midx.c:1091
+#: midx.c:1090
 msgid "Looking for referenced packfiles"
 msgstr "Ser efter refererade packfiler"
 
-#: midx.c:1106
+#: midx.c:1105
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr ""
 "oid-utbredning i fel ordning: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 
-#: midx.c:1110
+#: midx.c:1109
 msgid "Verifying OID order in MIDX"
 msgstr "Bekräftar OID-ordning i MIDX"
 
-#: midx.c:1119
+#: midx.c:1118
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "oid-uppslagning i fel ordning: oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1138
+#: midx.c:1137
 msgid "Sorting objects by packfile"
 msgstr "Sorterar objekt efter packfil"
 
-#: midx.c:1144
+#: midx.c:1143
 msgid "Verifying object offsets"
 msgstr "Bekräftar offset för objekt"
 
-#: midx.c:1160
+#: midx.c:1159
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "misslyckades läsa paketpost för oid[%d] = %s"
 
-#: midx.c:1166
+#: midx.c:1165
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "misslyckades läsa paketindex för paketfil %s"
 
-#: midx.c:1175
+#: midx.c:1174
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "felaktigt objekt-offset för oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 
-#: midx.c:1350
+#: midx.c:1349
 msgid "could not start pack-objects"
 msgstr "kunde inte starta pack-objects"
 
-#: midx.c:1369
+#: midx.c:1368
 msgid "could not finish pack-objects"
 msgstr "kunde inte avsluta pack-objects"
 
-#: name-hash.c:532
+#: name-hash.c:537
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
 msgstr "misslyckades skapa lazy_dir-tråd: %s"
 
-#: name-hash.c:554
+#: name-hash.c:559
 #, c-format
 msgid "unable to create lazy_name thread: %s"
 msgstr "misslyckades skapa lazy_name-tråd: %s"
 
-#: name-hash.c:560
+#: name-hash.c:565
 #, c-format
 msgid "unable to join lazy_name thread: %s"
 msgstr "misslyckades utföra join på lazy_name-tråd: %s"
@@ -4249,41 +4274,41 @@
 msgid "Bad %s value: '%s'"
 msgstr "Felaktigt värde på %s: \"%s\""
 
-#: object.c:54
+#: object.c:53
 #, c-format
 msgid "invalid object type \"%s\""
 msgstr "ogiltig objekttyp \"%s\""
 
-#: object.c:174
+#: object.c:173
 #, c-format
 msgid "object %s is a %s, not a %s"
 msgstr "objektet %s är en %s, inte en %s"
 
-#: object.c:234
+#: object.c:233
 #, c-format
 msgid "object %s has unknown type id %d"
 msgstr "objektet %s har okänd typ-id %d"
 
-#: object.c:247
+#: object.c:246
 #, c-format
 msgid "unable to parse object: %s"
 msgstr "kunde inte tolka objektet: %s"
 
-#: object.c:267 object.c:278
+#: object.c:266 object.c:277
 #, c-format
 msgid "hash mismatch %s"
 msgstr "hashvärde stämmer inte överens %s"
 
-#: packfile.c:648
+#: packfile.c:641
 msgid "offset before end of packfile (broken .idx?)"
 msgstr "offset före slutet av packfilen (trasig .idx?)"
 
-#: packfile.c:1899
+#: packfile.c:1887
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr "offset före slutet av packindex för %s (trasigt index?)"
 
-#: packfile.c:1903
+#: packfile.c:1891
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr "offset borton slutet av packindex för %s (trunkerat index?)"
@@ -4328,26 +4353,26 @@
 msgid "did you mean `--%s` (with two dashes ?)"
 msgstr "menade du \"--%s\" (med två bindestreck?)"
 
-#: parse-options.c:859
+#: parse-options.c:860
 #, c-format
 msgid "unknown option `%s'"
 msgstr "okänd flagga \"%s\""
 
-#: parse-options.c:861
+#: parse-options.c:862
 #, c-format
 msgid "unknown switch `%c'"
 msgstr "okänd flagga \"%c\""
 
-#: parse-options.c:863
+#: parse-options.c:864
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr "okänd icke-ascii-flagga i strängen: \"%s\""
 
-#: parse-options.c:887
+#: parse-options.c:888
 msgid "..."
 msgstr "..."
 
-#: parse-options.c:906
+#: parse-options.c:907
 #, c-format
 msgid "usage: %s"
 msgstr "användning: %s"
@@ -4355,21 +4380,21 @@
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
 #.
-#: parse-options.c:912
+#: parse-options.c:913
 #, c-format
 msgid "   or: %s"
 msgstr "     eller: %s"
 
-#: parse-options.c:915
+#: parse-options.c:916
 #, c-format
 msgid "    %s"
 msgstr "    %s"
 
-#: parse-options.c:954
+#: parse-options.c:955
 msgid "-NUM"
 msgstr "-TAL"
 
-#: parse-options.c:968
+#: parse-options.c:969
 #, c-format
 msgid "alias of --%s"
 msgstr "alias för --%s"
@@ -4538,29 +4563,38 @@
 msgid "unable to parse --pretty format"
 msgstr "kunde inte tolka format för --pretty"
 
-#: range-diff.c:70
+#: promisor-remote.c:25
+msgid "Remote with no URL"
+msgstr "Fjärr utan URL"
+
+#: promisor-remote.c:61
+#, c-format
+msgid "promisor remote name cannot begin with '/': %s"
+msgstr "kontraktsfjärr kan inte börja med \"/\": %s"
+
+#: range-diff.c:71
 msgid "could not start `log`"
 msgstr "kunde inte starta \"log\""
 
-#: range-diff.c:72
+#: range-diff.c:73
 msgid "could not read `log` output"
 msgstr "kunde inte läsa utdata från \"log\""
 
-#: range-diff.c:91 sequencer.c:5021
+#: range-diff.c:92 sequencer.c:4985
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "kunde inte tolka incheckningen \"%s\""
 
-#: range-diff.c:117
+#: range-diff.c:118
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "kunde inte tolka git-huvudet \"%.*s\""
 
-#: range-diff.c:274
+#: range-diff.c:275
 msgid "failed to generate diff"
 msgstr "misslyckades skapa diff"
 
-#: range-diff.c:506 range-diff.c:508
+#: range-diff.c:507 range-diff.c:509
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "kunde inte tolka loggen för \"%s\""
@@ -4605,11 +4639,11 @@
 msgid "'%s' appears as both a file and as a directory"
 msgstr "\"%s\" finns både som en fil och en katalog"
 
-#: read-cache.c:1499
+#: read-cache.c:1520
 msgid "Refresh index"
 msgstr "Uppdatera indexet"
 
-#: read-cache.c:1613
+#: read-cache.c:1635
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -4618,7 +4652,7 @@
 "index.version satt, men värdet är ogiltigt.\n"
 "Använder version %i"
 
-#: read-cache.c:1623
+#: read-cache.c:1645
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -4627,138 +4661,138 @@
 "GIT_INDEX_VERSION satt, men värdet är ogiltigt.\n"
 "Använder version %i"
 
-#: read-cache.c:1679
+#: read-cache.c:1701
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "felaktig signatur 0x%08x"
 
-#: read-cache.c:1682
+#: read-cache.c:1704
 #, c-format
 msgid "bad index version %d"
 msgstr "felaktig indexversion %d"
 
-#: read-cache.c:1691
+#: read-cache.c:1713
 msgid "bad index file sha1 signature"
 msgstr "felaktig sha1-signatur för indexfil"
 
-#: read-cache.c:1721
+#: read-cache.c:1743
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "index använder filtillägget %.4s, vilket vi inte förstår"
 
-#: read-cache.c:1723
+#: read-cache.c:1745
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "ignorerar filtillägget %.4s"
 
-#: read-cache.c:1760
+#: read-cache.c:1782
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "okänt format 0x%08x på indexpost"
 
-#: read-cache.c:1776
+#: read-cache.c:1798
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "felformat namnfält i indexet, nära sökvägen \"%s\""
 
-#: read-cache.c:1833
+#: read-cache.c:1855
 msgid "unordered stage entries in index"
 msgstr "osorterade köposter i index"
 
-#: read-cache.c:1836
+#: read-cache.c:1858
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "flera köposter för den sammanslagna filen \"%s\""
 
-#: read-cache.c:1839
+#: read-cache.c:1861
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "osorterade köposter för \"%s\""
 
-#: read-cache.c:1946 read-cache.c:2234 rerere.c:565 rerere.c:599 rerere.c:1111
-#: builtin/add.c:460 builtin/check-ignore.c:178 builtin/checkout.c:467
-#: builtin/checkout.c:651 builtin/clean.c:956 builtin/commit.c:347
+#: read-cache.c:1967 read-cache.c:2255 rerere.c:565 rerere.c:599 rerere.c:1111
+#: builtin/add.c:460 builtin/check-ignore.c:178 builtin/checkout.c:468
+#: builtin/checkout.c:652 builtin/clean.c:967 builtin/commit.c:347
 #: builtin/diff-tree.c:120 builtin/grep.c:499 builtin/mv.c:145
 #: builtin/reset.c:245 builtin/rm.c:271 builtin/submodule--helper.c:330
 msgid "index file corrupt"
 msgstr "indexfilen trasig"
 
-#: read-cache.c:2087
+#: read-cache.c:2108
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "kunde inte läsa in cache_entries-tråden: %s"
 
-#: read-cache.c:2100
+#: read-cache.c:2121
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "kunde inte utföra join på cache_entries-tråden: %s"
 
-#: read-cache.c:2133
+#: read-cache.c:2154
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s: öppning av indexfilen misslyckades"
 
-#: read-cache.c:2137
+#: read-cache.c:2158
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s: kan inte ta startus på det öppna indexet"
 
-#: read-cache.c:2141
+#: read-cache.c:2162
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s: indexfilen mindre än förväntat"
 
-#: read-cache.c:2145
+#: read-cache.c:2166
 #, c-format
 msgid "%s: unable to map index file"
 msgstr "%s: kan inte koppla indexfilen"
 
-#: read-cache.c:2187
+#: read-cache.c:2208
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "kunde inte skapa load_index_extensions-tråden: %s"
 
-#: read-cache.c:2214
+#: read-cache.c:2235
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "kunde inte utföra join på load_index_extensions-tråden: %s"
 
-#: read-cache.c:2246
+#: read-cache.c:2267
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "kunde inte uppdatera delat index \"%s\""
 
-#: read-cache.c:2293
+#: read-cache.c:2314
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "trasigt index, förväntade %s i %s, fick %s"
 
-#: read-cache.c:2989 wrapper.c:658 builtin/merge.c:1114
+#: read-cache.c:3010 wrapper.c:622 builtin/merge.c:1119
 #, c-format
 msgid "could not close '%s'"
 msgstr "kunde inte stänga \"%s\""
 
-#: read-cache.c:3092 sequencer.c:2358 sequencer.c:3928
+#: read-cache.c:3113 sequencer.c:2296 sequencer.c:3917
 #, c-format
 msgid "could not stat '%s'"
 msgstr "kunde inte ta status på \"%s\""
 
-#: read-cache.c:3105
+#: read-cache.c:3126
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "kunde inte öppna git-katalog: %s"
 
-#: read-cache.c:3117
+#: read-cache.c:3138
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "misslyckades ta bort länken: %s"
 
-#: read-cache.c:3142
+#: read-cache.c:3163
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "kan inte rätta behörighetsbitar på \"%s\""
 
-#: read-cache.c:3291
+#: read-cache.c:3312
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s: kan inte återgå till kö 0"
@@ -4866,8 +4900,8 @@
 msgid "Note that empty commits are commented out"
 msgstr "Observera att tomma incheckningar är utkommenterade"
 
-#: rebase-interactive.c:105 rerere.c:485 rerere.c:692 sequencer.c:3447
-#: sequencer.c:3473 sequencer.c:5120 builtin/fsck.c:356 builtin/rebase.c:235
+#: rebase-interactive.c:105 rerere.c:485 rerere.c:692 sequencer.c:3388
+#: sequencer.c:3414 sequencer.c:5084 builtin/fsck.c:356 builtin/rebase.c:235
 #, c-format
 msgid "could not write '%s'"
 msgstr "kunde inte skriva \"%s\""
@@ -4916,7 +4950,7 @@
 msgid "ignoring dangling symref %s"
 msgstr "ignorerar dinglande symbolisk referens %s"
 
-#: refs.c:669 ref-filter.c:2092
+#: refs.c:669 ref-filter.c:2098
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "ignorerar trasig referens %s"
@@ -4941,14 +4975,14 @@
 msgid "unexpected object ID when writing '%s'"
 msgstr "oväntat objekt-id vid skrivning \"%s\""
 
-#: refs.c:833 sequencer.c:403 sequencer.c:2709 sequencer.c:2913
-#: sequencer.c:2927 sequencer.c:3184 sequencer.c:5037 wrapper.c:656
+#: refs.c:833 sequencer.c:403 sequencer.c:2647 sequencer.c:2851
+#: sequencer.c:2865 sequencer.c:3122 sequencer.c:5001 wrapper.c:620
 #, c-format
 msgid "could not write to '%s'"
 msgstr "kunde inte skriva till \"%s\""
 
-#: refs.c:860 wrapper.c:225 wrapper.c:395 builtin/am.c:715
-#: builtin/rebase.c:1003
+#: refs.c:860 wrapper.c:188 wrapper.c:358 builtin/am.c:714
+#: builtin/rebase.c:1004
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "kunde inte öppna \"%s\" för skrivning"
@@ -4983,21 +5017,21 @@
 msgid "update_ref failed for ref '%s': %s"
 msgstr "update_ref misslyckades för referensen \"%s\": %s"
 
-#: refs.c:2012
+#: refs.c:2023
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "flera uppdateringar för referensen \"%s\" tillåts inte"
 
-#: refs.c:2044
+#: refs.c:2055
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "referensuppdateringar förbjudna i karantänmiljö"
 
-#: refs.c:2140 refs.c:2170
+#: refs.c:2151 refs.c:2181
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "\"%s\" finns; kan inte skapa \"%s\""
 
-#: refs.c:2146 refs.c:2181
+#: refs.c:2157 refs.c:2192
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "kan inte hantera \"%s\" och \"%s\" samtidigt"
@@ -5007,13 +5041,13 @@
 msgid "could not remove reference %s"
 msgstr "kunde inte ta bort referensen %s"
 
-#: refs/files-backend.c:1248 refs/packed-backend.c:1532
-#: refs/packed-backend.c:1542
+#: refs/files-backend.c:1248 refs/packed-backend.c:1541
+#: refs/packed-backend.c:1551
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr "kunde inte ta bort referensen %s: %s"
 
-#: refs/files-backend.c:1251 refs/packed-backend.c:1545
+#: refs/files-backend.c:1251 refs/packed-backend.c:1554
 #, c-format
 msgid "could not delete references: %s"
 msgstr "kunde inte ta bort referenser: %s"
@@ -5023,7 +5057,7 @@
 msgid "invalid refspec '%s'"
 msgstr "felaktig referensspecifikation: \"%s\""
 
-#: ref-filter.c:42 wt-status.c:1934
+#: ref-filter.c:42 wt-status.c:1938
 msgid "gone"
 msgstr "försvunnen"
 
@@ -5042,281 +5076,281 @@
 msgid "ahead %d, behind %d"
 msgstr "före %d, bakom %d"
 
-#: ref-filter.c:162
+#: ref-filter.c:165
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr "förväntat format: %%(color:<color>)"
 
-#: ref-filter.c:164
+#: ref-filter.c:167
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr "okänd färg: %%(color:%s)"
 
-#: ref-filter.c:186
+#: ref-filter.c:189
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr "Heltalsvärde förväntades refname:lstrip=%s"
 
-#: ref-filter.c:190
+#: ref-filter.c:193
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr "Heltalsvärde förväntades refname:rstrip=%s"
 
-#: ref-filter.c:192
+#: ref-filter.c:195
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr "okänt %%(%s)-argument: %s"
 
-#: ref-filter.c:247
+#: ref-filter.c:250
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr "%%(objecttype) tar inte argument"
 
-#: ref-filter.c:269
+#: ref-filter.c:272
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr "okänt %%(objectsize)-argument: %s"
 
-#: ref-filter.c:277
+#: ref-filter.c:280
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr "%%(deltabase) tar inte argument"
 
-#: ref-filter.c:289
+#: ref-filter.c:292
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr "%%(body) tar inte argument"
 
-#: ref-filter.c:298
+#: ref-filter.c:301
 #, c-format
 msgid "%%(subject) does not take arguments"
 msgstr "%%(subject) tar inte argument"
 
-#: ref-filter.c:320
+#: ref-filter.c:323
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr "okänt %%(trailers)-argument: %s"
 
-#: ref-filter.c:349
+#: ref-filter.c:352
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr "positivt värde förväntat contents:lines=%s"
 
-#: ref-filter.c:351
+#: ref-filter.c:354
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr "okänt %%(contents)-argument: %s"
 
-#: ref-filter.c:366
+#: ref-filter.c:369
 #, c-format
 msgid "positive value expected objectname:short=%s"
 msgstr "positivt värde förväntat objectname:short=%s"
 
-#: ref-filter.c:370
+#: ref-filter.c:373
 #, c-format
 msgid "unrecognized %%(objectname) argument: %s"
 msgstr "okänt %%(objectname)-argument: %s"
 
-#: ref-filter.c:400
+#: ref-filter.c:403
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr "förväntat format: %%(align:<bredd>,<position>)"
 
-#: ref-filter.c:412
+#: ref-filter.c:415
 #, c-format
 msgid "unrecognized position:%s"
 msgstr "okänd position:%s"
 
-#: ref-filter.c:419
+#: ref-filter.c:422
 #, c-format
 msgid "unrecognized width:%s"
 msgstr "okänd bredd:%s"
 
-#: ref-filter.c:428
+#: ref-filter.c:431
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr "okänt %%(align)-argument: %s"
 
-#: ref-filter.c:436
+#: ref-filter.c:439
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr "positiv bredd förväntad med atomen %%(align)"
 
-#: ref-filter.c:454
+#: ref-filter.c:457
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr "okänt %%(if)-argument: %s"
 
-#: ref-filter.c:556
+#: ref-filter.c:559
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "felformat fältnamn: %.*s"
 
-#: ref-filter.c:583
+#: ref-filter.c:586
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "okänt fältnamn: %.*s"
 
-#: ref-filter.c:587
+#: ref-filter.c:590
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
 msgstr ""
 "inte ett git-arkiv, men fältet \"%.*s\" kräver tillgång till objektdata"
 
-#: ref-filter.c:711
+#: ref-filter.c:714
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr "format: atomen %%(if) använd utan en %%(then)-atom"
 
-#: ref-filter.c:774
+#: ref-filter.c:777
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr "format: atomen %%(then) använd utan en %%(if)-atom"
 
-#: ref-filter.c:776
+#: ref-filter.c:779
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr "format: atomen %%(then) använd mer än en gång"
 
-#: ref-filter.c:778
+#: ref-filter.c:781
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "format: atomen %%(then) använd efter %%(else)"
 
-#: ref-filter.c:806
+#: ref-filter.c:809
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr "format: atomen %%(else) använd utan en %%(if)-atom"
 
-#: ref-filter.c:808
+#: ref-filter.c:811
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr "format: atomen %%(else) använd utan en %%(then)-atom"
 
-#: ref-filter.c:810
+#: ref-filter.c:813
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr "format: atomen %%(else) använd mer än en gång"
 
-#: ref-filter.c:825
+#: ref-filter.c:828
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr "format: atomen %%(end) använd utan motsvarande atom"
 
-#: ref-filter.c:882
+#: ref-filter.c:885
 #, c-format
 msgid "malformed format string %s"
 msgstr "felformad formatsträng %s"
 
-#: ref-filter.c:1485
+#: ref-filter.c:1488
 #, c-format
 msgid "no branch, rebasing %s"
 msgstr "ingen gren, ombaserar %s"
 
-#: ref-filter.c:1488
+#: ref-filter.c:1491
 #, c-format
 msgid "no branch, rebasing detached HEAD %s"
 msgstr "ingen gren, ombaserar frånkopplat HEAD %s"
 
-#: ref-filter.c:1491
+#: ref-filter.c:1494
 #, c-format
 msgid "no branch, bisect started on %s"
 msgstr "ingen gren, \"bisect\" startad på %s"
 
-#: ref-filter.c:1501
+#: ref-filter.c:1504
 msgid "no branch"
 msgstr "ingen gren"
 
-#: ref-filter.c:1537 ref-filter.c:1743
+#: ref-filter.c:1540 ref-filter.c:1749
 #, c-format
 msgid "missing object %s for %s"
 msgstr "objektet %s saknas för %s"
 
-#: ref-filter.c:1547
+#: ref-filter.c:1550
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "parse_object_buffer misslyckades på %s för %s"
 
-#: ref-filter.c:1998
+#: ref-filter.c:2004
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "felformat objekt vid \"%s\""
 
-#: ref-filter.c:2087
+#: ref-filter.c:2093
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "ignorerar referens med trasigt namn %s"
 
-#: ref-filter.c:2382
+#: ref-filter.c:2389
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "format: atomen %%(end) saknas"
 
-#: ref-filter.c:2482
+#: ref-filter.c:2489
 #, c-format
 msgid "option `%s' is incompatible with --merged"
 msgstr "flaggan \"%s\" är inkompatibel med --merged"
 
-#: ref-filter.c:2485
+#: ref-filter.c:2492
 #, c-format
 msgid "option `%s' is incompatible with --no-merged"
 msgstr "flaggan \"%s\" är inkompatibel med --no-merged"
 
-#: ref-filter.c:2495
+#: ref-filter.c:2502
 #, c-format
 msgid "malformed object name %s"
 msgstr "felformat objektnamn %s"
 
-#: ref-filter.c:2500
+#: ref-filter.c:2507
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "flaggan \"%s\" måste peka på en incheckning"
 
-#: remote.c:363
+#: remote.c:366
 #, c-format
 msgid "config remote shorthand cannot begin with '/': %s"
 msgstr "konfigurerad kortform för fjärr kan inte börja med \"/\": %s"
 
-#: remote.c:410
+#: remote.c:413
 msgid "more than one receivepack given, using the first"
 msgstr "mer än en receivepack angavs, använder den första"
 
-#: remote.c:418
+#: remote.c:421
 msgid "more than one uploadpack given, using the first"
 msgstr "mer än en uploadpack angavs, använder den första"
 
-#: remote.c:608
+#: remote.c:611
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
 msgstr "Kan inte hämta både %s och %s till %s"
 
-#: remote.c:612
+#: remote.c:615
 #, c-format
 msgid "%s usually tracks %s, not %s"
 msgstr "%s spårar vanligtvis %s, inte %s"
 
-#: remote.c:616
+#: remote.c:619
 #, c-format
 msgid "%s tracks both %s and %s"
 msgstr "%s spårar både %s och %s"
 
-#: remote.c:684
+#: remote.c:687
 #, c-format
 msgid "key '%s' of pattern had no '*'"
 msgstr "nyckeln \"%s\" i mönstret innehåller ingen \"*\""
 
-#: remote.c:694
+#: remote.c:697
 #, c-format
 msgid "value '%s' of pattern has no '*'"
 msgstr "värdet \"%s\" i mönstret innehåller ingen \"*\""
 
-#: remote.c:1000
+#: remote.c:1003
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "käll-referensspecifikationen %s motsvarar ingen"
 
-#: remote.c:1005
+#: remote.c:1008
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr "käll-referensspecifikationen %s motsvarar mer än en"
@@ -5325,7 +5359,7 @@
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1020
+#: remote.c:1023
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -5348,7 +5382,7 @@
 "\n"
 "Inget av dem fungerade, så vi gav upp. Ange fullständig referens."
 
-#: remote.c:1040
+#: remote.c:1043
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -5359,7 +5393,7 @@
 "Var det meningen att skapa en ny gren genom att sända\n"
 "till \"%s:refs/heads/%s\"?"
 
-#: remote.c:1045
+#: remote.c:1048
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -5370,7 +5404,7 @@
 "Var det meningen att skapa en ny tagg genom att sända\n"
 "till \"%s:refs/tags/%s\"?"
 
-#: remote.c:1050
+#: remote.c:1053
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -5381,7 +5415,7 @@
 "Var det meningen att tagga ett nytt träd genom att sända\n"
 "till \"%s:refs/tags/%s\"?"
 
-#: remote.c:1055
+#: remote.c:1058
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -5392,114 +5426,114 @@
 "Var det meningen att tagga en ny blob genom att sända\n"
 "till \"%s:refs/tags/%s\"?"
 
-#: remote.c:1091
+#: remote.c:1094
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "%s kan inte slås upp till en gren"
 
-#: remote.c:1102
+#: remote.c:1105
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "kan inte ta bort \"%s\": fjärreferensen finns inte"
 
-#: remote.c:1114
+#: remote.c:1117
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr "fjärr-referensspecifikationen \"%s\" motsvarar mer än en"
 
-#: remote.c:1121
+#: remote.c:1124
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "fjärr-referensen \"%s\" hämtar från mer än en källa"
 
-#: remote.c:1624 remote.c:1725
+#: remote.c:1627 remote.c:1728
 msgid "HEAD does not point to a branch"
 msgstr "HEAD pekar inte på en gren"
 
-#: remote.c:1633
+#: remote.c:1636
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "okänd gren: \"%s\""
 
-#: remote.c:1636
+#: remote.c:1639
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "ingen standarduppström angiven för grenen \"%s\""
 
-#: remote.c:1642
+#: remote.c:1645
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "uppströmsgrenen \"%s\" är inte lagrad som en fjärrspårande gren"
 
-#: remote.c:1657
+#: remote.c:1660
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr "push-målet \"%s\" på fjärren \"%s\" har ingen lokalt spårande gren"
 
-#: remote.c:1669
+#: remote.c:1672
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "grenen \"%s\" har ingen fjärr för \"push\""
 
-#: remote.c:1679
+#: remote.c:1682
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "\"push\"-referensspecifikation för \"%s\" innehåller inte \"%s\""
 
-#: remote.c:1692
+#: remote.c:1695
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "\"push\" har inget mål (push.default är \"ingenting\")"
 
-#: remote.c:1714
+#: remote.c:1717
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "\"enkel push\" motsvarar flera olika mål"
 
-#: remote.c:1840
+#: remote.c:1843
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "Kunde inte hitta fjärr-referensen %s"
 
-#: remote.c:1853
+#: remote.c:1856
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* Ignorerar märklig referens \"%s\" lokalt"
 
-#: remote.c:2016
+#: remote.c:2019
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "Din gren är baserad på \"%s\", men den har försvunnit uppströms.\n"
 
-#: remote.c:2020
+#: remote.c:2023
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (använd \"git branch --unset-upstream\" för att rätta)\n"
 
-#: remote.c:2023
+#: remote.c:2026
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Din gren är à jour med \"%s\".\n"
 
-#: remote.c:2027
+#: remote.c:2030
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Din gren och \"%s\" pekar på olika incheckningar.\n"
 
-#: remote.c:2030
+#: remote.c:2033
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (använd \"%s\" för detaljer)\n"
 
-#: remote.c:2034
+#: remote.c:2037
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "Din gren ligger före \"%s\" med %d incheckning.\n"
 msgstr[1] "Din gren ligger före \"%s\" med %d incheckningar.\n"
 
-#: remote.c:2040
+#: remote.c:2043
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (använd \"git push\" för att publicera dina lokala incheckningar)\n"
 
-#: remote.c:2043
+#: remote.c:2046
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -5509,11 +5543,11 @@
 msgstr[1] ""
 "Din gren ligger efter \"%s\" med %d incheckningar, och kan snabbspolas.\n"
 
-#: remote.c:2051
+#: remote.c:2054
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (använd \"git pull\" för att uppdatera din lokala gren)\n"
 
-#: remote.c:2054
+#: remote.c:2057
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -5528,11 +5562,11 @@
 "Din gren och \"%s\" har divergerat,\n"
 "och har %d respektive %d olika incheckningar.\n"
 
-#: remote.c:2064
+#: remote.c:2067
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (använd \"git pull\" för att slå ihop fjärrgrenen med din egen)\n"
 
-#: remote.c:2247
+#: remote.c:2250
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "kan inte tolka förväntat objektnamn \"%s\""
@@ -5645,20 +5679,20 @@
 msgid "unable to open rr-cache directory"
 msgstr "kan inte uppdatera katalogen rr-cache"
 
-#: revision.c:2507
+#: revision.c:2509
 msgid "your current branch appears to be broken"
 msgstr "din nuvarande gren verkar vara trasig"
 
-#: revision.c:2510
+#: revision.c:2512
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "din nuvarande gren \"%s\" innehåller ännu inte några incheckningar"
 
-#: revision.c:2710
+#: revision.c:2720
 msgid "--first-parent is incompatible with --bisect"
 msgstr "--first-parent är inkompatibelt med --bisect"
 
-#: revision.c:2714
+#: revision.c:2724
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L stöder ännu inte andra diff-format än -p och -s"
 
@@ -5680,29 +5714,29 @@
 "Kroken \"%s\" ignorerades eftersom den inte är markerad som körbar.\n"
 "Du kan inaktivera varningen med \"git config advice.ignoredHook false\"."
 
-#: send-pack.c:141
+#: send-pack.c:142
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr "oväntat flush-paket vid läsning av fjärruppackningsstatus"
 
-#: send-pack.c:143
+#: send-pack.c:144
 #, c-format
 msgid "unable to parse remote unpack status: %s"
 msgstr "kunde inte tolka fjärruppackningsstatus: %s"
 
-#: send-pack.c:145
+#: send-pack.c:146
 #, c-format
 msgid "remote unpack failed: %s"
 msgstr "fjärruppackning misslyckades: %s"
 
-#: send-pack.c:306
+#: send-pack.c:307
 msgid "failed to sign the push certificate"
 msgstr "misslyckades underteckna push-certifikatet"
 
-#: send-pack.c:420
+#: send-pack.c:421
 msgid "the receiving end does not support --signed push"
 msgstr "mottagarsidan stöder inte push med --signed"
 
-#: send-pack.c:422
+#: send-pack.c:423
 msgid ""
 "not sending a push certificate since the receiving end does not support --"
 "signed push"
@@ -5710,11 +5744,11 @@
 "sänder inte push-certifikat eftersom mottagarsidan inte stlder push med --"
 "signed"
 
-#: send-pack.c:434
+#: send-pack.c:435
 msgid "the receiving end does not support --atomic push"
 msgstr "mottagarsidan stöder inte push med --atomic"
 
-#: send-pack.c:439
+#: send-pack.c:440
 msgid "the receiving end does not support push options"
 msgstr "mottagarsidan stöder inte push-flaggor"
 
@@ -5728,7 +5762,7 @@
 msgid "could not delete '%s'"
 msgstr "kunde inte ta bort \"%s\""
 
-#: sequencer.c:311 builtin/rebase.c:759 builtin/rebase.c:1645 builtin/rm.c:369
+#: sequencer.c:311 builtin/rebase.c:760 builtin/rebase.c:1676 builtin/rm.c:369
 #, c-format
 msgid "could not remove '%s'"
 msgstr "kunde inte ta bort \"%s\""
@@ -5768,7 +5802,7 @@
 "med \"git add <sökvägar>\" eller \"git rm <sökvägar>\"\n"
 "och checka in resultatet med \"git commit\""
 
-#: sequencer.c:401 sequencer.c:2909
+#: sequencer.c:401 sequencer.c:2847
 #, c-format
 msgid "could not lock '%s'"
 msgstr "kunde inte låsa \"%s\""
@@ -5778,15 +5812,15 @@
 msgid "could not write eol to '%s'"
 msgstr "kunde inte skriva radslut till \"%s\""
 
-#: sequencer.c:413 sequencer.c:2714 sequencer.c:2915 sequencer.c:2929
-#: sequencer.c:3192
+#: sequencer.c:413 sequencer.c:2652 sequencer.c:2853 sequencer.c:2867
+#: sequencer.c:3130
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "misslyckades färdigställa \"%s\""
 
-#: sequencer.c:436 sequencer.c:981 sequencer.c:1655 sequencer.c:2734
-#: sequencer.c:3174 sequencer.c:3283 builtin/am.c:245 builtin/commit.c:763
-#: builtin/merge.c:1112 builtin/rebase.c:567
+#: sequencer.c:436 sequencer.c:1585 sequencer.c:2672 sequencer.c:3112
+#: sequencer.c:3221 builtin/am.c:244 builtin/commit.c:763 builtin/merge.c:1117
+#: builtin/rebase.c:568
 #, c-format
 msgid "could not read '%s'"
 msgstr "kunde inte läsa \"%s\""
@@ -5813,70 +5847,65 @@
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase -i".
 #.
-#: sequencer.c:632
+#: sequencer.c:631
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s: Kunde inte skriva ny indexfil"
 
-#: sequencer.c:649
+#: sequencer.c:648
 msgid "unable to update cache tree"
 msgstr "kan inte uppdatera cacheträd"
 
-#: sequencer.c:663
+#: sequencer.c:662
 msgid "could not resolve HEAD commit"
 msgstr "kunde inte bestämma HEAD:s incheckning"
 
-#: sequencer.c:743
+#: sequencer.c:742
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr "ingen nyckel i  \"%.*s\""
 
-#: sequencer.c:754
+#: sequencer.c:753
 #, c-format
 msgid "unable to dequote value of '%s'"
 msgstr "kan inte ta bort citering av värdet \"%s\""
 
-#: sequencer.c:791 wrapper.c:227 wrapper.c:397 builtin/am.c:706
-#: builtin/am.c:798 builtin/merge.c:1109 builtin/rebase.c:1045
+#: sequencer.c:790 wrapper.c:190 wrapper.c:360 builtin/am.c:705
+#: builtin/am.c:797 builtin/merge.c:1114 builtin/rebase.c:1046
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "kunde inte öppna \"%s\" för läsning"
 
-#: sequencer.c:801
+#: sequencer.c:800
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr "\"GIT_AUTHOR_NAME\" har redan angivits"
 
-#: sequencer.c:806
+#: sequencer.c:805
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr "\"GIT_AUTHOR_EMAIL\" har redan angivits"
 
-#: sequencer.c:811
+#: sequencer.c:810
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr "\"GIT_AUTHOR_DATE\" har redan angivits"
 
-#: sequencer.c:815
+#: sequencer.c:814
 #, c-format
 msgid "unknown variable '%s'"
 msgstr "okänd variabel \"%s\""
 
-#: sequencer.c:820
+#: sequencer.c:819
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr "\"GIT_AUTHOR_NAME\" saknas"
 
-#: sequencer.c:822
+#: sequencer.c:821
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr "\"GIT_AUTHOR_EMAIL\" saknas"
 
-#: sequencer.c:824
+#: sequencer.c:823
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr "\"GIT_AUTHOR_DATE\" saknas"
 
-#: sequencer.c:884
-#, c-format
-msgid "invalid date format '%s' in '%s'"
-msgstr "ogiltigt datumformat \"%s\" i \"%s\""
-
-#: sequencer.c:901
+#: sequencer.c:872
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -5905,15 +5934,11 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:995
-msgid "writing root commit"
-msgstr "skriver rotincheckning"
-
-#: sequencer.c:1216
+#: sequencer.c:1146
 msgid "'prepare-commit-msg' hook failed"
 msgstr "kroken \"prepare-commit-msg\" misslyckades"
 
-#: sequencer.c:1223
+#: sequencer.c:1153
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -5940,7 +5965,7 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1236
+#: sequencer.c:1166
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -5965,327 +5990,327 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1278
+#: sequencer.c:1208
 msgid "couldn't look up newly created commit"
 msgstr "kunde inte slå upp en precis skapad incheckning"
 
-#: sequencer.c:1280
+#: sequencer.c:1210
 msgid "could not parse newly created commit"
 msgstr "kunde inte tolka en precis skapad incheckning"
 
-#: sequencer.c:1326
+#: sequencer.c:1256
 msgid "unable to resolve HEAD after creating commit"
 msgstr "kunde inte bestämma HEAD efter att ha skapat incheckning"
 
-#: sequencer.c:1328
+#: sequencer.c:1258
 msgid "detached HEAD"
 msgstr "frånkopplad HEAD"
 
-#: sequencer.c:1332
+#: sequencer.c:1262
 msgid " (root-commit)"
 msgstr " (rotincheckning)"
 
-#: sequencer.c:1353
+#: sequencer.c:1283
 msgid "could not parse HEAD"
 msgstr "kunde inte tolka HEAD"
 
-#: sequencer.c:1355
+#: sequencer.c:1285
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s är inte en incheckning!"
 
-#: sequencer.c:1359 builtin/commit.c:1571
+#: sequencer.c:1289 builtin/commit.c:1571
 msgid "could not parse HEAD commit"
 msgstr "kunde inte tolka HEAD:s incheckning"
 
-#: sequencer.c:1411 sequencer.c:2004
+#: sequencer.c:1341 sequencer.c:1933
 msgid "unable to parse commit author"
 msgstr "kunde inte tolka incheckningens författare"
 
-#: sequencer.c:1421 builtin/am.c:1573 builtin/merge.c:684
+#: sequencer.c:1352 builtin/am.c:1561 builtin/merge.c:684
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree misslyckades skriva ett träd"
 
-#: sequencer.c:1438 sequencer.c:1499
+#: sequencer.c:1369 sequencer.c:1429
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "kunde inte läsa incheckningsmeddelande från \"%s\""
 
-#: sequencer.c:1465 builtin/am.c:1595 builtin/commit.c:1670 builtin/merge.c:878
-#: builtin/merge.c:903
+#: sequencer.c:1396 builtin/am.c:1583 builtin/commit.c:1670 builtin/merge.c:883
+#: builtin/merge.c:908
 msgid "failed to write commit object"
 msgstr "kunde inte skriva incheckningsobjekt"
 
-#: sequencer.c:1526
+#: sequencer.c:1456
 #, c-format
 msgid "could not parse commit %s"
 msgstr "kunde inte tolka incheckningen %s"
 
-#: sequencer.c:1531
+#: sequencer.c:1461
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "kunde inte tolka föräldraincheckningen %s"
 
-#: sequencer.c:1605 sequencer.c:1715
+#: sequencer.c:1535 sequencer.c:1645
 #, c-format
 msgid "unknown command: %d"
 msgstr "okänt kommando: %d"
 
-#: sequencer.c:1662 sequencer.c:1687
+#: sequencer.c:1592 sequencer.c:1617
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr "Det här är en kombination av %d incheckningar."
 
-#: sequencer.c:1672
+#: sequencer.c:1602
 msgid "need a HEAD to fixup"
 msgstr "behöver en HEAD-incheckning att rätta"
 
-#: sequencer.c:1674 sequencer.c:3219
+#: sequencer.c:1604 sequencer.c:3157
 msgid "could not read HEAD"
 msgstr "kunde inte läsa HEAD"
 
-#: sequencer.c:1676
+#: sequencer.c:1606
 msgid "could not read HEAD's commit message"
 msgstr "kunde inte läsa HEAD:s incheckningsmeddelande"
 
-#: sequencer.c:1682
+#: sequencer.c:1612
 #, c-format
 msgid "cannot write '%s'"
 msgstr "kan inte skriva \"%s\""
 
-#: sequencer.c:1689 git-rebase--preserve-merges.sh:496
+#: sequencer.c:1619 git-rebase--preserve-merges.sh:496
 msgid "This is the 1st commit message:"
 msgstr "Det här är 1:a incheckningsmeddelandet:"
 
-#: sequencer.c:1697
+#: sequencer.c:1627
 #, c-format
 msgid "could not read commit message of %s"
 msgstr "kunde inte läsa incheckningsmeddelande för %s"
 
-#: sequencer.c:1704
+#: sequencer.c:1634
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Det här är incheckningsmeddelande %d:"
 
-#: sequencer.c:1710
+#: sequencer.c:1640
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "Incheckningsmeddelande %d kommer hoppas över:"
 
-#: sequencer.c:1798
+#: sequencer.c:1728
 msgid "your index file is unmerged."
 msgstr "din indexfil har inte slagits ihop."
 
-#: sequencer.c:1805
+#: sequencer.c:1735
 msgid "cannot fixup root commit"
 msgstr "kan inte göra \"fixup\" på rotincheckning"
 
-#: sequencer.c:1824
+#: sequencer.c:1754
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "incheckning %s är en sammanslagning, men flaggan -m angavs inte."
 
-#: sequencer.c:1832 sequencer.c:1840
+#: sequencer.c:1762 sequencer.c:1770
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "incheckning %s har inte förälder %d"
 
-#: sequencer.c:1846
+#: sequencer.c:1776
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "kan inte hämta incheckningsmeddelande för %s"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:1865
+#: sequencer.c:1795
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: kan inte tolka föräldraincheckningen %s"
 
-#: sequencer.c:1930
+#: sequencer.c:1860
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "kunde inte byta namn på \"%s\" till \"%s\""
 
-#: sequencer.c:1985
+#: sequencer.c:1915
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "kunde inte ångra %s... %s"
 
-#: sequencer.c:1986
+#: sequencer.c:1916
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "kunde inte tillämpa %s... %s"
 
-#: sequencer.c:2045
+#: sequencer.c:1983
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: misslyckades läsa indexet"
 
-#: sequencer.c:2052
+#: sequencer.c:1990
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: misslyckades uppdatera indexet"
 
-#: sequencer.c:2128
+#: sequencer.c:2066
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s tar inte argument: \"%s\""
 
-#: sequencer.c:2137
+#: sequencer.c:2075
 #, c-format
 msgid "missing arguments for %s"
 msgstr "argument saknas för %s"
 
-#: sequencer.c:2174
+#: sequencer.c:2112
 #, c-format
 msgid "could not parse '%.*s'"
 msgstr "kunde inte tolka \"%.*s\""
 
-#: sequencer.c:2228
+#: sequencer.c:2166
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "ogiltig rad %d: %.*s"
 
-#: sequencer.c:2239
+#: sequencer.c:2177
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "kan inte utföra \"%s\" utan en föregående incheckning"
 
-#: sequencer.c:2287 builtin/rebase.c:153 builtin/rebase.c:178
+#: sequencer.c:2225 builtin/rebase.c:153 builtin/rebase.c:178
 #: builtin/rebase.c:204 builtin/rebase.c:229
 #, c-format
 msgid "could not read '%s'."
 msgstr "kunde inte läsa \"%s\"."
 
-#: sequencer.c:2323
+#: sequencer.c:2261
 msgid "cancelling a cherry picking in progress"
 msgstr "avbryter pågående \"cherry-pick\""
 
-#: sequencer.c:2330
+#: sequencer.c:2268
 msgid "cancelling a revert in progress"
 msgstr "avbryter pågående \"revert\""
 
-#: sequencer.c:2364
+#: sequencer.c:2302
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "rätta det med \"git rebase --edit-todo\"."
 
-#: sequencer.c:2366
+#: sequencer.c:2304
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "oanvändbart manus: \"%s\""
 
-#: sequencer.c:2371
+#: sequencer.c:2309
 msgid "no commits parsed."
 msgstr "inga incheckningar lästes."
 
-#: sequencer.c:2382
+#: sequencer.c:2320
 msgid "cannot cherry-pick during a revert."
 msgstr "kan inte utföra \"cherry-pick\" under en \"revert\"."
 
-#: sequencer.c:2384
+#: sequencer.c:2322
 msgid "cannot revert during a cherry-pick."
 msgstr "kan inte utföra \"revert\" under en \"cherry-pick\"."
 
-#: sequencer.c:2466
+#: sequencer.c:2404
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr "felaktigt värde för %s: %s"
 
-#: sequencer.c:2553
+#: sequencer.c:2491
 msgid "unusable squash-onto"
 msgstr "oanvändbar squash-onto"
 
-#: sequencer.c:2569
+#: sequencer.c:2507
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "trasigt manus: \"%s\""
 
-#: sequencer.c:2652 sequencer.c:4351
+#: sequencer.c:2590 sequencer.c:4308
 msgid "empty commit set passed"
 msgstr "den angivna uppsättningen incheckningar är tom"
 
-#: sequencer.c:2668
+#: sequencer.c:2606
 msgid "revert is already in progress"
 msgstr "en \"revert\" pågår redan"
 
-#: sequencer.c:2670
+#: sequencer.c:2608
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "testa \"git revert (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2673
+#: sequencer.c:2611
 msgid "cherry-pick is already in progress"
 msgstr "en \"cherry-pick\" pågår redan"
 
-#: sequencer.c:2675
+#: sequencer.c:2613
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "testa \"git cherry-pick (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2689
+#: sequencer.c:2627
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "kunde inte skapa \"sequencer\"-katalogen \"%s\""
 
-#: sequencer.c:2704
+#: sequencer.c:2642
 msgid "could not lock HEAD"
 msgstr "kunde inte låsa HEAD"
 
-#: sequencer.c:2764 sequencer.c:4103
+#: sequencer.c:2702 sequencer.c:4057
 msgid "no cherry-pick or revert in progress"
 msgstr "ingen \"cherry-pick\" eller \"revert\" pågår"
 
-#: sequencer.c:2766 sequencer.c:2777
+#: sequencer.c:2704 sequencer.c:2715
 msgid "cannot resolve HEAD"
 msgstr "kan inte bestämma HEAD"
 
-#: sequencer.c:2768 sequencer.c:2812
+#: sequencer.c:2706 sequencer.c:2750
 msgid "cannot abort from a branch yet to be born"
 msgstr "kan inte avbryta från en gren som ännu inte är född"
 
-#: sequencer.c:2798 builtin/grep.c:734
+#: sequencer.c:2736 builtin/grep.c:736
 #, c-format
 msgid "cannot open '%s'"
 msgstr "kan inte öppna \"%s\""
 
-#: sequencer.c:2800
+#: sequencer.c:2738
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "kan inte läsa \"%s\": %s"
 
-#: sequencer.c:2801
+#: sequencer.c:2739
 msgid "unexpected end of file"
 msgstr "oväntat filslut"
 
-#: sequencer.c:2807
+#: sequencer.c:2745
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "sparad HEAD-fil från före \"cherry-pick\", \"%s\", är trasig"
 
-#: sequencer.c:2818
+#: sequencer.c:2756
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr ""
 "Du verkar ha flyttat HEAD.\n"
 "Spolar inte tillbaka, kontrollera HEAD!"
 
-#: sequencer.c:2859
+#: sequencer.c:2797
 msgid "no revert in progress"
 msgstr "ingen \"revers\" pågår"
 
-#: sequencer.c:2867
+#: sequencer.c:2805
 msgid "no cherry-pick in progress"
 msgstr "ingen \"cherry-pick\" pågår"
 
-#: sequencer.c:2877
+#: sequencer.c:2815
 msgid "failed to skip the commit"
 msgstr "kunde inte hoppa över incheckningen"
 
-#: sequencer.c:2884
+#: sequencer.c:2822
 msgid "there is nothing to skip"
 msgstr "ingenting att hoppa över"
 
-#: sequencer.c:2887
+#: sequencer.c:2825
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -6294,21 +6319,21 @@
 "har du redan checkat in?\n"
 "testa \"git %s --continue\""
 
-#: sequencer.c:3011 sequencer.c:4015
+#: sequencer.c:2949 sequencer.c:3969
 #, c-format
 msgid "could not update %s"
 msgstr "kunde inte uppdatera %s"
 
-#: sequencer.c:3049 sequencer.c:3995
+#: sequencer.c:2987 sequencer.c:3949
 msgid "cannot read HEAD"
 msgstr "kan inte läsa HEAD"
 
-#: sequencer.c:3066
+#: sequencer.c:3004
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "kan inte kopiera in \"%s\" till \"%s\""
 
-#: sequencer.c:3074
+#: sequencer.c:3012
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -6327,27 +6352,27 @@
 "\n"
 "\tgit rebase --continue\n"
 
-#: sequencer.c:3084
+#: sequencer.c:3022
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "Kunde inte tillämpa %s... %.*s"
 
-#: sequencer.c:3091
+#: sequencer.c:3029
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "Kunde inte slå ihop %.*s"
 
-#: sequencer.c:3105 sequencer.c:3109 builtin/difftool.c:633
+#: sequencer.c:3043 sequencer.c:3047 builtin/difftool.c:641
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "kunde inte kopiera in \"%s\" till \"%s\""
 
-#: sequencer.c:3131 sequencer.c:3558 builtin/rebase.c:849 builtin/rebase.c:1582
-#: builtin/rebase.c:1953 builtin/rebase.c:2008
+#: sequencer.c:3069 sequencer.c:3506 builtin/rebase.c:850 builtin/rebase.c:1613
+#: builtin/rebase.c:1987 builtin/rebase.c:2031
 msgid "could not read index"
 msgstr "kunde inte läsa indexet"
 
-#: sequencer.c:3136
+#: sequencer.c:3074
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -6362,11 +6387,11 @@
 "\tgit rebase --continue\n"
 "\n"
 
-#: sequencer.c:3142
+#: sequencer.c:3080
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "och gjorde ändringar till indexet och/eller arbetskatalogen\n"
 
-#: sequencer.c:3148
+#: sequencer.c:3086
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -6383,76 +6408,76 @@
 "\tgit rebase --continue\n"
 "\n"
 
-#: sequencer.c:3209
+#: sequencer.c:3147
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "ogiltigt etikettnamn: \"%.*s\""
 
-#: sequencer.c:3263
+#: sequencer.c:3201
 msgid "writing fake root commit"
 msgstr "skriver fejkad rotincheckning"
 
-#: sequencer.c:3268
+#: sequencer.c:3206
 msgid "writing squash-onto"
 msgstr "skriver squash-onto"
 
-#: sequencer.c:3306 builtin/rebase.c:854 builtin/rebase.c:860
+#: sequencer.c:3244 builtin/rebase.c:855 builtin/rebase.c:861
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "kunde inte hitta trädet för %s."
 
-#: sequencer.c:3324 builtin/rebase.c:873
+#: sequencer.c:3262 builtin/rebase.c:874
 msgid "could not write index"
 msgstr "kunde inte skriva indexet"
 
-#: sequencer.c:3351
+#: sequencer.c:3289
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "kunde inte upplösa \"%s\""
 
-#: sequencer.c:3379
+#: sequencer.c:3320
 msgid "cannot merge without a current revision"
 msgstr "kan inte slå ihop utan en aktuell incheckning"
 
-#: sequencer.c:3401
+#: sequencer.c:3342
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "kan inte tolka \"%.*s\""
 
-#: sequencer.c:3410
+#: sequencer.c:3351
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "inget att slå samman: \"%.*s\""
 
-#: sequencer.c:3422
+#: sequencer.c:3363
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr "\"octopus\"-sammanslagning kan inte köras ovanpå en [ny rot]"
 
-#: sequencer.c:3437
+#: sequencer.c:3378
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "kunde inte läsa incheckningsmeddelande för \"%s\""
 
-#: sequencer.c:3590
+#: sequencer.c:3538
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "kunde inte ens försöka slå ihop \"%.*s\""
 
-#: sequencer.c:3606
+#: sequencer.c:3554
 msgid "merge: Unable to write new index file"
 msgstr "sammanslagning: Kunde inte skriva ny indexfil"
 
-#: sequencer.c:3675 builtin/rebase.c:711
+#: sequencer.c:3623 builtin/rebase.c:712
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Tillämpade autostash.\n"
 
-#: sequencer.c:3687
+#: sequencer.c:3635
 #, c-format
 msgid "cannot store %s"
 msgstr "kan inte spara %s"
 
-#: sequencer.c:3690 builtin/rebase.c:727 git-rebase--preserve-merges.sh:113
+#: sequencer.c:3638 builtin/rebase.c:728 git-rebase--preserve-merges.sh:113
 #, c-format
 msgid ""
 "Applying autostash resulted in conflicts.\n"
@@ -6463,31 +6488,31 @@
 "Dina ändringar är säkra i stashen.\n"
 "Du kan när som helst använda \"git stash pop\" eller \"git stash drop\".\n"
 
-#: sequencer.c:3751
+#: sequencer.c:3699
 #, c-format
 msgid "could not checkout %s"
 msgstr "kunde inte checka ut %s"
 
-#: sequencer.c:3765
+#: sequencer.c:3713
 #, c-format
 msgid "%s: not a valid OID"
 msgstr "%s: inte ett giltigt OID"
 
-#: sequencer.c:3770 git-rebase--preserve-merges.sh:779
+#: sequencer.c:3718 git-rebase--preserve-merges.sh:779
 msgid "could not detach HEAD"
 msgstr "kunde inte koppla från HEAD"
 
-#: sequencer.c:3785
+#: sequencer.c:3733
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "Stoppade på HEAD\n"
 
-#: sequencer.c:3787
+#: sequencer.c:3735
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Stoppade på %s\n"
 
-#: sequencer.c:3795
+#: sequencer.c:3743
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -6508,48 +6533,48 @@
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:3877
+#: sequencer.c:3827
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Stoppade på %s... %.*s\n"
 
-#: sequencer.c:3958
+#: sequencer.c:3898
 #, c-format
 msgid "unknown command %d"
 msgstr "okänt kommando %d"
 
-#: sequencer.c:4003
+#: sequencer.c:3957
 msgid "could not read orig-head"
 msgstr "kunde inte läsa orig-head"
 
-#: sequencer.c:4008
+#: sequencer.c:3962
 msgid "could not read 'onto'"
 msgstr "kunde inte läsa \"onto\""
 
-#: sequencer.c:4022
+#: sequencer.c:3976
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "kunde inte uppdatera HEAD till %s"
 
-#: sequencer.c:4115
+#: sequencer.c:4069
 msgid "cannot rebase: You have unstaged changes."
 msgstr "kan inte ombasera: Du har oköade ändringar."
 
-#: sequencer.c:4124
+#: sequencer.c:4078
 msgid "cannot amend non-existing commit"
 msgstr "kan inte lägga till incheckning som inte finns"
 
-#: sequencer.c:4126
+#: sequencer.c:4080
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "ogiltig fil: \"%s\""
 
-#: sequencer.c:4128
+#: sequencer.c:4082
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "ogiltigt innehåll: \"%s\""
 
-#: sequencer.c:4131
+#: sequencer.c:4085
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -6559,42 +6584,42 @@
 "Du har ändringar i arbetskatalogen som inte checkats in. Checka in dem\n"
 "först och kör sedan \"git rebase --continue\" igen."
 
-#: sequencer.c:4167 sequencer.c:4205
+#: sequencer.c:4121 sequencer.c:4159
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "kunde inte skriva fil: \"%s\""
 
-#: sequencer.c:4220
+#: sequencer.c:4174
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "kunde inte ta bort CHERRY_PICK_HEAD"
 
-#: sequencer.c:4227
+#: sequencer.c:4181
 msgid "could not commit staged changes."
 msgstr "kunde inte checka in köade ändringar."
 
-#: sequencer.c:4328
+#: sequencer.c:4285
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: kan inte göra \"cherry-pick\" på typen \"%s\""
 
-#: sequencer.c:4332
+#: sequencer.c:4289
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: felaktig revision"
 
-#: sequencer.c:4367
+#: sequencer.c:4324
 msgid "can't revert as initial commit"
 msgstr "kan inte ångra som första incheckning"
 
-#: sequencer.c:4810
+#: sequencer.c:4774
 msgid "make_script: unhandled options"
 msgstr "make_script: flaggor som inte stöds"
 
-#: sequencer.c:4813
+#: sequencer.c:4777
 msgid "make_script: error preparing revisions"
 msgstr "make_script: fel när revisioner skulle förberedas"
 
-#: sequencer.c:4971
+#: sequencer.c:4935
 msgid ""
 "You can fix this with 'git rebase --edit-todo' and then run 'git rebase --"
 "continue'.\n"
@@ -6604,24 +6629,24 @@
 "continue\".\n"
 "Avbryt ombaseringen med \"git rebase --abort\".\n"
 
-#: sequencer.c:5083 sequencer.c:5100
+#: sequencer.c:5047 sequencer.c:5064
 msgid "nothing to do"
 msgstr "inget att göra"
 
-#: sequencer.c:5114
+#: sequencer.c:5078
 msgid "could not skip unnecessary pick commands"
 msgstr "kunde inte hoppa över onödiga \"pick\"-kommandon"
 
-#: sequencer.c:5197
+#: sequencer.c:5166
 msgid "the script was already rearranged."
 msgstr "skriptet har redan omordnats."
 
-#: setup.c:123
+#: setup.c:124
 #, c-format
 msgid "'%s' is outside repository"
 msgstr "\"%s\" är utanför arkivet"
 
-#: setup.c:173
+#: setup.c:174
 #, c-format
 msgid ""
 "%s: no such path in the working tree.\n"
@@ -6631,7 +6656,7 @@
 "Använd \"git <kommando> -- <sökväg>..\" för att ange sökvägar som inte finns "
 "lokalt."
 
-#: setup.c:186
+#: setup.c:187
 #, c-format
 msgid ""
 "ambiguous argument '%s': unknown revision or path not in the working tree.\n"
@@ -6643,12 +6668,12 @@
 "Använd \"--\" för att skilja sökvägar från revisioner, så här:\n"
 "\"git <kommando> [<revision>...] -- [<fil>...]\""
 
-#: setup.c:235
+#: setup.c:236
 #, c-format
 msgid "option '%s' must come before non-option arguments"
 msgstr "flaggan \"%s\" måste anges före argument som inte är flaggor"
 
-#: setup.c:254
+#: setup.c:255
 #, c-format
 msgid ""
 "ambiguous argument '%s': both revision and filename\n"
@@ -6659,92 +6684,92 @@
 "Använd \"--\" för att skilja sökvägar från revisioner, så här:\n"
 "\"git <kommando> [<revision>...] -- [<fil>...]\""
 
-#: setup.c:390
+#: setup.c:391
 msgid "unable to set up work tree using invalid config"
 msgstr "kan inte skapa arbetskatalog med felaktig konfiguration"
 
-#: setup.c:394
+#: setup.c:395
 msgid "this operation must be run in a work tree"
 msgstr "funktionen måste köras i en arbetskatalog"
 
-#: setup.c:540
+#: setup.c:541
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
 msgstr "Förväntade git-arkivversion <= %d, hittade %d"
 
-#: setup.c:548
+#: setup.c:549
 msgid "unknown repository extensions found:"
 msgstr "okända arkivutökningar hittades:"
 
-#: setup.c:567
+#: setup.c:568
 #, c-format
 msgid "error opening '%s'"
 msgstr "fel vid öppning av \"%s\""
 
-#: setup.c:569
+#: setup.c:570
 #, c-format
 msgid "too large to be a .git file: '%s'"
 msgstr "för stor för att vara en .git-fil: \"%s\""
 
-#: setup.c:571
+#: setup.c:572
 #, c-format
 msgid "error reading %s"
 msgstr "fel vid läsning av %s"
 
-#: setup.c:573
+#: setup.c:574
 #, c-format
 msgid "invalid gitfile format: %s"
 msgstr "ogiltigt gitfilformat: %s"
 
-#: setup.c:575
+#: setup.c:576
 #, c-format
 msgid "no path in gitfile: %s"
 msgstr "ingen sökväg i gitfil: %s"
 
-#: setup.c:577
+#: setup.c:578
 #, c-format
 msgid "not a git repository: %s"
 msgstr "inte ett git-arkiv: %s"
 
-#: setup.c:676
+#: setup.c:677
 #, c-format
 msgid "'$%s' too big"
 msgstr "\"$%s\" för stor"
 
-#: setup.c:690
+#: setup.c:691
 #, c-format
 msgid "not a git repository: '%s'"
 msgstr "inte ett git-arkiv: \"%s\""
 
-#: setup.c:719 setup.c:721 setup.c:752
+#: setup.c:720 setup.c:722 setup.c:753
 #, c-format
 msgid "cannot chdir to '%s'"
 msgstr "kan inte byta katalog (chdir) till \"%s\""
 
-#: setup.c:724 setup.c:780 setup.c:790 setup.c:829 setup.c:837
+#: setup.c:725 setup.c:781 setup.c:791 setup.c:830 setup.c:838
 msgid "cannot come back to cwd"
 msgstr "kan inte gå tillbaka till arbetskatalogen (cwd)"
 
-#: setup.c:851
+#: setup.c:852
 #, c-format
 msgid "failed to stat '%*s%s%s'"
 msgstr "misslyckades ta status på \"%*ss%s%s\""
 
-#: setup.c:1083
+#: setup.c:1090
 msgid "Unable to read current working directory"
 msgstr "Kan inte läsa aktuell arbetskatalog"
 
-#: setup.c:1092 setup.c:1098
+#: setup.c:1099 setup.c:1105
 #, c-format
 msgid "cannot change to '%s'"
 msgstr "kan inte byta till \"%s\""
 
-#: setup.c:1103
+#: setup.c:1110
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
 msgstr "inte ett git-arkiv (eller någon av föräldrakatalogerna): %s"
 
-#: setup.c:1109
+#: setup.c:1116
 #, c-format
 msgid ""
 "not a git repository (or any parent up to mount point %s)\n"
@@ -6754,7 +6779,7 @@
 "monteringspunkten %s)\n"
 "Stoppar vid filsystemsgräns (GIT_DISCOVERY_ACROSS_FILESYSTEM är inte satt)."
 
-#: setup.c:1220
+#: setup.c:1227
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -6763,76 +6788,76 @@
 "problem med filläges-värdet i core.sharedRepository (0%.3o).\n"
 "Ägaren av filerna måste alltid ha läs- och skrivbehörighet."
 
-#: setup.c:1264
+#: setup.c:1271
 msgid "open /dev/null or dup failed"
 msgstr "misslyckades öppna /dev/null eller \"dup\""
 
-#: setup.c:1279
+#: setup.c:1286
 msgid "fork failed"
 msgstr "\"fork\" misslyckades"
 
-#: setup.c:1284
+#: setup.c:1291
 msgid "setsid failed"
 msgstr "\"setsid\" misslyckades"
 
-#: sha1-file.c:453
+#: sha1-file.c:452
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr "objektkatalogen %s finns inte; se .git/objects/info/alternates"
 
-#: sha1-file.c:504
+#: sha1-file.c:503
 #, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr "kunde inte normalisera alternativ objektsökväg: %s"
 
-#: sha1-file.c:576
+#: sha1-file.c:575
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr "%s: ignorerar alternativa objektlagringar, för djup nästling"
 
-#: sha1-file.c:583
+#: sha1-file.c:582
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr "kan inte normalisera objektkatalogen: %s"
 
-#: sha1-file.c:626
+#: sha1-file.c:625
 msgid "unable to fdopen alternates lockfile"
 msgstr "kan inte utföra \"fdopen\" på låsfil för \"alternates\""
 
-#: sha1-file.c:644
+#: sha1-file.c:643
 msgid "unable to read alternates file"
 msgstr "kan inte läsa \"alternates\"-filen"
 
-#: sha1-file.c:651
+#: sha1-file.c:650
 msgid "unable to move new alternates file into place"
 msgstr "kan inte flytta ny \"alternates\"-fil på plats"
 
-#: sha1-file.c:686
+#: sha1-file.c:685
 #, c-format
 msgid "path '%s' does not exist"
 msgstr "sökvägen \"%s\" finns inte"
 
-#: sha1-file.c:712
+#: sha1-file.c:711
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr "referensarkivet \"%s\" som en länkad utcheckning stöds inte ännu."
 
-#: sha1-file.c:718
+#: sha1-file.c:717
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "referensarkivet \"%s\" är inte ett lokalt arkiv."
 
-#: sha1-file.c:724
+#: sha1-file.c:723
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr "referensarkivet \"%s\" är grunt"
 
-#: sha1-file.c:732
+#: sha1-file.c:731
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr "referensarkivet \"%s\" är ympat"
 
-#: sha1-file.c:792
+#: sha1-file.c:791
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr "felaktig rad vid tolkning av alternativa referenser: %s"
@@ -6842,204 +6867,204 @@
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr "försök att utföra \"mmap\" på %<PRIuMAX> över gränsen %<PRIuMAX>"
 
-#: sha1-file.c:968
+#: sha1-file.c:964
 msgid "mmap failed"
 msgstr "mmap misslyckades"
 
-#: sha1-file.c:1132
+#: sha1-file.c:1128
 #, c-format
 msgid "object file %s is empty"
 msgstr "objektfilen %s är tom"
 
-#: sha1-file.c:1256 sha1-file.c:2395
+#: sha1-file.c:1252 sha1-file.c:2392
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr "trasigt löst objekt \"%s\""
 
-#: sha1-file.c:1258 sha1-file.c:2399
+#: sha1-file.c:1254 sha1-file.c:2396
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr "skräp i slutet av löst objekt \"%s\""
 
-#: sha1-file.c:1300
+#: sha1-file.c:1296
 msgid "invalid object type"
 msgstr "felaktig objekttyp"
 
-#: sha1-file.c:1384
+#: sha1-file.c:1380
 #, c-format
 msgid "unable to unpack %s header with --allow-unknown-type"
 msgstr "kan inte packa upp %s-huvud med --allow-unknown-type"
 
-#: sha1-file.c:1387
+#: sha1-file.c:1383
 #, c-format
 msgid "unable to unpack %s header"
 msgstr "kan inte packa upp %s-huvudet"
 
-#: sha1-file.c:1393
+#: sha1-file.c:1389
 #, c-format
 msgid "unable to parse %s header with --allow-unknown-type"
 msgstr "kan inte tolka %s-huvud med --allow-unknown-type"
 
-#: sha1-file.c:1396
+#: sha1-file.c:1392
 #, c-format
 msgid "unable to parse %s header"
 msgstr "kan inte tolka %s-huvud"
 
-#: sha1-file.c:1587
+#: sha1-file.c:1584
 #, c-format
 msgid "failed to read object %s"
 msgstr "misslyckades läsa objektet %s"
 
-#: sha1-file.c:1591
+#: sha1-file.c:1588
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr "ersättningen %s hittades inte för %s"
 
-#: sha1-file.c:1595
+#: sha1-file.c:1592
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr "löst objekt %s (lagrat i %s) är trasigt"
 
-#: sha1-file.c:1599
+#: sha1-file.c:1596
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr "packat objekt %s (lagrat i %s) är trasigt"
 
-#: sha1-file.c:1702
+#: sha1-file.c:1699
 #, c-format
 msgid "unable to write file %s"
 msgstr "kunde inte skriva filen %s"
 
-#: sha1-file.c:1709
+#: sha1-file.c:1706
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr "kan inte sätta behörigheten till \"%s\""
 
-#: sha1-file.c:1716
+#: sha1-file.c:1713
 msgid "file write error"
 msgstr "fel vid skrivning av fil"
 
-#: sha1-file.c:1735
+#: sha1-file.c:1732
 msgid "error when closing loose object file"
 msgstr "fel vid stängning av fil för löst objekt"
 
-#: sha1-file.c:1800
+#: sha1-file.c:1797
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr ""
 "otillräcklig behörighet för att lägga till objekt till arkivdatabasen %s"
 
-#: sha1-file.c:1802
+#: sha1-file.c:1799
 msgid "unable to create temporary file"
 msgstr "kan inte skapa temporär fil"
 
-#: sha1-file.c:1826
+#: sha1-file.c:1823
 msgid "unable to write loose object file"
 msgstr "kunde inte skriva fil för löst objekt"
 
-#: sha1-file.c:1832
+#: sha1-file.c:1829
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr "kan inte utföra \"deflate\" på nytt objekt %s (%d)"
 
-#: sha1-file.c:1836
+#: sha1-file.c:1833
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr "\"deflateend\" på objektet %s misslyckades (%d)"
 
-#: sha1-file.c:1840
+#: sha1-file.c:1837
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr "förvirrad av instabil objektkälldata för %s"
 
-#: sha1-file.c:1850 builtin/pack-objects.c:920
+#: sha1-file.c:1847 builtin/pack-objects.c:925
 #, c-format
 msgid "failed utime() on %s"
 msgstr "\"utime()\" misslyckades på %s"
 
-#: sha1-file.c:1925
+#: sha1-file.c:1922
 #, c-format
 msgid "cannot read object for %s"
 msgstr "kan inte läsa objekt för %s"
 
-#: sha1-file.c:1965
+#: sha1-file.c:1962
 msgid "corrupt commit"
 msgstr "trasik incheckning"
 
-#: sha1-file.c:1973
+#: sha1-file.c:1970
 msgid "corrupt tag"
 msgstr "trasig tagg"
 
-#: sha1-file.c:2072
+#: sha1-file.c:2069
 #, c-format
 msgid "read error while indexing %s"
 msgstr "läsfel vid indexering av %s"
 
-#: sha1-file.c:2075
+#: sha1-file.c:2072
 #, c-format
 msgid "short read while indexing %s"
 msgstr "för lite lästes vid indexering av %s"
 
-#: sha1-file.c:2148 sha1-file.c:2157
+#: sha1-file.c:2145 sha1-file.c:2154
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr "%s: misslyckades lägga in i databasen"
 
-#: sha1-file.c:2163
+#: sha1-file.c:2160
 #, c-format
 msgid "%s: unsupported file type"
 msgstr "%s: filtypen stöds ej"
 
-#: sha1-file.c:2187
+#: sha1-file.c:2184
 #, c-format
 msgid "%s is not a valid object"
 msgstr "%s är inte ett giltigt objekt"
 
-#: sha1-file.c:2189
+#: sha1-file.c:2186
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr "%s är inte ett giltigt \"%s\"-objekt"
 
-#: sha1-file.c:2216 builtin/index-pack.c:155
+#: sha1-file.c:2213 builtin/index-pack.c:155
 #, c-format
 msgid "unable to open %s"
 msgstr "kan inte öppna %s"
 
-#: sha1-file.c:2406 sha1-file.c:2458
+#: sha1-file.c:2403 sha1-file.c:2455
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr "hash stämmer inte för %s (förväntade %s)"
 
-#: sha1-file.c:2430
+#: sha1-file.c:2427
 #, c-format
 msgid "unable to mmap %s"
 msgstr "kan inte utföra \"mmap\" för %s"
 
-#: sha1-file.c:2435
+#: sha1-file.c:2432
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr "kan inte packa upp huvud för %s"
 
-#: sha1-file.c:2441
+#: sha1-file.c:2438
 #, c-format
 msgid "unable to parse header of %s"
 msgstr "kan inte tolka huvud för %s"
 
-#: sha1-file.c:2452
+#: sha1-file.c:2449
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr "kan inte tolka innehåll i %s"
 
-#: sha1-name.c:490
+#: sha1-name.c:487
 #, c-format
 msgid "short SHA1 %s is ambiguous"
 msgstr "kort SHA1 %s är tvetydig"
 
-#: sha1-name.c:501
+#: sha1-name.c:498
 msgid "The candidates are:"
 msgstr "Kandidaterna är:"
 
-#: sha1-name.c:800
+#: sha1-name.c:797
 msgid ""
 "Git normally never creates a ref that ends with 40 hex characters\n"
 "because it will be ignored when you just specify 40-hex. These refs\n"
@@ -7062,43 +7087,43 @@
 "genom att köra \"git config advice.objectNameWarning false\""
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:821
+#: strbuf.c:822
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u,%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:823
+#: strbuf.c:824
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u,%2.2u GiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:831
+#: strbuf.c:832
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u,%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:833
+#: strbuf.c:834
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u,%2.2u MiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:840
+#: strbuf.c:841
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u,%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:842
+#: strbuf.c:843
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u,%2.2u KiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:848
+#: strbuf.c:849
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -7106,7 +7131,7 @@
 msgstr[1] "%u bytes"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:850
+#: strbuf.c:851
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
@@ -7225,26 +7250,26 @@
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree returnerade en oväntad returkod %d"
 
-#: submodule-config.c:232
+#: submodule-config.c:236
 #, c-format
 msgid "ignoring suspicious submodule name: %s"
 msgstr "ignorerar misstänkt undermodulnamn: %s"
 
-#: submodule-config.c:299
+#: submodule-config.c:303
 msgid "negative values not allowed for submodule.fetchjobs"
 msgstr "negativa värden är inte tillåtna för submodule.fetchjobs"
 
-#: submodule-config.c:397
+#: submodule-config.c:401
 #, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
 msgstr "ignorerar \"%s\" som kan tolkas som en kommandoradsflagga: %s"
 
-#: submodule-config.c:486
+#: submodule-config.c:490
 #, c-format
 msgid "invalid value for %s"
 msgstr "ogiltigt värde för %s"
 
-#: submodule-config.c:755
+#: submodule-config.c:761
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr "Kunde inte uppdatera .gitmodules-posten %s"
@@ -7279,7 +7304,7 @@
 msgid "could not read from stdin"
 msgstr "kunde inte läsa från standard in"
 
-#: trailer.c:1011 wrapper.c:701
+#: trailer.c:1011 wrapper.c:665
 #, c-format
 msgid "could not stat %s"
 msgstr "kunde inte ta status på %s"
@@ -7308,47 +7333,47 @@
 msgid "Would set upstream of '%s' to '%s' of '%s'\n"
 msgstr "Skulle sätta uppströms för \"%s\" till \"%s\" från \"%s\"\n"
 
-#: transport.c:142
+#: transport.c:145
 #, c-format
 msgid "could not read bundle '%s'"
 msgstr "kunde inte läsa paketet (bundlen) \"%s\""
 
-#: transport.c:208
+#: transport.c:214
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr "transport: ogiltig flagga för depth: \"%s\""
 
-#: transport.c:259
+#: transport.c:266
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "se protocol.version i \"git help config\" för mer information"
 
-#: transport.c:260
+#: transport.c:267
 msgid "server options require protocol version 2 or later"
 msgstr "serverflaggor kräver protokollversion 2 eller senare"
 
-#: transport.c:625
+#: transport.c:632
 msgid "could not parse transport.color.* config"
 msgstr "kunde inte tolka inställningen för transport.color.*"
 
-#: transport.c:698
+#: transport.c:705
 msgid "support for protocol v2 not implemented yet"
 msgstr "stöd för protokoll v2 ännu ej implementerat"
 
-#: transport.c:825
+#: transport.c:831
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "okänt värde för inställningen \"%s\": %s"
 
-#: transport.c:891
+#: transport.c:897
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "transporten \"%s\" tillåts inte"
 
-#: transport.c:945
+#: transport.c:949
 msgid "git-over-rsync is no longer supported"
 msgstr "git-over-rsync stöds inte längre"
 
-#: transport.c:1040
+#: transport.c:1044
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -7357,7 +7382,7 @@
 "Följande undermodulsökvägar innehåller ändringar som\n"
 "inte kan hittas av fjärrarna:\n"
 
-#: transport.c:1044
+#: transport.c:1048
 #, c-format
 msgid ""
 "\n"
@@ -7384,32 +7409,32 @@
 "för att sända dem till fjärren.\n"
 "\n"
 
-#: transport.c:1052
+#: transport.c:1056
 msgid "Aborting."
 msgstr "Avbryter."
 
-#: transport.c:1193
+#: transport.c:1201
 msgid "failed to push all needed submodules"
 msgstr "kunde inte sända alla nödvändiga undermoduler"
 
-#: transport.c:1340 transport-helper.c:645
+#: transport.c:1345 transport-helper.c:655
 msgid "operation not supported by protocol"
 msgstr "funktionen stöds inte av protokollet"
 
-#: transport-helper.c:51 transport-helper.c:80
+#: transport-helper.c:61 transport-helper.c:90
 msgid "full write to remote helper failed"
 msgstr "komplett skrivning till fjärrhjälpare misslyckades"
 
-#: transport-helper.c:134
+#: transport-helper.c:144
 #, c-format
 msgid "unable to find remote helper for '%s'"
 msgstr "kan inte hitta fjärrhjälpare för \"%s\""
 
-#: transport-helper.c:150 transport-helper.c:559
+#: transport-helper.c:160 transport-helper.c:569
 msgid "can't dup helper output fd"
 msgstr "kunde inte duplicera utdata-filhandtag"
 
-#: transport-helper.c:201
+#: transport-helper.c:211
 #, c-format
 msgid ""
 "unknown mandatory capability %s; this remote helper probably needs newer "
@@ -7418,101 +7443,106 @@
 "okänd krävd förmåga (capability) %s; fjärrhjälparen behöver antagligen en "
 "nyare version av Git"
 
-#: transport-helper.c:207
+#: transport-helper.c:217
 msgid "this remote helper should implement refspec capability"
 msgstr ""
 "fjärrhjälparen behöver implementera förmåga för referensspecifikationer "
 "(refspec)"
 
-#: transport-helper.c:274 transport-helper.c:414
+#: transport-helper.c:284 transport-helper.c:424
 #, c-format
 msgid "%s unexpectedly said: '%s'"
 msgstr "%s sade oväntat: \"%s\""
 
-#: transport-helper.c:403
+#: transport-helper.c:413
 #, c-format
 msgid "%s also locked %s"
 msgstr "%s låste också %s"
 
-#: transport-helper.c:481
+#: transport-helper.c:491
 msgid "couldn't run fast-import"
 msgstr "kunde inte köra fast-import"
 
-#: transport-helper.c:504
+#: transport-helper.c:514
 msgid "error while running fast-import"
 msgstr "fel när fast-import kördes"
 
-#: transport-helper.c:533 transport-helper.c:1105
+#: transport-helper.c:543 transport-helper.c:1132
 #, c-format
 msgid "could not read ref %s"
 msgstr "kunde inte läsa referensen %s"
 
-#: transport-helper.c:578
+#: transport-helper.c:588
 #, c-format
 msgid "unknown response to connect: %s"
 msgstr "okänt svar på ansluntning: %s"
 
-#: transport-helper.c:600
+#: transport-helper.c:610
 msgid "setting remote service path not supported by protocol"
 msgstr "protkollet stöder inte att sätta sökväg till fjärrtjänst"
 
-#: transport-helper.c:602
+#: transport-helper.c:612
 msgid "invalid remote service path"
 msgstr "felaktig sökväg till fjärrtjänst"
 
-#: transport-helper.c:648
+#: transport-helper.c:658
 #, c-format
 msgid "can't connect to subservice %s"
 msgstr "kan inte ansluta till undertjänsten %s"
 
-#: transport-helper.c:720
+#: transport-helper.c:734
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "förväntade ok/error, hjälpprogrammet svarade \"%s\""
 
-#: transport-helper.c:773
+#: transport-helper.c:787
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "hjälparen returnerade oväntad status %s"
 
-#: transport-helper.c:834
+#: transport-helper.c:848
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "hjälparen %s stöder inte dry-run"
 
-#: transport-helper.c:837
+#: transport-helper.c:851
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "hjälparen %s stöder inte --signed"
 
-#: transport-helper.c:840
+#: transport-helper.c:854
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "hjälparen %s stöder inte --signed=if-asked"
 
-#: transport-helper.c:847
+#: transport-helper.c:859
+#, c-format
+msgid "helper %s does not support --atomic"
+msgstr "hjälparen %s stöder inte --atomic"
+
+#: transport-helper.c:865
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "hjälparen %s stöder inte \"push-option\""
 
-#: transport-helper.c:945
+#: transport-helper.c:963
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr "fjärrhjälparen stöder inte push; referensspecifikation krävs"
 
-#: transport-helper.c:950
+#: transport-helper.c:968
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "hjälparen %s stöder inte \"force\""
 
-#: transport-helper.c:997
+#: transport-helper.c:1015
 msgid "couldn't run fast-export"
 msgstr "kunde inte köra fast-export"
 
-#: transport-helper.c:1002
+#: transport-helper.c:1020
 msgid "error while running fast-export"
 msgstr "fel vid körning av fast-export"
 
-#: transport-helper.c:1027
+#: transport-helper.c:1045
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -7521,47 +7551,47 @@
 "Inga gemensamma referenser och inga angavs; gör inget.\n"
 "Du kanske borde ange en gren såsom \"master\".\n"
 
-#: transport-helper.c:1091
+#: transport-helper.c:1118
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "felformat svar i referenslistan: %s"
 
-#: transport-helper.c:1244
+#: transport-helper.c:1270
 #, c-format
 msgid "read(%s) failed"
 msgstr "läs(%s) misslyckades"
 
-#: transport-helper.c:1271
+#: transport-helper.c:1297
 #, c-format
 msgid "write(%s) failed"
 msgstr "skriv(%s) misslyckades"
 
-#: transport-helper.c:1320
+#: transport-helper.c:1346
 #, c-format
 msgid "%s thread failed"
 msgstr "%s-tråden misslyckades"
 
-#: transport-helper.c:1324
+#: transport-helper.c:1350
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "%s-tråden misslyckades ansluta: %s"
 
-#: transport-helper.c:1343 transport-helper.c:1347
+#: transport-helper.c:1369 transport-helper.c:1373
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "kan inte starta tråd för kopiering av data: %s"
 
-#: transport-helper.c:1384
+#: transport-helper.c:1410
 #, c-format
 msgid "%s process failed to wait"
 msgstr "processen %s misslyckades vänta"
 
-#: transport-helper.c:1388
+#: transport-helper.c:1414
 #, c-format
 msgid "%s process failed"
 msgstr "processen %s misslyckades"
 
-#: transport-helper.c:1406 transport-helper.c:1415
+#: transport-helper.c:1432 transport-helper.c:1441
 msgid "can't start thread for copying data"
 msgstr "kan inte skapa tråd för kopiering av data"
 
@@ -7581,7 +7611,7 @@
 msgid "too-short tree file"
 msgstr "trädfil för kort"
 
-#: unpack-trees.c:111
+#: unpack-trees.c:110
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -7590,7 +7620,7 @@
 "Dina lokala ändringar av följande filer skulle skrivas över av utcheckning:\n"
 "%%sChecka in dina ändringar eller använd \"stash\" innan du byter gren."
 
-#: unpack-trees.c:113
+#: unpack-trees.c:112
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -7599,7 +7629,7 @@
 "Dina lokala ändringar av följande filer skulle skrivas över av utcheckning:\n"
 "%%s"
 
-#: unpack-trees.c:116
+#: unpack-trees.c:115
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -7609,7 +7639,7 @@
 "sammanslagning:\n"
 "%%sChecka in dina ändringar eller använd \"stash\" innan du byter gren."
 
-#: unpack-trees.c:118
+#: unpack-trees.c:117
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -7619,7 +7649,7 @@
 "sammanslagning:\n"
 "%%s"
 
-#: unpack-trees.c:121
+#: unpack-trees.c:120
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -7628,7 +7658,7 @@
 "Dina lokala ändringar av följande filer skulle skrivas över av \"%s\":\n"
 "%%sChecka in dina ändringar eller använd \"stash\" innan du \"%s\"."
 
-#: unpack-trees.c:123
+#: unpack-trees.c:122
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -7637,7 +7667,7 @@
 "Dina lokala ändringar av följande filer skulle skrivas över av \"%s\":\n"
 "%%s"
 
-#: unpack-trees.c:128
+#: unpack-trees.c:127
 #, c-format
 msgid ""
 "Updating the following directories would lose untracked files in them:\n"
@@ -7647,7 +7677,7 @@
 "dem:\n"
 "%s"
 
-#: unpack-trees.c:132
+#: unpack-trees.c:131
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -7656,7 +7686,7 @@
 "Följande ospårade filer i arbetskatalogen skulle tas bort av utcheckningen:\n"
 "%%sFlytta eller ta bort dem innan du byter gren."
 
-#: unpack-trees.c:134
+#: unpack-trees.c:133
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -7665,7 +7695,7 @@
 "Följande ospårade filer i arbetskatalogen skulle tas bort av utcheckningen:\n"
 "%%s"
 
-#: unpack-trees.c:137
+#: unpack-trees.c:136
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -7675,7 +7705,7 @@
 "sammanslagningen:\n"
 "%%sFlytta eller ta bort dem innan du slår samman."
 
-#: unpack-trees.c:139
+#: unpack-trees.c:138
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -7685,7 +7715,7 @@
 "sammanslagningen:\n"
 "%%s"
 
-#: unpack-trees.c:142
+#: unpack-trees.c:141
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -7694,7 +7724,7 @@
 "Följande ospårade filer i arbetskatalogen skulle tas bort av \"%s\":\n"
 "%%sFlytta eller ta bort dem innan du \"%s\"."
 
-#: unpack-trees.c:144
+#: unpack-trees.c:143
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -7703,7 +7733,7 @@
 "Följande ospårade filer i arbetskatalogen skulle tas bort av \"%s\":\n"
 "%%s"
 
-#: unpack-trees.c:150
+#: unpack-trees.c:149
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -7714,7 +7744,7 @@
 "utcheckningen:\n"
 "%%sFlytta eller ta bort dem innan du byter gren."
 
-#: unpack-trees.c:152
+#: unpack-trees.c:151
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -7725,7 +7755,7 @@
 "utcheckningen:\n"
 "%%s"
 
-#: unpack-trees.c:155
+#: unpack-trees.c:154
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -7735,7 +7765,7 @@
 "sammanslagningen:\n"
 "%%sFlytta eller ta bort dem innan du byter gren."
 
-#: unpack-trees.c:157
+#: unpack-trees.c:156
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -7745,7 +7775,7 @@
 "sammanslagningen:\n"
 "%%s"
 
-#: unpack-trees.c:160
+#: unpack-trees.c:159
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -7754,7 +7784,7 @@
 "Följande ospårade filer i arbetskatalogen skulle skrivas över av \"%s\":\n"
 "%%sFlytta eller ta bort dem innan du \"%s\"."
 
-#: unpack-trees.c:162
+#: unpack-trees.c:161
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -7763,12 +7793,12 @@
 "Följande ospårade filer i arbetskatalogen skulle skrivas över av \"%s\":\n"
 "%%s"
 
-#: unpack-trees.c:170
+#: unpack-trees.c:169
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
 msgstr "Posten \"%s\" överlappar \"%s\". Kan inte binda."
 
-#: unpack-trees.c:173
+#: unpack-trees.c:172
 #, c-format
 msgid ""
 "Cannot update sparse checkout: the following entries are not up to date:\n"
@@ -7777,7 +7807,7 @@
 "Kan inte uppdatera gles utcheckning: följande poster är inte à jour:\n"
 "%s"
 
-#: unpack-trees.c:175
+#: unpack-trees.c:174
 #, c-format
 msgid ""
 "The following working tree files would be overwritten by sparse checkout "
@@ -7788,7 +7818,7 @@
 "utcheckning:\n"
 "%s"
 
-#: unpack-trees.c:177
+#: unpack-trees.c:176
 #, c-format
 msgid ""
 "The following working tree files would be removed by sparse checkout "
@@ -7799,7 +7829,7 @@
 "utcheckning:\n"
 "%s"
 
-#: unpack-trees.c:179
+#: unpack-trees.c:178
 #, c-format
 msgid ""
 "Cannot update submodule:\n"
@@ -7808,16 +7838,16 @@
 "Kan inte uppdatera undermodul:\n"
 "%s"
 
-#: unpack-trees.c:256
+#: unpack-trees.c:255
 #, c-format
 msgid "Aborting\n"
 msgstr "Avbryter\n"
 
-#: unpack-trees.c:318
+#: unpack-trees.c:317
 msgid "Updating files"
 msgstr "Uppdaterar filer"
 
-#: unpack-trees.c:350
+#: unpack-trees.c:349
 msgid ""
 "the following paths have collided (e.g. case-sensitive paths\n"
 "on a case-insensitive filesystem) and only one from the same\n"
@@ -7856,7 +7886,7 @@
 msgid "invalid '..' path segment"
 msgstr "felaktigt \"..\"-sökvägssegment"
 
-#: worktree.c:258 builtin/am.c:2095
+#: worktree.c:258 builtin/am.c:2084
 #, c-format
 msgid "failed to read '%s'"
 msgstr "misslyckades läsa \"%s\""
@@ -7886,17 +7916,17 @@
 msgid "'%s' does not point back to '%s'"
 msgstr "\"%s\" pekar inte tillbaka till \"%s\""
 
-#: wrapper.c:223 wrapper.c:393
+#: wrapper.c:186 wrapper.c:356
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr "kunde inte öppna \"%s\" för läsning och skrivning"
 
-#: wrapper.c:424 wrapper.c:624
+#: wrapper.c:387 wrapper.c:588
 #, c-format
 msgid "unable to access '%s'"
 msgstr "kan inte komma åt \"%s\""
 
-#: wrapper.c:632
+#: wrapper.c:596
 msgid "unable to get current working directory"
 msgstr "kan inte hämta aktuell arbetskatalog"
 
@@ -8232,83 +8262,91 @@
 msgstr "  (alla konflikter rättade: kör \"git cherry-pick --continue\")"
 
 #: wt-status.c:1437
+msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
+msgstr "  (använd \"git cherry-pick --skip\" för att hoppa över patchen)"
+
+#: wt-status.c:1439
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr ""
 "  (använd \"git cherry-pick --abort\" för att avbryta \"cherry-pick\"-"
 "operationen)"
 
-#: wt-status.c:1447
+#: wt-status.c:1449
 msgid "Revert currently in progress."
 msgstr "Ångring pågår."
 
-#: wt-status.c:1450
+#: wt-status.c:1452
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Du håller på med att ångra incheckningen %s."
 
-#: wt-status.c:1456
+#: wt-status.c:1458
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (rätta konflikter och kör sedan \"git revert --continue\")"
 
-#: wt-status.c:1459
+#: wt-status.c:1461
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (kör \"git revert --continue\" för att fortsätta)"
 
-#: wt-status.c:1462
+#: wt-status.c:1464
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (alla konflikter rättade: kör \"git revert --continue\")"
 
-#: wt-status.c:1464
+#: wt-status.c:1466
+msgid "  (use \"git revert --skip\" to skip this patch)"
+msgstr "  (använd \"git revert --skip\" för att hoppa över patchen)"
+
+#: wt-status.c:1468
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (använd \"git revert --abort\" för att avbryta ångrandet)"
 
-#: wt-status.c:1474
+#: wt-status.c:1478
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "Du håller på med en \"bisect\", startad från grenen \"%s\"."
 
-#: wt-status.c:1478
+#: wt-status.c:1482
 msgid "You are currently bisecting."
 msgstr "Du håller på med en \"bisect\"."
 
-#: wt-status.c:1481
+#: wt-status.c:1485
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr ""
 "  (använd \"git bisect reset\" för att komma tillbaka till ursprungsgrenen)"
 
-#: wt-status.c:1690
+#: wt-status.c:1694
 msgid "On branch "
 msgstr "På grenen "
 
-#: wt-status.c:1697
+#: wt-status.c:1701
 msgid "interactive rebase in progress; onto "
 msgstr "interaktiv ombasering pågår; ovanpå "
 
-#: wt-status.c:1699
+#: wt-status.c:1703
 msgid "rebase in progress; onto "
 msgstr "ombasering pågår; ovanpå "
 
-#: wt-status.c:1709
+#: wt-status.c:1713
 msgid "Not currently on any branch."
 msgstr "Inte på någon gren för närvarande."
 
-#: wt-status.c:1726
+#: wt-status.c:1730
 msgid "Initial commit"
 msgstr "Första incheckning"
 
-#: wt-status.c:1727
+#: wt-status.c:1731
 msgid "No commits yet"
 msgstr "Inga incheckningar ännu"
 
-#: wt-status.c:1741
+#: wt-status.c:1745
 msgid "Untracked files"
 msgstr "Ospårade filer"
 
-#: wt-status.c:1743
+#: wt-status.c:1747
 msgid "Ignored files"
 msgstr "Ignorerade filer"
 
-#: wt-status.c:1747
+#: wt-status.c:1751
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -8320,32 +8358,32 @@
 "lägga till nya filer själv (se \"git help status\")."
 
 # %s är nästa sträng eller tom.
-#: wt-status.c:1753
+#: wt-status.c:1757
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Ospårade filer visas ej%s"
 
-#: wt-status.c:1755
+#: wt-status.c:1759
 msgid " (use -u option to show untracked files)"
 msgstr " (använd flaggan -u för att visa ospårade filer)"
 
-#: wt-status.c:1761
+#: wt-status.c:1765
 msgid "No changes"
 msgstr "Inga ändringar"
 
-#: wt-status.c:1766
+#: wt-status.c:1770
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 "inga ändringar att checka in (använd \"git add\" och/eller \"git commit -a"
 "\")\n"
 
-#: wt-status.c:1769
+#: wt-status.c:1773
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "inga ändringar att checka in\n"
 
-#: wt-status.c:1772
+#: wt-status.c:1776
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -8354,66 +8392,71 @@
 "inget köat för incheckning, men ospårade filer finns (spåra med \"git add"
 "\")\n"
 
-#: wt-status.c:1775
+#: wt-status.c:1779
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr "inget köat för incheckning, men ospårade filer finns\n"
 
-#: wt-status.c:1778
+#: wt-status.c:1782
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr "inget att checka in (skapa/kopiera filer och spåra med \"git add\")\n"
 
-#: wt-status.c:1781 wt-status.c:1786
+#: wt-status.c:1785 wt-status.c:1790
 #, c-format
 msgid "nothing to commit\n"
 msgstr "inget att checka in\n"
 
-#: wt-status.c:1784
+#: wt-status.c:1788
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr "inget att checka in (använd -u för att visa ospårade filer)\n"
 
-#: wt-status.c:1788
+#: wt-status.c:1792
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "inget att checka in, arbetskatalogen ren\n"
 
-#: wt-status.c:1901
+#: wt-status.c:1905
 msgid "No commits yet on "
 msgstr "Inga incheckningar ännu på "
 
-#: wt-status.c:1905
+#: wt-status.c:1909
 msgid "HEAD (no branch)"
 msgstr "HEAD (ingen gren)"
 
-#: wt-status.c:1936
+#: wt-status.c:1940
 msgid "different"
 msgstr "olika"
 
-#: wt-status.c:1938 wt-status.c:1946
+#: wt-status.c:1942 wt-status.c:1950
 msgid "behind "
 msgstr "efter "
 
-#: wt-status.c:1941 wt-status.c:1944
+#: wt-status.c:1945 wt-status.c:1948
 msgid "ahead "
 msgstr "före "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2466
+#: wt-status.c:2470
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "kan inte %s: Du har oköade ändringar."
 
-#: wt-status.c:2472
+#: wt-status.c:2476
 msgid "additionally, your index contains uncommitted changes."
 msgstr "dessutom innehåller dit index ändringar som inte har checkats in."
 
-#: wt-status.c:2474
+#: wt-status.c:2478
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "kan inte %s: Ditt index innehåller ändringar som inte checkats in."
 
+#: compat/precompose_utf8.c:58 builtin/clone.c:452
+#, c-format
+msgid "failed to unlink '%s'"
+msgstr "misslyckades ta bort länken \"%s\""
+
 #: builtin/add.c:25
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<flaggor>] [--] <sökväg>..."
@@ -8436,7 +8479,7 @@
 msgid "Unstaged changes after refreshing the index:"
 msgstr "Oköade ändringar efter att ha uppdaterat indexet:"
 
-#: builtin/add.c:234 builtin/rev-parse.c:896
+#: builtin/add.c:234 builtin/rev-parse.c:897
 msgid "Could not read the index"
 msgstr "Kunde inte läsa indexet"
 
@@ -8471,8 +8514,8 @@
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr "Följande sökvägar ignoreras av en av dina .gitignore-filer:\n"
 
-#: builtin/add.c:290 builtin/clean.c:909 builtin/fetch.c:147 builtin/mv.c:124
-#: builtin/prune-packed.c:56 builtin/pull.c:222 builtin/push.c:560
+#: builtin/add.c:290 builtin/clean.c:910 builtin/fetch.c:162 builtin/mv.c:124
+#: builtin/prune-packed.c:56 builtin/pull.c:223 builtin/push.c:547
 #: builtin/remote.c:1345 builtin/rm.c:241 builtin/send-pack.c:165
 msgid "dry run"
 msgstr "testkörning"
@@ -8525,7 +8568,7 @@
 msgid "check if - even missing - files are ignored in dry run"
 msgstr "se om - även saknade - filer ignoreras i testkörning"
 
-#: builtin/add.c:309 builtin/update-index.c:1001
+#: builtin/add.c:309 builtin/update-index.c:1002
 msgid "override the executable bit of the listed files"
 msgstr "överstyr exekveringsbiten för angivna filer"
 
@@ -8601,113 +8644,109 @@
 msgid "Maybe you wanted to say 'git add .'?\n"
 msgstr "Kanske menade du att skriva \"git add .\"?\n"
 
-#: builtin/am.c:348
+#: builtin/am.c:347
 msgid "could not parse author script"
 msgstr "kunde inte tolka författarskript"
 
-#: builtin/am.c:432
+#: builtin/am.c:431
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "\"%s\" togs bort av kroken applypatch-msg"
 
-#: builtin/am.c:474
+#: builtin/am.c:473
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Felaktig indatarad: \"%s\"."
 
-#: builtin/am.c:512
+#: builtin/am.c:511
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Misslyckades kopiera anteckningar från \"%s\" till \"%s\""
 
-#: builtin/am.c:538
+#: builtin/am.c:537
 msgid "fseek failed"
 msgstr "\"fseek\" misslyckades"
 
-#: builtin/am.c:726
+#: builtin/am.c:725
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "kunde inte tolka patchen \"%s\""
 
-#: builtin/am.c:791
+#: builtin/am.c:790
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Endast en StGIT-patchserie kan tillämpas åt gången"
 
-#: builtin/am.c:839
+#: builtin/am.c:838
 msgid "invalid timestamp"
 msgstr "ogiltig tidsstämpel"
 
-#: builtin/am.c:844 builtin/am.c:856
+#: builtin/am.c:843 builtin/am.c:855
 msgid "invalid Date line"
 msgstr "ogiltig \"Date\"-rad"
 
-#: builtin/am.c:851
+#: builtin/am.c:850
 msgid "invalid timezone offset"
 msgstr "ogiltig tidszons-offset"
 
-#: builtin/am.c:944
+#: builtin/am.c:943
 msgid "Patch format detection failed."
 msgstr "Misslyckades detektera patchformat."
 
-#: builtin/am.c:949 builtin/clone.c:407
+#: builtin/am.c:948 builtin/clone.c:406
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "misslyckades skapa katalogen \"%s\""
 
-#: builtin/am.c:954
+#: builtin/am.c:953
 msgid "Failed to split patches."
 msgstr "Misslyckades dela patchar."
 
-#: builtin/am.c:1084 builtin/commit.c:374
-msgid "unable to write index file"
-msgstr "kan inte skriva indexfil"
-
-#: builtin/am.c:1098
+#: builtin/am.c:1084
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "När du har löst problemet, kör \"%s --continue\"."
 
-#: builtin/am.c:1099
+#: builtin/am.c:1085
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "Om du hellre vill hoppa över patchen, kör \"%s --skip\" i stället."
 
-#: builtin/am.c:1100
+#: builtin/am.c:1086
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr ""
 "För att återgå till ursprunglig gren och sluta patcha, kör \"%s --abort\"."
 
-#: builtin/am.c:1183
+#: builtin/am.c:1169
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 "Patch sänd med format=flowed; blanksteg på slut av rader kan ha tappats."
 
-#: builtin/am.c:1211
+#: builtin/am.c:1197
 msgid "Patch is empty."
 msgstr "Patchen är tom."
 
-#: builtin/am.c:1277
+#: builtin/am.c:1262
+#, c-format
+msgid "missing author line in commit %s"
+msgstr "saknad \"author\"-rad i incheckningen %s"
+
+#: builtin/am.c:1265
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "ogiltig ident-rad: %.*s"
 
-#: builtin/am.c:1299
-#, c-format
-msgid "unable to parse commit %s"
-msgstr "kunde inte tolka incheckningen %s"
-
-#: builtin/am.c:1496
+#: builtin/am.c:1484
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
 "Arkivet saknar objekt som behövs för att falla tillbaka på 3-"
 "vägssammanslagning."
 
-#: builtin/am.c:1498
+#: builtin/am.c:1486
 msgid "Using index info to reconstruct a base tree..."
 msgstr "Använder indexinfo för att återskapa ett basträd..."
 
-#: builtin/am.c:1517
+#: builtin/am.c:1505
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -8715,25 +8754,25 @@
 "Har du handredigerat din patch?\n"
 "Den kan inte tillämpas på blobbar som antecknats i dess index."
 
-#: builtin/am.c:1523
+#: builtin/am.c:1511
 msgid "Falling back to patching base and 3-way merge..."
 msgstr ""
 "Faller tillbaka på att patcha grundversionen och trevägssammanslagning..."
 
-#: builtin/am.c:1549
+#: builtin/am.c:1537
 msgid "Failed to merge in the changes."
 msgstr "Misslyckades slå ihop ändringarna."
 
-#: builtin/am.c:1581
+#: builtin/am.c:1569
 msgid "applying to an empty history"
 msgstr "tillämpar på en tom historik"
 
-#: builtin/am.c:1628 builtin/am.c:1632
+#: builtin/am.c:1616 builtin/am.c:1620
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "kan inte återuppta: %s finns inte."
 
-#: builtin/am.c:1650
+#: builtin/am.c:1638
 msgid "Commit Body is:"
 msgstr "Incheckningskroppen är:"
 
@@ -8741,36 +8780,40 @@
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1660
+#: builtin/am.c:1648
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr "Tillämpa? Y=ja/N=nej/E=redigera/V=visa patch/A=godta alla: "
 
-#: builtin/am.c:1710
+#: builtin/am.c:1695 builtin/commit.c:374
+msgid "unable to write index file"
+msgstr "kan inte skriva indexfil"
+
+#: builtin/am.c:1699
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Smutsigt index: kan inte tillämpa patchar (smutsiga: %s)"
 
-#: builtin/am.c:1750 builtin/am.c:1818
+#: builtin/am.c:1739 builtin/am.c:1807
 #, c-format
 msgid "Applying: %.*s"
 msgstr "Tillämpar: %.*s"
 
-#: builtin/am.c:1767
+#: builtin/am.c:1756
 msgid "No changes -- Patch already applied."
 msgstr "Inga ändringar -- Patchen har redan tillämpats."
 
-#: builtin/am.c:1773
+#: builtin/am.c:1762
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "Patch misslyckades på %s %.*s"
 
-#: builtin/am.c:1777
+#: builtin/am.c:1766
 msgid "Use 'git am --show-current-patch' to see the failed patch"
 msgstr ""
 "Använd \"git am --show-current-patch\" för att se patchen som misslyckades"
 
-#: builtin/am.c:1821
+#: builtin/am.c:1810
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -8780,7 +8823,7 @@
 "Om det inte är något kvar att köa kan det hända att något annat redan\n"
 "introducerat samma ändringar; kanske du bör hoppa över patchen."
 
-#: builtin/am.c:1828
+#: builtin/am.c:1817
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -8792,17 +8835,17 @@
 "lösta.\n"
 "Du kan köra \"git rm\" för att godta \"borttagen av dem\" för den."
 
-#: builtin/am.c:1935 builtin/am.c:1939 builtin/am.c:1951 builtin/reset.c:329
+#: builtin/am.c:1924 builtin/am.c:1928 builtin/am.c:1940 builtin/reset.c:329
 #: builtin/reset.c:337
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "Kan inte tolka objektet \"%s\"."
 
-#: builtin/am.c:1987
+#: builtin/am.c:1976
 msgid "failed to clean index"
 msgstr "misslyckades städa upp indexet"
 
-#: builtin/am.c:2031
+#: builtin/am.c:2020
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -8810,143 +8853,143 @@
 "Du verkar ha flyttat HEAD sedan \"am\" sist misslyckades.\n"
 "Återställer inte till ORIG_HEAD"
 
-#: builtin/am.c:2128
+#: builtin/am.c:2117
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr "Felaktigt värde för --patch-format: %s"
 
-#: builtin/am.c:2164
+#: builtin/am.c:2153
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<flaggor>] [(<mbox> | <Maildir>)...]"
 
-#: builtin/am.c:2165
+#: builtin/am.c:2154
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<flaggor>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2171
+#: builtin/am.c:2160
 msgid "run interactively"
 msgstr "kör interaktivt"
 
-#: builtin/am.c:2173
+#: builtin/am.c:2162
 msgid "historical option -- no-op"
 msgstr "historisk flagga -- no-op"
 
-#: builtin/am.c:2175
+#: builtin/am.c:2164
 msgid "allow fall back on 3way merging if needed"
 msgstr "tillåt falla tillbaka på trevägssammanslagning om nödvändigt"
 
-#: builtin/am.c:2176 builtin/init-db.c:494 builtin/prune-packed.c:58
-#: builtin/repack.c:307 builtin/stash.c:806
+#: builtin/am.c:2165 builtin/init-db.c:494 builtin/prune-packed.c:58
+#: builtin/repack.c:297 builtin/stash.c:812
 msgid "be quiet"
 msgstr "var tyst"
 
-#: builtin/am.c:2178
+#: builtin/am.c:2167
 msgid "add a Signed-off-by line to the commit message"
 msgstr "lägg till \"Signed-off-by\"-rad i incheckningsmeddelandet"
 
-#: builtin/am.c:2181
+#: builtin/am.c:2170
 msgid "recode into utf8 (default)"
 msgstr "koda om till utf8 (standard)"
 
-#: builtin/am.c:2183
+#: builtin/am.c:2172
 msgid "pass -k flag to git-mailinfo"
 msgstr "sänd flaggan -k till git-mailinfo"
 
-#: builtin/am.c:2185
+#: builtin/am.c:2174
 msgid "pass -b flag to git-mailinfo"
 msgstr "sänd flaggan -b till git-mailinfo"
 
-#: builtin/am.c:2187
+#: builtin/am.c:2176
 msgid "pass -m flag to git-mailinfo"
 msgstr "sänd flaggan -m till git-mailinfo"
 
-#: builtin/am.c:2189
+#: builtin/am.c:2178
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "sänd flaggan --keep-cr till git-mailsplit för mbox-formatet"
 
-#: builtin/am.c:2192
+#: builtin/am.c:2181
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr "sänd inte flaggan --keep-cr till git-mailsplit oberoende av am.keepcr"
 
-#: builtin/am.c:2195
+#: builtin/am.c:2184
 msgid "strip everything before a scissors line"
 msgstr "ta bort allting före en saxlinje"
 
-#: builtin/am.c:2197 builtin/am.c:2200 builtin/am.c:2203 builtin/am.c:2206
-#: builtin/am.c:2209 builtin/am.c:2212 builtin/am.c:2215 builtin/am.c:2218
-#: builtin/am.c:2224
+#: builtin/am.c:2186 builtin/am.c:2189 builtin/am.c:2192 builtin/am.c:2195
+#: builtin/am.c:2198 builtin/am.c:2201 builtin/am.c:2204 builtin/am.c:2207
+#: builtin/am.c:2213
 msgid "pass it through git-apply"
 msgstr "sänd det genom git-apply"
 
-#: builtin/am.c:2214 builtin/commit.c:1368 builtin/fmt-merge-msg.c:671
-#: builtin/fmt-merge-msg.c:674 builtin/grep.c:881 builtin/merge.c:249
-#: builtin/pull.c:159 builtin/pull.c:218 builtin/rebase.c:1418
-#: builtin/repack.c:318 builtin/repack.c:322 builtin/repack.c:324
+#: builtin/am.c:2203 builtin/commit.c:1368 builtin/fmt-merge-msg.c:671
+#: builtin/fmt-merge-msg.c:674 builtin/grep.c:883 builtin/merge.c:249
+#: builtin/pull.c:160 builtin/pull.c:219 builtin/rebase.c:1442
+#: builtin/repack.c:308 builtin/repack.c:312 builtin/repack.c:314
 #: builtin/show-branch.c:650 builtin/show-ref.c:172 builtin/tag.c:403
-#: parse-options.h:141 parse-options.h:162 parse-options.h:312
+#: parse-options.h:150 parse-options.h:171 parse-options.h:312
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2220 builtin/branch.c:661 builtin/for-each-ref.c:38
-#: builtin/replace.c:554 builtin/tag.c:437 builtin/verify-tag.c:39
+#: builtin/am.c:2209 builtin/branch.c:661 builtin/for-each-ref.c:38
+#: builtin/replace.c:555 builtin/tag.c:437 builtin/verify-tag.c:38
 msgid "format"
 msgstr "format"
 
-#: builtin/am.c:2221
+#: builtin/am.c:2210
 msgid "format the patch(es) are in"
 msgstr "format för patch(ar)"
 
-#: builtin/am.c:2227
+#: builtin/am.c:2216
 msgid "override error message when patch failure occurs"
 msgstr "överstyr felmeddelanden när patchfel uppstår"
 
-#: builtin/am.c:2229
+#: builtin/am.c:2218
 msgid "continue applying patches after resolving a conflict"
 msgstr "fortsätt applicera patchar efter att ha löst en konflikt"
 
-#: builtin/am.c:2232
+#: builtin/am.c:2221
 msgid "synonyms for --continue"
 msgstr "synonymer till --continue"
 
-#: builtin/am.c:2235
+#: builtin/am.c:2224
 msgid "skip the current patch"
 msgstr "hoppa över den aktuella grenen"
 
-#: builtin/am.c:2238
+#: builtin/am.c:2227
 msgid "restore the original branch and abort the patching operation."
 msgstr "återställ originalgrenen och avbryt patchningen."
 
-#: builtin/am.c:2241
+#: builtin/am.c:2230
 msgid "abort the patching operation but keep HEAD where it is."
 msgstr "avbryt patchningen men behåll HEAD där det är."
 
-#: builtin/am.c:2244
+#: builtin/am.c:2233
 msgid "show the patch being applied."
 msgstr "visa patchen som tillämpas."
 
-#: builtin/am.c:2248
+#: builtin/am.c:2237
 msgid "lie about committer date"
 msgstr "ljug om incheckningsdatum"
 
-#: builtin/am.c:2250
+#: builtin/am.c:2239
 msgid "use current timestamp for author date"
 msgstr "använd nuvarande tidsstämpel för författardatum"
 
-#: builtin/am.c:2252 builtin/commit-tree.c:120 builtin/commit.c:1511
-#: builtin/merge.c:286 builtin/pull.c:193 builtin/rebase.c:489
-#: builtin/rebase.c:1459 builtin/revert.c:117 builtin/tag.c:418
+#: builtin/am.c:2241 builtin/commit-tree.c:120 builtin/commit.c:1511
+#: builtin/merge.c:286 builtin/pull.c:194 builtin/rebase.c:490
+#: builtin/rebase.c:1483 builtin/revert.c:117 builtin/tag.c:418
 msgid "key-id"
 msgstr "nyckel-id"
 
-#: builtin/am.c:2253 builtin/rebase.c:490 builtin/rebase.c:1460
+#: builtin/am.c:2242 builtin/rebase.c:491 builtin/rebase.c:1484
 msgid "GPG-sign commits"
 msgstr "GPG-signera incheckningar"
 
-#: builtin/am.c:2256
+#: builtin/am.c:2245
 msgid "(internal use for git-rebase)"
 msgstr "(används internt av git-rebase)"
 
-#: builtin/am.c:2274
+#: builtin/am.c:2263
 msgid ""
 "The -b/--binary option has been a no-op for long time, and\n"
 "it will be removed. Please do not use it anymore."
@@ -8954,16 +8997,16 @@
 "Flaggan -b/--binary har varit utan funktion länge, och\n"
 "kommer tas bort. Vi ber dig att inte använda den längre."
 
-#: builtin/am.c:2281
+#: builtin/am.c:2270
 msgid "failed to read the index"
 msgstr "misslyckades läsa indexet"
 
-#: builtin/am.c:2296
+#: builtin/am.c:2285
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr "tidigare rebase-katalog %s finns fortfarande, men mbox angavs."
 
-#: builtin/am.c:2320
+#: builtin/am.c:2309
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -8972,11 +9015,11 @@
 "Kvarbliven katalog %s hittades.\n"
 "Använd \"git am --abort\" för att ta bort den."
 
-#: builtin/am.c:2326
+#: builtin/am.c:2315
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "Lösningsoperation pågår inte, vi återupptar inte."
 
-#: builtin/am.c:2336
+#: builtin/am.c:2325
 msgid "interactive mode requires patches on the command line"
 msgstr "interaktivt läge kräver patchar på kommandoraden"
 
@@ -9200,7 +9243,8 @@
 #: builtin/bisect--helper.c:526
 #, c-format
 msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
-msgstr "misslyckades checka ut \"%s\". Försök \"git bisect reset <giltig_gren>\"."
+msgstr ""
+"misslyckades checka ut \"%s\". Försök \"git bisect reset <giltig_gren>\"."
 
 # cogito-relaterat
 #: builtin/bisect--helper.c:547
@@ -9292,154 +9336,154 @@
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms kräver noll eller ett argument"
 
-#: builtin/blame.c:32
+#: builtin/blame.c:31
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
 msgstr "git blame [<flaggor>] [<rev-flaggor>] [<rev>] [--] <fil>"
 
-#: builtin/blame.c:37
+#: builtin/blame.c:36
 msgid "<rev-opts> are documented in git-rev-list(1)"
 msgstr "<rev-flaggor> dokumenteras i git-rev-list(1)"
 
-#: builtin/blame.c:410
+#: builtin/blame.c:409
 #, c-format
 msgid "expecting a color: %s"
 msgstr "förväntade en färg: %s"
 
-#: builtin/blame.c:417
+#: builtin/blame.c:416
 msgid "must end with a color"
 msgstr "måste sluta med en färg"
 
-#: builtin/blame.c:730
+#: builtin/blame.c:729
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr "felaktig färg \"%s\" i color.blame.repeatedLines"
 
-#: builtin/blame.c:748
+#: builtin/blame.c:747
 msgid "invalid value for blame.coloring"
 msgstr "ogiltigt värde för blame.coloring"
 
-#: builtin/blame.c:823
+#: builtin/blame.c:822
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "kan inte hitta revision %s att ignorera"
 
-#: builtin/blame.c:845
+#: builtin/blame.c:844
 msgid "Show blame entries as we find them, incrementally"
 msgstr "Visa klandringsposter när vi hittar dem, interaktivt"
 
-#: builtin/blame.c:846
+#: builtin/blame.c:845
 msgid "Show blank SHA-1 for boundary commits (Default: off)"
 msgstr "Visa blank SHA-1 för gränsincheckningar (Standard: av)"
 
-#: builtin/blame.c:847
+#: builtin/blame.c:846
 msgid "Do not treat root commits as boundaries (Default: off)"
 msgstr "Behandla inte rotincheckningar som gränser (Standard: av)"
 
-#: builtin/blame.c:848
+#: builtin/blame.c:847
 msgid "Show work cost statistics"
 msgstr "Visa statistik över arbetskostnad"
 
-#: builtin/blame.c:849
+#: builtin/blame.c:848
 msgid "Force progress reporting"
 msgstr "Tvinga förloppsrapportering"
 
-#: builtin/blame.c:850
+#: builtin/blame.c:849
 msgid "Show output score for blame entries"
 msgstr "Visa utdatapoäng för klandringsposter"
 
-#: builtin/blame.c:851
+#: builtin/blame.c:850
 msgid "Show original filename (Default: auto)"
 msgstr "Visa originalfilnamn (Standard: auto)"
 
-#: builtin/blame.c:852
+#: builtin/blame.c:851
 msgid "Show original linenumber (Default: off)"
 msgstr "Visa ursprungligt radnummer (Standard: av)"
 
-#: builtin/blame.c:853
+#: builtin/blame.c:852
 msgid "Show in a format designed for machine consumption"
 msgstr "Visa i ett format avsett för maskinkonsumtion"
 
-#: builtin/blame.c:854
+#: builtin/blame.c:853
 msgid "Show porcelain format with per-line commit information"
 msgstr "Visa porslinsformat med per-rad-incheckningsinformation"
 
-#: builtin/blame.c:855
+#: builtin/blame.c:854
 msgid "Use the same output mode as git-annotate (Default: off)"
 msgstr "Använd samma utdataläge som git-annotate (Standard: av)"
 
-#: builtin/blame.c:856
+#: builtin/blame.c:855
 msgid "Show raw timestamp (Default: off)"
 msgstr "Visa rå tidsstämpel (Standard: av)"
 
-#: builtin/blame.c:857
+#: builtin/blame.c:856
 msgid "Show long commit SHA1 (Default: off)"
 msgstr "Visa lång inchecknings-SHA1 (Standard: av)"
 
-#: builtin/blame.c:858
+#: builtin/blame.c:857
 msgid "Suppress author name and timestamp (Default: off)"
 msgstr "Undertryck författarnamn och tidsstämpel (Standard: av)"
 
-#: builtin/blame.c:859
+#: builtin/blame.c:858
 msgid "Show author email instead of name (Default: off)"
 msgstr "Visa författarens e-post istället för namn (Standard: av)"
 
-#: builtin/blame.c:860
+#: builtin/blame.c:859
 msgid "Ignore whitespace differences"
 msgstr "Ignorera ändringar i blanksteg"
 
-#: builtin/blame.c:861 builtin/log.c:1646
+#: builtin/blame.c:860 builtin/log.c:1630
 msgid "rev"
 msgstr "rev"
 
-#: builtin/blame.c:861
+#: builtin/blame.c:860
 msgid "Ignore <rev> when blaming"
 msgstr "ignorera <rev> vid klandren"
 
-#: builtin/blame.c:862
+#: builtin/blame.c:861
 msgid "Ignore revisions from <file>"
 msgstr "ignorera revisioner från <fil>"
 
-#: builtin/blame.c:863
+#: builtin/blame.c:862
 msgid "color redundant metadata from previous line differently"
 msgstr "färglägg redundant metadata från tidigare rader annorlunda"
 
-#: builtin/blame.c:864
+#: builtin/blame.c:863
 msgid "color lines by age"
 msgstr "färglägg rader efter ålder"
 
-#: builtin/blame.c:871
+#: builtin/blame.c:870
 msgid "Use an experimental heuristic to improve diffs"
 msgstr "Använd en experimentell algoritm för att förbättra diffar"
 
-#: builtin/blame.c:873
+#: builtin/blame.c:872
 msgid "Spend extra cycles to find better match"
 msgstr "Slösa extra cykler med att hitta bättre träff"
 
-#: builtin/blame.c:874
+#: builtin/blame.c:873
 msgid "Use revisions from <file> instead of calling git-rev-list"
 msgstr "Använd revisioner från <fil> istället för att anropa git-rev-list"
 
-#: builtin/blame.c:875
+#: builtin/blame.c:874
 msgid "Use <file>'s contents as the final image"
 msgstr "Använd <fil>s innehåll som slutgiltig bild"
 
-#: builtin/blame.c:876 builtin/blame.c:877
+#: builtin/blame.c:875 builtin/blame.c:876
 msgid "score"
 msgstr "poäng"
 
-#: builtin/blame.c:876
+#: builtin/blame.c:875
 msgid "Find line copies within and across files"
 msgstr "Hitta kopierade rader inuti och mellan filer"
 
-#: builtin/blame.c:877
+#: builtin/blame.c:876
 msgid "Find line movements within and across files"
 msgstr "Hitta flyttade rader inuti och mellan filer"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:877
 msgid "n,m"
 msgstr "n,m"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:877
 msgid "Process only line range n,m, counting from 1"
 msgstr "Behandla endast radintervallet n,m, med början på 1"
 
@@ -9676,7 +9720,7 @@
 msgid "do not use"
 msgstr "använd ej"
 
-#: builtin/branch.c:626 builtin/rebase.c:485
+#: builtin/branch.c:626 builtin/rebase.c:486
 msgid "upstream"
 msgstr "uppströms"
 
@@ -9783,11 +9827,11 @@
 msgstr "sortering och filtrering skiljer gemener och VERSALER"
 
 #: builtin/branch.c:661 builtin/for-each-ref.c:38 builtin/tag.c:438
-#: builtin/verify-tag.c:39
+#: builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "format att använda för utdata"
 
-#: builtin/branch.c:684 builtin/clone.c:761
+#: builtin/branch.c:684 builtin/clone.c:760
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD hittades inte under refs/heads!"
 
@@ -9889,7 +9933,7 @@
 msgid "Need a repository to unbundle."
 msgstr "Behöver ett arkiv för att packa upp ett paket (bundle)."
 
-#: builtin/cat-file.c:594
+#: builtin/cat-file.c:595
 msgid ""
 "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
 "p | <type> | --textconv | --filters) [--path=<path>] <object>"
@@ -9897,7 +9941,7 @@
 "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
 "p | <typ> | --textconv | --filters) [--path=<sökväg>] <objekt>"
 
-#: builtin/cat-file.c:595
+#: builtin/cat-file.c:596
 msgid ""
 "git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
 "filters]"
@@ -9905,72 +9949,72 @@
 "git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
 "filters]"
 
-#: builtin/cat-file.c:616
+#: builtin/cat-file.c:617
 msgid "only one batch option may be specified"
 msgstr "endast en buntflagga kan anges"
 
-#: builtin/cat-file.c:634
+#: builtin/cat-file.c:635
 msgid "<type> can be one of: blob, tree, commit, tag"
 msgstr "<typ> kan vara en av: blob, tree, commit, tag"
 
-#: builtin/cat-file.c:635
+#: builtin/cat-file.c:636
 msgid "show object type"
 msgstr "visa objekttyp"
 
-#: builtin/cat-file.c:636
+#: builtin/cat-file.c:637
 msgid "show object size"
 msgstr "visa objektstorlek"
 
-#: builtin/cat-file.c:638
+#: builtin/cat-file.c:639
 msgid "exit with zero when there's no error"
 msgstr "avsluta med noll när det inte uppstått något fel"
 
-#: builtin/cat-file.c:639
+#: builtin/cat-file.c:640
 msgid "pretty-print object's content"
 msgstr "visa objektets innehåll snyggt"
 
-#: builtin/cat-file.c:641
+#: builtin/cat-file.c:642
 msgid "for blob objects, run textconv on object's content"
 msgstr "för blob-objekt, kör filter på objektets innehåll"
 
-#: builtin/cat-file.c:643
+#: builtin/cat-file.c:644
 msgid "for blob objects, run filters on object's content"
 msgstr "för blob-objekt, kör filger på objektets innehåll"
 
-#: builtin/cat-file.c:644 git-submodule.sh:936
+#: builtin/cat-file.c:645 git-submodule.sh:936
 msgid "blob"
 msgstr "blob"
 
-#: builtin/cat-file.c:645
+#: builtin/cat-file.c:646
 msgid "use a specific path for --textconv/--filters"
 msgstr "använd specifik sökväg för --textconv/--filters"
 
-#: builtin/cat-file.c:647
+#: builtin/cat-file.c:648
 msgid "allow -s and -t to work with broken/corrupt objects"
 msgstr "låter -s och -t att fungera med trasiga/sönderskrivna objekt"
 
-#: builtin/cat-file.c:648
+#: builtin/cat-file.c:649
 msgid "buffer --batch output"
 msgstr "buffra utdata från --batch"
 
-#: builtin/cat-file.c:650
+#: builtin/cat-file.c:651
 msgid "show info and content of objects fed from the standard input"
 msgstr "visa information och innehåll för objekt som listas på standard in"
 
-#: builtin/cat-file.c:654
+#: builtin/cat-file.c:655
 msgid "show info about objects fed from the standard input"
 msgstr "visa information för objekt som listas på standard in"
 
-#: builtin/cat-file.c:658
+#: builtin/cat-file.c:659
 msgid "follow in-tree symlinks (used with --batch or --batch-check)"
 msgstr ""
 "följ symboliska länkar i trädet (använd med --batch eller --batch-check)"
 
-#: builtin/cat-file.c:660
+#: builtin/cat-file.c:661
 msgid "show all objects with --batch or --batch-check"
 msgstr "visa alla objekt med --batch eller --batch-check"
 
-#: builtin/cat-file.c:662
+#: builtin/cat-file.c:663
 msgid "do not order --batch-all-objects output"
 msgstr "ordna inte --batch-all-objects output"
 
@@ -9998,8 +10042,8 @@
 msgid "terminate input and output records by a NUL character"
 msgstr "avsluta in- och utdataposter med NUL-tecken"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1433 builtin/gc.c:538
-#: builtin/worktree.c:507
+#: builtin/check-ignore.c:21 builtin/checkout.c:1433 builtin/gc.c:537
+#: builtin/worktree.c:506
 msgid "suppress progress reporting"
 msgstr "undertryck förloppsrapportering"
 
@@ -10091,7 +10135,7 @@
 #: builtin/checkout-index.c:178 builtin/column.c:31
 #: builtin/submodule--helper.c:1373 builtin/submodule--helper.c:1376
 #: builtin/submodule--helper.c:1384 builtin/submodule--helper.c:1857
-#: builtin/worktree.c:680
+#: builtin/worktree.c:679
 msgid "string"
 msgstr "sträng"
 
@@ -10119,98 +10163,98 @@
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<flaggor>] [--source=<gren>] <fil>..."
 
-#: builtin/checkout.c:172 builtin/checkout.c:211
+#: builtin/checkout.c:173 builtin/checkout.c:212
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "sökvägen \"%s\" har inte vår version"
 
-#: builtin/checkout.c:174 builtin/checkout.c:213
+#: builtin/checkout.c:175 builtin/checkout.c:214
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "sökvägen \"%s\" har inte deras version"
 
-#: builtin/checkout.c:190
+#: builtin/checkout.c:191
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "sökvägen \"%s\" innehåller inte alla nödvändiga versioner"
 
-#: builtin/checkout.c:240
+#: builtin/checkout.c:241
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "sökvägen \"%s\" innehåller inte nödvändiga versioner"
 
-#: builtin/checkout.c:258
+#: builtin/checkout.c:259
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "sökväg \"%s\": kan inte slå ihop"
 
-#: builtin/checkout.c:274
+#: builtin/checkout.c:275
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "Kunde inte lägga till sammanslagningsresultat för \"%s\""
 
-#: builtin/checkout.c:374
+#: builtin/checkout.c:375
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "Återskapade %d sammanslagningskonflikt"
 msgstr[1] "Återskapade %d sammanslagningskonflikter"
 
-#: builtin/checkout.c:379
+#: builtin/checkout.c:380
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "Uppdaterade %d sökväg från %s"
 msgstr[1] "Uppdaterade %d sökvägar från %s"
 
-#: builtin/checkout.c:386
+#: builtin/checkout.c:387
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "Uppdaterade %d sökväg från indexet"
 msgstr[1] "Uppdaterade %d sökvägar från indexet"
 
-#: builtin/checkout.c:409 builtin/checkout.c:412 builtin/checkout.c:415
-#: builtin/checkout.c:419
+#: builtin/checkout.c:410 builtin/checkout.c:413 builtin/checkout.c:416
+#: builtin/checkout.c:420
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "\"%s\" kan inte användas vid uppdatering av sökvägar"
 
-#: builtin/checkout.c:422 builtin/checkout.c:425
+#: builtin/checkout.c:423 builtin/checkout.c:426
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr "\"%s\" kan inte användas med %s"
 
-#: builtin/checkout.c:429
+#: builtin/checkout.c:430
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr "Kan inte uppdatera sökvägar och växla till grenen \"%s\" samtidigt."
 
-#: builtin/checkout.c:433
+#: builtin/checkout.c:434
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "varken \"%s\" eller \"%s\" har angivits"
 
-#: builtin/checkout.c:437
+#: builtin/checkout.c:438
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "\"%s\" måste användas när \"%s\" inte anges"
 
-#: builtin/checkout.c:442 builtin/checkout.c:447
+#: builtin/checkout.c:443 builtin/checkout.c:448
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "\"%s\" eller \"%s\" kan inte användas med %s"
 
-#: builtin/checkout.c:506 builtin/checkout.c:513
+#: builtin/checkout.c:507 builtin/checkout.c:514
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "sökvägen \"%s\" har inte slagits ihop"
 
-#: builtin/checkout.c:679
+#: builtin/checkout.c:680
 msgid "you need to resolve your current index first"
 msgstr "du måste lösa ditt befintliga index först"
 
-#: builtin/checkout.c:729
+#: builtin/checkout.c:730
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -10219,11 +10263,6 @@
 "kan inte fortsätta med köade ändringar i följande filer:\n"
 "%s"
 
-#: builtin/checkout.c:736
-#, c-format
-msgid "staged changes in the following files may be lost: %s"
-msgstr "köade ändringar i följande filer kan gå förlorade: %s"
-
 #: builtin/checkout.c:833
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
@@ -10233,7 +10272,7 @@
 msgid "HEAD is now at"
 msgstr "HEAD är nu på"
 
-#: builtin/checkout.c:879 builtin/clone.c:714
+#: builtin/checkout.c:879 builtin/clone.c:713
 msgid "unable to update HEAD"
 msgstr "kan inte uppdatera HEAD"
 
@@ -10347,7 +10386,7 @@
 "\"%s\" kan vara både en lokal fil och en spårande gren.\n"
 "Använd -- (och möjligen --no-guess) för att göra otvetydig"
 
-#: builtin/checkout.c:1243 builtin/worktree.c:291 builtin/worktree.c:456
+#: builtin/checkout.c:1243 builtin/worktree.c:290 builtin/worktree.c:455
 #, c-format
 msgid "invalid reference: %s"
 msgstr "felaktig referens: %s"
@@ -10450,9 +10489,9 @@
 msgid "missing branch or commit argument"
 msgstr "saknar gren- eller incheckingsargument"
 
-#: builtin/checkout.c:1437 builtin/clone.c:91 builtin/fetch.c:151
-#: builtin/merge.c:285 builtin/pull.c:137 builtin/push.c:575
-#: builtin/send-pack.c:174
+#: builtin/checkout.c:1437 builtin/clone.c:90 builtin/commit-graph.c:59
+#: builtin/commit-graph.c:180 builtin/fetch.c:166 builtin/merge.c:285
+#: builtin/pull.c:138 builtin/push.c:562 builtin/send-pack.c:174
 msgid "force progress reporting"
 msgstr "tvinga förloppsrapportering"
 
@@ -10460,7 +10499,7 @@
 msgid "perform a 3-way merge with the new branch"
 msgstr "utför en 3-vägssammanslagning för den nya grenen"
 
-#: builtin/checkout.c:1439 builtin/log.c:1634 parse-options.h:318
+#: builtin/checkout.c:1439 builtin/log.c:1618 parse-options.h:318
 msgid "style"
 msgstr "stil"
 
@@ -10468,7 +10507,7 @@
 msgid "conflict style (merge or diff3)"
 msgstr "konfliktstil (merge eller diff3)"
 
-#: builtin/checkout.c:1452 builtin/worktree.c:504
+#: builtin/checkout.c:1452 builtin/worktree.c:503
 msgid "detach HEAD at named commit"
 msgstr "koppla från HEAD vid namngiven incheckning"
 
@@ -10541,7 +10580,8 @@
 #: builtin/checkout.c:1638
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
-msgstr "\"%s\" är inte en incheckning och grenen \"%s\" kan inte skapas från den"
+msgstr ""
+"\"%s\" är inte en incheckning och grenen \"%s\" kan inte skapas från den"
 
 #: builtin/checkout.c:1642
 #, c-format
@@ -10585,9 +10625,9 @@
 "föredra en fjärr, t.ex fjärren \"origin\" kan du ställa in\n"
 "checkout.defaultRemote=origin i din konfiguration."
 
-#: builtin/checkout.c:1691 builtin/checkout.c:1693 builtin/checkout.c:1733
-#: builtin/checkout.c:1735 builtin/clone.c:121 builtin/remote.c:169
-#: builtin/remote.c:171 builtin/worktree.c:500 builtin/worktree.c:502
+#: builtin/checkout.c:1691 builtin/checkout.c:1693 builtin/checkout.c:1742
+#: builtin/checkout.c:1744 builtin/clone.c:120 builtin/remote.c:169
+#: builtin/remote.c:171 builtin/worktree.c:499 builtin/worktree.c:501
 msgid "branch"
 msgstr "gren"
 
@@ -10611,39 +10651,39 @@
 msgid "use overlay mode (default)"
 msgstr "använd överläggsläge (standard)"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1743
 msgid "create and switch to a new branch"
 msgstr "skapa och växla till en ny gren"
 
-#: builtin/checkout.c:1736
+#: builtin/checkout.c:1745
 msgid "create/reset and switch to a branch"
 msgstr "skapa/nollställ och växla till en gren"
 
-#: builtin/checkout.c:1738
+#: builtin/checkout.c:1747
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "förutspå \"git checkout <gren-saknas>\""
 
-#: builtin/checkout.c:1740
+#: builtin/checkout.c:1749
 msgid "throw away local modifications"
 msgstr "kasta bort lokala ändringar"
 
-#: builtin/checkout.c:1772
-msgid "where the checkout from"
-msgstr "källa till utcheckning"
+#: builtin/checkout.c:1781
+msgid "which tree-ish to checkout from"
+msgstr "vilken träd-igt att checka ut från"
 
-#: builtin/checkout.c:1774
+#: builtin/checkout.c:1783
 msgid "restore the index"
 msgstr "återställ indexet"
 
-#: builtin/checkout.c:1776
+#: builtin/checkout.c:1785
 msgid "restore the working tree (default)"
 msgstr "återställ arbetskatalogen (förval)"
 
-#: builtin/checkout.c:1778
+#: builtin/checkout.c:1787
 msgid "ignore unmerged entries"
 msgstr "ignorera ej sammanslagna poster"
 
-#: builtin/checkout.c:1779
+#: builtin/checkout.c:1788
 msgid "use overlay mode"
 msgstr "använd överläggsläge"
 
@@ -10684,7 +10724,7 @@
 msgid "could not lstat %s\n"
 msgstr "kunde inte ta status (\"lstat\") på %s\n"
 
-#: builtin/clean.c:300 git-add--interactive.perl:593
+#: builtin/clean.c:301 git-add--interactive.perl:593
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -10697,7 +10737,7 @@
 "foo        - markera post baserad på unikt prefix\n"
 "           - (tomt) markera ingenting\n"
 
-#: builtin/clean.c:304 git-add--interactive.perl:602
+#: builtin/clean.c:305 git-add--interactive.perl:602
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -10718,38 +10758,38 @@
 "*          - välj alla poster\n"
 "           - (tomt) avsluta markering\n"
 
-#: builtin/clean.c:520 git-add--interactive.perl:568
+#: builtin/clean.c:521 git-add--interactive.perl:568
 #: git-add--interactive.perl:573
 #, c-format, perl-format
 msgid "Huh (%s)?\n"
 msgstr "Vadå (%s)?\n"
 
-#: builtin/clean.c:662
+#: builtin/clean.c:663
 #, c-format
 msgid "Input ignore patterns>> "
 msgstr "Ange ignoreringsmönster>>"
 
-#: builtin/clean.c:699
+#: builtin/clean.c:700
 #, c-format
 msgid "WARNING: Cannot find items matched by: %s"
 msgstr "VARNING: Hittar inte poster som motsvarar: %s"
 
-#: builtin/clean.c:720
+#: builtin/clean.c:721
 msgid "Select items to delete"
 msgstr "Välj poster att ta bort"
 
 #. TRANSLATORS: Make sure to keep [y/N] as is
-#: builtin/clean.c:761
+#: builtin/clean.c:762
 #, c-format
 msgid "Remove %s [y/N]? "
 msgstr "Ta bort %s [Y=ja / N=nej]? "
 
-#: builtin/clean.c:786 git-add--interactive.perl:1763
+#: builtin/clean.c:787 git-add--interactive.perl:1763
 #, c-format
 msgid "Bye.\n"
 msgstr "Hej då.\n"
 
-#: builtin/clean.c:794
+#: builtin/clean.c:795
 msgid ""
 "clean               - start cleaning\n"
 "filter by pattern   - exclude items from deletion\n"
@@ -10767,64 +10807,64 @@
 "help                - denna skärm\n"
 "?                   - hjälp för kommandoval"
 
-#: builtin/clean.c:821 git-add--interactive.perl:1849
+#: builtin/clean.c:822 git-add--interactive.perl:1849
 msgid "*** Commands ***"
 msgstr "*** Kommandon ***"
 
-#: builtin/clean.c:822 git-add--interactive.perl:1846
+#: builtin/clean.c:823 git-add--interactive.perl:1846
 msgid "What now"
 msgstr "Vad nu"
 
-#: builtin/clean.c:830
+#: builtin/clean.c:831
 msgid "Would remove the following item:"
 msgid_plural "Would remove the following items:"
 msgstr[0] "Skulle ta bort följande post:"
 msgstr[1] "Skulle ta bort följande poster:"
 
-#: builtin/clean.c:846
+#: builtin/clean.c:847
 msgid "No more files to clean, exiting."
 msgstr "Inga fler filer att städa, avslutar."
 
-#: builtin/clean.c:908
+#: builtin/clean.c:909
 msgid "do not print names of files removed"
 msgstr "skriv inte ut namn på borttagna filer"
 
-#: builtin/clean.c:910
+#: builtin/clean.c:911
 msgid "force"
 msgstr "tvinga"
 
-#: builtin/clean.c:911
+#: builtin/clean.c:912
 msgid "interactive cleaning"
 msgstr "städa interaktivt"
 
-#: builtin/clean.c:913
+#: builtin/clean.c:914
 msgid "remove whole directories"
 msgstr "ta bort hela kataloger"
 
-#: builtin/clean.c:914 builtin/describe.c:546 builtin/describe.c:548
-#: builtin/grep.c:899 builtin/log.c:186 builtin/log.c:188
-#: builtin/ls-files.c:557 builtin/name-rev.c:413 builtin/name-rev.c:415
+#: builtin/clean.c:915 builtin/describe.c:548 builtin/describe.c:550
+#: builtin/grep.c:901 builtin/log.c:176 builtin/log.c:178
+#: builtin/ls-files.c:557 builtin/name-rev.c:417 builtin/name-rev.c:419
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr "mönster"
 
-#: builtin/clean.c:915
+#: builtin/clean.c:916
 msgid "add <pattern> to ignore rules"
 msgstr "lägg till <mönster> till ignoreringsregler"
 
-#: builtin/clean.c:916
+#: builtin/clean.c:917
 msgid "remove ignored files, too"
 msgstr "ta även bort ignorerade filer"
 
-#: builtin/clean.c:918
+#: builtin/clean.c:919
 msgid "remove only ignored files"
 msgstr "ta endast bort ignorerade filer"
 
-#: builtin/clean.c:936
+#: builtin/clean.c:937
 msgid "-x and -X cannot be used together"
 msgstr "-x och -X kan inte användas samtidigt"
 
-#: builtin/clean.c:940
+#: builtin/clean.c:941
 msgid ""
 "clean.requireForce set to true and neither -i, -n, nor -f given; refusing to "
 "clean"
@@ -10832,7 +10872,7 @@
 "clean.requireForce satt till true, men varken -i, -n eller -f angavs; vägrar "
 "städa"
 
-#: builtin/clean.c:943
+#: builtin/clean.c:944
 msgid ""
 "clean.requireForce defaults to true and neither -i, -n, nor -f given; "
 "refusing to clean"
@@ -10840,162 +10880,162 @@
 "clean.requireForce har standardvärdet true och varken -i, -n eller -f "
 "angavs; vägrar städa"
 
-#: builtin/clone.c:46
+#: builtin/clone.c:45
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<flaggor>] [--] <arkiv> [<kat>]"
 
-#: builtin/clone.c:93
+#: builtin/clone.c:92
 msgid "don't create a checkout"
 msgstr "skapa inte någon utcheckning"
 
-#: builtin/clone.c:94 builtin/clone.c:96 builtin/init-db.c:489
+#: builtin/clone.c:93 builtin/clone.c:95 builtin/init-db.c:489
 msgid "create a bare repository"
 msgstr "skapa ett naket (\"bare\") arkiv"
 
-#: builtin/clone.c:98
+#: builtin/clone.c:97
 msgid "create a mirror repository (implies bare)"
 msgstr "skapa ett spegelarkiv (implicerar \"bare\")"
 
-#: builtin/clone.c:100
+#: builtin/clone.c:99
 msgid "to clone from a local repository"
 msgstr "för att klona från ett lokalt arkiv"
 
-#: builtin/clone.c:102
+#: builtin/clone.c:101
 msgid "don't use local hardlinks, always copy"
 msgstr "skapa inte lokala hårda länkar, kopiera alltid"
 
-#: builtin/clone.c:104
+#: builtin/clone.c:103
 msgid "setup as shared repository"
 msgstr "skapa som ett delat arkiv"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:106
 msgid "pathspec"
 msgstr "sökvägsangivelse"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:106
 msgid "initialize submodules in the clone"
 msgstr "initiera undermoduler i klonen"
 
-#: builtin/clone.c:110
+#: builtin/clone.c:109
 msgid "number of submodules cloned in parallel"
 msgstr "antal undermoduler som klonas parallellt"
 
-#: builtin/clone.c:111 builtin/init-db.c:486
+#: builtin/clone.c:110 builtin/init-db.c:486
 msgid "template-directory"
 msgstr "mallkatalog"
 
-#: builtin/clone.c:112 builtin/init-db.c:487
+#: builtin/clone.c:111 builtin/init-db.c:487
 msgid "directory from which templates will be used"
 msgstr "katalog att använda mallar från"
 
-#: builtin/clone.c:114 builtin/clone.c:116 builtin/submodule--helper.c:1380
+#: builtin/clone.c:113 builtin/clone.c:115 builtin/submodule--helper.c:1380
 #: builtin/submodule--helper.c:1860
 msgid "reference repository"
 msgstr "referensarkiv"
 
-#: builtin/clone.c:118 builtin/submodule--helper.c:1382
+#: builtin/clone.c:117 builtin/submodule--helper.c:1382
 #: builtin/submodule--helper.c:1862
 msgid "use --reference only while cloning"
 msgstr "använd --reference endast under kloningen"
 
-#: builtin/clone.c:119 builtin/column.c:27 builtin/merge-file.c:46
-#: builtin/pack-objects.c:3308 builtin/repack.c:330
+#: builtin/clone.c:118 builtin/column.c:27 builtin/merge-file.c:46
+#: builtin/pack-objects.c:3294 builtin/repack.c:320
 msgid "name"
 msgstr "namn"
 
-#: builtin/clone.c:120
+#: builtin/clone.c:119
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "använd <namn> istället för \"origin\" för att spåra uppströms"
 
-#: builtin/clone.c:122
+#: builtin/clone.c:121
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "checka ut <gren> istället för fjärrens HEAD"
 
-#: builtin/clone.c:124
+#: builtin/clone.c:123
 msgid "path to git-upload-pack on the remote"
 msgstr "sökväg till git-upload-pack på fjärren"
 
-#: builtin/clone.c:125 builtin/fetch.c:152 builtin/grep.c:838
-#: builtin/pull.c:226
+#: builtin/clone.c:124 builtin/fetch.c:167 builtin/grep.c:840
+#: builtin/pull.c:227
 msgid "depth"
 msgstr "djup"
 
-#: builtin/clone.c:126
+#: builtin/clone.c:125
 msgid "create a shallow clone of that depth"
 msgstr "skapa en grund klon på detta djup"
 
-#: builtin/clone.c:127 builtin/fetch.c:154 builtin/pack-objects.c:3297
+#: builtin/clone.c:126 builtin/fetch.c:169 builtin/pack-objects.c:3283
 msgid "time"
 msgstr "tid"
 
-#: builtin/clone.c:128
+#: builtin/clone.c:127
 msgid "create a shallow clone since a specific time"
 msgstr "skapa en grund klon från en angiven tidpunkt"
 
-#: builtin/clone.c:129 builtin/fetch.c:156 builtin/fetch.c:179
-#: builtin/rebase.c:1395
+#: builtin/clone.c:128 builtin/fetch.c:171 builtin/fetch.c:194
+#: builtin/rebase.c:1417
 msgid "revision"
 msgstr "revision"
 
-#: builtin/clone.c:130 builtin/fetch.c:157
+#: builtin/clone.c:129 builtin/fetch.c:172
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "fördjupa historik för grund klon, exkludera revisionen"
 
-#: builtin/clone.c:132
+#: builtin/clone.c:131
 msgid "clone only one branch, HEAD or --branch"
 msgstr "klona endast en gren, HEAD eller --branch"
 
-#: builtin/clone.c:134
+#: builtin/clone.c:133
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr "klona inga taggar och gör att senare hämtningar inte följer dem"
 
-#: builtin/clone.c:136
+#: builtin/clone.c:135
 msgid "any cloned submodules will be shallow"
 msgstr "klonade undermoduler kommer vara grunda"
 
-#: builtin/clone.c:137 builtin/init-db.c:495
+#: builtin/clone.c:136 builtin/init-db.c:495
 msgid "gitdir"
 msgstr "gitkat"
 
-#: builtin/clone.c:138 builtin/init-db.c:496
+#: builtin/clone.c:137 builtin/init-db.c:496
 msgid "separate git dir from working tree"
 msgstr "separera gitkatalogen från arbetskatalogen"
 
-#: builtin/clone.c:139
+#: builtin/clone.c:138
 msgid "key=value"
 msgstr "nyckel=värde"
 
-#: builtin/clone.c:140
+#: builtin/clone.c:139
 msgid "set config inside the new repository"
 msgstr "ställ in konfiguration i det nya arkivet"
 
-#: builtin/clone.c:142 builtin/fetch.c:174 builtin/ls-remote.c:76
-#: builtin/push.c:585 builtin/send-pack.c:172
+#: builtin/clone.c:141 builtin/fetch.c:189 builtin/ls-remote.c:76
+#: builtin/push.c:572 builtin/send-pack.c:172
 msgid "server-specific"
 msgstr "serverspecifik"
 
-#: builtin/clone.c:142 builtin/fetch.c:174 builtin/ls-remote.c:76
-#: builtin/push.c:585 builtin/send-pack.c:173
+#: builtin/clone.c:141 builtin/fetch.c:189 builtin/ls-remote.c:76
+#: builtin/push.c:572 builtin/send-pack.c:173
 msgid "option to transmit"
 msgstr ""
 "inget att checka in\n"
 "flagga att sända"
 
-#: builtin/clone.c:143 builtin/fetch.c:175 builtin/pull.c:239
-#: builtin/push.c:586
+#: builtin/clone.c:142 builtin/fetch.c:190 builtin/pull.c:240
+#: builtin/push.c:573
 msgid "use IPv4 addresses only"
 msgstr "använd endast IPv4-adresser"
 
-#: builtin/clone.c:145 builtin/fetch.c:177 builtin/pull.c:242
-#: builtin/push.c:588
+#: builtin/clone.c:144 builtin/fetch.c:192 builtin/pull.c:243
+#: builtin/push.c:575
 msgid "use IPv6 addresses only"
 msgstr "använd endast IPv6-adresser"
 
-#: builtin/clone.c:149
+#: builtin/clone.c:148
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "klonade undermoduler kommer använda sin fjärrspårningsgren"
 
-#: builtin/clone.c:285
+#: builtin/clone.c:284
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -11003,47 +11043,42 @@
 "Kunde inte gissa katalognamn.\n"
 "Ange en katalog på kommandoraden"
 
-#: builtin/clone.c:338
+#: builtin/clone.c:337
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "info: Kan inte skapa alternativ för \"%s\": %s\n"
 
-#: builtin/clone.c:411
+#: builtin/clone.c:410
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s finns och är ingen katalog"
 
-#: builtin/clone.c:428
+#: builtin/clone.c:427
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "misslyckades starta iterator över \"%s\""
 
-#: builtin/clone.c:453
-#, c-format
-msgid "failed to unlink '%s'"
-msgstr "misslyckades ta bort länken \"%s\""
-
-#: builtin/clone.c:458
+#: builtin/clone.c:457
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "misslyckades skapa länken \"%s\""
 
-#: builtin/clone.c:462
+#: builtin/clone.c:461
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "misslyckades kopiera filen till \"%s\""
 
-#: builtin/clone.c:467
+#: builtin/clone.c:466
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "misslyckades iterera över \"%s\""
 
-#: builtin/clone.c:492
+#: builtin/clone.c:491
 #, c-format
 msgid "done.\n"
 msgstr "klart.\n"
 
-#: builtin/clone.c:506
+#: builtin/clone.c:505
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -11053,133 +11088,133 @@
 "Du kan inspektera det som checkades ut med \"git status\"\n"
 "och försöka med \"git restore -source=HEAD :/\"\n"
 
-#: builtin/clone.c:583
+#: builtin/clone.c:582
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "Kunde inte hitta fjärrgrenen %s för att klona."
 
-#: builtin/clone.c:702
+#: builtin/clone.c:701
 #, c-format
 msgid "unable to update %s"
 msgstr "kan inte uppdatera %s"
 
-#: builtin/clone.c:752
+#: builtin/clone.c:751
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 "HEAD hos fjärren pekar på en obefintlig referens, kan inte checka ut.\n"
 
-#: builtin/clone.c:783
+#: builtin/clone.c:782
 msgid "unable to checkout working tree"
 msgstr "kunde inte checka ut arbetskatalogen"
 
-#: builtin/clone.c:833
+#: builtin/clone.c:832
 msgid "unable to write parameters to config file"
 msgstr "kunde inte skriva parametrar till konfigurationsfilen"
 
-#: builtin/clone.c:896
+#: builtin/clone.c:895
 msgid "cannot repack to clean up"
 msgstr "kan inte packa om för att städa upp"
 
-#: builtin/clone.c:898
+#: builtin/clone.c:897
 msgid "cannot unlink temporary alternates file"
 msgstr "kunde inte ta bort temporär \"alternates\"-fil"
 
-#: builtin/clone.c:938 builtin/receive-pack.c:1950
+#: builtin/clone.c:937 builtin/receive-pack.c:1948
 msgid "Too many arguments."
 msgstr "För många argument."
 
-#: builtin/clone.c:942
+#: builtin/clone.c:941
 msgid "You must specify a repository to clone."
 msgstr "Du måste ange ett arkiv att klona."
 
-#: builtin/clone.c:955
+#: builtin/clone.c:954
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "flaggorna --bare och --origin %s är inkompatibla."
 
-#: builtin/clone.c:958
+#: builtin/clone.c:957
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "flaggorna --bare och --separate-git-dir är inkompatibla."
 
-#: builtin/clone.c:971
+#: builtin/clone.c:970
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "arkivet \"%s\" finns inte"
 
-#: builtin/clone.c:977 builtin/fetch.c:1653
+#: builtin/clone.c:976 builtin/fetch.c:1790
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "djupet %s är inte ett positivt tal"
 
-#: builtin/clone.c:987
+#: builtin/clone.c:986
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "destinationssökvägen \"%s\" finns redan och är inte en tom katalog."
 
-#: builtin/clone.c:997
+#: builtin/clone.c:996
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "arbetsträdet \"%s\" finns redan."
 
-#: builtin/clone.c:1012 builtin/clone.c:1033 builtin/difftool.c:264
-#: builtin/worktree.c:303 builtin/worktree.c:335
+#: builtin/clone.c:1011 builtin/clone.c:1032 builtin/difftool.c:271
+#: builtin/log.c:1785 builtin/worktree.c:302 builtin/worktree.c:334
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "kunde inte skapa inledande kataloger för \"%s\""
 
-#: builtin/clone.c:1017
+#: builtin/clone.c:1016
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "kunde inte skapa arbetskatalogen \"%s\""
 
-#: builtin/clone.c:1037
+#: builtin/clone.c:1036
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Klonar till ett naket arkiv \"%s\"...\n"
 
-#: builtin/clone.c:1039
+#: builtin/clone.c:1038
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Klonar till \"%s\"...\n"
 
-#: builtin/clone.c:1063
+#: builtin/clone.c:1062
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
 msgstr ""
 "clone --recursive är inte kompatibel med --reference och --reference-if-able"
 
-#: builtin/clone.c:1124
+#: builtin/clone.c:1123
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "--depth ignoreras i lokala kloningar; använd file:// istället."
 
-#: builtin/clone.c:1126
+#: builtin/clone.c:1125
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr "--shallow-since ignoreras i lokala kloningar; använd file:// istället."
 
-#: builtin/clone.c:1128
+#: builtin/clone.c:1127
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-exclude ignoreras i lokala kloningar; använd file:// istället."
 
-#: builtin/clone.c:1130
+#: builtin/clone.c:1129
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr "--filter ignoreras i lokala kloningar; använd file:// istället."
 
-#: builtin/clone.c:1133
+#: builtin/clone.c:1132
 msgid "source repository is shallow, ignoring --local"
 msgstr "källarkivet är grunt, ignorerar --local"
 
-#: builtin/clone.c:1138
+#: builtin/clone.c:1137
 msgid "--local is ignored"
 msgstr "--local ignoreras"
 
-#: builtin/clone.c:1215 builtin/clone.c:1223
+#: builtin/clone.c:1212 builtin/clone.c:1220
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "Fjärrgrenen %s hittades inte i uppströmsarkivet %s"
 
-#: builtin/clone.c:1226
+#: builtin/clone.c:1223
 msgid "You appear to have cloned an empty repository."
 msgstr "Du verkar ha klonat ett tomt arkiv."
 
@@ -11228,7 +11263,7 @@
 msgid "duplicate parent %s ignored"
 msgstr "duplicerad förälder %s ignorerades"
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:542
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:525
 #, c-format
 msgid "not a valid object name %s"
 msgstr "objektnamnet är inte giltigt: %s"
@@ -11257,7 +11292,7 @@
 msgstr "id på ett förälderincheckningsobjekt"
 
 #: builtin/commit-tree.c:114 builtin/commit.c:1500 builtin/merge.c:270
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1460
+#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1469
 #: builtin/tag.c:412
 msgid "message"
 msgstr "meddelande"
@@ -11271,7 +11306,7 @@
 msgstr "läs incheckningsloggmeddelande från fil"
 
 #: builtin/commit-tree.c:121 builtin/commit.c:1512 builtin/merge.c:287
-#: builtin/pull.c:194 builtin/revert.c:118
+#: builtin/pull.c:195 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "GPG-signera incheckning"
 
@@ -11599,8 +11634,8 @@
 msgid "version"
 msgstr "version"
 
-#: builtin/commit.c:1347 builtin/commit.c:1529 builtin/push.c:561
-#: builtin/worktree.c:651
+#: builtin/commit.c:1347 builtin/commit.c:1529 builtin/push.c:548
+#: builtin/worktree.c:650
 msgid "machine-readable output"
 msgstr "maskinläsbar utdata"
 
@@ -11613,8 +11648,8 @@
 msgstr "terminera poster med NUL"
 
 #: builtin/commit.c:1355 builtin/commit.c:1359 builtin/commit.c:1537
-#: builtin/fast-export.c:1125 builtin/fast-export.c:1128
-#: builtin/fast-export.c:1131 builtin/rebase.c:1471 parse-options.h:332
+#: builtin/fast-export.c:1153 builtin/fast-export.c:1156
+#: builtin/fast-export.c:1159 builtin/rebase.c:1495 parse-options.h:332
 msgid "mode"
 msgstr "läge"
 
@@ -11630,7 +11665,7 @@
 "visa ignorerade filer, valfria lägen: traditional, matching, no (Standard: "
 "traditional)"
 
-#: builtin/commit.c:1362 parse-options.h:179
+#: builtin/commit.c:1362 parse-options.h:188
 msgid "when"
 msgstr "när"
 
@@ -11682,7 +11717,7 @@
 msgid "override author for commit"
 msgstr "överstyr författare för incheckningen"
 
-#: builtin/commit.c:1499 builtin/gc.c:539
+#: builtin/commit.c:1499 builtin/gc.c:538
 msgid "date"
 msgstr "datum"
 
@@ -11718,8 +11753,8 @@
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr "jag är nu författare av incheckningen (används med -C/-c/--amend)"
 
-#: builtin/commit.c:1506 builtin/log.c:1581 builtin/merge.c:289
-#: builtin/pull.c:163 builtin/revert.c:110
+#: builtin/commit.c:1506 builtin/log.c:1565 builtin/merge.c:289
+#: builtin/pull.c:164 builtin/revert.c:110
 msgid "add Signed-off-by:"
 msgstr "lägg till Signed-off-by:"
 
@@ -11827,67 +11862,69 @@
 msgstr "git commit-graph read [--object-dir <objkat>]"
 
 #: builtin/commit-graph.c:13 builtin/commit-graph.c:19
-msgid "git commit-graph verify [--object-dir <objdir>] [--shallow]"
-msgstr "git commit-graph verify [--object-dir <objkat>] [--shallow]"
+msgid ""
+"git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
+msgstr ""
+"git commit-graph verify [--object-dir <objkat>] [--shallow] [--[no-]progress]"
 
 #: builtin/commit-graph.c:14 builtin/commit-graph.c:29
 msgid ""
 "git commit-graph write [--object-dir <objdir>] [--append|--split] [--"
-"reachable|--stdin-packs|--stdin-commits] <split options>"
+"reachable|--stdin-packs|--stdin-commits] [--[no-]progress] <split options>"
 msgstr ""
 "git commit-graph write [--object-dir <objkat>] [--append|--split] [--"
-"reachable|--stdin-packs|--stdin-commits] <delnings-flaggor>"
+"reachable|--stdin-packs|--stdin-commits] [--[no-]progress] <delnings-flaggor>"
 
-#: builtin/commit-graph.c:54 builtin/commit-graph.c:100
-#: builtin/commit-graph.c:161 builtin/commit-graph.c:237 builtin/fetch.c:163
-#: builtin/log.c:1601
+#: builtin/commit-graph.c:55 builtin/commit-graph.c:107
+#: builtin/commit-graph.c:170 builtin/commit-graph.c:254 builtin/fetch.c:178
+#: builtin/log.c:1585
 msgid "dir"
 msgstr "kat"
 
-#: builtin/commit-graph.c:55 builtin/commit-graph.c:101
-#: builtin/commit-graph.c:162 builtin/commit-graph.c:238
+#: builtin/commit-graph.c:56 builtin/commit-graph.c:108
+#: builtin/commit-graph.c:171 builtin/commit-graph.c:255
 msgid "The object directory to store the graph"
 msgstr "Objektkatalogen där grafen skall lagras"
 
-#: builtin/commit-graph.c:57
+#: builtin/commit-graph.c:58
 msgid "if the commit-graph is split, only verify the tip file"
 msgstr "om inchecknignsgrafen är delad, kontrollera bara spetsfilen"
 
-#: builtin/commit-graph.c:73 builtin/commit-graph.c:116
+#: builtin/commit-graph.c:80 builtin/commit-graph.c:125
 #, c-format
 msgid "Could not open commit-graph '%s'"
 msgstr "Kunde inte öppna incheckningsgrafen \"%s\""
 
-#: builtin/commit-graph.c:164
+#: builtin/commit-graph.c:173
 msgid "start walk at all refs"
 msgstr "starta traversering vid alla referenser"
 
-#: builtin/commit-graph.c:166
+#: builtin/commit-graph.c:175
 msgid "scan pack-indexes listed by stdin for commits"
 msgstr "sök paketindex listade på standard in efter incheckningar"
 
-#: builtin/commit-graph.c:168
+#: builtin/commit-graph.c:177
 msgid "start walk at commits listed by stdin"
 msgstr "börja gå genom incheckningar listade på standard in"
 
-#: builtin/commit-graph.c:170
+#: builtin/commit-graph.c:179
 msgid "include all commits already in the commit-graph file"
 msgstr "ta med alla incheckningar redan i filen commit-graph"
 
-#: builtin/commit-graph.c:172
+#: builtin/commit-graph.c:182
 msgid "allow writing an incremental commit-graph file"
 msgstr "tillåt skriva en inkrementell incheckningsgraffil"
 
-#: builtin/commit-graph.c:174 builtin/commit-graph.c:178
+#: builtin/commit-graph.c:184 builtin/commit-graph.c:188
 msgid "maximum number of commits in a non-base split commit-graph"
 msgstr ""
 "maximalt antal incheckningar i en delad incheckingsgraf som inte är bad"
 
-#: builtin/commit-graph.c:176
+#: builtin/commit-graph.c:186
 msgid "maximum ratio between two levels of a split commit-graph"
 msgstr "maximalt förhållande mellan två nivåer av en delad incheckningsgraf"
 
-#: builtin/commit-graph.c:191
+#: builtin/commit-graph.c:204
 msgid "use at most one of --reachable, --stdin-commits, or --stdin-packs"
 msgstr "använd som mest en av --reachable, --stdin-commit och --stdin-packs"
 
@@ -12201,58 +12238,58 @@
 msgid "print sizes in human readable format"
 msgstr "skriv storlekar i människoläsbart format"
 
-#: builtin/describe.c:27
+#: builtin/describe.c:26
 msgid "git describe [<options>] [<commit-ish>...]"
 msgstr "git describe [<flaggor>] [<incheckning-igt>...]"
 
-#: builtin/describe.c:28
+#: builtin/describe.c:27
 msgid "git describe [<options>] --dirty"
 msgstr "git describe [<flaggor>] --dirty"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "head"
 msgstr "huvud"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "lightweight"
 msgstr "lättviktig"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "annotated"
 msgstr "annoterad"
 
-#: builtin/describe.c:273
+#: builtin/describe.c:275
 #, c-format
 msgid "annotated tag %s not available"
 msgstr "den annoterade taggen %s inte tillgänglig"
 
-#: builtin/describe.c:277
+#: builtin/describe.c:279
 #, c-format
 msgid "annotated tag %s has no embedded name"
 msgstr "den annoterade taggen %s har inget inbäddat namn"
 
-#: builtin/describe.c:279
+#: builtin/describe.c:281
 #, c-format
 msgid "tag '%s' is really '%s' here"
 msgstr "taggen \"%s\" är i verkligheten \"%s\" här"
 
-#: builtin/describe.c:323
+#: builtin/describe.c:325
 #, c-format
 msgid "no tag exactly matches '%s'"
 msgstr "ingen tagg motsvarar \"%s\" exakt"
 
-#: builtin/describe.c:325
+#: builtin/describe.c:327
 #, c-format
 msgid "No exact match on refs or tags, searching to describe\n"
 msgstr ""
 "Ingen exakt träff mot referenser eller taggar, söker för att beskriva\n"
 
-#: builtin/describe.c:379
+#: builtin/describe.c:381
 #, c-format
 msgid "finished search at %s\n"
 msgstr "avslutade sökning på %s\n"
 
-#: builtin/describe.c:405
+#: builtin/describe.c:407
 #, c-format
 msgid ""
 "No annotated tags can describe '%s'.\n"
@@ -12261,7 +12298,7 @@
 "Inga annoterade taggar kan beskriva \"%s\".\n"
 "Det finns dock oannoterade taggar: testa --tags."
 
-#: builtin/describe.c:409
+#: builtin/describe.c:411
 #, c-format
 msgid ""
 "No tags can describe '%s'.\n"
@@ -12270,12 +12307,12 @@
 "Inga taggar kan beskriva \"%s\".\n"
 "Testa --always, eller skapa några taggar."
 
-#: builtin/describe.c:439
+#: builtin/describe.c:441
 #, c-format
 msgid "traversed %lu commits\n"
 msgstr "traverserade %lu incheckningar\n"
 
-#: builtin/describe.c:442
+#: builtin/describe.c:444
 #, c-format
 msgid ""
 "more than %i tags found; listed %i most recent\n"
@@ -12284,90 +12321,90 @@
 "mer än %i taggar hittades; listar de %i senaste\n"
 "gav upp sökningen vid %s\n"
 
-#: builtin/describe.c:510
+#: builtin/describe.c:512
 #, c-format
 msgid "describe %s\n"
 msgstr "beskriva %s\n"
 
-#: builtin/describe.c:513
+#: builtin/describe.c:515
 #, c-format
 msgid "Not a valid object name %s"
 msgstr "Objektnamnet är inte giltigt: %s"
 
-#: builtin/describe.c:521
+#: builtin/describe.c:523
 #, c-format
 msgid "%s is neither a commit nor blob"
 msgstr "%s är varken incheckning eller blob"
 
-#: builtin/describe.c:535
+#: builtin/describe.c:537
 msgid "find the tag that comes after the commit"
 msgstr "hitta taggen som kommer efter incheckningen"
 
-#: builtin/describe.c:536
+#: builtin/describe.c:538
 msgid "debug search strategy on stderr"
 msgstr "felsök sökstrategin på standard fel"
 
-#: builtin/describe.c:537
+#: builtin/describe.c:539
 msgid "use any ref"
 msgstr "använd alla referenser"
 
-#: builtin/describe.c:538
+#: builtin/describe.c:540
 msgid "use any tag, even unannotated"
 msgstr "använd alla taggar, även oannoterade"
 
-#: builtin/describe.c:539
+#: builtin/describe.c:541
 msgid "always use long format"
 msgstr "använd alltid långt format"
 
-#: builtin/describe.c:540
+#: builtin/describe.c:542
 msgid "only follow first parent"
 msgstr "följ endast första föräldern"
 
-#: builtin/describe.c:543
+#: builtin/describe.c:545
 msgid "only output exact matches"
 msgstr "skriv endast ut exakta träffar"
 
-#: builtin/describe.c:545
+#: builtin/describe.c:547
 msgid "consider <n> most recent tags (default: 10)"
 msgstr "överväg de <n> nyaste taggarna (standard: 10)"
 
-#: builtin/describe.c:547
+#: builtin/describe.c:549
 msgid "only consider tags matching <pattern>"
 msgstr "överväg endast taggar som motsvarar <mönster>"
 
-#: builtin/describe.c:549
+#: builtin/describe.c:551
 msgid "do not consider tags matching <pattern>"
 msgstr "överväg inte taggar som motsvarar <mönster>"
 
-#: builtin/describe.c:551 builtin/name-rev.c:422
+#: builtin/describe.c:553 builtin/name-rev.c:426
 msgid "show abbreviated commit object as fallback"
 msgstr "visa förkortade incheckningsobjekt som standard"
 
-#: builtin/describe.c:552 builtin/describe.c:555
+#: builtin/describe.c:554 builtin/describe.c:557
 msgid "mark"
 msgstr "märke"
 
-#: builtin/describe.c:553
+#: builtin/describe.c:555
 msgid "append <mark> on dirty working tree (default: \"-dirty\")"
 msgstr "lägg till <märke> på lortigt arbetsträd (standard: \"-dirty\")"
 
-#: builtin/describe.c:556
+#: builtin/describe.c:558
 msgid "append <mark> on broken working tree (default: \"-broken\")"
 msgstr "lägg till <märke> på trasigt arbetsträd (standard: \"-broken\")"
 
-#: builtin/describe.c:574
+#: builtin/describe.c:576
 msgid "--long is incompatible with --abbrev=0"
 msgstr "--long är inkompatibel med --abbrev=0"
 
-#: builtin/describe.c:603
+#: builtin/describe.c:605
 msgid "No names found, cannot describe anything."
 msgstr "Inga namn hittades, kan inte beskriva något."
 
-#: builtin/describe.c:654
+#: builtin/describe.c:656
 msgid "--dirty is incompatible with commit-ishes"
 msgstr "--dirty är inkompatibelt med \"commit-ish\"-värden"
 
-#: builtin/describe.c:656
+#: builtin/describe.c:658
 msgid "--broken is incompatible with commit-ishes"
 msgstr "--broken är inkompatibelt med \"commit-ish\"-värden"
 
@@ -12405,27 +12442,27 @@
 msgstr ""
 "git difftool [<flaggor>] [<incheckning> [<incheckning>]] [--] [<sökväg>...]"
 
-#: builtin/difftool.c:253
+#: builtin/difftool.c:260
 #, c-format
 msgid "failed: %d"
 msgstr "misslyckades: %d"
 
-#: builtin/difftool.c:295
+#: builtin/difftool.c:302
 #, c-format
 msgid "could not read symlink %s"
 msgstr "kunde inte läsa symboliska länken %s"
 
-#: builtin/difftool.c:297
+#: builtin/difftool.c:304
 #, c-format
 msgid "could not read symlink file %s"
 msgstr "kunde inte läsa symbolisk länk-fil %s"
 
-#: builtin/difftool.c:305
+#: builtin/difftool.c:312
 #, c-format
 msgid "could not read object %s for symlink %s"
 msgstr "kunde inte läsa objektet %s för symboliska länken %s"
 
-#: builtin/difftool.c:406
+#: builtin/difftool.c:413
 msgid ""
 "combined diff formats('-c' and '--cc') are not supported in\n"
 "directory diff mode('-d' and '--dir-diff')."
@@ -12433,53 +12470,53 @@
 "kombinerade diff-format (\"-c\" och \"--cc\") stöds inte i\n"
 "katalogdiffläge (\"-d\" och \"--dir-diff\")."
 
-#: builtin/difftool.c:626
+#: builtin/difftool.c:634
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "bägge filerna ändrade: \"%s\" och \"%s\"."
 
-#: builtin/difftool.c:628
+#: builtin/difftool.c:636
 msgid "working tree file has been left."
 msgstr "filen i arbetskatalogen lämnades kvar."
 
-#: builtin/difftool.c:639
+#: builtin/difftool.c:647
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "temporära filer finns i \"%s\"."
 
-#: builtin/difftool.c:640
+#: builtin/difftool.c:648
 msgid "you may want to cleanup or recover these."
 msgstr "du kanske vill städa eller rädda dem."
 
-#: builtin/difftool.c:689
+#: builtin/difftool.c:697
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr "använd \"diff.guitool\" istället för \"diff.tool\""
 
-#: builtin/difftool.c:691
+#: builtin/difftool.c:699
 msgid "perform a full-directory diff"
 msgstr "utför diff för hela katalogen"
 
-#: builtin/difftool.c:693
+#: builtin/difftool.c:701
 msgid "do not prompt before launching a diff tool"
 msgstr "fråga inte vid start av diff-verktyg"
 
-#: builtin/difftool.c:698
+#: builtin/difftool.c:706
 msgid "use symlinks in dir-diff mode"
 msgstr "använd symboliska länkar i katalogdiffläge"
 
-#: builtin/difftool.c:699
+#: builtin/difftool.c:707
 msgid "tool"
 msgstr "verktyg"
 
-#: builtin/difftool.c:700
+#: builtin/difftool.c:708
 msgid "use the specified diff tool"
 msgstr "använd angivet diff-verktyg"
 
-#: builtin/difftool.c:702
+#: builtin/difftool.c:710
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr "visa en lista över diff-verktyg som kan användas med \"--tool\""
 
-#: builtin/difftool.c:705
+#: builtin/difftool.c:713
 msgid ""
 "make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
 "code"
@@ -12487,31 +12524,31 @@
 "låt \"git-difftool\" avbryta när ett anropat diff-verktyg ger returvärde "
 "skilt från noll"
 
-#: builtin/difftool.c:708
+#: builtin/difftool.c:716
 msgid "specify a custom command for viewing diffs"
 msgstr "ange eget kommando för att visa diffar"
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:717
 msgid "passed to `diff`"
 msgstr "sändes till \"diff\""
 
-#: builtin/difftool.c:724
+#: builtin/difftool.c:732
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool kräver en arbetskatalog eller --no-index"
 
-#: builtin/difftool.c:731
+#: builtin/difftool.c:739
 msgid "--dir-diff is incompatible with --no-index"
 msgstr "--dir-diff är inkompatibelt med --no-index"
 
-#: builtin/difftool.c:734
+#: builtin/difftool.c:742
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr "--gui, --tool och --extcmd är ömsesidigt uteslutande"
 
-#: builtin/difftool.c:742
+#: builtin/difftool.c:750
 msgid "no <tool> given for --tool=<tool>"
 msgstr "inget <verktyg> angavs för --tool=<verktyg>"
 
-#: builtin/difftool.c:749
+#: builtin/difftool.c:757
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "inget <kommando> angavs för --extcmd=<kommando>"
 
@@ -12551,156 +12588,180 @@
 msgid "git fast-export [rev-list-opts]"
 msgstr "git fast-export [rev-list-flaggor]"
 
-#: builtin/fast-export.c:1124
+#: builtin/fast-export.c:852
+msgid "Error: Cannot export nested tags unless --mark-tags is specified."
+msgstr "Fel: Kan inte exportera nästlade taggar såvida inte --mark-tags anges."
+
+#: builtin/fast-export.c:1152
 msgid "show progress after <n> objects"
 msgstr "visa förlopp efter <n> objekt"
 
-#: builtin/fast-export.c:1126
+#: builtin/fast-export.c:1154
 msgid "select handling of signed tags"
 msgstr "välj hantering av signerade taggar"
 
-#: builtin/fast-export.c:1129
+#: builtin/fast-export.c:1157
 msgid "select handling of tags that tag filtered objects"
 msgstr "välj hantering av taggar som har taggfiltrerade objekt"
 
-#: builtin/fast-export.c:1132
+#: builtin/fast-export.c:1160
 msgid "select handling of commit messages in an alternate encoding"
 msgstr "välj hantering av incheckningsmeddelanden i alternativ teckenkodning"
 
-#: builtin/fast-export.c:1135
+#: builtin/fast-export.c:1163
 msgid "Dump marks to this file"
 msgstr "Dumpa märken till filen"
 
-#: builtin/fast-export.c:1137
+#: builtin/fast-export.c:1165
 msgid "Import marks from this file"
 msgstr "Importera märken från filen"
 
-#: builtin/fast-export.c:1139
+#: builtin/fast-export.c:1169
+msgid "Import marks from this file if it exists"
+msgstr "Importera märken från filen, om den finns"
+
+#: builtin/fast-export.c:1171
 msgid "Fake a tagger when tags lack one"
 msgstr "Fejka taggare när taggen saknar en"
 
-#: builtin/fast-export.c:1141
+#: builtin/fast-export.c:1173
 msgid "Output full tree for each commit"
 msgstr "Skriv ut hela trädet för varje incheckning"
 
-#: builtin/fast-export.c:1143
+#: builtin/fast-export.c:1175
 msgid "Use the done feature to terminate the stream"
 msgstr "Använd done-funktionen för att avsluta strömmen"
 
-#: builtin/fast-export.c:1144
+#: builtin/fast-export.c:1176
 msgid "Skip output of blob data"
 msgstr "Hoppa över skrivning av blob-data"
 
-#: builtin/fast-export.c:1145 builtin/log.c:1649
+#: builtin/fast-export.c:1177 builtin/log.c:1633
 msgid "refspec"
 msgstr "referensspecifikation"
 
-#: builtin/fast-export.c:1146
+#: builtin/fast-export.c:1178
 msgid "Apply refspec to exported refs"
 msgstr "Applicera referensspecifikation på exporterade referenser"
 
-#: builtin/fast-export.c:1147
+#: builtin/fast-export.c:1179
 msgid "anonymize output"
 msgstr "anonymisera utdata"
 
-#: builtin/fast-export.c:1149
+#: builtin/fast-export.c:1181
 msgid "Reference parents which are not in fast-export stream by object id"
 msgstr "Referera föräldrar som inte finns i fast-export-ström med objekt-id"
 
-#: builtin/fast-export.c:1151
+#: builtin/fast-export.c:1183
 msgid "Show original object ids of blobs/commits"
-msgstr "Visa ursprungliga objekt-ID för blobbar/incheckningar"
+msgstr "Visa ursprungliga objekt-id för blobbar/incheckningar"
 
-#: builtin/fetch.c:30
+#: builtin/fast-export.c:1185
+msgid "Label tags with mark ids"
+msgstr "Märk taggar med märke-id"
+
+#: builtin/fast-export.c:1220
+msgid "Cannot pass both --import-marks and --import-marks-if-exists"
+msgstr "Kan inte ange både --import-marks och --import-marks-if-exists"
+
+#: builtin/fetch.c:34
 msgid "git fetch [<options>] [<repository> [<refspec>...]]"
 msgstr "git fetch [<flaggor>] [<arkiv> [<refspec>...]]"
 
-#: builtin/fetch.c:31
+#: builtin/fetch.c:35
 msgid "git fetch [<options>] <group>"
 msgstr "git fetch [<flaggor>] <grupp>"
 
-#: builtin/fetch.c:32
+#: builtin/fetch.c:36
 msgid "git fetch --multiple [<options>] [(<repository> | <group>)...]"
 msgstr "git fetch --multiple [<flaggor>] [(<arkiv> | <grupp>)...]"
 
-#: builtin/fetch.c:33
+#: builtin/fetch.c:37
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<flaggor>]"
 
-#: builtin/fetch.c:125 builtin/pull.c:203
+#: builtin/fetch.c:115
+msgid "fetch.parallel cannot be negative"
+msgstr "fetch.parallel kan inte vara negativt"
+
+#: builtin/fetch.c:138 builtin/pull.c:204
 msgid "fetch from all remotes"
 msgstr "hämta från alla fjärrar"
 
-#: builtin/fetch.c:127 builtin/pull.c:206
+#: builtin/fetch.c:140 builtin/pull.c:248
+msgid "set upstream for git pull/fetch"
+msgstr "ställ in uppström för git pull/fetch"
+
+#: builtin/fetch.c:142 builtin/pull.c:207
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "lägg till i .git/FETCH_HEAD istället för att skriva över"
 
-#: builtin/fetch.c:129 builtin/pull.c:209
+#: builtin/fetch.c:144 builtin/pull.c:210
 msgid "path to upload pack on remote end"
 msgstr "sökväg till upload pack på fjärren"
 
-#: builtin/fetch.c:130
+#: builtin/fetch.c:145
 msgid "force overwrite of local reference"
 msgstr "tvinga överskrivning av lokal referens"
 
-#: builtin/fetch.c:132
+#: builtin/fetch.c:147
 msgid "fetch from multiple remotes"
 msgstr "hämta från flera fjärrar"
 
-#: builtin/fetch.c:134 builtin/pull.c:213
+#: builtin/fetch.c:149 builtin/pull.c:214
 msgid "fetch all tags and associated objects"
 msgstr "hämta alla taggar och associerade objekt"
 
-#: builtin/fetch.c:136
+#: builtin/fetch.c:151
 msgid "do not fetch all tags (--no-tags)"
 msgstr "hämta inte alla taggar (--no-tags)"
 
-#: builtin/fetch.c:138
+#: builtin/fetch.c:153
 msgid "number of submodules fetched in parallel"
 msgstr "antal undermoduler som hämtas parallellt"
 
-#: builtin/fetch.c:140 builtin/pull.c:216
+#: builtin/fetch.c:155 builtin/pull.c:217
 msgid "prune remote-tracking branches no longer on remote"
 msgstr "rensa fjärrspårande grenar ej längre på fjärren"
 
-#: builtin/fetch.c:142
+#: builtin/fetch.c:157
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
 "rensa lokala taggar inte längre på fjärren och skriv över ändrade taggar"
 
-#: builtin/fetch.c:143 builtin/fetch.c:166 builtin/pull.c:140
+#: builtin/fetch.c:158 builtin/fetch.c:181 builtin/pull.c:141
 msgid "on-demand"
 msgstr "on-demand"
 
-#: builtin/fetch.c:144
+#: builtin/fetch.c:159
 msgid "control recursive fetching of submodules"
 msgstr "styr rekursiv hämtning av undermoduler"
 
-#: builtin/fetch.c:148 builtin/pull.c:224
+#: builtin/fetch.c:163 builtin/pull.c:225
 msgid "keep downloaded pack"
 msgstr "behåll hämtade paket"
 
-#: builtin/fetch.c:150
+#: builtin/fetch.c:165
 msgid "allow updating of HEAD ref"
 msgstr "tillåt uppdatering av HEAD-referens"
 
-#: builtin/fetch.c:153 builtin/fetch.c:159 builtin/pull.c:227
+#: builtin/fetch.c:168 builtin/fetch.c:174 builtin/pull.c:228
 msgid "deepen history of shallow clone"
 msgstr "fördjupa historik för grund klon"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:170
 msgid "deepen history of shallow repository based on time"
 msgstr "fördjupa historik för grund klon baserad på tid"
 
-#: builtin/fetch.c:161 builtin/pull.c:230
+#: builtin/fetch.c:176 builtin/pull.c:231
 msgid "convert to a complete repository"
 msgstr "konvertera till komplett arkiv"
 
-#: builtin/fetch.c:164
+#: builtin/fetch.c:179
 msgid "prepend this to submodule path output"
 msgstr "lägg till i början av undermodulens sökvägsutdata"
 
-#: builtin/fetch.c:167
+#: builtin/fetch.c:182
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
@@ -12708,105 +12769,129 @@
 "standard för rekursiv hämtning av undermoduler (lägre prioritet än "
 "konfigurationsfiler)"
 
-#: builtin/fetch.c:171 builtin/pull.c:233
+#: builtin/fetch.c:186 builtin/pull.c:234
 msgid "accept refs that update .git/shallow"
 msgstr "tar emot referenser som uppdaterar .git/shallow"
 
-#: builtin/fetch.c:172 builtin/pull.c:235
+#: builtin/fetch.c:187 builtin/pull.c:236
 msgid "refmap"
 msgstr "referenskarta"
 
-#: builtin/fetch.c:173 builtin/pull.c:236
+#: builtin/fetch.c:188 builtin/pull.c:237
 msgid "specify fetch refmap"
 msgstr "ange referenskarta för \"fetch\""
 
-#: builtin/fetch.c:180
+#: builtin/fetch.c:195
 msgid "report that we have only objects reachable from this object"
 msgstr "rapportera att vi bara har objekt nåbara från detta objektet"
 
-#: builtin/fetch.c:183
+#: builtin/fetch.c:198
 msgid "run 'gc --auto' after fetching"
 msgstr "kör \"gc --auto\" efter hämtning"
 
-#: builtin/fetch.c:185 builtin/pull.c:245
+#: builtin/fetch.c:200 builtin/pull.c:246
 msgid "check for forced-updates on all updated branches"
 msgstr "se efter tvingade uppdateringar i alla uppdaterade grenar"
 
-#: builtin/fetch.c:491
+#: builtin/fetch.c:510
 msgid "Couldn't find remote ref HEAD"
 msgstr "Kunde inte hitta fjärr-referensen HEAD"
 
-#: builtin/fetch.c:630
+#: builtin/fetch.c:650
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
 msgstr "konfigurationen för fetch.output innehåller ogiltigt värde %s"
 
-#: builtin/fetch.c:728
+#: builtin/fetch.c:748
 #, c-format
 msgid "object %s not found"
 msgstr "objektet %s hittades inte"
 
-#: builtin/fetch.c:732
+#: builtin/fetch.c:752
 msgid "[up to date]"
 msgstr "[àjour]"
 
-#: builtin/fetch.c:745 builtin/fetch.c:761 builtin/fetch.c:833
+#: builtin/fetch.c:765 builtin/fetch.c:781 builtin/fetch.c:853
 msgid "[rejected]"
 msgstr "[refuserad]"
 
-#: builtin/fetch.c:746
+#: builtin/fetch.c:766
 msgid "can't fetch in current branch"
 msgstr "kan inte hämta i aktuell gren"
 
-#: builtin/fetch.c:756
+#: builtin/fetch.c:776
 msgid "[tag update]"
 msgstr "[uppdaterad tagg]"
 
-#: builtin/fetch.c:757 builtin/fetch.c:794 builtin/fetch.c:816
-#: builtin/fetch.c:828
+#: builtin/fetch.c:777 builtin/fetch.c:814 builtin/fetch.c:836
+#: builtin/fetch.c:848
 msgid "unable to update local ref"
 msgstr "kunde inte uppdatera lokal ref"
 
-#: builtin/fetch.c:761
+#: builtin/fetch.c:781
 msgid "would clobber existing tag"
 msgstr "skulle skriva över befintlig tagg"
 
-#: builtin/fetch.c:783
+#: builtin/fetch.c:803
 msgid "[new tag]"
 msgstr "[ny tagg]"
 
-#: builtin/fetch.c:786
+#: builtin/fetch.c:806
 msgid "[new branch]"
 msgstr "[ny gren]"
 
-#: builtin/fetch.c:789
+#: builtin/fetch.c:809
 msgid "[new ref]"
 msgstr "[ny ref]"
 
-#: builtin/fetch.c:828
+#: builtin/fetch.c:848
 msgid "forced update"
 msgstr "tvingad uppdatering"
 
-#: builtin/fetch.c:833
+#: builtin/fetch.c:853
 msgid "non-fast-forward"
 msgstr "ej snabbspolad"
 
-#: builtin/fetch.c:879
+#: builtin/fetch.c:874
+msgid ""
+"Fetch normally indicates which branches had a forced update,\n"
+"but that check has been disabled. To re-enable, use '--show-forced-updates'\n"
+"flag or run 'git config fetch.showForcedUpdates true'."
+msgstr ""
+"Fetch visar normalt vilka grenar som tvångsuppdaterats, men testet har "
+"slagits\n"
+"av. För att slå på igen, använd flaggan \"--show-forced-updates\" eller kör\n"
+"\"git config fetch.showForcedUpdates true\"."
+
+#: builtin/fetch.c:878
+#, c-format
+msgid ""
+"It took %.2f seconds to check forced updates. You can use\n"
+"'--no-show-forced-updates' or run 'git config fetch.showForcedUpdates "
+"false'\n"
+" to avoid this check.\n"
+msgstr ""
+"Det tog %.2f sekunder att se efter tvångsuppdateringar. Du kan använda\n"
+"\"--no-show-forced-updates\" eller köra \"git config fetch."
+"showForcedUpdates\n"
+"false\" för att undvika testet.\n"
+
+#: builtin/fetch.c:908
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s sände inte alla nödvändiga objekt\n"
 
-#: builtin/fetch.c:900
+#: builtin/fetch.c:929
 #, c-format
 msgid "reject %s because shallow roots are not allowed to be updated"
 msgstr "avvisa %s då grunda rötter inte kan uppdateras"
 
-#: builtin/fetch.c:991 builtin/fetch.c:1124
+#: builtin/fetch.c:1020 builtin/fetch.c:1157
 #, c-format
 msgid "From %.*s\n"
 msgstr "Från %.*s\n"
 
-#: builtin/fetch.c:1002
+#: builtin/fetch.c:1031
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -12815,89 +12900,79 @@
 "vissa lokala referenser kunde inte uppdateras; testa att köra\n"
 " \"git remote prune %s\" för att ta bort gamla grenar som står i konflikt"
 
-#: builtin/fetch.c:1008
-msgid ""
-"Fetch normally indicates which branches had a forced update, but that check "
-"has been disabled."
-msgstr ""
-"Hämtning visar vanligtvis vilka grenar som har en tvingad uppdatering, men "
-"det testet har slagits av."
-
-#: builtin/fetch.c:1009
-msgid ""
-"To re-enable, use '--show-forced-updates' flag or run 'git config fetch."
-"showForcedUpdates true'."
-msgstr ""
-"För att slå på igen, använd flaggan \"--show-forced-updates\" eller kör "
-"\"git config fetch.showForcedUpdates true\"."
-
-#: builtin/fetch.c:1011
-#, c-format
-msgid ""
-"It took %.2f seconds to check forced updates. You can use '--no-show-forced-"
-"updates'\n"
-msgstr ""
-"Det tog %.2f sekunder att se efter tvingade uppdateringar. Du kan använda "
-"\"--no-show-forced-updates\"\n"
-
-#: builtin/fetch.c:1013
-msgid ""
-"or run 'git config fetch.showForcedUpdates false' to avoid this check.\n"
-msgstr ""
-"eller kör \"git config fetch.showForcedUpdates false\" för undvika testet.\n"
-
-#: builtin/fetch.c:1094
+#: builtin/fetch.c:1127
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s kommer bli dinglande)"
 
-#: builtin/fetch.c:1095
+#: builtin/fetch.c:1128
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s har blivit dinglande)"
 
-#: builtin/fetch.c:1127
+#: builtin/fetch.c:1160
 msgid "[deleted]"
 msgstr "[borttagen]"
 
-#: builtin/fetch.c:1128 builtin/remote.c:1036
+#: builtin/fetch.c:1161 builtin/remote.c:1036
 msgid "(none)"
 msgstr "(ingen)"
 
-#: builtin/fetch.c:1151
+#: builtin/fetch.c:1184
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr "Vägrar hämta till aktuell gren %s i ett icke-naket arkiv"
 
-#: builtin/fetch.c:1170
+#: builtin/fetch.c:1203
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr "Flaggan \"%s\" och värdet \"%s\" är inte giltigt för %s"
 
-#: builtin/fetch.c:1173
+#: builtin/fetch.c:1206
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr "Flaggan \"%s\" ignoreras för %s\n"
 
-#: builtin/fetch.c:1477
+#: builtin/fetch.c:1414
+msgid "multiple branch detected, incompatible with --set-upstream"
+msgstr "flera grenar upptäcktes, inkompatibelt med --set-upstream"
+
+#: builtin/fetch.c:1429
+msgid "not setting upstream for a remote remote-tracking branch"
+msgstr "ställer inte in uppströmsgren för en fjärrspårande gren på fjärren"
+
+#: builtin/fetch.c:1431
+msgid "not setting upstream for a remote tag"
+msgstr "ställer inte in uppström för en fjärrtag"
+
+#: builtin/fetch.c:1433
+msgid "unknown branch type"
+msgstr "okänd grentyp"
+
+#: builtin/fetch.c:1435
+msgid ""
+"no source branch found.\n"
+"you need to specify exactly one branch with the --set-upstream option."
+msgstr ""
+"hittade ingen källgren.\n"
+"du måste ange exakt en gren med flaggan --set-upstream."
+
+#: builtin/fetch.c:1561 builtin/fetch.c:1623
 #, c-format
 msgid "Fetching %s\n"
 msgstr "Hämtar %s\n"
 
-#: builtin/fetch.c:1479 builtin/remote.c:100
+#: builtin/fetch.c:1571 builtin/fetch.c:1625 builtin/remote.c:100
 #, c-format
 msgid "Could not fetch %s"
 msgstr "Kunde inte hämta %s"
 
-#: builtin/fetch.c:1525
-msgid ""
-"--filter can only be used with the remote configured in extensions."
-"partialClone"
-msgstr ""
-"--filter kan endast användas med fjärren konfigurerad i extensions."
-"partialClone"
+#: builtin/fetch.c:1583
+#, c-format
+msgid "could not fetch '%s' (exit code: %d)\n"
+msgstr "kunde inte hämta \"%s\" (felkod: %d)\n"
 
-#: builtin/fetch.c:1549
+#: builtin/fetch.c:1685
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
@@ -12905,44 +12980,44 @@
 "Inget fjärrarkiv angavs. Ange antingen en URL eller namnet på ett\n"
 "fjärrarkiv som nya incheckningar skall hämtas från."
 
-#: builtin/fetch.c:1586
+#: builtin/fetch.c:1722
 msgid "You need to specify a tag name."
 msgstr "Du måste ange namnet på en tagg."
 
-#: builtin/fetch.c:1637
+#: builtin/fetch.c:1774
 msgid "Negative depth in --deepen is not supported"
 msgstr "Negativa djup stöds inte i --deepen"
 
-#: builtin/fetch.c:1639
+#: builtin/fetch.c:1776
 msgid "--deepen and --depth are mutually exclusive"
 msgstr "--deepen och --depth är ömsesidigt uteslutande"
 
-#: builtin/fetch.c:1644
+#: builtin/fetch.c:1781
 msgid "--depth and --unshallow cannot be used together"
 msgstr "--depth och --unshallow kan inte användas samtidigt"
 
-#: builtin/fetch.c:1646
+#: builtin/fetch.c:1783
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "--unshallow kan inte användas på ett komplett arkiv"
 
-#: builtin/fetch.c:1662
+#: builtin/fetch.c:1799
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all tar inte namnet på ett arkiv som argument"
 
-#: builtin/fetch.c:1664
+#: builtin/fetch.c:1801
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all kan inte anges med referensspecifikationer"
 
-#: builtin/fetch.c:1673
+#: builtin/fetch.c:1810
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr "Fjärren eller fjärrgruppen finns inte: %s"
 
-#: builtin/fetch.c:1680
+#: builtin/fetch.c:1817
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr "Kan inte hämta från grupp och ange referensspecifikationer"
 
-#: builtin/fetch.c:1696
+#: builtin/fetch.c:1835
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
@@ -13284,7 +13359,7 @@
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "ogiltig parameter: förväntade sha1, fick \"%s\""
 
-#: builtin/gc.c:34
+#: builtin/gc.c:35
 msgid "git gc [<options>]"
 msgstr "git gc [<flaggor>]"
 
@@ -13298,17 +13373,17 @@
 msgid "failed to parse '%s' value '%s'"
 msgstr "misslyckades tolka \"%s\" värde \"%s\""
 
-#: builtin/gc.c:476 builtin/init-db.c:55
+#: builtin/gc.c:475 builtin/init-db.c:55
 #, c-format
 msgid "cannot stat '%s'"
 msgstr "kan inte ta status på \"%s\""
 
-#: builtin/gc.c:485 builtin/notes.c:240 builtin/tag.c:529
+#: builtin/gc.c:484 builtin/notes.c:240 builtin/tag.c:529
 #, c-format
 msgid "cannot read '%s'"
 msgstr "kunde inte läsa \"%s\""
 
-#: builtin/gc.c:492
+#: builtin/gc.c:491
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -13323,52 +13398,52 @@
 "\n"
 "%s"
 
-#: builtin/gc.c:540
+#: builtin/gc.c:539
 msgid "prune unreferenced objects"
 msgstr "rensa ej refererade objekt"
 
-#: builtin/gc.c:542
+#: builtin/gc.c:541
 msgid "be more thorough (increased runtime)"
 msgstr "var mer grundlig (ökar körtiden)"
 
-#: builtin/gc.c:543
+#: builtin/gc.c:542
 msgid "enable auto-gc mode"
 msgstr "aktivera auto-gc-läge"
 
-#: builtin/gc.c:546
+#: builtin/gc.c:545
 msgid "force running gc even if there may be another gc running"
 msgstr "tvinga gc-körning även om en annan gc kanske körs"
 
-#: builtin/gc.c:549
+#: builtin/gc.c:548
 msgid "repack all other packs except the largest pack"
 msgstr "packa om alla paket förutom det största paketet"
 
-#: builtin/gc.c:566
+#: builtin/gc.c:565
 #, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr "kunde inte tolka värdet %s för gc.logexpiry"
 
-#: builtin/gc.c:577
+#: builtin/gc.c:576
 #, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr "kunde inte tolka värdet %s för prune expiry"
 
-#: builtin/gc.c:597
+#: builtin/gc.c:596
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr "Packar arkivet automatiskt i bakgrunden för optimal prestanda.\n"
 
-#: builtin/gc.c:599
+#: builtin/gc.c:598
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr "Packar arkivet automatiskt för optimal prestanda.\n"
 
-#: builtin/gc.c:600
+#: builtin/gc.c:599
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr "Se \"git help gc\" för manuell hushållning.\n"
 
-#: builtin/gc.c:640
+#: builtin/gc.c:639
 #, c-format
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
@@ -13376,7 +13451,7 @@
 "gc körs redan på maskinen \"%s\" pid %<PRIuMAX> (använd --force om så inte "
 "är fallet)"
 
-#: builtin/gc.c:695
+#: builtin/gc.c:694
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr ""
@@ -13402,257 +13477,257 @@
 #. grep.threads
 #.
 #: builtin/grep.c:287 builtin/index-pack.c:1534 builtin/index-pack.c:1727
-#: builtin/pack-objects.c:2722
+#: builtin/pack-objects.c:2708
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "trådstöd saknas, ignorerar %s"
 
-#: builtin/grep.c:467 builtin/grep.c:591 builtin/grep.c:633
+#: builtin/grep.c:467 builtin/grep.c:592 builtin/grep.c:635
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "kunde inte läsa träd (%s)"
 
-#: builtin/grep.c:648
+#: builtin/grep.c:650
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "kunde inte \"grep\" från objekt av typen %s"
 
-#: builtin/grep.c:714
+#: builtin/grep.c:716
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "flaggan \"%c\" antar ett numeriskt värde"
 
-#: builtin/grep.c:813
+#: builtin/grep.c:815
 msgid "search in index instead of in the work tree"
 msgstr "sök i indexet istället för i arbetskatalogen"
 
-#: builtin/grep.c:815
+#: builtin/grep.c:817
 msgid "find in contents not managed by git"
 msgstr "sök i innehåll som inte hanteras av git"
 
-#: builtin/grep.c:817
+#: builtin/grep.c:819
 msgid "search in both tracked and untracked files"
 msgstr "sök i både spårade och ospårade filer"
 
-#: builtin/grep.c:819
+#: builtin/grep.c:821
 msgid "ignore files specified via '.gitignore'"
 msgstr "ignorera filer angivna i \".gitignore\""
 
-#: builtin/grep.c:821
+#: builtin/grep.c:823
 msgid "recursively search in each submodule"
 msgstr "sök varje undermodul rekursivt"
 
-#: builtin/grep.c:824
+#: builtin/grep.c:826
 msgid "show non-matching lines"
 msgstr "visa rader som inte träffas"
 
-#: builtin/grep.c:826
+#: builtin/grep.c:828
 msgid "case insensitive matching"
 msgstr "skiftlägesokänslig sökning"
 
-#: builtin/grep.c:828
+#: builtin/grep.c:830
 msgid "match patterns only at word boundaries"
 msgstr "matcha endast mönster vid ordgränser"
 
-#: builtin/grep.c:830
+#: builtin/grep.c:832
 msgid "process binary files as text"
 msgstr "hantera binärfiler som text"
 
-#: builtin/grep.c:832
+#: builtin/grep.c:834
 msgid "don't match patterns in binary files"
 msgstr "träffa inte mönster i binärfiler"
 
-#: builtin/grep.c:835
+#: builtin/grep.c:837
 msgid "process binary files with textconv filters"
 msgstr "hantera binärfiler med textconv-filter"
 
-#: builtin/grep.c:837
+#: builtin/grep.c:839
 msgid "search in subdirectories (default)"
 msgstr "sök i underkataloger (standard)"
 
-#: builtin/grep.c:839
+#: builtin/grep.c:841
 msgid "descend at most <depth> levels"
 msgstr "gå som mest ned <djup> nivåer"
 
-#: builtin/grep.c:843
+#: builtin/grep.c:845
 msgid "use extended POSIX regular expressions"
 msgstr "använd utökade POSIX-reguljära uttryck"
 
-#: builtin/grep.c:846
+#: builtin/grep.c:848
 msgid "use basic POSIX regular expressions (default)"
 msgstr "använd grundläggande POSIX-reguljära uttryck (standard)"
 
-#: builtin/grep.c:849
+#: builtin/grep.c:851
 msgid "interpret patterns as fixed strings"
 msgstr "tolka mönster som fixerade strängar"
 
-#: builtin/grep.c:852
+#: builtin/grep.c:854
 msgid "use Perl-compatible regular expressions"
 msgstr "använd Perlkompatibla reguljära uttryck"
 
-#: builtin/grep.c:855
+#: builtin/grep.c:857
 msgid "show line numbers"
 msgstr "visa radnummer"
 
-#: builtin/grep.c:856
+#: builtin/grep.c:858
 msgid "show column number of first match"
 msgstr "visa kolumnnummer för första träff"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:859
 msgid "don't show filenames"
 msgstr "visa inte filnamn"
 
-#: builtin/grep.c:858
+#: builtin/grep.c:860
 msgid "show filenames"
 msgstr "visa filnamn"
 
-#: builtin/grep.c:860
+#: builtin/grep.c:862
 msgid "show filenames relative to top directory"
 msgstr "visa filnamn relativa till toppkatalogen"
 
-#: builtin/grep.c:862
+#: builtin/grep.c:864
 msgid "show only filenames instead of matching lines"
 msgstr "visa endast filnamn istället för träffade rader"
 
-#: builtin/grep.c:864
+#: builtin/grep.c:866
 msgid "synonym for --files-with-matches"
 msgstr "synonym för --files-with-matches"
 
-#: builtin/grep.c:867
+#: builtin/grep.c:869
 msgid "show only the names of files without match"
 msgstr "visa endast namn på filer utan träffar"
 
-#: builtin/grep.c:869
+#: builtin/grep.c:871
 msgid "print NUL after filenames"
 msgstr "skriv NUL efter filnamn"
 
-#: builtin/grep.c:872
+#: builtin/grep.c:874
 msgid "show only matching parts of a line"
 msgstr "visa endast träffade delar av rader"
 
-#: builtin/grep.c:874
+#: builtin/grep.c:876
 msgid "show the number of matches instead of matching lines"
 msgstr "visa antal träffar istället för träffade rader"
 
-#: builtin/grep.c:875
+#: builtin/grep.c:877
 msgid "highlight matches"
 msgstr "ljusmarkera träffar"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:879
 msgid "print empty line between matches from different files"
 msgstr "skriv tomma rader mellan träffar från olika filer"
 
-#: builtin/grep.c:879
+#: builtin/grep.c:881
 msgid "show filename only once above matches from same file"
 msgstr "visa filnamn endast en gång ovanför träffar från samma fil"
 
-#: builtin/grep.c:882
+#: builtin/grep.c:884
 msgid "show <n> context lines before and after matches"
 msgstr "visa <n> rader sammanhang före och efter träffar"
 
-#: builtin/grep.c:885
+#: builtin/grep.c:887
 msgid "show <n> context lines before matches"
 msgstr "visa <n> rader sammanhang före träffar"
 
-#: builtin/grep.c:887
+#: builtin/grep.c:889
 msgid "show <n> context lines after matches"
 msgstr "visa <n> rader sammanhang efter träffar"
 
-#: builtin/grep.c:889
+#: builtin/grep.c:891
 msgid "use <n> worker threads"
 msgstr "använd <n> jobbtrådar"
 
-#: builtin/grep.c:890
+#: builtin/grep.c:892
 msgid "shortcut for -C NUM"
 msgstr "genväg för -C NUM"
 
-#: builtin/grep.c:893
+#: builtin/grep.c:895
 msgid "show a line with the function name before matches"
 msgstr "visa en rad med funktionsnamnet före träffen"
 
-#: builtin/grep.c:895
+#: builtin/grep.c:897
 msgid "show the surrounding function"
 msgstr "visa den omkringliggande funktionen"
 
-#: builtin/grep.c:898
+#: builtin/grep.c:900
 msgid "read patterns from file"
 msgstr "läs mönster från fil"
 
-#: builtin/grep.c:900
+#: builtin/grep.c:902
 msgid "match <pattern>"
 msgstr "träffa <mönster>"
 
-#: builtin/grep.c:902
+#: builtin/grep.c:904
 msgid "combine patterns specified with -e"
 msgstr "kombinera mönster som anges med -e"
 
-#: builtin/grep.c:914
+#: builtin/grep.c:916
 msgid "indicate hit with exit status without output"
 msgstr "ange träff med slutstatuskod utan utdata"
 
-#: builtin/grep.c:916
+#: builtin/grep.c:918
 msgid "show only matches from files that match all patterns"
 msgstr "visa endast träffar från filer som träffar alla mönster"
 
-#: builtin/grep.c:918
+#: builtin/grep.c:920
 msgid "show parse tree for grep expression"
 msgstr "visa analysträd för grep-uttryck"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:924
 msgid "pager"
 msgstr "bläddrare"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:924
 msgid "show matching files in the pager"
 msgstr "visa träffade filer i filbläddraren"
 
-#: builtin/grep.c:926
+#: builtin/grep.c:928
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "tillåt anropa grep(1) (ignoreras av detta bygge)"
 
-#: builtin/grep.c:990
+#: builtin/grep.c:992
 msgid "no pattern given"
 msgstr "inget mönster angavs"
 
-#: builtin/grep.c:1026
+#: builtin/grep.c:1028
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr "--no-index och --untracked kan inte användas med revisioner"
 
-#: builtin/grep.c:1034
+#: builtin/grep.c:1036
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "kan inte slå upp revision: %s"
 
-#: builtin/grep.c:1065
+#: builtin/grep.c:1067
 msgid "invalid option combination, ignoring --threads"
 msgstr "ogiltig kombination av flaggor, ignorerar --threads"
 
-#: builtin/grep.c:1068 builtin/pack-objects.c:3405
+#: builtin/grep.c:1070 builtin/pack-objects.c:3400
 msgid "no threads support, ignoring --threads"
 msgstr "trådstöd saknas, ignorerar --threads"
 
-#: builtin/grep.c:1071 builtin/index-pack.c:1531 builtin/pack-objects.c:2719
+#: builtin/grep.c:1073 builtin/index-pack.c:1531 builtin/pack-objects.c:2705
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "felaktigt antal trådar angivet (%d)"
 
-#: builtin/grep.c:1094
+#: builtin/grep.c:1096
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "--open-files-in-pager fungerar endast i arbetskatalogen"
 
-#: builtin/grep.c:1117
+#: builtin/grep.c:1119
 msgid "option not supported with --recurse-submodules"
 msgstr "flaggan stöds inte med --recurse-submodules"
 
-#: builtin/grep.c:1123
+#: builtin/grep.c:1125
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr "--cached och --untracked kan inte användas med --no-index"
 
-#: builtin/grep.c:1129
+#: builtin/grep.c:1131
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr "--[no-]exclude-standard kan inte användas för spårat innehåll"
 
-#: builtin/grep.c:1137
+#: builtin/grep.c:1139
 msgid "both --cached and trees are given"
 msgstr "både --cached och träd angavs"
 
@@ -13837,7 +13912,7 @@
 msgid "used more bytes than were available"
 msgstr "använde fler byte än tillgängligt"
 
-#: builtin/index-pack.c:288 builtin/pack-objects.c:600
+#: builtin/index-pack.c:288 builtin/pack-objects.c:604
 msgid "pack too large for current definition of off_t"
 msgstr "paket för stort för nuvarande definition av off_t"
 
@@ -13903,8 +13978,8 @@
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "SHA1-KOLLISION UPPTÄCKT VID %s !"
 
-#: builtin/index-pack.c:738 builtin/pack-objects.c:153
-#: builtin/pack-objects.c:213 builtin/pack-objects.c:307
+#: builtin/index-pack.c:738 builtin/pack-objects.c:157
+#: builtin/pack-objects.c:217 builtin/pack-objects.c:311
 #, c-format
 msgid "unable to read %s"
 msgstr "kunde inte läsa %s"
@@ -13965,7 +14040,7 @@
 msgid "Resolving deltas"
 msgstr "Analyserar delta"
 
-#: builtin/index-pack.c:1205 builtin/pack-objects.c:2491
+#: builtin/index-pack.c:1205 builtin/pack-objects.c:2481
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "kunde inte skapa tråd: %s"
@@ -14030,7 +14105,7 @@
 msgid "cannot store index file"
 msgstr "kan inte spara indexfil"
 
-#: builtin/index-pack.c:1525 builtin/pack-objects.c:2730
+#: builtin/index-pack.c:1525 builtin/pack-objects.c:2716
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "felaktig pack.indexversion=%<PRIu32>"
@@ -14277,128 +14352,108 @@
 msgid "invalid --decorate option: %s"
 msgstr "ogiltig flagga för --decorate: %s"
 
-#: builtin/log.c:160
-msgid ""
-"log.mailmap is not set; its implicit value will change in an\n"
-"upcoming release. To squelch this message and preserve current\n"
-"behaviour, set the log.mailmap configuration value to false.\n"
-"\n"
-"To squelch this message and adopt the new behaviour now, set the\n"
-"log.mailmap configuration value to true.\n"
-"\n"
-"See 'git help config' and search for 'log.mailmap' for further information."
-msgstr ""
-"log.mailmap har inte satts: förvalet kommer ändras i en kommande\n"
-"version. För att dölja det här meddelandet och behålla nuvarande\n"
-"beteende, sätt konfigurationsvariabeln log.mailmap till false.\n"
-"\n"
-"För att dölja det här meddelandet och använda det nya beteendet,\n"
-"sätt konfigurationsvariabeln log.mailmap till true.\n"
-"\n"
-"Se \"git help config\" och sök efter \"log.mailmap\" för mer information."
-
-#: builtin/log.c:183
+#: builtin/log.c:173
 msgid "show source"
 msgstr "visa källkod"
 
-#: builtin/log.c:184
+#: builtin/log.c:174
 msgid "Use mail map file"
 msgstr "Använd e-postmappningsfil"
 
-#: builtin/log.c:186
+#: builtin/log.c:176
 msgid "only decorate refs that match <pattern>"
 msgstr "dekorera endast referenser som motsvarar <mönster>"
 
-#: builtin/log.c:188
+#: builtin/log.c:178
 msgid "do not decorate refs that match <pattern>"
 msgstr "dekorera inte referenser som motsvarar <mönster>"
 
-#: builtin/log.c:189
+#: builtin/log.c:179
 msgid "decorate options"
 msgstr "dekoreringsflaggor"
 
-#: builtin/log.c:192
+#: builtin/log.c:182
 msgid "Process line range n,m in file, counting from 1"
 msgstr "Behandla radintervallet n,m i filen, med början på 1"
 
-#: builtin/log.c:297
+#: builtin/log.c:280
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "Slututdata: %d %s\n"
 
-#: builtin/log.c:551
+#: builtin/log.c:534
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: felaktig fil"
 
-#: builtin/log.c:566 builtin/log.c:660
+#: builtin/log.c:549 builtin/log.c:644
 #, c-format
 msgid "could not read object %s"
 msgstr "kunde inte läsa objektet %s"
 
-#: builtin/log.c:685
+#: builtin/log.c:669
 #, c-format
 msgid "unknown type: %d"
 msgstr "okänd typ: %d"
 
-#: builtin/log.c:808
+#: builtin/log.c:792
 msgid "format.headers without value"
 msgstr "format.headers utan värde"
 
-#: builtin/log.c:925
+#: builtin/log.c:909
 msgid "name of output directory is too long"
 msgstr "namnet på utdatakatalogen är för långt"
 
-#: builtin/log.c:941
+#: builtin/log.c:925
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "kan inte öppna patchfilen %s"
 
-#: builtin/log.c:958
+#: builtin/log.c:942
 msgid "need exactly one range"
 msgstr "behöver precis ett intervall"
 
-#: builtin/log.c:968
+#: builtin/log.c:952
 msgid "not a range"
 msgstr "inte ett intervall"
 
-#: builtin/log.c:1091
+#: builtin/log.c:1075
 msgid "cover letter needs email format"
 msgstr "omslagsbrevet behöver e-postformat"
 
-#: builtin/log.c:1097
+#: builtin/log.c:1081
 msgid "failed to create cover-letter file"
 msgstr "misslyckades skapa fil för omslagsbrev"
 
-#: builtin/log.c:1176
+#: builtin/log.c:1160
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "tokigt in-reply-to: %s"
 
-#: builtin/log.c:1203
+#: builtin/log.c:1187
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<flaggor>] [<sedan> | <revisionsintervall>]"
 
-#: builtin/log.c:1261
+#: builtin/log.c:1245
 msgid "two output directories?"
 msgstr "två utdatakataloger?"
 
-#: builtin/log.c:1372 builtin/log.c:2116 builtin/log.c:2118 builtin/log.c:2130
+#: builtin/log.c:1356 builtin/log.c:2116 builtin/log.c:2118 builtin/log.c:2130
 #, c-format
 msgid "unknown commit %s"
 msgstr "okänd incheckning %s"
 
-#: builtin/log.c:1382 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1366 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "misslyckades slå upp \"%s\" som en giltig referens"
 
-#: builtin/log.c:1387
+#: builtin/log.c:1371
 msgid "could not find exact merge base"
 msgstr "kunde inte hitta exakt sammanslagningsbas"
 
-#: builtin/log.c:1391
+#: builtin/log.c:1375
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -14408,216 +14463,216 @@
 "använd git branch --set-upstream-to för att spåra en fjärrgren.\n"
 "Eller så kan du ange basincheckning med --base=<bas-inchecknings-id> manuellt"
 
-#: builtin/log.c:1411
+#: builtin/log.c:1395
 msgid "failed to find exact merge base"
 msgstr "kunde inte hitta exakt sammanslagningsbas"
 
-#: builtin/log.c:1422
+#: builtin/log.c:1406
 msgid "base commit should be the ancestor of revision list"
 msgstr "basincheckningen bör vara förfader till revisionslistan"
 
-#: builtin/log.c:1426
+#: builtin/log.c:1410
 msgid "base commit shouldn't be in revision list"
 msgstr "basincheckningen bör inte vara i revisionslistan"
 
-#: builtin/log.c:1479
+#: builtin/log.c:1463
 msgid "cannot get patch id"
 msgstr "kan inte hämta patch-id"
 
-#: builtin/log.c:1531
+#: builtin/log.c:1515
 msgid "failed to infer range-diff ranges"
 msgstr "misslyckades räkna ut intervall range-diff"
 
-#: builtin/log.c:1576
+#: builtin/log.c:1560
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "använd [PATCH n/m] även för en ensam patch"
 
-#: builtin/log.c:1579
+#: builtin/log.c:1563
 msgid "use [PATCH] even with multiple patches"
 msgstr "använd [PATCH] även för flera patchar"
 
-#: builtin/log.c:1583
+#: builtin/log.c:1567
 msgid "print patches to standard out"
 msgstr "skriv patcharna på standard ut"
 
-#: builtin/log.c:1585
+#: builtin/log.c:1569
 msgid "generate a cover letter"
 msgstr "generera ett följebrev"
 
-#: builtin/log.c:1587
+#: builtin/log.c:1571
 msgid "use simple number sequence for output file names"
 msgstr "använd enkel nummersekvens för utdatafilnamn"
 
-#: builtin/log.c:1588
+#: builtin/log.c:1572
 msgid "sfx"
 msgstr "sfx"
 
-#: builtin/log.c:1589
+#: builtin/log.c:1573
 msgid "use <sfx> instead of '.patch'"
 msgstr "använd <sfx> istället för \".patch\""
 
-#: builtin/log.c:1591
+#: builtin/log.c:1575
 msgid "start numbering patches at <n> instead of 1"
 msgstr "börja numrera patchar på <n> istället för 1"
 
-#: builtin/log.c:1593
+#: builtin/log.c:1577
 msgid "mark the series as Nth re-roll"
 msgstr "markera serien som N:te försök"
 
-#: builtin/log.c:1595
+#: builtin/log.c:1579
 msgid "Use [RFC PATCH] instead of [PATCH]"
 msgstr "Använd  [RFC PATCH] istället för [PATCH]"
 
-#: builtin/log.c:1598
+#: builtin/log.c:1582
 msgid "Use [<prefix>] instead of [PATCH]"
 msgstr "Använd [<prefix>] istället för [PATCH]"
 
-#: builtin/log.c:1601
+#: builtin/log.c:1585
 msgid "store resulting files in <dir>"
 msgstr "spara filerna i <katalog>"
 
-#: builtin/log.c:1604
+#: builtin/log.c:1588
 msgid "don't strip/add [PATCH]"
 msgstr "ta inte bort eller lägg till [PATCH]"
 
-#: builtin/log.c:1607
+#: builtin/log.c:1591
 msgid "don't output binary diffs"
 msgstr "skriv inte binära diffar"
 
-#: builtin/log.c:1609
+#: builtin/log.c:1593
 msgid "output all-zero hash in From header"
 msgstr "använd hashvärde med nollor i From-huvud"
 
-#: builtin/log.c:1611
+#: builtin/log.c:1595
 msgid "don't include a patch matching a commit upstream"
 msgstr "ta inte med patchar som motsvarar en uppströmsincheckning"
 
-#: builtin/log.c:1613
+#: builtin/log.c:1597
 msgid "show patch format instead of default (patch + stat)"
 msgstr "visa patchformat istället för standard (patch + stat)"
 
-#: builtin/log.c:1615
+#: builtin/log.c:1599
 msgid "Messaging"
 msgstr "E-post"
 
-#: builtin/log.c:1616
+#: builtin/log.c:1600
 msgid "header"
 msgstr "huvud"
 
-#: builtin/log.c:1617
+#: builtin/log.c:1601
 msgid "add email header"
 msgstr "lägg till e-posthuvud"
 
-#: builtin/log.c:1618 builtin/log.c:1620
+#: builtin/log.c:1602 builtin/log.c:1604
 msgid "email"
 msgstr "epost"
 
-#: builtin/log.c:1618
+#: builtin/log.c:1602
 msgid "add To: header"
 msgstr "lägg till mottagarhuvud (\"To:\")"
 
-#: builtin/log.c:1620
+#: builtin/log.c:1604
 msgid "add Cc: header"
 msgstr "lägg till kopiehuvud (\"Cc:\")"
 
-#: builtin/log.c:1622
+#: builtin/log.c:1606
 msgid "ident"
 msgstr "ident"
 
-#: builtin/log.c:1623
+#: builtin/log.c:1607
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr "sätt Från-adress till <ident> (eller incheckare om ident saknas)"
 
-#: builtin/log.c:1625
+#: builtin/log.c:1609
 msgid "message-id"
 msgstr "meddelande-id"
 
-#: builtin/log.c:1626
+#: builtin/log.c:1610
 msgid "make first mail a reply to <message-id>"
 msgstr "gör det första brevet ett svar till <meddelande-id>"
 
-#: builtin/log.c:1627 builtin/log.c:1630
+#: builtin/log.c:1611 builtin/log.c:1614
 msgid "boundary"
 msgstr "gräns"
 
-#: builtin/log.c:1628
+#: builtin/log.c:1612
 msgid "attach the patch"
 msgstr "bifoga patchen"
 
-#: builtin/log.c:1631
+#: builtin/log.c:1615
 msgid "inline the patch"
 msgstr "gör patchen ett inline-objekt"
 
-#: builtin/log.c:1635
+#: builtin/log.c:1619
 msgid "enable message threading, styles: shallow, deep"
 msgstr "aktivera brevtrådning, typer: shallow, deep"
 
-#: builtin/log.c:1637
+#: builtin/log.c:1621
 msgid "signature"
 msgstr "signatur"
 
-#: builtin/log.c:1638
+#: builtin/log.c:1622
 msgid "add a signature"
 msgstr "lägg till signatur"
 
-#: builtin/log.c:1639
+#: builtin/log.c:1623
 msgid "base-commit"
 msgstr "basincheckning"
 
-#: builtin/log.c:1640
+#: builtin/log.c:1624
 msgid "add prerequisite tree info to the patch series"
 msgstr "lägg till förhandskrävd trädinfo i patchserien"
 
-#: builtin/log.c:1642
+#: builtin/log.c:1626
 msgid "add a signature from a file"
 msgstr "lägg till signatur från fil"
 
-#: builtin/log.c:1643
+#: builtin/log.c:1627
 msgid "don't print the patch filenames"
 msgstr "visa inte filnamn för patchar"
 
-#: builtin/log.c:1645
+#: builtin/log.c:1629
 msgid "show progress while generating patches"
 msgstr "visa förloppsindikator medan patchar skapas"
 
-#: builtin/log.c:1647
+#: builtin/log.c:1631
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr "visa ändringar mot <rev> i omslagsbrev eller ensam patch"
 
-#: builtin/log.c:1650
+#: builtin/log.c:1634
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr "visa ändringar mot <refspec> i omslagsbrev eller ensam patch"
 
-#: builtin/log.c:1652
+#: builtin/log.c:1636
 msgid "percentage by which creation is weighted"
 msgstr "procent som skapelse vägs med"
 
-#: builtin/log.c:1727
+#: builtin/log.c:1711
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "ogiltig ident-rad: %s"
 
-#: builtin/log.c:1742
+#: builtin/log.c:1726
 msgid "-n and -k are mutually exclusive"
 msgstr "-n och -k kan inte användas samtidigt"
 
-#: builtin/log.c:1744
+#: builtin/log.c:1728
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr "--subject-prefix/--rfc och -k kan inte användas samtidigt"
 
-#: builtin/log.c:1752
+#: builtin/log.c:1736
 msgid "--name-only does not make sense"
 msgstr "kan inte använda --name-only"
 
-#: builtin/log.c:1754
+#: builtin/log.c:1738
 msgid "--name-status does not make sense"
 msgstr "kan inte använda --name-status"
 
-#: builtin/log.c:1756
+#: builtin/log.c:1740
 msgid "--check does not make sense"
 msgstr "kan inte använda --check"
 
-#: builtin/log.c:1788
+#: builtin/log.c:1773
 msgid "standard output, or directory, which one?"
 msgstr "standard ut, eller katalog, vilken skall det vara?"
 
@@ -14792,7 +14847,7 @@
 msgid "do not print remote URL"
 msgstr "visa inte fjärr-URL"
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1464
+#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1488
 msgid "exec"
 msgstr "exec"
 
@@ -14901,32 +14956,32 @@
 msgid "Available custom strategies are:"
 msgstr "Tillgängliga skräddarsydda strategier är:"
 
-#: builtin/merge.c:244 builtin/pull.c:151
+#: builtin/merge.c:244 builtin/pull.c:152
 msgid "do not show a diffstat at the end of the merge"
 msgstr "visa inte en diffstat när sammanslagningen är färdig"
 
-#: builtin/merge.c:247 builtin/pull.c:154
+#: builtin/merge.c:247 builtin/pull.c:155
 msgid "show a diffstat at the end of the merge"
 msgstr "visa en diffstat när sammanslagningen är färdig"
 
-#: builtin/merge.c:248 builtin/pull.c:157
+#: builtin/merge.c:248 builtin/pull.c:158
 msgid "(synonym to --stat)"
 msgstr "(synonym till --stat)"
 
-#: builtin/merge.c:250 builtin/pull.c:160
+#: builtin/merge.c:250 builtin/pull.c:161
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr ""
 "lägg till (som mest <n>) poster från shortlog till incheckningsmeddelandet"
 
-#: builtin/merge.c:253 builtin/pull.c:166
+#: builtin/merge.c:253 builtin/pull.c:167
 msgid "create a single commit instead of doing a merge"
 msgstr "skapa en ensam incheckning istället för en sammanslagning"
 
-#: builtin/merge.c:255 builtin/pull.c:169
+#: builtin/merge.c:255 builtin/pull.c:170
 msgid "perform a commit if the merge succeeds (default)"
 msgstr "utför en incheckning om sammanslagningen lyckades (standard)"
 
-#: builtin/merge.c:257 builtin/pull.c:172
+#: builtin/merge.c:257 builtin/pull.c:173
 msgid "edit message before committing"
 msgstr "redigera meddelande innan incheckning"
 
@@ -14934,28 +14989,28 @@
 msgid "allow fast-forward (default)"
 msgstr "tillåt snabbspolning (standard)"
 
-#: builtin/merge.c:261 builtin/pull.c:179
+#: builtin/merge.c:261 builtin/pull.c:180
 msgid "abort if fast-forward is not possible"
 msgstr "avbryt om snabbspolning inte är möjlig"
 
-#: builtin/merge.c:265 builtin/pull.c:182
+#: builtin/merge.c:265 builtin/pull.c:183
 msgid "verify that the named commit has a valid GPG signature"
 msgstr "bekräfta att den namngivna incheckningen har en giltig GPG-signatur"
 
-#: builtin/merge.c:266 builtin/notes.c:787 builtin/pull.c:186
-#: builtin/rebase.c:492 builtin/rebase.c:1477 builtin/revert.c:114
+#: builtin/merge.c:266 builtin/notes.c:787 builtin/pull.c:187
+#: builtin/rebase.c:493 builtin/rebase.c:1501 builtin/revert.c:114
 msgid "strategy"
 msgstr "strategi"
 
-#: builtin/merge.c:267 builtin/pull.c:187
+#: builtin/merge.c:267 builtin/pull.c:188
 msgid "merge strategy to use"
 msgstr "sammanslagningsstrategi att använda"
 
-#: builtin/merge.c:268 builtin/pull.c:190
+#: builtin/merge.c:268 builtin/pull.c:191
 msgid "option=value"
 msgstr "alternativ=värde"
 
-#: builtin/merge.c:269 builtin/pull.c:191
+#: builtin/merge.c:269 builtin/pull.c:192
 msgid "option for selected merge strategy"
 msgstr "alternativ för vald sammanslagningsstrategi"
 
@@ -14975,13 +15030,13 @@
 msgid "continue the current in-progress merge"
 msgstr "fortsätt den pågående sammanslagningen"
 
-#: builtin/merge.c:284 builtin/pull.c:198
+#: builtin/merge.c:284 builtin/pull.c:199
 msgid "allow merging unrelated histories"
 msgstr "tillåt sammanslagning av orelaterade historier"
 
 #: builtin/merge.c:290
-msgid "verify commit-msg hook"
-msgstr "bekräfta commit-msg-krok"
+msgid "bypass pre-merge-commit and commit-msg hooks"
+msgstr "förbigå pre-merge-commit- och commit-msg-krokar"
 
 #: builtin/merge.c:307
 msgid "could not run stash."
@@ -15024,33 +15079,33 @@
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "Felaktig branch.%s.mergeoptions-sträng: %s"
 
-#: builtin/merge.c:708
+#: builtin/merge.c:705
 msgid "Not handling anything other than two heads merge."
 msgstr "Hanterar inte något annat än en sammanslagning av två huvuden."
 
-#: builtin/merge.c:722
+#: builtin/merge.c:719
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr "Felaktig flagga för merge-recursive: -X%s"
 
-#: builtin/merge.c:737
+#: builtin/merge.c:734
 #, c-format
 msgid "unable to write %s"
 msgstr "kunde inte skriva %s"
 
-#: builtin/merge.c:789
+#: builtin/merge.c:786
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "Kunde inte läsa från \"%s\""
 
-#: builtin/merge.c:798
+#: builtin/merge.c:795
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr ""
 "Checkar inte in sammanslagningen; använd \"git commit\" för att slutföra "
 "den.\n"
 
-#: builtin/merge.c:804
+#: builtin/merge.c:801
 msgid ""
 "Please enter a commit message to explain why this merge is necessary,\n"
 "especially if it merges an updated upstream into a topic branch.\n"
@@ -15061,11 +15116,11 @@
 "temagren.\n"
 "\n"
 
-#: builtin/merge.c:809
+#: builtin/merge.c:806
 msgid "An empty message aborts the commit.\n"
 msgstr "Ett tomt meddelande avbryter incheckningen.\n"
 
-#: builtin/merge.c:812
+#: builtin/merge.c:809
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -15074,73 +15129,73 @@
 "Rader som inleds med \"%c\" kommer ignoreras, och ett tomt meddelande\n"
 "avbryter incheckningen.\n"
 
-#: builtin/merge.c:853
+#: builtin/merge.c:862
 msgid "Empty commit message."
 msgstr "Tomt incheckningsmeddelande."
 
-#: builtin/merge.c:872
+#: builtin/merge.c:877
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Underbart.\n"
 
-#: builtin/merge.c:933
+#: builtin/merge.c:938
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 "Kunde inte slå ihop automatiskt; fixa konflikter och checka in resultatet.\n"
 
-#: builtin/merge.c:972
+#: builtin/merge.c:977
 msgid "No current branch."
 msgstr "Inte på någon gren."
 
-#: builtin/merge.c:974
+#: builtin/merge.c:979
 msgid "No remote for the current branch."
 msgstr "Ingen fjärr för aktuell gren."
 
-#: builtin/merge.c:976
+#: builtin/merge.c:981
 msgid "No default upstream defined for the current branch."
 msgstr "Ingen standarduppström angiven för aktuell gren."
 
-#: builtin/merge.c:981
+#: builtin/merge.c:986
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "Ingen fjärrspårande gren för %s från %s"
 
-#: builtin/merge.c:1038
+#: builtin/merge.c:1043
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Felaktigt värde \"%s\" i miljövariabeln \"%s\""
 
-#: builtin/merge.c:1141
+#: builtin/merge.c:1146
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "inte något vi kan slå ihop med %s: %s"
 
-#: builtin/merge.c:1175
+#: builtin/merge.c:1180
 msgid "not something we can merge"
 msgstr "inte något vi kan slå ihop"
 
-#: builtin/merge.c:1278
+#: builtin/merge.c:1283
 msgid "--abort expects no arguments"
 msgstr "--abort tar inga argument"
 
-#: builtin/merge.c:1282
+#: builtin/merge.c:1287
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "Ingen sammanslagning att avbryta (MERGE_HEAD saknas)."
 
-#: builtin/merge.c:1291
+#: builtin/merge.c:1296
 msgid "--quit expects no arguments"
 msgstr "--quit tar inga argument"
 
-#: builtin/merge.c:1304
+#: builtin/merge.c:1309
 msgid "--continue expects no arguments"
 msgstr "--continue tar inga argument"
 
-#: builtin/merge.c:1308
+#: builtin/merge.c:1313
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "Ingen sammanslagning pågår (MERGE_HEAD saknas)."
 
-#: builtin/merge.c:1324
+#: builtin/merge.c:1329
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -15148,7 +15203,7 @@
 "Du har inte avslutat sammanslagningen (MERGE_HEAD finns).\n"
 "Checka in dina ändringar innan du slår ihop."
 
-#: builtin/merge.c:1331
+#: builtin/merge.c:1336
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -15156,96 +15211,96 @@
 "Du har inte avslutat din \"cherry-pick\" (CHERRY_PICK_HEAD finns).\n"
 "Checka in dina ändringar innan du slår ihop."
 
-#: builtin/merge.c:1334
+#: builtin/merge.c:1339
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "Du har inte avslutat din \"cherry-pick\" (CHERRY_PICK_HEAD finns)."
 
-#: builtin/merge.c:1348
+#: builtin/merge.c:1353
 msgid "You cannot combine --squash with --no-ff."
 msgstr "Du kan inte kombinera --squash med --no-ff."
 
-#: builtin/merge.c:1350
+#: builtin/merge.c:1355
 msgid "You cannot combine --squash with --commit."
 msgstr "Du kan inte kombinera --squash med --commit."
 
-#: builtin/merge.c:1366
+#: builtin/merge.c:1371
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr "Ingen incheckning angiven och merge.defaultToUpstream är ej satt."
 
-#: builtin/merge.c:1383
+#: builtin/merge.c:1388
 msgid "Squash commit into empty head not supported yet"
 msgstr "Stöder inte en tillplattningsincheckning på ett tomt huvud ännu"
 
-#: builtin/merge.c:1385
+#: builtin/merge.c:1390
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr "Icke-snabbspolad incheckning kan inte användas med ett tomt huvud"
 
-#: builtin/merge.c:1390
+#: builtin/merge.c:1395
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - inte något vi kan slå ihop"
 
-#: builtin/merge.c:1392
+#: builtin/merge.c:1397
 msgid "Can merge only exactly one commit into empty head"
 msgstr "Kan endast slå ihop en enda incheckning i ett tomt huvud"
 
-#: builtin/merge.c:1471
+#: builtin/merge.c:1476
 msgid "refusing to merge unrelated histories"
 msgstr "vägrar slå samman orelaterad historik"
 
-#: builtin/merge.c:1480
+#: builtin/merge.c:1485
 msgid "Already up to date."
 msgstr "Redan à jour."
 
-#: builtin/merge.c:1490
+#: builtin/merge.c:1495
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Uppdaterar %s..%s\n"
 
-#: builtin/merge.c:1532
+#: builtin/merge.c:1537
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "Försöker riktigt enkel sammanslagning i indexet...\n"
 
-#: builtin/merge.c:1539
+#: builtin/merge.c:1544
 #, c-format
 msgid "Nope.\n"
 msgstr "Nej.\n"
 
-#: builtin/merge.c:1564
+#: builtin/merge.c:1569
 msgid "Already up to date. Yeeah!"
 msgstr "Redan à jour. Toppen!"
 
-#: builtin/merge.c:1570
+#: builtin/merge.c:1575
 msgid "Not possible to fast-forward, aborting."
 msgstr "Kan inte snabbspola, avbryter."
 
-#: builtin/merge.c:1593 builtin/merge.c:1658
+#: builtin/merge.c:1598 builtin/merge.c:1663
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Återspolar trädet till orört...\n"
 
-#: builtin/merge.c:1597
+#: builtin/merge.c:1602
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Försöker sammanslagningsstrategin %s...\n"
 
-#: builtin/merge.c:1649
+#: builtin/merge.c:1654
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Ingen sammanslagningsstrategi hanterade sammanslagningen.\n"
 
-#: builtin/merge.c:1651
+#: builtin/merge.c:1656
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "Sammanslagning med strategin %s misslyckades.\n"
 
-#: builtin/merge.c:1660
+#: builtin/merge.c:1665
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr "Använder %s för att förbereda lösning för hand.\n"
 
-#: builtin/merge.c:1672
+#: builtin/merge.c:1677
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
@@ -15331,33 +15386,33 @@
 msgid "set labels for file1/orig-file/file2"
 msgstr "sätt etiketter för fil1/origfil/fil2"
 
-#: builtin/merge-recursive.c:46
+#: builtin/merge-recursive.c:47
 #, c-format
 msgid "unknown option %s"
 msgstr "okänd flagga %s"
 
-#: builtin/merge-recursive.c:52
+#: builtin/merge-recursive.c:53
 #, c-format
 msgid "could not parse object '%s'"
 msgstr "kunde inte tolka objektet \"%s\""
 
-#: builtin/merge-recursive.c:56
+#: builtin/merge-recursive.c:57
 #, c-format
 msgid "cannot handle more than %d base. Ignoring %s."
 msgid_plural "cannot handle more than %d bases. Ignoring %s."
 msgstr[0] "kan inte hantera mer än %d bas. Ignorerar %s."
 msgstr[1] "kan inte hantera mer än %d baser. Ignorerar %s."
 
-#: builtin/merge-recursive.c:64
+#: builtin/merge-recursive.c:65
 msgid "not handling anything other than two heads merge."
 msgstr "hanterar inte något annat än en sammanslagning av två huvuden."
 
-#: builtin/merge-recursive.c:70 builtin/merge-recursive.c:72
+#: builtin/merge-recursive.c:74 builtin/merge-recursive.c:76
 #, c-format
 msgid "could not resolve ref '%s'"
 msgstr "kunde inte bestämma referensen \"%s\""
 
-#: builtin/merge-recursive.c:78
+#: builtin/merge-recursive.c:82
 #, c-format
 msgid "Merging %s with %s\n"
 msgstr "Slår ihop %s med %s\n"
@@ -15499,52 +15554,52 @@
 msgid "Renaming %s to %s\n"
 msgstr "Byter namn på %s till %s\n"
 
-#: builtin/mv.c:277 builtin/remote.c:717 builtin/repack.c:520
+#: builtin/mv.c:277 builtin/remote.c:717 builtin/repack.c:511
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "misslyckades byta namn på \"%s\""
 
-#: builtin/name-rev.c:352
+#: builtin/name-rev.c:356
 msgid "git name-rev [<options>] <commit>..."
 msgstr "git name-rev [<flaggor>] <incheckning>..."
 
-#: builtin/name-rev.c:353
+#: builtin/name-rev.c:357
 msgid "git name-rev [<options>] --all"
 msgstr "git name-rev [<flaggor>] --all"
 
-#: builtin/name-rev.c:354
+#: builtin/name-rev.c:358
 msgid "git name-rev [<options>] --stdin"
 msgstr "git name-rev [<flaggor>] --stdin"
 
-#: builtin/name-rev.c:411
+#: builtin/name-rev.c:415
 msgid "print only names (no SHA-1)"
 msgstr "skriv endast namn (ingen SHA-1)"
 
-#: builtin/name-rev.c:412
+#: builtin/name-rev.c:416
 msgid "only use tags to name the commits"
 msgstr "använd endast taggar för att namnge incheckningar"
 
-#: builtin/name-rev.c:414
+#: builtin/name-rev.c:418
 msgid "only use refs matching <pattern>"
 msgstr "använd endast referenser som motsvarar <mönster>"
 
-#: builtin/name-rev.c:416
+#: builtin/name-rev.c:420
 msgid "ignore refs matching <pattern>"
 msgstr "ignorera referenser som motsvarar <mönster>"
 
-#: builtin/name-rev.c:418
+#: builtin/name-rev.c:422
 msgid "list all commits reachable from all refs"
 msgstr "lista alla incheckningar som kan nås alla referenser"
 
-#: builtin/name-rev.c:419
+#: builtin/name-rev.c:423
 msgid "read from stdin"
 msgstr "läs från standard in"
 
-#: builtin/name-rev.c:420
+#: builtin/name-rev.c:424
 msgid "allow to print `undefined` names (default)"
 msgstr "tillåt att skriva \"odefinierade\" namn (standard)"
 
-#: builtin/name-rev.c:426
+#: builtin/name-rev.c:430
 msgid "dereference tags in the input (internal use)"
 msgstr "avreferera taggar i indata (används internt)"
 
@@ -15943,7 +15998,7 @@
 msgid "read object names from the standard input"
 msgstr "läs objektnamn från standard in"
 
-#: builtin/notes.c:954 builtin/prune.c:130 builtin/worktree.c:165
+#: builtin/notes.c:954 builtin/prune.c:130 builtin/worktree.c:164
 msgid "do not remove, show only"
 msgstr "ta inte bort, bara visa"
 
@@ -15959,7 +16014,7 @@
 msgid "use notes from <notes-ref>"
 msgstr "använd anteckningar från <anteckningsref>"
 
-#: builtin/notes.c:1034 builtin/stash.c:1598
+#: builtin/notes.c:1034 builtin/stash.c:1607
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "okänt underkommando: %s"
@@ -15976,125 +16031,125 @@
 msgstr ""
 "git pack-objects [<flaggor>...] <basnamn> [< <reflista> | < <objektlista>]"
 
-#: builtin/pack-objects.c:424
+#: builtin/pack-objects.c:428
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr "felaktig CRC för packat objekt %s"
 
-#: builtin/pack-objects.c:435
+#: builtin/pack-objects.c:439
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr "trasigt packat objekt för %s"
 
-#: builtin/pack-objects.c:566
+#: builtin/pack-objects.c:570
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr "rekursivt delta upptäcktes för objektet %s"
 
-#: builtin/pack-objects.c:777
+#: builtin/pack-objects.c:781
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr "ordnade %u objekt, förväntade %<PRIu32>"
 
-#: builtin/pack-objects.c:790
+#: builtin/pack-objects.c:794
 #, c-format
 msgid "packfile is invalid: %s"
 msgstr "packfil är ogiltig: %s"
 
-#: builtin/pack-objects.c:794
+#: builtin/pack-objects.c:798
 #, c-format
 msgid "unable to open packfile for reuse: %s"
 msgstr "kan inte öppna packfil för återanvändning: %s"
 
-#: builtin/pack-objects.c:798
+#: builtin/pack-objects.c:802
 msgid "unable to seek in reused packfile"
 msgstr "kan inte söka i återanvänd packfil"
 
-#: builtin/pack-objects.c:809
+#: builtin/pack-objects.c:813
 msgid "unable to read from reused packfile"
 msgstr "kan inte läsa från återanvänd packfil"
 
-#: builtin/pack-objects.c:837
+#: builtin/pack-objects.c:841
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr ""
 "inaktiverar skrivning av bitkarta, paket delas på grund av pack.packSizeLimit"
 
-#: builtin/pack-objects.c:850
+#: builtin/pack-objects.c:854
 msgid "Writing objects"
 msgstr "Skriver objekt"
 
-#: builtin/pack-objects.c:912 builtin/update-index.c:89
+#: builtin/pack-objects.c:917 builtin/update-index.c:89
 #, c-format
 msgid "failed to stat %s"
 msgstr "misslyckades ta status på %s"
 
-#: builtin/pack-objects.c:965
+#: builtin/pack-objects.c:970
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "skrev %<PRIu32> objekt medan %<PRIu32> förväntades"
 
-#: builtin/pack-objects.c:1161
+#: builtin/pack-objects.c:1164
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr "inaktiverar skrivning av bitkarta då några objekt inte packas"
 
-#: builtin/pack-objects.c:1591
+#: builtin/pack-objects.c:1592
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "deltabasoffset utanför gränsen i pack för %s"
 
-#: builtin/pack-objects.c:1600
+#: builtin/pack-objects.c:1601
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "deltabasoffset utanför gränsvärden för %s"
 
-#: builtin/pack-objects.c:1869
+#: builtin/pack-objects.c:1870
 msgid "Counting objects"
 msgstr "Räknar objekt"
 
-#: builtin/pack-objects.c:1999
+#: builtin/pack-objects.c:2000
 #, c-format
 msgid "unable to get size of %s"
 msgstr "kan inte hämta storlek på %s"
 
-#: builtin/pack-objects.c:2014
+#: builtin/pack-objects.c:2015
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "kunde inte tolka objekthuvud för %s"
 
-#: builtin/pack-objects.c:2084 builtin/pack-objects.c:2100
-#: builtin/pack-objects.c:2110
+#: builtin/pack-objects.c:2085 builtin/pack-objects.c:2101
+#: builtin/pack-objects.c:2111
 #, c-format
 msgid "object %s cannot be read"
 msgstr "objektet %s kunde inte läsas"
 
-#: builtin/pack-objects.c:2087 builtin/pack-objects.c:2114
+#: builtin/pack-objects.c:2088 builtin/pack-objects.c:2115
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr "objektet %s har inkonsistent objektlängd (%<PRIuMAX> mot %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2124
+#: builtin/pack-objects.c:2125
 msgid "suboptimal pack - out of memory"
 msgstr "icke-optimalt pack - minnet slut"
 
-#: builtin/pack-objects.c:2450
+#: builtin/pack-objects.c:2440
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Deltakomprimering använder upp till %d trådar"
 
-#: builtin/pack-objects.c:2582
+#: builtin/pack-objects.c:2572
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "kan inte packa objekt nåbara från taggen %s"
 
-#: builtin/pack-objects.c:2669
+#: builtin/pack-objects.c:2659
 msgid "Compressing objects"
 msgstr "Komprimerar objekt"
 
-#: builtin/pack-objects.c:2675
+#: builtin/pack-objects.c:2665
 msgid "inconsistency with delta count"
 msgstr "deltaräknaren är inkonsekvent"
 
-#: builtin/pack-objects.c:2756
+#: builtin/pack-objects.c:2742
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -16103,7 +16158,7 @@
 "förväntade kant-objekt-id, fick skräp:\n"
 " %s"
 
-#: builtin/pack-objects.c:2762
+#: builtin/pack-objects.c:2748
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -16112,239 +16167,243 @@
 "förväntade objekt-id, fick skräp:\n"
 " %s"
 
-#: builtin/pack-objects.c:2860
+#: builtin/pack-objects.c:2846
 msgid "invalid value for --missing"
 msgstr "ogiltigt värde för --missing"
 
-#: builtin/pack-objects.c:2919 builtin/pack-objects.c:3027
+#: builtin/pack-objects.c:2905 builtin/pack-objects.c:3013
 msgid "cannot open pack index"
 msgstr "kan inte öppna paketfilen"
 
-#: builtin/pack-objects.c:2950
+#: builtin/pack-objects.c:2936
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "lösa objekt på %s kunde inte underökas"
 
-#: builtin/pack-objects.c:3035
+#: builtin/pack-objects.c:3021
 msgid "unable to force loose object"
 msgstr "kan inte tvinga lösa objekt"
 
-#: builtin/pack-objects.c:3127
+#: builtin/pack-objects.c:3113
 #, c-format
 msgid "not a rev '%s'"
 msgstr "inte en referens \"%s\""
 
-#: builtin/pack-objects.c:3130
+#: builtin/pack-objects.c:3116
 #, c-format
 msgid "bad revision '%s'"
 msgstr "felaktig revision \"%s\""
 
-#: builtin/pack-objects.c:3155
+#: builtin/pack-objects.c:3141
 msgid "unable to add recent objects"
 msgstr "kan inte lägga till nya objekt"
 
-#: builtin/pack-objects.c:3208
+#: builtin/pack-objects.c:3194
 #, c-format
 msgid "unsupported index version %s"
 msgstr "indexversionen %s stöds ej"
 
-#: builtin/pack-objects.c:3212
+#: builtin/pack-objects.c:3198
 #, c-format
 msgid "bad index version '%s'"
 msgstr "felaktig indexversion \"%s\""
 
-#: builtin/pack-objects.c:3242
+#: builtin/pack-objects.c:3228
 msgid "do not show progress meter"
 msgstr "visa inte förloppsindikator"
 
-#: builtin/pack-objects.c:3244
+#: builtin/pack-objects.c:3230
 msgid "show progress meter"
 msgstr "visa förloppsindikator"
 
-#: builtin/pack-objects.c:3246
+#: builtin/pack-objects.c:3232
 msgid "show progress meter during object writing phase"
 msgstr "visa förloppsindikator under objektskrivningsfasen"
 
-#: builtin/pack-objects.c:3249
+#: builtin/pack-objects.c:3235
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "som --all-progress när förloppsindikatorn visas"
 
-#: builtin/pack-objects.c:3250
+#: builtin/pack-objects.c:3236
 msgid "<version>[,<offset>]"
 msgstr "<version>[,<offset>]"
 
-#: builtin/pack-objects.c:3251
+#: builtin/pack-objects.c:3237
 msgid "write the pack index file in the specified idx format version"
 msgstr "skriv paketindexfilen i angiven indexformatversion"
 
-#: builtin/pack-objects.c:3254
+#: builtin/pack-objects.c:3240
 msgid "maximum size of each output pack file"
 msgstr "maximal storlek på varje utdatapaketfil"
 
-#: builtin/pack-objects.c:3256
+#: builtin/pack-objects.c:3242
 msgid "ignore borrowed objects from alternate object store"
 msgstr "ignorera lånade objekt från alternativa objektlager"
 
-#: builtin/pack-objects.c:3258
+#: builtin/pack-objects.c:3244
 msgid "ignore packed objects"
 msgstr "ignorera packade objekt"
 
-#: builtin/pack-objects.c:3260
+#: builtin/pack-objects.c:3246
 msgid "limit pack window by objects"
 msgstr "begränsa paketfönster efter objekt"
 
-#: builtin/pack-objects.c:3262
+#: builtin/pack-objects.c:3248
 msgid "limit pack window by memory in addition to object limit"
 msgstr "begränsa paketfönster efter minne förutom objektgräns"
 
-#: builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3250
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr "maximal längd på deltakedja tillåten i slutligt paket"
 
-#: builtin/pack-objects.c:3266
+#: builtin/pack-objects.c:3252
 msgid "reuse existing deltas"
 msgstr "återanvänd befintliga delta"
 
-#: builtin/pack-objects.c:3268
+#: builtin/pack-objects.c:3254
 msgid "reuse existing objects"
 msgstr "återanvänd befintliga objekt"
 
-#: builtin/pack-objects.c:3270
+#: builtin/pack-objects.c:3256
 msgid "use OFS_DELTA objects"
 msgstr "använd OFS_DELTA-objekt"
 
-#: builtin/pack-objects.c:3272
+#: builtin/pack-objects.c:3258
 msgid "use threads when searching for best delta matches"
 msgstr "använd trådar vid sökning efter bästa deltaträffar"
 
-#: builtin/pack-objects.c:3274
+#: builtin/pack-objects.c:3260
 msgid "do not create an empty pack output"
 msgstr "försök inte skapa tom paketutdata"
 
-#: builtin/pack-objects.c:3276
+#: builtin/pack-objects.c:3262
 msgid "read revision arguments from standard input"
 msgstr "läs revisionsargument från standard in"
 
-#: builtin/pack-objects.c:3278
+#: builtin/pack-objects.c:3264
 msgid "limit the objects to those that are not yet packed"
 msgstr "begränsa objekt till dem som ännu inte packats"
 
-#: builtin/pack-objects.c:3281
+#: builtin/pack-objects.c:3267
 msgid "include objects reachable from any reference"
 msgstr "inkludera objekt som kan nås från någon referens"
 
-#: builtin/pack-objects.c:3284
+#: builtin/pack-objects.c:3270
 msgid "include objects referred by reflog entries"
 msgstr "inkludera objekt som refereras från referensloggposter"
 
-#: builtin/pack-objects.c:3287
+#: builtin/pack-objects.c:3273
 msgid "include objects referred to by the index"
 msgstr "inkludera objekt som refereras från indexet"
 
-#: builtin/pack-objects.c:3290
+#: builtin/pack-objects.c:3276
 msgid "output pack to stdout"
 msgstr "skriv paket på standard ut"
 
-#: builtin/pack-objects.c:3292
+#: builtin/pack-objects.c:3278
 msgid "include tag objects that refer to objects to be packed"
 msgstr "inkludera taggobjekt som refererar objekt som skall packas"
 
-#: builtin/pack-objects.c:3294
+#: builtin/pack-objects.c:3280
 msgid "keep unreachable objects"
 msgstr "behåll onåbara objekt"
 
-#: builtin/pack-objects.c:3296
+#: builtin/pack-objects.c:3282
 msgid "pack loose unreachable objects"
 msgstr "packa lösa onåbara objekt"
 
-#: builtin/pack-objects.c:3298
+#: builtin/pack-objects.c:3284
 msgid "unpack unreachable objects newer than <time>"
 msgstr "packa upp onåbara objekt nyare än <tid>"
 
-#: builtin/pack-objects.c:3301
+#: builtin/pack-objects.c:3287
 msgid "use the sparse reachability algorithm"
 msgstr "använd gles-nåbarhetsalgoritmen"
 
-#: builtin/pack-objects.c:3303
+#: builtin/pack-objects.c:3289
 msgid "create thin packs"
 msgstr "skapa tunna paket"
 
-#: builtin/pack-objects.c:3305
+#: builtin/pack-objects.c:3291
 msgid "create packs suitable for shallow fetches"
 msgstr "skapa packfiler lämpade för grunda hämtningar"
 
-#: builtin/pack-objects.c:3307
+#: builtin/pack-objects.c:3293
 msgid "ignore packs that have companion .keep file"
 msgstr "ignorera paket som har tillhörande .keep-fil"
 
-#: builtin/pack-objects.c:3309
+#: builtin/pack-objects.c:3295
 msgid "ignore this pack"
 msgstr "ignorera detta paket"
 
-#: builtin/pack-objects.c:3311
+#: builtin/pack-objects.c:3297
 msgid "pack compression level"
 msgstr "komprimeringsgrad för paket"
 
-#: builtin/pack-objects.c:3313
+#: builtin/pack-objects.c:3299
 msgid "do not hide commits by grafts"
 msgstr "göm inte incheckningar med ympningar (\"grafts\")"
 
-#: builtin/pack-objects.c:3315
+#: builtin/pack-objects.c:3301
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr "använd bitkartindex om tillgängligt för att räkna objekt snabbare"
 
-#: builtin/pack-objects.c:3317
+#: builtin/pack-objects.c:3303
 msgid "write a bitmap index together with the pack index"
 msgstr "använd bitkartindex tillsammans med packindexet"
 
-#: builtin/pack-objects.c:3320
+#: builtin/pack-objects.c:3307
+msgid "write a bitmap index if possible"
+msgstr "skriv bitkartindex om möjligt"
+
+#: builtin/pack-objects.c:3311
 msgid "handling for missing objects"
 msgstr "hantering av saknade objekt"
 
-#: builtin/pack-objects.c:3323
+#: builtin/pack-objects.c:3314
 msgid "do not pack objects in promisor packfiles"
 msgstr "packa inte objekt i kontraktspackfiler"
 
-#: builtin/pack-objects.c:3325
+#: builtin/pack-objects.c:3316
 msgid "respect islands during delta compression"
 msgstr "respektera öar under deltakomprimering"
 
-#: builtin/pack-objects.c:3350
+#: builtin/pack-objects.c:3345
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "deltakedjedjupet %d är för djupt, påtvingar %d"
 
-#: builtin/pack-objects.c:3355
+#: builtin/pack-objects.c:3350
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "pack.deltaCacheLimit är för högt, påtvingar %d"
 
-#: builtin/pack-objects.c:3409
+#: builtin/pack-objects.c:3404
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 "--max-pack-size kan inte användas för att bygga ett paket som skall överföras"
 
-#: builtin/pack-objects.c:3411
+#: builtin/pack-objects.c:3406
 msgid "minimum pack size limit is 1 MiB"
 msgstr "minsta packstorlek är 1 MiB"
 
-#: builtin/pack-objects.c:3416
+#: builtin/pack-objects.c:3411
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "--thin kan inte användas för att bygga ett indexerbart paket"
 
-#: builtin/pack-objects.c:3419
+#: builtin/pack-objects.c:3414
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr "--keep-unreachable och -unpack-unreachable kan inte användas samtidigt"
 
-#: builtin/pack-objects.c:3425
+#: builtin/pack-objects.c:3420
 msgid "cannot use --filter without --stdout"
 msgstr "kan inte använda --filter utan --stdout"
 
-#: builtin/pack-objects.c:3486
+#: builtin/pack-objects.c:3481
 msgid "Enumerating objects"
 msgstr "Räknar upp objekt"
 
-#: builtin/pack-objects.c:3516
+#: builtin/pack-objects.c:3511
 #, c-format
 msgid "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>)"
 msgstr ""
@@ -16399,44 +16458,44 @@
 msgid "git pull [<options>] [<repository> [<refspec>...]]"
 msgstr "git pull [<flaggor>] [<arkiv> [<refspec>...]]"
 
-#: builtin/pull.c:141
+#: builtin/pull.c:142
 msgid "control for recursive fetching of submodules"
 msgstr "styrning för rekursiv hämtning av undermoduler"
 
-#: builtin/pull.c:145
+#: builtin/pull.c:146
 msgid "Options related to merging"
 msgstr "Alternativ gällande sammanslagning"
 
-#: builtin/pull.c:148
+#: builtin/pull.c:149
 msgid "incorporate changes by rebasing rather than merging"
 msgstr "inlemma ändringar genom ombasering i stället för sammanslagning"
 
-#: builtin/pull.c:176 builtin/rebase.c:447 builtin/revert.c:126
+#: builtin/pull.c:177 builtin/rebase.c:448 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "tillåt snabbspolning"
 
-#: builtin/pull.c:185
+#: builtin/pull.c:186
 msgid "automatically stash/stash pop before and after rebase"
 msgstr "utför automatiskt stash/stash pop före och efter ombasering"
 
-#: builtin/pull.c:201
+#: builtin/pull.c:202
 msgid "Options related to fetching"
 msgstr "Alternativ gällande hämtningar"
 
-#: builtin/pull.c:211
+#: builtin/pull.c:212
 msgid "force overwrite of local branch"
 msgstr "tvinga överskrivning av lokal gren"
 
-#: builtin/pull.c:219
+#: builtin/pull.c:220
 msgid "number of submodules pulled in parallel"
 msgstr "antal undermoduler som hämtas parallellt"
 
-#: builtin/pull.c:316
+#: builtin/pull.c:320
 #, c-format
 msgid "Invalid value for pull.ff: %s"
 msgstr "Felaktigt värde för pull.ff: %s"
 
-#: builtin/pull.c:433
+#: builtin/pull.c:437
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
 "fetched."
@@ -16444,14 +16503,14 @@
 "Det finns ingen kandidat för ombasering bland referenserna du precis har "
 "hämtat."
 
-#: builtin/pull.c:435
+#: builtin/pull.c:439
 msgid ""
 "There are no candidates for merging among the refs that you just fetched."
 msgstr ""
 "Det finns ingen kandidat för sammanslagning bland referenserna du precis har "
 "hämtat."
 
-#: builtin/pull.c:436
+#: builtin/pull.c:440
 msgid ""
 "Generally this means that you provided a wildcard refspec which had no\n"
 "matches on the remote end."
@@ -16459,7 +16518,7 @@
 "Det betyder vanligtvis att du använt en jokertecken-refspec som inte\n"
 "motsvarade något i fjärränden."
 
-#: builtin/pull.c:439
+#: builtin/pull.c:443
 #, c-format
 msgid ""
 "You asked to pull from the remote '%s', but did not specify\n"
@@ -16470,42 +16529,42 @@
 "gren. Eftersom det inte är den fjärr som är konfigurerad som\n"
 "standard för aktuell gren måste du ange en gren på kommandoraden."
 
-#: builtin/pull.c:444 builtin/rebase.c:1326 git-parse-remote.sh:73
+#: builtin/pull.c:448 builtin/rebase.c:1347 git-parse-remote.sh:73
 msgid "You are not currently on a branch."
 msgstr "Du är inte på någon gren för närvarande."
 
-#: builtin/pull.c:446 builtin/pull.c:461 git-parse-remote.sh:79
+#: builtin/pull.c:450 builtin/pull.c:465 git-parse-remote.sh:79
 msgid "Please specify which branch you want to rebase against."
 msgstr "Ange vilken gren du vill ombasera mot."
 
-#: builtin/pull.c:448 builtin/pull.c:463 git-parse-remote.sh:82
+#: builtin/pull.c:452 builtin/pull.c:467 git-parse-remote.sh:82
 msgid "Please specify which branch you want to merge with."
 msgstr "Ange vilken gren du vill slå samman med."
 
-#: builtin/pull.c:449 builtin/pull.c:464
+#: builtin/pull.c:453 builtin/pull.c:468
 msgid "See git-pull(1) for details."
 msgstr "Se git-pull(1) för detaljer."
 
-#: builtin/pull.c:451 builtin/pull.c:457 builtin/pull.c:466
-#: builtin/rebase.c:1332 git-parse-remote.sh:64
+#: builtin/pull.c:455 builtin/pull.c:461 builtin/pull.c:470
+#: builtin/rebase.c:1353 git-parse-remote.sh:64
 msgid "<remote>"
 msgstr "<fjärr>"
 
-#: builtin/pull.c:451 builtin/pull.c:466 builtin/pull.c:471
+#: builtin/pull.c:455 builtin/pull.c:470 builtin/pull.c:475
 #: git-parse-remote.sh:65
 msgid "<branch>"
 msgstr "<gren>"
 
-#: builtin/pull.c:459 builtin/rebase.c:1324 git-parse-remote.sh:75
+#: builtin/pull.c:463 builtin/rebase.c:1345 git-parse-remote.sh:75
 msgid "There is no tracking information for the current branch."
 msgstr "Det finns ingen spårningsinformation för aktuell gren."
 
-#: builtin/pull.c:468 git-parse-remote.sh:95
+#: builtin/pull.c:472 git-parse-remote.sh:95
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:"
 msgstr "Om du vill ange spårningsinformation för grenen kan du göra det med:"
 
-#: builtin/pull.c:473
+#: builtin/pull.c:477
 #, c-format
 msgid ""
 "Your configuration specifies to merge with the ref '%s'\n"
@@ -16514,32 +16573,32 @@
 "Dina inställningar anger sammanslagning med referensen \"%s\"\n"
 "från fjärren, men någon sådan referens togs inte emot."
 
-#: builtin/pull.c:581
+#: builtin/pull.c:587
 #, c-format
 msgid "unable to access commit %s"
 msgstr "kunde inte komma åt incheckningen %s"
 
-#: builtin/pull.c:861
+#: builtin/pull.c:867
 msgid "ignoring --verify-signatures for rebase"
 msgstr "ignorera --verify-signatures för ombasering"
 
-#: builtin/pull.c:916
+#: builtin/pull.c:922
 msgid "--[no-]autostash option is only valid with --rebase."
 msgstr "--[no-]autostash är endast giltig med --rebase."
 
-#: builtin/pull.c:924
+#: builtin/pull.c:930
 msgid "Updating an unborn branch with changes added to the index."
 msgstr "Uppdaterar en ofödd gren med ändringar som lagts till i indexet."
 
-#: builtin/pull.c:928
+#: builtin/pull.c:934
 msgid "pull with rebase"
 msgstr "pull med ombasering"
 
-#: builtin/pull.c:929
+#: builtin/pull.c:935
 msgid "please commit or stash them."
 msgstr "checka in eller använd \"stash\" på dem."
 
-#: builtin/pull.c:954
+#: builtin/pull.c:960
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -16550,7 +16609,7 @@
 "snabbspolar din arbetskatalog från\n"
 "incheckningen %s."
 
-#: builtin/pull.c:960
+#: builtin/pull.c:966
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -16567,15 +16626,15 @@
 "$ git reset --hard\n"
 "för att återgå."
 
-#: builtin/pull.c:975
+#: builtin/pull.c:981
 msgid "Cannot merge multiple branches into empty head."
 msgstr "Kan inte slå ihop flera grenar i ett tomt huvud."
 
-#: builtin/pull.c:979
+#: builtin/pull.c:985
 msgid "Cannot rebase onto multiple branches."
 msgstr "Kan inte ombasera ovanpå flera grenar."
 
-#: builtin/pull.c:986
+#: builtin/pull.c:992
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr "kan inte ombasera med lokalt lagrade ändringar i undermoful"
 
@@ -16734,17 +16793,94 @@
 msgid "Pushing to %s\n"
 msgstr "Sänder till %s\n"
 
-#: builtin/push.c:364
+#: builtin/push.c:366
 #, c-format
 msgid "failed to push some refs to '%s'"
 msgstr "misslyckades sända vissa referenser till \"%s\""
 
-#: builtin/push.c:398
+#: builtin/push.c:541
+msgid "repository"
+msgstr "arkiv"
+
+#: builtin/push.c:542 builtin/send-pack.c:164
+msgid "push all refs"
+msgstr "sänd alla referenser"
+
+#: builtin/push.c:543 builtin/send-pack.c:166
+msgid "mirror all refs"
+msgstr "spegla alla referenser"
+
+#: builtin/push.c:545
+msgid "delete refs"
+msgstr "ta bort referenser"
+
+#: builtin/push.c:546
+msgid "push tags (can't be used with --all or --mirror)"
+msgstr "sänd taggar (kan inte användas med --all eller --mirror)"
+
+#: builtin/push.c:549 builtin/send-pack.c:167
+msgid "force updates"
+msgstr "tvinga uppdateringar"
+
+#: builtin/push.c:551 builtin/send-pack.c:181
+msgid "<refname>:<expect>"
+msgstr "<refnamn>:<förvänta>"
+
+#: builtin/push.c:552 builtin/send-pack.c:182
+msgid "require old value of ref to be at this value"
+msgstr "kräv att ref:s tidigare värde är detta"
+
+#: builtin/push.c:555
+msgid "control recursive pushing of submodules"
+msgstr "styr rekursiv insändning av undermoduler"
+
+#: builtin/push.c:557 builtin/send-pack.c:175
+msgid "use thin pack"
+msgstr "använd tunna paket"
+
+#: builtin/push.c:558 builtin/push.c:559 builtin/send-pack.c:161
+#: builtin/send-pack.c:162
+msgid "receive pack program"
+msgstr "program för att ta emot paket"
+
+#: builtin/push.c:560
+msgid "set upstream for git pull/status"
+msgstr "ställ in uppström för git pull/status"
+
+#: builtin/push.c:563
+msgid "prune locally removed refs"
+msgstr "ta bort lokalt borttagna referenser"
+
+#: builtin/push.c:565
+msgid "bypass pre-push hook"
+msgstr "förbigå pre-push-krok"
+
+#: builtin/push.c:566
+msgid "push missing but relevant tags"
+msgstr "sänd in saknade men relevanta taggar"
+
+#: builtin/push.c:569 builtin/send-pack.c:169
+msgid "GPG sign the push"
+msgstr "GPG-signera insändningen"
+
+#: builtin/push.c:571 builtin/send-pack.c:176
+msgid "request atomic transaction on remote side"
+msgstr "begär atomiska transaktioner på fjärrsidan"
+
+#: builtin/push.c:589
+msgid "--delete is incompatible with --all, --mirror and --tags"
+msgstr "--delete är inkompatibel med --all, --mirror och --tags"
+
+#: builtin/push.c:591
+msgid "--delete doesn't make sense without any refs"
+msgstr "--delete kan inte användas utan referenser"
+
+#: builtin/push.c:611
 #, c-format
 msgid "bad repository '%s'"
 msgstr "felaktigt arkiv \"%s\""
 
-#: builtin/push.c:399
+#: builtin/push.c:612
 msgid ""
 "No configured push destination.\n"
 "Either specify the URL from the command-line or configure a remote "
@@ -16765,104 +16901,27 @@
 "\n"
 "    git push <namn>\n"
 
-#: builtin/push.c:554
-msgid "repository"
-msgstr "arkiv"
-
-#: builtin/push.c:555 builtin/send-pack.c:164
-msgid "push all refs"
-msgstr "sänd alla referenser"
-
-#: builtin/push.c:556 builtin/send-pack.c:166
-msgid "mirror all refs"
-msgstr "spegla alla referenser"
-
-#: builtin/push.c:558
-msgid "delete refs"
-msgstr "ta bort referenser"
-
-#: builtin/push.c:559
-msgid "push tags (can't be used with --all or --mirror)"
-msgstr "sänd taggar (kan inte användas med --all eller --mirror)"
-
-#: builtin/push.c:562 builtin/send-pack.c:167
-msgid "force updates"
-msgstr "tvinga uppdateringar"
-
-#: builtin/push.c:564 builtin/send-pack.c:181
-msgid "<refname>:<expect>"
-msgstr "<refnamn>:<förvänta>"
-
-#: builtin/push.c:565 builtin/send-pack.c:182
-msgid "require old value of ref to be at this value"
-msgstr "kräv att ref:s tidigare värde är detta"
-
-#: builtin/push.c:568
-msgid "control recursive pushing of submodules"
-msgstr "styr rekursiv insändning av undermoduler"
-
-#: builtin/push.c:570 builtin/send-pack.c:175
-msgid "use thin pack"
-msgstr "använd tunna paket"
-
-#: builtin/push.c:571 builtin/push.c:572 builtin/send-pack.c:161
-#: builtin/send-pack.c:162
-msgid "receive pack program"
-msgstr "program för att ta emot paket"
-
-#: builtin/push.c:573
-msgid "set upstream for git pull/status"
-msgstr "ställ in uppström för git pull/status"
-
-#: builtin/push.c:576
-msgid "prune locally removed refs"
-msgstr "ta bort lokalt borttagna referenser"
-
-#: builtin/push.c:578
-msgid "bypass pre-push hook"
-msgstr "förbigå pre-push-krok"
-
-#: builtin/push.c:579
-msgid "push missing but relevant tags"
-msgstr "sänd in saknade men relevanta taggar"
-
-#: builtin/push.c:582 builtin/send-pack.c:169
-msgid "GPG sign the push"
-msgstr "GPG-signera insändningen"
-
-#: builtin/push.c:584 builtin/send-pack.c:176
-msgid "request atomic transaction on remote side"
-msgstr "begär atomiska transaktioner på fjärrsidan"
-
-#: builtin/push.c:602
-msgid "--delete is incompatible with --all, --mirror and --tags"
-msgstr "--delete är inkompatibel med --all, --mirror och --tags"
-
-#: builtin/push.c:604
-msgid "--delete doesn't make sense without any refs"
-msgstr "--delete kan inte användas utan referenser"
-
-#: builtin/push.c:607
+#: builtin/push.c:627
 msgid "--all and --tags are incompatible"
 msgstr "--all och --tags är inkompatibla"
 
-#: builtin/push.c:609
+#: builtin/push.c:629
 msgid "--all can't be combined with refspecs"
 msgstr "--all kan inte kombineras med referensspecifikationer"
 
-#: builtin/push.c:613
+#: builtin/push.c:633
 msgid "--mirror and --tags are incompatible"
 msgstr "--mirror och --tags är inkompatibla"
 
-#: builtin/push.c:615
+#: builtin/push.c:635
 msgid "--mirror can't be combined with refspecs"
 msgstr "--mirror kan inte kombineras med referensspecifikationer"
 
-#: builtin/push.c:618
+#: builtin/push.c:638
 msgid "--all and --mirror are incompatible"
 msgstr "--all och --mirror är inkompatibla"
 
-#: builtin/push.c:637
+#: builtin/push.c:642
 msgid "push options must not have new line characters"
 msgstr "push-flaggor kan inte innehålla radbrytning"
 
@@ -16980,11 +17039,11 @@
 
 #: builtin/rebase.c:32
 msgid ""
-"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] "
-"[<branch>]"
+"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
+"[<upstream> [<branch>]]"
 msgstr ""
-"git rebase [-i] [flaggor] [--exec <kmd>] [--onto <nybas>] [<uppström>] "
-"[<gren>]"
+"git rebase [-i] [flaggor] [--exec <kmd>] [--onto <nybas> | --keep-base] "
+"[<uppström> [<gren>]]"
 
 #: builtin/rebase.c:34
 msgid ""
@@ -17023,189 +17082,189 @@
 msgid "could not generate todo list"
 msgstr "Kunde inte skapa attgöra-lista"
 
-#: builtin/rebase.c:382
+#: builtin/rebase.c:383
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "en basincheckning måste anges med --upstream eller --onto"
 
-#: builtin/rebase.c:437
+#: builtin/rebase.c:438
 msgid "git rebase--interactive [<options>]"
 msgstr "git rebase--interactive [<flaggor>]"
 
-#: builtin/rebase.c:449
+#: builtin/rebase.c:450
 msgid "keep empty commits"
 msgstr "behåll tomma incheckningar"
 
-#: builtin/rebase.c:451 builtin/revert.c:128
+#: builtin/rebase.c:452 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr "tillåt incheckningar med tomt meddelande"
 
-#: builtin/rebase.c:452
+#: builtin/rebase.c:453
 msgid "rebase merge commits"
 msgstr "ombasera sammanslagningar"
 
-#: builtin/rebase.c:454
+#: builtin/rebase.c:455
 msgid "keep original branch points of cousins"
 msgstr "behåll ursprungliga förgreningspunkter för kusiner"
 
-#: builtin/rebase.c:456
+#: builtin/rebase.c:457
 msgid "move commits that begin with squash!/fixup!"
 msgstr "flytta incheckningar som inleds med squash!/fixup!"
 
-#: builtin/rebase.c:457
+#: builtin/rebase.c:458
 msgid "sign commits"
 msgstr "signera incheckningar"
 
-#: builtin/rebase.c:459 builtin/rebase.c:1403
+#: builtin/rebase.c:460 builtin/rebase.c:1427
 msgid "display a diffstat of what changed upstream"
 msgstr "vis diffstat för vad som ändrats uppströms"
 
-#: builtin/rebase.c:461
+#: builtin/rebase.c:462
 msgid "continue rebase"
 msgstr "fortsätt ombasering"
 
-#: builtin/rebase.c:463
+#: builtin/rebase.c:464
 msgid "skip commit"
 msgstr "hoppa över incheckning"
 
-#: builtin/rebase.c:464
+#: builtin/rebase.c:465
 msgid "edit the todo list"
 msgstr "redigera attgöra-listan"
 
-#: builtin/rebase.c:466
+#: builtin/rebase.c:467
 msgid "show the current patch"
 msgstr "visa nuvarande patch"
 
-#: builtin/rebase.c:469
+#: builtin/rebase.c:470
 msgid "shorten commit ids in the todo list"
 msgstr "förkorta inchecknings-id i todo-listan"
 
-#: builtin/rebase.c:471
+#: builtin/rebase.c:472
 msgid "expand commit ids in the todo list"
 msgstr "utöka inchecknings-id i todo-listan"
 
-#: builtin/rebase.c:473
+#: builtin/rebase.c:474
 msgid "check the todo list"
 msgstr "kontrollera todo-listan"
 
-#: builtin/rebase.c:475
+#: builtin/rebase.c:476
 msgid "rearrange fixup/squash lines"
 msgstr "ordna om fixup-/squash-rader"
 
-#: builtin/rebase.c:477
+#: builtin/rebase.c:478
 msgid "insert exec commands in todo list"
 msgstr "lägg in exec-kommandon i todo-listan"
 
-#: builtin/rebase.c:478
+#: builtin/rebase.c:479
 msgid "onto"
 msgstr "ovanpå"
 
-#: builtin/rebase.c:481
+#: builtin/rebase.c:482
 msgid "restrict-revision"
 msgstr "restrict-revision"
 
-#: builtin/rebase.c:481
+#: builtin/rebase.c:482
 msgid "restrict revision"
 msgstr "begränsa revision"
 
-#: builtin/rebase.c:483
+#: builtin/rebase.c:484
 msgid "squash-onto"
 msgstr "squash-onto"
 
-#: builtin/rebase.c:484
+#: builtin/rebase.c:485
 msgid "squash onto"
 msgstr "tryck ihop ovanpå"
 
-#: builtin/rebase.c:486
+#: builtin/rebase.c:487
 msgid "the upstream commit"
 msgstr "uppströmsincheckningen"
 
-#: builtin/rebase.c:488
+#: builtin/rebase.c:489
 msgid "head-name"
 msgstr "head-name"
 
-#: builtin/rebase.c:488
+#: builtin/rebase.c:489
 msgid "head name"
 msgstr "namn på huvud"
 
-#: builtin/rebase.c:493
+#: builtin/rebase.c:494
 msgid "rebase strategy"
 msgstr "sammanslagningsstrategi"
 
-#: builtin/rebase.c:494
+#: builtin/rebase.c:495
 msgid "strategy-opts"
 msgstr "strategy-opts"
 
-#: builtin/rebase.c:495
+#: builtin/rebase.c:496
 msgid "strategy options"
 msgstr "strategiflaggor"
 
-#: builtin/rebase.c:496
+#: builtin/rebase.c:497
 msgid "switch-to"
 msgstr "switch-to"
 
-#: builtin/rebase.c:497
+#: builtin/rebase.c:498
 msgid "the branch or commit to checkout"
 msgstr "gren eller inchecking att checka ut"
 
-#: builtin/rebase.c:498
+#: builtin/rebase.c:499
 msgid "onto-name"
 msgstr "onto-name"
 
-#: builtin/rebase.c:498
+#: builtin/rebase.c:499
 msgid "onto name"
 msgstr "på-namn"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "cmd"
 msgstr "kmd"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "the command to run"
 msgstr "kommando att köra"
 
-#: builtin/rebase.c:502 builtin/rebase.c:1486
+#: builtin/rebase.c:503 builtin/rebase.c:1510
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "kör automatiskt alla \"exec\" som misslyckas på nytt"
 
-#: builtin/rebase.c:518
+#: builtin/rebase.c:519
 msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
 msgstr "--[no-]rebase-cousins har ingen effekt utan --rebase-merges"
 
-#: builtin/rebase.c:534
+#: builtin/rebase.c:535
 #, c-format
 msgid "%s requires an interactive rebase"
 msgstr "%s kräver en interaktiv ombasering"
 
-#: builtin/rebase.c:586
+#: builtin/rebase.c:587
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "kunde inte hämta \"onto\": \"%s\""
 
-#: builtin/rebase.c:601
+#: builtin/rebase.c:602
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "ogiltigt orig-head: \"%s\""
 
-#: builtin/rebase.c:626
+#: builtin/rebase.c:627
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "ignorera ogiltigt allow_rerere_autoupdate: \"%s\""
 
-#: builtin/rebase.c:702
+#: builtin/rebase.c:703
 #, c-format
 msgid "Could not read '%s'"
 msgstr "Kunde inte läsa \"%s\""
 
-#: builtin/rebase.c:720
+#: builtin/rebase.c:721
 #, c-format
 msgid "Cannot store %s"
 msgstr "Kan inte spara %s"
 
-#: builtin/rebase.c:827
+#: builtin/rebase.c:828
 msgid "could not determine HEAD revision"
 msgstr "kunde inte bestämma HEAD-revision"
 
-#: builtin/rebase.c:950 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:951 git-rebase--preserve-merges.sh:81
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -17219,7 +17278,7 @@
 "För att avbryta och återgå till där du var före ombaseringen, kör \"git "
 "rebase --abort\"."
 
-#: builtin/rebase.c:1031
+#: builtin/rebase.c:1032
 #, c-format
 msgid ""
 "\n"
@@ -17238,7 +17297,7 @@
 "\n"
 "Därför kan inte git ombasera dessa."
 
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1339
 #, c-format
 msgid ""
 "%s\n"
@@ -17255,7 +17314,7 @@
 "    git rebase '<gren>'\n"
 "\n"
 
-#: builtin/rebase.c:1334
+#: builtin/rebase.c:1355
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -17268,128 +17327,132 @@
 "    git branch --set-upstream-to=%s/<gren> %s\n"
 "\n"
 
-#: builtin/rebase.c:1364
+#: builtin/rebase.c:1385
 msgid "exec commands cannot contain newlines"
 msgstr "exec-kommandon kan inte innehålla nyradstecken"
 
-#: builtin/rebase.c:1368
+#: builtin/rebase.c:1389
 msgid "empty exec command"
 msgstr "tomt exec-kommando"
 
-#: builtin/rebase.c:1396
+#: builtin/rebase.c:1418
 msgid "rebase onto given branch instead of upstream"
 msgstr "ombasera mot given grenen istället för uppström"
 
-#: builtin/rebase.c:1398
+#: builtin/rebase.c:1420
+msgid "use the merge-base of upstream and branch as the current base"
+msgstr "använd sammanslagningsbasen mellan uppströms och gren som aktuell bas"
+
+#: builtin/rebase.c:1422
 msgid "allow pre-rebase hook to run"
 msgstr "tillåt pre-rebase-krok att köra"
 
-#: builtin/rebase.c:1400
+#: builtin/rebase.c:1424
 msgid "be quiet. implies --no-stat"
 msgstr "var tyst. implicerar --no-stat"
 
-#: builtin/rebase.c:1406
+#: builtin/rebase.c:1430
 msgid "do not show diffstat of what changed upstream"
 msgstr "visa inte en diffstat för vad som ändrats uppströms"
 
-#: builtin/rebase.c:1409
+#: builtin/rebase.c:1433
 msgid "add a Signed-off-by: line to each commit"
 msgstr "lägg \"Signed-off-by:\"-rad till varje incheckning"
 
-#: builtin/rebase.c:1411 builtin/rebase.c:1415 builtin/rebase.c:1417
+#: builtin/rebase.c:1435 builtin/rebase.c:1439 builtin/rebase.c:1441
 msgid "passed to 'git am'"
 msgstr "sänds till \"git am\""
 
-#: builtin/rebase.c:1419 builtin/rebase.c:1421
+#: builtin/rebase.c:1443 builtin/rebase.c:1445
 msgid "passed to 'git apply'"
 msgstr "sänds till \"git apply\""
 
-#: builtin/rebase.c:1423 builtin/rebase.c:1426
+#: builtin/rebase.c:1447 builtin/rebase.c:1450
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "utför cherry-pick på alla incheckningar, även om oändrad"
 
-#: builtin/rebase.c:1428
+#: builtin/rebase.c:1452
 msgid "continue"
 msgstr "fortsätt"
 
-#: builtin/rebase.c:1431
+#: builtin/rebase.c:1455
 msgid "skip current patch and continue"
 msgstr "hoppa över nuvarande patch och fortsätt"
 
-#: builtin/rebase.c:1433
+#: builtin/rebase.c:1457
 msgid "abort and check out the original branch"
 msgstr "avbryt och checka ut ursprungsgrenen"
 
-#: builtin/rebase.c:1436
+#: builtin/rebase.c:1460
 msgid "abort but keep HEAD where it is"
 msgstr "avbryt men behåll HEAD där det är"
 
-#: builtin/rebase.c:1437
+#: builtin/rebase.c:1461
 msgid "edit the todo list during an interactive rebase"
 msgstr "redigera attgöra-listan under interaktiv ombasering."
 
-#: builtin/rebase.c:1440
+#: builtin/rebase.c:1464
 msgid "show the patch file being applied or merged"
 msgstr "visa patchen som tillämpas eller slås samman"
 
-#: builtin/rebase.c:1443
+#: builtin/rebase.c:1467
 msgid "use merging strategies to rebase"
 msgstr "använd sammanslagningsstrategier för sammanslagning"
 
-#: builtin/rebase.c:1447
+#: builtin/rebase.c:1471
 msgid "let the user edit the list of commits to rebase"
 msgstr "låt användaren redigera listan över incheckningar att ombasera"
 
-#: builtin/rebase.c:1451
+#: builtin/rebase.c:1475
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr ""
 "(AVRÅDS) försök återskapa sammanslagningar istället för att ignorera dem"
 
-#: builtin/rebase.c:1455
+#: builtin/rebase.c:1479
 msgid "preserve empty commits during rebase"
 msgstr "behåll tomma incheckningar under ombasering"
 
-#: builtin/rebase.c:1457
+#: builtin/rebase.c:1481
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "flytta incheckningar som börjar med squash!/fixup! under -i"
 
-#: builtin/rebase.c:1463
+#: builtin/rebase.c:1487
 msgid "automatically stash/stash pop before and after"
 msgstr "utför automatiskt stash/stash pop före och efter"
 
-#: builtin/rebase.c:1465
+#: builtin/rebase.c:1489
 msgid "add exec lines after each commit of the editable list"
 msgstr "lägg till exec-rader efter varje incheckning i den redigerbara listan"
 
-#: builtin/rebase.c:1469
+#: builtin/rebase.c:1493
 msgid "allow rebasing commits with empty messages"
 msgstr "tillåt ombasering av incheckningar med tomt meddelande"
 
-#: builtin/rebase.c:1472
+#: builtin/rebase.c:1496
 msgid "try to rebase merges instead of skipping them"
 msgstr "försök ombasera sammanslagningar istället för att ignorera dem"
 
-#: builtin/rebase.c:1475
+#: builtin/rebase.c:1499
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "använd \"merge-base --fork-point\" för att förfina uppström"
 
-#: builtin/rebase.c:1477
+#: builtin/rebase.c:1501
 msgid "use the given merge strategy"
 msgstr "använd angiven sammanslagningsstrategi"
 
-#: builtin/rebase.c:1479 builtin/revert.c:115
+#: builtin/rebase.c:1503 builtin/revert.c:115
 msgid "option"
 msgstr "alternativ"
 
-#: builtin/rebase.c:1480
+#: builtin/rebase.c:1504
 msgid "pass the argument through to the merge strategy"
 msgstr "sänd flaggan till sammanslagningsstrategin"
 
-#: builtin/rebase.c:1483
+#: builtin/rebase.c:1507
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "ombasera alla nåbara incheckningar upp till roten/rötterna"
 
-#: builtin/rebase.c:1500
+#: builtin/rebase.c:1524
 msgid ""
 "the rebase.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
@@ -17397,29 +17460,37 @@
 "stödet för rebase.useBuiltin har tagits bort!\n"
 "Se posten för det i \"git help config\" för detaljer."
 
-#: builtin/rebase.c:1506
+#: builtin/rebase.c:1530
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "Det verkar som en \"git am\" körs. Kan inte ombasera."
 
-#: builtin/rebase.c:1547
+#: builtin/rebase.c:1571
 msgid ""
 "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
 msgstr ""
 "git rebase --preserve-merges avråds från. Använd --rebase-merges istället."
 
-#: builtin/rebase.c:1551
+#: builtin/rebase.c:1576
+msgid "cannot combine '--keep-base' with '--onto'"
+msgstr "kan inte kombinera \"--keep-base\" med \"--onto\""
+
+#: builtin/rebase.c:1578
+msgid "cannot combine '--keep-base' with '--root'"
+msgstr "kan inte kombinera \"--keep-base\" med \"--root\""
+
+#: builtin/rebase.c:1582
 msgid "No rebase in progress?"
 msgstr "Ingen ombasering pågår?"
 
-#: builtin/rebase.c:1555
+#: builtin/rebase.c:1586
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr "Åtgärden --edit-todo kan endast användas under interaktiv ombasering."
 
-#: builtin/rebase.c:1578
+#: builtin/rebase.c:1609
 msgid "Cannot read HEAD"
 msgstr "Kan inte läsa HEAD"
 
-#: builtin/rebase.c:1590
+#: builtin/rebase.c:1621
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -17427,16 +17498,16 @@
 "Du måste redigera alla sammanslagningskonflikter och\n"
 "därefter markera dem som lösta med git add"
 
-#: builtin/rebase.c:1609
+#: builtin/rebase.c:1640
 msgid "could not discard worktree changes"
 msgstr "kunde inte kasta ändringar i arbetskatalogen"
 
-#: builtin/rebase.c:1628
+#: builtin/rebase.c:1659
 #, c-format
 msgid "could not move back to %s"
 msgstr "kunde inte flytta tillbaka till %s"
 
-#: builtin/rebase.c:1673
+#: builtin/rebase.c:1704
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -17457,167 +17528,159 @@
 "och kör programmet igen. Jag avslutar ifall du fortfarande har\n"
 "något av värde där.\n"
 
-#: builtin/rebase.c:1694
+#: builtin/rebase.c:1725
 msgid "switch `C' expects a numerical value"
 msgstr "flaggan \"C\" förväntar ett numeriskt värde"
 
-#: builtin/rebase.c:1735
+#: builtin/rebase.c:1766
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Okänt läge: %s"
 
-#: builtin/rebase.c:1757
+#: builtin/rebase.c:1788
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy kräver --merge eller --interactive"
 
-#: builtin/rebase.c:1797
+#: builtin/rebase.c:1828
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec kräver --exec eller --interactive"
 
-#: builtin/rebase.c:1809
+#: builtin/rebase.c:1840
 msgid "cannot combine am options with either interactive or merge options"
 msgstr ""
 "kan inte kombinera am-flaggor med varken interaktiv- eller "
 "sammanslagningsflaggor"
 
-#: builtin/rebase.c:1828
+#: builtin/rebase.c:1859
 msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
 msgstr "kan inte kombinera \"--preserve-merges\" med \"--rebase-merges\""
 
-#: builtin/rebase.c:1832
+#: builtin/rebase.c:1863
 msgid ""
 "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
 msgstr ""
 "fel: kan inte kombinera \"--preserve-merges\" med \"--reschedule-failed-exec"
 "\""
 
-#: builtin/rebase.c:1838
-msgid "cannot combine '--rebase-merges' with '--strategy-option'"
-msgstr "kan inte kombinera \"--rebase-merges\" med \"--strategy-option\""
-
-#: builtin/rebase.c:1841
-msgid "cannot combine '--rebase-merges' with '--strategy'"
-msgstr "kan inte kombinera \"--rebase-merges\" med \"--strategy\""
-
-#: builtin/rebase.c:1865
+#: builtin/rebase.c:1887
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "felaktig uppström \"%s\""
 
-#: builtin/rebase.c:1871
+#: builtin/rebase.c:1893
 msgid "Could not create new root commit"
 msgstr "kunde inte skapa ny rotincheckning"
 
-#: builtin/rebase.c:1889
+#: builtin/rebase.c:1919
+#, c-format
+msgid "'%s': need exactly one merge base with branch"
+msgstr "\"%s\": behöver precis en sammanslagningsbas med gren"
+
+#: builtin/rebase.c:1922
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "\"%s\": behöver precis en sammanslagningsbas"
 
-#: builtin/rebase.c:1896
+#: builtin/rebase.c:1930
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "Pekar inte på en giltig incheckning: \"%s\""
 
-#: builtin/rebase.c:1921
+#: builtin/rebase.c:1955
 #, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr "ödesdigert: ingen sådan gren/incheckning: \"%s\""
 
-#: builtin/rebase.c:1929 builtin/submodule--helper.c:38
+#: builtin/rebase.c:1963 builtin/submodule--helper.c:38
 #: builtin/submodule--helper.c:1934
 #, c-format
 msgid "No such ref: %s"
 msgstr "Ingen sådan referens: %s"
 
-#: builtin/rebase.c:1940
+#: builtin/rebase.c:1974
 msgid "Could not resolve HEAD to a revision"
 msgstr "Kunde inte bestämma HEAD:s incheckning"
 
-#: builtin/rebase.c:1981
+#: builtin/rebase.c:2012
 msgid "Cannot autostash"
 msgstr "Kan inte utföra \"autostash\""
 
-#: builtin/rebase.c:1984
+#: builtin/rebase.c:2015
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Oväntat svar från stash: \"%s\""
 
-#: builtin/rebase.c:1990
+#: builtin/rebase.c:2021
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "Kunde inte skapa katalog för \"%s\""
 
-#: builtin/rebase.c:1993
+#: builtin/rebase.c:2024
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Skapade autostash: %s\n"
 
-#: builtin/rebase.c:1996
+#: builtin/rebase.c:2027
 msgid "could not reset --hard"
 msgstr "kunde inte utföra \"reset --hard\""
 
-#: builtin/rebase.c:1997 builtin/reset.c:114
-#, c-format
-msgid "HEAD is now at %s"
-msgstr "HEAD är nu på %s"
-
-#: builtin/rebase.c:2013
+#: builtin/rebase.c:2036
 msgid "Please commit or stash them."
 msgstr "Checka in eller använd \"stash\" på dem."
 
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:2063
 #, c-format
 msgid "could not parse '%s'"
 msgstr "kunde inte tolka \"%s\""
 
-#: builtin/rebase.c:2053
+#: builtin/rebase.c:2076
 #, c-format
 msgid "could not switch to %s"
 msgstr "kunde inte växla till %s"
 
-#: builtin/rebase.c:2064
+#: builtin/rebase.c:2087
 msgid "HEAD is up to date."
 msgstr "HEAD är à jour."
 
-#: builtin/rebase.c:2066
+#: builtin/rebase.c:2089
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "Aktuell gren %s är à jour.\n"
 
-#: builtin/rebase.c:2074
+#: builtin/rebase.c:2097
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD är à jour, ombasering framtvingad."
 
-#: builtin/rebase.c:2076
+#: builtin/rebase.c:2099
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "Aktuell gren %s är à jour, ombasering framtvingad.\n"
 
-#: builtin/rebase.c:2084
+#: builtin/rebase.c:2107
 msgid "The pre-rebase hook refused to rebase."
 msgstr "Kroken pre-rebase vägrade ombaseringen."
 
-#: builtin/rebase.c:2091
+#: builtin/rebase.c:2114
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Ändringar till %s:\n"
 
-#: builtin/rebase.c:2094
+#: builtin/rebase.c:2117
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Ändringar från %s till %s:\n"
 
-#: builtin/rebase.c:2119
+#: builtin/rebase.c:2142
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 "Först, spolar tillbaka huvudet för att spela av ditt arbete ovanpå det...\n"
 
-#: builtin/rebase.c:2128
+#: builtin/rebase.c:2151
 msgid "Could not detach HEAD"
 msgstr "Kunde inte koppla från HEAD"
 
-#: builtin/rebase.c:2137
+#: builtin/rebase.c:2160
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Snabbspolade %s till %s.\n"
@@ -17626,7 +17689,7 @@
 msgid "git receive-pack <git-dir>"
 msgstr "git receive-pack <git-katalog>"
 
-#: builtin/receive-pack.c:832
+#: builtin/receive-pack.c:830
 msgid ""
 "By default, updating the current branch in a non-bare repository\n"
 "is denied, because it will make the index and work tree inconsistent\n"
@@ -17656,7 +17719,7 @@
 "För att undvika detta meddelande och fortfarande behålla det\n"
 "normala beteendet, sätt \"receive.denyCurrentBranch\" till \"refuse\"."
 
-#: builtin/receive-pack.c:852
+#: builtin/receive-pack.c:850
 msgid ""
 "By default, deleting the current branch is denied, because the next\n"
 "'git clone' won't result in any file checked out, causing confusion.\n"
@@ -17677,11 +17740,11 @@
 "\n"
 "För att undvika detta meddelande kan du sätta det till \"refuse\"."
 
-#: builtin/receive-pack.c:1938
+#: builtin/receive-pack.c:1936
 msgid "quiet"
 msgstr "tyst"
 
-#: builtin/receive-pack.c:1952
+#: builtin/receive-pack.c:1950
 msgid "You must specify a directory."
 msgstr "Du måste ange en katalog."
 
@@ -18251,11 +18314,11 @@
 msgid "Unknown subcommand: %s"
 msgstr "Okänt underkommando: %s"
 
-#: builtin/repack.c:22
+#: builtin/repack.c:23
 msgid "git repack [<options>]"
 msgstr "git repack [<flaggor>]"
 
-#: builtin/repack.c:27
+#: builtin/repack.c:28
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -18264,112 +18327,112 @@
 "Använd --no-write-bitmap-index eller inaktivera inställningen\n"
 "pack.writebitmaps"
 
-#: builtin/repack.c:201
+#: builtin/repack.c:191
 msgid "could not start pack-objects to repack promisor objects"
 msgstr "kunde inte starta pack-objects för att packa om kontraktsobjekt"
 
-#: builtin/repack.c:240 builtin/repack.c:418
+#: builtin/repack.c:230 builtin/repack.c:409
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
-"repack: Förväntar kompletta hex-objekt-ID-rader endast från pack-objects."
+"repack: Förväntar kompletta hex-objekt-id-rader endast från pack-objects."
 
-#: builtin/repack.c:257
+#: builtin/repack.c:247
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr "kunde inte avsluta pack-objects för att packa om kontraktsobjekt"
 
-#: builtin/repack.c:295
+#: builtin/repack.c:285
 msgid "pack everything in a single pack"
 msgstr "packa allt i ett enda paket"
 
-#: builtin/repack.c:297
+#: builtin/repack.c:287
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "samma som -a, och gör onåbara objekt lösa"
 
-#: builtin/repack.c:300
+#: builtin/repack.c:290
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "ta bort överflödiga paket, och kör git-prune-packed"
 
-#: builtin/repack.c:302
+#: builtin/repack.c:292
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "sänd --no-reuse-delta till git-pack-objects"
 
-#: builtin/repack.c:304
+#: builtin/repack.c:294
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "sänd --no-reuse-object till git-pack-objects"
 
-#: builtin/repack.c:306
+#: builtin/repack.c:296
 msgid "do not run git-update-server-info"
 msgstr "kör inte git-update-server-info"
 
-#: builtin/repack.c:309
+#: builtin/repack.c:299
 msgid "pass --local to git-pack-objects"
 msgstr "sänd --local till git-pack-objects"
 
-#: builtin/repack.c:311
+#: builtin/repack.c:301
 msgid "write bitmap index"
 msgstr "skriv bitkartindex"
 
-#: builtin/repack.c:313
+#: builtin/repack.c:303
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "sänd --delta-islands till git-pack-objects"
 
-#: builtin/repack.c:314
+#: builtin/repack.c:304
 msgid "approxidate"
 msgstr "cirkadatum"
 
-#: builtin/repack.c:315
+#: builtin/repack.c:305
 msgid "with -A, do not loosen objects older than this"
 msgstr "med -A, lös inte upp objekt äldre än detta"
 
-#: builtin/repack.c:317
+#: builtin/repack.c:307
 msgid "with -a, repack unreachable objects"
 msgstr "med -a, packa om onåbara objekt"
 
-#: builtin/repack.c:319
+#: builtin/repack.c:309
 msgid "size of the window used for delta compression"
 msgstr "storlek på fönster använt för deltakomprimering"
 
-#: builtin/repack.c:320 builtin/repack.c:326
+#: builtin/repack.c:310 builtin/repack.c:316
 msgid "bytes"
 msgstr "byte"
 
-#: builtin/repack.c:321
+#: builtin/repack.c:311
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr "samma som ovan, men begränsa minnesstorleken istället för postantal"
 
-#: builtin/repack.c:323
+#: builtin/repack.c:313
 msgid "limits the maximum delta depth"
 msgstr "begränsa maximalt deltadjup"
 
-#: builtin/repack.c:325
+#: builtin/repack.c:315
 msgid "limits the maximum number of threads"
 msgstr "begränsar maximalt antal trådar"
 
-#: builtin/repack.c:327
+#: builtin/repack.c:317
 msgid "maximum size of each packfile"
 msgstr "maximal storlek på varje paketfil"
 
-#: builtin/repack.c:329
+#: builtin/repack.c:319
 msgid "repack objects in packs marked with .keep"
 msgstr "packa om objekt i paket märkta med .keep"
 
-#: builtin/repack.c:331
+#: builtin/repack.c:321
 msgid "do not repack this pack"
 msgstr "packa inte om detta paket"
 
-#: builtin/repack.c:341
+#: builtin/repack.c:331
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "kan inte ta bort paket i ett \"precious-objects\"-arkiv"
 
-#: builtin/repack.c:345
+#: builtin/repack.c:335
 msgid "--keep-unreachable and -A are incompatible"
 msgstr "--keep-unreachable och -A kan inte användas samtidigt"
 
-#: builtin/repack.c:427
+#: builtin/repack.c:418
 msgid "Nothing new to pack."
 msgstr "Inget nytt att packa."
 
-#: builtin/repack.c:488
+#: builtin/repack.c:479
 #, c-format
 msgid ""
 "WARNING: Some packs in use have been renamed by\n"
@@ -18388,7 +18451,7 @@
 "VARNING: namnet misslyckades också.\n"
 "VARNING: Byt namn på dem i %s manuellt:\n"
 
-#: builtin/repack.c:536
+#: builtin/repack.c:527
 #, c-format
 msgid "failed to remove '%s'"
 msgstr "misslyckades ta bort \"%s\""
@@ -18496,8 +18559,8 @@
 msgid "unable to write object to database"
 msgstr "kan inte skriva objektet till databasen"
 
-#: builtin/replace.c:322 builtin/replace.c:377 builtin/replace.c:422
-#: builtin/replace.c:452
+#: builtin/replace.c:322 builtin/replace.c:378 builtin/replace.c:423
+#: builtin/replace.c:453
 #, c-format
 msgid "not a valid object name: '%s'"
 msgstr "objektnamnet är inte giltigt: \"%s\""
@@ -18516,22 +18579,22 @@
 msgid "new object is the same as the old one: '%s'"
 msgstr "nytt objekt är samma som det gamla: \"%s\""
 
-#: builtin/replace.c:383
+#: builtin/replace.c:384
 #, c-format
 msgid "could not parse %s as a commit"
 msgstr "kunde inte tolka %s som incheckning"
 
-#: builtin/replace.c:414
+#: builtin/replace.c:415
 #, c-format
 msgid "bad mergetag in commit '%s'"
 msgstr "felaktig sammanslagningstagg i incheckningen \"%s\""
 
-#: builtin/replace.c:416
+#: builtin/replace.c:417
 #, c-format
 msgid "malformed mergetag in commit '%s'"
 msgstr "felformad sammanslagningstagg i incheckningen \"%s\""
 
-#: builtin/replace.c:428
+#: builtin/replace.c:429
 #, c-format
 msgid ""
 "original commit '%s' contains mergetag '%s' that is discarded; use --edit "
@@ -18540,31 +18603,31 @@
 "den ursprungliga incheckningen \"%s\" innehåller sammanslagningstaggen \"%s"
 "\" som har förkastats; använd --edit istället för --graft"
 
-#: builtin/replace.c:467
+#: builtin/replace.c:468
 #, c-format
 msgid "the original commit '%s' has a gpg signature"
 msgstr "den ursprungliga incheckningen \"%s\" har en gpg-signatur"
 
-#: builtin/replace.c:468
+#: builtin/replace.c:469
 msgid "the signature will be removed in the replacement commit!"
 msgstr "signaturen kommer att tas bort i ersättningsincheckningen!"
 
-#: builtin/replace.c:478
+#: builtin/replace.c:479
 #, c-format
 msgid "could not write replacement commit for: '%s'"
 msgstr "kunde inte skriva ersättningsincheckning för: \"%s\""
 
-#: builtin/replace.c:486
+#: builtin/replace.c:487
 #, c-format
 msgid "graft for '%s' unnecessary"
 msgstr "ympning för \"%s\" behövs inte"
 
-#: builtin/replace.c:490
+#: builtin/replace.c:491
 #, c-format
 msgid "new commit is the same as the old one: '%s'"
 msgstr "ny incheckning är samma som den gamla: \"%s\""
 
-#: builtin/replace.c:525
+#: builtin/replace.c:526
 #, c-format
 msgid ""
 "could not convert the following graft(s):\n"
@@ -18573,71 +18636,71 @@
 "kunde inte konvertera följande ympning(ar):\n"
 "%s"
 
-#: builtin/replace.c:546
+#: builtin/replace.c:547
 msgid "list replace refs"
 msgstr "visa ersättningsreferenser"
 
-#: builtin/replace.c:547
+#: builtin/replace.c:548
 msgid "delete replace refs"
 msgstr "ta bort ersättningsreferenser"
 
-#: builtin/replace.c:548
+#: builtin/replace.c:549
 msgid "edit existing object"
 msgstr "redigera befintligt objekt"
 
-#: builtin/replace.c:549
+#: builtin/replace.c:550
 msgid "change a commit's parents"
 msgstr "ändra en inchecknings föräldrar"
 
-#: builtin/replace.c:550
+#: builtin/replace.c:551
 msgid "convert existing graft file"
 msgstr "konvertera befintlig ympningsfil"
 
-#: builtin/replace.c:551
+#: builtin/replace.c:552
 msgid "replace the ref if it exists"
 msgstr "ersätt referensen om den finns"
 
-#: builtin/replace.c:553
+#: builtin/replace.c:554
 msgid "do not pretty-print contents for --edit"
 msgstr "använd inte snygg visning av innehåll för --edit"
 
-#: builtin/replace.c:554
+#: builtin/replace.c:555
 msgid "use this format"
 msgstr "använd detta format"
 
-#: builtin/replace.c:567
+#: builtin/replace.c:568
 msgid "--format cannot be used when not listing"
 msgstr "--format kan inte användas utanför listning"
 
-#: builtin/replace.c:575
+#: builtin/replace.c:576
 msgid "-f only makes sense when writing a replacement"
 msgstr "-f kan endast användas vid skrivning av ersättning"
 
-#: builtin/replace.c:579
+#: builtin/replace.c:580
 msgid "--raw only makes sense with --edit"
 msgstr "--raw kan bara användas med --edit"
 
-#: builtin/replace.c:585
+#: builtin/replace.c:586
 msgid "-d needs at least one argument"
 msgstr "-d behöver minst ett argument"
 
-#: builtin/replace.c:591
+#: builtin/replace.c:592
 msgid "bad number of arguments"
 msgstr "fel antal argument"
 
-#: builtin/replace.c:597
+#: builtin/replace.c:598
 msgid "-e needs exactly one argument"
 msgstr "-e tar exakt ett argument"
 
-#: builtin/replace.c:603
+#: builtin/replace.c:604
 msgid "-g needs at least one argument"
 msgstr "-g tar minst ett argument"
 
-#: builtin/replace.c:609
+#: builtin/replace.c:610
 msgid "--convert-graft-file takes no argument"
 msgstr "--convert-graft-file tar inga argument"
 
-#: builtin/replace.c:615
+#: builtin/replace.c:616
 msgid "only one pattern can be given with -l"
 msgstr "endast ett mönster kan anges med -l"
 
@@ -18705,13 +18768,18 @@
 msgid "Failed to find tree of %s."
 msgstr "Kunde inte hitta trädet för %s."
 
+#: builtin/reset.c:114
+#, c-format
+msgid "HEAD is now at %s"
+msgstr "HEAD är nu på %s"
+
 #: builtin/reset.c:193
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Kan inte utföra en %s återställning mitt i en sammanslagning."
 
-#: builtin/reset.c:293 builtin/stash.c:514 builtin/stash.c:589
-#: builtin/stash.c:613
+#: builtin/reset.c:293 builtin/stash.c:520 builtin/stash.c:595
+#: builtin/stash.c:619
 msgid "be quiet, only report errors"
 msgstr "var tyst, rapportera endast fel"
 
@@ -18795,24 +18863,19 @@
 msgid "Could not write new index file."
 msgstr "Kunde inte skriva ny indexfil."
 
-#: builtin/rev-list.c:412
+#: builtin/rev-list.c:411
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr "kan inte kombinera --exclude-promisor-objects och --missing"
 
-#: builtin/rev-list.c:473
+#: builtin/rev-list.c:472
 msgid "object filtering requires --objects"
 msgstr "objektfiltrering kräver --objects"
 
-#: builtin/rev-list.c:476
-#, c-format
-msgid "invalid sparse value '%s'"
-msgstr "ogiltigt värde för sparse: \"%s\""
-
-#: builtin/rev-list.c:527
+#: builtin/rev-list.c:522
 msgid "rev-list does not support display of notes"
 msgstr "rev-list stöder inte visning av anteckningar"
 
-#: builtin/rev-list.c:530
+#: builtin/rev-list.c:525
 msgid "cannot combine --use-bitmap-index with object filtering"
 msgstr "kan inte kombinera --use-bitmap-index med objektfiltrering"
 
@@ -19350,134 +19413,134 @@
 msgid "could not save index tree"
 msgstr "kunde inte spara indexträd"
 
-#: builtin/stash.c:434
+#: builtin/stash.c:436
 msgid "could not restore untracked files from stash"
 msgstr "kunde inte återställa ospårade filer från stash-post"
 
-#: builtin/stash.c:448
+#: builtin/stash.c:450
 #, c-format
 msgid "Merging %s with %s"
 msgstr "Slår ihop %s med %s"
 
-#: builtin/stash.c:458 git-legacy-stash.sh:680
+#: builtin/stash.c:460 git-legacy-stash.sh:680
 msgid "Index was not unstashed."
 msgstr "Indexet har inte tagits upp ur \"stash\":en"
 
-#: builtin/stash.c:516 builtin/stash.c:615
+#: builtin/stash.c:522 builtin/stash.c:621
 msgid "attempt to recreate the index"
 msgstr "försök återskapa indexet"
 
-#: builtin/stash.c:549
+#: builtin/stash.c:555
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "Kastade %s (%s)"
 
-#: builtin/stash.c:552
+#: builtin/stash.c:558
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s: Kunde inte kasta \"stash\"-post"
 
-#: builtin/stash.c:577
+#: builtin/stash.c:583
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "\"%s\" är inte en \"stash\"-referens"
 
-#: builtin/stash.c:627 git-legacy-stash.sh:694
+#: builtin/stash.c:633 git-legacy-stash.sh:694
 msgid "The stash entry is kept in case you need it again."
 msgstr "Stash-posten behålls ifall du behöver den igen."
 
-#: builtin/stash.c:650 git-legacy-stash.sh:712
+#: builtin/stash.c:656 git-legacy-stash.sh:712
 msgid "No branch name specified"
 msgstr "Inget grennamn angavs"
 
-#: builtin/stash.c:790 builtin/stash.c:827
+#: builtin/stash.c:796 builtin/stash.c:833
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "Kan inte uppdatera %s med %s"
 
-#: builtin/stash.c:808 builtin/stash.c:1461 builtin/stash.c:1497
+#: builtin/stash.c:814 builtin/stash.c:1470 builtin/stash.c:1506
 msgid "stash message"
 msgstr "\"stash\"-meddelande"
 
-#: builtin/stash.c:818
+#: builtin/stash.c:824
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" kräver ett <incheckning>-argument"
 
-#: builtin/stash.c:1040 git-legacy-stash.sh:217
+#: builtin/stash.c:1046 git-legacy-stash.sh:217
 msgid "No changes selected"
 msgstr "Inga ändringar valda"
 
-#: builtin/stash.c:1136 git-legacy-stash.sh:150
+#: builtin/stash.c:1145 git-legacy-stash.sh:150
 msgid "You do not have the initial commit yet"
 msgstr "Du har inte den första incheckningen ännu"
 
-#: builtin/stash.c:1163 git-legacy-stash.sh:165
+#: builtin/stash.c:1172 git-legacy-stash.sh:165
 msgid "Cannot save the current index state"
 msgstr "Kan inte spara aktuellt tillstånd för indexet"
 
-#: builtin/stash.c:1172 git-legacy-stash.sh:180
+#: builtin/stash.c:1181 git-legacy-stash.sh:180
 msgid "Cannot save the untracked files"
 msgstr "Kan inte spara ospårade filer"
 
-#: builtin/stash.c:1183 builtin/stash.c:1192 git-legacy-stash.sh:200
+#: builtin/stash.c:1192 builtin/stash.c:1201 git-legacy-stash.sh:200
 #: git-legacy-stash.sh:213
 msgid "Cannot save the current worktree state"
 msgstr "Kan inte spara aktuellt tillstånd för arbetskatalogen"
 
-#: builtin/stash.c:1220 git-legacy-stash.sh:233
+#: builtin/stash.c:1229 git-legacy-stash.sh:233
 msgid "Cannot record working tree state"
 msgstr "Kan inte registrera tillstånd för arbetskatalog"
 
-#: builtin/stash.c:1269 git-legacy-stash.sh:337
+#: builtin/stash.c:1278 git-legacy-stash.sh:337
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr "Kan inte använda --patch och --include-untracked eller --all samtidigt"
 
-#: builtin/stash.c:1285
+#: builtin/stash.c:1294
 msgid "Did you forget to 'git add'?"
 msgstr "Glömde du använda \"git add\"?"
 
-#: builtin/stash.c:1300 git-legacy-stash.sh:345
+#: builtin/stash.c:1309 git-legacy-stash.sh:345
 msgid "No local changes to save"
 msgstr "Inga lokala ändringar att spara"
 
-#: builtin/stash.c:1307 git-legacy-stash.sh:350
+#: builtin/stash.c:1316 git-legacy-stash.sh:350
 msgid "Cannot initialize stash"
 msgstr "Kan inte initiera \"stash\""
 
-#: builtin/stash.c:1322 git-legacy-stash.sh:354
+#: builtin/stash.c:1331 git-legacy-stash.sh:354
 msgid "Cannot save the current status"
 msgstr "Kan inte spara aktuell status"
 
-#: builtin/stash.c:1327
+#: builtin/stash.c:1336
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Sparade arbetskatalogen och indexstatus %s"
 
-#: builtin/stash.c:1417 git-legacy-stash.sh:384
+#: builtin/stash.c:1426 git-legacy-stash.sh:384
 msgid "Cannot remove worktree changes"
 msgstr "Kan inte ta bort ändringar i arbetskatalogen"
 
-#: builtin/stash.c:1452 builtin/stash.c:1488
+#: builtin/stash.c:1461 builtin/stash.c:1497
 msgid "keep index"
 msgstr "behåll indexet"
 
-#: builtin/stash.c:1454 builtin/stash.c:1490
+#: builtin/stash.c:1463 builtin/stash.c:1499
 msgid "stash in patch mode"
 msgstr "\"stash\" i \"patch\"-läge"
 
-#: builtin/stash.c:1455 builtin/stash.c:1491
+#: builtin/stash.c:1464 builtin/stash.c:1500
 msgid "quiet mode"
 msgstr "tyst läge"
 
-#: builtin/stash.c:1457 builtin/stash.c:1493
+#: builtin/stash.c:1466 builtin/stash.c:1502
 msgid "include untracked files in stash"
 msgstr "ta med ospårade filer i \"stash\""
 
-#: builtin/stash.c:1459 builtin/stash.c:1495
+#: builtin/stash.c:1468 builtin/stash.c:1504
 msgid "include ignore files"
 msgstr "ta med ignorerade filer"
 
-#: builtin/stash.c:1555
+#: builtin/stash.c:1564
 #, c-format
 msgid "could not exec %s"
 msgstr "kunde inte köra %s"
@@ -19846,8 +19909,8 @@
 msgstr "skriv inte klonförlopp"
 
 #: builtin/submodule--helper.c:1877
-msgid "git submodule--helper update_clone [--prefix=<path>] [<path>...]"
-msgstr "git submodule--helper update_clone [--prefix=<sökväg>] [<sökväg>...]"
+msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
+msgstr "git submodule--helper update-clone [--prefix=<sökväg>] [<sökväg>...]"
 
 #: builtin/submodule--helper.c:1890
 msgid "bad value for update parameter"
@@ -19900,7 +19963,7 @@
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr "se till att .gitmodules finns i arbetskatalogen"
 
-#: builtin/submodule--helper.c:2235 git.c:434 git.c:684
+#: builtin/submodule--helper.c:2235 git.c:433 git.c:683
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s stöder inte --super-prefix"
@@ -20224,139 +20287,139 @@
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<flaggor>] [--] [<fil>...]"
 
-#: builtin/update-index.c:971
+#: builtin/update-index.c:972
 msgid "continue refresh even when index needs update"
 msgstr "fortsätt uppdatera även när index inte är àjour"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:975
 msgid "refresh: ignore submodules"
 msgstr "refresh: ignorera undermoduler"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:978
 msgid "do not ignore new files"
 msgstr "ignorera inte nya filer"
 
-#: builtin/update-index.c:979
+#: builtin/update-index.c:980
 msgid "let files replace directories and vice-versa"
 msgstr "låt filer ersätta kataloger och omvänt"
 
-#: builtin/update-index.c:981
+#: builtin/update-index.c:982
 msgid "notice files missing from worktree"
 msgstr "lägg märke till filer som saknas i arbetskatalogen"
 
-#: builtin/update-index.c:983
+#: builtin/update-index.c:984
 msgid "refresh even if index contains unmerged entries"
 msgstr "uppdatera även om indexet innehåller ej sammanslagna poster"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:987
 msgid "refresh stat information"
 msgstr "uppdatera statusinformation"
 
-#: builtin/update-index.c:990
+#: builtin/update-index.c:991
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "som --refresh, men ignorera assume-unchanged-inställning"
 
-#: builtin/update-index.c:994
+#: builtin/update-index.c:995
 msgid "<mode>,<object>,<path>"
 msgstr "<läge>,<objekt>,<sökväg>"
 
-#: builtin/update-index.c:995
+#: builtin/update-index.c:996
 msgid "add the specified entry to the index"
 msgstr "lägg till angiven post i indexet"
 
-#: builtin/update-index.c:1005
+#: builtin/update-index.c:1006
 msgid "mark files as \"not changing\""
 msgstr "markera filer som \"ändras inte\""
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1009
 msgid "clear assumed-unchanged bit"
 msgstr "rensa \"assume-unchanged\"-biten"
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1012
 msgid "mark files as \"index-only\""
 msgstr "markera filer som \"endast index\""
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1015
 msgid "clear skip-worktree bit"
 msgstr "töm \"skip-worktree\"-biten"
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1018
 msgid "add to index only; do not add content to object database"
 msgstr "lägg endast till indexet; lägg inte till innehållet i objektdatabasen"
 
-#: builtin/update-index.c:1019
+#: builtin/update-index.c:1020
 msgid "remove named paths even if present in worktree"
 msgstr "ta bort namngivna sökvägar även om de finns i arbetskatalogen"
 
-#: builtin/update-index.c:1021
+#: builtin/update-index.c:1022
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "med --stdin: indatarader termineras med null-byte"
 
-#: builtin/update-index.c:1023
+#: builtin/update-index.c:1024
 msgid "read list of paths to be updated from standard input"
 msgstr "läs lista över sökvägar att uppdatera från standard in"
 
-#: builtin/update-index.c:1027
+#: builtin/update-index.c:1028
 msgid "add entries from standard input to the index"
 msgstr "lägg poster från standard in till indexet"
 
-#: builtin/update-index.c:1031
+#: builtin/update-index.c:1032
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "återfyll etapp 2 och 3 från angivna sökvägar"
 
-#: builtin/update-index.c:1035
+#: builtin/update-index.c:1036
 msgid "only update entries that differ from HEAD"
 msgstr "uppdatera endast poster som skiljer sig från HEAD"
 
-#: builtin/update-index.c:1039
+#: builtin/update-index.c:1040
 msgid "ignore files missing from worktree"
 msgstr "ignorera filer som saknas i arbetskatalogen"
 
-#: builtin/update-index.c:1042
+#: builtin/update-index.c:1043
 msgid "report actions to standard output"
 msgstr "rapportera åtgärder på standard ut"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1045
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(för porslin) glöm sparade olösta konflikter"
 
-#: builtin/update-index.c:1048
+#: builtin/update-index.c:1049
 msgid "write index in this format"
 msgstr "skriv index i detta format"
 
-#: builtin/update-index.c:1050
+#: builtin/update-index.c:1051
 msgid "enable or disable split index"
 msgstr "aktivera eller inaktivera delat index"
 
-#: builtin/update-index.c:1052
+#: builtin/update-index.c:1053
 msgid "enable/disable untracked cache"
 msgstr "aktivera/inaktivera ospårad cache"
 
-#: builtin/update-index.c:1054
+#: builtin/update-index.c:1055
 msgid "test if the filesystem supports untracked cache"
 msgstr "testa om filsystemet stöder ospårad cache"
 
-#: builtin/update-index.c:1056
+#: builtin/update-index.c:1057
 msgid "enable untracked cache without testing the filesystem"
 msgstr "aktivera ospårad cache utan att testa filsystemet"
 
-#: builtin/update-index.c:1058
+#: builtin/update-index.c:1059
 msgid "write out the index even if is not flagged as changed"
 msgstr "skriv ut indexet även om det inte angivits som ändrat"
 
-#: builtin/update-index.c:1060
+#: builtin/update-index.c:1061
 msgid "enable or disable file system monitor"
 msgstr "aktivera eller inaktivera filsystemsövervakning"
 
-#: builtin/update-index.c:1062
+#: builtin/update-index.c:1063
 msgid "mark files as fsmonitor valid"
 msgstr "markera filer som \"fsmonitor valid\""
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1066
 msgid "clear fsmonitor valid bit"
 msgstr "töm \"fsmonitor valid\"-bit"
 
-#: builtin/update-index.c:1168
+#: builtin/update-index.c:1169
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
@@ -20364,7 +20427,7 @@
 "core.splitIndex är satt till false; ta bort eller ändra det om du verkligen "
 "vill aktivera delat index"
 
-#: builtin/update-index.c:1177
+#: builtin/update-index.c:1178
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
@@ -20372,7 +20435,7 @@
 "core.splitIndex är satt till true; ta bort eller ändra det om du verkligen "
 "vill inaktivera delat index"
 
-#: builtin/update-index.c:1188
+#: builtin/update-index.c:1190
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -20380,11 +20443,11 @@
 "core.untrackedCache är satt till true; ta bort eller ändra det om du "
 "verkligen vill inaktivera den ospårade cachen"
 
-#: builtin/update-index.c:1192
+#: builtin/update-index.c:1194
 msgid "Untracked cache disabled"
 msgstr "Ospårad cache är inaktiverad"
 
-#: builtin/update-index.c:1200
+#: builtin/update-index.c:1202
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -20392,26 +20455,26 @@
 "core.untrackedCache är satt till false; ta bort eller ändra det om du "
 "verkligen vill aktivera den ospårade cachen"
 
-#: builtin/update-index.c:1204
+#: builtin/update-index.c:1206
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "Ospårad cache är aktiverad för \"%s\""
 
-#: builtin/update-index.c:1212
+#: builtin/update-index.c:1214
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr "core.fsmonitor inte satt; sätt om du verkligen vill aktivera fsmonitor"
 
-#: builtin/update-index.c:1216
+#: builtin/update-index.c:1218
 msgid "fsmonitor enabled"
 msgstr "fsmonitor aktiverat"
 
-#: builtin/update-index.c:1219
+#: builtin/update-index.c:1221
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 "core.fsmonitor är satt; ta bort om du verkligen vill inaktivera fsmonitor"
 
-#: builtin/update-index.c:1223
+#: builtin/update-index.c:1225
 msgid "fsmonitor disabled"
 msgstr "fsmonitor inaktiverat"
 
@@ -20471,15 +20534,15 @@
 msgid "interrupt transfer after <n> seconds of inactivity"
 msgstr "avbryt överföringen efter <n> sekunders inaktivitet"
 
-#: builtin/verify-commit.c:20
+#: builtin/verify-commit.c:19
 msgid "git verify-commit [-v | --verbose] <commit>..."
 msgstr "git verify-commit [-v | --verbose] <incheckning>..."
 
-#: builtin/verify-commit.c:69
+#: builtin/verify-commit.c:68
 msgid "print commit contents"
 msgstr "visa innehåll för incheckning"
 
-#: builtin/verify-commit.c:70 builtin/verify-tag.c:38
+#: builtin/verify-commit.c:69 builtin/verify-tag.c:37
 msgid "print raw gpg status output"
 msgstr "visa råa gpg-statusdata"
 
@@ -20495,63 +20558,63 @@
 msgid "show statistics only"
 msgstr "visa endast statistik"
 
-#: builtin/verify-tag.c:19
+#: builtin/verify-tag.c:18
 msgid "git verify-tag [-v | --verbose] [--format=<format>] <tag>..."
 msgstr "git verify-tag [-v | --verbose] [--format=<format] <tagg>..."
 
-#: builtin/verify-tag.c:37
+#: builtin/verify-tag.c:36
 msgid "print tag contents"
 msgstr "visa innehåll för tag"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:17
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [<flaggor>] <sökväg> [<incheckning-igt>]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:18
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [<flaggor>]"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:19
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [<flaggor>] <sökväg>"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:20
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move <arbetskatalog> <ny-sökväg>"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:21
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [<flaggor>]"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:22
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<flaggor>] <arbetskatalog>"
 
-#: builtin/worktree.c:24
+#: builtin/worktree.c:23
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <sökväg>"
 
-#: builtin/worktree.c:61 builtin/worktree.c:899
+#: builtin/worktree.c:60 builtin/worktree.c:898
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "misslyckades ta bort \"%s\""
 
-#: builtin/worktree.c:80
+#: builtin/worktree.c:79
 #, c-format
 msgid "Removing worktrees/%s: not a valid directory"
 msgstr "Tar bort worktrees/%s: inte en giltig katalog"
 
-#: builtin/worktree.c:86
+#: builtin/worktree.c:85
 #, c-format
 msgid "Removing worktrees/%s: gitdir file does not exist"
 msgstr "Tar bort worktrees/%s: gitdir-filen existerar inte"
 
-#: builtin/worktree.c:91 builtin/worktree.c:100
+#: builtin/worktree.c:90 builtin/worktree.c:99
 #, c-format
 msgid "Removing worktrees/%s: unable to read gitdir file (%s)"
 msgstr "Tar bort worktrees/%s: kan inte läsa gitdir-filen (%s)"
 
-#: builtin/worktree.c:110
+#: builtin/worktree.c:109
 #, c-format
 msgid ""
 "Removing worktrees/%s: short read (expected %<PRIuMAX> bytes, read "
@@ -20560,35 +20623,35 @@
 "Tar bort worktrees/%s: kort läsning (förväntade %<PRIuMAX> byte, läste "
 "%<PRIuMAX>)"
 
-#: builtin/worktree.c:118
+#: builtin/worktree.c:117
 #, c-format
 msgid "Removing worktrees/%s: invalid gitdir file"
 msgstr "Tar bort worktrees/%s: felaktig gitdir-fil"
 
-#: builtin/worktree.c:127
+#: builtin/worktree.c:126
 #, c-format
 msgid "Removing worktrees/%s: gitdir file points to non-existent location"
 msgstr "Tar bort worktrees/%s: gitdir-filen pekar på en ickeexisterande plats"
 
-#: builtin/worktree.c:166
+#: builtin/worktree.c:165
 msgid "report pruned working trees"
 msgstr "rapportera borttagna arbetskataloger"
 
-#: builtin/worktree.c:168
+#: builtin/worktree.c:167
 msgid "expire working trees older than <time>"
 msgstr "låt tid gå ut för arbetskataloger äldre än <tid>"
 
-#: builtin/worktree.c:235
+#: builtin/worktree.c:234
 #, c-format
 msgid "'%s' already exists"
 msgstr "\"%s\" finns redan"
 
-#: builtin/worktree.c:252
+#: builtin/worktree.c:251
 #, c-format
 msgid "unable to re-add worktree '%s'"
 msgstr "kunde inte lägga in arbetskatalogen \"%s\" igen"
 
-#: builtin/worktree.c:257
+#: builtin/worktree.c:256
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -20598,7 +20661,7 @@
 "använd \"add -f -f\" för att överstyra, eller \"unlock\" och \"prune\" eller "
 "\"remove\" för att rensa"
 
-#: builtin/worktree.c:259
+#: builtin/worktree.c:258
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -20608,121 +20671,121 @@
 "använd \"add -f\" för att överstyra, eller \"prune\" eller \"remove\" för "
 "att rensa"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:308
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "kunde inte skapa katalogen \"%s\""
 
-#: builtin/worktree.c:440 builtin/worktree.c:446
+#: builtin/worktree.c:439 builtin/worktree.c:445
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "Förbereder arbetskatalog (ny gren \"%s\")"
 
-#: builtin/worktree.c:442
+#: builtin/worktree.c:441
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr "Förbereder arbetskatalog (återställer gren \"%s\"; var på %s)"
 
-#: builtin/worktree.c:451
+#: builtin/worktree.c:450
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "Förbereder arbetskatalog (checkar ut \"%s\")"
 
-#: builtin/worktree.c:457
+#: builtin/worktree.c:456
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "Förbereder arbetskatalog (frånkopplat HEAD %s)"
 
-#: builtin/worktree.c:498
+#: builtin/worktree.c:497
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr ""
 "checka ut <gren> även om den redan är utcheckad i en annan arbetskatalog"
 
-#: builtin/worktree.c:501
+#: builtin/worktree.c:500
 msgid "create a new branch"
 msgstr "skapa en ny gren"
 
-#: builtin/worktree.c:503
+#: builtin/worktree.c:502
 msgid "create or reset a branch"
 msgstr "skapa eller återställ en gren"
 
-#: builtin/worktree.c:505
+#: builtin/worktree.c:504
 msgid "populate the new working tree"
 msgstr "befolka den nya arbetskatalogen"
 
-#: builtin/worktree.c:506
+#: builtin/worktree.c:505
 msgid "keep the new working tree locked"
 msgstr "låt arbetskatalogen förbli låst"
 
-#: builtin/worktree.c:509
+#: builtin/worktree.c:508
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "ställ in spårningsläge (se git-branch(1))"
 
-#: builtin/worktree.c:512
+#: builtin/worktree.c:511
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr "försök matcha namn på ny gren mot en fjärrspårande gren"
 
-#: builtin/worktree.c:520
+#: builtin/worktree.c:519
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr "-b, -B och --detach är ömsesidigt uteslutande"
 
-#: builtin/worktree.c:581
+#: builtin/worktree.c:580
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "--[no-]track kan endast användas när ny gran skapas"
 
-#: builtin/worktree.c:681
+#: builtin/worktree.c:680
 msgid "reason for locking"
 msgstr "orsak till lås"
 
-#: builtin/worktree.c:693 builtin/worktree.c:726 builtin/worktree.c:800
-#: builtin/worktree.c:927
+#: builtin/worktree.c:692 builtin/worktree.c:725 builtin/worktree.c:799
+#: builtin/worktree.c:926
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "\"%s\" är inte en arbetskatalog"
 
-#: builtin/worktree.c:695 builtin/worktree.c:728
+#: builtin/worktree.c:694 builtin/worktree.c:727
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "Huvudarbetskatalogen kan inte låsas eller låsas upp"
 
-#: builtin/worktree.c:700
+#: builtin/worktree.c:699
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "\"%s\" är redan låst, orsak: %s"
 
-#: builtin/worktree.c:702
+#: builtin/worktree.c:701
 #, c-format
 msgid "'%s' is already locked"
 msgstr "\"%s\" är redan låst"
 
-#: builtin/worktree.c:730
+#: builtin/worktree.c:729
 #, c-format
 msgid "'%s' is not locked"
 msgstr "\"%s\" är inte låst"
 
-#: builtin/worktree.c:771
+#: builtin/worktree.c:770
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr "arbetskataloger med undermoduler kan inte flyttas eller tas bort"
 
-#: builtin/worktree.c:779
+#: builtin/worktree.c:778
 msgid "force move even if worktree is dirty or locked"
 msgstr "tvinga flyttning även om arbetskatalogen är smutsig eller låst"
 
-#: builtin/worktree.c:802 builtin/worktree.c:929
+#: builtin/worktree.c:801 builtin/worktree.c:928
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "\"%s\" är inte en huvudarbetskatalog"
 
-#: builtin/worktree.c:807
+#: builtin/worktree.c:806
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "kunde inte lista ut målnamn från \"%s\""
 
-#: builtin/worktree.c:813
+#: builtin/worktree.c:812
 #, c-format
 msgid "target '%s' already exists"
 msgstr "målet \"%s\" finns redan"
 
-#: builtin/worktree.c:821
+#: builtin/worktree.c:820
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -20731,7 +20794,7 @@
 "kan inte flytta en låst arbetskatalog, orsak till lås: %s\n"
 "använd \"move -f -f\" för att överstyra, eller lås upp först"
 
-#: builtin/worktree.c:823
+#: builtin/worktree.c:822
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -20739,36 +20802,38 @@
 "kan inte flytta en låst arbetskatalog;\n"
 "använd \"move -f -f\" för att överstyra, eller lås upp först"
 
-#: builtin/worktree.c:826
+#: builtin/worktree.c:825
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "kontroll misslyckades, kan inte flytta arbetskatalog: %s"
 
-#: builtin/worktree.c:831
+#: builtin/worktree.c:830
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "misslyckades flytta \"%s\" till \"%s\""
 
-#: builtin/worktree.c:879
+#: builtin/worktree.c:878
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "misslyckades köra \"git status\" på \"%s\""
 
-#: builtin/worktree.c:883
+#: builtin/worktree.c:882
 #, c-format
-msgid "'%s' is dirty, use --force to delete it"
-msgstr "\"%s\" är smutsigt, använd --force för att ta bort det"
+msgid "'%s' contains modified or untracked files, use --force to delete it"
+msgstr ""
+"\"%s\" innehåller ändrade eller ospårade filer, använd --force för att ta "
+"bort det"
 
-#: builtin/worktree.c:888
+#: builtin/worktree.c:887
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "misslyckades köra \"git status\" på \"%s\", kod %d"
 
-#: builtin/worktree.c:911
+#: builtin/worktree.c:910
 msgid "force removal even if worktree is dirty or locked"
 msgstr "tvinga ta bort även om arbetskatalogen är smutsig eller låst"
 
-#: builtin/worktree.c:934
+#: builtin/worktree.c:933
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -20777,7 +20842,7 @@
 "kan inte ta bort en låst arbetskatalog, orsak till låset: %s\n"
 "använd \"remove -f -f\" för att överstyra, eller lås upp först"
 
-#: builtin/worktree.c:936
+#: builtin/worktree.c:935
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -20785,7 +20850,7 @@
 "kan inte ta bort en låst arbetskatalog;\n"
 "använd \"remove -f -f\" för att överstyra, eller lås upp först"
 
-#: builtin/worktree.c:939
+#: builtin/worktree.c:938
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "kontroll misslyckades, kan inte ta bort arbetskatalog: %s"
@@ -20806,6 +20871,16 @@
 msgid "only useful for debugging"
 msgstr "endast användbart vid felsökning"
 
+#: fast-import.c:3118
+#, c-format
+msgid "Expected 'mark' command, got %s"
+msgstr "Förväntade \"mark\"-kommando, fick %s"
+
+#: fast-import.c:3123
+#, c-format
+msgid "Expected 'to' command, got %s"
+msgstr "Förväntade \"to\"-kommando, fick %s"
+
 #: credential-cache--daemon.c:223
 #, c-format
 msgid ""
@@ -20918,39 +20993,39 @@
 "aliaset \"%s\" ändrar miljövariabler.\n"
 "Du kan använda \"!git\" i aliaset för att göra det"
 
-#: git.c:377
+#: git.c:376
 #, c-format
 msgid "empty alias for %s"
 msgstr "tomt alias för %s"
 
-#: git.c:380
+#: git.c:379
 #, c-format
 msgid "recursive alias: %s"
 msgstr "rekursivt alias: %s"
 
-#: git.c:460
+#: git.c:459
 msgid "write failure on standard output"
 msgstr "skrivfel på standard ut"
 
-#: git.c:462
+#: git.c:461
 msgid "unknown write failure on standard output"
 msgstr "okänt skrivfel på standard ut"
 
-#: git.c:464
+#: git.c:463
 msgid "close failed on standard output"
 msgstr "stäng misslyckades på standard ut"
 
-#: git.c:796
+#: git.c:792
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr "alias-slinga detekterades: expansionen av \"%s\" avslutas aldrig:%s"
 
-#: git.c:846
+#: git.c:842
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "kan inte hantera %s som inbyggd"
 
-#: git.c:859
+#: git.c:855
 #, c-format
 msgid ""
 "usage: %s\n"
@@ -20959,13 +21034,13 @@
 "användning: %s\n"
 "\n"
 
-#: git.c:879
+#: git.c:875
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr ""
 "expandering av alias \"%s\" misslyckades; \"%s\" är inte ett git-kommando\n"
 
-#: git.c:891
+#: git.c:887
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr "misslyckades köra kommandot \"%s\": %s\n"
@@ -20983,30 +21058,30 @@
 msgid "Public key pinning not supported with cURL < 7.44.0"
 msgstr "Fastnålning av öppen nyckel stöds inte av cURL < 7.44.0"
 
-#: http.c:876
+#: http.c:878
 msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
 msgstr "CURLSSLOPT_NO_REVOKE stöds inte av cURL < 7.44.0"
 
-#: http.c:949
+#: http.c:951
 msgid "Protocol restrictions not supported with cURL < 7.19.4"
 msgstr "Prtokollbegränsningar stöds inte av cURL < 7.19.4"
 
-#: http.c:1085
+#: http.c:1088
 #, c-format
 msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
 msgstr "SSL-bakändan \"%s\" stöds inte. Dessa SSL-bakändor stöds:"
 
-#: http.c:1092
+#: http.c:1095
 #, c-format
 msgid "Could not set SSL backend to '%s': cURL was built without SSL backends"
 msgstr "Kan inte sätta SSL-bakända till \"%s\": cURL byggdes utan SSL-bakändor"
 
-#: http.c:1096
+#: http.c:1099
 #, c-format
 msgid "Could not set SSL backend to '%s': already set"
 msgstr "Kunde inte sätta SSL-bakända till \"%s\": redan valt"
 
-#: http.c:1965
+#: http.c:1968
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -21017,128 +21092,128 @@
 "        bad om: %s\n"
 "  omdirigering: %s"
 
-#: remote-curl.c:157
+#: remote-curl.c:166
 #, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr "felaktig citering på värde för push-option: \"%s\""
 
-#: remote-curl.c:254
+#: remote-curl.c:263
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr "%sinfo/refs inte giltig: är detta ett git-arkiv?"
 
-#: remote-curl.c:355
+#: remote-curl.c:364
 msgid "invalid server response; expected service, got flush packet"
 msgstr "ogiltigt svar från servern; förväntade tjänst, fick flush-paket"
 
-#: remote-curl.c:386
+#: remote-curl.c:395
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr "ogiltigt svar från servern; fick \"%s\""
 
-#: remote-curl.c:446
+#: remote-curl.c:455
 #, c-format
 msgid "repository '%s' not found"
 msgstr "arkivet \"%s\" hittades inte"
 
-#: remote-curl.c:450
+#: remote-curl.c:459
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr "Autentisering misslyckades \"%s\""
 
-#: remote-curl.c:454
+#: remote-curl.c:463
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "kan inte komma åt \"%s\": %s"
 
-#: remote-curl.c:460
+#: remote-curl.c:469
 #, c-format
 msgid "redirecting to %s"
 msgstr "omdirigerar till %s"
 
-#: remote-curl.c:584
+#: remote-curl.c:593
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr "borde inte ha EOF när inte försiktig på EOF"
 
-#: remote-curl.c:664
+#: remote-curl.c:673
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr "kunde inte spola tillbaka rpc-postdata - försök öka http.postBuffer"
 
-#: remote-curl.c:724
+#: remote-curl.c:733
 #, c-format
 msgid "RPC failed; %s"
 msgstr "RPC misslyckades; %s"
 
-#: remote-curl.c:764
+#: remote-curl.c:773
 msgid "cannot handle pushes this big"
 msgstr "kan inte hantera så stora sändningar"
 
-#: remote-curl.c:879
+#: remote-curl.c:888
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr "kan inte packa upp anrop; zlib-deflate-fel %d"
 
-#: remote-curl.c:883
+#: remote-curl.c:892
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr "kan inte packa upp anrop; zlib-slutfel %d"
 
-#: remote-curl.c:1014
+#: remote-curl.c:1023
 msgid "dumb http transport does not support shallow capabilities"
 msgstr "dum http-transport stöder inte grunda arkiv"
 
-#: remote-curl.c:1028
+#: remote-curl.c:1037
 msgid "fetch failed."
 msgstr "mottagning misslyckades."
 
-#: remote-curl.c:1076
+#: remote-curl.c:1085
 msgid "cannot fetch by sha1 over smart http"
 msgstr "kan inte hämta med sha1 över smart http"
 
-#: remote-curl.c:1120 remote-curl.c:1126
+#: remote-curl.c:1129 remote-curl.c:1135
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr "protokollfel: förväntade sha/ref, fick \"%s\""
 
-#: remote-curl.c:1138 remote-curl.c:1252
+#: remote-curl.c:1147 remote-curl.c:1261
 #, c-format
 msgid "http transport does not support %s"
 msgstr "http-transporten stöder inte %s"
 
-#: remote-curl.c:1174
+#: remote-curl.c:1183
 msgid "git-http-push failed"
 msgstr "git-http-push misslyckades"
 
-#: remote-curl.c:1360
+#: remote-curl.c:1367
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr "remote-curl: användning: git remote-curl <fjärr> [<url>]"
 
-#: remote-curl.c:1392
+#: remote-curl.c:1399
 msgid "remote-curl: error reading command stream from git"
 msgstr "remote-curl: fel vid läsning av kommandoström från git"
 
-#: remote-curl.c:1399
+#: remote-curl.c:1406
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr "remote-curl: försökte ta emot utan lokalt arkiv"
 
-#: remote-curl.c:1439
+#: remote-curl.c:1446
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr "remote-curl: okänt kommando \"%s\" från git"
 
-#: list-objects-filter-options.h:61
+#: list-objects-filter-options.h:85
 msgid "args"
 msgstr "argument"
 
-#: list-objects-filter-options.h:62
+#: list-objects-filter-options.h:86
 msgid "object filtering"
 msgstr "objektfiltrering"
 
-#: parse-options.h:170
+#: parse-options.h:179
 msgid "expiry-date"
 msgstr "giltig-till"
 
-#: parse-options.h:184
+#: parse-options.h:193
 msgid "no-op (backward compatibility)"
 msgstr "ingen funktion (bakåtkompatibilitet)"
 
@@ -21170,11 +21245,11 @@
 msgid "update the index with reused conflict resolution if possible"
 msgstr "uppdatera indexet med återanvänd konfliktlösning om möjligt"
 
-#: wt-status.h:68
+#: wt-status.h:67
 msgid "HEAD detached at "
 msgstr "HEAD frånkopplad vid "
 
-#: wt-status.h:69
+#: wt-status.h:68
 msgid "HEAD detached from "
 msgstr "HEAD frånkopplad från "
 
@@ -21385,7 +21460,7 @@
 
 #: command-list.h:101
 msgid "Extract commit ID from an archive created using git-archive"
-msgstr "Hämta inchecknings-ID från ett arkiv skapat med git-archive"
+msgstr "Hämta inchecknings-id från ett arkiv skapat med git-archive"
 
 #: command-list.h:102
 msgid "Print lines matching a pattern"
@@ -21397,7 +21472,7 @@
 
 #: command-list.h:104
 msgid "Compute object ID and optionally creates a blob from a file"
-msgstr "Beräkna objekt-ID och möjligen skapa en blob från en fil"
+msgstr "Beräkna objekt-id och möjligen skapa en blob från en fil"
 
 #: command-list.h:105
 msgid "Display help information about Git"
@@ -23524,6 +23599,75 @@
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "Vill du verkligen sända %s? [y=ja, n=nej]: "
 
+#~ msgid "unknown core.untrackedCache value '%s'; using 'keep' default value"
+#~ msgstr ""
+#~ "okänt värde \"%s\" för core.untrackedCache; använder standardvärdet \"keep"
+#~ "\""
+
+#~ msgid "cannot change partial clone promisor remote"
+#~ msgstr "kan inte ändra kontraktsfjärr för delvis kloning"
+
+#~ msgid "error building trees"
+#~ msgstr "fel vid byggande av träd"
+
+#~ msgid "invalid date format '%s' in '%s'"
+#~ msgstr "ogiltigt datumformat \"%s\" i \"%s\""
+
+#~ msgid "writing root commit"
+#~ msgstr "skriver rotincheckning"
+
+#~ msgid "staged changes in the following files may be lost: %s"
+#~ msgstr "köade ändringar i följande filer kan gå förlorade: %s"
+
+#~ msgid ""
+#~ "--filter can only be used with the remote configured in extensions."
+#~ "partialClone"
+#~ msgstr ""
+#~ "--filter kan endast användas med fjärren konfigurerad i extensions."
+#~ "partialClone"
+
+#~ msgid "verify commit-msg hook"
+#~ msgstr "bekräfta commit-msg-krok"
+
+#~ msgid "cannot combine '--rebase-merges' with '--strategy-option'"
+#~ msgstr "kan inte kombinera \"--rebase-merges\" med \"--strategy-option\""
+
+#~ msgid "invalid sparse value '%s'"
+#~ msgstr "ogiltigt värde för sparse: \"%s\""
+
+#~ msgid ""
+#~ "Fetch normally indicates which branches had a forced update, but that "
+#~ "check has been disabled."
+#~ msgstr ""
+#~ "Hämtning visar vanligtvis vilka grenar som har en tvingad uppdatering, "
+#~ "men det testet har slagits av."
+
+#~ msgid ""
+#~ "or run 'git config fetch.showForcedUpdates false' to avoid this check.\n"
+#~ msgstr ""
+#~ "eller kör \"git config fetch.showForcedUpdates false\" för undvika "
+#~ "testet.\n"
+
+#~ msgid ""
+#~ "log.mailmap is not set; its implicit value will change in an\n"
+#~ "upcoming release. To squelch this message and preserve current\n"
+#~ "behaviour, set the log.mailmap configuration value to false.\n"
+#~ "\n"
+#~ "To squelch this message and adopt the new behaviour now, set the\n"
+#~ "log.mailmap configuration value to true.\n"
+#~ "\n"
+#~ "See 'git help config' and search for 'log.mailmap' for further "
+#~ "information."
+#~ msgstr ""
+#~ "log.mailmap har inte satts: förvalet kommer ändras i en kommande\n"
+#~ "version. För att dölja det här meddelandet och behålla nuvarande\n"
+#~ "beteende, sätt konfigurationsvariabeln log.mailmap till false.\n"
+#~ "\n"
+#~ "För att dölja det här meddelandet och använda det nya beteendet,\n"
+#~ "sätt konfigurationsvariabeln log.mailmap till true.\n"
+#~ "\n"
+#~ "Se \"git help config\" och sök efter \"log.mailmap\" för mer information."
+
 #~ msgid "Server supports multi_ack_detailed"
 #~ msgstr "Servern stöder \"multi_ack_detailed\""
 
@@ -24405,9 +24549,6 @@
 #~ msgid "Could not append '%s'"
 #~ msgstr "Kunde inte lägga till på \"%s\""
 
-#~ msgid "Missing author: %s"
-#~ msgstr "Författare saknas: %s"
-
 #~ msgid "Testing "
 #~ msgstr "Testar"
 
@@ -24465,9 +24606,6 @@
 #~ msgid "option %s does not accept negative form"
 #~ msgstr "flaggan %s godtar inte negativ form"
 
-#~ msgid "unable to parse value '%s' for option %s"
-#~ msgstr "kunde inte tolka värdet \"%s\" för flaggan %s"
-
 #~ msgid "-b and -B are mutually exclusive"
 #~ msgstr "-b och -B kan inte användas samtidigt"
 
diff --git a/po/vi.po b/po/vi.po
index b8aa93a..a00211f 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -6,10 +6,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: git v2.23.0-rc2\n"
+"Project-Id-Version: git v2.24.0\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2019-08-10 20:12+0800\n"
-"PO-Revision-Date: 2019-08-11 07:08+0700\n"
+"POT-Creation-Date: 2019-10-28 13:19+0800\n"
+"PO-Revision-Date: 2019-10-29 14:35+0700\n"
 "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
 "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
 "Language: vi\n"
@@ -72,7 +72,7 @@
 msgid "Exiting because of an unresolved conflict."
 msgstr "Thoát ra bởi vì xung đột không thể giải quyết."
 
-#: advice.c:193 builtin/merge.c:1327
+#: advice.c:193 builtin/merge.c:1332
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Bạn chưa kết thúc việc hòa trộn (MERGE_HEAD vẫn tồn tại)."
 
@@ -212,17 +212,7 @@
 msgid "inconsistent header lines %d and %d"
 msgstr "phần đầu mâu thuẫn dòng %d và %d"
 
-#: apply.c:1460
-#, c-format
-msgid "recount: unexpected line: %.*s"
-msgstr "chi tiết: dòng không cần: %.*s"
-
-#: apply.c:1529
-#, c-format
-msgid "patch fragment without header at line %d: %.*s"
-msgstr "miếng vá phân mảnh mà không có phần đầu tại dòng %d: %.*s"
-
-#: apply.c:1551
+#: apply.c:1372
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -234,81 +224,91 @@
 "phần đầu diff cho git  thiếu thông tin tên tập tin khi gỡ bỏ đi %d trong "
 "thành phần dẫn đầu tên của đường dẫn (dòng %d)"
 
-#: apply.c:1564
+#: apply.c:1385
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr "phần đầu diff cho git thiếu thông tin tên tập tin (dòng %d)"
 
-#: apply.c:1752
+#: apply.c:1481
+#, c-format
+msgid "recount: unexpected line: %.*s"
+msgstr "chi tiết: dòng không cần: %.*s"
+
+#: apply.c:1550
+#, c-format
+msgid "patch fragment without header at line %d: %.*s"
+msgstr "miếng vá phân mảnh mà không có phần đầu tại dòng %d: %.*s"
+
+#: apply.c:1753
 msgid "new file depends on old contents"
 msgstr "tập tin mới phụ thuộc vào nội dung cũ"
 
-#: apply.c:1754
+#: apply.c:1755
 msgid "deleted file still has contents"
 msgstr "tập tin đã xóa vẫn còn nội dung"
 
-#: apply.c:1788
+#: apply.c:1789
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "miếng vá hỏng tại dòng %d"
 
-#: apply.c:1825
+#: apply.c:1826
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "tập tin mới %s phụ thuộc vào nội dung cũ"
 
-#: apply.c:1827
+#: apply.c:1828
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "tập tin đã xóa %s vẫn còn nội dung"
 
-#: apply.c:1830
+#: apply.c:1831
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** cảnh báo: tập tin %s trở nên trống rỗng nhưng không bị xóa"
 
-#: apply.c:1977
+#: apply.c:1978
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "miếng vá định dạng nhị phân sai hỏng tại dòng %d: %.*s"
 
-#: apply.c:2014
+#: apply.c:2015
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "miếng vá định dạng nhị phân không được nhận ra tại dòng %d"
 
-#: apply.c:2176
+#: apply.c:2177
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "vá chỉ với “rác” tại dòng %d"
 
-#: apply.c:2262
+#: apply.c:2263
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "không thể đọc liên kết mềm %s"
 
-#: apply.c:2266
+#: apply.c:2267
 #, c-format
 msgid "unable to open or read %s"
 msgstr "không thể mở hay đọc %s"
 
-#: apply.c:2925
+#: apply.c:2926
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "sai khởi đầu dòng: “%c”"
 
-#: apply.c:3046
+#: apply.c:3047
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "Khối dữ liệu #%d thành công tại %d (offset %d dòng)."
 
-#: apply.c:3058
+#: apply.c:3059
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "Nội dung bị giảm xuống còn (%ld/%ld) để áp dụng mảnh dữ liệu tại %d"
 
-#: apply.c:3064
+#: apply.c:3065
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -317,453 +317,453 @@
 "trong khi đang tìm kiếm cho:\n"
 "%.*s"
 
-#: apply.c:3086
+#: apply.c:3087
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "thiếu dữ liệu của miếng vá định dạng nhị phân cho “%s”"
 
-#: apply.c:3094
+#: apply.c:3095
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr ""
 "không thể reverse-apply một miếng vá nhị phân mà không đảo ngược khúc thành "
 "“%s”"
 
-#: apply.c:3141
+#: apply.c:3142
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr ""
 "không thể áp dụng miếng vá nhị phân thành “%s” mà không có dòng chỉ mục đầy "
 "đủ"
 
-#: apply.c:3151
+#: apply.c:3152
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr ""
 "miếng vá áp dụng cho “%s” (%s), cái mà không khớp với các nội dung hiện tại."
 
-#: apply.c:3159
+#: apply.c:3160
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "miếng vá áp dụng cho một “%s” trống rỗng nhưng nó lại không trống"
 
-#: apply.c:3177
+#: apply.c:3178
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "không thể đọc postimage %s cần thiết cho “%s”"
 
-#: apply.c:3190
+#: apply.c:3191
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "miếng vá định dạng nhị phân không được áp dụng cho “%s”"
 
-#: apply.c:3196
+#: apply.c:3197
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
 "vá nhị phân cho “%s” tạo ra kết quả không chính xác (mong chờ %s, lại nhận "
 "%s)"
 
-#: apply.c:3217
+#: apply.c:3218
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "gặp lỗi khi vá: %s:%ld"
 
-#: apply.c:3340
+#: apply.c:3341
 #, c-format
 msgid "cannot checkout %s"
 msgstr "không thể lấy ra %s"
 
-#: apply.c:3392 apply.c:3403 apply.c:3449 midx.c:62 setup.c:279
+#: apply.c:3393 apply.c:3404 apply.c:3450 midx.c:61 setup.c:280
 #, c-format
 msgid "failed to read %s"
 msgstr "gặp lỗi khi đọc %s"
 
-#: apply.c:3400
+#: apply.c:3401
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "đọc từ “%s” vượt ra ngoài liên kết mềm"
 
-#: apply.c:3429 apply.c:3672
+#: apply.c:3430 apply.c:3673
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "đường dẫn %s đã bị xóa hoặc đổi tên"
 
-#: apply.c:3515 apply.c:3687
+#: apply.c:3516 apply.c:3688
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s: không tồn tại trong bảng mục lục"
 
-#: apply.c:3524 apply.c:3695
+#: apply.c:3525 apply.c:3696
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s: không khớp trong mục lục"
 
-#: apply.c:3559
+#: apply.c:3560
 msgid "repository lacks the necessary blob to fall back on 3-way merge."
 msgstr "kho thiếu đối tượng blob cần thiết để trở về trên “3-way merge”."
 
-#: apply.c:3562
+#: apply.c:3563
 #, c-format
 msgid "Falling back to three-way merge...\n"
 msgstr "Đang trở lại hòa trộn “3-đường”…\n"
 
-#: apply.c:3578 apply.c:3582
+#: apply.c:3579 apply.c:3583
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "không thể đọc nội dung hiện hành của “%s”"
 
-#: apply.c:3594
+#: apply.c:3595
 #, c-format
 msgid "Failed to fall back on three-way merge...\n"
 msgstr "Gặp lỗi khi quay trở lại để hòa trộn kiểu “three-way”…\n"
 
-#: apply.c:3608
+#: apply.c:3609
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "Đã áp dụng miếng vá %s với các xung đột.\n"
 
-#: apply.c:3613
+#: apply.c:3614
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "Đã áp dụng miếng vá %s một cách sạch sẽ.\n"
 
-#: apply.c:3639
+#: apply.c:3640
 msgid "removal patch leaves file contents"
 msgstr "loại bỏ miếng vá để lại nội dung tập tin"
 
-#: apply.c:3712
+#: apply.c:3713
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s: sai kiểu"
 
-#: apply.c:3714
+#: apply.c:3715
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s có kiểu %o, cần %o"
 
-#: apply.c:3865 apply.c:3867 read-cache.c:830 read-cache.c:856
+#: apply.c:3866 apply.c:3868 read-cache.c:830 read-cache.c:856
 #: read-cache.c:1309
 #, c-format
 msgid "invalid path '%s'"
 msgstr "đường dẫn không hợp lệ “%s”"
 
-#: apply.c:3923
+#: apply.c:3924
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s: đã có từ trước trong bảng mục lục"
 
-#: apply.c:3926
+#: apply.c:3927
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s: đã sẵn có trong thư mục đang làm việc"
 
-#: apply.c:3946
+#: apply.c:3947
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "chế độ mới (%o) của %s không khớp với chế độ cũ (%o)"
 
-#: apply.c:3951
+#: apply.c:3952
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "chế độ mới (%o) của %s không khớp với chế độ cũ (%o) của %s"
 
-#: apply.c:3971
+#: apply.c:3972
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "tập tin chịu tác động “%s” vượt ra ngoài liên kết mềm"
 
-#: apply.c:3975
+#: apply.c:3976
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s: miếng vá không được áp dụng"
 
-#: apply.c:3990
+#: apply.c:3991
 #, c-format
 msgid "Checking patch %s..."
 msgstr "Đang kiểm tra miếng vá %s…"
 
-#: apply.c:4082
+#: apply.c:4083
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "thông tin sha1 thiếu hoặc không dùng được cho mô-đun %s"
 
-#: apply.c:4089
+#: apply.c:4090
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "thay đổi chế độ cho %s, cái mà không phải là HEAD hiện tại"
 
-#: apply.c:4092
+#: apply.c:4093
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "thông tin sha1 còn thiếu hay không dùng được(%s)."
 
-#: apply.c:4097 builtin/checkout.c:278 builtin/reset.c:143
+#: apply.c:4098 builtin/checkout.c:279 builtin/reset.c:143
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "make_cache_entry gặp lỗi đối với đường dẫn “%s”"
 
-#: apply.c:4101
+#: apply.c:4102
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "không thể thêm %s vào chỉ mục tạm thời"
 
-#: apply.c:4111
+#: apply.c:4112
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "không thể ghi mục lục tạm vào %s"
 
-#: apply.c:4249
+#: apply.c:4250
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "không thể gỡ bỏ %s từ mục lục"
 
-#: apply.c:4283
+#: apply.c:4284
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "miếng vá sai hỏng cho mô-đun-con %s"
 
-#: apply.c:4289
+#: apply.c:4290
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "không thể lấy thống kê về tập tin %s mới hơn đã được tạo"
 
-#: apply.c:4297
+#: apply.c:4298
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr "không thể tạo “kho lưu đằng sau” cho tập tin được tạo mới hơn %s"
 
-#: apply.c:4303 apply.c:4448
+#: apply.c:4304 apply.c:4449
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "không thể thêm mục nhớ đệm cho %s"
 
-#: apply.c:4346
+#: apply.c:4347
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "gặp lỗi khi ghi vào “%s”"
 
-#: apply.c:4350
+#: apply.c:4351
 #, c-format
 msgid "closing file '%s'"
 msgstr "đang đóng tập tin “%s”"
 
-#: apply.c:4420
+#: apply.c:4421
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "không thể ghi vào tập tin “%s” chế độ %o"
 
-#: apply.c:4518
+#: apply.c:4519
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "Đã áp dụng miếng vá %s một cách sạch sẽ."
 
-#: apply.c:4526
+#: apply.c:4527
 msgid "internal error"
 msgstr "lỗi nội bộ"
 
-#: apply.c:4529
+#: apply.c:4530
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "Đang áp dụng miếng vá %%s với %d lần từ chối…"
 
-#: apply.c:4540
+#: apply.c:4541
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "đang cắt ngắn tên tập tin .rej thành %.*s.rej"
 
-#: apply.c:4548 builtin/fetch.c:878 builtin/fetch.c:1168
+#: apply.c:4549 builtin/fetch.c:898 builtin/fetch.c:1194
 #, c-format
 msgid "cannot open %s"
 msgstr "không mở được “%s”"
 
-#: apply.c:4562
+#: apply.c:4563
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "Khối nhớ #%d được áp dụng gọn gàng."
 
-#: apply.c:4566
+#: apply.c:4567
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "Đoạn dữ liệu #%d bị từ chối."
 
-#: apply.c:4676
+#: apply.c:4686
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Bỏ qua đường dẫn “%s”."
 
-#: apply.c:4684
+#: apply.c:4694
 msgid "unrecognized input"
 msgstr "không thừa nhận đầu vào"
 
-#: apply.c:4704
+#: apply.c:4714
 msgid "unable to read index file"
 msgstr "không thể đọc tập tin lưu bảng mục lục"
 
-#: apply.c:4859
+#: apply.c:4871
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "không thể mở miếng vá “%s”: %s"
 
-#: apply.c:4886
+#: apply.c:4898
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "đã chấm dứt %d lỗi khoảng trắng"
 
-#: apply.c:4892 apply.c:4907
+#: apply.c:4904 apply.c:4919
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d dòng thêm khoảng trắng lỗi."
 
-#: apply.c:4900
+#: apply.c:4912
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] "%d dòng được áp dụng sau khi sửa các lỗi khoảng trắng."
 
-#: apply.c:4916 builtin/add.c:540 builtin/mv.c:301 builtin/rm.c:390
+#: apply.c:4928 builtin/add.c:540 builtin/mv.c:301 builtin/rm.c:390
 msgid "Unable to write new index file"
 msgstr "Không thể ghi tập tin lưu bảng mục lục mới"
 
-#: apply.c:4943 apply.c:4946 builtin/am.c:2208 builtin/am.c:2211
-#: builtin/clone.c:123 builtin/fetch.c:128 builtin/merge.c:273
-#: builtin/pull.c:208 builtin/submodule--helper.c:407
+#: apply.c:4955 apply.c:4958 builtin/am.c:2197 builtin/am.c:2200
+#: builtin/clone.c:122 builtin/fetch.c:143 builtin/merge.c:273
+#: builtin/pull.c:209 builtin/submodule--helper.c:407
 #: builtin/submodule--helper.c:1367 builtin/submodule--helper.c:1370
 #: builtin/submodule--helper.c:1850 builtin/submodule--helper.c:1853
 #: builtin/submodule--helper.c:2092 git-add--interactive.perl:211
 msgid "path"
 msgstr "đường-dẫn"
 
-#: apply.c:4944
+#: apply.c:4956
 msgid "don't apply changes matching the given path"
 msgstr "không áp dụng các thay đổi khớp với đường dẫn đã cho"
 
-#: apply.c:4947
+#: apply.c:4959
 msgid "apply changes matching the given path"
 msgstr "áp dụng các thay đổi khớp với đường dẫn đã cho"
 
-#: apply.c:4949 builtin/am.c:2217
+#: apply.c:4961 builtin/am.c:2206
 msgid "num"
 msgstr "số"
 
-#: apply.c:4950
+#: apply.c:4962
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "gỡ bỏ <số> dấu gạch chéo dẫn đầu từ đường dẫn diff cổ điển"
 
-#: apply.c:4953
+#: apply.c:4965
 msgid "ignore additions made by the patch"
 msgstr "lờ đi phần bổ xung được tạo ra bởi miếng vá"
 
-#: apply.c:4955
+#: apply.c:4967
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr ""
 "thay vì áp dụng một miếng vá, kết xuất kết quả từ lệnh diffstat cho đầu ra"
 
-#: apply.c:4959
+#: apply.c:4971
 msgid "show number of added and deleted lines in decimal notation"
 msgstr ""
 "hiển thị số lượng các dòng được thêm vào và xóa đi theo ký hiệu thập phân"
 
-#: apply.c:4961
+#: apply.c:4973
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "thay vì áp dụng một miếng vá, kết xuất kết quả cho đầu vào"
 
-#: apply.c:4963
+#: apply.c:4975
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "thay vì áp dụng miếng vá, hãy xem xem miếng vá có thích hợp không"
 
-#: apply.c:4965
+#: apply.c:4977
 msgid "make sure the patch is applicable to the current index"
 msgstr "hãy chắc chắn là miếng vá thích hợp với bảng mục lục hiện hành"
 
-#: apply.c:4967
+#: apply.c:4979
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "đánh dấu các tập tin mới với “git add --intent-to-add”"
 
-#: apply.c:4969
+#: apply.c:4981
 msgid "apply a patch without touching the working tree"
 msgstr "áp dụng một miếng vá mà không động chạm đến cây làm việc"
 
-#: apply.c:4971
+#: apply.c:4983
 msgid "accept a patch that touches outside the working area"
 msgstr "chấp nhận một miếng vá mà không động chạm đến cây làm việc"
 
-#: apply.c:4974
+#: apply.c:4986
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr ""
 "đồng thời áp dụng miếng vá (dùng với tùy chọn --stat/--summary/--check)"
 
-#: apply.c:4976
+#: apply.c:4988
 msgid "attempt three-way merge if a patch does not apply"
 msgstr "thử hòa trộn kiểu three-way nếu việc vá không thể thực hiện được"
 
-#: apply.c:4978
+#: apply.c:4990
 msgid "build a temporary index based on embedded index information"
 msgstr ""
 "xây dựng bảng mục lục tạm thời trên cơ sở thông tin bảng mục lục được nhúng"
 
-#: apply.c:4981 builtin/checkout-index.c:173 builtin/ls-files.c:524
+#: apply.c:4993 builtin/checkout-index.c:173 builtin/ls-files.c:524
 msgid "paths are separated with NUL character"
 msgstr "các đường dẫn bị ngăn cách bởi ký tự NULL"
 
-#: apply.c:4983
+#: apply.c:4995
 msgid "ensure at least <n> lines of context match"
 msgstr "đảm bảo rằng có ít nhất <n> dòng nội dung khớp"
 
-#: apply.c:4984 builtin/am.c:2196 builtin/interpret-trailers.c:98
+#: apply.c:4996 builtin/am.c:2185 builtin/interpret-trailers.c:98
 #: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3330 builtin/rebase.c:1421
+#: builtin/pack-objects.c:3310 builtin/rebase.c:1445
 msgid "action"
 msgstr "hành động"
 
-#: apply.c:4985
+#: apply.c:4997
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "tìm thấy một dòng mới hoặc bị sửa đổi mà nó có lỗi do khoảng trắng"
 
-#: apply.c:4988 apply.c:4991
+#: apply.c:5000 apply.c:5003
 msgid "ignore changes in whitespace when finding context"
 msgstr "lờ đi sự thay đổi do khoảng trắng gây ra khi quét nội dung"
 
-#: apply.c:4994
+#: apply.c:5006
 msgid "apply the patch in reverse"
 msgstr "áp dụng miếng vá theo chiều ngược"
 
-#: apply.c:4996
+#: apply.c:5008
 msgid "don't expect at least one line of context"
 msgstr "đừng hy vọng có ít nhất một dòng nội dung"
 
-#: apply.c:4998
+#: apply.c:5010
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "để lại khối dữ liệu bị từ chối trong các tập tin *.rej tương ứng"
 
-#: apply.c:5000
+#: apply.c:5012
 msgid "allow overlapping hunks"
 msgstr "cho phép chồng khối nhớ"
 
-#: apply.c:5001 builtin/add.c:291 builtin/check-ignore.c:22
+#: apply.c:5013 builtin/add.c:291 builtin/check-ignore.c:22
 #: builtin/commit.c:1337 builtin/count-objects.c:98 builtin/fsck.c:786
-#: builtin/log.c:2068 builtin/mv.c:123 builtin/read-tree.c:128
+#: builtin/log.c:2085 builtin/mv.c:123 builtin/read-tree.c:128
 msgid "be verbose"
 msgstr "chi tiết"
 
-#: apply.c:5003
+#: apply.c:5015
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr ""
 "đã dò tìm thấy dung sai không chính xác thiếu dòng mới tại cuối tập tin"
 
-#: apply.c:5006
+#: apply.c:5018
 msgid "do not trust the line counts in the hunk headers"
 msgstr "không tin số lượng dòng trong phần đầu khối dữ liệu"
 
-#: apply.c:5008 builtin/am.c:2205
+#: apply.c:5020 builtin/am.c:2194
 msgid "root"
 msgstr "gốc"
 
-#: apply.c:5009
+#: apply.c:5021
 msgid "prepend <root> to all filenames"
 msgstr "treo thêm <root> vào tất cả các tên tập tin"
 
@@ -818,7 +818,7 @@
 msgid "archive format"
 msgstr "định dạng lưu trữ"
 
-#: archive.c:458 builtin/log.c:1580
+#: archive.c:458 builtin/log.c:1581
 msgid "prefix"
 msgstr "tiền_tố"
 
@@ -826,11 +826,12 @@
 msgid "prepend prefix to each pathname in the archive"
 msgstr "nối thêm tiền tố vào từng đường dẫn tập tin trong kho lưu"
 
-#: archive.c:460 builtin/blame.c:862 builtin/blame.c:874 builtin/blame.c:875
-#: builtin/commit-tree.c:117 builtin/config.c:129 builtin/fast-export.c:1134
-#: builtin/fast-export.c:1136 builtin/grep.c:897 builtin/hash-object.c:105
-#: builtin/ls-files.c:560 builtin/ls-files.c:563 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:177
+#: archive.c:460 builtin/blame.c:861 builtin/blame.c:873 builtin/blame.c:874
+#: builtin/commit-tree.c:117 builtin/config.c:129 builtin/fast-export.c:1162
+#: builtin/fast-export.c:1164 builtin/fast-export.c:1168 builtin/grep.c:899
+#: builtin/hash-object.c:105 builtin/ls-files.c:560 builtin/ls-files.c:563
+#: builtin/notes.c:412 builtin/notes.c:578 builtin/read-tree.c:123
+#: parse-options.h:186
 msgid "file"
 msgstr "tập_tin"
 
@@ -862,7 +863,7 @@
 msgid "list supported archive formats"
 msgstr "liệt kê các kiểu nén được hỗ trợ"
 
-#: archive.c:479 builtin/archive.c:91 builtin/clone.c:113 builtin/clone.c:116
+#: archive.c:479 builtin/archive.c:91 builtin/clone.c:112 builtin/clone.c:115
 #: builtin/submodule--helper.c:1379 builtin/submodule--helper.c:1859
 msgid "repo"
 msgstr "kho"
@@ -871,7 +872,7 @@
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "nhận kho nén từ kho chứa <kho> trên máy chủ"
 
-#: archive.c:481 builtin/archive.c:93 builtin/difftool.c:707
+#: archive.c:481 builtin/archive.c:93 builtin/difftool.c:715
 #: builtin/notes.c:498
 msgid "command"
 msgstr "lệnh"
@@ -907,26 +908,26 @@
 msgid "cannot stream blob %s"
 msgstr "không thể stream blob “%s”"
 
-#: archive-tar.c:260 archive-zip.c:363
+#: archive-tar.c:266 archive-zip.c:363
 #, c-format
 msgid "unsupported file mode: 0%o (SHA1: %s)"
 msgstr "chế độ tập tin lục không được hỗ trợ: 0%o (SHA1: %s)"
 
-#: archive-tar.c:287 archive-zip.c:353
+#: archive-tar.c:293 archive-zip.c:353
 #, c-format
 msgid "cannot read %s"
 msgstr "không thể đọc %s"
 
-#: archive-tar.c:459
+#: archive-tar.c:465
 #, c-format
 msgid "unable to start '%s' filter"
 msgstr "không thể bắt đầu bộ lọc “%s”"
 
-#: archive-tar.c:462
+#: archive-tar.c:468
 msgid "unable to redirect descriptor"
 msgstr "không thể chuyển hướng mô tả"
 
-#: archive-tar.c:469
+#: archive-tar.c:475
 #, c-format
 msgid "'%s' filter reported error"
 msgstr "bộ lọc “%s” đã báo cáo lỗi"
@@ -951,17 +952,17 @@
 msgid "timestamp too large for this system: %<PRIuMAX>"
 msgstr "dấu vết thời gian là quá lớn cho hệ thống này: %<PRIuMAX>"
 
-#: attr.c:211
+#: attr.c:213
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s không phải tên thuộc tính hợp lệ"
 
-#: attr.c:368
+#: attr.c:370
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s không được phép: %s:%d"
 
-#: attr.c:408
+#: attr.c:410
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1087,40 +1088,40 @@
 msgid_plural "Bisecting: %d revisions left to test after this %s\n"
 msgstr[0] "Bisecting: còn %d điểm xét duyệt để kiểm sau %s này\n"
 
-#: blame.c:2697
+#: blame.c:2700
 msgid "--contents and --reverse do not blend well."
 msgstr "tùy chọn--contents và --reverse không được trộn vào nhau."
 
-#: blame.c:2711
+#: blame.c:2714
 msgid "cannot use --contents with final commit object name"
 msgstr "không thể dùng --contents với tên đối tượng chuyển giao cuối cùng"
 
-#: blame.c:2732
+#: blame.c:2735
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "cùng sử dụng --reverse và --first-parent cần chỉ định lần chuyển giao cuối"
 
-#: blame.c:2741 bundle.c:167 ref-filter.c:2196 remote.c:1938 sequencer.c:2033
-#: sequencer.c:4348 builtin/commit.c:1020 builtin/log.c:387 builtin/log.c:963
-#: builtin/log.c:1451 builtin/log.c:1827 builtin/log.c:2117 builtin/merge.c:411
-#: builtin/pack-objects.c:3148 builtin/pack-objects.c:3163
+#: blame.c:2744 bundle.c:167 ref-filter.c:2203 remote.c:1941 sequencer.c:1971
+#: sequencer.c:4305 builtin/commit.c:1020 builtin/log.c:387 builtin/log.c:964
+#: builtin/log.c:1452 builtin/log.c:1844 builtin/log.c:2134 builtin/merge.c:411
+#: builtin/pack-objects.c:3128 builtin/pack-objects.c:3143
 #: builtin/shortlog.c:192
 msgid "revision walk setup failed"
 msgstr "cài đặt việc di chuyển qua các điểm xét duyệt gặp lỗi"
 
-#: blame.c:2759
+#: blame.c:2762
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "cùng sử dụng --reverse --first-parent yêu cầu vùng cùng với chuỗi cha-mẹ-đầu-"
 "tiên"
 
-#: blame.c:2770
+#: blame.c:2773
 #, c-format
 msgid "no such path %s in %s"
 msgstr "không có đường dẫn %s trong “%s”"
 
-#: blame.c:2781
+#: blame.c:2784
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "không thể đọc blob %s cho đường dẫn “%s”"
@@ -1276,7 +1277,7 @@
 msgid "unrecognized header: %s%s (%d)"
 msgstr "phần đầu không được thừa nhận: %s%s (%d)"
 
-#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2283 sequencer.c:3024
+#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2221 sequencer.c:2962
 #: builtin/commit.c:791
 #, c-format
 msgid "could not open '%s'"
@@ -1327,7 +1328,7 @@
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "th.chiếu “%s” bị loại trừ bởi các tùy chọn rev-list"
 
-#: bundle.c:460 builtin/log.c:202 builtin/log.c:1732 builtin/shortlog.c:306
+#: bundle.c:460 builtin/log.c:202 builtin/log.c:1733 builtin/shortlog.c:306
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "đối số không được thừa nhận: %s"
@@ -1350,8 +1351,8 @@
 msgid "invalid color value: %.*s"
 msgstr "giá trị màu không hợp lệ: %.*s"
 
-#: commit.c:50 sequencer.c:2727 builtin/am.c:355 builtin/am.c:399
-#: builtin/am.c:1378 builtin/am.c:2020 builtin/replace.c:455
+#: commit.c:50 sequencer.c:2665 builtin/am.c:354 builtin/am.c:398
+#: builtin/am.c:1366 builtin/am.c:2009 builtin/replace.c:456
 #, c-format
 msgid "could not parse %s"
 msgstr "không thể phân tích cú pháp %s"
@@ -1381,28 +1382,28 @@
 "Tắt lời nhắn này bằng cách chạy\n"
 "\"git config advice.graftFileDeprecated false\""
 
-#: commit.c:1127
+#: commit.c:1128
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr ""
 "Lần chuyển giao %s có một chữ ký GPG không đáng tin, được cho là bởi %s."
 
-#: commit.c:1130
+#: commit.c:1131
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "Lần chuyển giao %s có một chữ ký GPG sai, được cho là bởi %s."
 
-#: commit.c:1133
+#: commit.c:1134
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "Lần chuyển giao %s không có chữ ký GPG."
 
-#: commit.c:1136
+#: commit.c:1137
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "Lần chuyển giao %s có một chữ ký GPG tốt bởi %s\n"
 
-#: commit.c:1390
+#: commit.c:1391
 msgid ""
 "Warning: commit message did not conform to UTF-8.\n"
 "You may want to amend it after fixing the message, or set the config\n"
@@ -1466,192 +1467,207 @@
 msgid "unable to find all commit-graph files"
 msgstr "không thể tìm thấy tất cả các tập tin đồ-thị-các-lần-chuyển-giao"
 
-#: commit-graph.c:554 commit-graph.c:614
+#: commit-graph.c:561 commit-graph.c:621
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr ""
 "vị trí lần chuyển giao không hợp lệ. đồ-thị-các-lần-chuyển-giao có vẻ như đã "
 "bị hỏng"
 
-#: commit-graph.c:575
+#: commit-graph.c:582
 #, c-format
 msgid "could not find commit %s"
 msgstr "không thể tìm thấy lần chuyển giao %s"
 
-#: commit-graph.c:1002 builtin/pack-objects.c:2657
+#: commit-graph.c:855 builtin/am.c:1287
+#, c-format
+msgid "unable to parse commit %s"
+msgstr "không thể phân tích lần chuyển giao “%s”"
+
+#: commit-graph.c:859
+#, c-format
+msgid "unable to get tree for %s"
+msgstr "không thể lấy cây cho %s"
+
+#: commit-graph.c:1017 builtin/pack-objects.c:2641
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "không thể lấy kiểu của đối tượng “%s”"
 
-#: commit-graph.c:1034
+#: commit-graph.c:1049
 msgid "Loading known commits in commit graph"
 msgstr "Đang tải các lần chuyển giao chưa biết trong đồ thị lần chuyển giao"
 
-#: commit-graph.c:1051
+#: commit-graph.c:1066
 msgid "Expanding reachable commits in commit graph"
 msgstr ""
 "Mở rộng các lần chuyển giao có thể tiếp cận được trong trong đồ thị lần "
 "chuyển giao"
 
-#: commit-graph.c:1070
+#: commit-graph.c:1085
 msgid "Clearing commit marks in commit graph"
 msgstr "Đang dọn dẹp các đánh dấu lần chuyển giao trong đồ thị lần chuyển giao"
 
-#: commit-graph.c:1089
+#: commit-graph.c:1104
 msgid "Computing commit graph generation numbers"
 msgstr "Đang tính toán số tạo đồ thị các lần chuyển giao"
 
-#: commit-graph.c:1163
+#: commit-graph.c:1179
 #, c-format
 msgid "Finding commits for commit graph in %d pack"
 msgid_plural "Finding commits for commit graph in %d packs"
 msgstr[0] ""
 "Đang tìm các lần chuyển giao cho đồ thị lần chuyển giao trong %d gói"
 
-#: commit-graph.c:1176
+#: commit-graph.c:1192
 #, c-format
 msgid "error adding pack %s"
 msgstr "gặp lỗi thêm gói %s"
 
-#: commit-graph.c:1180
+#: commit-graph.c:1196
 #, c-format
 msgid "error opening index for %s"
 msgstr "gặp lỗi khi mở mục lục cho “%s”"
 
-#: commit-graph.c:1204
+#: commit-graph.c:1220
 #, c-format
 msgid "Finding commits for commit graph from %d ref"
 msgid_plural "Finding commits for commit graph from %d refs"
 msgstr[0] ""
 "Đang tìm các lần chuyển giao cho đồ thị lần chuyển giao từ %d tham chiếu"
 
-#: commit-graph.c:1238
+#: commit-graph.c:1240
+#, c-format
+msgid "invalid commit object id: %s"
+msgstr "mã số đối tượng lần chuyển giao không hợp lệ: %s"
+
+#: commit-graph.c:1255
 msgid "Finding commits for commit graph among packed objects"
 msgstr ""
 "Đang tìm các lần chuyển giao cho đồ thị lần chuyển giao trong số các đối "
 "tượng đã đóng gói"
 
-#: commit-graph.c:1253
+#: commit-graph.c:1270
 msgid "Counting distinct commits in commit graph"
 msgstr "Đang đếm các lần chuyển giao khác nhau trong đồ thị lần chuyển giao"
 
-#: commit-graph.c:1284
+#: commit-graph.c:1300
 msgid "Finding extra edges in commit graph"
 msgstr "Đang tìm các cạnh mở tộng trong đồ thị lần chuyển giao"
 
-#: commit-graph.c:1332
+#: commit-graph.c:1346
 msgid "failed to write correct number of base graph ids"
 msgstr "gặp lỗi khi ghi số đúng của mã đồ họa cơ sở"
 
-#: commit-graph.c:1365 midx.c:811
+#: commit-graph.c:1379 midx.c:810
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "không thể tạo các thư mục dẫn đầu của “%s”"
 
-#: commit-graph.c:1377 builtin/index-pack.c:306 builtin/repack.c:240
+#: commit-graph.c:1391 builtin/index-pack.c:306 builtin/repack.c:241
 #, c-format
 msgid "unable to create '%s'"
 msgstr "không thể tạo “%s”"
 
-#: commit-graph.c:1437
+#: commit-graph.c:1451
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "Đang ghi ra đồ thị các lần chuyển giao trong lần %d"
 
-#: commit-graph.c:1478
+#: commit-graph.c:1492
 msgid "unable to open commit-graph chain file"
 msgstr "không thể mở tập tin mắt xích đồ thị chuyển giao"
 
-#: commit-graph.c:1490
+#: commit-graph.c:1504
 msgid "failed to rename base commit-graph file"
 msgstr "gặp lỗi khi đổi tên tập tin đồ-thị-các-lần-chuyển-giao"
 
-#: commit-graph.c:1510
+#: commit-graph.c:1524
 msgid "failed to rename temporary commit-graph file"
 msgstr "gặp lỗi khi đổi tên tập tin đồ-thị-các-lần-chuyển-giao tạm thời"
 
-#: commit-graph.c:1621
+#: commit-graph.c:1635
 msgid "Scanning merged commits"
 msgstr "Đang quét các lần chuyển giao đã hòa trộn"
 
-#: commit-graph.c:1632
+#: commit-graph.c:1646
 #, c-format
 msgid "unexpected duplicate commit id %s"
 msgstr "gặp mã số tích lần chuyển giao bị trùng lặp “%s”"
 
-#: commit-graph.c:1657
+#: commit-graph.c:1670
 msgid "Merging commit-graph"
 msgstr "Đang hòa trộn đồ-thị-các-lần-chuyển-giao"
 
-#: commit-graph.c:1844
+#: commit-graph.c:1860
 #, c-format
 msgid "the commit graph format cannot write %d commits"
 msgstr "định dạng đồ họa các lần chuyển giao không thể ghi %d lần chuyển giao"
 
-#: commit-graph.c:1855
+#: commit-graph.c:1871
 msgid "too many commits to write graph"
 msgstr "có quá nhiều lần chuyển giao để ghi đồ thị"
 
-#: commit-graph.c:1945
+#: commit-graph.c:1961
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 "tập tin đồ-thị-các-lần-chuyển-giao có tổng kiểm không đúng và có vẻ như là "
 "đã hỏng"
 
-#: commit-graph.c:1955
+#: commit-graph.c:1971
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "đồ-thị-các-lần-chuyển-giao có thứ tự OID không đúng: %s sau %s"
 
-#: commit-graph.c:1965 commit-graph.c:1980
+#: commit-graph.c:1981 commit-graph.c:1996
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr ""
 "đồ-thị-các-lần-chuyển-giao có giá trị fanout không đúng: fanout[%d] = %u != "
 "%u"
 
-#: commit-graph.c:1972
+#: commit-graph.c:1988
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "gặp lỗi khi phân tích lần chuyển giao từ %s đồ-thị-các-lần-chuyển-giao"
 
-#: commit-graph.c:1989
+#: commit-graph.c:2006
 msgid "Verifying commits in commit graph"
 msgstr "Đang thẩm tra các lần chuyển giao trong đồ thị lần chuyển giao"
 
-#: commit-graph.c:2002
+#: commit-graph.c:2020
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 "gặp lỗi khi phân tích lần chuyển giao %s từ cơ sở dữ liệu đối tượng cho đồ "
 "thị lần chuyển giao"
 
-#: commit-graph.c:2009
+#: commit-graph.c:2027
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr ""
 "OID cây gốc cho lần chuyển giao %s trong đồ-thị-các-lần-chuyển-giao là %s != "
 "%s"
 
-#: commit-graph.c:2019
+#: commit-graph.c:2037
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr ""
 "danh sách cha mẹ đồ-thị-các-lần-chuyển-giao cho lần chuyển giao %s là quá dài"
 
-#: commit-graph.c:2028
+#: commit-graph.c:2046
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "cha mẹ đồ-thị-các-lần-chuyển-giao cho %s là %s != %s"
 
-#: commit-graph.c:2041
+#: commit-graph.c:2059
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr ""
 "danh sách cha mẹ đồ-thị-các-lần-chuyển-giao cho lần chuyển giao %s bị chấm "
 "dứt quá sớm"
 
-#: commit-graph.c:2046
+#: commit-graph.c:2064
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
@@ -1659,7 +1675,7 @@
 "đồ-thị-các-lần-chuyển-giao có con số không lần tạo cho lần chuyển giao %s, "
 "nhưng không phải số không ở chỗ khác"
 
-#: commit-graph.c:2050
+#: commit-graph.c:2068
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
@@ -1667,12 +1683,12 @@
 "đồ-thị-các-lần-chuyển-giao có con số không phải không lần tạo cho lần chuyển "
 "giao %s, nhưng số không ở chỗ khác"
 
-#: commit-graph.c:2065
+#: commit-graph.c:2083
 #, c-format
 msgid "commit-graph generation for commit %s is %u != %u"
 msgstr "tạo đồ-thị-các-lần-chuyển-giao cho lần chuyển giao %s là %u != %u"
 
-#: commit-graph.c:2071
+#: commit-graph.c:2089
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
@@ -1721,7 +1737,7 @@
 msgid "key does not contain variable name: %s"
 msgstr "khóa không chứa bất kỳ một tên biến nào: %s"
 
-#: config.c:406 sequencer.c:2463
+#: config.c:406 sequencer.c:2401
 #, c-format
 msgid "invalid key: %s"
 msgstr "khóa không đúng: %s"
@@ -1845,150 +1861,144 @@
 msgid "invalid mode for object creation: %s"
 msgstr "chế độ không hợp lệ đối với việc tạo đối tượng: %s"
 
-#: config.c:1430
+#: config.c:1425
 #, c-format
 msgid "malformed value for %s"
 msgstr "giá trị cho %s sai dạng"
 
-#: config.c:1456
+#: config.c:1451
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "giá trị cho %s sai dạng: %s"
 
-#: config.c:1457
+#: config.c:1452
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr "phải là một trong số nothing, matching, simple, upstream hay current"
 
-#: config.c:1518 builtin/pack-objects.c:3410
+#: config.c:1513 builtin/pack-objects.c:3394
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "mức nén gói %d không hợp lệ"
 
-#: config.c:1639
+#: config.c:1634
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "không thể tải đối tượng blob cấu hình “%s”"
 
-#: config.c:1642
+#: config.c:1637
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "tham chiếu “%s” không chỉ đến một blob nào cả"
 
-#: config.c:1659
+#: config.c:1654
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "không thể phân giải điểm xét duyệt “%s”"
 
-#: config.c:1689
+#: config.c:1684
 #, c-format
 msgid "failed to parse %s"
 msgstr "gặp lỗi khi phân tích cú pháp %s"
 
-#: config.c:1745
+#: config.c:1740
 msgid "unable to parse command-line config"
 msgstr "không thể phân tích cấu hình dòng lệnh"
 
-#: config.c:2094
+#: config.c:2091
 msgid "unknown error occurred while reading the configuration files"
 msgstr "đã có lỗi chưa biết xảy ra trong khi đọc các tập tin cấu hình"
 
-#: config.c:2264
+#: config.c:2261
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "%s không hợp lệ: “%s”"
 
-#: config.c:2307
-#, c-format
-msgid "unknown core.untrackedCache value '%s'; using 'keep' default value"
-msgstr ""
-"không hiểu giá trị core.untrackedCache “%s”; dùng giá trị mặc định “keep”"
-
-#: config.c:2333
+#: config.c:2306
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr "giá trị splitIndex.maxPercentChange “%d” phải nằm giữa 0 và 100"
 
-#: config.c:2379
+#: config.c:2352
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "không thể phân tích “%s” từ cấu hình dòng lệnh"
 
-#: config.c:2381
+#: config.c:2354
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "sai biến cấu hình “%s” trong tập tin “%s” tại dòng %d"
 
-#: config.c:2462
+#: config.c:2435
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "tên của phần không hợp lệ “%s”"
 
-#: config.c:2494
+#: config.c:2467
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s có đa giá trị"
 
-#: config.c:2523
+#: config.c:2496
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "gặp lỗi khi ghi tập tin cấu hình “%s”"
 
-#: config.c:2775 config.c:3099
+#: config.c:2748 config.c:3072
 #, c-format
 msgid "could not lock config file %s"
 msgstr "không thể khóa tập tin cấu hình %s"
 
-#: config.c:2786
+#: config.c:2759
 #, c-format
 msgid "opening %s"
 msgstr "đang mở “%s”"
 
-#: config.c:2821 builtin/config.c:328
+#: config.c:2794 builtin/config.c:328
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "mẫu không hợp lệ: %s"
 
-#: config.c:2846
+#: config.c:2819
 #, c-format
 msgid "invalid config file %s"
 msgstr "tập tin cấu hình “%s” không hợp lệ"
 
-#: config.c:2859 config.c:3112
+#: config.c:2832 config.c:3085
 #, c-format
 msgid "fstat on %s failed"
 msgstr "fstat trên %s gặp lỗi"
 
-#: config.c:2870
+#: config.c:2843
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr "không thể mmap “%s”"
 
-#: config.c:2879 config.c:3117
+#: config.c:2852 config.c:3090
 #, c-format
 msgid "chmod on %s failed"
 msgstr "chmod trên %s gặp lỗi"
 
-#: config.c:2964 config.c:3214
+#: config.c:2937 config.c:3187
 #, c-format
 msgid "could not write config file %s"
 msgstr "không thể ghi tập tin cấu hình “%s”"
 
-#: config.c:2998
+#: config.c:2971
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "không thể đặt “%s” thành “%s”"
 
-#: config.c:3000 builtin/remote.c:782
+#: config.c:2973 builtin/remote.c:782
 #, c-format
 msgid "could not unset '%s'"
 msgstr "không thể thôi đặt “%s”"
 
-#: config.c:3090
+#: config.c:3063
 #, c-format
 msgid "invalid section name: %s"
 msgstr "tên của phần không hợp lệ: %s"
 
-#: config.c:3257
+#: config.c:3230
 #, c-format
 msgid "missing value for '%s'"
 msgstr "thiếu giá trị cho cho “%s”"
@@ -2112,7 +2122,7 @@
 msgid "unknown port %s"
 msgstr "không hiểu cổng %s"
 
-#: connect.c:845 connect.c:1171
+#: connect.c:845 connect.c:1175
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr "đã khóa tên máy lạ “%s”"
@@ -2127,58 +2137,58 @@
 msgid "cannot start proxy %s"
 msgstr "không thể khởi chạy ủy nhiệm “%s”"
 
-#: connect.c:924
+#: connect.c:928
 msgid "no path specified; see 'git help pull' for valid url syntax"
 msgstr "chưa chỉ định đường dẫn; xem'git help pull” để biết cú pháp url hợp lệ"
 
-#: connect.c:1119
+#: connect.c:1123
 msgid "ssh variant 'simple' does not support -4"
 msgstr "ssh biến thể “simple” không hỗ trợ -4"
 
-#: connect.c:1131
+#: connect.c:1135
 msgid "ssh variant 'simple' does not support -6"
 msgstr "ssh biến thể “simple” không hỗ trợ -6"
 
-#: connect.c:1148
+#: connect.c:1152
 msgid "ssh variant 'simple' does not support setting port"
 msgstr "ssh biến thể “simple” không hỗ trợ đặt cổng"
 
-#: connect.c:1260
+#: connect.c:1264
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr "đã khóa tên đường dẫn lạ “%s”"
 
-#: connect.c:1307
+#: connect.c:1311
 msgid "unable to fork"
 msgstr "không thể rẽ nhánh tiến trình con"
 
-#: connected.c:86 builtin/fsck.c:221 builtin/prune.c:43
+#: connected.c:88 builtin/fsck.c:221 builtin/prune.c:43
 msgid "Checking connectivity"
 msgstr "Đang kiểm tra kết nối"
 
-#: connected.c:98
+#: connected.c:100
 msgid "Could not run 'git rev-list'"
 msgstr "Không thể chạy “git rev-list”"
 
-#: connected.c:118
+#: connected.c:120
 msgid "failed write to rev-list"
 msgstr "gặp lỗi khi ghi vào rev-list"
 
-#: connected.c:125
+#: connected.c:127
 msgid "failed to close rev-list's stdin"
 msgstr "gặp lỗi khi đóng đầu vào chuẩn stdin của rev-list"
 
-#: convert.c:193
+#: convert.c:194
 #, c-format
 msgid "illegal crlf_action %d"
 msgstr "crlf_action %d không hợp lệ"
 
-#: convert.c:206
+#: convert.c:207
 #, c-format
 msgid "CRLF would be replaced by LF in %s"
 msgstr "CRLF nên được thay bằng LF trong %s"
 
-#: convert.c:208
+#: convert.c:209
 #, c-format
 msgid ""
 "CRLF will be replaced by LF in %s.\n"
@@ -2187,12 +2197,12 @@
 "CRLF sẽ bị thay thế bằng LF trong %s.\n"
 "Tập tin sẽ có kiểu xuống dòng như bản gốc trong thư mục làm việc của bạn"
 
-#: convert.c:216
+#: convert.c:217
 #, c-format
 msgid "LF would be replaced by CRLF in %s"
 msgstr "LF nên thay bằng CRLF trong %s"
 
-#: convert.c:218
+#: convert.c:219
 #, c-format
 msgid ""
 "LF will be replaced by CRLF in %s.\n"
@@ -2201,12 +2211,12 @@
 "LF sẽ bị thay thế bằng CRLF trong %s.\n"
 "Tập tin sẽ có kiểu xuống dòng như bản gốc trong thư mục làm việc của bạn"
 
-#: convert.c:279
+#: convert.c:280
 #, c-format
 msgid "BOM is prohibited in '%s' if encoded as %s"
 msgstr "BOM bị cấm trong “%s” nếu được mã hóa là %s"
 
-#: convert.c:286
+#: convert.c:287
 #, c-format
 msgid ""
 "The file '%s' contains a byte order mark (BOM). Please use UTF-%s as working-"
@@ -2215,12 +2225,12 @@
 "Tập tin “%s” có chứa ký hiệu thứ tự byte (BOM). Vui lòng dùng UTF-%s như là "
 "bảng mã cây làm việc."
 
-#: convert.c:304
+#: convert.c:305
 #, c-format
 msgid "BOM is required in '%s' if encoded as %s"
 msgstr "BOM là bắt buộc trong “%s” nếu được mã hóa là %s"
 
-#: convert.c:306
+#: convert.c:307
 #, c-format
 msgid ""
 "The file '%s' is missing a byte order mark (BOM). Please use UTF-%sBE or UTF-"
@@ -2229,50 +2239,50 @@
 "Tập tin “%s” còn thiếu ký hiệu thứ tự byte (BOM). Vui lòng dùng UTF-%sBE hay "
 "UTF-%sLE (còn phục thuộc vào thứ tự byte) như là bảng mã cây làm việc."
 
-#: convert.c:424 convert.c:495
+#: convert.c:425 convert.c:496
 #, c-format
 msgid "failed to encode '%s' from %s to %s"
 msgstr "gặp lỗi khi mã hóa “%s”  từ “%s” sang “%s”"
 
-#: convert.c:467
+#: convert.c:468
 #, c-format
 msgid "encoding '%s' from %s to %s and back is not the same"
 msgstr "mã hóa “%s” từ %s thành %s và ngược trở lại không phải là cùng"
 
-#: convert.c:673
+#: convert.c:674
 #, c-format
 msgid "cannot fork to run external filter '%s'"
 msgstr "không thể rẽ nhánh tiến trình để chạy bộ lọc bên ngoài “%s”"
 
-#: convert.c:693
+#: convert.c:694
 #, c-format
 msgid "cannot feed the input to external filter '%s'"
 msgstr "không thể cấp đầu vào cho bộ lọc bên ngoài “%s”"
 
-#: convert.c:700
+#: convert.c:701
 #, c-format
 msgid "external filter '%s' failed %d"
 msgstr "chạy bộ lọc bên ngoài “%s” gặp lỗi %d"
 
-#: convert.c:735 convert.c:738
+#: convert.c:736 convert.c:739
 #, c-format
 msgid "read from external filter '%s' failed"
 msgstr "đọc từ bộ lọc bên ngoài “%s” gặp lỗi"
 
-#: convert.c:741 convert.c:796
+#: convert.c:742 convert.c:797
 #, c-format
 msgid "external filter '%s' failed"
 msgstr "gặp lỗi khi chạy bộ lọc bên ngoài “%s”"
 
-#: convert.c:844
+#: convert.c:845
 msgid "unexpected filter type"
 msgstr "gặp kiểu bộ lọc thừa"
 
-#: convert.c:855
+#: convert.c:856
 msgid "path name too long for external filter"
 msgstr "tên đường dẫn quá dài cho bộ lọc bên ngoài"
 
-#: convert.c:929
+#: convert.c:930
 #, c-format
 msgid ""
 "external filter '%s' is not available anymore although not all paths have "
@@ -2281,74 +2291,74 @@
 "bộ lọc bên ngoài “%s” không sẵn sàng nữa mặc dù không phải tất cả các đường "
 "dẫn đã được lọc"
 
-#: convert.c:1228
+#: convert.c:1229
 msgid "true/false are no valid working-tree-encodings"
 msgstr "true/false là không phải bảng-mã-cây-làm-việc hợp lệ"
 
-#: convert.c:1398 convert.c:1432
+#: convert.c:1417 convert.c:1451
 #, c-format
 msgid "%s: clean filter '%s' failed"
 msgstr "%s: gặp lỗi khi xóa bộ lọc “%s”"
 
-#: convert.c:1476
+#: convert.c:1495
 #, c-format
 msgid "%s: smudge filter %s failed"
 msgstr "%s: smudge bộ lọc %s gặp lỗi"
 
-#: date.c:137
+#: date.c:138
 msgid "in the future"
 msgstr "ở thời tương lai"
 
-#: date.c:143
+#: date.c:144
 #, c-format
 msgid "%<PRIuMAX> second ago"
 msgid_plural "%<PRIuMAX> seconds ago"
 msgstr[0] "%<PRIuMAX> giây trước"
 
-#: date.c:150
+#: date.c:151
 #, c-format
 msgid "%<PRIuMAX> minute ago"
 msgid_plural "%<PRIuMAX> minutes ago"
 msgstr[0] "%<PRIuMAX> phút trước"
 
-#: date.c:157
+#: date.c:158
 #, c-format
 msgid "%<PRIuMAX> hour ago"
 msgid_plural "%<PRIuMAX> hours ago"
 msgstr[0] "%<PRIuMAX> giờ trước"
 
-#: date.c:164
+#: date.c:165
 #, c-format
 msgid "%<PRIuMAX> day ago"
 msgid_plural "%<PRIuMAX> days ago"
 msgstr[0] "%<PRIuMAX> ngày trước"
 
-#: date.c:170
+#: date.c:171
 #, c-format
 msgid "%<PRIuMAX> week ago"
 msgid_plural "%<PRIuMAX> weeks ago"
 msgstr[0] "%<PRIuMAX> tuần trước"
 
-#: date.c:177
+#: date.c:178
 #, c-format
 msgid "%<PRIuMAX> month ago"
 msgid_plural "%<PRIuMAX> months ago"
 msgstr[0] "%<PRIuMAX> tháng trước"
 
-#: date.c:188
+#: date.c:189
 #, c-format
 msgid "%<PRIuMAX> year"
 msgid_plural "%<PRIuMAX> years"
 msgstr[0] "%<PRIuMAX> năm"
 
 #. TRANSLATORS: "%s" is "<n> years"
-#: date.c:191
+#: date.c:192
 #, c-format
 msgid "%s, %<PRIuMAX> month ago"
 msgid_plural "%s, %<PRIuMAX> months ago"
 msgstr[0] "%s, %<PRIuMAX> tháng trước"
 
-#: date.c:196 date.c:201
+#: date.c:197 date.c:202
 #, c-format
 msgid "%<PRIuMAX> year ago"
 msgid_plural "%<PRIuMAX> years ago"
@@ -2384,7 +2394,7 @@
 msgid "failed to read orderfile '%s'"
 msgstr "gặp lỗi khi đọc tập-tin-thứ-tự “%s”"
 
-#: diffcore-rename.c:544
+#: diffcore-rename.c:543
 msgid "Performing inexact rename detection"
 msgstr "Đang thực hiện dò tìm đổi tên không chính xác"
 
@@ -2450,35 +2460,35 @@
 "Tìm thấy các lỗi trong biến cấu hình “diff.dirstat”:\n"
 "%s"
 
-#: diff.c:4215
+#: diff.c:4218
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "phần mềm diff ở bên ngoài đã chết, dừng tại %s"
 
-#: diff.c:4560
+#: diff.c:4563
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr "--name-only, --name-status, --check và -s loại từ lẫn nhau"
 
-#: diff.c:4563
+#: diff.c:4566
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "Các tùy chọn -G, -S, và --find-object loại từ lẫn nhau"
 
-#: diff.c:4641
+#: diff.c:4644
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow cần chính xác một đặc tả đường dẫn"
 
-#: diff.c:4689
+#: diff.c:4692
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "giá trị --stat không hợp lệ: “%s”"
 
-#: diff.c:4694 diff.c:4699 diff.c:4704 diff.c:4709 diff.c:5222
+#: diff.c:4697 diff.c:4702 diff.c:4707 diff.c:4712 diff.c:5225
 #: parse-options.c:199 parse-options.c:203
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "tùy chọn “%s” cần một giá trị bằng số"
 
-#: diff.c:4726
+#: diff.c:4729
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -2487,42 +2497,42 @@
 "Gặp lỗi khi phân tích đối số tùy chọn --dirstat/-X:\n"
 "%s"
 
-#: diff.c:4811
+#: diff.c:4814
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "không hiểu lớp thay đổi “%c” trong --diff-filter=%s"
 
-#: diff.c:4835
+#: diff.c:4838
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "không hiểu giá trị sau ws-error-highlight=%.*s"
 
-#: diff.c:4849
+#: diff.c:4852
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "không thể phân giải “%s”"
 
-#: diff.c:4899 diff.c:4905
+#: diff.c:4902 diff.c:4908
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s cần dạng <n>/<m>"
 
-#: diff.c:4917
+#: diff.c:4920
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s cần một ký tự, nhưng lại nhận được “%s”"
 
-#: diff.c:4938
+#: diff.c:4941
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "đối số --color-moved sai: %s"
 
-#: diff.c:4957
+#: diff.c:4960
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "chế độ “%s” không hợp lệ trong --color-moved-ws"
 
-#: diff.c:4997
+#: diff.c:5000
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
@@ -2530,150 +2540,150 @@
 "tùy chọn  diff-algorithm chấp nhận \"myers\", \"minimal\", \"patience\" và "
 "\"histogram\""
 
-#: diff.c:5033 diff.c:5053
+#: diff.c:5036 diff.c:5056
 #, c-format
 msgid "invalid argument to %s"
 msgstr "tham số cho %s không hợp lệ"
 
-#: diff.c:5191
+#: diff.c:5194
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "gặp lỗi khi phân tích đối số tùy chọn --submodule: “%s”"
 
-#: diff.c:5247
+#: diff.c:5250
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "đối số --word-diff sai: %s"
 
-#: diff.c:5270
+#: diff.c:5273
 msgid "Diff output format options"
 msgstr "Các tùy chọn định dạng khi xuất các khác biệt"
 
-#: diff.c:5272 diff.c:5278
+#: diff.c:5275 diff.c:5281
 msgid "generate patch"
 msgstr "tạo miếng vá"
 
-#: diff.c:5275 builtin/log.c:172
+#: diff.c:5278 builtin/log.c:172
 msgid "suppress diff output"
 msgstr "chặn mọi kết xuất từ diff"
 
-#: diff.c:5280 diff.c:5394 diff.c:5401
+#: diff.c:5283 diff.c:5397 diff.c:5404
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5281 diff.c:5284
+#: diff.c:5284 diff.c:5287
 msgid "generate diffs with <n> lines context"
 msgstr "tạo khác biệt với <n> dòng ngữ cảnh"
 
-#: diff.c:5286
+#: diff.c:5289
 msgid "generate the diff in raw format"
 msgstr "tạo khác biệt ở định dạng thô"
 
-#: diff.c:5289
+#: diff.c:5292
 msgid "synonym for '-p --raw'"
 msgstr "đồng nghĩa với “-p --raw”"
 
-#: diff.c:5293
+#: diff.c:5296
 msgid "synonym for '-p --stat'"
 msgstr "đồng nghĩa với “-p --stat”"
 
-#: diff.c:5297
+#: diff.c:5300
 msgid "machine friendly --stat"
 msgstr "--stat thuận tiện cho máy đọc"
 
-#: diff.c:5300
+#: diff.c:5303
 msgid "output only the last line of --stat"
 msgstr "chỉ xuất những dòng cuối của --stat"
 
-#: diff.c:5302 diff.c:5310
+#: diff.c:5305 diff.c:5313
 msgid "<param1,param2>..."
 msgstr "<tham_số_1,tham_số_2>…"
 
-#: diff.c:5303
+#: diff.c:5306
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr "đầu ra phân phối của số lượng thay đổi tương đối cho mỗi thư mục con"
 
-#: diff.c:5307
+#: diff.c:5310
 msgid "synonym for --dirstat=cumulative"
 msgstr "đồng nghĩa với --dirstat=cumulative"
 
-#: diff.c:5311
+#: diff.c:5314
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "đồng nghĩa với --dirstat=files,param1,param2…"
 
-#: diff.c:5315
+#: diff.c:5318
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 "cảnh báo nếu các thay đổi đưa ra các bộ tạo xung đột hay lỗi khoảng trắng"
 
-#: diff.c:5318
+#: diff.c:5321
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr "tổng hợp dạng xúc tích như là tạo, đổi tên và các thay đổi chế độ"
 
-#: diff.c:5321
+#: diff.c:5324
 msgid "show only names of changed files"
 msgstr "chỉ hiển thị tên của các tập tin đổi"
 
-#: diff.c:5324
+#: diff.c:5327
 msgid "show only names and status of changed files"
 msgstr "chỉ hiển thị tên tập tin và tình trạng của các tập tin bị thay đổi"
 
-#: diff.c:5326
+#: diff.c:5329
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<rộng>[,<name-width>[,<số-lượng>]]"
 
-#: diff.c:5327
+#: diff.c:5330
 msgid "generate diffstat"
 msgstr "tạo diffstat"
 
-#: diff.c:5329 diff.c:5332 diff.c:5335
+#: diff.c:5332 diff.c:5335 diff.c:5338
 msgid "<width>"
 msgstr "<rộng>"
 
-#: diff.c:5330
+#: diff.c:5333
 msgid "generate diffstat with a given width"
 msgstr "tạo diffstat với độ rộng đã cho"
 
-#: diff.c:5333
+#: diff.c:5336
 msgid "generate diffstat with a given name width"
 msgstr "tạo diffstat với tên độ rộng đã cho"
 
-#: diff.c:5336
+#: diff.c:5339
 msgid "generate diffstat with a given graph width"
 msgstr "tạo diffstat với độ rộng đồ thị đã cho"
 
-#: diff.c:5338
+#: diff.c:5341
 msgid "<count>"
 msgstr "<số_lượng>"
 
-#: diff.c:5339
+#: diff.c:5342
 msgid "generate diffstat with limited lines"
 msgstr "tạo diffstat với các dòng bị giới hạn"
 
-#: diff.c:5342
+#: diff.c:5345
 msgid "generate compact summary in diffstat"
 msgstr "tạo tổng hợp xúc tích trong diffstat"
 
-#: diff.c:5345
+#: diff.c:5348
 msgid "output a binary diff that can be applied"
 msgstr "xuất ra một khác biệt dạng nhị phân cái mà có thể được áp dụng"
 
-#: diff.c:5348
+#: diff.c:5351
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr ""
 "hiển thị đầy đủ các tên đối tượng pre- và post-image trên các dòng \"mục lục"
 "\""
 
-#: diff.c:5350
+#: diff.c:5353
 msgid "show colored diff"
 msgstr "hiển thị thay đổi được tô màu"
 
-#: diff.c:5351
+#: diff.c:5354
 msgid "<kind>"
 msgstr "<kiểu>"
 
-#: diff.c:5352
+#: diff.c:5355
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
@@ -2681,7 +2691,7 @@
 "tô sang các lỗi về khoảng trắng trong các dòng “context”, “old” và “new” "
 "trong khác biệt"
 
-#: diff.c:5355
+#: diff.c:5358
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -2689,89 +2699,89 @@
 "không munge tên đường dẫn và sử dụng NUL làm bộ phân tách trường đầu ra "
 "trong --raw hay --numstat"
 
-#: diff.c:5358 diff.c:5361 diff.c:5364 diff.c:5470
+#: diff.c:5361 diff.c:5364 diff.c:5367 diff.c:5473
 msgid "<prefix>"
 msgstr "<tiền_tố>"
 
-#: diff.c:5359
+#: diff.c:5362
 msgid "show the given source prefix instead of \"a/\""
 msgstr "hiển thị tiền tố nguồn đã cho thay cho \"a/\""
 
-#: diff.c:5362
+#: diff.c:5365
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "hiển thị tiền tố đích đã cho thay cho \"b/\""
 
-#: diff.c:5365
+#: diff.c:5368
 msgid "prepend an additional prefix to every line of output"
 msgstr "treo vào trước một tiền tố bổ sung cho mỗi dòng kết xuất"
 
-#: diff.c:5368
+#: diff.c:5371
 msgid "do not show any source or destination prefix"
 msgstr "đừng hiển thị bất kỳ tiền tố nguồn hay đích"
 
-#: diff.c:5371
+#: diff.c:5374
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr ""
 "hiển thị ngữ cảnh giữa các khúc khác biệt khi đạt đến số lượng dòng đã chỉ "
 "định"
 
-#: diff.c:5375 diff.c:5380 diff.c:5385
+#: diff.c:5378 diff.c:5383 diff.c:5388
 msgid "<char>"
 msgstr "<ký_tự>"
 
-#: diff.c:5376
+#: diff.c:5379
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "chỉ định một ký tự để biểu thị một dòng được thêm mới thay cho “+”"
 
-#: diff.c:5381
+#: diff.c:5384
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "chỉ định một ký tự để biểu thị một dòng đã cũ thay cho “-”"
 
-#: diff.c:5386
+#: diff.c:5389
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "chỉ định một ký tự để biểu thị một ngữ cảnh thay cho “”"
 
-#: diff.c:5389
+#: diff.c:5392
 msgid "Diff rename options"
 msgstr "Tùy chọn khác biệt đổi tên"
 
-#: diff.c:5390
+#: diff.c:5393
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5391
+#: diff.c:5394
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr "ngắt các thay đổi ghi lại hoàn thiện thành cặp của xóa và tạo"
 
-#: diff.c:5395
+#: diff.c:5398
 msgid "detect renames"
 msgstr "dò tìm các tên thay đổi"
 
-#: diff.c:5399
+#: diff.c:5402
 msgid "omit the preimage for deletes"
 msgstr "bỏ qua preimage (tiền ảnh??) cho các việc xóa"
 
-#: diff.c:5402
+#: diff.c:5405
 msgid "detect copies"
 msgstr "dò bản sao"
 
-#: diff.c:5406
+#: diff.c:5409
 msgid "use unmodified files as source to find copies"
 msgstr "dùng các tập tin không bị chỉnh sửa như là nguồn để tìm các bản sao"
 
-#: diff.c:5408
+#: diff.c:5411
 msgid "disable rename detection"
 msgstr "tắt dò tìm đổi tên"
 
-#: diff.c:5411
+#: diff.c:5414
 msgid "use empty blobs as rename source"
 msgstr "dung các blob trống rống như là nguồn đổi tên"
 
-#: diff.c:5413
+#: diff.c:5416
 msgid "continue listing the history of a file beyond renames"
 msgstr "tiếp tục liệt kê lịch sử của một tập tin ngoài đổi tên"
 
-#: diff.c:5416
+#: diff.c:5419
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
@@ -2779,156 +2789,156 @@
 "ngăn cản dò tìm đổi tên/bản sao nếu số lượng của đích đổi tên/bản sao vượt "
 "quá giới hạn đưa ra"
 
-#: diff.c:5418
+#: diff.c:5421
 msgid "Diff algorithm options"
 msgstr "Tùy chọn thuật toán khác biệt"
 
-#: diff.c:5420
+#: diff.c:5423
 msgid "produce the smallest possible diff"
 msgstr "sản sinh khác biệt ít nhất có thể"
 
-#: diff.c:5423
+#: diff.c:5426
 msgid "ignore whitespace when comparing lines"
 msgstr "lờ đi sự thay đổi do khoảng trắng gây ra khi so sánh các dòng"
 
-#: diff.c:5426
+#: diff.c:5429
 msgid "ignore changes in amount of whitespace"
 msgstr "lờ đi sự thay đổi do số lượng khoảng trắng gây ra"
 
-#: diff.c:5429
+#: diff.c:5432
 msgid "ignore changes in whitespace at EOL"
 msgstr "lờ đi sự thay đổi do khoảng trắng gây ra khi ở cuối dòng EOL"
 
-#: diff.c:5432
+#: diff.c:5435
 msgid "ignore carrier-return at the end of line"
 msgstr "bỏ qua ký tự về đầu dòng tại cuối dòng"
 
-#: diff.c:5435
+#: diff.c:5438
 msgid "ignore changes whose lines are all blank"
 msgstr "bỏ qua các thay đổi cho toàn bộ các dòng là trống"
 
-#: diff.c:5438
+#: diff.c:5441
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr "heuristic để dịch hạn biên của khối khác biệt cho dễ đọc"
 
-#: diff.c:5441
+#: diff.c:5444
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "tạo khác biệt sử dung thuật toán \"patience diff\""
 
-#: diff.c:5445
+#: diff.c:5448
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "tạo khác biệt sử dung thuật toán \"histogram diff\""
 
-#: diff.c:5447
+#: diff.c:5450
 msgid "<algorithm>"
 msgstr "<thuật toán>"
 
-#: diff.c:5448
+#: diff.c:5451
 msgid "choose a diff algorithm"
 msgstr "chọn một thuật toán khác biệt"
 
-#: diff.c:5450
+#: diff.c:5453
 msgid "<text>"
 msgstr "<văn bản>"
 
-#: diff.c:5451
+#: diff.c:5454
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "tạo khác biệt sử dung thuật toán \"anchored diff\""
 
-#: diff.c:5453 diff.c:5462 diff.c:5465
+#: diff.c:5456 diff.c:5465 diff.c:5468
 msgid "<mode>"
 msgstr "<chế độ>"
 
-#: diff.c:5454
+#: diff.c:5457
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr ""
 "hiển thị khác biệt từ, sử dung <chế độ> để bỏ giới hạn các từ bị thay đổi"
 
-#: diff.c:5456 diff.c:5459 diff.c:5504
+#: diff.c:5459 diff.c:5462 diff.c:5507
 msgid "<regex>"
 msgstr "<regex>"
 
-#: diff.c:5457
+#: diff.c:5460
 msgid "use <regex> to decide what a word is"
 msgstr "dùng <regex> để quyết định từ là cái gì"
 
-#: diff.c:5460
+#: diff.c:5463
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "tương đương với --word-diff=color --word-diff-regex=<regex>"
 
-#: diff.c:5463
+#: diff.c:5466
 msgid "moved lines of code are colored differently"
 msgstr "các dòng di chuyển của mã mà được tô màu khác nhau"
 
-#: diff.c:5466
+#: diff.c:5469
 msgid "how white spaces are ignored in --color-moved"
 msgstr "bỏ qua khoảng trắng như thế nào trong --color-moved"
 
-#: diff.c:5469
+#: diff.c:5472
 msgid "Other diff options"
 msgstr "Các tùy chọn khác biệt khác"
 
-#: diff.c:5471
+#: diff.c:5474
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 "khi chạy từ thư mục con, thự thi các thay đổi bên ngoài và hiển thị các "
 "đường dẫn liên quan"
 
-#: diff.c:5475
+#: diff.c:5478
 msgid "treat all files as text"
 msgstr "coi mọi tập tin là dạng văn bản thường"
 
-#: diff.c:5477
+#: diff.c:5480
 msgid "swap two inputs, reverse the diff"
 msgstr "tráo đổi hai đầu vào, đảo ngược khác biệt"
 
-#: diff.c:5479
+#: diff.c:5482
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "thoát với mã 1 nếu không có khác biệt gì, 0 nếu ngược lại"
 
-#: diff.c:5481
+#: diff.c:5484
 msgid "disable all output of the program"
 msgstr "tắt mọi kết xuất của chương trình"
 
-#: diff.c:5483
+#: diff.c:5486
 msgid "allow an external diff helper to be executed"
 msgstr "cho phép mộ bộ hỗ trợ xuất khác biệt ở bên ngoài được phép thực thi"
 
-#: diff.c:5485
+#: diff.c:5488
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 "chạy các bộ lọc văn bản thông thường bên ngoài khi so sánh các tập tin nhị "
 "phân"
 
-#: diff.c:5487
+#: diff.c:5490
 msgid "<when>"
 msgstr "<khi>"
 
-#: diff.c:5488
+#: diff.c:5491
 msgid "ignore changes to submodules in the diff generation"
 msgstr "bỏ qua các thay đổi trong mô-đun-con trong khi tạo khác biệt"
 
-#: diff.c:5491
+#: diff.c:5494
 msgid "<format>"
 msgstr "<định dạng>"
 
-#: diff.c:5492
+#: diff.c:5495
 msgid "specify how differences in submodules are shown"
 msgstr "chi định khác biệt bao nhiêu trong các mô đun con được hiển thị"
 
-#: diff.c:5496
+#: diff.c:5499
 msgid "hide 'git add -N' entries from the index"
 msgstr "ẩn các mục “git add -N” từ bảng mục lục"
 
-#: diff.c:5499
+#: diff.c:5502
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "coi các mục “git add -N” như là có thật trong bảng mục lục"
 
-#: diff.c:5501
+#: diff.c:5504
 msgid "<string>"
 msgstr "<chuỗi>"
 
-#: diff.c:5502
+#: diff.c:5505
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
@@ -2936,7 +2946,7 @@
 "tìm các khác biệt cái mà thay đổi số lượng xảy ra của các phát sinh của "
 "chuỗi được chỉ ra"
 
-#: diff.c:5505
+#: diff.c:5508
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
@@ -2944,23 +2954,23 @@
 "tìm các khác biệt cái mà thay đổi số lượng xảy ra của các phát sinh của biểu "
 "thức chính quy được chỉ ra"
 
-#: diff.c:5508
+#: diff.c:5511
 msgid "show all changes in the changeset with -S or -G"
 msgstr "hiển thị tất cả các thay đổi trong một bộ các thay đổi với -S hay -G"
 
-#: diff.c:5511
+#: diff.c:5514
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "coi <chuỗi> trong -S như là biểu thức chính qui POSIX có mở rộng"
 
-#: diff.c:5514
+#: diff.c:5517
 msgid "control the order in which files appear in the output"
 msgstr "điều khiển thứ tự xuát hiện các tập tin trong kết xuất"
 
-#: diff.c:5515
+#: diff.c:5518
 msgid "<object-id>"
 msgstr "<mã-số-đối-tượng>"
 
-#: diff.c:5516
+#: diff.c:5519
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
@@ -2968,33 +2978,33 @@
 "tìm các khác biệt cái mà thay đổi số lượng xảy ra của các phát sinh của đối "
 "tượng được chỉ ra"
 
-#: diff.c:5518
+#: diff.c:5521
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)…[*]]"
 
-#: diff.c:5519
+#: diff.c:5522
 msgid "select files by diff type"
 msgstr "chọn các tập tin theo kiểu khác biệt"
 
-#: diff.c:5521
+#: diff.c:5524
 msgid "<file>"
 msgstr "<tập_tin>"
 
-#: diff.c:5522
+#: diff.c:5525
 msgid "Output to a specific file"
 msgstr "Xuất ra một tập tin cụ thể"
 
-#: diff.c:6177
+#: diff.c:6180
 msgid "inexact rename detection was skipped due to too many files."
 msgstr ""
 "nhận thấy đổi tên không chính xác đã bị bỏ qua bởi có quá nhiều tập tin."
 
-#: diff.c:6180
+#: diff.c:6183
 msgid "only found copies from modified paths due to too many files."
 msgstr ""
 "chỉ tìm thấy các bản sao từ đường dẫn đã sửa đổi bởi vì có quá nhiều tập tin."
 
-#: diff.c:6183
+#: diff.c:6186
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -3002,40 +3012,40 @@
 "bạn có lẽ muốn đặt biến %s của bạn thành ít nhất là %d và thử lại lệnh lần "
 "nữa."
 
-#: dir.c:537
+#: dir.c:549
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
 msgstr "đặc tả đường dẫn “%s” không khớp với bất kỳ tập tin nào mà git biết"
 
-#: dir.c:926
+#: dir.c:938
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr "không thể dùng %s như là một tập tin loại trừ"
 
-#: dir.c:1843
+#: dir.c:1877
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "không thể mở thư mục “%s”"
 
-#: dir.c:2085
+#: dir.c:2128
 msgid "failed to get kernel name and information"
 msgstr "gặp lỗi khi lấy tên và thông tin của nhân"
 
-#: dir.c:2209
+#: dir.c:2252
 msgid "untracked cache is disabled on this system or location"
 msgstr "bộ nhớ tạm không theo vết bị tắt trên hệ thống hay vị trí này"
 
-#: dir.c:3013
+#: dir.c:3056
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "tập tin ghi bảng mục lục bị hỏng trong kho %s"
 
-#: dir.c:3058 dir.c:3063
+#: dir.c:3101 dir.c:3106
 #, c-format
 msgid "could not create directories for %s"
 msgstr "không thể tạo thư mục cho %s"
 
-#: dir.c:3092
+#: dir.c:3135
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "không thể di cư thư mục git từ “%s” sang “%s”"
@@ -3054,12 +3064,12 @@
 msgid "could not stat file '%s'"
 msgstr "không thể lấy thống kê tập tin “%s”"
 
-#: environment.c:150
+#: environment.c:148
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "đường dẫn không gian tên git \"%s\" sai"
 
-#: environment.c:332
+#: environment.c:330
 #, c-format
 msgid "could not set GIT_DIR to '%s'"
 msgstr "không thể đặt GIT_DIR thành “%s”"
@@ -3069,158 +3079,154 @@
 msgid "too many args to run %s"
 msgstr "quá nhiều tham số để chạy %s"
 
-#: fetch-object.c:17
-msgid "Remote with no URL"
-msgstr "Máy chủ không có địa chỉ URL"
-
-#: fetch-pack.c:151
+#: fetch-pack.c:150
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack: cần danh sách shallow"
 
-#: fetch-pack.c:154
+#: fetch-pack.c:153
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr "git fetch-pack: cần một gói đẩy sau danh sách shallow"
 
-#: fetch-pack.c:165
+#: fetch-pack.c:164
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr "git fetch-pack: cần ACK/NAK, nhưng lại nhận được một gói flush"
 
-#: fetch-pack.c:185
+#: fetch-pack.c:184
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr "git fetch-pack: cần ACK/NAK, nhưng lại nhận được “%s”"
 
-#: fetch-pack.c:196
+#: fetch-pack.c:195
 msgid "unable to write to remote"
 msgstr "không thể ghi lên máy phục vụ"
 
-#: fetch-pack.c:258
+#: fetch-pack.c:257
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "--stateless-rpc cần multi_ack_detailed"
 
-#: fetch-pack.c:360 fetch-pack.c:1284
+#: fetch-pack.c:356 fetch-pack.c:1280
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "dòng shallow không hợp lệ: %s"
 
-#: fetch-pack.c:366 fetch-pack.c:1290
+#: fetch-pack.c:362 fetch-pack.c:1286
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "dòng unshallow không hợp lệ: %s"
 
-#: fetch-pack.c:368 fetch-pack.c:1292
+#: fetch-pack.c:364 fetch-pack.c:1288
 #, c-format
 msgid "object not found: %s"
 msgstr "không tìm thấy đối tượng: %s"
 
-#: fetch-pack.c:371 fetch-pack.c:1295
+#: fetch-pack.c:367 fetch-pack.c:1291
 #, c-format
 msgid "error in object: %s"
 msgstr "lỗi trong đối tượng: %s"
 
-#: fetch-pack.c:373 fetch-pack.c:1297
+#: fetch-pack.c:369 fetch-pack.c:1293
 #, c-format
 msgid "no shallow found: %s"
 msgstr "không tìm shallow nào: %s"
 
-#: fetch-pack.c:376 fetch-pack.c:1301
+#: fetch-pack.c:372 fetch-pack.c:1297
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "cần shallow/unshallow, nhưng lại nhận được %s"
 
-#: fetch-pack.c:417
+#: fetch-pack.c:414
 #, c-format
 msgid "got %s %d %s"
 msgstr "nhận %s %d - %s"
 
-#: fetch-pack.c:434
+#: fetch-pack.c:431
 #, c-format
 msgid "invalid commit %s"
 msgstr "lần chuyển giao %s không hợp lệ"
 
-#: fetch-pack.c:465
+#: fetch-pack.c:462
 msgid "giving up"
 msgstr "chịu thua"
 
-#: fetch-pack.c:477 progress.c:277
+#: fetch-pack.c:475 progress.c:312
 msgid "done"
 msgstr "xong"
 
-#: fetch-pack.c:489
+#: fetch-pack.c:487
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "nhận %s (%d) %s"
 
-#: fetch-pack.c:535
+#: fetch-pack.c:533
 #, c-format
 msgid "Marking %s as complete"
 msgstr "Đánh dấu %s là đã hoàn thành"
 
-#: fetch-pack.c:744
+#: fetch-pack.c:742
 #, c-format
 msgid "already have %s (%s)"
 msgstr "đã sẵn có %s (%s)"
 
-#: fetch-pack.c:783
+#: fetch-pack.c:781
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack: không thể rẽ nhánh sideband demultiplexer"
 
-#: fetch-pack.c:791
+#: fetch-pack.c:789
 msgid "protocol error: bad pack header"
 msgstr "lỗi giao thức: phần đầu gói bị sai"
 
-#: fetch-pack.c:859
+#: fetch-pack.c:857
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack: không thể rẽ nhánh %s"
 
-#: fetch-pack.c:875
+#: fetch-pack.c:873
 #, c-format
 msgid "%s failed"
 msgstr "%s gặp lỗi"
 
-#: fetch-pack.c:877
+#: fetch-pack.c:875
 msgid "error in sideband demultiplexer"
 msgstr "có lỗi trong sideband demultiplexer"
 
-#: fetch-pack.c:908
+#: fetch-pack.c:907
 #, c-format
 msgid "Server version is %.*s"
 msgstr "Phiên bản máy chủ là %.*s"
 
-#: fetch-pack.c:913 fetch-pack.c:919 fetch-pack.c:922 fetch-pack.c:928
-#: fetch-pack.c:932 fetch-pack.c:936 fetch-pack.c:940 fetch-pack.c:944
-#: fetch-pack.c:948 fetch-pack.c:952 fetch-pack.c:956 fetch-pack.c:960
-#: fetch-pack.c:966 fetch-pack.c:972 fetch-pack.c:977 fetch-pack.c:982
+#: fetch-pack.c:912 fetch-pack.c:918 fetch-pack.c:921 fetch-pack.c:927
+#: fetch-pack.c:931 fetch-pack.c:935 fetch-pack.c:939 fetch-pack.c:943
+#: fetch-pack.c:947 fetch-pack.c:951 fetch-pack.c:955 fetch-pack.c:959
+#: fetch-pack.c:965 fetch-pack.c:971 fetch-pack.c:976 fetch-pack.c:981
 #, c-format
 msgid "Server supports %s"
 msgstr "Máy chủ hỗ trợ %s"
 
-#: fetch-pack.c:915
+#: fetch-pack.c:914
 msgid "Server does not support shallow clients"
 msgstr "Máy chủ không hỗ trợ máy khách shallow"
 
-#: fetch-pack.c:975
+#: fetch-pack.c:974
 msgid "Server does not support --shallow-since"
 msgstr "Máy chủ không hỗ trợ --shallow-since"
 
-#: fetch-pack.c:980
+#: fetch-pack.c:979
 msgid "Server does not support --shallow-exclude"
 msgstr "Máy chủ không hỗ trợ --shallow-exclude"
 
-#: fetch-pack.c:984
+#: fetch-pack.c:983
 msgid "Server does not support --deepen"
 msgstr "Máy chủ không hỗ trợ --deepen"
 
-#: fetch-pack.c:1001
+#: fetch-pack.c:1000
 msgid "no common commits"
 msgstr "không có lần chuyển giao chung nào"
 
-#: fetch-pack.c:1013 fetch-pack.c:1462
+#: fetch-pack.c:1012 fetch-pack.c:1468
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: fetch gặp lỗi."
 
-#: fetch-pack.c:1151
+#: fetch-pack.c:1150
 msgid "Server does not support shallow requests"
 msgstr "Máy chủ không hỗ trợ yêu cầu shallow"
 
@@ -3228,72 +3234,72 @@
 msgid "Server supports filter"
 msgstr "Máy chủ hỗ trợ bộ lọc"
 
-#: fetch-pack.c:1184
+#: fetch-pack.c:1180
 msgid "unable to write request to remote"
 msgstr "không thể ghi các yêu cầu lên máy phục vụ"
 
-#: fetch-pack.c:1202
+#: fetch-pack.c:1198
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "gặp lỗi khi đọc phần đầu của đoạn %s"
 
-#: fetch-pack.c:1208
+#: fetch-pack.c:1204
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "cần “%s”, nhưng lại nhận “%s”"
 
-#: fetch-pack.c:1247
+#: fetch-pack.c:1243
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "gặp dòng không được thừa nhận: “%s”"
 
-#: fetch-pack.c:1252
+#: fetch-pack.c:1248
 #, c-format
 msgid "error processing acks: %d"
 msgstr "gặp lỗi khi xử lý tín hiệu trả lời: %d"
 
-#: fetch-pack.c:1262
+#: fetch-pack.c:1258
 msgid "expected packfile to be sent after 'ready'"
 msgstr "cần tập tin gói để gửi sau “ready”"
 
-#: fetch-pack.c:1264
+#: fetch-pack.c:1260
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr "không cần thêm phần nào để gửi sau “ready”"
 
-#: fetch-pack.c:1306
+#: fetch-pack.c:1302
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "lỗi xử lý thông tin shallow: %d"
 
-#: fetch-pack.c:1353
+#: fetch-pack.c:1349
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "cần wanted-ref, nhưng lại nhận được “%s”"
 
-#: fetch-pack.c:1358
+#: fetch-pack.c:1354
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "không cần wanted-ref: “%s”"
 
-#: fetch-pack.c:1363
+#: fetch-pack.c:1359
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "lỗi khi xử lý wanted refs: %d"
 
-#: fetch-pack.c:1689
+#: fetch-pack.c:1693
 msgid "no matching remote head"
 msgstr "không khớp phần đầu máy chủ"
 
-#: fetch-pack.c:1712 builtin/clone.c:686
+#: fetch-pack.c:1716 builtin/clone.c:685
 msgid "remote did not send all necessary objects"
 msgstr "máy chủ đã không gửi tất cả các đối tượng cần thiết"
 
-#: fetch-pack.c:1739
+#: fetch-pack.c:1743
 #, c-format
 msgid "no such remote ref %s"
 msgstr "không có máy chủ tham chiếu nào như %s"
 
-#: fetch-pack.c:1742
+#: fetch-pack.c:1746
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr ""
@@ -3317,18 +3323,26 @@
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr "bỏ qua màu không hợp lệ “%.*s” trong log.graphColors"
 
-#: grep.c:2117
+#: grep.c:668
+msgid ""
+"given pattern contains NULL byte (via -f <file>). This is only supported "
+"with -P under PCRE v2"
+msgstr ""
+"mẫu đã cho có chứa NULL byte (qua -f <file>). Điều này chỉ được hỗ trợ với -"
+"P dưới PCRE v2"
+
+#: grep.c:2124
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "“%s”: không thể đọc %s"
 
-#: grep.c:2134 setup.c:164 builtin/clone.c:409 builtin/diff.c:82
+#: grep.c:2141 setup.c:165 builtin/clone.c:408 builtin/diff.c:82
 #: builtin/rm.c:135
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "gặp lỗi khi lấy thống kê về “%s”"
 
-#: grep.c:2145
+#: grep.c:2152
 #, c-format
 msgid "'%s': short read"
 msgstr "“%s”: đọc ngắn"
@@ -3467,12 +3481,12 @@
 msgid "git version [<options>]"
 msgstr "git version [<các tùy chọn>]"
 
-#: help.c:782
+#: help.c:783
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s: %s - %s"
 
-#: help.c:786
+#: help.c:787
 msgid ""
 "\n"
 "Did you mean this?"
@@ -3542,41 +3556,56 @@
 msgid "invalid date format: %s"
 msgstr "ngày tháng không hợp lệ: %s"
 
-#: list-objects.c:129
+#: list-objects.c:127
 #, c-format
 msgid "entry '%s' in tree %s has tree mode, but is not a tree"
 msgstr "mục “%s” trong cây %s có nút cây, nhưng không phải là một cây"
 
-#: list-objects.c:142
+#: list-objects.c:140
 #, c-format
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr "mục “%s” trong cây %s có nút blob, nhưng không phải là một blob"
 
-#: list-objects.c:378
+#: list-objects.c:375
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "không thể tải cây gốc cho lần chuyển giao “%s”"
 
-#: list-objects-filter-options.c:36
-msgid "multiple filter-specs cannot be combined"
-msgstr "không thể tổ hợp nhiều đặc tả kiểu lọc"
+#: list-objects-filter.c:492
+#, c-format
+msgid "unable to access sparse blob in '%s'"
+msgstr "không thể truy cập các blob rải rác trong '%s'"
+
+#: list-objects-filter.c:495
+#, c-format
+msgid "unable to parse sparse filter data in %s"
+msgstr "không thể phân tích dữ liệu bộ lọc rải rác trong %s"
 
 #: list-objects-filter-options.c:58
 msgid "expected 'tree:<depth>'"
 msgstr "cần “tree:<depth>”"
 
-#: list-objects-filter-options.c:84
+#: list-objects-filter-options.c:73
 msgid "sparse:path filters support has been dropped"
 msgstr "việc hỗ trợ bộ lọc sparse:đường/dẫn đã bị bỏ"
 
-#: list-objects-filter-options.c:94
+#: list-objects-filter-options.c:86
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "đặc tả bộ lọc không hợp lệ “%s”"
 
-#: list-objects-filter-options.c:158
-msgid "cannot change partial clone promisor remote"
-msgstr "không thể thay đổi nhân bản từng phần máy chủ promisor"
+#: list-objects-filter-options.c:102
+#, c-format
+msgid "must escape char in sub-filter-spec: '%c'"
+msgstr "phải thoát char trong sub-filter-spec: '%c'"
+
+#: list-objects-filter-options.c:144
+msgid "expected something after combine:"
+msgstr "mong đợi một cái gì đó sau khi kết hợp:"
+
+#: list-objects-filter-options.c:226
+msgid "multiple filter-specs cannot be combined"
+msgstr "không thể tổ hợp nhiều đặc tả kiểu lọc"
 
 #: lockfile.c:151
 #, c-format
@@ -3606,120 +3635,116 @@
 msgid "failed to read the cache"
 msgstr "gặp lỗi khi đọc bộ nhớ đệm"
 
-#: merge.c:107 rerere.c:720 builtin/am.c:1885 builtin/am.c:1919
-#: builtin/checkout.c:536 builtin/checkout.c:796 builtin/clone.c:786
+#: merge.c:107 rerere.c:720 builtin/am.c:1874 builtin/am.c:1908
+#: builtin/checkout.c:537 builtin/checkout.c:796 builtin/clone.c:785
 #: builtin/stash.c:264
 msgid "unable to write new index file"
 msgstr "không thể ghi tập tin lưu bảng mục lục mới"
 
-#: merge-recursive.c:322
+#: merge-recursive.c:367
 msgid "(bad commit)\n"
 msgstr "(commit sai)\n"
 
-#: merge-recursive.c:345
+#: merge-recursive.c:390
 #, c-format
 msgid "add_cacheinfo failed for path '%s'; merge aborting."
 msgstr "addinfo_cache gặp lỗi đối với đường dẫn “%s”; việc hòa trộn bị bãi bỏ."
 
-#: merge-recursive.c:354
+#: merge-recursive.c:399
 #, c-format
 msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
 msgstr ""
 "addinfo_cache gặp lỗi khi làm mới đối với đường dẫn “%s”; việc hòa trộn bị "
 "bãi bỏ."
 
-#: merge-recursive.c:437
-msgid "error building trees"
-msgstr "gặp lỗi khi xây dựng cây"
-
-#: merge-recursive.c:863
+#: merge-recursive.c:885
 #, c-format
 msgid "failed to create path '%s'%s"
 msgstr "gặp lỗi khi tạo đường dẫn “%s”%s"
 
-#: merge-recursive.c:874
+#: merge-recursive.c:896
 #, c-format
 msgid "Removing %s to make room for subdirectory\n"
 msgstr "Gỡ bỏ %s để tạo chỗ (room) cho thư mục con\n"
 
-#: merge-recursive.c:888 merge-recursive.c:907
+#: merge-recursive.c:910 merge-recursive.c:929
 msgid ": perhaps a D/F conflict?"
 msgstr ": có lẽ là một xung đột D/F?"
 
-#: merge-recursive.c:897
+#: merge-recursive.c:919
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
 msgstr "từ chối đóng tập tin không được theo dõi tại “%s”"
 
-#: merge-recursive.c:938 builtin/cat-file.c:40
+#: merge-recursive.c:960 builtin/cat-file.c:41
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "không thể đọc đối tượng %s “%s”"
 
-#: merge-recursive.c:941
+#: merge-recursive.c:965
 #, c-format
 msgid "blob expected for %s '%s'"
 msgstr "mong đợi đối tượng blob cho %s “%s”"
 
-#: merge-recursive.c:965
+#: merge-recursive.c:990
 #, c-format
 msgid "failed to open '%s': %s"
 msgstr "gặp lỗi khi mở “%s”: %s"
 
-#: merge-recursive.c:976
+#: merge-recursive.c:1001
 #, c-format
 msgid "failed to symlink '%s': %s"
 msgstr "gặp lỗi khi tạo liên kết mềm (symlink) “%s”: %s"
 
-#: merge-recursive.c:981
+#: merge-recursive.c:1006
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "không hiểu phải làm gì với %06o %s “%s”"
 
-#: merge-recursive.c:1177
+#: merge-recursive.c:1199
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "Gặp lỗi khi hòa trộn mô-đun-con “%s” (không lấy ra được)"
 
-#: merge-recursive.c:1184
+#: merge-recursive.c:1206
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr "Gặp lỗi khi hòa trộn mô-đun-con “%s” (lần chuyển giao không hiện diện)"
 
-#: merge-recursive.c:1191
+#: merge-recursive.c:1213
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr ""
 "Gặp lỗi khi hòa trộn mô-đun-con “%s” (lần chuyển giao không theo sau nền-hòa-"
 "trộn)"
 
-#: merge-recursive.c:1199 merge-recursive.c:1211
+#: merge-recursive.c:1221 merge-recursive.c:1233
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "Chuyển-tiếp-nhanh mô-đun-con “%s” đến lần chuyển giao sau đây:"
 
-#: merge-recursive.c:1202 merge-recursive.c:1214
+#: merge-recursive.c:1224 merge-recursive.c:1236
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "Chuyển-tiếp-nhanh mô-đun-con “%s”"
 
-#: merge-recursive.c:1237
+#: merge-recursive.c:1259
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 "Gặp lỗi khi hòa trộn mô-đun-con “%s” (không tìm thấy các lần chuyển giao "
 "theo sau hòa trộn)"
 
-#: merge-recursive.c:1241
+#: merge-recursive.c:1263
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "Gặp lỗi khi hòa trộn mô-đun-con “%s” (không chuyển tiếp nhanh được)"
 
-#: merge-recursive.c:1242
+#: merge-recursive.c:1264
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr "Tìm thấy một giải pháp hòa trộn có thể cho mô-đun-con:\n"
 
-#: merge-recursive.c:1245
+#: merge-recursive.c:1267
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -3736,33 +3761,33 @@
 "\n"
 "cái mà sẽ chấp nhận gợi ý này.\n"
 
-#: merge-recursive.c:1254
+#: merge-recursive.c:1276
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr "Gặp lỗi khi hòa trộn mô-đun-con “%s” (thấy nhiều hòa trộn đa trùng)"
 
-#: merge-recursive.c:1327
+#: merge-recursive.c:1349
 msgid "Failed to execute internal merge"
 msgstr "Gặp lỗi khi thực hiện trộn nội bộ"
 
-#: merge-recursive.c:1332
+#: merge-recursive.c:1354
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "Không thể thêm %s vào cơ sở dữ liệu"
 
-#: merge-recursive.c:1364
+#: merge-recursive.c:1386
 #, c-format
 msgid "Auto-merging %s"
 msgstr "Tự-động-hòa-trộn %s"
 
-#: merge-recursive.c:1387
+#: merge-recursive.c:1410
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr ""
 "Lỗi: từ chối đóng tập tin không được theo dõi tại “%s”; thay vào đó ghi vào "
 "%s."
 
-#: merge-recursive.c:1459
+#: merge-recursive.c:1482
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -3771,7 +3796,7 @@
 "XUNG ĐỘT (%s/xóa): %s bị xóa trong %s và %s trong %s. Phiên bản %s của %s "
 "còn lại trong cây (tree)."
 
-#: merge-recursive.c:1464
+#: merge-recursive.c:1487
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -3780,7 +3805,7 @@
 "XUNG ĐỘT (%s/xóa): %s bị xóa trong %s và %s đến %s trong %s. Phiên bản %s "
 "của %s còn lại trong cây (tree)."
 
-#: merge-recursive.c:1471
+#: merge-recursive.c:1494
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -3789,7 +3814,7 @@
 "XUNG ĐỘT (%s/xóa): %s bị xóa trong %s và %s trong %s. Phiên bản %s của %s "
 "còn lại trong cây (tree) tại %s."
 
-#: merge-recursive.c:1476
+#: merge-recursive.c:1499
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -3798,45 +3823,45 @@
 "XUNG ĐỘT (%s/xóa): %s bị xóa trong %s và %s đến %s trong %s. Phiên bản %s "
 "của %s còn lại trong cây (tree) tại %s."
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1534
 msgid "rename"
 msgstr "đổi tên"
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1534
 msgid "renamed"
 msgstr "đã đổi tên"
 
-#: merge-recursive.c:1591 merge-recursive.c:2450 merge-recursive.c:3094
+#: merge-recursive.c:1614 merge-recursive.c:2472 merge-recursive.c:3117
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "Từ chối đóng tập tin không được theo dõi tại “%s”"
 
-#: merge-recursive.c:1601
+#: merge-recursive.c:1624
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr ""
 "Từ chối đóng tập tin không được theo dõi tại “%s”, ngay cả khi nó ở trên "
 "đường."
 
-#: merge-recursive.c:1659
+#: merge-recursive.c:1682
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 "XUNG ĐỘT (đổi-tên/thêm): Đổi tên %s->%s trong %s. %s được thêm trong %s"
 
-#: merge-recursive.c:1690
+#: merge-recursive.c:1713
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s là một thư mục trong %s thay vào đó thêm vào như là %s"
 
-#: merge-recursive.c:1695
+#: merge-recursive.c:1718
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr ""
 "Từ chối đóng tập tin không được theo dõi tại “%s”; thay vào đó đang thêm "
 "thành %s"
 
-#: merge-recursive.c:1714
+#: merge-recursive.c:1737
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -3845,17 +3870,17 @@
 "XUNG ĐỘT (đổi-tên/đổi-tên): Đổi tên \"%s\"->\"%s\" trong nhánh \"%s\" đổi "
 "tên \"%s\"->\"%s\" trong \"%s\"%s"
 
-#: merge-recursive.c:1719
+#: merge-recursive.c:1742
 msgid " (left unresolved)"
 msgstr " (cần giải quyết)"
 
-#: merge-recursive.c:1828
+#: merge-recursive.c:1851
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "XUNG ĐỘT (đổi-tên/đổi-tên): Đổi tên %s->%s trong %s. Đổi tên %s->%s trong %s"
 
-#: merge-recursive.c:2035
+#: merge-recursive.c:2056
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -3866,7 +3891,7 @@
 "vì thư mục %s đã bị đổi tên thành nhiều thư mục khác, với không đích đến "
 "nhận một phần nhiều của các tập tin."
 
-#: merge-recursive.c:2067
+#: merge-recursive.c:2088
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -3875,7 +3900,7 @@
 "XUNG ĐỘT: (ngầm đổi tên thư mục): Tập tin/thư mục đã sẵn có tại %s theo cách "
 "của các đổi tên thư mục ngầm đặt (các) đường dẫn sau ở đây: %s."
 
-#: merge-recursive.c:2077
+#: merge-recursive.c:2098
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -3884,7 +3909,7 @@
 "XUNG ĐỘT: (ngầm đổi tên thư mục): Không thể ánh xạ một đường dẫn thành %s; "
 "các đổi tên thư mục ngầm cố đặt các đường dẫn ở đây: %s"
 
-#: merge-recursive.c:2169
+#: merge-recursive.c:2190
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -3893,7 +3918,7 @@
 "XUNG ĐỘT (đổi-tên/đổi-tên): Đổi tên thư mục %s->%s trong %s. Đổi tên thư mục "
 "%s->%s trong %s"
 
-#: merge-recursive.c:2413
+#: merge-recursive.c:2435
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
@@ -3902,52 +3927,52 @@
 "CẢNH BÁO: tránh áp dụng %s -> %s đổi thên thành %s, bởi vì bản thân %s cũng "
 "bị đổi tên."
 
-#: merge-recursive.c:2938
+#: merge-recursive.c:2961
 #, c-format
 msgid "cannot read object %s"
 msgstr "không thể đọc đối tượng %s"
 
-#: merge-recursive.c:2941
+#: merge-recursive.c:2964
 #, c-format
 msgid "object %s is not a blob"
 msgstr "đối tượng %s không phải là một blob"
 
-#: merge-recursive.c:3005
+#: merge-recursive.c:3028
 msgid "modify"
 msgstr "sửa đổi"
 
-#: merge-recursive.c:3005
+#: merge-recursive.c:3028
 msgid "modified"
 msgstr "đã sửa"
 
-#: merge-recursive.c:3017
+#: merge-recursive.c:3040
 msgid "content"
 msgstr "nội dung"
 
-#: merge-recursive.c:3021
+#: merge-recursive.c:3044
 msgid "add/add"
 msgstr "thêm/thêm"
 
-#: merge-recursive.c:3044
+#: merge-recursive.c:3067
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "Đã bỏ qua %s (đã có sẵn lần hòa trộn này)"
 
-#: merge-recursive.c:3066 git-submodule.sh:937
+#: merge-recursive.c:3089 git-submodule.sh:937
 msgid "submodule"
 msgstr "mô-đun-con"
 
-#: merge-recursive.c:3067
+#: merge-recursive.c:3090
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "XUNG ĐỘT (%s): Xung đột hòa trộn trong %s"
 
-#: merge-recursive.c:3097
+#: merge-recursive.c:3120
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Thay vào đó thêm vào %s"
 
-#: merge-recursive.c:3179
+#: merge-recursive.c:3203
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
@@ -3956,7 +3981,7 @@
 "Đường dẫn đã được cập nhật: %s được thêm vào trong %s bên trong một thư mục "
 "đã được đổi tên trong %s; di chuyển nó đến %s."
 
-#: merge-recursive.c:3182
+#: merge-recursive.c:3206
 #, c-format
 msgid ""
 "CONFLICT (file location): %s added in %s inside a directory that was renamed "
@@ -3965,7 +3990,7 @@
 "XUNG ĐỘT (vị trí tệp): %s được thêm vào trong %s trong một thư mục đã được "
 "đổi tên thành %s, đoán là nó nên được di chuyển đến %s."
 
-#: merge-recursive.c:3186
+#: merge-recursive.c:3210
 #, c-format
 msgid ""
 "Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
@@ -3974,7 +3999,7 @@
 "Đường dẫn đã được cập nhật: %s được đổi tên thành %s trong %s, bên trong một "
 "thư mục đã được đổi tên trong %s; di chuyển nó đến %s."
 
-#: merge-recursive.c:3189
+#: merge-recursive.c:3213
 #, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
@@ -3983,37 +4008,60 @@
 "XUNG ĐỘT (vị trí tệp): %s được đổi tên thành %s trong %s, bên trong một thư "
 "mục đã được đổi tên thành %s, đoán là nó nên được di chuyển đến %s."
 
-#: merge-recursive.c:3303
+#: merge-recursive.c:3327
 #, c-format
 msgid "Removing %s"
 msgstr "Đang xóa %s"
 
-#: merge-recursive.c:3326
+#: merge-recursive.c:3350
 msgid "file/directory"
 msgstr "tập-tin/thư-mục"
 
-#: merge-recursive.c:3331
+#: merge-recursive.c:3355
 msgid "directory/file"
 msgstr "thư-mục/tập-tin"
 
-#: merge-recursive.c:3338
+#: merge-recursive.c:3362
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
 "XUNG ĐỘT (%s): Ở đây không có thư mục nào có tên %s trong %s. Thêm %s như là "
 "%s"
 
-#: merge-recursive.c:3347
+#: merge-recursive.c:3371
 #, c-format
 msgid "Adding %s"
 msgstr "Thêm \"%s\""
 
-#: merge-recursive.c:3356
+#: merge-recursive.c:3380
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "XUNG ĐỘT (thêm/thêm): Xung đột hòa trộn trong %s"
 
-#: merge-recursive.c:3394
+#: merge-recursive.c:3424
+msgid "Already up to date!"
+msgstr "Đã cập nhật rồi!"
+
+#: merge-recursive.c:3433
+#, c-format
+msgid "merging of trees %s and %s failed"
+msgstr "hòa trộn các cây %s và %s gặp lỗi"
+
+#: merge-recursive.c:3537
+msgid "Merging:"
+msgstr "Đang trộn:"
+
+#: merge-recursive.c:3550
+#, c-format
+msgid "found %u common ancestor:"
+msgid_plural "found %u common ancestors:"
+msgstr[0] "tìm thấy %u tổ tiên chung:"
+
+#: merge-recursive.c:3600
+msgid "merge returned no commit"
+msgstr "hòa trộn không trả về lần chuyển giao nào"
+
+#: merge-recursive.c:3659
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -4023,187 +4071,164 @@
 "hòa trộn:\n"
 "  %s"
 
-#: merge-recursive.c:3405
-msgid "Already up to date!"
-msgstr "Đã cập nhật rồi!"
-
-#: merge-recursive.c:3414
-#, c-format
-msgid "merging of trees %s and %s failed"
-msgstr "hòa trộn các cây %s và %s gặp lỗi"
-
-#: merge-recursive.c:3513
-msgid "Merging:"
-msgstr "Đang trộn:"
-
-#: merge-recursive.c:3526
-#, c-format
-msgid "found %u common ancestor:"
-msgid_plural "found %u common ancestors:"
-msgstr[0] "tìm thấy %u tổ tiên chung:"
-
-#: merge-recursive.c:3565
-msgid "merge returned no commit"
-msgstr "hòa trộn không trả về lần chuyển giao nào"
-
-#: merge-recursive.c:3631
+#: merge-recursive.c:3756
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "Không thể phân tích đối tượng “%s”"
 
-#: merge-recursive.c:3647 builtin/merge.c:698 builtin/merge.c:869
+#: merge-recursive.c:3774 builtin/merge.c:694 builtin/merge.c:874
 msgid "Unable to write index."
 msgstr "Không thể ghi bảng mục lục."
 
-#: midx.c:69
+#: midx.c:68
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "tập tin đồ thị multi-pack-index %s quá nhỏ"
 
-#: midx.c:85
+#: midx.c:84
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr "chữ ký multi-pack-index 0x%08x không khớp chữ ký 0x%08x"
 
-#: midx.c:90
+#: midx.c:89
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "không nhận ra phiên bản %d của multi-pack-index"
 
-#: midx.c:95
+#: midx.c:94
 #, c-format
 msgid "hash version %u does not match"
 msgstr "phiên bản băm “%u” không khớp"
 
-#: midx.c:109
+#: midx.c:108
 msgid "invalid chunk offset (too large)"
 msgstr "khoảng bù đoạn không hợp lệ (quá lớn)"
 
-#: midx.c:133
+#: midx.c:132
 msgid "terminating multi-pack-index chunk id appears earlier than expected"
 msgstr "mã mảnh kết thúc multi-pack-index xuất hiện sớm hơn bình thường"
 
-#: midx.c:146
+#: midx.c:145
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "multi-pack-index thiếu mảnh pack-name cần thiết"
 
-#: midx.c:148
+#: midx.c:147
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "multi-pack-index thiếu mảnh OID fanout cần thiết"
 
-#: midx.c:150
+#: midx.c:149
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "multi-pack-index thiếu mảnh OID lookup cần thiết"
 
-#: midx.c:152
+#: midx.c:151
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "multi-pack-index thiếu mảnh các khoảng bù đối tượng cần thiết"
 
-#: midx.c:166
+#: midx.c:165
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr "các tên gói multi-pack-index không đúng thứ tự: “%s” trước “%s”"
 
-#: midx.c:211
+#: midx.c:210
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "pack-int-id sai: %u (%u các gói tổng)"
 
-#: midx.c:261
+#: midx.c:260
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr "multi-pack-index lưu trữ một khoảng bù 64-bít, nhưng off_t là quá nhỏ"
 
-#: midx.c:289
+#: midx.c:288
 msgid "error preparing packfile from multi-pack-index"
 msgstr "lỗi chuẩn bị tập tin gói từ multi-pack-index"
 
-#: midx.c:470
+#: midx.c:469
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "gặp lỗi khi thêm tập tin gói “%s”"
 
-#: midx.c:476
+#: midx.c:475
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "gặp lỗi khi mở pack-index “%s”"
 
-#: midx.c:536
+#: midx.c:535
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "gặp lỗi khi phân bổ đối tượng “%d” trong tập tin gói"
 
-#: midx.c:865
+#: midx.c:864
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "đã không thấy tập tin gói %s để mà xóa"
 
-#: midx.c:1036
+#: midx.c:1035
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "gặp lỗi khi xóa multi-pack-index tại %s"
 
-#: midx.c:1091
+#: midx.c:1090
 msgid "Looking for referenced packfiles"
 msgstr "Đang khóa cho các gói bị tham chiếu"
 
-#: midx.c:1106
+#: midx.c:1105
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr "fanout cũ sai thứ tự: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 
-#: midx.c:1110
+#: midx.c:1109
 msgid "Verifying OID order in MIDX"
 msgstr "Thẩm tra thứ tự OID trong MIDX"
 
-#: midx.c:1119
+#: midx.c:1118
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "lookup cũ sai thứ tự: oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1138
+#: midx.c:1137
 msgid "Sorting objects by packfile"
 msgstr "Đang sắp xếp các đối tượng theo tập tin gói"
 
-#: midx.c:1144
+#: midx.c:1143
 msgid "Verifying object offsets"
 msgstr "Đang thẩm tra các khoảng bù đối tượng"
 
-#: midx.c:1160
+#: midx.c:1159
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "gặp lỗi khi tải mục gói cho oid[%d] = %s"
 
-#: midx.c:1166
+#: midx.c:1165
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "gặp lỗi khi tải pack-index cho tập tin gói %s"
 
-#: midx.c:1175
+#: midx.c:1174
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr ""
 "khoảng bù đối tượng không đúng cho oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 
-#: midx.c:1350
+#: midx.c:1349
 msgid "could not start pack-objects"
 msgstr "không thể lấy thông tin thống kê về các đối tượng gói"
 
-#: midx.c:1369
+#: midx.c:1368
 msgid "could not finish pack-objects"
 msgstr "không thể hoàn thiện các đối tượng gói"
 
-#: name-hash.c:532
+#: name-hash.c:537
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
 msgstr "không thể tạo tuyến lazy_dir: %s"
 
-#: name-hash.c:554
+#: name-hash.c:559
 #, c-format
 msgid "unable to create lazy_name thread: %s"
 msgstr "không thể tạo tuyến lazy_name: %s"
 
-#: name-hash.c:560
+#: name-hash.c:565
 #, c-format
 msgid "unable to join lazy_name thread: %s"
 msgstr "không thể gia nhập tuyến lazy_name: %s"
@@ -4250,41 +4275,41 @@
 msgid "Bad %s value: '%s'"
 msgstr "Giá trị %s sai: “%s”"
 
-#: object.c:54
+#: object.c:53
 #, c-format
 msgid "invalid object type \"%s\""
 msgstr "kiểu đối tượng \"%s\" không hợp lệ"
 
-#: object.c:174
+#: object.c:173
 #, c-format
 msgid "object %s is a %s, not a %s"
 msgstr "đối tượng %s là một %s, không phải là một %s"
 
-#: object.c:234
+#: object.c:233
 #, c-format
 msgid "object %s has unknown type id %d"
 msgstr "đối tượng %s có mã kiểu %d chưa biết"
 
-#: object.c:247
+#: object.c:246
 #, c-format
 msgid "unable to parse object: %s"
 msgstr "không thể phân tích đối tượng: “%s”"
 
-#: object.c:267 object.c:278
+#: object.c:266 object.c:277
 #, c-format
 msgid "hash mismatch %s"
 msgstr "mã băm không khớp %s"
 
-#: packfile.c:648
+#: packfile.c:641
 msgid "offset before end of packfile (broken .idx?)"
 msgstr "vị trí tương đối trước điểm kết thúc của tập tin gói (.idx hỏng à?)"
 
-#: packfile.c:1899
+#: packfile.c:1887
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr "vị trí tương đối nằm trước chỉ mục gói cho %s (mục lục bị hỏng à?)"
 
-#: packfile.c:1903
+#: packfile.c:1891
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr ""
@@ -4330,26 +4355,26 @@
 msgid "did you mean `--%s` (with two dashes ?)"
 msgstr "có phải ý bạn là “--%s“ (với hai dấu gạch ngang?)"
 
-#: parse-options.c:859
+#: parse-options.c:860
 #, c-format
 msgid "unknown option `%s'"
 msgstr "không hiểu tùy chọn “%s”"
 
-#: parse-options.c:861
+#: parse-options.c:862
 #, c-format
 msgid "unknown switch `%c'"
 msgstr "không hiểu tùy chọn “%c”"
 
-#: parse-options.c:863
+#: parse-options.c:864
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr "không hiểu tùy chọn non-ascii trong chuỗi: “%s”"
 
-#: parse-options.c:887
+#: parse-options.c:888
 msgid "..."
 msgstr "…"
 
-#: parse-options.c:906
+#: parse-options.c:907
 #, c-format
 msgid "usage: %s"
 msgstr "cách dùng: %s"
@@ -4357,21 +4382,21 @@
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
 #.
-#: parse-options.c:912
+#: parse-options.c:913
 #, c-format
 msgid "   or: %s"
 msgstr "     hoặc: %s"
 
-#: parse-options.c:915
+#: parse-options.c:916
 #, c-format
 msgid "    %s"
 msgstr "    %s"
 
-#: parse-options.c:954
+#: parse-options.c:955
 msgid "-NUM"
 msgstr "-SỐ"
 
-#: parse-options.c:968
+#: parse-options.c:969
 #, c-format
 msgid "alias of --%s"
 msgstr "bí danh của --%s"
@@ -4540,29 +4565,38 @@
 msgid "unable to parse --pretty format"
 msgstr "không thể phân tích định dạng --pretty"
 
-#: range-diff.c:70
+#: promisor-remote.c:25
+msgid "Remote with no URL"
+msgstr "Máy chủ không có địa chỉ URL"
+
+#: promisor-remote.c:61
+#, c-format
+msgid "promisor remote name cannot begin with '/': %s"
+msgstr "tên máy chủ hứa hẹn không thể bắt đầu bằng '/': %s"
+
+#: range-diff.c:71
 msgid "could not start `log`"
 msgstr "không thể lấy thông tin thống kê về “log“"
 
-#: range-diff.c:72
+#: range-diff.c:73
 msgid "could not read `log` output"
 msgstr "không thể đọc kết xuất “log”"
 
-#: range-diff.c:91 sequencer.c:5021
+#: range-diff.c:92 sequencer.c:4985
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "không thể phân tích lần chuyển giao “%s”"
 
-#: range-diff.c:117
+#: range-diff.c:118
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "không thể phân tích cú pháp phần đầu git “%.*s”"
 
-#: range-diff.c:274
+#: range-diff.c:275
 msgid "failed to generate diff"
 msgstr "gặp lỗi khi tạo khác biệt"
 
-#: range-diff.c:506 range-diff.c:508
+#: range-diff.c:507 range-diff.c:509
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "không thể phân tích nhật ký cho “%s”"
@@ -4608,11 +4642,11 @@
 msgid "'%s' appears as both a file and as a directory"
 msgstr "%s có vẻ không phải là tập tin và cũng chẳng phải là một thư mục"
 
-#: read-cache.c:1499
+#: read-cache.c:1520
 msgid "Refresh index"
 msgstr "Làm tươi mới bảng mục lục"
 
-#: read-cache.c:1613
+#: read-cache.c:1635
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -4621,7 +4655,7 @@
 "index.version được đặt, nhưng giá trị của nó lại không hợp lệ.\n"
 "Dùng phiên bản %i"
 
-#: read-cache.c:1623
+#: read-cache.c:1645
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -4630,138 +4664,138 @@
 "GIT_INDEX_VERSION được đặt, nhưng giá trị của nó lại không hợp lệ.\n"
 "Dùng phiên bản %i"
 
-#: read-cache.c:1679
+#: read-cache.c:1701
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "chữ ký sai 0x%08x"
 
-#: read-cache.c:1682
+#: read-cache.c:1704
 #, c-format
 msgid "bad index version %d"
 msgstr "phiên bản mục lục sai %d"
 
-#: read-cache.c:1691
+#: read-cache.c:1713
 msgid "bad index file sha1 signature"
 msgstr "chữ ký dạng sha1 cho tập tin mục lục không đúng"
 
-#: read-cache.c:1721
+#: read-cache.c:1743
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "mục lục dùng phần mở rộng %.4s, cái mà chúng tôi không hiểu được"
 
-#: read-cache.c:1723
+#: read-cache.c:1745
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "đang lờ đi phần mở rộng %.4s"
 
-#: read-cache.c:1760
+#: read-cache.c:1782
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "không hiểu định dạng mục lục 0x%08x"
 
-#: read-cache.c:1776
+#: read-cache.c:1798
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "trường tên sai sạng trong mục lục, gần đường dẫn “%s”"
 
-#: read-cache.c:1833
+#: read-cache.c:1855
 msgid "unordered stage entries in index"
 msgstr "các mục tin stage không đúng thứ tự trong mục lục"
 
-#: read-cache.c:1836
+#: read-cache.c:1858
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "nhiều mục stage cho tập tin hòa trộn “%s”"
 
-#: read-cache.c:1839
+#: read-cache.c:1861
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "các mục tin stage không đúng thứ tự cho “%s”"
 
-#: read-cache.c:1946 read-cache.c:2234 rerere.c:565 rerere.c:599 rerere.c:1111
-#: builtin/add.c:460 builtin/check-ignore.c:178 builtin/checkout.c:467
-#: builtin/checkout.c:651 builtin/clean.c:956 builtin/commit.c:347
+#: read-cache.c:1967 read-cache.c:2255 rerere.c:565 rerere.c:599 rerere.c:1111
+#: builtin/add.c:460 builtin/check-ignore.c:178 builtin/checkout.c:468
+#: builtin/checkout.c:652 builtin/clean.c:967 builtin/commit.c:347
 #: builtin/diff-tree.c:120 builtin/grep.c:499 builtin/mv.c:145
 #: builtin/reset.c:245 builtin/rm.c:271 builtin/submodule--helper.c:330
 msgid "index file corrupt"
 msgstr "tập tin ghi bảng mục lục bị hỏng"
 
-#: read-cache.c:2087
+#: read-cache.c:2108
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "không thể tạo tuyến load_cache_entries: %s"
 
-#: read-cache.c:2100
+#: read-cache.c:2121
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "không thể gia nhập tuyến load_cache_entries: %s"
 
-#: read-cache.c:2133
+#: read-cache.c:2154
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s: mở tập tin mục lục gặp lỗi"
 
-#: read-cache.c:2137
+#: read-cache.c:2158
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s: không thể lấy thống kê bảng mục lục đã mở"
 
-#: read-cache.c:2141
+#: read-cache.c:2162
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s: tập tin mục lục nhỏ hơn mong đợi"
 
-#: read-cache.c:2145
+#: read-cache.c:2166
 #, c-format
 msgid "%s: unable to map index file"
 msgstr "%s: không thể ánh xạ tập tin mục lục"
 
-#: read-cache.c:2187
+#: read-cache.c:2208
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "không thể tạo tuyến load_index_extensions: %s"
 
-#: read-cache.c:2214
+#: read-cache.c:2235
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "không thể gia nhập tuyến load_index_extensions: %s"
 
-#: read-cache.c:2246
+#: read-cache.c:2267
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "không thể làm tươi mới mục lục đã chia sẻ “%s”"
 
-#: read-cache.c:2293
+#: read-cache.c:2314
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "mục lục bị hỏng, cần %s trong %s, nhưng lại nhận được %s"
 
-#: read-cache.c:2989 wrapper.c:658 builtin/merge.c:1114
+#: read-cache.c:3010 wrapper.c:622 builtin/merge.c:1119
 #, c-format
 msgid "could not close '%s'"
 msgstr "không thể đóng “%s”"
 
-#: read-cache.c:3092 sequencer.c:2358 sequencer.c:3928
+#: read-cache.c:3113 sequencer.c:2296 sequencer.c:3917
 #, c-format
 msgid "could not stat '%s'"
 msgstr "không thể lấy thông tin thống kê về “%s”"
 
-#: read-cache.c:3105
+#: read-cache.c:3126
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "không thể mở thư mục git: %s"
 
-#: read-cache.c:3117
+#: read-cache.c:3138
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "không thể bỏ liên kết (unlink): “%s”"
 
-#: read-cache.c:3142
+#: read-cache.c:3163
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "không thể sửa các bít phân quyền trên “%s”"
 
-#: read-cache.c:3291
+#: read-cache.c:3312
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s: không thể xóa bỏ stage #0"
@@ -4870,8 +4904,8 @@
 msgid "Note that empty commits are commented out"
 msgstr "Chú ý rằng lần chuyển giao trống rỗng là ghi chú"
 
-#: rebase-interactive.c:105 rerere.c:485 rerere.c:692 sequencer.c:3447
-#: sequencer.c:3473 sequencer.c:5120 builtin/fsck.c:356 builtin/rebase.c:235
+#: rebase-interactive.c:105 rerere.c:485 rerere.c:692 sequencer.c:3388
+#: sequencer.c:3414 sequencer.c:5084 builtin/fsck.c:356 builtin/rebase.c:235
 #, c-format
 msgid "could not write '%s'"
 msgstr "không thể ghi “%s”"
@@ -4918,7 +4952,7 @@
 msgid "ignoring dangling symref %s"
 msgstr "đang lờ đi tham chiếu mềm thừa %s"
 
-#: refs.c:669 ref-filter.c:2092
+#: refs.c:669 ref-filter.c:2098
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "đang lờ đi tham chiếu hỏng %s"
@@ -4943,14 +4977,14 @@
 msgid "unexpected object ID when writing '%s'"
 msgstr "không cần ID đối tượng khi ghi “%s”"
 
-#: refs.c:833 sequencer.c:403 sequencer.c:2709 sequencer.c:2913
-#: sequencer.c:2927 sequencer.c:3184 sequencer.c:5037 wrapper.c:656
+#: refs.c:833 sequencer.c:403 sequencer.c:2647 sequencer.c:2851
+#: sequencer.c:2865 sequencer.c:3122 sequencer.c:5001 wrapper.c:620
 #, c-format
 msgid "could not write to '%s'"
 msgstr "không thể ghi vào “%s”"
 
-#: refs.c:860 wrapper.c:225 wrapper.c:395 builtin/am.c:715
-#: builtin/rebase.c:1003
+#: refs.c:860 wrapper.c:188 wrapper.c:358 builtin/am.c:714
+#: builtin/rebase.c:1004
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "không thể mở “%s” để ghi"
@@ -4985,21 +5019,21 @@
 msgid "update_ref failed for ref '%s': %s"
 msgstr "update_ref bị lỗi cho ref “%s”: %s"
 
-#: refs.c:2012
+#: refs.c:2023
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "không cho phép đa cập nhật cho tham chiếu “%s”"
 
-#: refs.c:2044
+#: refs.c:2055
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "cập nhật tham chiếu bị cấm trong môi trường kiểm tra"
 
-#: refs.c:2140 refs.c:2170
+#: refs.c:2151 refs.c:2181
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "“%s” sẵn có; không thể tạo “%s”"
 
-#: refs.c:2146 refs.c:2181
+#: refs.c:2157 refs.c:2192
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "không thể xử lý “%s” và “%s” cùng một lúc"
@@ -5009,13 +5043,13 @@
 msgid "could not remove reference %s"
 msgstr "không thể gỡ bỏ tham chiếu: %s"
 
-#: refs/files-backend.c:1248 refs/packed-backend.c:1532
-#: refs/packed-backend.c:1542
+#: refs/files-backend.c:1248 refs/packed-backend.c:1541
+#: refs/packed-backend.c:1551
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr "không thể xóa bỏ tham chiếu %s: %s"
 
-#: refs/files-backend.c:1251 refs/packed-backend.c:1545
+#: refs/files-backend.c:1251 refs/packed-backend.c:1554
 #, c-format
 msgid "could not delete references: %s"
 msgstr "không thể xóa bỏ tham chiếu: %s"
@@ -5025,7 +5059,7 @@
 msgid "invalid refspec '%s'"
 msgstr "refspec không hợp lệ “%s”"
 
-#: ref-filter.c:42 wt-status.c:1934
+#: ref-filter.c:42 wt-status.c:1938
 msgid "gone"
 msgstr "đã ra đi"
 
@@ -5044,122 +5078,122 @@
 msgid "ahead %d, behind %d"
 msgstr "trước %d, sau %d"
 
-#: ref-filter.c:162
+#: ref-filter.c:165
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr "cần định dạng: %%(color:<color>)"
 
-#: ref-filter.c:164
+#: ref-filter.c:167
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr "không nhận ra màu: %%(màu:%s)"
 
-#: ref-filter.c:186
+#: ref-filter.c:189
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr "Giá trị nguyên cần tên tham chiếu:lstrip=%s"
 
-#: ref-filter.c:190
+#: ref-filter.c:193
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr "Giá trị nguyên cần tên tham chiếu:rstrip=%s"
 
-#: ref-filter.c:192
+#: ref-filter.c:195
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr "đối số không được thừa nhận %%(%s): %s"
 
-#: ref-filter.c:247
+#: ref-filter.c:250
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr "%%(objecttype) không nhận các đối số"
 
-#: ref-filter.c:269
+#: ref-filter.c:272
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr "tham số không được thừa nhận %%(objectname): %s"
 
-#: ref-filter.c:277
+#: ref-filter.c:280
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr "%%(deltabase) không nhận các đối số"
 
-#: ref-filter.c:289
+#: ref-filter.c:292
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr "%%(body) không nhận các đối số"
 
-#: ref-filter.c:298
+#: ref-filter.c:301
 #, c-format
 msgid "%%(subject) does not take arguments"
 msgstr "%%(subject) không nhận các đối số"
 
-#: ref-filter.c:320
+#: ref-filter.c:323
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr "không hiểu tham số %%(trailers): %s"
 
-#: ref-filter.c:349
+#: ref-filter.c:352
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr "cần nội dung mang giá trị dương:lines=%s"
 
-#: ref-filter.c:351
+#: ref-filter.c:354
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr "đối số không được thừa nhận %%(contents): %s"
 
-#: ref-filter.c:366
+#: ref-filter.c:369
 #, c-format
 msgid "positive value expected objectname:short=%s"
 msgstr "cần nội dung mang giá trị dương:shot=%s"
 
-#: ref-filter.c:370
+#: ref-filter.c:373
 #, c-format
 msgid "unrecognized %%(objectname) argument: %s"
 msgstr "đối số không được thừa nhận %%(objectname): %s"
 
-#: ref-filter.c:400
+#: ref-filter.c:403
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr "cần định dạng: %%(align:<width>,<position>)"
 
-#: ref-filter.c:412
+#: ref-filter.c:415
 #, c-format
 msgid "unrecognized position:%s"
 msgstr "vị trí không được thừa nhận:%s"
 
-#: ref-filter.c:419
+#: ref-filter.c:422
 #, c-format
 msgid "unrecognized width:%s"
 msgstr "chiều rộng không được thừa nhận:%s"
 
-#: ref-filter.c:428
+#: ref-filter.c:431
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr "đối số không được thừa nhận %%(align): %s"
 
-#: ref-filter.c:436
+#: ref-filter.c:439
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr "cần giá trị độ rộng dương với nguyên tử %%(align)"
 
-#: ref-filter.c:454
+#: ref-filter.c:457
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr "đối số không được thừa nhận %%(if): %s"
 
-#: ref-filter.c:556
+#: ref-filter.c:559
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "tên trường dị hình: %.*s"
 
-#: ref-filter.c:583
+#: ref-filter.c:586
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "không hiểu tên trường: %.*s"
 
-#: ref-filter.c:587
+#: ref-filter.c:590
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
@@ -5167,159 +5201,159 @@
 "không phải là một kho git, nhưng trường “%.*s” yêu cầu truy cập vào dữ liệu "
 "đối tượng"
 
-#: ref-filter.c:711
+#: ref-filter.c:714
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr "định dạng: nguyên tử %%(if) được dùng mà không có nguyên tử %%(then)"
 
-#: ref-filter.c:774
+#: ref-filter.c:777
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr "định dạng: nguyên tử %%(then) được dùng mà không có nguyên tử %%(if)"
 
-#: ref-filter.c:776
+#: ref-filter.c:779
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr "định dạng: nguyên tử %%(then) được dùng nhiều hơn một lần"
 
-#: ref-filter.c:778
+#: ref-filter.c:781
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "định dạng: nguyên tử %%(then) được dùng sau %%(else)"
 
-#: ref-filter.c:806
+#: ref-filter.c:809
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr "định dạng: nguyên tử %%(else) được dùng mà không có nguyên tử %%(if)"
 
-#: ref-filter.c:808
+#: ref-filter.c:811
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr "định dạng: nguyên tử %%(else) được dùng mà không có nguyên tử %%(then)"
 
-#: ref-filter.c:810
+#: ref-filter.c:813
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr "định dạng: nguyên tử %%(else) được dùng nhiều hơn một lần"
 
-#: ref-filter.c:825
+#: ref-filter.c:828
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr "định dạng: nguyên tử %%(end) được dùng mà không có nguyên tử tương ứng"
 
-#: ref-filter.c:882
+#: ref-filter.c:885
 #, c-format
 msgid "malformed format string %s"
 msgstr "chuỗi định dạng dị hình %s"
 
-#: ref-filter.c:1485
+#: ref-filter.c:1488
 #, c-format
 msgid "no branch, rebasing %s"
 msgstr "không nhánh, đang cải tổ %s"
 
-#: ref-filter.c:1488
+#: ref-filter.c:1491
 #, c-format
 msgid "no branch, rebasing detached HEAD %s"
 msgstr "không nhánh, đang cải tổ HEAD %s đã tách rời"
 
-#: ref-filter.c:1491
+#: ref-filter.c:1494
 #, c-format
 msgid "no branch, bisect started on %s"
 msgstr "không nhánh, di chuyển nửa bước được bắt đầu tại %s"
 
-#: ref-filter.c:1501
+#: ref-filter.c:1504
 msgid "no branch"
 msgstr "không nhánh"
 
-#: ref-filter.c:1537 ref-filter.c:1743
+#: ref-filter.c:1540 ref-filter.c:1749
 #, c-format
 msgid "missing object %s for %s"
 msgstr "thiếu đối tượng %s cho %s"
 
-#: ref-filter.c:1547
+#: ref-filter.c:1550
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "parse_object_buffer gặp lỗi trên %s cho %s"
 
-#: ref-filter.c:1998
+#: ref-filter.c:2004
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "đối tượng dị hình tại “%s”"
 
-#: ref-filter.c:2087
+#: ref-filter.c:2093
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "đang lờ đi tham chiếu với tên hỏng %s"
 
-#: ref-filter.c:2382
+#: ref-filter.c:2389
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "định dạng: thiếu nguyên tử %%(end)"
 
-#: ref-filter.c:2482
+#: ref-filter.c:2489
 #, c-format
 msgid "option `%s' is incompatible with --merged"
 msgstr "tùy chọn “%s” là xung khắc với tùy chọn --merged"
 
-#: ref-filter.c:2485
+#: ref-filter.c:2492
 #, c-format
 msgid "option `%s' is incompatible with --no-merged"
 msgstr "tùy chọn “%s” là xung khắc với tùy chọn --no-merged"
 
-#: ref-filter.c:2495
+#: ref-filter.c:2502
 #, c-format
 msgid "malformed object name %s"
 msgstr "tên đối tượng dị hình %s"
 
-#: ref-filter.c:2500
+#: ref-filter.c:2507
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "tùy chọn “%s” phải chỉ đến một lần chuyển giao"
 
-#: remote.c:363
+#: remote.c:366
 #, c-format
 msgid "config remote shorthand cannot begin with '/': %s"
 msgstr "cấu hình viết tắt máy chủ không thể bắt đầu bằng “/”: %s"
 
-#: remote.c:410
+#: remote.c:413
 msgid "more than one receivepack given, using the first"
 msgstr "đã đưa ra nhiều hơn một gói nhận về, đang sử dụng cái đầu tiên"
 
-#: remote.c:418
+#: remote.c:421
 msgid "more than one uploadpack given, using the first"
 msgstr "đã đưa ra nhiều hơn một gói tải lên, đang sử dụng cái đầu tiên"
 
-#: remote.c:608
+#: remote.c:611
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
 msgstr "Không thể lấy về cả %s và %s cho %s"
 
-#: remote.c:612
+#: remote.c:615
 #, c-format
 msgid "%s usually tracks %s, not %s"
 msgstr "%s thường theo dõi %s, không phải %s"
 
-#: remote.c:616
+#: remote.c:619
 #, c-format
 msgid "%s tracks both %s and %s"
 msgstr "%s theo dõi cả %s và %s"
 
-#: remote.c:684
+#: remote.c:687
 #, c-format
 msgid "key '%s' of pattern had no '*'"
 msgstr "khóa “%s” của mẫu k có “*”"
 
-#: remote.c:694
+#: remote.c:697
 #, c-format
 msgid "value '%s' of pattern has no '*'"
 msgstr "giá trị “%s” của mẫu k có “*”"
 
-#: remote.c:1000
+#: remote.c:1003
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "refspec %s nguồn không khớp bất kỳ cái gì"
 
-#: remote.c:1005
+#: remote.c:1008
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr "refspec %s nguồn khớp nhiều hơn một"
@@ -5328,7 +5362,7 @@
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1020
+#: remote.c:1023
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -5353,7 +5387,7 @@
 "Nếu cả hai là không thể, thì chúng tôi cũng chịu thua. Bạn phải dùng tham "
 "chiếu dạng đầy đủ."
 
-#: remote.c:1040
+#: remote.c:1043
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -5364,7 +5398,7 @@
 "Có phải ý bạn là một tạo một nhánh mới bằng cách đẩy lên\n"
 "“%s:refs/heads/%s”?"
 
-#: remote.c:1045
+#: remote.c:1048
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -5375,7 +5409,7 @@
 "Có phải ý bạn là một tạo một thẻ mới bằng cách đẩy lên\n"
 "“%s:refs/tags/%s”?"
 
-#: remote.c:1050
+#: remote.c:1053
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -5386,7 +5420,7 @@
 "Có phải ý bạn là một tạo một cây mới bằng cách đẩy lên\n"
 "“%s:refs/tags/%s”?"
 
-#: remote.c:1055
+#: remote.c:1058
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -5397,115 +5431,115 @@
 "Có phải ý bạn là một tạo một blob mới bằng cách đẩy lên\n"
 "“%s:refs/tags/%s”?"
 
-#: remote.c:1091
+#: remote.c:1094
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "“%s” không thể được phân giải thành nhánh"
 
-#: remote.c:1102
+#: remote.c:1105
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "không thể xóa “%s”: tham chiếu trên máy chủ không tồn tại"
 
-#: remote.c:1114
+#: remote.c:1117
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr "dst refspec %s khớp nhiều hơn một"
 
-#: remote.c:1121
+#: remote.c:1124
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "dst ref %s nhận từ hơn một nguồn"
 
-#: remote.c:1624 remote.c:1725
+#: remote.c:1627 remote.c:1728
 msgid "HEAD does not point to a branch"
 msgstr "HEAD không chỉ đến một nhánh nào cả"
 
-#: remote.c:1633
+#: remote.c:1636
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "không có nhánh nào như thế: “%s”"
 
-#: remote.c:1636
+#: remote.c:1639
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "không có thượng nguồn được cấu hình cho nhánh “%s”"
 
-#: remote.c:1642
+#: remote.c:1645
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr ""
 "nhánh thượng nguồn “%s” không được lưu lại như là một nhánh theo dõi máy chủ"
 
-#: remote.c:1657
+#: remote.c:1660
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr "đẩy lên đích “%s” trên máy chủ “%s” không có nhánh theo dõi nội bộ"
 
-#: remote.c:1669
+#: remote.c:1672
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "nhánh “%s” không có máy chủ để đẩy lên"
 
-#: remote.c:1679
+#: remote.c:1682
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "đẩy refspecs cho “%s” không bao gồm “%s”"
 
-#: remote.c:1692
+#: remote.c:1695
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "đẩy lên mà không có đích (push.default là “nothing”)"
 
-#: remote.c:1714
+#: remote.c:1717
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "không thể phân giải đẩy “đơn giản” đến một đích đơn"
 
-#: remote.c:1840
+#: remote.c:1843
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "không thể tìm thấy tham chiếu máy chủ %s"
 
-#: remote.c:1853
+#: remote.c:1856
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* Đang bỏ qua tham chiếu thú vị nội bộ “%s”"
 
-#: remote.c:2016
+#: remote.c:2019
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr ""
 "Nhánh của bạn dựa trên cơ sở là “%s”, nhưng trên thượng nguồn không còn.\n"
 
-#: remote.c:2020
+#: remote.c:2023
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "   (dùng \" git branch --unset-upstream\" để sửa)\n"
 
-#: remote.c:2023
+#: remote.c:2026
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Nhánh của bạn đã cập nhật với “%s”.\n"
 
-#: remote.c:2027
+#: remote.c:2030
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Nhánh của bạn và “%s” tham chiếu đến các lần chuyển giao khác nhau.\n"
 
-#: remote.c:2030
+#: remote.c:2033
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (dùng \"%s\" để biết thêm chi tiết)\n"
 
-#: remote.c:2034
+#: remote.c:2037
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "Nhánh của bạn đứng trước “%s” %d lần chuyển giao.\n"
 
-#: remote.c:2040
+#: remote.c:2043
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (dùng \"git push\" để xuất bản các lần chuyển giao nội bộ của bạn)\n"
 
-#: remote.c:2043
+#: remote.c:2046
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -5514,11 +5548,11 @@
 "Nhánh của bạn đứng đằng sau “%s” %d lần chuyển giao, và có thể được chuyển-"
 "tiếp-nhanh.\n"
 
-#: remote.c:2051
+#: remote.c:2054
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (dùng \"git pull\" để cập nhật nhánh nội bộ của bạn)\n"
 
-#: remote.c:2054
+#: remote.c:2057
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -5531,13 +5565,13 @@
 "và có %d và %d lần chuyển giao khác nhau cho từng cái,\n"
 "tương ứng với mỗi lần.\n"
 
-#: remote.c:2064
+#: remote.c:2067
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr ""
 "  (dùng \"git pull\" để hòa trộn nhánh trên máy chủ vào trong nhánh của "
 "bạn)\n"
 
-#: remote.c:2247
+#: remote.c:2250
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "không thể phân tích tên đối tượng mong muốn “%s”"
@@ -5615,7 +5649,7 @@
 msgid "Recorded preimage for '%s'"
 msgstr "Preimage đã được ghi lại cho “%s”"
 
-#: rerere.c:881 submodule.c:2023 builtin/log.c:1773
+#: rerere.c:881 submodule.c:2023 builtin/log.c:1790
 #: builtin/submodule--helper.c:1418 builtin/submodule--helper.c:1428
 #, c-format
 msgid "could not create directory '%s'"
@@ -5650,20 +5684,20 @@
 msgid "unable to open rr-cache directory"
 msgstr "không thể mở thư mục rr-cache"
 
-#: revision.c:2507
+#: revision.c:2509
 msgid "your current branch appears to be broken"
 msgstr "nhánh hiện tại của bạn có vẻ như bị hỏng"
 
-#: revision.c:2510
+#: revision.c:2512
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "nhánh hiện tại của bạn “%s” không có một lần chuyển giao nào cả"
 
-#: revision.c:2710
+#: revision.c:2720
 msgid "--first-parent is incompatible with --bisect"
 msgstr "--first-parent xung khắc với --bisect"
 
-#: revision.c:2714
+#: revision.c:2724
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L vẫn chưa hỗ trợ định dạng khác biệt nào ngoài -p và -s"
 
@@ -5685,30 +5719,30 @@
 "Móc “%s” bị bỏ qua bởi vì nó không thể đặt là thực thi được.\n"
 "Bạn có thể tắt cảnh báo này bằng “git config advice.ignoredHook false“."
 
-#: send-pack.c:141
+#: send-pack.c:142
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr ""
 "gặp gói flush không cần trong khi đọc tình trạng giải nén gói trên máy chủ"
 
-#: send-pack.c:143
+#: send-pack.c:144
 #, c-format
 msgid "unable to parse remote unpack status: %s"
 msgstr "không thể phân tích tình trạng unpack máy chủ: %s"
 
-#: send-pack.c:145
+#: send-pack.c:146
 #, c-format
 msgid "remote unpack failed: %s"
 msgstr "máy chủ gặp lỗi unpack: %s"
 
-#: send-pack.c:306
+#: send-pack.c:307
 msgid "failed to sign the push certificate"
 msgstr "gặp lỗi khi ký chứng thực đẩy"
 
-#: send-pack.c:420
+#: send-pack.c:421
 msgid "the receiving end does not support --signed push"
 msgstr "kết thúc nhận không hỗ trợ đẩy --signed"
 
-#: send-pack.c:422
+#: send-pack.c:423
 msgid ""
 "not sending a push certificate since the receiving end does not support --"
 "signed push"
@@ -5716,11 +5750,11 @@
 "đừng gửi giấy chứng nhận đẩy trước khi kết thúc nhận không hỗ trợ đẩy --"
 "signed"
 
-#: send-pack.c:434
+#: send-pack.c:435
 msgid "the receiving end does not support --atomic push"
 msgstr "kết thúc nhận không hỗ trợ đẩy --atomic"
 
-#: send-pack.c:439
+#: send-pack.c:440
 msgid "the receiving end does not support push options"
 msgstr "kết thúc nhận không hỗ trợ các tùy chọn của lệnh push"
 
@@ -5734,7 +5768,7 @@
 msgid "could not delete '%s'"
 msgstr "không thể xóa bỏ “%s”"
 
-#: sequencer.c:311 builtin/rebase.c:759 builtin/rebase.c:1645 builtin/rm.c:369
+#: sequencer.c:311 builtin/rebase.c:760 builtin/rebase.c:1676 builtin/rm.c:369
 #, c-format
 msgid "could not remove '%s'"
 msgstr "không thể gỡ bỏ “%s”"
@@ -5774,7 +5808,7 @@
 "với lệnh “git add </các/đường/dẫn>” hoặc “git rm </các/đường/dẫn>”\n"
 "và chuyển giao kết quả bằng lệnh “git commit”"
 
-#: sequencer.c:401 sequencer.c:2909
+#: sequencer.c:401 sequencer.c:2847
 #, c-format
 msgid "could not lock '%s'"
 msgstr "không thể khóa “%s”"
@@ -5784,15 +5818,15 @@
 msgid "could not write eol to '%s'"
 msgstr "không thể ghi eol vào “%s”"
 
-#: sequencer.c:413 sequencer.c:2714 sequencer.c:2915 sequencer.c:2929
-#: sequencer.c:3192
+#: sequencer.c:413 sequencer.c:2652 sequencer.c:2853 sequencer.c:2867
+#: sequencer.c:3130
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "gặp lỗi khi hoàn thành “%s”"
 
-#: sequencer.c:436 sequencer.c:981 sequencer.c:1655 sequencer.c:2734
-#: sequencer.c:3174 sequencer.c:3283 builtin/am.c:245 builtin/commit.c:763
-#: builtin/merge.c:1112 builtin/rebase.c:567
+#: sequencer.c:436 sequencer.c:1585 sequencer.c:2672 sequencer.c:3112
+#: sequencer.c:3221 builtin/am.c:244 builtin/commit.c:763 builtin/merge.c:1117
+#: builtin/rebase.c:568
 #, c-format
 msgid "could not read '%s'"
 msgstr "không thể đọc “%s”"
@@ -5819,70 +5853,65 @@
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase -i".
 #.
-#: sequencer.c:632
+#: sequencer.c:631
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s: Không thể ghi tập tin lưu bảng mục lục mới"
 
-#: sequencer.c:649
+#: sequencer.c:648
 msgid "unable to update cache tree"
 msgstr "không thể cập nhật cây bộ nhớ đệm"
 
-#: sequencer.c:663
+#: sequencer.c:662
 msgid "could not resolve HEAD commit"
 msgstr "không thể phân giải lần chuyển giao HEAD"
 
-#: sequencer.c:743
+#: sequencer.c:742
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr "không có khóa hiện diện trong “%.*s”"
 
-#: sequencer.c:754
+#: sequencer.c:753
 #, c-format
 msgid "unable to dequote value of '%s'"
 msgstr "không thể giải trích dẫn giá trị của “%s”"
 
-#: sequencer.c:791 wrapper.c:227 wrapper.c:397 builtin/am.c:706
-#: builtin/am.c:798 builtin/merge.c:1109 builtin/rebase.c:1045
+#: sequencer.c:790 wrapper.c:190 wrapper.c:360 builtin/am.c:705
+#: builtin/am.c:797 builtin/merge.c:1114 builtin/rebase.c:1046
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "không thể mở “%s” để đọc"
 
-#: sequencer.c:801
+#: sequencer.c:800
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr "“GIT_AUTHOR_NAME” đã sẵn đưa ra rồi"
 
-#: sequencer.c:806
+#: sequencer.c:805
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr "“GIT_AUTHOR_EMAIL” đã sẵn đưa ra rồi"
 
-#: sequencer.c:811
+#: sequencer.c:810
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr "“GIT_AUTHOR_DATE” đã sẵn đưa ra rồi"
 
-#: sequencer.c:815
+#: sequencer.c:814
 #, c-format
 msgid "unknown variable '%s'"
 msgstr "không hiểu biến “%s”"
 
-#: sequencer.c:820
+#: sequencer.c:819
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr "thiếu “GIT_AUTHOR_NAME”"
 
-#: sequencer.c:822
+#: sequencer.c:821
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr "thiếu “GIT_AUTHOR_EMAIL”"
 
-#: sequencer.c:824
+#: sequencer.c:823
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr "thiếu “GIT_AUTHOR_DATE”"
 
-#: sequencer.c:884
-#, c-format
-msgid "invalid date format '%s' in '%s'"
-msgstr "định dạng ngày tháng không hợp lệ “%s” trong “%s”"
-
-#: sequencer.c:901
+#: sequencer.c:872
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -5911,15 +5940,11 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:995
-msgid "writing root commit"
-msgstr "ghi chuyển giao gốc"
-
-#: sequencer.c:1216
+#: sequencer.c:1146
 msgid "'prepare-commit-msg' hook failed"
 msgstr "móc “prepare-commit-msg” bị lỗi"
 
-#: sequencer.c:1223
+#: sequencer.c:1153
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -5950,7 +5975,7 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1236
+#: sequencer.c:1166
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -5978,328 +6003,328 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1278
+#: sequencer.c:1208
 msgid "couldn't look up newly created commit"
 msgstr "không thể tìm thấy lần chuyển giao mới hơn đã được tạo"
 
-#: sequencer.c:1280
+#: sequencer.c:1210
 msgid "could not parse newly created commit"
 msgstr ""
 "không thể phân tích cú pháp của đối tượng chuyển giao mới hơn đã được tạo"
 
-#: sequencer.c:1326
+#: sequencer.c:1256
 msgid "unable to resolve HEAD after creating commit"
 msgstr "không thể phân giải HEAD sau khi tạo lần chuyển giao"
 
-#: sequencer.c:1328
+#: sequencer.c:1258
 msgid "detached HEAD"
 msgstr "đã rời khỏi HEAD"
 
-#: sequencer.c:1332
+#: sequencer.c:1262
 msgid " (root-commit)"
 msgstr " (root-commit)"
 
-#: sequencer.c:1353
+#: sequencer.c:1283
 msgid "could not parse HEAD"
 msgstr "không thể phân tích HEAD"
 
-#: sequencer.c:1355
+#: sequencer.c:1285
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s không phải là một lần chuyển giao!"
 
-#: sequencer.c:1359 builtin/commit.c:1571
+#: sequencer.c:1289 builtin/commit.c:1571
 msgid "could not parse HEAD commit"
 msgstr "không thể phân tích commit (lần chuyển giao) HEAD"
 
-#: sequencer.c:1411 sequencer.c:2004
+#: sequencer.c:1341 sequencer.c:1933
 msgid "unable to parse commit author"
 msgstr "không thể phân tích tác giả của lần chuyển giao"
 
-#: sequencer.c:1421 builtin/am.c:1573 builtin/merge.c:684
+#: sequencer.c:1352 builtin/am.c:1561 builtin/merge.c:684
 msgid "git write-tree failed to write a tree"
 msgstr "lệnh git write-tree gặp lỗi khi ghi một cây"
 
-#: sequencer.c:1438 sequencer.c:1499
+#: sequencer.c:1369 sequencer.c:1429
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "không thể đọc phần chú thích (message) từ “%s”"
 
-#: sequencer.c:1465 builtin/am.c:1595 builtin/commit.c:1670 builtin/merge.c:878
-#: builtin/merge.c:903
+#: sequencer.c:1396 builtin/am.c:1583 builtin/commit.c:1670 builtin/merge.c:883
+#: builtin/merge.c:908
 msgid "failed to write commit object"
 msgstr "gặp lỗi khi ghi đối tượng chuyển giao"
 
-#: sequencer.c:1526
+#: sequencer.c:1456
 #, c-format
 msgid "could not parse commit %s"
 msgstr "không thể phân tích lần chuyển giao %s"
 
-#: sequencer.c:1531
+#: sequencer.c:1461
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "không thể phân tích lần chuyển giao cha mẹ “%s”"
 
-#: sequencer.c:1605 sequencer.c:1715
+#: sequencer.c:1535 sequencer.c:1645
 #, c-format
 msgid "unknown command: %d"
 msgstr "không hiểu câu lệnh %d"
 
-#: sequencer.c:1662 sequencer.c:1687
+#: sequencer.c:1592 sequencer.c:1617
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr "Đây là tổ hợp của %d lần chuyển giao."
 
-#: sequencer.c:1672
+#: sequencer.c:1602
 msgid "need a HEAD to fixup"
 msgstr "cần một HEAD để sửa"
 
-#: sequencer.c:1674 sequencer.c:3219
+#: sequencer.c:1604 sequencer.c:3157
 msgid "could not read HEAD"
 msgstr "không thể đọc HEAD"
 
-#: sequencer.c:1676
+#: sequencer.c:1606
 msgid "could not read HEAD's commit message"
 msgstr "không thể đọc phần chú thích (message) của HEAD"
 
-#: sequencer.c:1682
+#: sequencer.c:1612
 #, c-format
 msgid "cannot write '%s'"
 msgstr "không thể ghi “%s”"
 
-#: sequencer.c:1689 git-rebase--preserve-merges.sh:496
+#: sequencer.c:1619 git-rebase--preserve-merges.sh:496
 msgid "This is the 1st commit message:"
 msgstr "Đây là chú thích cho lần chuyển giao thứ nhất:"
 
-#: sequencer.c:1697
+#: sequencer.c:1627
 #, c-format
 msgid "could not read commit message of %s"
 msgstr "không thể đọc phần chú thích (message) của %s"
 
-#: sequencer.c:1704
+#: sequencer.c:1634
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Đây là chú thích cho lần chuyển giao thứ #%d:"
 
-#: sequencer.c:1710
+#: sequencer.c:1640
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "Chú thích cho lần chuyển giao thứ #%d sẽ bị bỏ qua:"
 
-#: sequencer.c:1798
+#: sequencer.c:1728
 msgid "your index file is unmerged."
 msgstr "tập tin lưu mục lục của bạn không được hòa trộn."
 
-#: sequencer.c:1805
+#: sequencer.c:1735
 msgid "cannot fixup root commit"
 msgstr "không thể sửa chữa lần chuyển giao gốc"
 
-#: sequencer.c:1824
+#: sequencer.c:1754
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "lần chuyển giao %s là một lần hòa trộn nhưng không đưa ra tùy chọn -m."
 
-#: sequencer.c:1832 sequencer.c:1840
+#: sequencer.c:1762 sequencer.c:1770
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "lần chuyển giao %s không có cha mẹ %d"
 
-#: sequencer.c:1846
+#: sequencer.c:1776
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "không thể lấy ghi chú lần chuyển giao cho %s"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:1865
+#: sequencer.c:1795
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: không thể phân tích lần chuyển giao mẹ của %s"
 
-#: sequencer.c:1930
+#: sequencer.c:1860
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "không thể đổi tên “%s” thành “%s”"
 
-#: sequencer.c:1985
+#: sequencer.c:1915
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "không thể hoàn nguyên %s… %s"
 
-#: sequencer.c:1986
+#: sequencer.c:1916
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "không thể áp dụng miếng vá %s… %s"
 
-#: sequencer.c:2045
+#: sequencer.c:1983
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: gặp lỗi đọc bảng mục lục"
 
-#: sequencer.c:2052
+#: sequencer.c:1990
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: gặp lỗi khi làm tươi mới bảng mục lục"
 
-#: sequencer.c:2128
+#: sequencer.c:2066
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s không nhận các đối số: “%s”"
 
-#: sequencer.c:2137
+#: sequencer.c:2075
 #, c-format
 msgid "missing arguments for %s"
 msgstr "thiếu đối số cho %s"
 
-#: sequencer.c:2174
+#: sequencer.c:2112
 #, c-format
 msgid "could not parse '%.*s'"
 msgstr "không thể phân tích cú pháp “%.*s”"
 
-#: sequencer.c:2228
+#: sequencer.c:2166
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "dòng không hợp lệ %d: %.*s"
 
-#: sequencer.c:2239
+#: sequencer.c:2177
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "không thể “%s” thể mà không có lần chuyển giao kế trước"
 
-#: sequencer.c:2287 builtin/rebase.c:153 builtin/rebase.c:178
+#: sequencer.c:2225 builtin/rebase.c:153 builtin/rebase.c:178
 #: builtin/rebase.c:204 builtin/rebase.c:229
 #, c-format
 msgid "could not read '%s'."
 msgstr "không thể đọc “%s”."
 
-#: sequencer.c:2323
+#: sequencer.c:2261
 msgid "cancelling a cherry picking in progress"
 msgstr "đang hủy bỏ thao tác cherry pick đang thực hiện"
 
-#: sequencer.c:2330
+#: sequencer.c:2268
 msgid "cancelling a revert in progress"
 msgstr "đang hủy bỏ các thao tác hoàn nguyên đang thực hiện"
 
-#: sequencer.c:2364
+#: sequencer.c:2302
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "vui lòng sửa lỗi này bằng cách dùng “git rebase --edit-todo”."
 
-#: sequencer.c:2366
+#: sequencer.c:2304
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "bảng chỉ thị không thể dùng được: %s"
 
-#: sequencer.c:2371
+#: sequencer.c:2309
 msgid "no commits parsed."
 msgstr "không có lần chuyển giao nào được phân tích."
 
-#: sequencer.c:2382
+#: sequencer.c:2320
 msgid "cannot cherry-pick during a revert."
 msgstr "không thể cherry-pick trong khi hoàn nguyên."
 
-#: sequencer.c:2384
+#: sequencer.c:2322
 msgid "cannot revert during a cherry-pick."
 msgstr "không thể thực hiện việc hoàn nguyên trong khi đang cherry-pick."
 
-#: sequencer.c:2466
+#: sequencer.c:2404
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr "giá trị cho %s không hợp lệ: %s"
 
-#: sequencer.c:2553
+#: sequencer.c:2491
 msgid "unusable squash-onto"
 msgstr "squash-onto không dùng được"
 
-#: sequencer.c:2569
+#: sequencer.c:2507
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "bảng tùy chọn dị hình: “%s”"
 
-#: sequencer.c:2652 sequencer.c:4351
+#: sequencer.c:2590 sequencer.c:4308
 msgid "empty commit set passed"
 msgstr "lần chuyển giao trống rỗng đặt là hợp quy cách"
 
-#: sequencer.c:2668
+#: sequencer.c:2606
 msgid "revert is already in progress"
 msgstr "có thao tác hoàn nguyên đang được thực hiện"
 
-#: sequencer.c:2670
+#: sequencer.c:2608
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "hãy thử \"git revert (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2673
+#: sequencer.c:2611
 msgid "cherry-pick is already in progress"
 msgstr "có thao tác “cherry-pick” đang được thực hiện"
 
-#: sequencer.c:2675
+#: sequencer.c:2613
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "hãy thử \"git cherry-pick (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2689
+#: sequencer.c:2627
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "không thể tạo thư mục xếp dãy “%s”"
 
-#: sequencer.c:2704
+#: sequencer.c:2642
 msgid "could not lock HEAD"
 msgstr "không thể khóa HEAD"
 
-#: sequencer.c:2764 sequencer.c:4103
+#: sequencer.c:2702 sequencer.c:4057
 msgid "no cherry-pick or revert in progress"
 msgstr "không cherry-pick hay hoàn nguyên trong tiến trình"
 
-#: sequencer.c:2766 sequencer.c:2777
+#: sequencer.c:2704 sequencer.c:2715
 msgid "cannot resolve HEAD"
 msgstr "không thể phân giải HEAD"
 
-#: sequencer.c:2768 sequencer.c:2812
+#: sequencer.c:2706 sequencer.c:2750
 msgid "cannot abort from a branch yet to be born"
 msgstr "không thể hủy bỏ từ một nhánh mà nó còn chưa được tạo ra"
 
-#: sequencer.c:2798 builtin/grep.c:734
+#: sequencer.c:2736 builtin/grep.c:736
 #, c-format
 msgid "cannot open '%s'"
 msgstr "không mở được “%s”"
 
-#: sequencer.c:2800
+#: sequencer.c:2738
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "không thể đọc “%s”: %s"
 
-#: sequencer.c:2801
+#: sequencer.c:2739
 msgid "unexpected end of file"
 msgstr "gặp kết thúc tập tin đột xuất"
 
-#: sequencer.c:2807
+#: sequencer.c:2745
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "tập tin HEAD “pre-cherry-pick” đã lưu “%s” bị hỏng"
 
-#: sequencer.c:2818
+#: sequencer.c:2756
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr ""
 "Bạn có lẽ đã có HEAD đã bị di chuyển đi, Không thể tua, kiểm tra HEAD của "
 "bạn!"
 
-#: sequencer.c:2859
+#: sequencer.c:2797
 msgid "no revert in progress"
 msgstr "không có tiến trình hoàn nguyên nào"
 
-#: sequencer.c:2867
+#: sequencer.c:2805
 msgid "no cherry-pick in progress"
 msgstr "không có cherry-pick đang được thực hiện"
 
-#: sequencer.c:2877
+#: sequencer.c:2815
 msgid "failed to skip the commit"
 msgstr "gặp lỗi khi bỏ qua đối tượng chuyển giao"
 
-#: sequencer.c:2884
+#: sequencer.c:2822
 msgid "there is nothing to skip"
 msgstr "ở đây không có gì để mà bỏ qua cả"
 
-#: sequencer.c:2887
+#: sequencer.c:2825
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -6308,21 +6333,21 @@
 "bạn đã sẵn sàng chuyển giao chưa?\n"
 "thử \"git %s --continue\""
 
-#: sequencer.c:3011 sequencer.c:4015
+#: sequencer.c:2949 sequencer.c:3969
 #, c-format
 msgid "could not update %s"
 msgstr "không thể cập nhật %s"
 
-#: sequencer.c:3049 sequencer.c:3995
+#: sequencer.c:2987 sequencer.c:3949
 msgid "cannot read HEAD"
 msgstr "không thể đọc HEAD"
 
-#: sequencer.c:3066
+#: sequencer.c:3004
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "không thể chép “%s” sang “%s”"
 
-#: sequencer.c:3074
+#: sequencer.c:3012
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -6341,27 +6366,27 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:3084
+#: sequencer.c:3022
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "Không thể áp dụng %s… %.*s"
 
-#: sequencer.c:3091
+#: sequencer.c:3029
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "Không hòa trộn %.*s"
 
-#: sequencer.c:3105 sequencer.c:3109 builtin/difftool.c:633
+#: sequencer.c:3043 sequencer.c:3047 builtin/difftool.c:641
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "không thể chép “%s” sang “%s”"
 
-#: sequencer.c:3131 sequencer.c:3558 builtin/rebase.c:849 builtin/rebase.c:1582
-#: builtin/rebase.c:1953 builtin/rebase.c:2008
+#: sequencer.c:3069 sequencer.c:3506 builtin/rebase.c:850 builtin/rebase.c:1613
+#: builtin/rebase.c:1987 builtin/rebase.c:2031
 msgid "could not read index"
 msgstr "không thể đọc bảng mục lục"
 
-#: sequencer.c:3136
+#: sequencer.c:3074
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -6376,11 +6401,11 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3142
+#: sequencer.c:3080
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "và tạo các thay đổi bảng mục lục và/hay cây làm việc\n"
 
-#: sequencer.c:3148
+#: sequencer.c:3086
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -6397,76 +6422,76 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3209
+#: sequencer.c:3147
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "tên nhãn dị hình: “%.*s”"
 
-#: sequencer.c:3263
+#: sequencer.c:3201
 msgid "writing fake root commit"
 msgstr "ghi lần chuyển giao gốc giả"
 
-#: sequencer.c:3268
+#: sequencer.c:3206
 msgid "writing squash-onto"
 msgstr "đang ghi squash-onto"
 
-#: sequencer.c:3306 builtin/rebase.c:854 builtin/rebase.c:860
+#: sequencer.c:3244 builtin/rebase.c:855 builtin/rebase.c:861
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "gặp lỗi khi tìm cây của %s"
 
-#: sequencer.c:3324 builtin/rebase.c:873
+#: sequencer.c:3262 builtin/rebase.c:874
 msgid "could not write index"
 msgstr "không thể ghi bảng mục lục"
 
-#: sequencer.c:3351
+#: sequencer.c:3289
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "không thể phân giải “%s”"
 
-#: sequencer.c:3379
+#: sequencer.c:3320
 msgid "cannot merge without a current revision"
 msgstr "không thể hòa trộn mà không có một điểm xét duyệt hiện tại"
 
-#: sequencer.c:3401
+#: sequencer.c:3342
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "không thể phân tích “%.*s”"
 
-#: sequencer.c:3410
+#: sequencer.c:3351
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "chẳng có gì để hòa trộn: “%.*s”"
 
-#: sequencer.c:3422
+#: sequencer.c:3363
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr "hòa trộn octopus không thể được thực thi trên đỉnh của một [new root]"
 
-#: sequencer.c:3437
+#: sequencer.c:3378
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "không thể lấy chú thích của lần chuyển giao của “%s”"
 
-#: sequencer.c:3590
+#: sequencer.c:3538
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "không thể ngay cả khi thử hòa trộn “%.*s”"
 
-#: sequencer.c:3606
+#: sequencer.c:3554
 msgid "merge: Unable to write new index file"
 msgstr "merge: Không thể ghi tập tin lưu bảng mục lục mới"
 
-#: sequencer.c:3675 builtin/rebase.c:711
+#: sequencer.c:3623 builtin/rebase.c:712
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Đã áp dụng autostash.\n"
 
-#: sequencer.c:3687
+#: sequencer.c:3635
 #, c-format
 msgid "cannot store %s"
 msgstr "không thử lưu “%s”"
 
-#: sequencer.c:3690 builtin/rebase.c:727 git-rebase--preserve-merges.sh:113
+#: sequencer.c:3638 builtin/rebase.c:728 git-rebase--preserve-merges.sh:113
 #, c-format
 msgid ""
 "Applying autostash resulted in conflicts.\n"
@@ -6478,31 +6503,31 @@
 "Bạn có thể chạy lệnh \"git stash pop\" hay \"git stash drop\" bất kỳ lúc "
 "nào.\n"
 
-#: sequencer.c:3751
+#: sequencer.c:3699
 #, c-format
 msgid "could not checkout %s"
 msgstr "không thể lấy ra %s"
 
-#: sequencer.c:3765
+#: sequencer.c:3713
 #, c-format
 msgid "%s: not a valid OID"
 msgstr "%s không phải là một OID hợp lệ"
 
-#: sequencer.c:3770 git-rebase--preserve-merges.sh:779
+#: sequencer.c:3718 git-rebase--preserve-merges.sh:779
 msgid "could not detach HEAD"
 msgstr "không thể tách rời HEAD"
 
-#: sequencer.c:3785
+#: sequencer.c:3733
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "Dừng lại ở HEAD\n"
 
-#: sequencer.c:3787
+#: sequencer.c:3735
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Dừng lại ở %s\n"
 
-#: sequencer.c:3795
+#: sequencer.c:3743
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -6523,48 +6548,48 @@
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:3877
+#: sequencer.c:3827
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Dừng lại ở %s…  %.*s\n"
 
-#: sequencer.c:3958
+#: sequencer.c:3898
 #, c-format
 msgid "unknown command %d"
 msgstr "không hiểu câu lệnh %d"
 
-#: sequencer.c:4003
+#: sequencer.c:3957
 msgid "could not read orig-head"
 msgstr "không thể đọc orig-head"
 
-#: sequencer.c:4008
+#: sequencer.c:3962
 msgid "could not read 'onto'"
 msgstr "không thể đọc “onto”."
 
-#: sequencer.c:4022
+#: sequencer.c:3976
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "không thể cập nhật HEAD thành %s"
 
-#: sequencer.c:4115
+#: sequencer.c:4069
 msgid "cannot rebase: You have unstaged changes."
 msgstr "không thể cải tổ: Bạn có các thay đổi chưa được đưa lên bệ phóng."
 
-#: sequencer.c:4124
+#: sequencer.c:4078
 msgid "cannot amend non-existing commit"
 msgstr "không thể tu bỏ một lần chuyển giao không tồn tại"
 
-#: sequencer.c:4126
+#: sequencer.c:4080
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "tập tin không hợp lệ: “%s”"
 
-#: sequencer.c:4128
+#: sequencer.c:4082
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "nội dung không hợp lệ: “%s”"
 
-#: sequencer.c:4131
+#: sequencer.c:4085
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -6574,42 +6599,42 @@
 "Bạn có các thay đổi chưa chuyển giao trong thư mục làm việc. Vui lòng\n"
 "chuyển giao chúng trước và sau đó chạy lệnh “git rebase --continue” lần nữa."
 
-#: sequencer.c:4167 sequencer.c:4205
+#: sequencer.c:4121 sequencer.c:4159
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "không thể ghi tập tin: “%s”"
 
-#: sequencer.c:4220
+#: sequencer.c:4174
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "không thể xóa bỏ CHERRY_PICK_HEAD"
 
-#: sequencer.c:4227
+#: sequencer.c:4181
 msgid "could not commit staged changes."
 msgstr "không thể chuyển giao các thay đổi đã đưa lên bệ phóng."
 
-#: sequencer.c:4328
+#: sequencer.c:4285
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: không thể cherry-pick một %s"
 
-#: sequencer.c:4332
+#: sequencer.c:4289
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: điểm xét duyệt sai"
 
-#: sequencer.c:4367
+#: sequencer.c:4324
 msgid "can't revert as initial commit"
 msgstr "không thể hoàn nguyên một lần chuyển giao khởi tạo"
 
-#: sequencer.c:4810
+#: sequencer.c:4774
 msgid "make_script: unhandled options"
 msgstr "make_script: các tùy chọn được không xử lý"
 
-#: sequencer.c:4813
+#: sequencer.c:4777
 msgid "make_script: error preparing revisions"
 msgstr "make_script: lỗi chuẩn bị điểm hiệu chỉnh"
 
-#: sequencer.c:4971
+#: sequencer.c:4935
 msgid ""
 "You can fix this with 'git rebase --edit-todo' and then run 'git rebase --"
 "continue'.\n"
@@ -6619,24 +6644,24 @@
 "continue”.\n"
 "Hoặc là bạn có thể bãi bỏ việc cải tổ bằng “git rebase --abort”.\n"
 
-#: sequencer.c:5083 sequencer.c:5100
+#: sequencer.c:5047 sequencer.c:5064
 msgid "nothing to do"
 msgstr "không có gì để làm"
 
-#: sequencer.c:5114
+#: sequencer.c:5078
 msgid "could not skip unnecessary pick commands"
 msgstr "không thể bỏ qua các lệnh cậy (pick) không cần thiết"
 
-#: sequencer.c:5197
+#: sequencer.c:5166
 msgid "the script was already rearranged."
 msgstr "văn lệnh đã sẵn được sắp đặt rồi."
 
-#: setup.c:123
+#: setup.c:124
 #, c-format
 msgid "'%s' is outside repository"
 msgstr "“%s” ở ngoài một kho chứa"
 
-#: setup.c:173
+#: setup.c:174
 #, c-format
 msgid ""
 "%s: no such path in the working tree.\n"
@@ -6646,7 +6671,7 @@
 "Dùng “git <lệnh> -- <đường/dẫn>…” để chỉ định đường dẫn mà nó không tồn tại "
 "một cách nội bộ."
 
-#: setup.c:186
+#: setup.c:187
 #, c-format
 msgid ""
 "ambiguous argument '%s': unknown revision or path not in the working tree.\n"
@@ -6658,12 +6683,12 @@
 "Dùng “--” để ngăn cách các đường dẫn khỏi điểm xem xét, như thế này:\n"
 "“git <lệnh> [<điểm xem xét>…] -- [<tập tin>…]”"
 
-#: setup.c:235
+#: setup.c:236
 #, c-format
 msgid "option '%s' must come before non-option arguments"
 msgstr "tùy chọn “%s” phải trước các đối số đầu tiên không có tùy chọn"
 
-#: setup.c:254
+#: setup.c:255
 #, c-format
 msgid ""
 "ambiguous argument '%s': both revision and filename\n"
@@ -6674,92 +6699,92 @@
 "Dùng “--” để ngăn cách các đường dẫn khỏi điểm xem xét, như thế này:\n"
 "“git <lệnh> [<điểm xem xét>…] -- [<tập tin>…]”"
 
-#: setup.c:390
+#: setup.c:391
 msgid "unable to set up work tree using invalid config"
 msgstr "không thể cài đặt thư mục làm việc sử dụng cấu hình không hợp lệ"
 
-#: setup.c:394
+#: setup.c:395
 msgid "this operation must be run in a work tree"
 msgstr "thao tác này phải được thực hiện trong thư mục làm việc"
 
-#: setup.c:540
+#: setup.c:541
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
 msgstr "Cần phiên bản kho git <= %d, nhưng lại nhận được %d"
 
-#: setup.c:548
+#: setup.c:549
 msgid "unknown repository extensions found:"
 msgstr "tìm thấy phần mở rộng kho chưa biết:"
 
-#: setup.c:567
+#: setup.c:568
 #, c-format
 msgid "error opening '%s'"
 msgstr "gặp lỗi khi mở “%s”"
 
-#: setup.c:569
+#: setup.c:570
 #, c-format
 msgid "too large to be a .git file: '%s'"
 msgstr "tập tin .git là quá lớn: “%s”"
 
-#: setup.c:571
+#: setup.c:572
 #, c-format
 msgid "error reading %s"
 msgstr "gặp lỗi khi đọc %s"
 
-#: setup.c:573
+#: setup.c:574
 #, c-format
 msgid "invalid gitfile format: %s"
 msgstr "định dạng tập tin git không hợp lệ: %s"
 
-#: setup.c:575
+#: setup.c:576
 #, c-format
 msgid "no path in gitfile: %s"
 msgstr "không có đường dẫn trong tập tin git: %s"
 
-#: setup.c:577
+#: setup.c:578
 #, c-format
 msgid "not a git repository: %s"
 msgstr "không phải là kho git: %s"
 
-#: setup.c:676
+#: setup.c:677
 #, c-format
 msgid "'$%s' too big"
 msgstr "“$%s” quá lớn"
 
-#: setup.c:690
+#: setup.c:691
 #, c-format
 msgid "not a git repository: '%s'"
 msgstr "không phải là kho git: “%s”"
 
-#: setup.c:719 setup.c:721 setup.c:752
+#: setup.c:720 setup.c:722 setup.c:753
 #, c-format
 msgid "cannot chdir to '%s'"
 msgstr "không thể chdir (chuyển đổi thư mục) sang “%s”"
 
-#: setup.c:724 setup.c:780 setup.c:790 setup.c:829 setup.c:837
+#: setup.c:725 setup.c:781 setup.c:791 setup.c:830 setup.c:838
 msgid "cannot come back to cwd"
 msgstr "không thể quay lại cwd"
 
-#: setup.c:851
+#: setup.c:852
 #, c-format
 msgid "failed to stat '%*s%s%s'"
 msgstr "gặp lỗi khi lấy thống kê về “%*s%s%s”"
 
-#: setup.c:1083
+#: setup.c:1090
 msgid "Unable to read current working directory"
 msgstr "Không thể đọc thư mục làm việc hiện hành"
 
-#: setup.c:1092 setup.c:1098
+#: setup.c:1099 setup.c:1105
 #, c-format
 msgid "cannot change to '%s'"
 msgstr "không thể chuyển sang “%s”"
 
-#: setup.c:1103
+#: setup.c:1110
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
 msgstr "không phải là kho git (hoặc bất kỳ thư mục cha mẹ nào): %s"
 
-#: setup.c:1109
+#: setup.c:1116
 #, c-format
 msgid ""
 "not a git repository (or any parent up to mount point %s)\n"
@@ -6769,7 +6794,7 @@
 "Dừng tại biên của hệ thống tập tin (GIT_DISCOVERY_ACROSS_FILESYSTEM chưa "
 "đặt)."
 
-#: setup.c:1220
+#: setup.c:1227
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -6778,284 +6803,284 @@
 "gặp vấn đề với giá trị chế độ tập tin core.sharedRepository (0%.3o).\n"
 "người sở hữu tập tin phải luôn có quyền đọc và ghi."
 
-#: setup.c:1264
+#: setup.c:1271
 msgid "open /dev/null or dup failed"
 msgstr "gặp lỗi khi mở “/dev/null” hay dup"
 
-#: setup.c:1279
+#: setup.c:1286
 msgid "fork failed"
 msgstr "gặp lỗi khi rẽ nhánh tiến trình"
 
-#: setup.c:1284
+#: setup.c:1291
 msgid "setsid failed"
 msgstr "setsid gặp lỗi"
 
-#: sha1-file.c:453
+#: sha1-file.c:452
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr ""
 "thư mục đối tượng %s không tồn tại; kiểm tra .git/objects/info/alternates"
 
-#: sha1-file.c:504
+#: sha1-file.c:503
 #, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr "không thể thường hóa đường dẫn đối tượng thay thế: “%s”"
 
-#: sha1-file.c:576
+#: sha1-file.c:575
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr "%s: đang bỏ qua kho đối tượng thay thế, lồng nhau quá sâu"
 
-#: sha1-file.c:583
+#: sha1-file.c:582
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr "không thể chuẩn hóa thư mục đối tượng: “%s”"
 
-#: sha1-file.c:626
+#: sha1-file.c:625
 msgid "unable to fdopen alternates lockfile"
 msgstr "không thể fdopen tập tin khóa thay thế"
 
-#: sha1-file.c:644
+#: sha1-file.c:643
 msgid "unable to read alternates file"
 msgstr "không thể đọc tập tin thay thế"
 
-#: sha1-file.c:651
+#: sha1-file.c:650
 msgid "unable to move new alternates file into place"
 msgstr "không thể di chuyển tập tin thay thế vào chỗ"
 
-#: sha1-file.c:686
+#: sha1-file.c:685
 #, c-format
 msgid "path '%s' does not exist"
 msgstr "đường dẫn “%s” không tồn tại"
 
-#: sha1-file.c:712
+#: sha1-file.c:711
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr "kho tham chiếu “%s” như là lấy ra liên kết vẫn chưa được hỗ trợ."
 
-#: sha1-file.c:718
+#: sha1-file.c:717
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "kho tham chiếu “%s” không phải là một kho nội bộ."
 
-#: sha1-file.c:724
+#: sha1-file.c:723
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr "kho tham chiếu “%s” là nông"
 
-#: sha1-file.c:732
+#: sha1-file.c:731
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr "kho tham chiếu “%s” bị cấy ghép"
 
-#: sha1-file.c:792
+#: sha1-file.c:791
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr "dòng không hợp lệ trong khi phân tích các tham chiếu thay thế: %s"
 
-#: sha1-file.c:944
+#: sha1-file.c:943
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr "đang cố để mmap %<PRIuMAX> vượt quá giới hạn %<PRIuMAX>"
 
-#: sha1-file.c:969
+#: sha1-file.c:964
 msgid "mmap failed"
 msgstr "mmap gặp lỗi"
 
-#: sha1-file.c:1133
+#: sha1-file.c:1128
 #, c-format
 msgid "object file %s is empty"
 msgstr "tập tin đối tượng %s trống rỗng"
 
-#: sha1-file.c:1257 sha1-file.c:2396
+#: sha1-file.c:1252 sha1-file.c:2392
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr "đối tượng mất hỏng “%s”"
 
-#: sha1-file.c:1259 sha1-file.c:2400
+#: sha1-file.c:1254 sha1-file.c:2396
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr "gặp rác tại cuối của đối tượng bị mất “%s”"
 
-#: sha1-file.c:1301
+#: sha1-file.c:1296
 msgid "invalid object type"
 msgstr "kiểu đối tượng không hợp lệ"
 
-#: sha1-file.c:1385
+#: sha1-file.c:1380
 #, c-format
 msgid "unable to unpack %s header with --allow-unknown-type"
 msgstr "không thể giải nén phần đầu gói %s với --allow-unknown-type"
 
-#: sha1-file.c:1388
+#: sha1-file.c:1383
 #, c-format
 msgid "unable to unpack %s header"
 msgstr "không thể giải gói phần đầu %s"
 
-#: sha1-file.c:1394
+#: sha1-file.c:1389
 #, c-format
 msgid "unable to parse %s header with --allow-unknown-type"
 msgstr "không thể phân tích phần đầu gói %s với --allow-unknown-type"
 
-#: sha1-file.c:1397
+#: sha1-file.c:1392
 #, c-format
 msgid "unable to parse %s header"
 msgstr "không thể phân tích phần đầu của “%s”"
 
-#: sha1-file.c:1588
+#: sha1-file.c:1584
 #, c-format
 msgid "failed to read object %s"
 msgstr "gặp lỗi khi đọc đối tượng “%s”"
 
-#: sha1-file.c:1592
+#: sha1-file.c:1588
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr "c%s thay thế không được tìm thấy cho %s"
 
-#: sha1-file.c:1596
+#: sha1-file.c:1592
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr "đối tượng mất %s (được lưu trong %s) bị hỏng"
 
-#: sha1-file.c:1600
+#: sha1-file.c:1596
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr "đối tượng đã đóng gói %s (được lưu trong %s) bị hỏng"
 
-#: sha1-file.c:1703
+#: sha1-file.c:1699
 #, c-format
 msgid "unable to write file %s"
 msgstr "không thể ghi tập tin %s"
 
-#: sha1-file.c:1710
+#: sha1-file.c:1706
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr "không thể đặt quyền thành “%s”"
 
-#: sha1-file.c:1717
+#: sha1-file.c:1713
 msgid "file write error"
 msgstr "lỗi ghi tập tin"
 
-#: sha1-file.c:1736
+#: sha1-file.c:1732
 msgid "error when closing loose object file"
 msgstr "gặp lỗi trong khi đóng tập tin đối tượng"
 
-#: sha1-file.c:1801
+#: sha1-file.c:1797
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr ""
 "không đủ thẩm quyền để thêm một đối tượng vào cơ sở dữ liệu kho chứa %s"
 
-#: sha1-file.c:1803
+#: sha1-file.c:1799
 msgid "unable to create temporary file"
 msgstr "không thể tạo tập tin tạm thời"
 
-#: sha1-file.c:1827
+#: sha1-file.c:1823
 msgid "unable to write loose object file"
 msgstr "không thể ghi tập tin đối tượng đã mất"
 
-#: sha1-file.c:1833
+#: sha1-file.c:1829
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr "không thể xả nén đối tượng mới %s (%d)"
 
-#: sha1-file.c:1837
+#: sha1-file.c:1833
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr "deflateEnd trên đối tượng %s gặp lỗi (%d)"
 
-#: sha1-file.c:1841
+#: sha1-file.c:1837
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr "chưa rõ ràng baowir dữ liệu nguồn đối tượng không ổn định cho %s"
 
-#: sha1-file.c:1851 builtin/pack-objects.c:925
+#: sha1-file.c:1847 builtin/pack-objects.c:925
 #, c-format
 msgid "failed utime() on %s"
 msgstr "gặp lỗi utime() trên “%s”"
 
-#: sha1-file.c:1926
+#: sha1-file.c:1922
 #, c-format
 msgid "cannot read object for %s"
 msgstr "không thể đọc đối tượng cho %s"
 
-#: sha1-file.c:1966
+#: sha1-file.c:1962
 msgid "corrupt commit"
 msgstr "lần chuyển giao sai hỏng"
 
-#: sha1-file.c:1974
+#: sha1-file.c:1970
 msgid "corrupt tag"
 msgstr "thẻ sai hỏng"
 
-#: sha1-file.c:2073
+#: sha1-file.c:2069
 #, c-format
 msgid "read error while indexing %s"
 msgstr "gặp lỗi đọc khi đánh mục lục %s"
 
-#: sha1-file.c:2076
+#: sha1-file.c:2072
 #, c-format
 msgid "short read while indexing %s"
 msgstr "không đọc ngắn khi đánh mục lục %s"
 
-#: sha1-file.c:2149 sha1-file.c:2158
+#: sha1-file.c:2145 sha1-file.c:2154
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr "%s: gặp lỗi khi thêm vào cơ sở dữ liệu"
 
-#: sha1-file.c:2164
+#: sha1-file.c:2160
 #, c-format
 msgid "%s: unsupported file type"
 msgstr "%s: kiểu tập tin không được hỗ trợ"
 
-#: sha1-file.c:2188
+#: sha1-file.c:2184
 #, c-format
 msgid "%s is not a valid object"
 msgstr "%s không phải là một đối tượng hợp lệ"
 
-#: sha1-file.c:2190
+#: sha1-file.c:2186
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr "%s không phải là một đối tượng “%s” hợp lệ"
 
-#: sha1-file.c:2217 builtin/index-pack.c:155
+#: sha1-file.c:2213 builtin/index-pack.c:155
 #, c-format
 msgid "unable to open %s"
 msgstr "không thể mở %s"
 
-#: sha1-file.c:2407 sha1-file.c:2459
+#: sha1-file.c:2403 sha1-file.c:2455
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr "mã băm không khớp cho %s (cần %s)"
 
-#: sha1-file.c:2431
+#: sha1-file.c:2427
 #, c-format
 msgid "unable to mmap %s"
 msgstr "không thể mmap %s"
 
-#: sha1-file.c:2436
+#: sha1-file.c:2432
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr "không thể giải gói phần đầu của “%s”"
 
-#: sha1-file.c:2442
+#: sha1-file.c:2438
 #, c-format
 msgid "unable to parse header of %s"
 msgstr "không thể phân tích phần đầu của “%s”"
 
-#: sha1-file.c:2453
+#: sha1-file.c:2449
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr "không thể giải gói nội dung của “%s”"
 
-#: sha1-name.c:490
+#: sha1-name.c:487
 #, c-format
 msgid "short SHA1 %s is ambiguous"
 msgstr "tóm lược SHA1 %s chưa rõ ràng"
 
-#: sha1-name.c:501
+#: sha1-name.c:498
 msgid "The candidates are:"
 msgstr "Các ứng cử là:"
 
-#: sha1-name.c:800
+#: sha1-name.c:797
 msgid ""
 "Git normally never creates a ref that ends with 40 hex characters\n"
 "because it will be ignored when you just specify 40-hex. These refs\n"
@@ -7080,50 +7105,50 @@
 "bằng cách chạy lệnh \"git config advice.objectNameWarning false\""
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:821
+#: strbuf.c:822
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:823
+#: strbuf.c:824
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u GiB/giây"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:831
+#: strbuf.c:832
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:833
+#: strbuf.c:834
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u MiB/giây"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:840
+#: strbuf.c:841
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:842
+#: strbuf.c:843
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u KiB/giây"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:848
+#: strbuf.c:849
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
 msgstr[0] "%u byte"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:850
+#: strbuf.c:851
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
@@ -7242,28 +7267,28 @@
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree trả về mã không như mong đợi %d"
 
-#: submodule-config.c:232
+#: submodule-config.c:236
 #, c-format
 msgid "ignoring suspicious submodule name: %s"
 msgstr "đang lờ đi tên mô-đun-con mập mờ: %s"
 
-#: submodule-config.c:299
+#: submodule-config.c:303
 msgid "negative values not allowed for submodule.fetchjobs"
 msgstr "không cho phép giá trị âm ở submodule.fetchJobs"
 
-#: submodule-config.c:397
+#: submodule-config.c:401
 #, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
 msgstr ""
 "đang bỏ qua “%s” cái mà có thể được phiên dịch như là một tùy chọn dòng "
 "lệnh: %s"
 
-#: submodule-config.c:486
+#: submodule-config.c:490
 #, c-format
 msgid "invalid value for %s"
 msgstr "giá trị cho %s không hợp lệ"
 
-#: submodule-config.c:755
+#: submodule-config.c:761
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr "Không thể cập nhật mục .gitmodules %s"
@@ -7298,7 +7323,7 @@
 msgid "could not read from stdin"
 msgstr "không thể đọc từ đầu vào tiêu chuẩn"
 
-#: trailer.c:1011 wrapper.c:701
+#: trailer.c:1011 wrapper.c:665
 #, c-format
 msgid "could not stat %s"
 msgstr "không thể lấy thông tin thống kê về %s"
@@ -7327,47 +7352,47 @@
 msgid "Would set upstream of '%s' to '%s' of '%s'\n"
 msgstr "Không thể đặt thượng nguồn của “%s” thành “%s” của “%s”\n"
 
-#: transport.c:142
+#: transport.c:145
 #, c-format
 msgid "could not read bundle '%s'"
 msgstr "không thể đọc bó “%s”"
 
-#: transport.c:208
+#: transport.c:214
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr "vận chuyển: tùy chọn độ sâu “%s” không hợp lệ"
 
-#: transport.c:259
+#: transport.c:266
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "xem protocol.version trong “git help config” để có thêm thông tin"
 
-#: transport.c:260
+#: transport.c:267
 msgid "server options require protocol version 2 or later"
 msgstr "các tùy chọn máy chủ yêu cầu giao thức phiên bản 2 hoặc mới hơn"
 
-#: transport.c:625
+#: transport.c:632
 msgid "could not parse transport.color.* config"
 msgstr "không thể phân tích cú pháp cấu hình transport.color.*"
 
-#: transport.c:698
+#: transport.c:705
 msgid "support for protocol v2 not implemented yet"
 msgstr "việc hỗ trợ giao thức v2 chưa được thực hiện"
 
-#: transport.c:825
+#: transport.c:831
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "không hiểu giá trị cho cho cấu hình “%s”: %s"
 
-#: transport.c:891
+#: transport.c:897
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "không cho phép phương thức vận chuyển “%s”"
 
-#: transport.c:945
+#: transport.c:949
 msgid "git-over-rsync is no longer supported"
 msgstr "git-over-rsync không còn được hỗ trợ nữa"
 
-#: transport.c:1040
+#: transport.c:1044
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -7376,7 +7401,7 @@
 "Các đường dẫn mô-đun-con sau đây có chứa các thay đổi cái mà\n"
 "có thể được tìm thấy trên mọi máy phục vụ:\n"
 
-#: transport.c:1044
+#: transport.c:1048
 #, c-format
 msgid ""
 "\n"
@@ -7403,32 +7428,32 @@
 "để đẩy chúng lên máy phục vụ.\n"
 "\n"
 
-#: transport.c:1052
+#: transport.c:1056
 msgid "Aborting."
 msgstr "Bãi bỏ."
 
-#: transport.c:1193
+#: transport.c:1201
 msgid "failed to push all needed submodules"
 msgstr "gặp lỗi khi đẩy dữ liệu của tất cả các mô-đun-con cần thiết"
 
-#: transport.c:1340 transport-helper.c:645
+#: transport.c:1345 transport-helper.c:655
 msgid "operation not supported by protocol"
 msgstr "thao tác không được gia thức hỗ trợ"
 
-#: transport-helper.c:51 transport-helper.c:80
+#: transport-helper.c:61 transport-helper.c:90
 msgid "full write to remote helper failed"
 msgstr "ghi đầy đủ lên bộ hỗ trợ máy chủ gặp lỗi"
 
-#: transport-helper.c:134
+#: transport-helper.c:144
 #, c-format
 msgid "unable to find remote helper for '%s'"
 msgstr "không thể tìm thấy bộ hỗ trợ máy chủ cho “%s”"
 
-#: transport-helper.c:150 transport-helper.c:559
+#: transport-helper.c:160 transport-helper.c:569
 msgid "can't dup helper output fd"
 msgstr "không thể nhân đôi fd dầu ra bộ hỗ trợ"
 
-#: transport-helper.c:201
+#: transport-helper.c:211
 #, c-format
 msgid ""
 "unknown mandatory capability %s; this remote helper probably needs newer "
@@ -7437,99 +7462,104 @@
 "không hiểu capability bắt buộc %s; bộ hỗ trợ máy chủ này gần như chắc chắn "
 "là cần phiên bản Git mới hơn"
 
-#: transport-helper.c:207
+#: transport-helper.c:217
 msgid "this remote helper should implement refspec capability"
 msgstr "bộ hỗ trợ máy chủ này cần phải thực thi capability đặc tả tham chiếu"
 
-#: transport-helper.c:274 transport-helper.c:414
+#: transport-helper.c:284 transport-helper.c:424
 #, c-format
 msgid "%s unexpectedly said: '%s'"
 msgstr "%s said bất ngờ: “%s”"
 
-#: transport-helper.c:403
+#: transport-helper.c:413
 #, c-format
 msgid "%s also locked %s"
 msgstr "%s cũng khóa %s"
 
-#: transport-helper.c:481
+#: transport-helper.c:491
 msgid "couldn't run fast-import"
 msgstr "không thể chạy fast-import"
 
-#: transport-helper.c:504
+#: transport-helper.c:514
 msgid "error while running fast-import"
 msgstr "gặp lỗi trong khi chạy fast-import"
 
-#: transport-helper.c:533 transport-helper.c:1105
+#: transport-helper.c:543 transport-helper.c:1132
 #, c-format
 msgid "could not read ref %s"
 msgstr "không thể đọc tham chiếu %s"
 
-#: transport-helper.c:578
+#: transport-helper.c:588
 #, c-format
 msgid "unknown response to connect: %s"
 msgstr "không hiểu đáp ứng để kết nối: %s"
 
-#: transport-helper.c:600
+#: transport-helper.c:610
 msgid "setting remote service path not supported by protocol"
 msgstr "giao thức này không hỗ trợ cài đặt đường dẫn dịch vụ máy chủ"
 
-#: transport-helper.c:602
+#: transport-helper.c:612
 msgid "invalid remote service path"
 msgstr "đường dẫn dịch vụ máy chủ không hợp lệ"
 
-#: transport-helper.c:648
+#: transport-helper.c:658
 #, c-format
 msgid "can't connect to subservice %s"
 msgstr "không thể kết nối đến dịch vụ phụ %s"
 
-#: transport-helper.c:720
+#: transport-helper.c:734
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "cần ok/error, nhưng bộ hỗ trợ lại nói “%s”"
 
-#: transport-helper.c:773
+#: transport-helper.c:787
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "bộ hỗ trợ báo cáo rằng không cần tình trạng của %s"
 
-#: transport-helper.c:834
+#: transport-helper.c:848
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "helper %s không hỗ trợ dry-run"
 
-#: transport-helper.c:837
+#: transport-helper.c:851
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "helper %s không hỗ trợ --signed"
 
-#: transport-helper.c:840
+#: transport-helper.c:854
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "helper %s không hỗ trợ --signed=if-asked"
 
-#: transport-helper.c:847
+#: transport-helper.c:859
+#, c-format
+msgid "helper %s does not support --atomic"
+msgstr "helper %s không hỗ trợ --atomic"
+
+#: transport-helper.c:865
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "helper %s không hỗ trợ “push-option”"
 
-#: transport-helper.c:945
+#: transport-helper.c:963
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr "remote-helper không hỗ trợ push; cần đặc tả tham chiếu"
 
-#: transport-helper.c:950
+#: transport-helper.c:968
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "helper %s không hỗ trợ “force”"
 
-#: transport-helper.c:997
+#: transport-helper.c:1015
 msgid "couldn't run fast-export"
 msgstr "không thể chạy fast-export"
 
-#: transport-helper.c:1002
+#: transport-helper.c:1020
 msgid "error while running fast-export"
 msgstr "gặp lỗi trong khi chạy fast-export"
 
-#: transport-helper.c:1027
+#: transport-helper.c:1045
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -7539,47 +7569,47 @@
 "cả.\n"
 "Tuy nhiên bạn nên chỉ định một nhánh như “master” chẳng hạn.\n"
 
-#: transport-helper.c:1091
+#: transport-helper.c:1118
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "đáp ứng sai dạng trong danh sách tham chiếu: %s"
 
-#: transport-helper.c:1244
+#: transport-helper.c:1270
 #, c-format
 msgid "read(%s) failed"
 msgstr "read(%s) gặp lỗi"
 
-#: transport-helper.c:1271
+#: transport-helper.c:1297
 #, c-format
 msgid "write(%s) failed"
 msgstr "write(%s) gặp lỗi"
 
-#: transport-helper.c:1320
+#: transport-helper.c:1346
 #, c-format
 msgid "%s thread failed"
 msgstr "tuyến trình %s gặp lỗi"
 
-#: transport-helper.c:1324
+#: transport-helper.c:1350
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "tuyến trình %s gặp lỗi khi gia nhập: %s"
 
-#: transport-helper.c:1343 transport-helper.c:1347
+#: transport-helper.c:1369 transport-helper.c:1373
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "không thể khởi chạy tuyến trình để sao chép dữ liệu: %s"
 
-#: transport-helper.c:1384
+#: transport-helper.c:1410
 #, c-format
 msgid "%s process failed to wait"
 msgstr "xử lý %s gặp lỗi khi đợi"
 
-#: transport-helper.c:1388
+#: transport-helper.c:1414
 #, c-format
 msgid "%s process failed"
 msgstr "xử lý %s gặp lỗi"
 
-#: transport-helper.c:1406 transport-helper.c:1415
+#: transport-helper.c:1432 transport-helper.c:1441
 msgid "can't start thread for copying data"
 msgstr "không thể khởi chạy tuyến trình cho việc chép dữ liệu"
 
@@ -7599,7 +7629,7 @@
 msgid "too-short tree file"
 msgstr "tập tin cây quá ngắn"
 
-#: unpack-trees.c:111
+#: unpack-trees.c:110
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -7610,7 +7640,7 @@
 "%%sVui lòng chuyển giao các thay đổi hay tạm cất chúng đi trước khi bạn "
 "chuyển nhánh."
 
-#: unpack-trees.c:113
+#: unpack-trees.c:112
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -7620,7 +7650,7 @@
 "checkout:\n"
 "%%s"
 
-#: unpack-trees.c:116
+#: unpack-trees.c:115
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -7631,7 +7661,7 @@
 "%%sVui lòng chuyển giao các thay đổi hay tạm cất chúng đi trước khi bạn hòa "
 "trộn."
 
-#: unpack-trees.c:118
+#: unpack-trees.c:117
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -7641,7 +7671,7 @@
 "hòa trộn:\n"
 "%%s"
 
-#: unpack-trees.c:121
+#: unpack-trees.c:120
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -7651,7 +7681,7 @@
 "%s:\n"
 "%%sVui lòng chuyển giao các thay đổi hay tạm cất chúng đi trước khi bạn %s."
 
-#: unpack-trees.c:123
+#: unpack-trees.c:122
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -7661,7 +7691,7 @@
 "%s:\n"
 "%%s"
 
-#: unpack-trees.c:128
+#: unpack-trees.c:127
 #, c-format
 msgid ""
 "Updating the following directories would lose untracked files in them:\n"
@@ -7671,7 +7701,7 @@
 "trong nó:\n"
 "%s"
 
-#: unpack-trees.c:132
+#: unpack-trees.c:131
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -7681,7 +7711,7 @@
 "checkout:\n"
 "%%sVui lòng di chuyển hay gỡ bỏ chúng trước khi bạn chuyển nhánh."
 
-#: unpack-trees.c:134
+#: unpack-trees.c:133
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -7691,7 +7721,7 @@
 "checkout:\n"
 "%%s"
 
-#: unpack-trees.c:137
+#: unpack-trees.c:136
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -7701,7 +7731,7 @@
 "trộn:\n"
 "%%sVui lòng di chuyển hay gỡ bỏ chúng trước khi bạn hòa trộn."
 
-#: unpack-trees.c:139
+#: unpack-trees.c:138
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -7711,7 +7741,7 @@
 "trộn:\n"
 "%%s"
 
-#: unpack-trees.c:142
+#: unpack-trees.c:141
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -7720,7 +7750,7 @@
 "Các tập tin cây làm việc chưa được theo dõi sau đây sẽ bị gỡ bỏ bởi %s:\n"
 "%%sVui lòng di chuyển hay gỡ bỏ chúng trước khi bạn %s."
 
-#: unpack-trees.c:144
+#: unpack-trees.c:143
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -7729,7 +7759,7 @@
 "Các tập tin cây làm việc chưa được theo dõi sau đây sẽ bị gỡ bỏ bởi %s:\n"
 "%%s"
 
-#: unpack-trees.c:150
+#: unpack-trees.c:149
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -7740,7 +7770,7 @@
 "checkout:\n"
 "%%sVui lòng di chuyển hay gỡ bỏ chúng trước khi bạn chuyển nhánh."
 
-#: unpack-trees.c:152
+#: unpack-trees.c:151
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -7751,7 +7781,7 @@
 "checkout:\n"
 "%%s"
 
-#: unpack-trees.c:155
+#: unpack-trees.c:154
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -7761,7 +7791,7 @@
 "hòa trộn:\n"
 "%%sVui lòng di chuyển hay gỡ bỏ chúng trước khi bạn hòa trộn."
 
-#: unpack-trees.c:157
+#: unpack-trees.c:156
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -7771,7 +7801,7 @@
 "hòa trộn:\n"
 "%%s"
 
-#: unpack-trees.c:160
+#: unpack-trees.c:159
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -7781,7 +7811,7 @@
 "%s:\n"
 "%%sVui lòng di chuyển hay gỡ bỏ chúng trước khi bạn %s."
 
-#: unpack-trees.c:162
+#: unpack-trees.c:161
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -7791,12 +7821,12 @@
 "%s:\n"
 "%%s"
 
-#: unpack-trees.c:170
+#: unpack-trees.c:169
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
 msgstr "Mục “%s” đè lên “%s”. Không thể buộc."
 
-#: unpack-trees.c:173
+#: unpack-trees.c:172
 #, c-format
 msgid ""
 "Cannot update sparse checkout: the following entries are not up to date:\n"
@@ -7805,7 +7835,7 @@
 "Không thể cập nhật checkout rải rác: các mục tin sau đây chưa cập nhật:\n"
 "%s"
 
-#: unpack-trees.c:175
+#: unpack-trees.c:174
 #, c-format
 msgid ""
 "The following working tree files would be overwritten by sparse checkout "
@@ -7816,7 +7846,7 @@
 "nhật checkout rải rác:\n"
 "%s"
 
-#: unpack-trees.c:177
+#: unpack-trees.c:176
 #, c-format
 msgid ""
 "The following working tree files would be removed by sparse checkout "
@@ -7827,7 +7857,7 @@
 "nhật checkout rải rác:\n"
 "%s"
 
-#: unpack-trees.c:179
+#: unpack-trees.c:178
 #, c-format
 msgid ""
 "Cannot update submodule:\n"
@@ -7836,16 +7866,16 @@
 "Không thể cập nhật mô-đun-con:\n"
 "%s"
 
-#: unpack-trees.c:256
+#: unpack-trees.c:255
 #, c-format
 msgid "Aborting\n"
 msgstr "Bãi bỏ\n"
 
-#: unpack-trees.c:318
+#: unpack-trees.c:317
 msgid "Updating files"
 msgstr "Đang cập nhật các tập tin"
 
-#: unpack-trees.c:350
+#: unpack-trees.c:349
 msgid ""
 "the following paths have collided (e.g. case-sensitive paths\n"
 "on a case-insensitive filesystem) and only one from the same\n"
@@ -7884,7 +7914,7 @@
 msgid "invalid '..' path segment"
 msgstr "đoạn đường dẫn “..” không hợp lệ"
 
-#: worktree.c:258 builtin/am.c:2095
+#: worktree.c:258 builtin/am.c:2084
 #, c-format
 msgid "failed to read '%s'"
 msgstr "gặp lỗi khi đọc “%s”"
@@ -7915,17 +7945,17 @@
 msgid "'%s' does not point back to '%s'"
 msgstr "“%s” không chỉ ngược đến “%s”"
 
-#: wrapper.c:223 wrapper.c:393
+#: wrapper.c:186 wrapper.c:356
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr "không thể mở “%s” để đọc và ghi"
 
-#: wrapper.c:424 wrapper.c:624
+#: wrapper.c:387 wrapper.c:588
 #, c-format
 msgid "unable to access '%s'"
 msgstr "không thể truy cập “%s”"
 
-#: wrapper.c:632
+#: wrapper.c:596
 msgid "unable to get current working directory"
 msgstr "không thể lấy thư mục làm việc hiện hành"
 
@@ -8272,83 +8302,91 @@
 "continue\")"
 
 #: wt-status.c:1437
+msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
+msgstr "  (dùng \"git cherry-pick --skip\" để bỏ qua miếng vá này)"
+
+#: wt-status.c:1439
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr "  (dùng \"git cherry-pick --abort\" để hủy bỏ thao tác cherry-pick)"
 
-#: wt-status.c:1447
+#: wt-status.c:1449
 msgid "Revert currently in progress."
 msgstr "Hoàn nguyên hiện tại đang thực hiện."
 
-#: wt-status.c:1450
+#: wt-status.c:1452
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Bạn hiện nay đang thực hiện thao tác hoàn nguyên lần chuyển giao “%s”."
 
-#: wt-status.c:1456
+#: wt-status.c:1458
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (sửa các xung đột và sau đó chạy lệnh \"git revert --continue\")"
 
-#: wt-status.c:1459
+#: wt-status.c:1461
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (chạy lệnh \"git revert --continue\" để tiếp tục)"
 
-#: wt-status.c:1462
+#: wt-status.c:1464
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr ""
 "  (khi tất cả các xung đột đã sửa xong: chạy lệnh \"git revert --continue\")"
 
-#: wt-status.c:1464
+#: wt-status.c:1466
+msgid "  (use \"git revert --skip\" to skip this patch)"
+msgstr "  (dùng lệnh \"git revert --skip\" để bỏ qua lần vá này)"
+
+#: wt-status.c:1468
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (dùng \"git revert --abort\" để hủy bỏ thao tác hoàn nguyên)"
 
-#: wt-status.c:1474
+#: wt-status.c:1478
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr ""
 "Bạn hiện nay đang thực hiện thao tác di chuyển nửa bước (bisect), bắt đầu từ "
 "nhánh “%s”."
 
-#: wt-status.c:1478
+#: wt-status.c:1482
 msgid "You are currently bisecting."
 msgstr "Bạn hiện tại đang thực hiện việc bisect (di chuyển nửa bước)."
 
-#: wt-status.c:1481
+#: wt-status.c:1485
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (dùng \"git bisect reset\" để quay trở lại nhánh nguyên thủy)"
 
-#: wt-status.c:1690
+#: wt-status.c:1694
 msgid "On branch "
 msgstr "Trên nhánh "
 
-#: wt-status.c:1697
+#: wt-status.c:1701
 msgid "interactive rebase in progress; onto "
 msgstr "rebase ở chế độ tương tác đang được thực hiện; lên trên "
 
-#: wt-status.c:1699
+#: wt-status.c:1703
 msgid "rebase in progress; onto "
 msgstr "rebase đang được thực hiện: lên trên "
 
-#: wt-status.c:1709
+#: wt-status.c:1713
 msgid "Not currently on any branch."
 msgstr "Hiện tại chẳng ở nhánh nào cả."
 
-#: wt-status.c:1726
+#: wt-status.c:1730
 msgid "Initial commit"
 msgstr "Lần chuyển giao khởi tạo"
 
-#: wt-status.c:1727
+#: wt-status.c:1731
 msgid "No commits yet"
 msgstr "Vẫn chưa chuyển giao"
 
-#: wt-status.c:1741
+#: wt-status.c:1745
 msgid "Untracked files"
 msgstr "Những tập tin chưa được theo dõi"
 
-#: wt-status.c:1743
+#: wt-status.c:1747
 msgid "Ignored files"
 msgstr "Những tập tin bị lờ đi"
 
-#: wt-status.c:1747
+#: wt-status.c:1751
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -8360,32 +8398,32 @@
 "có lẽ làm nó nhanh hơn, nhưng bạn phải cẩn thận đừng quên mình phải\n"
 "tự thêm các tập tin mới (xem “git help status”.."
 
-#: wt-status.c:1753
+#: wt-status.c:1757
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Những tập tin chưa được theo dõi không được liệt kê ra %s"
 
-#: wt-status.c:1755
+#: wt-status.c:1759
 msgid " (use -u option to show untracked files)"
 msgstr " (dùng tùy chọn -u để hiển thị các tập tin chưa được theo dõi)"
 
-#: wt-status.c:1761
+#: wt-status.c:1765
 msgid "No changes"
 msgstr "Không có thay đổi nào"
 
-#: wt-status.c:1766
+#: wt-status.c:1770
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 "không có thay đổi nào được thêm vào để chuyển giao (dùng \"git add\" và/hoặc "
 "\"git commit -a\")\n"
 
-#: wt-status.c:1769
+#: wt-status.c:1773
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "không có thay đổi nào được thêm vào để chuyển giao\n"
 
-#: wt-status.c:1772
+#: wt-status.c:1776
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -8394,73 +8432,78 @@
 "không có gì được thêm vào lần chuyển giao nhưng có những tập tin chưa được "
 "theo dõi hiện diện (dùng \"git add\" để đưa vào theo dõi)\n"
 
-#: wt-status.c:1775
+#: wt-status.c:1779
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr ""
 "không có gì được thêm vào lần chuyển giao nhưng có những tập tin chưa được "
 "theo dõi hiện diện\n"
 
-#: wt-status.c:1778
+#: wt-status.c:1782
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr ""
 "không có gì để chuyển giao (tạo/sao-chép các tập tin và dùng \"git add\" để "
 "đưa vào theo dõi)\n"
 
-#: wt-status.c:1781 wt-status.c:1786
+#: wt-status.c:1785 wt-status.c:1790
 #, c-format
 msgid "nothing to commit\n"
 msgstr "không có gì để chuyển giao\n"
 
-#: wt-status.c:1784
+#: wt-status.c:1788
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr ""
 "không có gì để chuyển giao (dùng -u xem các tập tin chưa được theo dõi)\n"
 
-#: wt-status.c:1788
+#: wt-status.c:1792
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "không có gì để chuyển giao, thư mục làm việc sạch sẽ\n"
 
-#: wt-status.c:1901
+#: wt-status.c:1905
 msgid "No commits yet on "
 msgstr "Vẫn không thực hiện lệnh chuyển giao nào "
 
-#: wt-status.c:1905
+#: wt-status.c:1909
 msgid "HEAD (no branch)"
 msgstr "HEAD (không nhánh)"
 
-#: wt-status.c:1936
+#: wt-status.c:1940
 msgid "different"
 msgstr "khác"
 
-#: wt-status.c:1938 wt-status.c:1946
+#: wt-status.c:1942 wt-status.c:1950
 msgid "behind "
 msgstr "đằng sau "
 
-#: wt-status.c:1941 wt-status.c:1944
+#: wt-status.c:1945 wt-status.c:1948
 msgid "ahead "
 msgstr "phía trước "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2466
+#: wt-status.c:2470
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "không thể %s: Bạn có các thay đổi chưa được đưa lên bệ phóng."
 
-#: wt-status.c:2472
+#: wt-status.c:2476
 msgid "additionally, your index contains uncommitted changes."
 msgstr ""
 "thêm vào đó, bảng mục lục của bạn có chứa các thay đổi chưa được chuyển giao."
 
-#: wt-status.c:2474
+#: wt-status.c:2478
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr ""
 "không thể %s: Mục lục của bạn có chứa các thay đổi chưa được chuyển giao."
 
+#: compat/precompose_utf8.c:58 builtin/clone.c:452
+#, c-format
+msgid "failed to unlink '%s'"
+msgstr "gặp lỗi khi bỏ liên kết (unlink) “%s”"
+
 #: builtin/add.c:25
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<các tùy chọn>] [--]  <pathspec>…"
@@ -8484,7 +8527,7 @@
 msgstr ""
 "Đưa ra khỏi bệ phóng các thay đổi sau khi làm tươi mới lại bảng mục lục:"
 
-#: builtin/add.c:234 builtin/rev-parse.c:896
+#: builtin/add.c:234 builtin/rev-parse.c:897
 msgid "Could not read the index"
 msgstr "Không thể đọc bảng mục lục"
 
@@ -8521,8 +8564,8 @@
 "Các đường dẫn theo sau đây sẽ bị lờ đi bởi một trong các tập tin .gitignore "
 "của bạn:\n"
 
-#: builtin/add.c:290 builtin/clean.c:909 builtin/fetch.c:147 builtin/mv.c:124
-#: builtin/prune-packed.c:56 builtin/pull.c:222 builtin/push.c:560
+#: builtin/add.c:290 builtin/clean.c:910 builtin/fetch.c:162 builtin/mv.c:124
+#: builtin/prune-packed.c:56 builtin/pull.c:223 builtin/push.c:547
 #: builtin/remote.c:1345 builtin/rm.c:241 builtin/send-pack.c:165
 msgid "dry run"
 msgstr "chạy thử"
@@ -8579,7 +8622,7 @@
 msgstr ""
 "kiểm tra xem - thậm chí thiếu - tập tin bị bỏ qua trong quá trình chạy thử"
 
-#: builtin/add.c:309 builtin/update-index.c:1001
+#: builtin/add.c:309 builtin/update-index.c:1002
 msgid "override the executable bit of the listed files"
 msgstr "ghi đè lên bít thi hành của các tập tin được liệt kê"
 
@@ -8655,113 +8698,109 @@
 msgid "Maybe you wanted to say 'git add .'?\n"
 msgstr "Có lẽ ý bạn là “git add .” phải không?\n"
 
-#: builtin/am.c:348
+#: builtin/am.c:347
 msgid "could not parse author script"
 msgstr "không thể phân tích cú pháp văn lệnh tác giả"
 
-#: builtin/am.c:432
+#: builtin/am.c:431
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "“%s” bị xóa bởi móc applypatch-msg"
 
-#: builtin/am.c:474
+#: builtin/am.c:473
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Dòng đầu vào dị hình: “%s”."
 
-#: builtin/am.c:512
+#: builtin/am.c:511
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Gặp lỗi khi sao chép ghi chú (note) từ “%s” tới “%s”"
 
-#: builtin/am.c:538
+#: builtin/am.c:537
 msgid "fseek failed"
 msgstr "fseek gặp lỗi"
 
-#: builtin/am.c:726
+#: builtin/am.c:725
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "không thể phân tích cú pháp “%s”"
 
-#: builtin/am.c:791
+#: builtin/am.c:790
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Chỉ có một sê-ri miếng vá StGIT được áp dụng một lúc"
 
-#: builtin/am.c:839
+#: builtin/am.c:838
 msgid "invalid timestamp"
 msgstr "dấu thời gian không hợp lệ"
 
-#: builtin/am.c:844 builtin/am.c:856
+#: builtin/am.c:843 builtin/am.c:855
 msgid "invalid Date line"
 msgstr "dòng Ngày tháng không hợp lệ"
 
-#: builtin/am.c:851
+#: builtin/am.c:850
 msgid "invalid timezone offset"
 msgstr "độ lệch múi giờ không hợp lệ"
 
-#: builtin/am.c:944
+#: builtin/am.c:943
 msgid "Patch format detection failed."
 msgstr "Dò tìm định dạng miếng vá gặp lỗi."
 
-#: builtin/am.c:949 builtin/clone.c:407
+#: builtin/am.c:948 builtin/clone.c:406
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "tạo thư mục \"%s\" gặp lỗi"
 
-#: builtin/am.c:954
+#: builtin/am.c:953
 msgid "Failed to split patches."
 msgstr "Gặp lỗi khi chia nhỏ các miếng vá."
 
-#: builtin/am.c:1084 builtin/commit.c:374
-msgid "unable to write index file"
-msgstr "không thể ghi tập tin lưu mục lục"
-
-#: builtin/am.c:1098
+#: builtin/am.c:1084
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "Khi bạn đã phân giải xong trục trặc này, hãy chạy \"%s --continue\"."
 
-#: builtin/am.c:1099
+#: builtin/am.c:1085
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr ""
 "Nếu bạn muốn bỏ qua miếng vá này, hãy chạy lệnh \"%s --skip\" để thay thế."
 
-#: builtin/am.c:1100
+#: builtin/am.c:1086
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr "Để phục hồi lại nhánh gốc và dừng vá, hãy chạy \"%s --abort\"."
 
-#: builtin/am.c:1183
+#: builtin/am.c:1169
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 "Miếng vá được gửi với format=flowed; khoảng trống ở cuối của các dòng có thể "
 "bị mất."
 
-#: builtin/am.c:1211
+#: builtin/am.c:1197
 msgid "Patch is empty."
 msgstr "Miếng vá trống rỗng."
 
-#: builtin/am.c:1277
+#: builtin/am.c:1262
+#, c-format
+msgid "missing author line in commit %s"
+msgstr "thiếu dòng tác giả trong lần chuyển gia %s"
+
+#: builtin/am.c:1265
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "dòng thụt lề không hợp lệ: %.*s"
 
-#: builtin/am.c:1299
-#, c-format
-msgid "unable to parse commit %s"
-msgstr "không thể phân tích lần chuyển giao “%s”"
-
-#: builtin/am.c:1496
+#: builtin/am.c:1484
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr "Kho thiếu đối tượng blob cần thiết để trở về trên “3-way merge”."
 
-#: builtin/am.c:1498
+#: builtin/am.c:1486
 msgid "Using index info to reconstruct a base tree..."
 msgstr ""
 "Sử dụng thông tin trong bảng mục lục để cấu trúc lại một cây (tree) cơ sở…"
 
-#: builtin/am.c:1517
+#: builtin/am.c:1505
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -8769,24 +8808,24 @@
 "Bạn đã sửa miếng vá của mình bằng cách thủ công à?\n"
 "Nó không thể áp dụng các blob đã được ghi lại trong bảng mục lục của nó."
 
-#: builtin/am.c:1523
+#: builtin/am.c:1511
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "Đang trở lại để vá cơ sở và “hòa trộn 3-đường”…"
 
-#: builtin/am.c:1549
+#: builtin/am.c:1537
 msgid "Failed to merge in the changes."
 msgstr "Gặp lỗi khi trộn vào các thay đổi."
 
-#: builtin/am.c:1581
+#: builtin/am.c:1569
 msgid "applying to an empty history"
 msgstr "áp dụng vào một lịch sử trống rỗng"
 
-#: builtin/am.c:1628 builtin/am.c:1632
+#: builtin/am.c:1616 builtin/am.c:1620
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "không thể phục hồi: %s không tồn tại."
 
-#: builtin/am.c:1650
+#: builtin/am.c:1638
 msgid "Commit Body is:"
 msgstr "Thân của lần chuyển giao là:"
 
@@ -8794,37 +8833,41 @@
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1660
+#: builtin/am.c:1648
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr ""
 "Áp dụng? đồng ý [y]/khô[n]g/chỉnh sửa [e]/hiển thị miếng [v]á/chấp nhận tất "
 "cả [a]: "
 
-#: builtin/am.c:1710
+#: builtin/am.c:1695 builtin/commit.c:374
+msgid "unable to write index file"
+msgstr "không thể ghi tập tin lưu mục lục"
+
+#: builtin/am.c:1699
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Bảng mục lục bẩn: không thể áp dụng các miếng vá (bẩn: %s)"
 
-#: builtin/am.c:1750 builtin/am.c:1818
+#: builtin/am.c:1739 builtin/am.c:1807
 #, c-format
 msgid "Applying: %.*s"
 msgstr "Áp dụng: %.*s"
 
-#: builtin/am.c:1767
+#: builtin/am.c:1756
 msgid "No changes -- Patch already applied."
 msgstr "Không thay đổi gì cả -- Miếng vá đã được áp dụng rồi."
 
-#: builtin/am.c:1773
+#: builtin/am.c:1762
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "Gặp lỗi khi vá tại %s %.*s"
 
-#: builtin/am.c:1777
+#: builtin/am.c:1766
 msgid "Use 'git am --show-current-patch' to see the failed patch"
 msgstr "Dùng “git am --show-current-patch” để xem miếng vá bị lỗi"
 
-#: builtin/am.c:1821
+#: builtin/am.c:1810
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -8835,7 +8878,7 @@
 "đã sẵn được đưa vào với cùng nội dung thay đổi; bạn có lẽ muốn bỏ qua miếng "
 "vá này."
 
-#: builtin/am.c:1828
+#: builtin/am.c:1817
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -8848,17 +8891,17 @@
 "Bạn có lẽ muốn chạy “git rm“ trên một tập tin để chấp nhận \"được xóa bởi họ"
 "\" cho nó."
 
-#: builtin/am.c:1935 builtin/am.c:1939 builtin/am.c:1951 builtin/reset.c:329
+#: builtin/am.c:1924 builtin/am.c:1928 builtin/am.c:1940 builtin/reset.c:329
 #: builtin/reset.c:337
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "Không thể phân tích đối tượng “%s”."
 
-#: builtin/am.c:1987
+#: builtin/am.c:1976
 msgid "failed to clean index"
 msgstr "gặp lỗi khi dọn bảng mục lục"
 
-#: builtin/am.c:2031
+#: builtin/am.c:2020
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -8866,144 +8909,144 @@
 "Bạn có lẽ đã có HEAD đã bị di chuyển đi kể từ lần “am” thất bại cuối cùng.\n"
 "Không thể chuyển tới ORIG_HEAD"
 
-#: builtin/am.c:2128
+#: builtin/am.c:2117
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr "Giá trị không hợp lệ cho --patch-format: %s"
 
-#: builtin/am.c:2164
+#: builtin/am.c:2153
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<các tùy chọn>] [(<mbox>|<Maildir>)…]"
 
-#: builtin/am.c:2165
+#: builtin/am.c:2154
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<các tùy chọn>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2171
+#: builtin/am.c:2160
 msgid "run interactively"
 msgstr "chạy kiểu tương tác"
 
-#: builtin/am.c:2173
+#: builtin/am.c:2162
 msgid "historical option -- no-op"
 msgstr "tùy chọn lịch sử -- không-toán-tử"
 
-#: builtin/am.c:2175
+#: builtin/am.c:2164
 msgid "allow fall back on 3way merging if needed"
 msgstr "cho phép quay trở lại để hòa trộn kiểu “3way” nếu cần"
 
-#: builtin/am.c:2176 builtin/init-db.c:494 builtin/prune-packed.c:58
-#: builtin/repack.c:296 builtin/stash.c:806
+#: builtin/am.c:2165 builtin/init-db.c:494 builtin/prune-packed.c:58
+#: builtin/repack.c:297 builtin/stash.c:812
 msgid "be quiet"
 msgstr "im lặng"
 
-#: builtin/am.c:2178
+#: builtin/am.c:2167
 msgid "add a Signed-off-by line to the commit message"
 msgstr "thêm dòng Signed-off-by cho ghi chú của lần chuyển giao"
 
-#: builtin/am.c:2181
+#: builtin/am.c:2170
 msgid "recode into utf8 (default)"
 msgstr "chuyển mã thành utf8 (mặc định)"
 
-#: builtin/am.c:2183
+#: builtin/am.c:2172
 msgid "pass -k flag to git-mailinfo"
 msgstr "chuyển cờ -k cho git-mailinfo"
 
-#: builtin/am.c:2185
+#: builtin/am.c:2174
 msgid "pass -b flag to git-mailinfo"
 msgstr "chuyển cờ -b cho git-mailinfo"
 
-#: builtin/am.c:2187
+#: builtin/am.c:2176
 msgid "pass -m flag to git-mailinfo"
 msgstr "chuyển cờ -m cho git-mailinfo"
 
-#: builtin/am.c:2189
+#: builtin/am.c:2178
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "chuyển cờ --keep-cr cho git-mailsplit với định dạng mbox"
 
-#: builtin/am.c:2192
+#: builtin/am.c:2181
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr ""
 "đừng chuyển cờ --keep-cr cho git-mailsplit không phụ thuộc vào am.keepcr"
 
-#: builtin/am.c:2195
+#: builtin/am.c:2184
 msgid "strip everything before a scissors line"
 msgstr "cắt mọi thứ trước dòng scissors"
 
-#: builtin/am.c:2197 builtin/am.c:2200 builtin/am.c:2203 builtin/am.c:2206
-#: builtin/am.c:2209 builtin/am.c:2212 builtin/am.c:2215 builtin/am.c:2218
-#: builtin/am.c:2224
+#: builtin/am.c:2186 builtin/am.c:2189 builtin/am.c:2192 builtin/am.c:2195
+#: builtin/am.c:2198 builtin/am.c:2201 builtin/am.c:2204 builtin/am.c:2207
+#: builtin/am.c:2213
 msgid "pass it through git-apply"
 msgstr "chuyển nó qua git-apply"
 
-#: builtin/am.c:2214 builtin/commit.c:1368 builtin/fmt-merge-msg.c:671
-#: builtin/fmt-merge-msg.c:674 builtin/grep.c:881 builtin/merge.c:249
-#: builtin/pull.c:159 builtin/pull.c:218 builtin/rebase.c:1418
-#: builtin/repack.c:307 builtin/repack.c:311 builtin/repack.c:313
+#: builtin/am.c:2203 builtin/commit.c:1368 builtin/fmt-merge-msg.c:671
+#: builtin/fmt-merge-msg.c:674 builtin/grep.c:883 builtin/merge.c:249
+#: builtin/pull.c:160 builtin/pull.c:219 builtin/rebase.c:1442
+#: builtin/repack.c:308 builtin/repack.c:312 builtin/repack.c:314
 #: builtin/show-branch.c:650 builtin/show-ref.c:172 builtin/tag.c:403
-#: parse-options.h:141 parse-options.h:162 parse-options.h:312
+#: parse-options.h:150 parse-options.h:171 parse-options.h:312
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2220 builtin/branch.c:661 builtin/for-each-ref.c:38
-#: builtin/replace.c:554 builtin/tag.c:437 builtin/verify-tag.c:38
+#: builtin/am.c:2209 builtin/branch.c:661 builtin/for-each-ref.c:38
+#: builtin/replace.c:555 builtin/tag.c:437 builtin/verify-tag.c:38
 msgid "format"
 msgstr "định dạng"
 
-#: builtin/am.c:2221
+#: builtin/am.c:2210
 msgid "format the patch(es) are in"
 msgstr "định dạng (các) miếng vá theo"
 
-#: builtin/am.c:2227
+#: builtin/am.c:2216
 msgid "override error message when patch failure occurs"
 msgstr "đè lên các lời nhắn lỗi khi xảy ra lỗi vá nghiêm trọng"
 
-#: builtin/am.c:2229
+#: builtin/am.c:2218
 msgid "continue applying patches after resolving a conflict"
 msgstr "tiếp tục áp dụng các miếng vá sau khi giải quyết xung đột"
 
-#: builtin/am.c:2232
+#: builtin/am.c:2221
 msgid "synonyms for --continue"
 msgstr "đồng nghĩa với --continue"
 
-#: builtin/am.c:2235
+#: builtin/am.c:2224
 msgid "skip the current patch"
 msgstr "bỏ qua miếng vá hiện hành"
 
-#: builtin/am.c:2238
+#: builtin/am.c:2227
 msgid "restore the original branch and abort the patching operation."
 msgstr "phục hồi lại nhánh gốc và loại bỏ thao tác vá."
 
-#: builtin/am.c:2241
+#: builtin/am.c:2230
 msgid "abort the patching operation but keep HEAD where it is."
 msgstr "bỏ qua thao tác vá nhưng vẫn giữ HEAD chỉ đến nó."
 
-#: builtin/am.c:2244
+#: builtin/am.c:2233
 msgid "show the patch being applied."
 msgstr "hiển thị miếng vá đã được áp dụng rồi."
 
-#: builtin/am.c:2248
+#: builtin/am.c:2237
 msgid "lie about committer date"
 msgstr "nói dối về ngày chuyển giao"
 
-#: builtin/am.c:2250
+#: builtin/am.c:2239
 msgid "use current timestamp for author date"
 msgstr "dùng dấu thời gian hiện tại cho ngày tác giả"
 
-#: builtin/am.c:2252 builtin/commit-tree.c:120 builtin/commit.c:1511
-#: builtin/merge.c:286 builtin/pull.c:193 builtin/rebase.c:489
-#: builtin/rebase.c:1459 builtin/revert.c:117 builtin/tag.c:418
+#: builtin/am.c:2241 builtin/commit-tree.c:120 builtin/commit.c:1511
+#: builtin/merge.c:286 builtin/pull.c:194 builtin/rebase.c:490
+#: builtin/rebase.c:1483 builtin/revert.c:117 builtin/tag.c:418
 msgid "key-id"
 msgstr "mã-số-khóa"
 
-#: builtin/am.c:2253 builtin/rebase.c:490 builtin/rebase.c:1460
+#: builtin/am.c:2242 builtin/rebase.c:491 builtin/rebase.c:1484
 msgid "GPG-sign commits"
 msgstr "Các lần chuyển giao ký-GPG"
 
-#: builtin/am.c:2256
+#: builtin/am.c:2245
 msgid "(internal use for git-rebase)"
 msgstr "(dùng nội bộ cho git-rebase)"
 
-#: builtin/am.c:2274
+#: builtin/am.c:2263
 msgid ""
 "The -b/--binary option has been a no-op for long time, and\n"
 "it will be removed. Please do not use it anymore."
@@ -9011,16 +9054,16 @@
 "Tùy chọn -b/--binary đã không dùng từ lâu rồi, và\n"
 "nó sẽ được bỏ đi. Xin đừng sử dụng nó thêm nữa."
 
-#: builtin/am.c:2281
+#: builtin/am.c:2270
 msgid "failed to read the index"
 msgstr "gặp lỗi đọc bảng mục lục"
 
-#: builtin/am.c:2296
+#: builtin/am.c:2285
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr "thư mục rebase trước %s không sẵn có nhưng mbox lại đưa ra."
 
-#: builtin/am.c:2320
+#: builtin/am.c:2309
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -9029,11 +9072,11 @@
 "Tìm thấy thư mục lạc %s.\n"
 "Dùng \"git am --abort\" để loại bỏ nó đi."
 
-#: builtin/am.c:2326
+#: builtin/am.c:2315
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "Thao tác phân giải không được tiến hành, chúng ta không phục hồi lại."
 
-#: builtin/am.c:2336
+#: builtin/am.c:2325
 msgid "interactive mode requires patches on the command line"
 msgstr "chế độ tương tác yêu cầu có các miếng vá trên dòng lênh"
 
@@ -9349,156 +9392,156 @@
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms cần 0 hoặc 1 tham số"
 
-#: builtin/blame.c:32
+#: builtin/blame.c:31
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
 msgstr "git blame [<các tùy chọn>] [<rev-opts>] [<rev>] [--] <tập-tin>"
 
-#: builtin/blame.c:37
+#: builtin/blame.c:36
 msgid "<rev-opts> are documented in git-rev-list(1)"
 msgstr "<rev-opts> được mô tả trong tài liệu git-rev-list(1)"
 
-#: builtin/blame.c:410
+#: builtin/blame.c:409
 #, c-format
 msgid "expecting a color: %s"
 msgstr "cần một màu: %s"
 
-#: builtin/blame.c:417
+#: builtin/blame.c:416
 msgid "must end with a color"
 msgstr "phải kết thúc bằng một màu"
 
-#: builtin/blame.c:730
+#: builtin/blame.c:729
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr "màu không hợp lệ “%s” trong color.blame.repeatedLines"
 
-#: builtin/blame.c:748
+#: builtin/blame.c:747
 msgid "invalid value for blame.coloring"
 msgstr "màu không hợp lệ cho blame.coloring"
 
-#: builtin/blame.c:823
+#: builtin/blame.c:822
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "không thể tìm thấy điểm xét duyệt %s để mà bỏ qua"
 
-#: builtin/blame.c:845
+#: builtin/blame.c:844
 msgid "Show blame entries as we find them, incrementally"
 msgstr "Hiển thị các mục “blame” như là chúng ta thấy chúng, tăng dần"
 
-#: builtin/blame.c:846
+#: builtin/blame.c:845
 msgid "Show blank SHA-1 for boundary commits (Default: off)"
 msgstr ""
 "Hiển thị SHA-1 trắng cho những lần chuyển giao biên giới (Mặc định: off)"
 
-#: builtin/blame.c:847
+#: builtin/blame.c:846
 msgid "Do not treat root commits as boundaries (Default: off)"
 msgstr "Không coi các lần chuyển giao gốc là giới hạn (Mặc định: off)"
 
-#: builtin/blame.c:848
+#: builtin/blame.c:847
 msgid "Show work cost statistics"
 msgstr "Hiển thị thống kê công sức làm việc"
 
-#: builtin/blame.c:849
+#: builtin/blame.c:848
 msgid "Force progress reporting"
 msgstr "Ép buộc báo cáo tiến triển công việc"
 
-#: builtin/blame.c:850
+#: builtin/blame.c:849
 msgid "Show output score for blame entries"
 msgstr "Hiển thị kết xuất điểm số có các mục tin “blame”"
 
-#: builtin/blame.c:851
+#: builtin/blame.c:850
 msgid "Show original filename (Default: auto)"
 msgstr "Hiển thị tên tập tin gốc (Mặc định: auto)"
 
-#: builtin/blame.c:852
+#: builtin/blame.c:851
 msgid "Show original linenumber (Default: off)"
 msgstr "Hiển thị số dòng gốc (Mặc định: off)"
 
-#: builtin/blame.c:853
+#: builtin/blame.c:852
 msgid "Show in a format designed for machine consumption"
 msgstr "Hiển thị ở định dạng đã thiết kế cho sự tiêu dùng bằng máy"
 
-#: builtin/blame.c:854
+#: builtin/blame.c:853
 msgid "Show porcelain format with per-line commit information"
 msgstr "Hiển thị định dạng “porcelain” với thông tin chuyển giao mỗi dòng"
 
-#: builtin/blame.c:855
+#: builtin/blame.c:854
 msgid "Use the same output mode as git-annotate (Default: off)"
 msgstr "Dùng cùng chế độ xuất ra với git-annotate (Mặc định: off)"
 
-#: builtin/blame.c:856
+#: builtin/blame.c:855
 msgid "Show raw timestamp (Default: off)"
 msgstr "Hiển thị dấu vết thời gian dạng thô (Mặc định: off)"
 
-#: builtin/blame.c:857
+#: builtin/blame.c:856
 msgid "Show long commit SHA1 (Default: off)"
 msgstr "Hiển thị SHA1 của lần chuyển giao dạng dài (Mặc định: off)"
 
-#: builtin/blame.c:858
+#: builtin/blame.c:857
 msgid "Suppress author name and timestamp (Default: off)"
 msgstr "Không hiển thị tên tác giả và dấu vết thời gian (Mặc định: off)"
 
-#: builtin/blame.c:859
+#: builtin/blame.c:858
 msgid "Show author email instead of name (Default: off)"
 msgstr "Hiển thị thư điện tử của tác giả thay vì tên (Mặc định: off)"
 
-#: builtin/blame.c:860
+#: builtin/blame.c:859
 msgid "Ignore whitespace differences"
 msgstr "Bỏ qua các khác biệt do khoảng trắng gây ra"
 
-#: builtin/blame.c:861 builtin/log.c:1629
+#: builtin/blame.c:860 builtin/log.c:1630
 msgid "rev"
 msgstr "rev"
 
-#: builtin/blame.c:861
+#: builtin/blame.c:860
 msgid "Ignore <rev> when blaming"
-msgstr "bỏ qua <rev> khi blame"
+msgstr "Bỏ qua <rev> khi blame"
 
-#: builtin/blame.c:862
+#: builtin/blame.c:861
 msgid "Ignore revisions from <file>"
 msgstr "Bỏ qua các điểm xét duyệt từ <tập tin>"
 
-#: builtin/blame.c:863
+#: builtin/blame.c:862
 msgid "color redundant metadata from previous line differently"
 msgstr "siêu dữ liệu dư thừa màu từ dòng trước khác hẳn"
 
-#: builtin/blame.c:864
+#: builtin/blame.c:863
 msgid "color lines by age"
 msgstr "các dòng màu theo tuổi"
 
-#: builtin/blame.c:871
+#: builtin/blame.c:870
 msgid "Use an experimental heuristic to improve diffs"
 msgstr "Dùng một phỏng đoán thử nghiệm để tăng cường các diff"
 
-#: builtin/blame.c:873
+#: builtin/blame.c:872
 msgid "Spend extra cycles to find better match"
 msgstr "Tiêu thụ thêm năng tài nguyên máy móc để tìm kiếm tốt hơn nữa"
 
-#: builtin/blame.c:874
+#: builtin/blame.c:873
 msgid "Use revisions from <file> instead of calling git-rev-list"
 msgstr ""
 "Sử dụng điểm xét duyệt (revision) từ <tập tin> thay vì gọi “git-rev-list”"
 
-#: builtin/blame.c:875
+#: builtin/blame.c:874
 msgid "Use <file>'s contents as the final image"
 msgstr "Sử dụng nội dung của <tập tin> như là ảnh cuối cùng"
 
-#: builtin/blame.c:876 builtin/blame.c:877
+#: builtin/blame.c:875 builtin/blame.c:876
 msgid "score"
 msgstr "điểm số"
 
-#: builtin/blame.c:876
+#: builtin/blame.c:875
 msgid "Find line copies within and across files"
 msgstr "Tìm các bản sao chép dòng trong và ngang qua tập tin"
 
-#: builtin/blame.c:877
+#: builtin/blame.c:876
 msgid "Find line movements within and across files"
 msgstr "Tìm các di chuyển dòng trong và ngang qua tập tin"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:877
 msgid "n,m"
 msgstr "n,m"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:877
 msgid "Process only line range n,m, counting from 1"
 msgstr "Xử lý chỉ dòng vùng n,m, tính từ 1"
 
@@ -9734,7 +9777,7 @@
 msgid "do not use"
 msgstr "không dùng"
 
-#: builtin/branch.c:626 builtin/rebase.c:485
+#: builtin/branch.c:626 builtin/rebase.c:486
 msgid "upstream"
 msgstr "thượng nguồn"
 
@@ -9845,7 +9888,7 @@
 msgid "format to use for the output"
 msgstr "định dạng sẽ dùng cho đầu ra"
 
-#: builtin/branch.c:684 builtin/clone.c:761
+#: builtin/branch.c:684 builtin/clone.c:760
 msgid "HEAD not found below refs/heads!"
 msgstr "Không tìm thấy HEAD ở dưới refs/heads!"
 
@@ -9948,7 +9991,7 @@
 msgid "Need a repository to unbundle."
 msgstr "Cần một kho chứa để có thể giải nén một bundle."
 
-#: builtin/cat-file.c:594
+#: builtin/cat-file.c:595
 msgid ""
 "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
 "p | <type> | --textconv | --filters) [--path=<path>] <object>"
@@ -9956,7 +9999,7 @@
 "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
 "p | <kiểu> | --textconv) | --filters) [--path=<đường/dẫn>] <đối_tượng>"
 
-#: builtin/cat-file.c:595
+#: builtin/cat-file.c:596
 msgid ""
 "git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
 "filters]"
@@ -9964,72 +10007,72 @@
 "git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
 "filters]"
 
-#: builtin/cat-file.c:616
+#: builtin/cat-file.c:617
 msgid "only one batch option may be specified"
 msgstr "chỉ một tùy chọn batch được chỉ ra"
 
-#: builtin/cat-file.c:634
+#: builtin/cat-file.c:635
 msgid "<type> can be one of: blob, tree, commit, tag"
 msgstr "<kiểu> là một trong số: blob, tree, commit hoặc tag"
 
-#: builtin/cat-file.c:635
+#: builtin/cat-file.c:636
 msgid "show object type"
 msgstr "hiển thị kiểu đối tượng"
 
-#: builtin/cat-file.c:636
+#: builtin/cat-file.c:637
 msgid "show object size"
 msgstr "hiển thị kích thước đối tượng"
 
-#: builtin/cat-file.c:638
+#: builtin/cat-file.c:639
 msgid "exit with zero when there's no error"
 msgstr "thoát với 0 khi không có lỗi"
 
-#: builtin/cat-file.c:639
+#: builtin/cat-file.c:640
 msgid "pretty-print object's content"
 msgstr "in nội dung đối tượng dạng dễ đọc"
 
-#: builtin/cat-file.c:641
+#: builtin/cat-file.c:642
 msgid "for blob objects, run textconv on object's content"
 msgstr "với đối tượng blob, chạy lệnh textconv trên nội dung của đối tượng"
 
-#: builtin/cat-file.c:643
+#: builtin/cat-file.c:644
 msgid "for blob objects, run filters on object's content"
 msgstr "với đối tượng blob, chạy lệnh filters trên nội dung của đối tượng"
 
-#: builtin/cat-file.c:644 git-submodule.sh:936
+#: builtin/cat-file.c:645 git-submodule.sh:936
 msgid "blob"
 msgstr "blob"
 
-#: builtin/cat-file.c:645
+#: builtin/cat-file.c:646
 msgid "use a specific path for --textconv/--filters"
 msgstr "dùng một đường dẫn rõ ràng cho --textconv/--filters"
 
-#: builtin/cat-file.c:647
+#: builtin/cat-file.c:648
 msgid "allow -s and -t to work with broken/corrupt objects"
 msgstr "cho phép -s và -t để làm việc với các đối tượng sai/hỏng"
 
-#: builtin/cat-file.c:648
+#: builtin/cat-file.c:649
 msgid "buffer --batch output"
 msgstr "đệm kết xuất --batch"
 
-#: builtin/cat-file.c:650
+#: builtin/cat-file.c:651
 msgid "show info and content of objects fed from the standard input"
 msgstr ""
 "hiển thị thông tin và nội dung của các đối tượng lấy từ đầu vào tiêu chuẩn"
 
-#: builtin/cat-file.c:654
+#: builtin/cat-file.c:655
 msgid "show info about objects fed from the standard input"
 msgstr "hiển thị các thông tin về đối tượng fed  từ đầu vào tiêu chuẩn"
 
-#: builtin/cat-file.c:658
+#: builtin/cat-file.c:659
 msgid "follow in-tree symlinks (used with --batch or --batch-check)"
 msgstr "theo liên kết mềm trong-cây (được dùng với --batch hay --batch-check)"
 
-#: builtin/cat-file.c:660
+#: builtin/cat-file.c:661
 msgid "show all objects with --batch or --batch-check"
 msgstr "hiển thị mọi đối tượng với --batch hay --batch-check"
 
-#: builtin/cat-file.c:662
+#: builtin/cat-file.c:663
 msgid "do not order --batch-all-objects output"
 msgstr "đừng sắp xếp đầu ra --batch-all-objects"
 
@@ -10057,8 +10100,8 @@
 msgid "terminate input and output records by a NUL character"
 msgstr "chấm dứt các bản ghi vào và ra bằng ký tự NULL"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1433 builtin/gc.c:538
-#: builtin/worktree.c:507
+#: builtin/check-ignore.c:21 builtin/checkout.c:1433 builtin/gc.c:537
+#: builtin/worktree.c:506
 msgid "suppress progress reporting"
 msgstr "chặn các báo cáo tiến trình hoạt động"
 
@@ -10151,7 +10194,7 @@
 #: builtin/checkout-index.c:178 builtin/column.c:31
 #: builtin/submodule--helper.c:1373 builtin/submodule--helper.c:1376
 #: builtin/submodule--helper.c:1384 builtin/submodule--helper.c:1857
-#: builtin/worktree.c:680
+#: builtin/worktree.c:679
 msgid "string"
 msgstr "chuỗi"
 
@@ -10179,96 +10222,96 @@
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<các tùy chọn>] [--source=<nhánh>] <tập tin>..."
 
-#: builtin/checkout.c:172 builtin/checkout.c:211
+#: builtin/checkout.c:173 builtin/checkout.c:212
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "đường dẫn “%s” không có các phiên bản của chúng ta"
 
-#: builtin/checkout.c:174 builtin/checkout.c:213
+#: builtin/checkout.c:175 builtin/checkout.c:214
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "đường dẫn “%s” không có các phiên bản của chúng"
 
-#: builtin/checkout.c:190
+#: builtin/checkout.c:191
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "đường dẫn “%s” không có tất cả các phiên bản cần thiết"
 
-#: builtin/checkout.c:240
+#: builtin/checkout.c:241
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "đường dẫn “%s” không có các phiên bản cần thiết"
 
-#: builtin/checkout.c:258
+#: builtin/checkout.c:259
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "đường dẫn “%s”: không thể hòa trộn"
 
-#: builtin/checkout.c:274
+#: builtin/checkout.c:275
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "Không thể thêm kết quả hòa trộn cho “%s”"
 
-#: builtin/checkout.c:374
+#: builtin/checkout.c:375
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "Đã tạo lại %d xung đột hòa trộn"
 
-#: builtin/checkout.c:379
+#: builtin/checkout.c:380
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "Đã cập nhật đường dẫn %d từ %s"
 
-#: builtin/checkout.c:386
+#: builtin/checkout.c:387
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "Đã cập nhật đường dẫn %d từ mục lục"
 
-#: builtin/checkout.c:409 builtin/checkout.c:412 builtin/checkout.c:415
-#: builtin/checkout.c:419
+#: builtin/checkout.c:410 builtin/checkout.c:413 builtin/checkout.c:416
+#: builtin/checkout.c:420
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "không được dùng “%s” với các đường dẫn cập nhật"
 
-#: builtin/checkout.c:422 builtin/checkout.c:425
+#: builtin/checkout.c:423 builtin/checkout.c:426
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr "không được dùng “%s” với %s"
 
-#: builtin/checkout.c:429
+#: builtin/checkout.c:430
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr ""
 "Không thể cập nhật các đường dẫn và chuyển đến nhánh “%s” cùng một lúc."
 
-#: builtin/checkout.c:433
+#: builtin/checkout.c:434
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "không chỉ định '%s' không '%s'"
 
-#: builtin/checkout.c:437
+#: builtin/checkout.c:438
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "phải có “%s” khi không chỉ định “%s”"
 
-#: builtin/checkout.c:442 builtin/checkout.c:447
+#: builtin/checkout.c:443 builtin/checkout.c:448
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "'%s' hay '%s' không thể được sử dụng với %s"
 
-#: builtin/checkout.c:506 builtin/checkout.c:513
+#: builtin/checkout.c:507 builtin/checkout.c:514
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "đường dẫn “%s” không được hòa trộn"
 
-#: builtin/checkout.c:679
+#: builtin/checkout.c:680
 msgid "you need to resolve your current index first"
 msgstr "bạn cần phải giải quyết bảng mục lục hiện tại của bạn trước đã"
 
-#: builtin/checkout.c:729
+#: builtin/checkout.c:730
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -10278,12 +10321,6 @@
 "sau:\n"
 "%s"
 
-#: builtin/checkout.c:736
-#, c-format
-msgid "staged changes in the following files may be lost: %s"
-msgstr ""
-"các thay đổi đã đưa lên bệ phóng trong các tập tin sau đây có thể bị mất: %s"
-
 #: builtin/checkout.c:833
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
@@ -10293,7 +10330,7 @@
 msgid "HEAD is now at"
 msgstr "HEAD hiện giờ tại"
 
-#: builtin/checkout.c:879 builtin/clone.c:714
+#: builtin/checkout.c:879 builtin/clone.c:713
 msgid "unable to update HEAD"
 msgstr "không thể cập nhật HEAD"
 
@@ -10397,7 +10434,7 @@
 "“%s” không thể là cả tập tin nội bộ và một nhánh theo dõi.\n"
 "Vui long dùng -- (và tùy chọn thêm --no-guess) để tránh lẫn lộn"
 
-#: builtin/checkout.c:1243 builtin/worktree.c:291 builtin/worktree.c:456
+#: builtin/checkout.c:1243 builtin/worktree.c:290 builtin/worktree.c:455
 #, c-format
 msgid "invalid reference: %s"
 msgstr "tham chiếu không hợp lệ: %s"
@@ -10502,9 +10539,9 @@
 msgid "missing branch or commit argument"
 msgstr "thiếu tham số là nhánh hoặc lần chuyển giao"
 
-#: builtin/checkout.c:1437 builtin/clone.c:91 builtin/fetch.c:151
-#: builtin/merge.c:285 builtin/pull.c:137 builtin/push.c:575
-#: builtin/send-pack.c:174
+#: builtin/checkout.c:1437 builtin/clone.c:90 builtin/commit-graph.c:59
+#: builtin/commit-graph.c:180 builtin/fetch.c:166 builtin/merge.c:285
+#: builtin/pull.c:138 builtin/push.c:562 builtin/send-pack.c:174
 msgid "force progress reporting"
 msgstr "ép buộc báo cáo tiến triển công việc"
 
@@ -10512,7 +10549,7 @@
 msgid "perform a 3-way merge with the new branch"
 msgstr "thực hiện hòa trộn kiểu 3-way với nhánh mới"
 
-#: builtin/checkout.c:1439 builtin/log.c:1617 parse-options.h:318
+#: builtin/checkout.c:1439 builtin/log.c:1618 parse-options.h:318
 msgid "style"
 msgstr "kiểu"
 
@@ -10520,7 +10557,7 @@
 msgid "conflict style (merge or diff3)"
 msgstr "xung đột kiểu (hòa trộn hoặc diff3)"
 
-#: builtin/checkout.c:1452 builtin/worktree.c:504
+#: builtin/checkout.c:1452 builtin/worktree.c:503
 msgid "detach HEAD at named commit"
 msgstr "rời bỏ HEAD tại lần chuyển giao theo tên"
 
@@ -10560,7 +10597,7 @@
 
 #: builtin/checkout.c:1482
 msgid "do not limit pathspecs to sparse entries only"
-msgstr "không giới hạn đặc tả đường dẫn thành chỉ các mục thưa thớt"
+msgstr "không giới hạn đặc tả đường dẫn thành chỉ các mục rải rác"
 
 #: builtin/checkout.c:1533
 msgid "-b, -B and --orphan are mutually exclusive"
@@ -10641,9 +10678,9 @@
 "chưa rõ ràng, ví dụ máy chủ “origin”, cân nhắc cài đặt\n"
 "checkout.defaultRemote=origin trong cấu hình của bạn."
 
-#: builtin/checkout.c:1691 builtin/checkout.c:1693 builtin/checkout.c:1733
-#: builtin/checkout.c:1735 builtin/clone.c:121 builtin/remote.c:169
-#: builtin/remote.c:171 builtin/worktree.c:500 builtin/worktree.c:502
+#: builtin/checkout.c:1691 builtin/checkout.c:1693 builtin/checkout.c:1742
+#: builtin/checkout.c:1744 builtin/clone.c:120 builtin/remote.c:169
+#: builtin/remote.c:171 builtin/worktree.c:499 builtin/worktree.c:501
 msgid "branch"
 msgstr "nhánh"
 
@@ -10667,39 +10704,39 @@
 msgid "use overlay mode (default)"
 msgstr "dùng chế độ che phủ (mặc định)"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1743
 msgid "create and switch to a new branch"
 msgstr "tạo và chuyển đến một nhánh mới"
 
-#: builtin/checkout.c:1736
+#: builtin/checkout.c:1745
 msgid "create/reset and switch to a branch"
 msgstr "tạo/đặt_lại và chuyển đến một nhánh"
 
-#: builtin/checkout.c:1738
+#: builtin/checkout.c:1747
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "gợi ý thứ hai \"git checkout <không-nhánh-nào-như-vậy>\""
 
-#: builtin/checkout.c:1740
+#: builtin/checkout.c:1749
 msgid "throw away local modifications"
 msgstr "vứt bỏ các sửa đổi địa phương"
 
-#: builtin/checkout.c:1772
+#: builtin/checkout.c:1781
 msgid "which tree-ish to checkout from"
 msgstr "lấy ra từ tree-ish nào"
 
-#: builtin/checkout.c:1774
+#: builtin/checkout.c:1783
 msgid "restore the index"
 msgstr "phục hồi bảng mục lục"
 
-#: builtin/checkout.c:1776
+#: builtin/checkout.c:1785
 msgid "restore the working tree (default)"
 msgstr "phục hồi cây làm việc (mặc định)"
 
-#: builtin/checkout.c:1778
+#: builtin/checkout.c:1787
 msgid "ignore unmerged entries"
 msgstr "bỏ qua những thứ chưa hòa trộn: %s"
 
-#: builtin/checkout.c:1779
+#: builtin/checkout.c:1788
 msgid "use overlay mode"
 msgstr "dùng chế độ che phủ"
 
@@ -10740,7 +10777,7 @@
 msgid "could not lstat %s\n"
 msgstr "không thể lấy thông tin thống kê đầy đủ của %s\n"
 
-#: builtin/clean.c:300 git-add--interactive.perl:593
+#: builtin/clean.c:301 git-add--interactive.perl:593
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -10753,7 +10790,7 @@
 "foo        - chọn mục trên cơ sở tiền tố duy nhất\n"
 "           - (để trống) không chọn gì cả\n"
 
-#: builtin/clean.c:304 git-add--interactive.perl:602
+#: builtin/clean.c:305 git-add--interactive.perl:602
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -10774,38 +10811,38 @@
 "*          - chọn tất\n"
 "           - (để trống) kết thúc việc chọn\n"
 
-#: builtin/clean.c:520 git-add--interactive.perl:568
+#: builtin/clean.c:521 git-add--interactive.perl:568
 #: git-add--interactive.perl:573
 #, c-format, perl-format
 msgid "Huh (%s)?\n"
 msgstr "Hả (%s)?\n"
 
-#: builtin/clean.c:662
+#: builtin/clean.c:663
 #, c-format
 msgid "Input ignore patterns>> "
 msgstr "Mẫu để lọc các tập tin đầu vào cần lờ đi>> "
 
-#: builtin/clean.c:699
+#: builtin/clean.c:700
 #, c-format
 msgid "WARNING: Cannot find items matched by: %s"
 msgstr "CẢNH BÁO: Không tìm thấy các mục được khớp bởi: %s"
 
-#: builtin/clean.c:720
+#: builtin/clean.c:721
 msgid "Select items to delete"
 msgstr "Chọn mục muốn xóa"
 
 #. TRANSLATORS: Make sure to keep [y/N] as is
-#: builtin/clean.c:761
+#: builtin/clean.c:762
 #, c-format
 msgid "Remove %s [y/N]? "
 msgstr "Xóa bỏ “%s” [y/N]? "
 
-#: builtin/clean.c:786 git-add--interactive.perl:1763
+#: builtin/clean.c:787 git-add--interactive.perl:1763
 #, c-format
 msgid "Bye.\n"
 msgstr "Tạm biệt.\n"
 
-#: builtin/clean.c:794
+#: builtin/clean.c:795
 msgid ""
 "clean               - start cleaning\n"
 "filter by pattern   - exclude items from deletion\n"
@@ -10823,63 +10860,63 @@
 "help                - hiển thị chính trợ giúp này\n"
 "?                   - trợ giúp dành cho chọn bằng cách nhắc"
 
-#: builtin/clean.c:821 git-add--interactive.perl:1849
+#: builtin/clean.c:822 git-add--interactive.perl:1849
 msgid "*** Commands ***"
 msgstr "*** Lệnh ***"
 
-#: builtin/clean.c:822 git-add--interactive.perl:1846
+#: builtin/clean.c:823 git-add--interactive.perl:1846
 msgid "What now"
 msgstr "Giờ thì sao"
 
-#: builtin/clean.c:830
+#: builtin/clean.c:831
 msgid "Would remove the following item:"
 msgid_plural "Would remove the following items:"
 msgstr[0] "Có muốn gỡ bỏ (các) mục sau đây không:"
 
-#: builtin/clean.c:846
+#: builtin/clean.c:847
 msgid "No more files to clean, exiting."
 msgstr "Không còn tập-tin nào để dọn dẹp, đang thoát ra."
 
-#: builtin/clean.c:908
+#: builtin/clean.c:909
 msgid "do not print names of files removed"
 msgstr "không hiển thị tên của các tập tin đã gỡ bỏ"
 
-#: builtin/clean.c:910
+#: builtin/clean.c:911
 msgid "force"
 msgstr "ép buộc"
 
-#: builtin/clean.c:911
+#: builtin/clean.c:912
 msgid "interactive cleaning"
 msgstr "dọn bằng kiểu tương tác"
 
-#: builtin/clean.c:913
+#: builtin/clean.c:914
 msgid "remove whole directories"
 msgstr "gỡ bỏ toàn bộ thư mục"
 
-#: builtin/clean.c:914 builtin/describe.c:546 builtin/describe.c:548
-#: builtin/grep.c:899 builtin/log.c:176 builtin/log.c:178
-#: builtin/ls-files.c:557 builtin/name-rev.c:413 builtin/name-rev.c:415
+#: builtin/clean.c:915 builtin/describe.c:548 builtin/describe.c:550
+#: builtin/grep.c:901 builtin/log.c:176 builtin/log.c:178
+#: builtin/ls-files.c:557 builtin/name-rev.c:417 builtin/name-rev.c:419
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr "mẫu"
 
-#: builtin/clean.c:915
+#: builtin/clean.c:916
 msgid "add <pattern> to ignore rules"
 msgstr "thêm <mẫu> vào trong qui tắc bỏ qua"
 
-#: builtin/clean.c:916
+#: builtin/clean.c:917
 msgid "remove ignored files, too"
 msgstr "đồng thời gỡ bỏ cả các tập tin bị bỏ qua"
 
-#: builtin/clean.c:918
+#: builtin/clean.c:919
 msgid "remove only ignored files"
 msgstr "chỉ gỡ bỏ những tập tin bị bỏ qua"
 
-#: builtin/clean.c:936
+#: builtin/clean.c:937
 msgid "-x and -X cannot be used together"
 msgstr "-x và -X không thể dùng cùng nhau"
 
-#: builtin/clean.c:940
+#: builtin/clean.c:941
 msgid ""
 "clean.requireForce set to true and neither -i, -n, nor -f given; refusing to "
 "clean"
@@ -10887,7 +10924,7 @@
 "clean.requireForce được đặt thành true và không đưa ra tùy chọn -i, -n mà "
 "cũng không -f; từ chối lệnh dọn dẹp (clean)"
 
-#: builtin/clean.c:943
+#: builtin/clean.c:944
 msgid ""
 "clean.requireForce defaults to true and neither -i, -n, nor -f given; "
 "refusing to clean"
@@ -10895,162 +10932,162 @@
 "clean.requireForce mặc định được đặt là true và không đưa ra tùy chọn -i, -n "
 "mà cũng không -f; từ chối lệnh dọn dẹp (clean)"
 
-#: builtin/clone.c:46
+#: builtin/clone.c:45
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<các tùy chọn>] [--] <kho> [<t.mục>]"
 
-#: builtin/clone.c:93
+#: builtin/clone.c:92
 msgid "don't create a checkout"
 msgstr "không tạo một checkout"
 
-#: builtin/clone.c:94 builtin/clone.c:96 builtin/init-db.c:489
+#: builtin/clone.c:93 builtin/clone.c:95 builtin/init-db.c:489
 msgid "create a bare repository"
 msgstr "tạo kho thuần"
 
-#: builtin/clone.c:98
+#: builtin/clone.c:97
 msgid "create a mirror repository (implies bare)"
 msgstr "tạo kho bản sao (ý là kho thuần)"
 
-#: builtin/clone.c:100
+#: builtin/clone.c:99
 msgid "to clone from a local repository"
 msgstr "để nhân bản từ kho nội bộ"
 
-#: builtin/clone.c:102
+#: builtin/clone.c:101
 msgid "don't use local hardlinks, always copy"
 msgstr "không sử dụng liên kết cứng nội bộ, luôn sao chép"
 
-#: builtin/clone.c:104
+#: builtin/clone.c:103
 msgid "setup as shared repository"
 msgstr "cài đặt đây là kho chia sẻ"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:106
 msgid "pathspec"
 msgstr "đặc-tả-đường-dẫn"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:106
 msgid "initialize submodules in the clone"
 msgstr "khởi tạo mô-đun-con trong bản sao"
 
-#: builtin/clone.c:110
+#: builtin/clone.c:109
 msgid "number of submodules cloned in parallel"
 msgstr "số lượng mô-đun-con được nhân bản đồng thời"
 
-#: builtin/clone.c:111 builtin/init-db.c:486
+#: builtin/clone.c:110 builtin/init-db.c:486
 msgid "template-directory"
 msgstr "thư-mục-mẫu"
 
-#: builtin/clone.c:112 builtin/init-db.c:487
+#: builtin/clone.c:111 builtin/init-db.c:487
 msgid "directory from which templates will be used"
 msgstr "thư mục mà tại đó các mẫu sẽ được dùng"
 
-#: builtin/clone.c:114 builtin/clone.c:116 builtin/submodule--helper.c:1380
+#: builtin/clone.c:113 builtin/clone.c:115 builtin/submodule--helper.c:1380
 #: builtin/submodule--helper.c:1860
 msgid "reference repository"
 msgstr "kho tham chiếu"
 
-#: builtin/clone.c:118 builtin/submodule--helper.c:1382
+#: builtin/clone.c:117 builtin/submodule--helper.c:1382
 #: builtin/submodule--helper.c:1862
 msgid "use --reference only while cloning"
 msgstr "chỉ dùng --reference khi nhân bản"
 
-#: builtin/clone.c:119 builtin/column.c:27 builtin/merge-file.c:46
-#: builtin/pack-objects.c:3314 builtin/repack.c:319
+#: builtin/clone.c:118 builtin/column.c:27 builtin/merge-file.c:46
+#: builtin/pack-objects.c:3294 builtin/repack.c:320
 msgid "name"
 msgstr "tên"
 
-#: builtin/clone.c:120
+#: builtin/clone.c:119
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "dùng <tên> thay cho “origin” để theo dõi thượng nguồn"
 
-#: builtin/clone.c:122
+#: builtin/clone.c:121
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "lấy ra <nhánh> thay cho HEAD của máy chủ"
 
-#: builtin/clone.c:124
+#: builtin/clone.c:123
 msgid "path to git-upload-pack on the remote"
 msgstr "đường dẫn đến git-upload-pack trên máy chủ"
 
-#: builtin/clone.c:125 builtin/fetch.c:152 builtin/grep.c:838
-#: builtin/pull.c:226
+#: builtin/clone.c:124 builtin/fetch.c:167 builtin/grep.c:840
+#: builtin/pull.c:227
 msgid "depth"
 msgstr "độ-sâu"
 
-#: builtin/clone.c:126
+#: builtin/clone.c:125
 msgid "create a shallow clone of that depth"
 msgstr "tạo bản sao không đầy đủ cho mức sâu đã cho"
 
-#: builtin/clone.c:127 builtin/fetch.c:154 builtin/pack-objects.c:3303
+#: builtin/clone.c:126 builtin/fetch.c:169 builtin/pack-objects.c:3283
 msgid "time"
 msgstr "thời-gian"
 
-#: builtin/clone.c:128
+#: builtin/clone.c:127
 msgid "create a shallow clone since a specific time"
 msgstr "tạo bản sao không đầy đủ từ thời điểm đã cho"
 
-#: builtin/clone.c:129 builtin/fetch.c:156 builtin/fetch.c:179
-#: builtin/rebase.c:1395
+#: builtin/clone.c:128 builtin/fetch.c:171 builtin/fetch.c:194
+#: builtin/rebase.c:1417
 msgid "revision"
 msgstr "điểm xét duyệt"
 
-#: builtin/clone.c:130 builtin/fetch.c:157
+#: builtin/clone.c:129 builtin/fetch.c:172
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "làm sâu hơn lịch sử của bản sao shallow, bằng điểm xét duyệt loại trừ"
 
-#: builtin/clone.c:132
+#: builtin/clone.c:131
 msgid "clone only one branch, HEAD or --branch"
 msgstr "chỉ nhân bản một nhánh, HEAD hoặc --branch"
 
-#: builtin/clone.c:134
+#: builtin/clone.c:133
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr ""
 "đứng có nhân bản bất kỳ nhánh nào, và làm cho những lần lấy về sau không "
 "theo chúng nữa"
 
-#: builtin/clone.c:136
+#: builtin/clone.c:135
 msgid "any cloned submodules will be shallow"
 msgstr "mọi mô-đun-con nhân bản sẽ là shallow (nông)"
 
-#: builtin/clone.c:137 builtin/init-db.c:495
+#: builtin/clone.c:136 builtin/init-db.c:495
 msgid "gitdir"
 msgstr "gitdir"
 
-#: builtin/clone.c:138 builtin/init-db.c:496
+#: builtin/clone.c:137 builtin/init-db.c:496
 msgid "separate git dir from working tree"
 msgstr "không dùng chung thư mục dành riêng cho git và thư mục làm việc"
 
-#: builtin/clone.c:139
+#: builtin/clone.c:138
 msgid "key=value"
 msgstr "khóa=giá_trị"
 
-#: builtin/clone.c:140
+#: builtin/clone.c:139
 msgid "set config inside the new repository"
 msgstr "đặt cấu hình bên trong một kho chứa mới"
 
-#: builtin/clone.c:142 builtin/fetch.c:174 builtin/ls-remote.c:76
-#: builtin/push.c:585 builtin/send-pack.c:172
+#: builtin/clone.c:141 builtin/fetch.c:189 builtin/ls-remote.c:76
+#: builtin/push.c:572 builtin/send-pack.c:172
 msgid "server-specific"
 msgstr "đặc-tả-máy-phục-vụ"
 
-#: builtin/clone.c:142 builtin/fetch.c:174 builtin/ls-remote.c:76
-#: builtin/push.c:585 builtin/send-pack.c:173
+#: builtin/clone.c:141 builtin/fetch.c:189 builtin/ls-remote.c:76
+#: builtin/push.c:572 builtin/send-pack.c:173
 msgid "option to transmit"
 msgstr "tùy chọn để chuyển giao"
 
-#: builtin/clone.c:143 builtin/fetch.c:175 builtin/pull.c:239
-#: builtin/push.c:586
+#: builtin/clone.c:142 builtin/fetch.c:190 builtin/pull.c:240
+#: builtin/push.c:573
 msgid "use IPv4 addresses only"
 msgstr "chỉ dùng địa chỉ IPv4"
 
-#: builtin/clone.c:145 builtin/fetch.c:177 builtin/pull.c:242
-#: builtin/push.c:588
+#: builtin/clone.c:144 builtin/fetch.c:192 builtin/pull.c:243
+#: builtin/push.c:575
 msgid "use IPv6 addresses only"
 msgstr "chỉ dùng địa chỉ IPv6"
 
-#: builtin/clone.c:149
+#: builtin/clone.c:148
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "mọi mô-đun-con nhân bản sẽ dung nhánh theo dõi máy chủ của chúng"
 
-#: builtin/clone.c:285
+#: builtin/clone.c:284
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -11058,47 +11095,42 @@
 "Không đoán được thư mục tên là gì.\n"
 "Vui lòng chỉ định tên một thư mục trên dòng lệnh"
 
-#: builtin/clone.c:338
+#: builtin/clone.c:337
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "thông tin: không thể thêm thay thế cho “%s”: %s\n"
 
-#: builtin/clone.c:411
+#: builtin/clone.c:410
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s có tồn tại nhưng lại không phải là một thư mục"
 
-#: builtin/clone.c:428
+#: builtin/clone.c:427
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "gặp lỗi khi bắt đầu lặp qua “%s”"
 
-#: builtin/clone.c:453
-#, c-format
-msgid "failed to unlink '%s'"
-msgstr "gặp lỗi khi bỏ liên kết (unlink) “%s”"
-
-#: builtin/clone.c:458
+#: builtin/clone.c:457
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "gặp lỗi khi tạo được liên kết mềm %s"
 
-#: builtin/clone.c:462
+#: builtin/clone.c:461
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "gặp lỗi khi sao chép tập tin và “%s”"
 
-#: builtin/clone.c:467
+#: builtin/clone.c:466
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "gặp lỗi khi lặp qua “%s”"
 
-#: builtin/clone.c:492
+#: builtin/clone.c:491
 #, c-format
 msgid "done.\n"
 msgstr "hoàn tất.\n"
 
-#: builtin/clone.c:506
+#: builtin/clone.c:505
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -11108,95 +11140,95 @@
 "Bạn kiểm tra kỹ xem cái gì được lấy ra bằng lệnh “git status”\n"
 "và thử lấy ra với lệnh 'git restore --source=HEAD :/'\n"
 
-#: builtin/clone.c:583
+#: builtin/clone.c:582
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "Không tìm thấy nhánh máy chủ %s để nhân bản (clone)."
 
-#: builtin/clone.c:702
+#: builtin/clone.c:701
 #, c-format
 msgid "unable to update %s"
 msgstr "không thể cập nhật %s"
 
-#: builtin/clone.c:752
+#: builtin/clone.c:751
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr "refers HEAD máy chủ  chỉ đến ref không tồn tại, không thể lấy ra.\n"
 
-#: builtin/clone.c:783
+#: builtin/clone.c:782
 msgid "unable to checkout working tree"
 msgstr "không thể lấy ra (checkout) cây làm việc"
 
-#: builtin/clone.c:833
+#: builtin/clone.c:832
 msgid "unable to write parameters to config file"
 msgstr "không thể ghi các tham số vào tập tin cấu hình"
 
-#: builtin/clone.c:896
+#: builtin/clone.c:895
 msgid "cannot repack to clean up"
 msgstr "không thể đóng gói để dọn dẹp"
 
-#: builtin/clone.c:898
+#: builtin/clone.c:897
 msgid "cannot unlink temporary alternates file"
 msgstr "không thể bỏ liên kết tập tin thay thế tạm thời"
 
-#: builtin/clone.c:938 builtin/receive-pack.c:1950
+#: builtin/clone.c:937 builtin/receive-pack.c:1948
 msgid "Too many arguments."
 msgstr "Có quá nhiều đối số."
 
-#: builtin/clone.c:942
+#: builtin/clone.c:941
 msgid "You must specify a repository to clone."
 msgstr "Bạn phải chỉ định một kho để mà nhân bản (clone)."
 
-#: builtin/clone.c:955
+#: builtin/clone.c:954
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "tùy chọn --bare và --origin %s xung khắc nhau."
 
-#: builtin/clone.c:958
+#: builtin/clone.c:957
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "tùy chọn --bare và --separate-git-dir xung khắc nhau."
 
-#: builtin/clone.c:971
+#: builtin/clone.c:970
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "kho chứa “%s” chưa tồn tại"
 
-#: builtin/clone.c:977 builtin/fetch.c:1660
+#: builtin/clone.c:976 builtin/fetch.c:1790
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "độ sâu %s không phải là một số nguyên dương"
 
-#: builtin/clone.c:987
+#: builtin/clone.c:986
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "đường dẫn đích “%s” đã có từ trước và không phải là một thư mục rỗng."
 
-#: builtin/clone.c:997
+#: builtin/clone.c:996
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "cây làm việc “%s” đã sẵn tồn tại rồi."
 
-#: builtin/clone.c:1012 builtin/clone.c:1033 builtin/difftool.c:264
-#: builtin/worktree.c:303 builtin/worktree.c:335
+#: builtin/clone.c:1011 builtin/clone.c:1032 builtin/difftool.c:271
+#: builtin/log.c:1785 builtin/worktree.c:302 builtin/worktree.c:334
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "không thể tạo các thư mục dẫn đầu của “%s”"
 
-#: builtin/clone.c:1017
+#: builtin/clone.c:1016
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "không thể tạo cây thư mục làm việc dir “%s”"
 
-#: builtin/clone.c:1037
+#: builtin/clone.c:1036
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Đang nhân bản thành kho chứa bare “%s”…\n"
 
-#: builtin/clone.c:1039
+#: builtin/clone.c:1038
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Đang nhân bản thành “%s”…\n"
 
-#: builtin/clone.c:1063
+#: builtin/clone.c:1062
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
@@ -11204,41 +11236,41 @@
 "nhân bản --recursive không tương thích với cả hai --reference và --reference-"
 "if-able"
 
-#: builtin/clone.c:1124
+#: builtin/clone.c:1123
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "--depth bị lờ đi khi nhân bản nội bộ; hãy sử dụng file:// để thay thế."
 
-#: builtin/clone.c:1126
+#: builtin/clone.c:1125
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-since bị lờ đi khi nhân bản nội bộ; hãy sử dụng file:// để thay "
 "thế."
 
-#: builtin/clone.c:1128
+#: builtin/clone.c:1127
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-exclude bị lờ đi khi nhân bản nội bộ; hãy sử dụng file:// để thay "
 "thế."
 
-#: builtin/clone.c:1130
+#: builtin/clone.c:1129
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr ""
 "--filter bị lờ đi khi nhân bản nội bộ; hãy sử dụng file:// để thay thế."
 
-#: builtin/clone.c:1133
+#: builtin/clone.c:1132
 msgid "source repository is shallow, ignoring --local"
 msgstr "kho nguồn là nông, nên bỏ qua --local"
 
-#: builtin/clone.c:1138
+#: builtin/clone.c:1137
 msgid "--local is ignored"
 msgstr "--local bị lờ đi"
 
-#: builtin/clone.c:1215 builtin/clone.c:1223
+#: builtin/clone.c:1212 builtin/clone.c:1220
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "Nhánh máy chủ %s không tìm thấy trong thượng nguồn %s"
 
-#: builtin/clone.c:1226
+#: builtin/clone.c:1223
 msgid "You appear to have cloned an empty repository."
 msgstr "Bạn hình như là đã nhân bản một kho trống rỗng."
 
@@ -11316,7 +11348,7 @@
 msgstr "mã số của đối tượng chuyển giao cha mẹ"
 
 #: builtin/commit-tree.c:114 builtin/commit.c:1500 builtin/merge.c:270
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1460
+#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1469
 #: builtin/tag.c:412
 msgid "message"
 msgstr "chú thích"
@@ -11330,7 +11362,7 @@
 msgstr "đọc chú thích nhật ký lần chuyển giao từ tập tin"
 
 #: builtin/commit-tree.c:121 builtin/commit.c:1512 builtin/merge.c:287
-#: builtin/pull.c:194 builtin/revert.c:118
+#: builtin/pull.c:195 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "Ký lần chuyển giao dùng GPG"
 
@@ -11672,8 +11704,8 @@
 msgid "version"
 msgstr "phiên bản"
 
-#: builtin/commit.c:1347 builtin/commit.c:1529 builtin/push.c:561
-#: builtin/worktree.c:651
+#: builtin/commit.c:1347 builtin/commit.c:1529 builtin/push.c:548
+#: builtin/worktree.c:650
 msgid "machine-readable output"
 msgstr "kết xuất dạng máy-có-thể-đọc"
 
@@ -11686,8 +11718,8 @@
 msgstr "chấm dứt các mục bằng NUL"
 
 #: builtin/commit.c:1355 builtin/commit.c:1359 builtin/commit.c:1537
-#: builtin/fast-export.c:1125 builtin/fast-export.c:1128
-#: builtin/fast-export.c:1131 builtin/rebase.c:1471 parse-options.h:332
+#: builtin/fast-export.c:1153 builtin/fast-export.c:1156
+#: builtin/fast-export.c:1159 builtin/rebase.c:1495 parse-options.h:332
 msgid "mode"
 msgstr "chế độ"
 
@@ -11705,7 +11737,7 @@
 "hiển thị các tập tin bị bỏ qua, các chế độ tùy chọn: traditional, matching, "
 "no. (Mặc định: traditional)"
 
-#: builtin/commit.c:1362 parse-options.h:179
+#: builtin/commit.c:1362 parse-options.h:188
 msgid "when"
 msgstr "khi"
 
@@ -11758,7 +11790,7 @@
 msgid "override author for commit"
 msgstr "ghi đè tác giả cho commit"
 
-#: builtin/commit.c:1499 builtin/gc.c:539
+#: builtin/commit.c:1499 builtin/gc.c:538
 msgid "date"
 msgstr "ngày tháng"
 
@@ -11795,8 +11827,8 @@
 msgstr ""
 "lần chuyển giao nhận tôi là tác giả (được dùng với tùy chọn -C/-c/--amend)"
 
-#: builtin/commit.c:1506 builtin/log.c:1564 builtin/merge.c:289
-#: builtin/pull.c:163 builtin/revert.c:110
+#: builtin/commit.c:1506 builtin/log.c:1565 builtin/merge.c:289
+#: builtin/pull.c:164 builtin/revert.c:110
 msgid "add Signed-off-by:"
 msgstr "(nên dùng) thêm dòng Signed-off-by:"
 
@@ -11906,75 +11938,78 @@
 msgstr "git commit-graph read [--object-dir <objdir>]"
 
 #: builtin/commit-graph.c:13 builtin/commit-graph.c:19
-msgid "git commit-graph verify [--object-dir <objdir>] [--shallow]"
+msgid ""
+"git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
 msgstr ""
-"git commit-graph verify [--object-dir </thư/mục/đối/tượng>] [--shallow]"
+"git commit-graph verify [--object-dir </thư/mục/đối/tượng>] [--shallow] [--"
+"[no-]progress]"
 
 #: builtin/commit-graph.c:14 builtin/commit-graph.c:29
 msgid ""
 "git commit-graph write [--object-dir <objdir>] [--append|--split] [--"
-"reachable|--stdin-packs|--stdin-commits] <split options>"
+"reachable|--stdin-packs|--stdin-commits] [--[no-]progress] <split options>"
 msgstr ""
 "git commit-graph write [--object-dir </thư/mục/đối/tượng>] [--append|--"
-"split] [--reachable|--stdin-packs|--stdin-commits] <các tùy chọn chia tách>"
+"split] [--reachable|--stdin-packs|--stdin-commits] [--[no-]progress] <các "
+"tùy chọn chia tách>"
 
-#: builtin/commit-graph.c:54 builtin/commit-graph.c:100
-#: builtin/commit-graph.c:161 builtin/commit-graph.c:237 builtin/fetch.c:163
-#: builtin/log.c:1584
+#: builtin/commit-graph.c:55 builtin/commit-graph.c:107
+#: builtin/commit-graph.c:170 builtin/commit-graph.c:254 builtin/fetch.c:178
+#: builtin/log.c:1585
 msgid "dir"
 msgstr "tmục"
 
-#: builtin/commit-graph.c:55 builtin/commit-graph.c:101
-#: builtin/commit-graph.c:162 builtin/commit-graph.c:238
+#: builtin/commit-graph.c:56 builtin/commit-graph.c:108
+#: builtin/commit-graph.c:171 builtin/commit-graph.c:255
 msgid "The object directory to store the graph"
 msgstr "Thư mục đối tượng để lưu đồ thị"
 
-#: builtin/commit-graph.c:57
+#: builtin/commit-graph.c:58
 msgid "if the commit-graph is split, only verify the tip file"
 msgstr ""
 "nếu đồ-thị-các-lần-chuyển-giao bị chia cắt, thì chỉ thẩm tra tập tin đỉnh"
 
-#: builtin/commit-graph.c:73 builtin/commit-graph.c:116
+#: builtin/commit-graph.c:80 builtin/commit-graph.c:125
 #, c-format
 msgid "Could not open commit-graph '%s'"
 msgstr "Không thể mở đồ thị chuyển giao “%s”"
 
-#: builtin/commit-graph.c:164
+#: builtin/commit-graph.c:173
 msgid "start walk at all refs"
 msgstr "bắt đầu di chuyển tại mọi tham chiếu"
 
-#: builtin/commit-graph.c:166
+#: builtin/commit-graph.c:175
 msgid "scan pack-indexes listed by stdin for commits"
 msgstr ""
 "quét dó các mục lục gói được liệt kê bởi đầu vào tiêu chuẩn cho các lần "
 "chuyển giao"
 
-#: builtin/commit-graph.c:168
+#: builtin/commit-graph.c:177
 msgid "start walk at commits listed by stdin"
 msgstr ""
 "bắt đầu di chuyển tại các lần chuyển giao được liệt kê bởi đầu vào tiêu chuẩn"
 
-#: builtin/commit-graph.c:170
+#: builtin/commit-graph.c:179
 msgid "include all commits already in the commit-graph file"
 msgstr ""
 "bao gồm mọi lần chuyển giao đã sẵn có trongười tập tin đồ-thị-các-lần-chuyển-"
 "giao"
 
-#: builtin/commit-graph.c:172
+#: builtin/commit-graph.c:182
 msgid "allow writing an incremental commit-graph file"
 msgstr "cho phép ghi một tập tin đồ họa các lần chuyển giao lớn lên"
 
-#: builtin/commit-graph.c:174 builtin/commit-graph.c:178
+#: builtin/commit-graph.c:184 builtin/commit-graph.c:188
 msgid "maximum number of commits in a non-base split commit-graph"
 msgstr ""
 "số lượng tối đa của các lần chuyển giao trong một đồ-thị-các-lần-chuyển-giao "
 "chia cắt không-cơ-sở"
 
-#: builtin/commit-graph.c:176
+#: builtin/commit-graph.c:186
 msgid "maximum ratio between two levels of a split commit-graph"
 msgstr "tỷ lệ tối đa giữa hai mức của một đồ-thị-các-lần-chuyển-giao chia cắt"
 
-#: builtin/commit-graph.c:191
+#: builtin/commit-graph.c:204
 msgid "use at most one of --reachable, --stdin-commits, or --stdin-packs"
 msgstr ""
 "không thể sử dụng hơn một --reachable, --stdin-commits, hay --stdin-packs"
@@ -12292,57 +12327,57 @@
 msgid "print sizes in human readable format"
 msgstr "hiển thị kích cỡ theo định dạng dành cho người đọc"
 
-#: builtin/describe.c:27
+#: builtin/describe.c:26
 msgid "git describe [<options>] [<commit-ish>...]"
 msgstr "git describe [<các tùy chọn>] <commit-ish>*"
 
-#: builtin/describe.c:28
+#: builtin/describe.c:27
 msgid "git describe [<options>] --dirty"
 msgstr "git describe [<các tùy chọn>] --dirty"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "head"
 msgstr "phía trước"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "lightweight"
 msgstr "hạng nhẹ"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "annotated"
 msgstr "có diễn giải"
 
-#: builtin/describe.c:273
+#: builtin/describe.c:275
 #, c-format
 msgid "annotated tag %s not available"
 msgstr "thẻ đã được ghi chú %s không sẵn để dùng"
 
-#: builtin/describe.c:277
+#: builtin/describe.c:279
 #, c-format
 msgid "annotated tag %s has no embedded name"
 msgstr "thẻ được chú giải %s không có tên nhúng"
 
-#: builtin/describe.c:279
+#: builtin/describe.c:281
 #, c-format
 msgid "tag '%s' is really '%s' here"
 msgstr "thẻ “%s” đã thực sự ở đây “%s” rồi"
 
-#: builtin/describe.c:323
+#: builtin/describe.c:325
 #, c-format
 msgid "no tag exactly matches '%s'"
 msgstr "không có thẻ nào khớp chính xác với “%s”"
 
-#: builtin/describe.c:325
+#: builtin/describe.c:327
 #, c-format
 msgid "No exact match on refs or tags, searching to describe\n"
 msgstr "Không có tham chiếu hay thẻ khớp đúng, đang tìm kiếm mô tả\n"
 
-#: builtin/describe.c:379
+#: builtin/describe.c:381
 #, c-format
 msgid "finished search at %s\n"
 msgstr "việc tìm kiếm đã kết thúc tại %s\n"
 
-#: builtin/describe.c:405
+#: builtin/describe.c:407
 #, c-format
 msgid ""
 "No annotated tags can describe '%s'.\n"
@@ -12351,7 +12386,7 @@
 "Không có thẻ được chú giải nào được mô tả là “%s”.\n"
 "Tuy nhiên, ở đây có những thẻ không được chú giải: hãy thử --tags."
 
-#: builtin/describe.c:409
+#: builtin/describe.c:411
 #, c-format
 msgid ""
 "No tags can describe '%s'.\n"
@@ -12360,12 +12395,12 @@
 "Không có thẻ có thể mô tả “%s”.\n"
 "Hãy thử --always, hoặc tạo một số thẻ."
 
-#: builtin/describe.c:439
+#: builtin/describe.c:441
 #, c-format
 msgid "traversed %lu commits\n"
 msgstr "đã xuyên %lu qua lần chuyển giao\n"
 
-#: builtin/describe.c:442
+#: builtin/describe.c:444
 #, c-format
 msgid ""
 "more than %i tags found; listed %i most recent\n"
@@ -12374,90 +12409,90 @@
 "tìm thấy nhiều hơn %i thẻ; đã liệt kê %i cái gần\n"
 "đây nhất bỏ đi tìm kiếm tại %s\n"
 
-#: builtin/describe.c:510
+#: builtin/describe.c:512
 #, c-format
 msgid "describe %s\n"
 msgstr "mô tả %s\n"
 
-#: builtin/describe.c:513
+#: builtin/describe.c:515
 #, c-format
 msgid "Not a valid object name %s"
 msgstr "Không phải tên đối tượng %s hợp lệ"
 
-#: builtin/describe.c:521
+#: builtin/describe.c:523
 #, c-format
 msgid "%s is neither a commit nor blob"
 msgstr "%s không phải là một lần commit cũng không phải blob"
 
-#: builtin/describe.c:535
+#: builtin/describe.c:537
 msgid "find the tag that comes after the commit"
 msgstr "tìm các thẻ mà nó đến trước lần chuyển giao"
 
-#: builtin/describe.c:536
+#: builtin/describe.c:538
 msgid "debug search strategy on stderr"
 msgstr "chiến lược tìm kiếm gỡ lỗi trên đầu ra lỗi chuẩn stderr"
 
-#: builtin/describe.c:537
+#: builtin/describe.c:539
 msgid "use any ref"
 msgstr "dùng ref bất kỳ"
 
-#: builtin/describe.c:538
+#: builtin/describe.c:540
 msgid "use any tag, even unannotated"
 msgstr "dùng thẻ bất kỳ, cả khi “unannotated”"
 
-#: builtin/describe.c:539
+#: builtin/describe.c:541
 msgid "always use long format"
 msgstr "luôn dùng định dạng dài"
 
-#: builtin/describe.c:540
+#: builtin/describe.c:542
 msgid "only follow first parent"
 msgstr "chỉ theo cha mẹ đầu tiên"
 
-#: builtin/describe.c:543
+#: builtin/describe.c:545
 msgid "only output exact matches"
 msgstr "chỉ xuất những gì khớp chính xác"
 
-#: builtin/describe.c:545
+#: builtin/describe.c:547
 msgid "consider <n> most recent tags (default: 10)"
 msgstr "coi như <n> thẻ gần đây nhất (mặc định: 10)"
 
-#: builtin/describe.c:547
+#: builtin/describe.c:549
 msgid "only consider tags matching <pattern>"
 msgstr "chỉ cân nhắc đến những thẻ khớp với <mẫu>"
 
-#: builtin/describe.c:549
+#: builtin/describe.c:551
 msgid "do not consider tags matching <pattern>"
 msgstr "không coi rằng các thẻ khớp với <mẫu>"
 
-#: builtin/describe.c:551 builtin/name-rev.c:422
+#: builtin/describe.c:553 builtin/name-rev.c:426
 msgid "show abbreviated commit object as fallback"
 msgstr "hiển thị đối tượng chuyển giao vắn tắt như là fallback"
 
-#: builtin/describe.c:552 builtin/describe.c:555
+#: builtin/describe.c:554 builtin/describe.c:557
 msgid "mark"
 msgstr "dấu"
 
-#: builtin/describe.c:553
+#: builtin/describe.c:555
 msgid "append <mark> on dirty working tree (default: \"-dirty\")"
 msgstr "thêm <dấu> trên cây thư mục làm việc bẩn (mặc định \"-dirty\")"
 
-#: builtin/describe.c:556
+#: builtin/describe.c:558
 msgid "append <mark> on broken working tree (default: \"-broken\")"
 msgstr "thêm <dấu> trên cây thư mục làm việc bị hỏng (mặc định \"-broken\")"
 
-#: builtin/describe.c:574
+#: builtin/describe.c:576
 msgid "--long is incompatible with --abbrev=0"
 msgstr "--long là xung khắc với tùy chọn --abbrev=0"
 
-#: builtin/describe.c:603
+#: builtin/describe.c:605
 msgid "No names found, cannot describe anything."
 msgstr "Không tìm thấy các tên, không thể mô tả gì cả."
 
-#: builtin/describe.c:654
+#: builtin/describe.c:656
 msgid "--dirty is incompatible with commit-ishes"
 msgstr "--dirty là xung khắc với các tùy chọn commit-ish"
 
-#: builtin/describe.c:656
+#: builtin/describe.c:658
 msgid "--broken is incompatible with commit-ishes"
 msgstr "--broken là xung khắc với commit-ishes"
 
@@ -12496,27 +12531,27 @@
 "git difftool [<các tùy chọn>] [<lần_chuyển_giao> [<lần_chuyển_giao>]] [--] </"
 "đường/dẫn>…]"
 
-#: builtin/difftool.c:253
+#: builtin/difftool.c:260
 #, c-format
 msgid "failed: %d"
 msgstr "gặp lỗi: %d"
 
-#: builtin/difftool.c:295
+#: builtin/difftool.c:302
 #, c-format
 msgid "could not read symlink %s"
 msgstr "không thể đọc liên kết mềm %s"
 
-#: builtin/difftool.c:297
+#: builtin/difftool.c:304
 #, c-format
 msgid "could not read symlink file %s"
 msgstr "không đọc được tập tin liên kết mềm %s"
 
-#: builtin/difftool.c:305
+#: builtin/difftool.c:312
 #, c-format
 msgid "could not read object %s for symlink %s"
 msgstr "không thể đọc đối tượng %s cho liên kết mềm %s"
 
-#: builtin/difftool.c:406
+#: builtin/difftool.c:413
 msgid ""
 "combined diff formats('-c' and '--cc') are not supported in\n"
 "directory diff mode('-d' and '--dir-diff')."
@@ -12524,53 +12559,53 @@
 "các định dạng diff tổ hợp(“-c” và “--cc”) chưa được hỗ trợ trong\n"
 "chế độ diff thư mục(“-d” và “--dir-diff”)."
 
-#: builtin/difftool.c:626
+#: builtin/difftool.c:634
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "cả hai tập tin đã bị sửa: “%s” và “%s”."
 
-#: builtin/difftool.c:628
+#: builtin/difftool.c:636
 msgid "working tree file has been left."
 msgstr "cây làm việc ở bên trái."
 
-#: builtin/difftool.c:639
+#: builtin/difftool.c:647
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "các tập tin tạm đã sẵn có trong “%s”."
 
-#: builtin/difftool.c:640
+#: builtin/difftool.c:648
 msgid "you may want to cleanup or recover these."
 msgstr "bạn có lẽ muốn dọn dẹp hay phục hồi ở đây."
 
-#: builtin/difftool.c:689
+#: builtin/difftool.c:697
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr "dùng “diff.guitool“ thay vì dùng “diff.tool“"
 
-#: builtin/difftool.c:691
+#: builtin/difftool.c:699
 msgid "perform a full-directory diff"
 msgstr "thực hiện một diff toàn thư mục"
 
-#: builtin/difftool.c:693
+#: builtin/difftool.c:701
 msgid "do not prompt before launching a diff tool"
 msgstr "đừng nhắc khi khởi chạy công cụ diff"
 
-#: builtin/difftool.c:698
+#: builtin/difftool.c:706
 msgid "use symlinks in dir-diff mode"
 msgstr "dùng liên kết mềm trong diff-thư-mục"
 
-#: builtin/difftool.c:699
+#: builtin/difftool.c:707
 msgid "tool"
 msgstr "công cụ"
 
-#: builtin/difftool.c:700
+#: builtin/difftool.c:708
 msgid "use the specified diff tool"
 msgstr "dùng công cụ diff đã cho"
 
-#: builtin/difftool.c:702
+#: builtin/difftool.c:710
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr "in ra danh sách các công cụ dif cái mà có thẻ dùng với “--tool“"
 
-#: builtin/difftool.c:705
+#: builtin/difftool.c:713
 msgid ""
 "make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
 "code"
@@ -12578,31 +12613,31 @@
 "làm cho “git-difftool” thoát khi gọi công cụ diff trả về mã không phải số "
 "không"
 
-#: builtin/difftool.c:708
+#: builtin/difftool.c:716
 msgid "specify a custom command for viewing diffs"
 msgstr "chỉ định một lệnh tùy ý để xem diff"
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:717
 msgid "passed to `diff`"
 msgstr "chuyển cho “diff”"
 
-#: builtin/difftool.c:724
+#: builtin/difftool.c:732
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool cần cây làm việc hoặc --no-index"
 
-#: builtin/difftool.c:731
+#: builtin/difftool.c:739
 msgid "--dir-diff is incompatible with --no-index"
 msgstr "--dir-diff xung khắc với --no-index"
 
-#: builtin/difftool.c:734
+#: builtin/difftool.c:742
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr "--gui, --tool và --extcmd loại từ lẫn nhau"
 
-#: builtin/difftool.c:742
+#: builtin/difftool.c:750
 msgid "no <tool> given for --tool=<tool>"
 msgstr "chưa đưa ra <công_cụ> cho --tool=<công_cụ>"
 
-#: builtin/difftool.c:749
+#: builtin/difftool.c:757
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "chưa đưa ra <lệnh> cho --extcmd=<lệnh>"
 
@@ -12641,160 +12676,184 @@
 msgid "git fast-export [rev-list-opts]"
 msgstr "git fast-export [rev-list-opts]"
 
-#: builtin/fast-export.c:1124
+#: builtin/fast-export.c:852
+msgid "Error: Cannot export nested tags unless --mark-tags is specified."
+msgstr "Lỗi: không thể xuất thẻ lồng nhau trừ khi --mark-tags được chỉ định."
+
+#: builtin/fast-export.c:1152
 msgid "show progress after <n> objects"
 msgstr "hiển thị tiến triển sau <n> đối tượng"
 
-#: builtin/fast-export.c:1126
+#: builtin/fast-export.c:1154
 msgid "select handling of signed tags"
 msgstr "chọn điều khiển của thẻ đã ký"
 
-#: builtin/fast-export.c:1129
+#: builtin/fast-export.c:1157
 msgid "select handling of tags that tag filtered objects"
 msgstr "chọn sự xử lý của các thẻ, cái mà đánh thẻ các đối tượng được lọc ra"
 
-#: builtin/fast-export.c:1132
+#: builtin/fast-export.c:1160
 msgid "select handling of commit messages in an alternate encoding"
 msgstr ""
 "chọn bộ xử lý cho các ghi chú của lần chuyển giao theo một bộ mã thay thế"
 
-#: builtin/fast-export.c:1135
+#: builtin/fast-export.c:1163
 msgid "Dump marks to this file"
 msgstr "Đổ các đánh dấu này vào tập-tin"
 
-#: builtin/fast-export.c:1137
+#: builtin/fast-export.c:1165
 msgid "Import marks from this file"
 msgstr "Nhập vào đánh dấu từ tập tin này"
 
-#: builtin/fast-export.c:1139
+#: builtin/fast-export.c:1169
+msgid "Import marks from this file if it exists"
+msgstr "Nhập vào đánh dấu từ tập tin sẵn có"
+
+#: builtin/fast-export.c:1171
 msgid "Fake a tagger when tags lack one"
 msgstr "Làm giả một cái thẻ khi thẻ bị thiếu một cái"
 
-#: builtin/fast-export.c:1141
+#: builtin/fast-export.c:1173
 msgid "Output full tree for each commit"
 msgstr "Xuất ra toàn bộ cây cho mỗi lần chuyển giao"
 
-#: builtin/fast-export.c:1143
+#: builtin/fast-export.c:1175
 msgid "Use the done feature to terminate the stream"
 msgstr "Sử dụng tính năng done để chấm dứt luồng dữ liệu"
 
-#: builtin/fast-export.c:1144
+#: builtin/fast-export.c:1176
 msgid "Skip output of blob data"
 msgstr "Bỏ qua kết xuất của dữ liệu blob"
 
-#: builtin/fast-export.c:1145 builtin/log.c:1632
+#: builtin/fast-export.c:1177 builtin/log.c:1633
 msgid "refspec"
 msgstr "refspec"
 
-#: builtin/fast-export.c:1146
+#: builtin/fast-export.c:1178
 msgid "Apply refspec to exported refs"
 msgstr "Áp dụng refspec cho refs đã xuất"
 
-#: builtin/fast-export.c:1147
+#: builtin/fast-export.c:1179
 msgid "anonymize output"
 msgstr "kết xuất anonymize"
 
-#: builtin/fast-export.c:1149
+#: builtin/fast-export.c:1181
 msgid "Reference parents which are not in fast-export stream by object id"
 msgstr ""
 "Các cha mẹ tham chiếu cái mà k trong luồng dữ liệu fast-export bởi mã id đối "
 "tượng"
 
-#: builtin/fast-export.c:1151
+#: builtin/fast-export.c:1183
 msgid "Show original object ids of blobs/commits"
 msgstr "Hiển thị các mã id nguyên gốc của blobs/commits"
 
-#: builtin/fetch.c:30
+#: builtin/fast-export.c:1185
+msgid "Label tags with mark ids"
+msgstr "Gắn nhãn thẻ ID dấu"
+
+#: builtin/fast-export.c:1220
+msgid "Cannot pass both --import-marks and --import-marks-if-exists"
+msgstr "Không thể chuyển qua cả hai --import-marks và --import-marks-if-exists"
+
+#: builtin/fetch.c:34
 msgid "git fetch [<options>] [<repository> [<refspec>...]]"
 msgstr "git fetch [<các tùy chọn>] [<kho-chứa> [<refspec>…]]"
 
-#: builtin/fetch.c:31
+#: builtin/fetch.c:35
 msgid "git fetch [<options>] <group>"
 msgstr "git fetch [<các tùy chọn>] [<nhóm>"
 
-#: builtin/fetch.c:32
+#: builtin/fetch.c:36
 msgid "git fetch --multiple [<options>] [(<repository> | <group>)...]"
 msgstr "git fetch --multiple [<các tùy chọn>] [(<kho> | <nhóm>)…]"
 
-#: builtin/fetch.c:33
+#: builtin/fetch.c:37
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<các tùy chọn>]"
 
-#: builtin/fetch.c:125 builtin/pull.c:203
+#: builtin/fetch.c:115
+msgid "fetch.parallel cannot be negative"
+msgstr "fetch.parallel không thể âm"
+
+#: builtin/fetch.c:138 builtin/pull.c:204
 msgid "fetch from all remotes"
 msgstr "lấy về từ tất cả các máy chủ"
 
-#: builtin/fetch.c:127 builtin/pull.c:206
+#: builtin/fetch.c:140 builtin/pull.c:248
+msgid "set upstream for git pull/fetch"
+msgstr "đặt thượng nguồn cho git pull/fetch"
+
+#: builtin/fetch.c:142 builtin/pull.c:207
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "nối thêm vào .git/FETCH_HEAD thay vì ghi đè lên nó"
 
-#: builtin/fetch.c:129 builtin/pull.c:209
+#: builtin/fetch.c:144 builtin/pull.c:210
 msgid "path to upload pack on remote end"
 msgstr "đường dẫn đến gói tải lên trên máy chủ cuối"
 
-#: builtin/fetch.c:130
+#: builtin/fetch.c:145
 msgid "force overwrite of local reference"
 msgstr "ép buộc ghi đè lên tham chiếu nội bộ"
 
-#: builtin/fetch.c:132
+#: builtin/fetch.c:147
 msgid "fetch from multiple remotes"
 msgstr "lấy từ nhiều máy chủ cùng lúc"
 
-#: builtin/fetch.c:134 builtin/pull.c:213
+#: builtin/fetch.c:149 builtin/pull.c:214
 msgid "fetch all tags and associated objects"
 msgstr "lấy tất cả các thẻ cùng với các đối tượng liên quan đến nó"
 
-#: builtin/fetch.c:136
+#: builtin/fetch.c:151
 msgid "do not fetch all tags (--no-tags)"
 msgstr "không lấy tất cả các thẻ (--no-tags)"
 
-#: builtin/fetch.c:138
+#: builtin/fetch.c:153
 msgid "number of submodules fetched in parallel"
 msgstr "số lượng mô-đun-con được lấy đồng thời"
 
-#: builtin/fetch.c:140 builtin/pull.c:216
+#: builtin/fetch.c:155 builtin/pull.c:217
 msgid "prune remote-tracking branches no longer on remote"
 msgstr ""
 "cắt cụt (prune) các nhánh “remote-tracking” không còn tồn tại trên máy chủ "
 "nữa"
 
-#: builtin/fetch.c:142
+#: builtin/fetch.c:157
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr "cắt xém các thẻ nội bộ không còn ở máy chủ và xóa các thẻ đã thay đổi"
 
-#: builtin/fetch.c:143 builtin/fetch.c:166 builtin/pull.c:140
+#: builtin/fetch.c:158 builtin/fetch.c:181 builtin/pull.c:141
 msgid "on-demand"
 msgstr "khi-cần"
 
-#: builtin/fetch.c:144
+#: builtin/fetch.c:159
 msgid "control recursive fetching of submodules"
 msgstr "điều khiển việc lấy về đệ quy trong các mô-đun-con"
 
-#: builtin/fetch.c:148 builtin/pull.c:224
+#: builtin/fetch.c:163 builtin/pull.c:225
 msgid "keep downloaded pack"
 msgstr "giữ lại gói đã tải về"
 
-#: builtin/fetch.c:150
+#: builtin/fetch.c:165
 msgid "allow updating of HEAD ref"
 msgstr "cho phép cập nhật th.chiếu HEAD"
 
-#: builtin/fetch.c:153 builtin/fetch.c:159 builtin/pull.c:227
+#: builtin/fetch.c:168 builtin/fetch.c:174 builtin/pull.c:228
 msgid "deepen history of shallow clone"
 msgstr "làm sâu hơn lịch sử của bản sao"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:170
 msgid "deepen history of shallow repository based on time"
 msgstr "làm sâu hơn lịch sử của kho bản sao shallow dựa trên thời gian"
 
-#: builtin/fetch.c:161 builtin/pull.c:230
+#: builtin/fetch.c:176 builtin/pull.c:231
 msgid "convert to a complete repository"
 msgstr "chuyển đổi hoàn toàn sang kho git"
 
-#: builtin/fetch.c:164
+#: builtin/fetch.c:179
 msgid "prepend this to submodule path output"
 msgstr "soạn sẵn cái này cho kết xuất đường dẫn mô-đun-con"
 
-#: builtin/fetch.c:167
+#: builtin/fetch.c:182
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
@@ -12802,91 +12861,91 @@
 "mặc định cho việc lấy đệ quy các mô-đun-con (có mức ưu tiên thấp hơn các tập "
 "tin cấu hình config)"
 
-#: builtin/fetch.c:171 builtin/pull.c:233
+#: builtin/fetch.c:186 builtin/pull.c:234
 msgid "accept refs that update .git/shallow"
 msgstr "chấp nhận tham chiếu cập nhật .git/shallow"
 
-#: builtin/fetch.c:172 builtin/pull.c:235
+#: builtin/fetch.c:187 builtin/pull.c:236
 msgid "refmap"
 msgstr "refmap"
 
-#: builtin/fetch.c:173 builtin/pull.c:236
+#: builtin/fetch.c:188 builtin/pull.c:237
 msgid "specify fetch refmap"
 msgstr "chỉ ra refmap cần lấy về"
 
-#: builtin/fetch.c:180
+#: builtin/fetch.c:195
 msgid "report that we have only objects reachable from this object"
 msgstr ""
 "báo cáo rằng chúng ta chỉ có các đối tượng tiếp cận được từ đối tượng này"
 
-#: builtin/fetch.c:183
+#: builtin/fetch.c:198
 msgid "run 'gc --auto' after fetching"
 msgstr "chạy 'gc --auto' sau khi lấy về"
 
-#: builtin/fetch.c:185 builtin/pull.c:245
+#: builtin/fetch.c:200 builtin/pull.c:246
 msgid "check for forced-updates on all updated branches"
 msgstr "kiểm cho các-cập-nhật-bắt-buộc trên mọi nhánh đã cập nhật"
 
-#: builtin/fetch.c:491
+#: builtin/fetch.c:510
 msgid "Couldn't find remote ref HEAD"
 msgstr "Không thể tìm thấy máy chủ cho tham chiếu HEAD"
 
-#: builtin/fetch.c:630
+#: builtin/fetch.c:650
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
 msgstr "phần cấu hình fetch.output có chứa giá-trị không hợp lệ %s"
 
-#: builtin/fetch.c:728
+#: builtin/fetch.c:748
 #, c-format
 msgid "object %s not found"
 msgstr "không tìm thấy đối tượng %s"
 
-#: builtin/fetch.c:732
+#: builtin/fetch.c:752
 msgid "[up to date]"
 msgstr "[đã cập nhật]"
 
-#: builtin/fetch.c:745 builtin/fetch.c:761 builtin/fetch.c:833
+#: builtin/fetch.c:765 builtin/fetch.c:781 builtin/fetch.c:853
 msgid "[rejected]"
 msgstr "[Bị từ chối]"
 
-#: builtin/fetch.c:746
+#: builtin/fetch.c:766
 msgid "can't fetch in current branch"
 msgstr "không thể fetch (lấy) về nhánh hiện hành"
 
-#: builtin/fetch.c:756
+#: builtin/fetch.c:776
 msgid "[tag update]"
 msgstr "[cập nhật thẻ]"
 
-#: builtin/fetch.c:757 builtin/fetch.c:794 builtin/fetch.c:816
-#: builtin/fetch.c:828
+#: builtin/fetch.c:777 builtin/fetch.c:814 builtin/fetch.c:836
+#: builtin/fetch.c:848
 msgid "unable to update local ref"
 msgstr "không thể cập nhật tham chiếu nội bộ"
 
-#: builtin/fetch.c:761
+#: builtin/fetch.c:781
 msgid "would clobber existing tag"
 msgstr "nên xóa chồng các thẻ có sẵn"
 
-#: builtin/fetch.c:783
+#: builtin/fetch.c:803
 msgid "[new tag]"
 msgstr "[thẻ mới]"
 
-#: builtin/fetch.c:786
+#: builtin/fetch.c:806
 msgid "[new branch]"
 msgstr "[nhánh mới]"
 
-#: builtin/fetch.c:789
+#: builtin/fetch.c:809
 msgid "[new ref]"
 msgstr "[ref (tham chiếu) mới]"
 
-#: builtin/fetch.c:828
+#: builtin/fetch.c:848
 msgid "forced update"
 msgstr "cưỡng bức cập nhật"
 
-#: builtin/fetch.c:833
+#: builtin/fetch.c:853
 msgid "non-fast-forward"
 msgstr "không-phải-chuyển-tiếp-nhanh"
 
-#: builtin/fetch.c:854
+#: builtin/fetch.c:874
 msgid ""
 "Fetch normally indicates which branches had a forced update,\n"
 "but that check has been disabled. To re-enable, use '--show-forced-updates'\n"
@@ -12896,7 +12955,7 @@
 "nhưng lựa chọn bị tắt. Để kích hoạt lại, sử dụng cờ\n"
 "'--show-forced-updates' hoặc chạy 'git config fetch.showForcedUpdates true'."
 
-#: builtin/fetch.c:858
+#: builtin/fetch.c:878
 #, c-format
 msgid ""
 "It took %.2f seconds to check forced updates. You can use\n"
@@ -12909,22 +12968,22 @@
 "false'\n"
 "để tránh kiểm tra này.\n"
 
-#: builtin/fetch.c:888
+#: builtin/fetch.c:908
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s đã không gửi tất cả các đối tượng cần thiết\n"
 
-#: builtin/fetch.c:909
+#: builtin/fetch.c:929
 #, c-format
 msgid "reject %s because shallow roots are not allowed to be updated"
 msgstr "từ chối %s bởi vì các gốc nông thì không được phép cập nhật"
 
-#: builtin/fetch.c:1000 builtin/fetch.c:1131
+#: builtin/fetch.c:1020 builtin/fetch.c:1157
 #, c-format
 msgid "From %.*s\n"
 msgstr "Từ %.*s\n"
 
-#: builtin/fetch.c:1011
+#: builtin/fetch.c:1031
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -12933,60 +12992,81 @@
 "một số tham chiếu nội bộ không thể được cập nhật; hãy thử chạy\n"
 " “git remote prune %s” để bỏ đi những nhánh cũ, hay bị xung đột"
 
-#: builtin/fetch.c:1101
+#: builtin/fetch.c:1127
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s sẽ trở thành không đầu (không được quản lý))"
 
-#: builtin/fetch.c:1102
+#: builtin/fetch.c:1128
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s đã trở thành không đầu (không được quản lý))"
 
-#: builtin/fetch.c:1134
+#: builtin/fetch.c:1160
 msgid "[deleted]"
 msgstr "[đã xóa]"
 
-#: builtin/fetch.c:1135 builtin/remote.c:1036
+#: builtin/fetch.c:1161 builtin/remote.c:1036
 msgid "(none)"
 msgstr "(không)"
 
-#: builtin/fetch.c:1158
+#: builtin/fetch.c:1184
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr ""
 "Từ chối việc lấy vào trong nhánh hiện tại %s của một kho chứa không phải kho "
 "trần (bare)"
 
-#: builtin/fetch.c:1177
+#: builtin/fetch.c:1203
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr "Tùy chọn \"%s\" có giá trị \"%s\" là không hợp lệ cho %s"
 
-#: builtin/fetch.c:1180
+#: builtin/fetch.c:1206
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr "Tùy chọn \"%s\" bị bỏ qua với %s\n"
 
-#: builtin/fetch.c:1484
+#: builtin/fetch.c:1414
+msgid "multiple branch detected, incompatible with --set-upstream"
+msgstr "phát hiện nhiều nhánh, không tương thích với --set-upstream"
+
+#: builtin/fetch.c:1429
+msgid "not setting upstream for a remote remote-tracking branch"
+msgstr "không cài đặt thượng nguồn cho một nhánh được theo dõi trên máy chủ"
+
+#: builtin/fetch.c:1431
+msgid "not setting upstream for a remote tag"
+msgstr "không cài đặt thượng nguồn cho một thẻ nhánh trên máy chủ"
+
+#: builtin/fetch.c:1433
+msgid "unknown branch type"
+msgstr "không hiểu kiểu nhánh"
+
+#: builtin/fetch.c:1435
+msgid ""
+"no source branch found.\n"
+"you need to specify exactly one branch with the --set-upstream option."
+msgstr ""
+"không tìm thấy nhánh nguồn.\n"
+"bạn cần phải chỉ định chính xác một nhánh với tùy chọn --set-upstream."
+
+#: builtin/fetch.c:1561 builtin/fetch.c:1623
 #, c-format
 msgid "Fetching %s\n"
 msgstr "Đang lấy “%s” về\n"
 
-#: builtin/fetch.c:1486 builtin/remote.c:100
+#: builtin/fetch.c:1571 builtin/fetch.c:1625 builtin/remote.c:100
 #, c-format
 msgid "Could not fetch %s"
 msgstr "Không thể lấy“%s” về"
 
-#: builtin/fetch.c:1532
-msgid ""
-"--filter can only be used with the remote configured in extensions."
-"partialClone"
-msgstr ""
-"--filter chỉ có thể được dùng với máy chủ được cấu hình bằng extensions."
-"partialClone"
+#: builtin/fetch.c:1583
+#, c-format
+msgid "could not fetch '%s' (exit code: %d)\n"
+msgstr "không thể lấy “%s” (mã thoát: %d)\n"
 
-#: builtin/fetch.c:1556
+#: builtin/fetch.c:1685
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
@@ -12994,44 +13074,44 @@
 "Chưa chỉ ra kho chứa máy chủ.  Xin hãy chỉ định hoặc là URL hoặc\n"
 "tên máy chủ từ cái mà những điểm xét duyệt mới có thể được fetch (lấy về)."
 
-#: builtin/fetch.c:1593
+#: builtin/fetch.c:1722
 msgid "You need to specify a tag name."
 msgstr "Bạn phải định rõ tên thẻ."
 
-#: builtin/fetch.c:1644
+#: builtin/fetch.c:1774
 msgid "Negative depth in --deepen is not supported"
 msgstr "Mức sâu là số âm trong --deepen là không được hỗ trợ"
 
-#: builtin/fetch.c:1646
+#: builtin/fetch.c:1776
 msgid "--deepen and --depth are mutually exclusive"
 msgstr "Các tùy chọn--deepen và --depth loại từ lẫn nhau"
 
-#: builtin/fetch.c:1651
+#: builtin/fetch.c:1781
 msgid "--depth and --unshallow cannot be used together"
 msgstr "tùy chọn --depth và --unshallow không thể sử dụng cùng với nhau"
 
-#: builtin/fetch.c:1653
+#: builtin/fetch.c:1783
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "--unshallow trên kho hoàn chỉnh là không hợp lý"
 
-#: builtin/fetch.c:1669
+#: builtin/fetch.c:1799
 msgid "fetch --all does not take a repository argument"
 msgstr "lệnh lấy về \"fetch --all\" không lấy đối số kho chứa"
 
-#: builtin/fetch.c:1671
+#: builtin/fetch.c:1801
 msgid "fetch --all does not make sense with refspecs"
 msgstr "lệnh lấy về \"fetch --all\" không hợp lý với refspecs"
 
-#: builtin/fetch.c:1680
+#: builtin/fetch.c:1810
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr "Không có nhóm máy chủ hay máy chủ như thế: %s"
 
-#: builtin/fetch.c:1687
+#: builtin/fetch.c:1817
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr "Việc lấy về cả một nhóm và chỉ định refspecs không hợp lý"
 
-#: builtin/fetch.c:1703
+#: builtin/fetch.c:1835
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
@@ -13371,7 +13451,7 @@
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "tham số không hợp lệ: cần sha1, nhưng lại nhận được “%s”"
 
-#: builtin/gc.c:34
+#: builtin/gc.c:35
 msgid "git gc [<options>]"
 msgstr "git gc [<các tùy chọn>]"
 
@@ -13385,17 +13465,17 @@
 msgid "failed to parse '%s' value '%s'"
 msgstr "gặp lỗi khi phân tích “%s” giá trị “%s”"
 
-#: builtin/gc.c:476 builtin/init-db.c:55
+#: builtin/gc.c:475 builtin/init-db.c:55
 #, c-format
 msgid "cannot stat '%s'"
 msgstr "không thể lấy thông tin thống kê về “%s”"
 
-#: builtin/gc.c:485 builtin/notes.c:240 builtin/tag.c:529
+#: builtin/gc.c:484 builtin/notes.c:240 builtin/tag.c:529
 #, c-format
 msgid "cannot read '%s'"
 msgstr "không thể đọc “%s”"
 
-#: builtin/gc.c:492
+#: builtin/gc.c:491
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -13410,54 +13490,54 @@
 "\n"
 "%s"
 
-#: builtin/gc.c:540
+#: builtin/gc.c:539
 msgid "prune unreferenced objects"
 msgstr "xóa bỏ các đối tượng không được tham chiếu"
 
-#: builtin/gc.c:542
+#: builtin/gc.c:541
 msgid "be more thorough (increased runtime)"
 msgstr "cẩn thận hơn nữa (tăng thời gian chạy)"
 
-#: builtin/gc.c:543
+#: builtin/gc.c:542
 msgid "enable auto-gc mode"
 msgstr "bật chế độ auto-gc"
 
-#: builtin/gc.c:546
+#: builtin/gc.c:545
 msgid "force running gc even if there may be another gc running"
 msgstr "buộc gc chạy ngay cả khi có tiến trình gc khác đang chạy"
 
-#: builtin/gc.c:549
+#: builtin/gc.c:548
 msgid "repack all other packs except the largest pack"
 msgstr "đóng gói lại tất cả các gói khác ngoại trừ gói lớn nhất"
 
-#: builtin/gc.c:566
+#: builtin/gc.c:565
 #, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr "gặp lỗi khi phân tích giá trị gc.logexpiry %s"
 
-#: builtin/gc.c:577
+#: builtin/gc.c:576
 #, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr "gặp lỗi khi phân tích giá trị prune %s"
 
-#: builtin/gc.c:597
+#: builtin/gc.c:596
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr ""
 "Tự động đóng gói kho chứa trên nền hệ thống để tối ưu hóa hiệu suất làm "
 "việc.\n"
 
-#: builtin/gc.c:599
+#: builtin/gc.c:598
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr "Tự động đóng gói kho chứa để tối ưu hóa hiệu suất làm việc.\n"
 
-#: builtin/gc.c:600
+#: builtin/gc.c:599
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr "Xem \"git help gc\" để có hướng dẫn cụ thể về cách dọn dẹp kho git.\n"
 
-#: builtin/gc.c:640
+#: builtin/gc.c:639
 #, c-format
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
@@ -13465,7 +13545,7 @@
 "gc đang được thực hiện trên máy “%s” pid %<PRIuMAX> (dùng --force nếu không "
 "phải thế)"
 
-#: builtin/gc.c:695
+#: builtin/gc.c:694
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr ""
@@ -13491,258 +13571,258 @@
 #. grep.threads
 #.
 #: builtin/grep.c:287 builtin/index-pack.c:1534 builtin/index-pack.c:1727
-#: builtin/pack-objects.c:2728
+#: builtin/pack-objects.c:2708
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "không hỗ trợ đa tuyến, bỏ qua %s"
 
-#: builtin/grep.c:467 builtin/grep.c:591 builtin/grep.c:633
+#: builtin/grep.c:467 builtin/grep.c:592 builtin/grep.c:635
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "không thể đọc cây (%s)"
 
-#: builtin/grep.c:648
+#: builtin/grep.c:650
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "không thể thực hiện lệnh grep (lọc tìm) từ đối tượng thuộc kiểu %s"
 
-#: builtin/grep.c:714
+#: builtin/grep.c:716
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "chuyển đến “%c” cần một giá trị bằng số"
 
-#: builtin/grep.c:813
+#: builtin/grep.c:815
 msgid "search in index instead of in the work tree"
 msgstr "tìm trong bảng mục lục thay vì trong cây làm việc"
 
-#: builtin/grep.c:815
+#: builtin/grep.c:817
 msgid "find in contents not managed by git"
 msgstr "tìm trong nội dung không được quản lý bởi git"
 
-#: builtin/grep.c:817
+#: builtin/grep.c:819
 msgid "search in both tracked and untracked files"
 msgstr "tìm kiếm các tập tin được và chưa được theo dõi dấu vết"
 
-#: builtin/grep.c:819
+#: builtin/grep.c:821
 msgid "ignore files specified via '.gitignore'"
 msgstr "các tập tin bị bỏ qua được chỉ định thông qua “.gitignore”"
 
-#: builtin/grep.c:821
+#: builtin/grep.c:823
 msgid "recursively search in each submodule"
 msgstr "tìm kiếm đệ quy trong từng mô-đun-con"
 
-#: builtin/grep.c:824
+#: builtin/grep.c:826
 msgid "show non-matching lines"
 msgstr "hiển thị những dòng không khớp với mẫu"
 
-#: builtin/grep.c:826
+#: builtin/grep.c:828
 msgid "case insensitive matching"
 msgstr "phân biệt HOA/thường"
 
-#: builtin/grep.c:828
+#: builtin/grep.c:830
 msgid "match patterns only at word boundaries"
 msgstr "chỉ khớp mẫu tại đường ranh giới từ"
 
-#: builtin/grep.c:830
+#: builtin/grep.c:832
 msgid "process binary files as text"
 msgstr "xử lý tập tin nhị phân như là dạng văn bản thường"
 
-#: builtin/grep.c:832
+#: builtin/grep.c:834
 msgid "don't match patterns in binary files"
 msgstr "không khớp mẫu trong các tập tin nhị phân"
 
-#: builtin/grep.c:835
+#: builtin/grep.c:837
 msgid "process binary files with textconv filters"
 msgstr "xử lý tập tin nhị phân với các bộ lọc “textconv”"
 
-#: builtin/grep.c:837
+#: builtin/grep.c:839
 msgid "search in subdirectories (default)"
 msgstr "tìm kiếm trong thư mục con (mặc định)"
 
-#: builtin/grep.c:839
+#: builtin/grep.c:841
 msgid "descend at most <depth> levels"
 msgstr "hạ xuống ít nhất là mức <sâu>"
 
-#: builtin/grep.c:843
+#: builtin/grep.c:845
 msgid "use extended POSIX regular expressions"
 msgstr "dùng biểu thức chính qui POSIX có mở rộng"
 
-#: builtin/grep.c:846
+#: builtin/grep.c:848
 msgid "use basic POSIX regular expressions (default)"
 msgstr "sử dụng biểu thức chính quy kiểu POSIX (mặc định)"
 
-#: builtin/grep.c:849
+#: builtin/grep.c:851
 msgid "interpret patterns as fixed strings"
 msgstr "diễn dịch các mẫu như là chuỗi cố định"
 
-#: builtin/grep.c:852
+#: builtin/grep.c:854
 msgid "use Perl-compatible regular expressions"
 msgstr "sử dụng biểu thức chính quy tương thích Perl"
 
-#: builtin/grep.c:855
+#: builtin/grep.c:857
 msgid "show line numbers"
 msgstr "hiển thị số của dòng"
 
-#: builtin/grep.c:856
+#: builtin/grep.c:858
 msgid "show column number of first match"
 msgstr "hiển thị số cột của khớp với mẫu đầu tiên"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:859
 msgid "don't show filenames"
 msgstr "không hiển thị tên tập tin"
 
-#: builtin/grep.c:858
+#: builtin/grep.c:860
 msgid "show filenames"
 msgstr "hiển thị các tên tập tin"
 
-#: builtin/grep.c:860
+#: builtin/grep.c:862
 msgid "show filenames relative to top directory"
 msgstr "hiển thị tên tập tin tương đối với thư mục đỉnh (top)"
 
-#: builtin/grep.c:862
+#: builtin/grep.c:864
 msgid "show only filenames instead of matching lines"
 msgstr "chỉ hiển thị tên tập tin thay vì những dòng khớp với mẫu"
 
-#: builtin/grep.c:864
+#: builtin/grep.c:866
 msgid "synonym for --files-with-matches"
 msgstr "đồng nghĩa với --files-with-matches"
 
-#: builtin/grep.c:867
+#: builtin/grep.c:869
 msgid "show only the names of files without match"
 msgstr "chỉ hiển thị tên cho những tập tin không khớp với mẫu"
 
-#: builtin/grep.c:869
+#: builtin/grep.c:871
 msgid "print NUL after filenames"
 msgstr "thêm NUL vào sau tên tập tin"
 
-#: builtin/grep.c:872
+#: builtin/grep.c:874
 msgid "show only matching parts of a line"
 msgstr "chỉ hiển thị những phần khớp với mẫu của một dòng"
 
-#: builtin/grep.c:874
+#: builtin/grep.c:876
 msgid "show the number of matches instead of matching lines"
 msgstr "hiển thị số lượng khớp thay vì những dòng khớp với mẫu"
 
-#: builtin/grep.c:875
+#: builtin/grep.c:877
 msgid "highlight matches"
 msgstr "tô sáng phần khớp mẫu"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:879
 msgid "print empty line between matches from different files"
 msgstr "hiển thị dòng trống giữa các lần khớp từ các tập tin khác biệt"
 
-#: builtin/grep.c:879
+#: builtin/grep.c:881
 msgid "show filename only once above matches from same file"
 msgstr ""
 "hiển thị tên tập tin một lần phía trên các lần khớp từ cùng một tập tin"
 
-#: builtin/grep.c:882
+#: builtin/grep.c:884
 msgid "show <n> context lines before and after matches"
 msgstr "hiển thị <n> dòng nội dung phía trước và sau các lần khớp"
 
-#: builtin/grep.c:885
+#: builtin/grep.c:887
 msgid "show <n> context lines before matches"
 msgstr "hiển thị <n> dòng nội dung trước khớp"
 
-#: builtin/grep.c:887
+#: builtin/grep.c:889
 msgid "show <n> context lines after matches"
 msgstr "hiển thị <n> dòng nội dung sau khớp"
 
-#: builtin/grep.c:889
+#: builtin/grep.c:891
 msgid "use <n> worker threads"
 msgstr "dùng <n> tuyến trình làm việc"
 
-#: builtin/grep.c:890
+#: builtin/grep.c:892
 msgid "shortcut for -C NUM"
 msgstr "dạng viết tắt của -C SỐ"
 
-#: builtin/grep.c:893
+#: builtin/grep.c:895
 msgid "show a line with the function name before matches"
 msgstr "hiển thị dòng vói tên hàm trước các lần khớp"
 
-#: builtin/grep.c:895
+#: builtin/grep.c:897
 msgid "show the surrounding function"
 msgstr "hiển thị hàm bao quanh"
 
-#: builtin/grep.c:898
+#: builtin/grep.c:900
 msgid "read patterns from file"
 msgstr "đọc mẫu từ tập-tin"
 
-#: builtin/grep.c:900
+#: builtin/grep.c:902
 msgid "match <pattern>"
 msgstr "match <mẫu>"
 
-#: builtin/grep.c:902
+#: builtin/grep.c:904
 msgid "combine patterns specified with -e"
 msgstr "tổ hợp mẫu được chỉ ra với tùy chọn -e"
 
-#: builtin/grep.c:914
+#: builtin/grep.c:916
 msgid "indicate hit with exit status without output"
 msgstr "đưa ra gợi ý với trạng thái thoát mà không có kết xuất"
 
-#: builtin/grep.c:916
+#: builtin/grep.c:918
 msgid "show only matches from files that match all patterns"
 msgstr "chỉ hiển thị những cái khớp từ tập tin mà nó khớp toàn bộ các mẫu"
 
-#: builtin/grep.c:918
+#: builtin/grep.c:920
 msgid "show parse tree for grep expression"
 msgstr "hiển thị cây phân tích cú pháp cho biểu thức “grep” (tìm kiếm)"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:924
 msgid "pager"
 msgstr "dàn trang"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:924
 msgid "show matching files in the pager"
 msgstr "hiển thị các tập tin khớp trong trang giấy"
 
-#: builtin/grep.c:926
+#: builtin/grep.c:928
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "cho phép gọi grep(1) (bị bỏ qua bởi lần dịch này)"
 
-#: builtin/grep.c:990
+#: builtin/grep.c:992
 msgid "no pattern given"
 msgstr "chưa chỉ ra mẫu"
 
-#: builtin/grep.c:1026
+#: builtin/grep.c:1028
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr "--no-index hay --untracked không được sử dụng cùng với revs"
 
-#: builtin/grep.c:1034
+#: builtin/grep.c:1036
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "không thể phân giải điểm xét duyệt: %s"
 
-#: builtin/grep.c:1065
+#: builtin/grep.c:1067
 msgid "invalid option combination, ignoring --threads"
 msgstr "tổ hợp tùy chọn không hợp lệ, bỏ qua --threads"
 
-#: builtin/grep.c:1068 builtin/pack-objects.c:3416
+#: builtin/grep.c:1070 builtin/pack-objects.c:3400
 msgid "no threads support, ignoring --threads"
 msgstr "không hỗ trợ đa tuyến, bỏ qua --threads"
 
-#: builtin/grep.c:1071 builtin/index-pack.c:1531 builtin/pack-objects.c:2725
+#: builtin/grep.c:1073 builtin/index-pack.c:1531 builtin/pack-objects.c:2705
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "số tuyến chỉ ra không hợp lệ (%d)"
 
-#: builtin/grep.c:1094
+#: builtin/grep.c:1096
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "--open-files-in-pager chỉ làm việc trên cây-làm-việc"
 
-#: builtin/grep.c:1117
+#: builtin/grep.c:1119
 msgid "option not supported with --recurse-submodules"
 msgstr "tùy chọn không được hỗ trợ với --recurse-submodules"
 
-#: builtin/grep.c:1123
+#: builtin/grep.c:1125
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr "--cached hay --untracked không được sử dụng với --no-index"
 
-#: builtin/grep.c:1129
+#: builtin/grep.c:1131
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr "--[no-]exclude-standard không thể sử dụng cho nội dung lưu dấu vết"
 
-#: builtin/grep.c:1137
+#: builtin/grep.c:1139
 msgid "both --cached and trees are given"
 msgstr "cả hai --cached và các cây phải được chỉ ra"
 
@@ -14052,7 +14132,7 @@
 msgid "Resolving deltas"
 msgstr "Đang phân giải các delta"
 
-#: builtin/index-pack.c:1205 builtin/pack-objects.c:2497
+#: builtin/index-pack.c:1205 builtin/pack-objects.c:2481
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "không thể tạo tuyến: %s"
@@ -14115,7 +14195,7 @@
 msgid "cannot store index file"
 msgstr "không thể lưu trữ tập tin ghi mục lục"
 
-#: builtin/index-pack.c:1525 builtin/pack-objects.c:2736
+#: builtin/index-pack.c:1525 builtin/pack-objects.c:2716
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "sai pack.indexversion=%<PRIu32>"
@@ -14394,74 +14474,74 @@
 msgid "git show %s: bad file"
 msgstr "git show %s: sai tập tin"
 
-#: builtin/log.c:549 builtin/log.c:643
+#: builtin/log.c:549 builtin/log.c:644
 #, c-format
 msgid "could not read object %s"
 msgstr "không thể đọc đối tượng %s"
 
-#: builtin/log.c:668
+#: builtin/log.c:669
 #, c-format
 msgid "unknown type: %d"
 msgstr "không nhận ra kiểu: %d"
 
-#: builtin/log.c:791
+#: builtin/log.c:792
 msgid "format.headers without value"
 msgstr "format.headers không có giá trị cụ thể"
 
-#: builtin/log.c:908
+#: builtin/log.c:909
 msgid "name of output directory is too long"
 msgstr "tên của thư mục kết xuất quá dài"
 
-#: builtin/log.c:924
+#: builtin/log.c:925
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "không thể mở tập tin miếng vá: %s"
 
-#: builtin/log.c:941
+#: builtin/log.c:942
 msgid "need exactly one range"
 msgstr "cần chính xác một vùng"
 
-#: builtin/log.c:951
+#: builtin/log.c:952
 msgid "not a range"
 msgstr "không phải là một vùng"
 
-#: builtin/log.c:1074
+#: builtin/log.c:1075
 msgid "cover letter needs email format"
 msgstr "“cover letter” cần cho định dạng thư"
 
-#: builtin/log.c:1080
+#: builtin/log.c:1081
 msgid "failed to create cover-letter file"
 msgstr "gặp lỗi khi tạo các tập tin cover-letter"
 
-#: builtin/log.c:1159
+#: builtin/log.c:1160
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "in-reply-to điên rồ: %s"
 
-#: builtin/log.c:1186
+#: builtin/log.c:1187
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<các tùy chọn>] [<kể-từ> | <vùng-xem-xét>]"
 
-#: builtin/log.c:1244
+#: builtin/log.c:1245
 msgid "two output directories?"
 msgstr "hai thư mục kết xuất?"
 
-#: builtin/log.c:1355 builtin/log.c:2099 builtin/log.c:2101 builtin/log.c:2113
+#: builtin/log.c:1356 builtin/log.c:2116 builtin/log.c:2118 builtin/log.c:2130
 #, c-format
 msgid "unknown commit %s"
 msgstr "không hiểu lần chuyển giao %s"
 
-#: builtin/log.c:1365 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1366 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "gặp lỗi khi phân giải “%s” như là một tham chiếu hợp lệ"
 
-#: builtin/log.c:1370
+#: builtin/log.c:1371
 msgid "could not find exact merge base"
 msgstr "không tìm thấy nền hòa trộn chính xác"
 
-#: builtin/log.c:1374
+#: builtin/log.c:1375
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -14472,271 +14552,271 @@
 "nhánh máy chủ. Hoặc là bạn có thể chỉ định lần chuyển giao nền bằng\n"
 "\"--base=<base-commit-id>\" một cách thủ công"
 
-#: builtin/log.c:1394
+#: builtin/log.c:1395
 msgid "failed to find exact merge base"
 msgstr "gặp lỗi khi tìm nền hòa trộn chính xác"
 
-#: builtin/log.c:1405
+#: builtin/log.c:1406
 msgid "base commit should be the ancestor of revision list"
 msgstr "lần chuyển giao nền không là tổ tiên của danh sách điểm xét duyệt"
 
-#: builtin/log.c:1409
+#: builtin/log.c:1410
 msgid "base commit shouldn't be in revision list"
 msgstr "lần chuyển giao nền không được trong danh sách điểm xét duyệt"
 
-#: builtin/log.c:1462
+#: builtin/log.c:1463
 msgid "cannot get patch id"
 msgstr "không thể lấy mã miếng vá"
 
-#: builtin/log.c:1514
+#: builtin/log.c:1515
 msgid "failed to infer range-diff ranges"
 msgstr "gặp lỗi khi suy luận range-diff (vùng khác biệt)"
 
-#: builtin/log.c:1559
+#: builtin/log.c:1560
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "dùng [PATCH n/m] ngay cả với miếng vá đơn"
 
-#: builtin/log.c:1562
+#: builtin/log.c:1563
 msgid "use [PATCH] even with multiple patches"
 msgstr "dùng [VÁ] ngay cả với các miếng vá phức tạp"
 
-#: builtin/log.c:1566
+#: builtin/log.c:1567
 msgid "print patches to standard out"
 msgstr "hiển thị miếng vá ra đầu ra chuẩn"
 
-#: builtin/log.c:1568
+#: builtin/log.c:1569
 msgid "generate a cover letter"
 msgstr "tạo bì thư"
 
-#: builtin/log.c:1570
+#: builtin/log.c:1571
 msgid "use simple number sequence for output file names"
 msgstr "sử dụng chỗi dãy số dạng đơn giản cho tên tập-tin xuất ra"
 
-#: builtin/log.c:1571
+#: builtin/log.c:1572
 msgid "sfx"
 msgstr "sfx"
 
-#: builtin/log.c:1572
+#: builtin/log.c:1573
 msgid "use <sfx> instead of '.patch'"
 msgstr "sử dụng <sfx> thay cho “.patch”"
 
-#: builtin/log.c:1574
+#: builtin/log.c:1575
 msgid "start numbering patches at <n> instead of 1"
 msgstr "bắt đầu đánh số miếng vá từ <n> thay vì 1"
 
-#: builtin/log.c:1576
+#: builtin/log.c:1577
 msgid "mark the series as Nth re-roll"
 msgstr "đánh dấu chuỗi nối tiếp dạng thứ-N re-roll"
 
-#: builtin/log.c:1578
+#: builtin/log.c:1579
 msgid "Use [RFC PATCH] instead of [PATCH]"
 msgstr "Dùng [RFC VÁ] thay cho [VÁ]"
 
-#: builtin/log.c:1581
+#: builtin/log.c:1582
 msgid "Use [<prefix>] instead of [PATCH]"
 msgstr "Dùng [<tiền-tố>] thay cho [VÁ]"
 
-#: builtin/log.c:1584
+#: builtin/log.c:1585
 msgid "store resulting files in <dir>"
 msgstr "lưu các tập tin kết quả trong <t.mục>"
 
-#: builtin/log.c:1587
+#: builtin/log.c:1588
 msgid "don't strip/add [PATCH]"
 msgstr "không strip/add [VÁ]"
 
-#: builtin/log.c:1590
+#: builtin/log.c:1591
 msgid "don't output binary diffs"
 msgstr "không kết xuất diff (những khác biệt) nhị phân"
 
-#: builtin/log.c:1592
+#: builtin/log.c:1593
 msgid "output all-zero hash in From header"
 msgstr "xuất mọi mã băm all-zero trong phần đầu From"
 
-#: builtin/log.c:1594
+#: builtin/log.c:1595
 msgid "don't include a patch matching a commit upstream"
 msgstr "không bao gồm miếng vá khớp với một lần chuyển giao thượng nguồn"
 
-#: builtin/log.c:1596
+#: builtin/log.c:1597
 msgid "show patch format instead of default (patch + stat)"
 msgstr "hiển thị định dạng miếng vá thay vì mặc định (miếng vá + thống kê)"
 
-#: builtin/log.c:1598
+#: builtin/log.c:1599
 msgid "Messaging"
 msgstr "Lời nhắn"
 
-#: builtin/log.c:1599
+#: builtin/log.c:1600
 msgid "header"
 msgstr "đầu đề thư"
 
-#: builtin/log.c:1600
+#: builtin/log.c:1601
 msgid "add email header"
 msgstr "thêm đầu đề thư"
 
-#: builtin/log.c:1601 builtin/log.c:1603
+#: builtin/log.c:1602 builtin/log.c:1604
 msgid "email"
 msgstr "thư điện tử"
 
-#: builtin/log.c:1601
+#: builtin/log.c:1602
 msgid "add To: header"
 msgstr "thêm To: đầu đề thư"
 
-#: builtin/log.c:1603
+#: builtin/log.c:1604
 msgid "add Cc: header"
 msgstr "thêm Cc: đầu đề thư"
 
-#: builtin/log.c:1605
+#: builtin/log.c:1606
 msgid "ident"
 msgstr "thụt lề"
 
-#: builtin/log.c:1606
+#: builtin/log.c:1607
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 "đặt “Địa chỉ gửi” thành <thụ lề> (hoặc thụt lề người commit nếu bỏ quên)"
 
-#: builtin/log.c:1608
+#: builtin/log.c:1609
 msgid "message-id"
 msgstr "message-id"
 
-#: builtin/log.c:1609
+#: builtin/log.c:1610
 msgid "make first mail a reply to <message-id>"
 msgstr "dùng thư đầu tiên để trả lời <message-id>"
 
-#: builtin/log.c:1610 builtin/log.c:1613
+#: builtin/log.c:1611 builtin/log.c:1614
 msgid "boundary"
 msgstr "ranh giới"
 
-#: builtin/log.c:1611
+#: builtin/log.c:1612
 msgid "attach the patch"
 msgstr "đính kèm miếng vá"
 
-#: builtin/log.c:1614
+#: builtin/log.c:1615
 msgid "inline the patch"
 msgstr "dùng miếng vá làm nội dung"
 
-#: builtin/log.c:1618
+#: builtin/log.c:1619
 msgid "enable message threading, styles: shallow, deep"
 msgstr "cho phép luồng lời nhắn, kiểu: “shallow”, “deep”"
 
-#: builtin/log.c:1620
+#: builtin/log.c:1621
 msgid "signature"
 msgstr "chữ ký"
 
-#: builtin/log.c:1621
+#: builtin/log.c:1622
 msgid "add a signature"
 msgstr "thêm chữ ký"
 
-#: builtin/log.c:1622
+#: builtin/log.c:1623
 msgid "base-commit"
 msgstr "lần_chuyển_giao_nền"
 
-#: builtin/log.c:1623
+#: builtin/log.c:1624
 msgid "add prerequisite tree info to the patch series"
 msgstr "add trước hết đòi hỏi thông tin cây tới sê-ri miếng vá"
 
-#: builtin/log.c:1625
+#: builtin/log.c:1626
 msgid "add a signature from a file"
 msgstr "thêm chữ ký từ một tập tin"
 
-#: builtin/log.c:1626
+#: builtin/log.c:1627
 msgid "don't print the patch filenames"
 msgstr "không hiển thị các tên tập tin của miếng vá"
 
-#: builtin/log.c:1628
+#: builtin/log.c:1629
 msgid "show progress while generating patches"
 msgstr "hiển thị bộ đo tiến triển trong khi tạo các miếng vá"
 
-#: builtin/log.c:1630
+#: builtin/log.c:1631
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr ""
 "hiển thị các thay đổi dựa trên <rev> trong các chữ bao bọc hoặc miếng vá đơn"
 
-#: builtin/log.c:1633
+#: builtin/log.c:1634
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
 "hiển thị các thay đổi dựa trên <refspec> trong các chữ bao bọc hoặc miếng vá "
 "đơn"
 
-#: builtin/log.c:1635
+#: builtin/log.c:1636
 msgid "percentage by which creation is weighted"
 msgstr "tỷ lệ phần trăm theo cái tạo là weighted"
 
-#: builtin/log.c:1710
+#: builtin/log.c:1711
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "dòng thụt lề không hợp lệ: %s"
 
-#: builtin/log.c:1725
+#: builtin/log.c:1726
 msgid "-n and -k are mutually exclusive"
 msgstr "-n và  -k loại từ lẫn nhau"
 
-#: builtin/log.c:1727
+#: builtin/log.c:1728
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr "--subject-prefix/--rfc và -k xung khắc nhau"
 
-#: builtin/log.c:1735
+#: builtin/log.c:1736
 msgid "--name-only does not make sense"
 msgstr "--name-only không hợp lý"
 
-#: builtin/log.c:1737
+#: builtin/log.c:1738
 msgid "--name-status does not make sense"
 msgstr "--name-status không hợp lý"
 
-#: builtin/log.c:1739
+#: builtin/log.c:1740
 msgid "--check does not make sense"
 msgstr "--check không hợp lý"
 
-#: builtin/log.c:1771
+#: builtin/log.c:1773
 msgid "standard output, or directory, which one?"
 msgstr "đầu ra chuẩn, hay thư mục, chọn cái nào?"
 
-#: builtin/log.c:1860
+#: builtin/log.c:1877
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff cần --cover-letter hoặc vá đơn"
 
-#: builtin/log.c:1864
+#: builtin/log.c:1881
 msgid "Interdiff:"
 msgstr "Interdiff:"
 
-#: builtin/log.c:1865
+#: builtin/log.c:1882
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Interdiff dựa trên v%d:"
 
-#: builtin/log.c:1871
+#: builtin/log.c:1888
 msgid "--creation-factor requires --range-diff"
 msgstr "--creation-factor yêu cầu --range-diff"
 
-#: builtin/log.c:1875
+#: builtin/log.c:1892
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff yêu cầu --cover-letter hoặc miếng vá đơn"
 
-#: builtin/log.c:1883
+#: builtin/log.c:1900
 msgid "Range-diff:"
 msgstr "Range-diff:"
 
-#: builtin/log.c:1884
+#: builtin/log.c:1901
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "Range-diff dựa trên v%d:"
 
-#: builtin/log.c:1895
+#: builtin/log.c:1912
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "không thể đọc tập tin chữ ký “%s”"
 
-#: builtin/log.c:1931
+#: builtin/log.c:1948
 msgid "Generating patches"
 msgstr "Đang tạo các miếng vá"
 
-#: builtin/log.c:1975
+#: builtin/log.c:1992
 msgid "failed to create output files"
 msgstr "gặp lỗi khi tạo các tập tin kết xuất"
 
-#: builtin/log.c:2034
+#: builtin/log.c:2051
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<thượng-nguồn> [<đầu> [<giới-hạn>]]]"
 
-#: builtin/log.c:2088
+#: builtin/log.c:2105
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -14865,7 +14945,7 @@
 msgid "do not print remote URL"
 msgstr "không hiển thị URL máy chủ"
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1464
+#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1488
 msgid "exec"
 msgstr "thực thi"
 
@@ -14974,31 +15054,31 @@
 msgid "Available custom strategies are:"
 msgstr "Các chiến lược tùy chỉnh sẵn sàng là:"
 
-#: builtin/merge.c:244 builtin/pull.c:151
+#: builtin/merge.c:244 builtin/pull.c:152
 msgid "do not show a diffstat at the end of the merge"
 msgstr "không hiển thị thống kê khác biệt tại cuối của lần hòa trộn"
 
-#: builtin/merge.c:247 builtin/pull.c:154
+#: builtin/merge.c:247 builtin/pull.c:155
 msgid "show a diffstat at the end of the merge"
 msgstr "hiển thị thống kê khác biệt tại cuối của hòa trộn"
 
-#: builtin/merge.c:248 builtin/pull.c:157
+#: builtin/merge.c:248 builtin/pull.c:158
 msgid "(synonym to --stat)"
 msgstr "(đồng nghĩa với --stat)"
 
-#: builtin/merge.c:250 builtin/pull.c:160
+#: builtin/merge.c:250 builtin/pull.c:161
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr "thêm (ít nhất <n>) mục từ shortlog cho ghi chú chuyển giao hòa trộn"
 
-#: builtin/merge.c:253 builtin/pull.c:166
+#: builtin/merge.c:253 builtin/pull.c:167
 msgid "create a single commit instead of doing a merge"
 msgstr "tạo một lần chuyển giao đưon thay vì thực hiện việc hòa trộn"
 
-#: builtin/merge.c:255 builtin/pull.c:169
+#: builtin/merge.c:255 builtin/pull.c:170
 msgid "perform a commit if the merge succeeds (default)"
 msgstr "thực hiện chuyển giao nếu hòa trộn thành công (mặc định)"
 
-#: builtin/merge.c:257 builtin/pull.c:172
+#: builtin/merge.c:257 builtin/pull.c:173
 msgid "edit message before committing"
 msgstr "sửa chú thích trước khi chuyển giao"
 
@@ -15006,28 +15086,28 @@
 msgid "allow fast-forward (default)"
 msgstr "cho phép chuyển-tiếp-nhanh (mặc định)"
 
-#: builtin/merge.c:261 builtin/pull.c:179
+#: builtin/merge.c:261 builtin/pull.c:180
 msgid "abort if fast-forward is not possible"
 msgstr "bỏ qua nếu chuyển-tiếp-nhanh không thể được"
 
-#: builtin/merge.c:265 builtin/pull.c:182
+#: builtin/merge.c:265 builtin/pull.c:183
 msgid "verify that the named commit has a valid GPG signature"
 msgstr "thẩm tra xem lần chuyển giao có tên đó có chữ ký GPG hợp lệ hay không"
 
-#: builtin/merge.c:266 builtin/notes.c:787 builtin/pull.c:186
-#: builtin/rebase.c:492 builtin/rebase.c:1477 builtin/revert.c:114
+#: builtin/merge.c:266 builtin/notes.c:787 builtin/pull.c:187
+#: builtin/rebase.c:493 builtin/rebase.c:1501 builtin/revert.c:114
 msgid "strategy"
 msgstr "chiến lược"
 
-#: builtin/merge.c:267 builtin/pull.c:187
+#: builtin/merge.c:267 builtin/pull.c:188
 msgid "merge strategy to use"
 msgstr "chiến lược hòa trộn sẽ dùng"
 
-#: builtin/merge.c:268 builtin/pull.c:190
+#: builtin/merge.c:268 builtin/pull.c:191
 msgid "option=value"
 msgstr "tùy_chọn=giá_trị"
 
-#: builtin/merge.c:269 builtin/pull.c:191
+#: builtin/merge.c:269 builtin/pull.c:192
 msgid "option for selected merge strategy"
 msgstr "tùy chọn cho chiến lược hòa trộn đã chọn"
 
@@ -15049,13 +15129,13 @@
 msgid "continue the current in-progress merge"
 msgstr "tiếp tục quá trình hòa trộn hiện tại đang thực hiện"
 
-#: builtin/merge.c:284 builtin/pull.c:198
+#: builtin/merge.c:284 builtin/pull.c:199
 msgid "allow merging unrelated histories"
 msgstr "cho phép hòa trộn lịch sử không liên quan"
 
 #: builtin/merge.c:290
-msgid "verify commit-msg hook"
-msgstr "thẩm tra móc (hook) commit-msg"
+msgid "bypass pre-merge-commit and commit-msg hooks"
+msgstr "vòng qua móc (hook) pre-merge-commit và commit-msg"
 
 #: builtin/merge.c:307
 msgid "could not run stash."
@@ -15098,33 +15178,33 @@
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "Chuỗi branch.%s.mergeoptions sai: %s"
 
-#: builtin/merge.c:708
+#: builtin/merge.c:705
 msgid "Not handling anything other than two heads merge."
 msgstr "Không cầm nắm gì ngoài hai head hòa trộn."
 
-#: builtin/merge.c:722
+#: builtin/merge.c:719
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr "Không hiểu tùy chọn cho merge-recursive: -X%s"
 
-#: builtin/merge.c:737
+#: builtin/merge.c:734
 #, c-format
 msgid "unable to write %s"
 msgstr "không thể ghi %s"
 
-#: builtin/merge.c:789
+#: builtin/merge.c:786
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "Không thể đọc từ “%s”"
 
-#: builtin/merge.c:798
+#: builtin/merge.c:795
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr ""
 "Vẫn chưa hòa trộn các lần chuyển giao; sử dụng lệnh “git commit” để hoàn tất "
 "việc hòa trộn.\n"
 
-#: builtin/merge.c:804
+#: builtin/merge.c:801
 msgid ""
 "Please enter a commit message to explain why this merge is necessary,\n"
 "especially if it merges an updated upstream into a topic branch.\n"
@@ -15136,11 +15216,11 @@
 "topic.\n"
 "\n"
 
-#: builtin/merge.c:809
+#: builtin/merge.c:806
 msgid "An empty message aborts the commit.\n"
 msgstr "Nếu phần chú thích rỗng sẽ hủy bỏ lần chuyển giao.\n"
 
-#: builtin/merge.c:812
+#: builtin/merge.c:809
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -15149,75 +15229,75 @@
 "Những dòng được bắt đầu bằng “%c” sẽ được bỏ qua, và nếu phần chú\n"
 "thích rỗng sẽ hủy bỏ lần chuyển giao.\n"
 
-#: builtin/merge.c:853
+#: builtin/merge.c:862
 msgid "Empty commit message."
 msgstr "Chú thích của lần commit (chuyển giao) bị trống rỗng."
 
-#: builtin/merge.c:872
+#: builtin/merge.c:877
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Tuyệt vời.\n"
 
-#: builtin/merge.c:933
+#: builtin/merge.c:938
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 "Việc tự động hòa trộn gặp lỗi; hãy sửa các xung đột sau đó chuyển giao kết "
 "quả.\n"
 
-#: builtin/merge.c:972
+#: builtin/merge.c:977
 msgid "No current branch."
 msgstr "Không phải nhánh hiện hành."
 
-#: builtin/merge.c:974
+#: builtin/merge.c:979
 msgid "No remote for the current branch."
 msgstr "Không có máy chủ cho nhánh hiện hành."
 
-#: builtin/merge.c:976
+#: builtin/merge.c:981
 msgid "No default upstream defined for the current branch."
 msgstr "Không có thượng nguồn mặc định được định nghĩa cho nhánh hiện hành."
 
-#: builtin/merge.c:981
+#: builtin/merge.c:986
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "Không nhánh mạng theo dõi cho %s từ %s"
 
-#: builtin/merge.c:1038
+#: builtin/merge.c:1043
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Giá trị sai “%s” trong biến môi trường “%s”"
 
-#: builtin/merge.c:1141
+#: builtin/merge.c:1146
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "không phải là một thứ gì đó mà chúng tôi có thể hòa trộn trong %s: %s"
 
-#: builtin/merge.c:1175
+#: builtin/merge.c:1180
 msgid "not something we can merge"
 msgstr "không phải là thứ gì đó mà chúng tôi có thể hòa trộn"
 
-#: builtin/merge.c:1278
+#: builtin/merge.c:1283
 msgid "--abort expects no arguments"
 msgstr "--abort không nhận các đối số"
 
-#: builtin/merge.c:1282
+#: builtin/merge.c:1287
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr ""
 "Ở đây không có lần hòa trộn nào được hủy bỏ giữa chừng cả (thiếu MERGE_HEAD)."
 
-#: builtin/merge.c:1291
+#: builtin/merge.c:1296
 msgid "--quit expects no arguments"
 msgstr "--quit không nhận các đối số"
 
-#: builtin/merge.c:1304
+#: builtin/merge.c:1309
 msgid "--continue expects no arguments"
 msgstr "--continue không nhận đối số"
 
-#: builtin/merge.c:1308
+#: builtin/merge.c:1313
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "Ở đây không có lần hòa trộn nào đang được xử lý cả (thiếu MERGE_HEAD)."
 
-#: builtin/merge.c:1324
+#: builtin/merge.c:1329
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -15225,7 +15305,7 @@
 "Bạn chưa kết thúc việc hòa trộn (MERGE_HEAD vẫn tồn tại).\n"
 "Hãy chuyển giao các thay đổi trước khi bạn có thể hòa trộn."
 
-#: builtin/merge.c:1331
+#: builtin/merge.c:1336
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -15233,98 +15313,98 @@
 "Bạn chưa kết thúc việc cherry-pick (CHERRY_PICK_HEAD vẫn tồn tại).\n"
 "Hãy chuyển giao các thay đổi trước khi bạn có thể hòa trộn."
 
-#: builtin/merge.c:1334
+#: builtin/merge.c:1339
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "Bạn chưa kết thúc việc cherry-pick (CHERRY_PICK_HEAD vẫn tồn tại)."
 
-#: builtin/merge.c:1348
+#: builtin/merge.c:1353
 msgid "You cannot combine --squash with --no-ff."
 msgstr "Bạn không thể kết hợp --squash với --no-ff."
 
-#: builtin/merge.c:1350
+#: builtin/merge.c:1355
 msgid "You cannot combine --squash with --commit."
 msgstr "Bạn không thể kết hợp --squash với --commit."
 
-#: builtin/merge.c:1366
+#: builtin/merge.c:1371
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr "Không chỉ ra lần chuyển giao và merge.defaultToUpstream chưa được đặt."
 
-#: builtin/merge.c:1383
+#: builtin/merge.c:1388
 msgid "Squash commit into empty head not supported yet"
 msgstr "Squash commit vào một head trống rỗng vẫn chưa được hỗ trợ"
 
-#: builtin/merge.c:1385
+#: builtin/merge.c:1390
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr ""
 "Chuyển giao không-chuyển-tiếp-nhanh không hợp lý ở trong một head trống rỗng"
 
-#: builtin/merge.c:1390
+#: builtin/merge.c:1395
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - không phải là thứ gì đó mà chúng tôi có thể hòa trộn"
 
-#: builtin/merge.c:1392
+#: builtin/merge.c:1397
 msgid "Can merge only exactly one commit into empty head"
 msgstr ""
 "Không thể hòa trộn một cách đúng đắn một lần chuyển giao vào một head rỗng"
 
-#: builtin/merge.c:1471
+#: builtin/merge.c:1476
 msgid "refusing to merge unrelated histories"
 msgstr "từ chối hòa trộn lịch sử không liên quan"
 
-#: builtin/merge.c:1480
+#: builtin/merge.c:1485
 msgid "Already up to date."
 msgstr "Đã cập nhật rồi."
 
-#: builtin/merge.c:1490
+#: builtin/merge.c:1495
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Đang cập nhật %s..%s\n"
 
-#: builtin/merge.c:1532
+#: builtin/merge.c:1537
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "Đang thử hòa trộn kiểu “trivial in-index”…\n"
 
-#: builtin/merge.c:1539
+#: builtin/merge.c:1544
 #, c-format
 msgid "Nope.\n"
 msgstr "Không.\n"
 
-#: builtin/merge.c:1564
+#: builtin/merge.c:1569
 msgid "Already up to date. Yeeah!"
 msgstr "Đã cập nhật rồi. Yeeah!"
 
-#: builtin/merge.c:1570
+#: builtin/merge.c:1575
 msgid "Not possible to fast-forward, aborting."
 msgstr "Thực hiện lệnh chuyển-tiếp-nhanh là không thể được, đang bỏ qua."
 
-#: builtin/merge.c:1593 builtin/merge.c:1658
+#: builtin/merge.c:1598 builtin/merge.c:1663
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Đang tua lại cây thành thời xa xưa…\n"
 
-#: builtin/merge.c:1597
+#: builtin/merge.c:1602
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Đang thử chiến lược hòa trộn %s…\n"
 
-#: builtin/merge.c:1649
+#: builtin/merge.c:1654
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Không có chiến lược hòa trộn nào được nắm giữ (handle) sự hòa trộn.\n"
 
-#: builtin/merge.c:1651
+#: builtin/merge.c:1656
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "Hòa trộn với chiến lược %s gặp lỗi.\n"
 
-#: builtin/merge.c:1660
+#: builtin/merge.c:1665
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr "Sử dụng %s để chuẩn bị giải quyết bằng tay.\n"
 
-#: builtin/merge.c:1672
+#: builtin/merge.c:1677
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
@@ -15411,32 +15491,32 @@
 msgid "set labels for file1/orig-file/file2"
 msgstr "đặt nhãn cho tập-tin-1/tập-tin-gốc/tập-tin-2"
 
-#: builtin/merge-recursive.c:46
+#: builtin/merge-recursive.c:47
 #, c-format
 msgid "unknown option %s"
 msgstr "không hiểu tùy chọn %s"
 
-#: builtin/merge-recursive.c:52
+#: builtin/merge-recursive.c:53
 #, c-format
 msgid "could not parse object '%s'"
 msgstr "không thể phân tích đối tượng “%s”"
 
-#: builtin/merge-recursive.c:56
+#: builtin/merge-recursive.c:57
 #, c-format
 msgid "cannot handle more than %d base. Ignoring %s."
 msgid_plural "cannot handle more than %d bases. Ignoring %s."
 msgstr[0] "không thể xử lý nhiều hơn %d nền. Bỏ qua %s."
 
-#: builtin/merge-recursive.c:64
+#: builtin/merge-recursive.c:65
 msgid "not handling anything other than two heads merge."
 msgstr "không xử lý gì ngoài hai head hòa trộn."
 
-#: builtin/merge-recursive.c:70 builtin/merge-recursive.c:72
+#: builtin/merge-recursive.c:74 builtin/merge-recursive.c:76
 #, c-format
 msgid "could not resolve ref '%s'"
 msgstr "không thể phân giải tham chiếu %s"
 
-#: builtin/merge-recursive.c:78
+#: builtin/merge-recursive.c:82
 #, c-format
 msgid "Merging %s with %s\n"
 msgstr "Đang hòa trộn %s với %s\n"
@@ -15578,53 +15658,53 @@
 msgid "Renaming %s to %s\n"
 msgstr "Đổi tên %s thành %s\n"
 
-#: builtin/mv.c:277 builtin/remote.c:717 builtin/repack.c:510
+#: builtin/mv.c:277 builtin/remote.c:717 builtin/repack.c:511
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "gặp lỗi khi đổi tên “%s”"
 
-#: builtin/name-rev.c:352
+#: builtin/name-rev.c:356
 msgid "git name-rev [<options>] <commit>..."
 msgstr "git name-rev [<các tùy chọn>] <commit>…"
 
-#: builtin/name-rev.c:353
+#: builtin/name-rev.c:357
 msgid "git name-rev [<options>] --all"
 msgstr "git name-rev [<các tùy chọn>] --all"
 
-#: builtin/name-rev.c:354
+#: builtin/name-rev.c:358
 msgid "git name-rev [<options>] --stdin"
 msgstr "git name-rev [<các tùy chọn>] --stdin"
 
-#: builtin/name-rev.c:411
+#: builtin/name-rev.c:415
 msgid "print only names (no SHA-1)"
 msgstr "chỉ hiển thị tên (không SHA-1)"
 
-#: builtin/name-rev.c:412
+#: builtin/name-rev.c:416
 msgid "only use tags to name the commits"
 msgstr "chỉ dùng các thẻ để đặt tên cho các lần chuyển giao"
 
-#: builtin/name-rev.c:414
+#: builtin/name-rev.c:418
 msgid "only use refs matching <pattern>"
 msgstr "chỉ sử dụng các tham chiếu khớp với <mẫu>"
 
-#: builtin/name-rev.c:416
+#: builtin/name-rev.c:420
 msgid "ignore refs matching <pattern>"
 msgstr "bỏ qua các tham chiếu khớp với <mẫu>"
 
-#: builtin/name-rev.c:418
+#: builtin/name-rev.c:422
 msgid "list all commits reachable from all refs"
 msgstr ""
 "liệt kê tất cả các lần chuyển giao có thể đọc được từ tất cả các tham chiếu"
 
-#: builtin/name-rev.c:419
+#: builtin/name-rev.c:423
 msgid "read from stdin"
 msgstr "đọc từ đầu vào tiêu chuẩn"
 
-#: builtin/name-rev.c:420
+#: builtin/name-rev.c:424
 msgid "allow to print `undefined` names (default)"
 msgstr "cho phép in các tên “chưa định nghĩa” (mặc định)"
 
-#: builtin/name-rev.c:426
+#: builtin/name-rev.c:430
 msgid "dereference tags in the input (internal use)"
 msgstr "bãi bỏ tham chiếu các thẻ trong đầu vào (dùng nội bộ)"
 
@@ -16022,7 +16102,7 @@
 msgid "read object names from the standard input"
 msgstr "đọc tên đối tượng từ thiết bị nhập chuẩn"
 
-#: builtin/notes.c:954 builtin/prune.c:130 builtin/worktree.c:165
+#: builtin/notes.c:954 builtin/prune.c:130 builtin/worktree.c:164
 msgid "do not remove, show only"
 msgstr "không gỡ bỏ, chỉ hiển thị"
 
@@ -16038,7 +16118,7 @@
 msgid "use notes from <notes-ref>"
 msgstr "dùng “notes” từ <notes-ref>"
 
-#: builtin/notes.c:1034 builtin/stash.c:1598
+#: builtin/notes.c:1034 builtin/stash.c:1607
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "không hiểu câu lệnh con: %s"
@@ -16113,70 +16193,70 @@
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "đã ghi %<PRIu32> đối tượng trong khi cần %<PRIu32>"
 
-#: builtin/pack-objects.c:1166
+#: builtin/pack-objects.c:1164
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr "tắt ghi bitmap, như vậy một số đối tượng sẽ không được đóng gói"
 
-#: builtin/pack-objects.c:1597
+#: builtin/pack-objects.c:1592
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "khoảng bù cơ sở cho delta bị tràn trong gói cho %s"
 
-#: builtin/pack-objects.c:1606
+#: builtin/pack-objects.c:1601
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "khoảng bù cơ sở cho delta nằm ngoài phạm cho %s"
 
-#: builtin/pack-objects.c:1875
+#: builtin/pack-objects.c:1870
 msgid "Counting objects"
 msgstr "Đang đếm các đối tượng"
 
-#: builtin/pack-objects.c:2005
+#: builtin/pack-objects.c:2000
 #, c-format
 msgid "unable to get size of %s"
 msgstr "không thể lấy kích cỡ của %s"
 
-#: builtin/pack-objects.c:2020
+#: builtin/pack-objects.c:2015
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "không thể phân tích phần đầu đối tượng của “%s”"
 
-#: builtin/pack-objects.c:2090 builtin/pack-objects.c:2106
-#: builtin/pack-objects.c:2116
+#: builtin/pack-objects.c:2085 builtin/pack-objects.c:2101
+#: builtin/pack-objects.c:2111
 #, c-format
 msgid "object %s cannot be read"
 msgstr "không thể đọc đối tượng %s"
 
-#: builtin/pack-objects.c:2093 builtin/pack-objects.c:2120
+#: builtin/pack-objects.c:2088 builtin/pack-objects.c:2115
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr ""
 "đối tượng %s không nhất quán về chiều dài đối tượng (%<PRIuMAX> so với "
 "%<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2130
+#: builtin/pack-objects.c:2125
 msgid "suboptimal pack - out of memory"
 msgstr "suboptimal pack - hết bộ nhớ"
 
-#: builtin/pack-objects.c:2456
+#: builtin/pack-objects.c:2440
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Nén delta dùng tới %d tuyến trình"
 
-#: builtin/pack-objects.c:2588
+#: builtin/pack-objects.c:2572
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "không thể đóng gói các đối tượng tiếp cận được từ thẻ “%s”"
 
-#: builtin/pack-objects.c:2675
+#: builtin/pack-objects.c:2659
 msgid "Compressing objects"
 msgstr "Đang nén các đối tượng"
 
-#: builtin/pack-objects.c:2681
+#: builtin/pack-objects.c:2665
 msgid "inconsistency with delta count"
 msgstr "mâu thuẫn với số lượng delta"
 
-#: builtin/pack-objects.c:2762
+#: builtin/pack-objects.c:2742
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -16185,7 +16265,7 @@
 "cần ID đối tượng cạnh, nhận được rác:\n"
 " %s"
 
-#: builtin/pack-objects.c:2768
+#: builtin/pack-objects.c:2748
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -16194,244 +16274,244 @@
 "cần ID đối tượng, nhận được rác:\n"
 " %s"
 
-#: builtin/pack-objects.c:2866
+#: builtin/pack-objects.c:2846
 msgid "invalid value for --missing"
 msgstr "giá trị cho --missing không hợp lệ"
 
-#: builtin/pack-objects.c:2925 builtin/pack-objects.c:3033
+#: builtin/pack-objects.c:2905 builtin/pack-objects.c:3013
 msgid "cannot open pack index"
 msgstr "không thể mở mục lục của gói"
 
-#: builtin/pack-objects.c:2956
+#: builtin/pack-objects.c:2936
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "đối tượng mất tại %s không thể đã kiểm tra"
 
-#: builtin/pack-objects.c:3041
+#: builtin/pack-objects.c:3021
 msgid "unable to force loose object"
 msgstr "không thể buộc mất đối tượng"
 
-#: builtin/pack-objects.c:3133
+#: builtin/pack-objects.c:3113
 #, c-format
 msgid "not a rev '%s'"
 msgstr "không phải một rev “%s”"
 
-#: builtin/pack-objects.c:3136
+#: builtin/pack-objects.c:3116
 #, c-format
 msgid "bad revision '%s'"
 msgstr "điểm xem xét sai “%s”"
 
-#: builtin/pack-objects.c:3161
+#: builtin/pack-objects.c:3141
 msgid "unable to add recent objects"
 msgstr "không thể thêm các đối tượng mới dùng"
 
-#: builtin/pack-objects.c:3214
+#: builtin/pack-objects.c:3194
 #, c-format
 msgid "unsupported index version %s"
 msgstr "phiên bản mục lục không được hỗ trợ %s"
 
-#: builtin/pack-objects.c:3218
+#: builtin/pack-objects.c:3198
 #, c-format
 msgid "bad index version '%s'"
 msgstr "phiên bản mục lục sai “%s”"
 
-#: builtin/pack-objects.c:3248
+#: builtin/pack-objects.c:3228
 msgid "do not show progress meter"
 msgstr "không hiển thị bộ đo tiến trình"
 
-#: builtin/pack-objects.c:3250
+#: builtin/pack-objects.c:3230
 msgid "show progress meter"
 msgstr "hiển thị bộ đo tiến trình"
 
-#: builtin/pack-objects.c:3252
+#: builtin/pack-objects.c:3232
 msgid "show progress meter during object writing phase"
 msgstr "hiển thị bộ đo tiến triển trong suốt pha ghi đối tượng"
 
-#: builtin/pack-objects.c:3255
+#: builtin/pack-objects.c:3235
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "tương tự --all-progress khi bộ đo tiến trình được xuất hiện"
 
-#: builtin/pack-objects.c:3256
+#: builtin/pack-objects.c:3236
 msgid "<version>[,<offset>]"
 msgstr "<phiên bản>[,offset]"
 
-#: builtin/pack-objects.c:3257
+#: builtin/pack-objects.c:3237
 msgid "write the pack index file in the specified idx format version"
 msgstr "ghi tập tin bảng mục lục gói (pack) ở phiên bản định dạng idx đã cho"
 
-#: builtin/pack-objects.c:3260
+#: builtin/pack-objects.c:3240
 msgid "maximum size of each output pack file"
 msgstr "kcíh thước tối đa cho tập tin gói được tạo"
 
-#: builtin/pack-objects.c:3262
+#: builtin/pack-objects.c:3242
 msgid "ignore borrowed objects from alternate object store"
 msgstr "bỏ qua các đối tượng vay mượn từ kho đối tượng thay thế"
 
-#: builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3244
 msgid "ignore packed objects"
 msgstr "bỏ qua các đối tượng đóng gói"
 
-#: builtin/pack-objects.c:3266
+#: builtin/pack-objects.c:3246
 msgid "limit pack window by objects"
 msgstr "giới hạn cửa sổ đóng gói theo đối tượng"
 
-#: builtin/pack-objects.c:3268
+#: builtin/pack-objects.c:3248
 msgid "limit pack window by memory in addition to object limit"
 msgstr "giới hạn cửa sổ đóng gói theo bộ nhớ cộng thêm với giới hạn đối tượng"
 
-#: builtin/pack-objects.c:3270
+#: builtin/pack-objects.c:3250
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr "độ dài tối đa của chuỗi móc xích “delta” được phép trong gói kết quả"
 
-#: builtin/pack-objects.c:3272
+#: builtin/pack-objects.c:3252
 msgid "reuse existing deltas"
 msgstr "dùng lại các delta sẵn có"
 
-#: builtin/pack-objects.c:3274
+#: builtin/pack-objects.c:3254
 msgid "reuse existing objects"
 msgstr "dùng lại các đối tượng sẵn có"
 
-#: builtin/pack-objects.c:3276
+#: builtin/pack-objects.c:3256
 msgid "use OFS_DELTA objects"
 msgstr "dùng các đối tượng OFS_DELTA"
 
-#: builtin/pack-objects.c:3278
+#: builtin/pack-objects.c:3258
 msgid "use threads when searching for best delta matches"
 msgstr "sử dụng các tuyến trình khi tìm kiếm cho các mẫu khớp delta tốt nhất"
 
-#: builtin/pack-objects.c:3280
+#: builtin/pack-objects.c:3260
 msgid "do not create an empty pack output"
 msgstr "không thể tạo kết xuất gói trống rỗng"
 
-#: builtin/pack-objects.c:3282
+#: builtin/pack-objects.c:3262
 msgid "read revision arguments from standard input"
 msgstr "đọc tham số “revision” từ thiết bị nhập chuẩn"
 
-#: builtin/pack-objects.c:3284
+#: builtin/pack-objects.c:3264
 msgid "limit the objects to those that are not yet packed"
 msgstr "giới hạn các đối tượng thành những cái mà chúng vẫn chưa được đóng gói"
 
-#: builtin/pack-objects.c:3287
+#: builtin/pack-objects.c:3267
 msgid "include objects reachable from any reference"
 msgstr "bao gồm các đối tượng có thể đọc được từ bất kỳ tham chiếu nào"
 
-#: builtin/pack-objects.c:3290
+#: builtin/pack-objects.c:3270
 msgid "include objects referred by reflog entries"
 msgstr "bao gồm các đối tượng được tham chiếu bởi các mục reflog"
 
-#: builtin/pack-objects.c:3293
+#: builtin/pack-objects.c:3273
 msgid "include objects referred to by the index"
 msgstr "bao gồm các đối tượng được tham chiếu bởi mục lục"
 
-#: builtin/pack-objects.c:3296
+#: builtin/pack-objects.c:3276
 msgid "output pack to stdout"
 msgstr "xuất gói ra đầu ra tiêu chuẩn"
 
-#: builtin/pack-objects.c:3298
+#: builtin/pack-objects.c:3278
 msgid "include tag objects that refer to objects to be packed"
 msgstr "bao gồm các đối tượng tham chiếu đến các đối tượng được đóng gói"
 
-#: builtin/pack-objects.c:3300
+#: builtin/pack-objects.c:3280
 msgid "keep unreachable objects"
 msgstr "giữ lại các đối tượng không thể đọc được"
 
-#: builtin/pack-objects.c:3302
+#: builtin/pack-objects.c:3282
 msgid "pack loose unreachable objects"
 msgstr "pack mất các đối tượng không thể đọc được"
 
-#: builtin/pack-objects.c:3304
+#: builtin/pack-objects.c:3284
 msgid "unpack unreachable objects newer than <time>"
 msgstr ""
 "xả nén (gỡ khỏi gói) các đối tượng không thể đọc được mới hơn <thời-gian>"
 
-#: builtin/pack-objects.c:3307
+#: builtin/pack-objects.c:3287
 msgid "use the sparse reachability algorithm"
-msgstr "dung thuật toán “sparse reachability”"
+msgstr "sử dụng thuật toán “sparse reachability”"
 
-#: builtin/pack-objects.c:3309
+#: builtin/pack-objects.c:3289
 msgid "create thin packs"
 msgstr "tạo gói nhẹ"
 
-#: builtin/pack-objects.c:3311
+#: builtin/pack-objects.c:3291
 msgid "create packs suitable for shallow fetches"
 msgstr "tạo gói để phù hợp cho lấy về nông (shallow)"
 
-#: builtin/pack-objects.c:3313
+#: builtin/pack-objects.c:3293
 msgid "ignore packs that have companion .keep file"
 msgstr "bỏ qua các gói mà nó có tập tin .keep đi kèm"
 
-#: builtin/pack-objects.c:3315
+#: builtin/pack-objects.c:3295
 msgid "ignore this pack"
 msgstr "bỏ qua gói này"
 
-#: builtin/pack-objects.c:3317
+#: builtin/pack-objects.c:3297
 msgid "pack compression level"
 msgstr "mức nén gói"
 
-#: builtin/pack-objects.c:3319
+#: builtin/pack-objects.c:3299
 msgid "do not hide commits by grafts"
 msgstr "không ẩn các lần chuyển giao bởi “grafts”"
 
-#: builtin/pack-objects.c:3321
+#: builtin/pack-objects.c:3301
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr "dùng mục lục ánh xạ nếu có thể được để nâng cao tốc độ đếm đối tượng"
 
-#: builtin/pack-objects.c:3323
+#: builtin/pack-objects.c:3303
 msgid "write a bitmap index together with the pack index"
 msgstr "ghi một mục lục ánh xạ cùng với mục lục gói"
 
-#: builtin/pack-objects.c:3327
+#: builtin/pack-objects.c:3307
 msgid "write a bitmap index if possible"
 msgstr "ghi mục lục ánh xạ nếu được"
 
-#: builtin/pack-objects.c:3331
+#: builtin/pack-objects.c:3311
 msgid "handling for missing objects"
 msgstr "xử lý cho thiếu đối tượng"
 
-#: builtin/pack-objects.c:3334
+#: builtin/pack-objects.c:3314
 msgid "do not pack objects in promisor packfiles"
 msgstr "không thể đóng gói các đối tượng trong các tập tin gói hứa hẹn"
 
-#: builtin/pack-objects.c:3336
+#: builtin/pack-objects.c:3316
 msgid "respect islands during delta compression"
 msgstr "tôn trọng island trong suốt quá trình nén “delta”"
 
-#: builtin/pack-objects.c:3361
+#: builtin/pack-objects.c:3345
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "mức sau xích delta %d là quá sâu, buộc dùng %d"
 
-#: builtin/pack-objects.c:3366
+#: builtin/pack-objects.c:3350
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "pack.deltaCacheLimit là quá cao, ép dùng %d"
 
-#: builtin/pack-objects.c:3420
+#: builtin/pack-objects.c:3404
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 "--max-pack-size không thể được sử dụng để xây dựng một gói để vận chuyển"
 
-#: builtin/pack-objects.c:3422
+#: builtin/pack-objects.c:3406
 msgid "minimum pack size limit is 1 MiB"
 msgstr "giới hạn kích thước tối thiểu của gói là 1 MiB"
 
-#: builtin/pack-objects.c:3427
+#: builtin/pack-objects.c:3411
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "--thin không thể được dùng để xây dựng gói đánh mục lục được"
 
-#: builtin/pack-objects.c:3430
+#: builtin/pack-objects.c:3414
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr "--keep-unreachable và --unpack-unreachable xung khắc nhau"
 
-#: builtin/pack-objects.c:3436
+#: builtin/pack-objects.c:3420
 msgid "cannot use --filter without --stdout"
 msgstr "không thể dùng tùy chọn --filter mà không có --stdout"
 
-#: builtin/pack-objects.c:3497
+#: builtin/pack-objects.c:3481
 msgid "Enumerating objects"
 msgstr "Đánh số các đối tượng"
 
-#: builtin/pack-objects.c:3527
+#: builtin/pack-objects.c:3511
 #, c-format
 msgid "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>)"
 msgstr "Tổng %<PRIu32> (delta %<PRIu32>), dùng lại %<PRIu32> (delta %<PRIu32>)"
@@ -16485,44 +16565,44 @@
 msgid "git pull [<options>] [<repository> [<refspec>...]]"
 msgstr "git pull [<các tùy chọn>] [<kho-chứa> [<refspec>…]]"
 
-#: builtin/pull.c:141
+#: builtin/pull.c:142
 msgid "control for recursive fetching of submodules"
 msgstr "điều khiển việc lấy về đệ quy của các mô-đun-con"
 
-#: builtin/pull.c:145
+#: builtin/pull.c:146
 msgid "Options related to merging"
 msgstr "Các tùy chọn liên quan đến hòa trộn"
 
-#: builtin/pull.c:148
+#: builtin/pull.c:149
 msgid "incorporate changes by rebasing rather than merging"
 msgstr "các thay đổi hợp nhất bằng cải tổ thay vì hòa trộn"
 
-#: builtin/pull.c:176 builtin/rebase.c:447 builtin/revert.c:126
+#: builtin/pull.c:177 builtin/rebase.c:448 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "cho phép chuyển-tiếp-nhanh"
 
-#: builtin/pull.c:185
+#: builtin/pull.c:186
 msgid "automatically stash/stash pop before and after rebase"
 msgstr "tự động stash/stash pop tước và sau tu bổ (rebase)"
 
-#: builtin/pull.c:201
+#: builtin/pull.c:202
 msgid "Options related to fetching"
 msgstr "Các tùy chọn liên quan đến lệnh lấy về"
 
-#: builtin/pull.c:211
+#: builtin/pull.c:212
 msgid "force overwrite of local branch"
 msgstr "ép buộc ghi đè lên nhánh nội bộ"
 
-#: builtin/pull.c:219
+#: builtin/pull.c:220
 msgid "number of submodules pulled in parallel"
 msgstr "số lượng mô-đun-con được đẩy lên đồng thời"
 
-#: builtin/pull.c:316
+#: builtin/pull.c:320
 #, c-format
 msgid "Invalid value for pull.ff: %s"
 msgstr "Giá trị không hợp lệ cho pull.ff: %s"
 
-#: builtin/pull.c:433
+#: builtin/pull.c:437
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
 "fetched."
@@ -16530,14 +16610,14 @@
 "Ở đây không có ứng cử nào để cải tổ lại trong số các tham chiếu mà bạn vừa "
 "lấy về."
 
-#: builtin/pull.c:435
+#: builtin/pull.c:439
 msgid ""
 "There are no candidates for merging among the refs that you just fetched."
 msgstr ""
 "Ở đây không có ứng cử nào để hòa trộn trong số các tham chiếu mà bạn vừa lấy "
 "về."
 
-#: builtin/pull.c:436
+#: builtin/pull.c:440
 msgid ""
 "Generally this means that you provided a wildcard refspec which had no\n"
 "matches on the remote end."
@@ -16546,7 +16626,7 @@
 "tự\n"
 "đại diện mà nó lại không khớp trên điểm cuối máy phục vụ."
 
-#: builtin/pull.c:439
+#: builtin/pull.c:443
 #, c-format
 msgid ""
 "You asked to pull from the remote '%s', but did not specify\n"
@@ -16558,43 +16638,43 @@
 "theo mặc định cho nhánh hiện tại của bạn, bạn phải chỉ định\n"
 "một nhánh trên dòng lệnh."
 
-#: builtin/pull.c:444 builtin/rebase.c:1326 git-parse-remote.sh:73
+#: builtin/pull.c:448 builtin/rebase.c:1347 git-parse-remote.sh:73
 msgid "You are not currently on a branch."
 msgstr "Hiện tại bạn chẳng ở nhánh nào cả."
 
-#: builtin/pull.c:446 builtin/pull.c:461 git-parse-remote.sh:79
+#: builtin/pull.c:450 builtin/pull.c:465 git-parse-remote.sh:79
 msgid "Please specify which branch you want to rebase against."
 msgstr "Vui lòng chỉ định nhánh nào bạn muốn cải tổ lại."
 
-#: builtin/pull.c:448 builtin/pull.c:463 git-parse-remote.sh:82
+#: builtin/pull.c:452 builtin/pull.c:467 git-parse-remote.sh:82
 msgid "Please specify which branch you want to merge with."
 msgstr "Vui lòng chỉ định nhánh nào bạn muốn hòa trộn vào."
 
-#: builtin/pull.c:449 builtin/pull.c:464
+#: builtin/pull.c:453 builtin/pull.c:468
 msgid "See git-pull(1) for details."
 msgstr "Xem git-pull(1) để biết thêm chi tiết."
 
-#: builtin/pull.c:451 builtin/pull.c:457 builtin/pull.c:466
-#: builtin/rebase.c:1332 git-parse-remote.sh:64
+#: builtin/pull.c:455 builtin/pull.c:461 builtin/pull.c:470
+#: builtin/rebase.c:1353 git-parse-remote.sh:64
 msgid "<remote>"
 msgstr "<máy chủ>"
 
-#: builtin/pull.c:451 builtin/pull.c:466 builtin/pull.c:471
+#: builtin/pull.c:455 builtin/pull.c:470 builtin/pull.c:475
 #: git-parse-remote.sh:65
 msgid "<branch>"
 msgstr "<nhánh>"
 
-#: builtin/pull.c:459 builtin/rebase.c:1324 git-parse-remote.sh:75
+#: builtin/pull.c:463 builtin/rebase.c:1345 git-parse-remote.sh:75
 msgid "There is no tracking information for the current branch."
 msgstr "Ở đây không có thông tin theo dõi cho nhánh hiện hành."
 
-#: builtin/pull.c:468 git-parse-remote.sh:95
+#: builtin/pull.c:472 git-parse-remote.sh:95
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:"
 msgstr ""
 "Nếu bạn muốn theo dõi thông tin cho nhánh này bạn có thể thực hiện bằng lệnh:"
 
-#: builtin/pull.c:473
+#: builtin/pull.c:477
 #, c-format
 msgid ""
 "Your configuration specifies to merge with the ref '%s'\n"
@@ -16603,34 +16683,34 @@
 "Các đặc tả cấu hình của bạn để hòa trộn với tham chiếu “%s”\n"
 "từ máy dịch vụ, nhưng không có nhánh nào như thế được lấy về."
 
-#: builtin/pull.c:581
+#: builtin/pull.c:587
 #, c-format
 msgid "unable to access commit %s"
 msgstr "không thể truy cập lần chuyển giao “%s”"
 
-#: builtin/pull.c:861
+#: builtin/pull.c:867
 msgid "ignoring --verify-signatures for rebase"
 msgstr "bỏ qua --verify-signatures khi rebase"
 
-#: builtin/pull.c:916
+#: builtin/pull.c:922
 msgid "--[no-]autostash option is only valid with --rebase."
 msgstr "tùy chọn --[no-]autostash chỉ hợp lệ khi dùng với --rebase."
 
-#: builtin/pull.c:924
+#: builtin/pull.c:930
 msgid "Updating an unborn branch with changes added to the index."
 msgstr ""
 "Đang cập nhật một nhánh chưa được sinh ra với các thay đổi được thêm vào "
 "bảng mục lục."
 
-#: builtin/pull.c:928
+#: builtin/pull.c:934
 msgid "pull with rebase"
 msgstr "pull với rebase"
 
-#: builtin/pull.c:929
+#: builtin/pull.c:935
 msgid "please commit or stash them."
 msgstr "xin hãy chuyển giao hoặc tạm cất (stash) chúng."
 
-#: builtin/pull.c:954
+#: builtin/pull.c:960
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -16641,7 +16721,7 @@
 "đang chuyển-tiếp-nhanh cây làm việc của bạn từ\n"
 "lần chuyển giaot %s."
 
-#: builtin/pull.c:960
+#: builtin/pull.c:966
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -16659,15 +16739,15 @@
 "$ git reset --hard\n"
 "để khôi phục lại."
 
-#: builtin/pull.c:975
+#: builtin/pull.c:981
 msgid "Cannot merge multiple branches into empty head."
 msgstr "Không thể hòa trộn nhiều nhánh vào trong một head trống rỗng."
 
-#: builtin/pull.c:979
+#: builtin/pull.c:985
 msgid "Cannot rebase onto multiple branches."
 msgstr "Không thể thực hiện lệnh rebase (cải tổ) trên nhiều nhánh."
 
-#: builtin/pull.c:986
+#: builtin/pull.c:992
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 "không thể cải tổ với các thay đổi mô-đun-con được ghi lại một cách cục bộ"
@@ -16834,17 +16914,94 @@
 msgid "Pushing to %s\n"
 msgstr "Đang đẩy lên %s\n"
 
-#: builtin/push.c:364
+#: builtin/push.c:366
 #, c-format
 msgid "failed to push some refs to '%s'"
 msgstr "gặp lỗi khi đẩy tới một số tham chiếu đến “%s”"
 
-#: builtin/push.c:398
+#: builtin/push.c:541
+msgid "repository"
+msgstr "kho"
+
+#: builtin/push.c:542 builtin/send-pack.c:164
+msgid "push all refs"
+msgstr "đẩy tất cả các tham chiếu"
+
+#: builtin/push.c:543 builtin/send-pack.c:166
+msgid "mirror all refs"
+msgstr "mirror tất cả các tham chiếu"
+
+#: builtin/push.c:545
+msgid "delete refs"
+msgstr "xóa các tham chiếu"
+
+#: builtin/push.c:546
+msgid "push tags (can't be used with --all or --mirror)"
+msgstr "đẩy các thẻ (không dùng cùng với --all hay --mirror)"
+
+#: builtin/push.c:549 builtin/send-pack.c:167
+msgid "force updates"
+msgstr "ép buộc cập nhật"
+
+#: builtin/push.c:551 builtin/send-pack.c:181
+msgid "<refname>:<expect>"
+msgstr "<tên-tham-chiếu>:<cần>"
+
+#: builtin/push.c:552 builtin/send-pack.c:182
+msgid "require old value of ref to be at this value"
+msgstr "yêu cầu giá-trị cũ của tham chiếu thì là giá-trị này"
+
+#: builtin/push.c:555
+msgid "control recursive pushing of submodules"
+msgstr "điều khiển việc đẩy lên (push) đệ qui của mô-đun-con"
+
+#: builtin/push.c:557 builtin/send-pack.c:175
+msgid "use thin pack"
+msgstr "tạo gói nhẹ"
+
+#: builtin/push.c:558 builtin/push.c:559 builtin/send-pack.c:161
+#: builtin/send-pack.c:162
+msgid "receive pack program"
+msgstr "chương trình nhận gói"
+
+#: builtin/push.c:560
+msgid "set upstream for git pull/status"
+msgstr "đặt thượng nguồn cho git pull/status"
+
+#: builtin/push.c:563
+msgid "prune locally removed refs"
+msgstr "xén tỉa những tham chiếu bị gỡ bỏ"
+
+#: builtin/push.c:565
+msgid "bypass pre-push hook"
+msgstr "vòng qua móc tiền-đẩy (pre-push)"
+
+#: builtin/push.c:566
+msgid "push missing but relevant tags"
+msgstr "push phần bị thiếu nhưng các thẻ lại thích hợp"
+
+#: builtin/push.c:569 builtin/send-pack.c:169
+msgid "GPG sign the push"
+msgstr "ký lần đẩy dùng GPG"
+
+#: builtin/push.c:571 builtin/send-pack.c:176
+msgid "request atomic transaction on remote side"
+msgstr "yêu cầu giao dịch hạt nhân bên phía máy chủ"
+
+#: builtin/push.c:589
+msgid "--delete is incompatible with --all, --mirror and --tags"
+msgstr "--delete là xung khắc với các tùy chọn --all, --mirror và --tags"
+
+#: builtin/push.c:591
+msgid "--delete doesn't make sense without any refs"
+msgstr "--delete không hợp lý nếu không có bất kỳ tham chiếu nào"
+
+#: builtin/push.c:611
 #, c-format
 msgid "bad repository '%s'"
 msgstr "repository (kho) sai “%s”"
 
-#: builtin/push.c:399
+#: builtin/push.c:612
 msgid ""
 "No configured push destination.\n"
 "Either specify the URL from the command-line or configure a remote "
@@ -16865,104 +17022,27 @@
 "\n"
 "    git push <tên>\n"
 
-#: builtin/push.c:554
-msgid "repository"
-msgstr "kho"
-
-#: builtin/push.c:555 builtin/send-pack.c:164
-msgid "push all refs"
-msgstr "đẩy tất cả các tham chiếu"
-
-#: builtin/push.c:556 builtin/send-pack.c:166
-msgid "mirror all refs"
-msgstr "mirror tất cả các tham chiếu"
-
-#: builtin/push.c:558
-msgid "delete refs"
-msgstr "xóa các tham chiếu"
-
-#: builtin/push.c:559
-msgid "push tags (can't be used with --all or --mirror)"
-msgstr "đẩy các thẻ (không dùng cùng với --all hay --mirror)"
-
-#: builtin/push.c:562 builtin/send-pack.c:167
-msgid "force updates"
-msgstr "ép buộc cập nhật"
-
-#: builtin/push.c:564 builtin/send-pack.c:181
-msgid "<refname>:<expect>"
-msgstr "<tên-tham-chiếu>:<cần>"
-
-#: builtin/push.c:565 builtin/send-pack.c:182
-msgid "require old value of ref to be at this value"
-msgstr "yêu cầu giá-trị cũ của tham chiếu thì là giá-trị này"
-
-#: builtin/push.c:568
-msgid "control recursive pushing of submodules"
-msgstr "điều khiển việc đẩy lên (push) đệ qui của mô-đun-con"
-
-#: builtin/push.c:570 builtin/send-pack.c:175
-msgid "use thin pack"
-msgstr "tạo gói nhẹ"
-
-#: builtin/push.c:571 builtin/push.c:572 builtin/send-pack.c:161
-#: builtin/send-pack.c:162
-msgid "receive pack program"
-msgstr "chương trình nhận gói"
-
-#: builtin/push.c:573
-msgid "set upstream for git pull/status"
-msgstr "đặt thượng nguồn cho git pull/status"
-
-#: builtin/push.c:576
-msgid "prune locally removed refs"
-msgstr "xén tỉa những tham chiếu bị gỡ bỏ"
-
-#: builtin/push.c:578
-msgid "bypass pre-push hook"
-msgstr "vòng qua móc tiền-đẩy (pre-push)"
-
-#: builtin/push.c:579
-msgid "push missing but relevant tags"
-msgstr "push phần bị thiếu nhưng các thẻ lại thích hợp"
-
-#: builtin/push.c:582 builtin/send-pack.c:169
-msgid "GPG sign the push"
-msgstr "ký lần đẩy dùng GPG"
-
-#: builtin/push.c:584 builtin/send-pack.c:176
-msgid "request atomic transaction on remote side"
-msgstr "yêu cầu giao dịch hạt nhân bên phía máy chủ"
-
-#: builtin/push.c:602
-msgid "--delete is incompatible with --all, --mirror and --tags"
-msgstr "--delete là xung khắc với các tùy chọn --all, --mirror và --tags"
-
-#: builtin/push.c:604
-msgid "--delete doesn't make sense without any refs"
-msgstr "--delete không hợp lý nếu không có bất kỳ tham chiếu nào"
-
-#: builtin/push.c:607
+#: builtin/push.c:627
 msgid "--all and --tags are incompatible"
 msgstr "--all và --tags xung khắc nhau"
 
-#: builtin/push.c:609
+#: builtin/push.c:629
 msgid "--all can't be combined with refspecs"
 msgstr "--all không thể được tổ hợp cùng với đặc tả đường dẫn"
 
-#: builtin/push.c:613
+#: builtin/push.c:633
 msgid "--mirror and --tags are incompatible"
 msgstr "--mirror và --tags xung khắc nhau"
 
-#: builtin/push.c:615
+#: builtin/push.c:635
 msgid "--mirror can't be combined with refspecs"
 msgstr "--mirror không thể được tổ hợp cùng với đặc tả đường dẫn"
 
-#: builtin/push.c:618
+#: builtin/push.c:638
 msgid "--all and --mirror are incompatible"
 msgstr "--all và --mirror xung khắc nhau"
 
-#: builtin/push.c:637
+#: builtin/push.c:642
 msgid "push options must not have new line characters"
 msgstr "các tùy chọn push phải không có ký tự dòng mới"
 
@@ -17082,11 +17162,11 @@
 
 #: builtin/rebase.c:32
 msgid ""
-"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] "
-"[<branch>]"
+"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
+"[<upstream> [<branch>]]"
 msgstr ""
-"git rebase [-i] [các tùy chọn] [--exec <lệnh>] [--onto <newbase>] "
-"[<upstream>] [<nhánh>]"
+"git rebase [-i] [các tùy chọn] [--exec <lệnh>] [--onto <newbase> | --keep-"
+"base] [<upstream>] [<nhánh>]]"
 
 #: builtin/rebase.c:34
 msgid ""
@@ -17126,189 +17206,189 @@
 msgid "could not generate todo list"
 msgstr "không thể tạo danh sách cần làm"
 
-#: builtin/rebase.c:382
+#: builtin/rebase.c:383
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "lần chuyển giao cơ sỏ phải được chỉ định với --upstream hoặc --onto"
 
-#: builtin/rebase.c:437
+#: builtin/rebase.c:438
 msgid "git rebase--interactive [<options>]"
 msgstr "git rebase--interactive [<các tùy chọn>]"
 
-#: builtin/rebase.c:449
+#: builtin/rebase.c:450
 msgid "keep empty commits"
 msgstr "giữ lại các lần chuyển giao rỗng"
 
-#: builtin/rebase.c:451 builtin/revert.c:128
+#: builtin/rebase.c:452 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr "chấp nhận chuyển giao mà không ghi chú gì"
 
-#: builtin/rebase.c:452
+#: builtin/rebase.c:453
 msgid "rebase merge commits"
 msgstr "cải tổ các lần chuyển giao hòa trộn"
 
-#: builtin/rebase.c:454
+#: builtin/rebase.c:455
 msgid "keep original branch points of cousins"
 msgstr "giữ các điểm nhánh nguyên bản của các anh em họ"
 
-#: builtin/rebase.c:456
+#: builtin/rebase.c:457
 msgid "move commits that begin with squash!/fixup!"
 msgstr "di chuyển các lần chuyển giao bắt đầu bằng squash!/fixup!"
 
-#: builtin/rebase.c:457
+#: builtin/rebase.c:458
 msgid "sign commits"
 msgstr "ký các lần chuyển giao"
 
-#: builtin/rebase.c:459 builtin/rebase.c:1403
+#: builtin/rebase.c:460 builtin/rebase.c:1427
 msgid "display a diffstat of what changed upstream"
 msgstr "hiển thị một diffstat của những thay đổi thượng nguồn"
 
-#: builtin/rebase.c:461
+#: builtin/rebase.c:462
 msgid "continue rebase"
 msgstr "tiếp tục cải tổ"
 
-#: builtin/rebase.c:463
+#: builtin/rebase.c:464
 msgid "skip commit"
 msgstr "bỏ qua lần chuyển giao"
 
-#: builtin/rebase.c:464
+#: builtin/rebase.c:465
 msgid "edit the todo list"
 msgstr "sửa danh sách cần làm"
 
-#: builtin/rebase.c:466
+#: builtin/rebase.c:467
 msgid "show the current patch"
 msgstr "hiển thị miếng vá hiện hành"
 
-#: builtin/rebase.c:469
+#: builtin/rebase.c:470
 msgid "shorten commit ids in the todo list"
 msgstr "rút ngắn mã chuyển giao trong danh sách cần làm"
 
-#: builtin/rebase.c:471
+#: builtin/rebase.c:472
 msgid "expand commit ids in the todo list"
 msgstr "khai triển mã chuyển giao trong danh sách cần làm"
 
-#: builtin/rebase.c:473
+#: builtin/rebase.c:474
 msgid "check the todo list"
 msgstr "kiểm tra danh sách cần làm"
 
-#: builtin/rebase.c:475
+#: builtin/rebase.c:476
 msgid "rearrange fixup/squash lines"
 msgstr "sắp xếp lại các dòng fixup/squash"
 
-#: builtin/rebase.c:477
+#: builtin/rebase.c:478
 msgid "insert exec commands in todo list"
 msgstr "chèn các lệnh thực thi trong danh sách cần làm"
 
-#: builtin/rebase.c:478
+#: builtin/rebase.c:479
 msgid "onto"
 msgstr "lên trên"
 
-#: builtin/rebase.c:481
+#: builtin/rebase.c:482
 msgid "restrict-revision"
 msgstr "điểm-xét-duyệt-hạn-chế"
 
-#: builtin/rebase.c:481
+#: builtin/rebase.c:482
 msgid "restrict revision"
 msgstr "điểm xét duyệt hạn chế"
 
-#: builtin/rebase.c:483
+#: builtin/rebase.c:484
 msgid "squash-onto"
 msgstr "squash-lên-trên"
 
-#: builtin/rebase.c:484
+#: builtin/rebase.c:485
 msgid "squash onto"
 msgstr "squash lên trên"
 
-#: builtin/rebase.c:486
+#: builtin/rebase.c:487
 msgid "the upstream commit"
 msgstr "lần chuyển giao thượng nguồn"
 
-#: builtin/rebase.c:488
+#: builtin/rebase.c:489
 msgid "head-name"
 msgstr "tên-đầu"
 
-#: builtin/rebase.c:488
+#: builtin/rebase.c:489
 msgid "head name"
 msgstr "tên đầu"
 
-#: builtin/rebase.c:493
+#: builtin/rebase.c:494
 msgid "rebase strategy"
 msgstr "chiến lược cải tổ"
 
-#: builtin/rebase.c:494
+#: builtin/rebase.c:495
 msgid "strategy-opts"
 msgstr "tùy-chọn-chiến-lược"
 
-#: builtin/rebase.c:495
+#: builtin/rebase.c:496
 msgid "strategy options"
 msgstr "các tùy chọn chiến lược"
 
-#: builtin/rebase.c:496
+#: builtin/rebase.c:497
 msgid "switch-to"
 msgstr "chuyển-đến"
 
-#: builtin/rebase.c:497
+#: builtin/rebase.c:498
 msgid "the branch or commit to checkout"
 msgstr "nhánh hay lần chuyển giao lần lấy ra"
 
-#: builtin/rebase.c:498
+#: builtin/rebase.c:499
 msgid "onto-name"
 msgstr "onto-name"
 
-#: builtin/rebase.c:498
+#: builtin/rebase.c:499
 msgid "onto name"
 msgstr "tên lên trên"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "cmd"
 msgstr "lệnh"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "the command to run"
 msgstr "lệnh muốn chạy"
 
-#: builtin/rebase.c:502 builtin/rebase.c:1486
+#: builtin/rebase.c:503 builtin/rebase.c:1510
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "lập lịch lại một cách tự động bất kỳ “exec“ bị lỗi"
 
-#: builtin/rebase.c:518
+#: builtin/rebase.c:519
 msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
 msgstr "--[no-]rebase-cousins không có tác dụng khi không có --rebase-merges"
 
-#: builtin/rebase.c:534
+#: builtin/rebase.c:535
 #, c-format
 msgid "%s requires an interactive rebase"
 msgstr "%s cần một cải tổ kiểu tương tác"
 
-#: builtin/rebase.c:586
+#: builtin/rebase.c:587
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "không thể đặt lấy “onto”: “%s”"
 
-#: builtin/rebase.c:601
+#: builtin/rebase.c:602
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "orig-head không hợp lệ: “%s”"
 
-#: builtin/rebase.c:626
+#: builtin/rebase.c:627
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "đang bỏ qua allow_rerere_autoupdate không hợp lệ: “%s”"
 
-#: builtin/rebase.c:702
+#: builtin/rebase.c:703
 #, c-format
 msgid "Could not read '%s'"
 msgstr "Không thể đọc “%s”"
 
-#: builtin/rebase.c:720
+#: builtin/rebase.c:721
 #, c-format
 msgid "Cannot store %s"
 msgstr "Không thể lưu “%s”"
 
-#: builtin/rebase.c:827
+#: builtin/rebase.c:828
 msgid "could not determine HEAD revision"
 msgstr "không thể dò tìm điểm xét duyệt HEAD"
 
-#: builtin/rebase.c:950 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:951 git-rebase--preserve-merges.sh:81
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -17323,7 +17403,7 @@
 "Để bãi bỏ và quay trở lại trạng thái trước \"git rebase\", chạy \"git rebase "
 "--abort\"."
 
-#: builtin/rebase.c:1031
+#: builtin/rebase.c:1032
 #, c-format
 msgid ""
 "\n"
@@ -17342,7 +17422,7 @@
 "\n"
 "Kết quả là git không thể cải tổ lại chúng."
 
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1339
 #, c-format
 msgid ""
 "%s\n"
@@ -17359,7 +17439,7 @@
 "    git rebase “<nhánh>”\n"
 "\n"
 
-#: builtin/rebase.c:1334
+#: builtin/rebase.c:1355
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -17373,128 +17453,133 @@
 "    git branch --set-upstream-to=%s/<nhánh> %s\n"
 "\n"
 
-#: builtin/rebase.c:1364
+#: builtin/rebase.c:1385
 msgid "exec commands cannot contain newlines"
 msgstr "các lệnh thực thi không thể chứa các ký tự dòng mới"
 
-#: builtin/rebase.c:1368
+#: builtin/rebase.c:1389
 msgid "empty exec command"
 msgstr "lệnh thực thi trống rỗng"
 
-#: builtin/rebase.c:1396
+#: builtin/rebase.c:1418
 msgid "rebase onto given branch instead of upstream"
 msgstr "cải tổ vào nhánh đã cho thay cho thượng nguồn"
 
-#: builtin/rebase.c:1398
+#: builtin/rebase.c:1420
+msgid "use the merge-base of upstream and branch as the current base"
+msgstr ""
+"sử dụng các cơ sở hòa trộn của thượng nguồn và nhánh như là cơ sở hiện tại"
+
+#: builtin/rebase.c:1422
 msgid "allow pre-rebase hook to run"
 msgstr "cho phép móc (hook) pre-rebase được chạy"
 
-#: builtin/rebase.c:1400
+#: builtin/rebase.c:1424
 msgid "be quiet. implies --no-stat"
 msgstr "hãy im lặng. ý là --no-stat"
 
-#: builtin/rebase.c:1406
+#: builtin/rebase.c:1430
 msgid "do not show diffstat of what changed upstream"
 msgstr "đừng hiển thị diffstat của những thay đổi thượng nguồn"
 
-#: builtin/rebase.c:1409
+#: builtin/rebase.c:1433
 msgid "add a Signed-off-by: line to each commit"
 msgstr "thêm dòng Signed-off-by: cho từng lần chuyển giao"
 
-#: builtin/rebase.c:1411 builtin/rebase.c:1415 builtin/rebase.c:1417
+#: builtin/rebase.c:1435 builtin/rebase.c:1439 builtin/rebase.c:1441
 msgid "passed to 'git am'"
 msgstr "chuyển cho “git am”"
 
-#: builtin/rebase.c:1419 builtin/rebase.c:1421
+#: builtin/rebase.c:1443 builtin/rebase.c:1445
 msgid "passed to 'git apply'"
 msgstr "chuyển cho “git apply”"
 
-#: builtin/rebase.c:1423 builtin/rebase.c:1426
+#: builtin/rebase.c:1447 builtin/rebase.c:1450
 msgid "cherry-pick all commits, even if unchanged"
 msgstr ""
 "cherry-pick tất cả các lần chuyển giao, ngay cả khi không có thay đổi gì"
 
-#: builtin/rebase.c:1428
+#: builtin/rebase.c:1452
 msgid "continue"
 msgstr "tiếp tục"
 
-#: builtin/rebase.c:1431
+#: builtin/rebase.c:1455
 msgid "skip current patch and continue"
 msgstr "bỏ qua miếng vá hiện hành và tiếp tục"
 
-#: builtin/rebase.c:1433
+#: builtin/rebase.c:1457
 msgid "abort and check out the original branch"
 msgstr "bãi bỏ và lấy ra nhánh nguyên thủy"
 
-#: builtin/rebase.c:1436
+#: builtin/rebase.c:1460
 msgid "abort but keep HEAD where it is"
 msgstr "bãi bỏ nhưng vẫn vẫn giữ HEAD chỉ đến nó"
 
-#: builtin/rebase.c:1437
+#: builtin/rebase.c:1461
 msgid "edit the todo list during an interactive rebase"
 msgstr "sửa danh sách cần làm trong quá trình “rebase” (cải tổ) tương tác"
 
-#: builtin/rebase.c:1440
+#: builtin/rebase.c:1464
 msgid "show the patch file being applied or merged"
 msgstr "hiển thị miếng vá đã được áp dụng hay hòa trộn"
 
-#: builtin/rebase.c:1443
+#: builtin/rebase.c:1467
 msgid "use merging strategies to rebase"
 msgstr "dùng chiến lược hòa trộn để cải tổ"
 
-#: builtin/rebase.c:1447
+#: builtin/rebase.c:1471
 msgid "let the user edit the list of commits to rebase"
 msgstr "để người dùng sửa danh sách các lần chuyển giao muốn cải tổ"
 
-#: builtin/rebase.c:1451
+#: builtin/rebase.c:1475
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr "(ĐÃ LẠC HẬU) hay thử tạo lại các hòa trộn thay vì bỏ qua chúng"
 
-#: builtin/rebase.c:1455
+#: builtin/rebase.c:1479
 msgid "preserve empty commits during rebase"
 msgstr "ngăn cấm các lần chuyển giao trống rỗng trong suốt quá trình cải tổ"
 
-#: builtin/rebase.c:1457
+#: builtin/rebase.c:1481
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "di chuyển các lần chuyển giao mà bắt đầu bằng squash!/fixup! dưới -i"
 
-#: builtin/rebase.c:1463
+#: builtin/rebase.c:1487
 msgid "automatically stash/stash pop before and after"
 msgstr "tự động stash/stash pop trước và sau"
 
-#: builtin/rebase.c:1465
+#: builtin/rebase.c:1489
 msgid "add exec lines after each commit of the editable list"
 msgstr "thêm các dòng thực thi sau từng lần chuyển giao của danh sách sửa được"
 
-#: builtin/rebase.c:1469
+#: builtin/rebase.c:1493
 msgid "allow rebasing commits with empty messages"
 msgstr "chấp nhận cải tổ các chuyển giao mà không ghi chú gì"
 
-#: builtin/rebase.c:1472
+#: builtin/rebase.c:1496
 msgid "try to rebase merges instead of skipping them"
 msgstr "cố thử cải tổ các hòa trộn thay vì bỏ qua chúng"
 
-#: builtin/rebase.c:1475
+#: builtin/rebase.c:1499
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "dùng “merge-base --fork-point” để định nghĩa lại thượng nguồn"
 
-#: builtin/rebase.c:1477
+#: builtin/rebase.c:1501
 msgid "use the given merge strategy"
 msgstr "dùng chiến lược hòa trộn đã cho"
 
-#: builtin/rebase.c:1479 builtin/revert.c:115
+#: builtin/rebase.c:1503 builtin/revert.c:115
 msgid "option"
 msgstr "tùy chọn"
 
-#: builtin/rebase.c:1480
+#: builtin/rebase.c:1504
 msgid "pass the argument through to the merge strategy"
 msgstr "chuyển thao số đến chiến lược hòa trộn"
 
-#: builtin/rebase.c:1483
+#: builtin/rebase.c:1507
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "cải tổ tất các các lần chuyển giao cho đến root"
 
-#: builtin/rebase.c:1500
+#: builtin/rebase.c:1524
 msgid ""
 "the rebase.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
@@ -17502,33 +17587,41 @@
 "việc hỗ trợ rebase.useBuiltin đã bị xóa!\n"
 "Xem mục tin của nó trong “ git help config” để biết chi tiết."
 
-#: builtin/rebase.c:1506
+#: builtin/rebase.c:1530
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr ""
 "Hình như đang trong quá trình thực hiện lệnh “git-am”. Không thể rebase."
 
-#: builtin/rebase.c:1547
+#: builtin/rebase.c:1571
 msgid ""
 "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
 msgstr ""
 "git rebase --preserve-merges đã lạc hậu. Hãy dùng --rebase-merges để thay "
 "thế."
 
-#: builtin/rebase.c:1551
+#: builtin/rebase.c:1576
+msgid "cannot combine '--keep-base' with '--onto'"
+msgstr "không thể kết hợp “--keep-base” với “--onto”"
+
+#: builtin/rebase.c:1578
+msgid "cannot combine '--keep-base' with '--root'"
+msgstr "không thể kết hợp “--keep-base” với “--root”"
+
+#: builtin/rebase.c:1582
 msgid "No rebase in progress?"
 msgstr "Không có tiến trình rebase nào phải không?"
 
-#: builtin/rebase.c:1555
+#: builtin/rebase.c:1586
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr ""
 "Hành động “--edit-todo” chỉ có thể dùng trong quá trình “rebase” (sửa lịch "
 "sử) tương tác."
 
-#: builtin/rebase.c:1578
+#: builtin/rebase.c:1609
 msgid "Cannot read HEAD"
 msgstr "Không thể đọc HEAD"
 
-#: builtin/rebase.c:1590
+#: builtin/rebase.c:1621
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -17536,16 +17629,16 @@
 "Bạn phải sửa tất cả các lần hòa trộn xung đột và sau\n"
 "đó đánh dấu chúng là cần xử lý sử dụng lệnh git add"
 
-#: builtin/rebase.c:1609
+#: builtin/rebase.c:1640
 msgid "could not discard worktree changes"
 msgstr "không thể loại bỏ các thay đổi cây-làm-việc"
 
-#: builtin/rebase.c:1628
+#: builtin/rebase.c:1659
 #, c-format
 msgid "could not move back to %s"
 msgstr "không thể quay trở lại %s"
 
-#: builtin/rebase.c:1673
+#: builtin/rebase.c:1704
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -17566,164 +17659,156 @@
 "và chạy TÔI lần nữa. TÔI dừng lại trong trường hợp bạn vẫn\n"
 "có một số thứ quý giá ở đây.\n"
 
-#: builtin/rebase.c:1694
+#: builtin/rebase.c:1725
 msgid "switch `C' expects a numerical value"
 msgstr "tùy chọn “%c” cần một giá trị bằng số"
 
-#: builtin/rebase.c:1735
+#: builtin/rebase.c:1766
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Không hiểu chế độ: %s"
 
-#: builtin/rebase.c:1757
+#: builtin/rebase.c:1788
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy cần --merge hay --interactive"
 
-#: builtin/rebase.c:1797
+#: builtin/rebase.c:1828
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec cần --exec hay --interactive"
 
-#: builtin/rebase.c:1809
+#: builtin/rebase.c:1840
 msgid "cannot combine am options with either interactive or merge options"
 msgstr ""
 "không thể tổ hợp các tùy chọn am với các tùy chọn tương tác hay hòa trộn"
 
-#: builtin/rebase.c:1828
+#: builtin/rebase.c:1859
 msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
 msgstr "không thể kết hợp “--preserve-merges” với “--rebase-merges”"
 
-#: builtin/rebase.c:1832
+#: builtin/rebase.c:1863
 msgid ""
 "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
 msgstr "không thể kết hợp “--preserve-merges” với “--reschedule-failed-exec”"
 
-#: builtin/rebase.c:1838
-msgid "cannot combine '--rebase-merges' with '--strategy-option'"
-msgstr "không thể kết hợp “--rebase-merges” với “--strategy-option”"
-
-#: builtin/rebase.c:1841
-msgid "cannot combine '--rebase-merges' with '--strategy'"
-msgstr "không thể kết hợp “--rebase-merges” với “--strategy”"
-
-#: builtin/rebase.c:1865
+#: builtin/rebase.c:1887
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "thượng nguồn không hợp lệ “%s”"
 
-#: builtin/rebase.c:1871
+#: builtin/rebase.c:1893
 msgid "Could not create new root commit"
 msgstr "Không thể tạo lần chuyển giao gốc mới"
 
-#: builtin/rebase.c:1889
+#: builtin/rebase.c:1919
+#, c-format
+msgid "'%s': need exactly one merge base with branch"
+msgstr "“%s”: cần chính xác một cơ sở hòa trộn với nhánh"
+
+#: builtin/rebase.c:1922
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "“%s”: cần chính xác một cơ sở hòa trộn"
 
-#: builtin/rebase.c:1896
+#: builtin/rebase.c:1930
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "Không chỉ đến một lần chuyển giao không hợp lệ “%s”"
 
-#: builtin/rebase.c:1921
+#: builtin/rebase.c:1955
 #, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr "nghiêm trọng: không có nhánh/lần chuyển giao “%s” như thế"
 
-#: builtin/rebase.c:1929 builtin/submodule--helper.c:38
+#: builtin/rebase.c:1963 builtin/submodule--helper.c:38
 #: builtin/submodule--helper.c:1934
 #, c-format
 msgid "No such ref: %s"
 msgstr "Không có tham chiếu nào như thế: %s"
 
-#: builtin/rebase.c:1940
+#: builtin/rebase.c:1974
 msgid "Could not resolve HEAD to a revision"
 msgstr "Không thể phân giải lần chuyển giao HEAD đến một điểm xét duyệt"
 
-#: builtin/rebase.c:1981
+#: builtin/rebase.c:2012
 msgid "Cannot autostash"
 msgstr "Không thể autostash"
 
-#: builtin/rebase.c:1984
+#: builtin/rebase.c:2015
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Gặp đáp ứng stash không cần: “%s”"
 
-#: builtin/rebase.c:1990
+#: builtin/rebase.c:2021
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "Không thể tạo thư mục cho “%s”"
 
-#: builtin/rebase.c:1993
+#: builtin/rebase.c:2024
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Đã tạo autostash: %s\n"
 
-#: builtin/rebase.c:1996
+#: builtin/rebase.c:2027
 msgid "could not reset --hard"
 msgstr "không thể reset --hard"
 
-#: builtin/rebase.c:1997 builtin/reset.c:114
-#, c-format
-msgid "HEAD is now at %s"
-msgstr "HEAD hiện giờ tại %s"
-
-#: builtin/rebase.c:2013
+#: builtin/rebase.c:2036
 msgid "Please commit or stash them."
 msgstr "Xin hãy chuyển giao hoặc tạm cất (stash) chúng."
 
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:2063
 #, c-format
 msgid "could not parse '%s'"
 msgstr "không thể phân tích cú pháp “%s”"
 
-#: builtin/rebase.c:2053
+#: builtin/rebase.c:2076
 #, c-format
 msgid "could not switch to %s"
 msgstr "không thể chuyển đến %s"
 
-#: builtin/rebase.c:2064
+#: builtin/rebase.c:2087
 msgid "HEAD is up to date."
 msgstr "HEAD đã cập nhật."
 
-#: builtin/rebase.c:2066
+#: builtin/rebase.c:2089
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "Nhánh hiện tại %s đã được cập nhật rồi.\n"
 
-#: builtin/rebase.c:2074
+#: builtin/rebase.c:2097
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD hiện đã được cập nhật rồi, bị ép buộc rebase."
 
-#: builtin/rebase.c:2076
+#: builtin/rebase.c:2099
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "Nhánh hiện tại %s đã được cập nhật rồi, lệnh rebase ép buộc.\n"
 
-#: builtin/rebase.c:2084
+#: builtin/rebase.c:2107
 msgid "The pre-rebase hook refused to rebase."
 msgstr "Móc (hook) pre-rebase từ chối rebase."
 
-#: builtin/rebase.c:2091
+#: builtin/rebase.c:2114
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Thay đổi thành %s:\n"
 
-#: builtin/rebase.c:2094
+#: builtin/rebase.c:2117
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Thay đổi từ %s thành %s:\n"
 
-#: builtin/rebase.c:2119
+#: builtin/rebase.c:2142
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 "Trước tiên, di chuyển head để xem lại các công việc trên đỉnh của nó…\n"
 
-#: builtin/rebase.c:2128
+#: builtin/rebase.c:2151
 msgid "Could not detach HEAD"
 msgstr "Không thể tách rời HEAD"
 
-#: builtin/rebase.c:2137
+#: builtin/rebase.c:2160
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Chuyển-tiếp-nhanh %s đến %s.\n"
@@ -17732,7 +17817,7 @@
 msgid "git receive-pack <git-dir>"
 msgstr "git receive-pack <thư-mục-git>"
 
-#: builtin/receive-pack.c:832
+#: builtin/receive-pack.c:830
 msgid ""
 "By default, updating the current branch in a non-bare repository\n"
 "is denied, because it will make the index and work tree inconsistent\n"
@@ -17762,7 +17847,7 @@
 "Để chấm dứt lời nhắn này và vẫn giữ cách ứng xử mặc định, hãy đặt\n"
 "biến cấu hình “receive.denyCurrentBranch” thành “refuse”."
 
-#: builtin/receive-pack.c:852
+#: builtin/receive-pack.c:850
 msgid ""
 "By default, deleting the current branch is denied, because the next\n"
 "'git clone' won't result in any file checked out, causing confusion.\n"
@@ -17783,11 +17868,11 @@
 "\n"
 "Để chấm dứt lời nhắn này, bạn hãy đặt nó thành “refuse”."
 
-#: builtin/receive-pack.c:1938
+#: builtin/receive-pack.c:1936
 msgid "quiet"
 msgstr "im lặng"
 
-#: builtin/receive-pack.c:1952
+#: builtin/receive-pack.c:1950
 msgid "You must specify a directory."
 msgstr "Bạn phải chỉ định thư mục."
 
@@ -18353,11 +18438,11 @@
 msgid "Unknown subcommand: %s"
 msgstr "Không hiểu câu lệnh con: %s"
 
-#: builtin/repack.c:22
+#: builtin/repack.c:23
 msgid "git repack [<options>]"
 msgstr "git repack [<các tùy chọn>]"
 
-#: builtin/repack.c:27
+#: builtin/repack.c:28
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -18365,115 +18450,115 @@
 "Gia tăng repack là không tương thích với chỉ mục bitmap. Dùng\n"
 "--no-write-bitmap-index hay tắt cấu hình pack.writebitmaps."
 
-#: builtin/repack.c:190
+#: builtin/repack.c:191
 msgid "could not start pack-objects to repack promisor objects"
 msgstr ""
 "không thể lấy thông tin thống kê pack-objects để mà đóng gói lại các đối "
 "tượng hứa hẹn"
 
-#: builtin/repack.c:229 builtin/repack.c:408
+#: builtin/repack.c:230 builtin/repack.c:409
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 "repack: Đang chỉ cần các dòng ID đối tượng dạng thập lục phân đầy dủ từ pack-"
 "objects."
 
-#: builtin/repack.c:246
+#: builtin/repack.c:247
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr "không thể hoàn tất pack-objects để đóng gói các đối tượng hứa hẹn"
 
-#: builtin/repack.c:284
+#: builtin/repack.c:285
 msgid "pack everything in a single pack"
 msgstr "đóng gói mọi thứ trong một gói đơn"
 
-#: builtin/repack.c:286
+#: builtin/repack.c:287
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "giống với -a, và chỉnh sửa các đối tượng không đọc được thiếu sót"
 
-#: builtin/repack.c:289
+#: builtin/repack.c:290
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "xóa bỏ các gói dư thừa, và chạy git-prune-packed"
 
-#: builtin/repack.c:291
+#: builtin/repack.c:292
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "chuyển --no-reuse-delta cho git-pack-objects"
 
-#: builtin/repack.c:293
+#: builtin/repack.c:294
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "chuyển --no-reuse-object cho git-pack-objects"
 
-#: builtin/repack.c:295
+#: builtin/repack.c:296
 msgid "do not run git-update-server-info"
 msgstr "không chạy git-update-server-info"
 
-#: builtin/repack.c:298
+#: builtin/repack.c:299
 msgid "pass --local to git-pack-objects"
 msgstr "chuyển --local cho git-pack-objects"
 
-#: builtin/repack.c:300
+#: builtin/repack.c:301
 msgid "write bitmap index"
 msgstr "ghi mục lục ánh xạ"
 
-#: builtin/repack.c:302
+#: builtin/repack.c:303
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "chuyển --delta-islands cho git-pack-objects"
 
-#: builtin/repack.c:303
+#: builtin/repack.c:304
 msgid "approxidate"
 msgstr "ngày ước tính"
 
-#: builtin/repack.c:304
+#: builtin/repack.c:305
 msgid "with -A, do not loosen objects older than this"
 msgstr "với -A, các đối tượng cũ hơn khoảng thời gian này thì không bị mất"
 
-#: builtin/repack.c:306
+#: builtin/repack.c:307
 msgid "with -a, repack unreachable objects"
 msgstr "với -a, đóng gói lại các đối tượng không thể đọc được"
 
-#: builtin/repack.c:308
+#: builtin/repack.c:309
 msgid "size of the window used for delta compression"
 msgstr "kích thước cửa sổ được dùng cho nén “delta”"
 
-#: builtin/repack.c:309 builtin/repack.c:315
+#: builtin/repack.c:310 builtin/repack.c:316
 msgid "bytes"
 msgstr "byte"
 
-#: builtin/repack.c:310
+#: builtin/repack.c:311
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr "giống như trên, nhưng giới hạn kích thước bộ nhớ hay vì số lượng"
 
-#: builtin/repack.c:312
+#: builtin/repack.c:313
 msgid "limits the maximum delta depth"
 msgstr "giới hạn độ sâu tối đa của “delta”"
 
-#: builtin/repack.c:314
+#: builtin/repack.c:315
 msgid "limits the maximum number of threads"
 msgstr "giới hạn số lượng tối đa tuyến trình"
 
-#: builtin/repack.c:316
+#: builtin/repack.c:317
 msgid "maximum size of each packfile"
 msgstr "kích thước tối đa cho từng tập tin gói"
 
-#: builtin/repack.c:318
+#: builtin/repack.c:319
 msgid "repack objects in packs marked with .keep"
 msgstr "đóng gói lại các đối tượng trong các gói đã đánh dấu bằng .keep"
 
-#: builtin/repack.c:320
+#: builtin/repack.c:321
 msgid "do not repack this pack"
 msgstr "đừng đóng gói lại gói này"
 
-#: builtin/repack.c:330
+#: builtin/repack.c:331
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "không thể xóa các gói trong một kho đối_tượng_vĩ_đại"
 
-#: builtin/repack.c:334
+#: builtin/repack.c:335
 msgid "--keep-unreachable and -A are incompatible"
 msgstr "--keep-unreachable và -A xung khắc nhau"
 
-#: builtin/repack.c:417
+#: builtin/repack.c:418
 msgid "Nothing new to pack."
 msgstr "Không có gì mới để mà đóng gói."
 
-#: builtin/repack.c:478
+#: builtin/repack.c:479
 #, c-format
 msgid ""
 "WARNING: Some packs in use have been renamed by\n"
@@ -18492,7 +18577,7 @@
 "CẢNH BÁO: nguyên gốc của nó cũng gặp lỗi.\n"
 "CẢNH BÁO: Vui lòng đổi tên chúng trong %s bằng tay:\n"
 
-#: builtin/repack.c:526
+#: builtin/repack.c:527
 #, c-format
 msgid "failed to remove '%s'"
 msgstr "gặp lỗi khi gỡ bỏ “%s”"
@@ -18600,8 +18685,8 @@
 msgid "unable to write object to database"
 msgstr "không thể ghi đối tượng vào cơ sở dữ liệu"
 
-#: builtin/replace.c:322 builtin/replace.c:377 builtin/replace.c:422
-#: builtin/replace.c:452
+#: builtin/replace.c:322 builtin/replace.c:378 builtin/replace.c:423
+#: builtin/replace.c:453
 #, c-format
 msgid "not a valid object name: '%s'"
 msgstr "không phải là tên đối tượng hợp lệ: “%s”"
@@ -18620,22 +18705,22 @@
 msgid "new object is the same as the old one: '%s'"
 msgstr "đối tượng mới là giống với cái cũ: “%s”"
 
-#: builtin/replace.c:383
+#: builtin/replace.c:384
 #, c-format
 msgid "could not parse %s as a commit"
 msgstr "không thể phân tích %s như là một lần chuyển giao"
 
-#: builtin/replace.c:414
+#: builtin/replace.c:415
 #, c-format
 msgid "bad mergetag in commit '%s'"
 msgstr "thẻ hòa trộn sai trong lần chuyển giao “%s”"
 
-#: builtin/replace.c:416
+#: builtin/replace.c:417
 #, c-format
 msgid "malformed mergetag in commit '%s'"
 msgstr "thẻ hòa trộn không đúng dạng ở lần chuyển giao “%s”"
 
-#: builtin/replace.c:428
+#: builtin/replace.c:429
 #, c-format
 msgid ""
 "original commit '%s' contains mergetag '%s' that is discarded; use --edit "
@@ -18644,31 +18729,31 @@
 "lần chuyển giao gốc “%s” có chứa thẻ hòa trộn “%s” cái mà bị loại bỏ; dùng "
 "tùy chọn --edit thay cho --graft"
 
-#: builtin/replace.c:467
+#: builtin/replace.c:468
 #, c-format
 msgid "the original commit '%s' has a gpg signature"
 msgstr "lần chuyển giao gốc “%s” có chữ ký GPG"
 
-#: builtin/replace.c:468
+#: builtin/replace.c:469
 msgid "the signature will be removed in the replacement commit!"
 msgstr "chữ ký sẽ được bỏ đi trong lần chuyển giao thay thế!"
 
-#: builtin/replace.c:478
+#: builtin/replace.c:479
 #, c-format
 msgid "could not write replacement commit for: '%s'"
 msgstr "không thể ghi lần chuyển giao thay thế cho: “%s”"
 
-#: builtin/replace.c:486
+#: builtin/replace.c:487
 #, c-format
 msgid "graft for '%s' unnecessary"
 msgstr "graft cho “%s” không cần thiết"
 
-#: builtin/replace.c:490
+#: builtin/replace.c:491
 #, c-format
 msgid "new commit is the same as the old one: '%s'"
 msgstr "lần chuyển giao mới là giống với cái cũ: “%s”"
 
-#: builtin/replace.c:525
+#: builtin/replace.c:526
 #, c-format
 msgid ""
 "could not convert the following graft(s):\n"
@@ -18677,71 +18762,71 @@
 "không thể chuyển đổi các graft sau đây:\n"
 "%s"
 
-#: builtin/replace.c:546
+#: builtin/replace.c:547
 msgid "list replace refs"
 msgstr "liệt kê các refs thay thế"
 
-#: builtin/replace.c:547
+#: builtin/replace.c:548
 msgid "delete replace refs"
 msgstr "xóa tham chiếu thay thế"
 
-#: builtin/replace.c:548
+#: builtin/replace.c:549
 msgid "edit existing object"
 msgstr "sửa đối tượng sẵn có"
 
-#: builtin/replace.c:549
+#: builtin/replace.c:550
 msgid "change a commit's parents"
 msgstr "thay đổi cha mẹ của lần chuyển giao"
 
-#: builtin/replace.c:550
+#: builtin/replace.c:551
 msgid "convert existing graft file"
 msgstr "chuyển đổi các tập tin graft sẵn có"
 
-#: builtin/replace.c:551
+#: builtin/replace.c:552
 msgid "replace the ref if it exists"
 msgstr "thay thế tham chiếu nếu nó đã sẵn có"
 
-#: builtin/replace.c:553
+#: builtin/replace.c:554
 msgid "do not pretty-print contents for --edit"
 msgstr "đừng in đẹp các nội dung cho --edit"
 
-#: builtin/replace.c:554
+#: builtin/replace.c:555
 msgid "use this format"
 msgstr "dùng định dạng này"
 
-#: builtin/replace.c:567
+#: builtin/replace.c:568
 msgid "--format cannot be used when not listing"
 msgstr "--format không thể được dùng khi không liệt kê gì"
 
-#: builtin/replace.c:575
+#: builtin/replace.c:576
 msgid "-f only makes sense when writing a replacement"
 msgstr "-f chỉ hợp lý khi ghi một cái thay thế"
 
-#: builtin/replace.c:579
+#: builtin/replace.c:580
 msgid "--raw only makes sense with --edit"
 msgstr "--raw chỉ hợp lý với --edit"
 
-#: builtin/replace.c:585
+#: builtin/replace.c:586
 msgid "-d needs at least one argument"
 msgstr "-d cần ít nhất một tham số"
 
-#: builtin/replace.c:591
+#: builtin/replace.c:592
 msgid "bad number of arguments"
 msgstr "số đối số không đúng"
 
-#: builtin/replace.c:597
+#: builtin/replace.c:598
 msgid "-e needs exactly one argument"
 msgstr "-e cần chính các là một đối số"
 
-#: builtin/replace.c:603
+#: builtin/replace.c:604
 msgid "-g needs at least one argument"
 msgstr "-q cần ít nhất một tham số"
 
-#: builtin/replace.c:609
+#: builtin/replace.c:610
 msgid "--convert-graft-file takes no argument"
 msgstr "--convert-graft-file không nhận đối số"
 
-#: builtin/replace.c:615
+#: builtin/replace.c:616
 msgid "only one pattern can be given with -l"
 msgstr "chỉ một mẫu được chỉ ra với tùy chọn -l"
 
@@ -18810,13 +18895,18 @@
 msgid "Failed to find tree of %s."
 msgstr "Gặp lỗi khi tìm cây của %s."
 
+#: builtin/reset.c:114
+#, c-format
+msgid "HEAD is now at %s"
+msgstr "HEAD hiện giờ tại %s"
+
 #: builtin/reset.c:193
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Không thể thực hiện một %s reset ở giữa của quá trình hòa trộn."
 
-#: builtin/reset.c:293 builtin/stash.c:514 builtin/stash.c:589
-#: builtin/stash.c:613
+#: builtin/reset.c:293 builtin/stash.c:520 builtin/stash.c:595
+#: builtin/stash.c:619
 msgid "be quiet, only report errors"
 msgstr "làm việc ở chế độ im lặng, chỉ hiển thị khi có lỗi"
 
@@ -18901,24 +18991,19 @@
 msgid "Could not write new index file."
 msgstr "Không thể ghi tập tin lưu bảng mục lục mới."
 
-#: builtin/rev-list.c:412
+#: builtin/rev-list.c:411
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr "không thể tổ hợp --exclude-promisor-objects và --missing"
 
-#: builtin/rev-list.c:473
+#: builtin/rev-list.c:472
 msgid "object filtering requires --objects"
 msgstr "lọc đối tượng yêu cầu --objects"
 
-#: builtin/rev-list.c:476
-#, c-format
-msgid "invalid sparse value '%s'"
-msgstr "giá trị sparse không hợp lệ “%s”"
-
-#: builtin/rev-list.c:527
+#: builtin/rev-list.c:522
 msgid "rev-list does not support display of notes"
 msgstr "rev-list không hỗ trợ hiển thị các ghi chú"
 
-#: builtin/rev-list.c:530
+#: builtin/rev-list.c:525
 msgid "cannot combine --use-bitmap-index with object filtering"
 msgstr "không thể tổ hợp --use-bitmap-index với lọc đối tượng"
 
@@ -19454,134 +19539,134 @@
 msgid "could not save index tree"
 msgstr "không thể ghi lại cây chỉ mục"
 
-#: builtin/stash.c:434
+#: builtin/stash.c:436
 msgid "could not restore untracked files from stash"
 msgstr "không thể phục hồi các tập tin chưa theo dõi từ mục cất đi (stash)"
 
-#: builtin/stash.c:448
+#: builtin/stash.c:450
 #, c-format
 msgid "Merging %s with %s"
 msgstr "Đang hòa trộn %s với %s"
 
-#: builtin/stash.c:458 git-legacy-stash.sh:680
+#: builtin/stash.c:460 git-legacy-stash.sh:680
 msgid "Index was not unstashed."
 msgstr "Bảng mục lục đã không được bỏ stash."
 
-#: builtin/stash.c:516 builtin/stash.c:615
+#: builtin/stash.c:522 builtin/stash.c:621
 msgid "attempt to recreate the index"
 msgstr "gặp lỗi đọc bảng mục lục"
 
-#: builtin/stash.c:549
+#: builtin/stash.c:555
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "Đã xóa %s (%s)"
 
-#: builtin/stash.c:552
+#: builtin/stash.c:558
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s: Không thể xóa bỏ mục stash"
 
-#: builtin/stash.c:577
+#: builtin/stash.c:583
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "”%s” không phải tham chiếu đến stash"
 
-#: builtin/stash.c:627 git-legacy-stash.sh:694
+#: builtin/stash.c:633 git-legacy-stash.sh:694
 msgid "The stash entry is kept in case you need it again."
 msgstr "Các mục tạm cất (stash) được giữ trong trường hợp bạn lại cần nó."
 
-#: builtin/stash.c:650 git-legacy-stash.sh:712
+#: builtin/stash.c:656 git-legacy-stash.sh:712
 msgid "No branch name specified"
 msgstr "Chưa chỉ ra tên của nhánh"
 
-#: builtin/stash.c:790 builtin/stash.c:827
+#: builtin/stash.c:796 builtin/stash.c:833
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "Không thể cập nhật %s với %s"
 
-#: builtin/stash.c:808 builtin/stash.c:1461 builtin/stash.c:1497
+#: builtin/stash.c:814 builtin/stash.c:1470 builtin/stash.c:1506
 msgid "stash message"
 msgstr "phần chú thích cho stash"
 
-#: builtin/stash.c:818
+#: builtin/stash.c:824
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" cần một đối số <lần chuyển giao>"
 
-#: builtin/stash.c:1040 git-legacy-stash.sh:217
+#: builtin/stash.c:1046 git-legacy-stash.sh:217
 msgid "No changes selected"
 msgstr "Chưa có thay đổi nào được chọn"
 
-#: builtin/stash.c:1136 git-legacy-stash.sh:150
+#: builtin/stash.c:1145 git-legacy-stash.sh:150
 msgid "You do not have the initial commit yet"
 msgstr "Bạn chưa còn có lần chuyển giao khởi tạo"
 
-#: builtin/stash.c:1163 git-legacy-stash.sh:165
+#: builtin/stash.c:1172 git-legacy-stash.sh:165
 msgid "Cannot save the current index state"
 msgstr "Không thể ghi lại trạng thái bảng mục lục hiện hành"
 
-#: builtin/stash.c:1172 git-legacy-stash.sh:180
+#: builtin/stash.c:1181 git-legacy-stash.sh:180
 msgid "Cannot save the untracked files"
 msgstr "Không thể ghi lại các tập tin chưa theo dõi"
 
-#: builtin/stash.c:1183 builtin/stash.c:1192 git-legacy-stash.sh:200
+#: builtin/stash.c:1192 builtin/stash.c:1201 git-legacy-stash.sh:200
 #: git-legacy-stash.sh:213
 msgid "Cannot save the current worktree state"
 msgstr "Không thể ghi lại trạng thái cây-làm-việc hiện hành"
 
-#: builtin/stash.c:1220 git-legacy-stash.sh:233
+#: builtin/stash.c:1229 git-legacy-stash.sh:233
 msgid "Cannot record working tree state"
 msgstr "Không thể ghi lại trạng thái cây làm việc hiện hành"
 
-#: builtin/stash.c:1269 git-legacy-stash.sh:337
+#: builtin/stash.c:1278 git-legacy-stash.sh:337
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr "Không thể dùng --patch và --include-untracked hay --all cùng một lúc"
 
-#: builtin/stash.c:1285
+#: builtin/stash.c:1294
 msgid "Did you forget to 'git add'?"
 msgstr "Có lẽ bạn đã quên “git add ” phải không?"
 
-#: builtin/stash.c:1300 git-legacy-stash.sh:345
+#: builtin/stash.c:1309 git-legacy-stash.sh:345
 msgid "No local changes to save"
 msgstr "Không có thay đổi nội bộ nào được ghi lại"
 
-#: builtin/stash.c:1307 git-legacy-stash.sh:350
+#: builtin/stash.c:1316 git-legacy-stash.sh:350
 msgid "Cannot initialize stash"
 msgstr "Không thể khởi tạo stash"
 
-#: builtin/stash.c:1322 git-legacy-stash.sh:354
+#: builtin/stash.c:1331 git-legacy-stash.sh:354
 msgid "Cannot save the current status"
 msgstr "Không thể ghi lại trạng thái hiện hành"
 
-#: builtin/stash.c:1327
+#: builtin/stash.c:1336
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Đã ghi lại thư mục làm việc và trạng thái mục lục %s"
 
-#: builtin/stash.c:1417 git-legacy-stash.sh:384
+#: builtin/stash.c:1426 git-legacy-stash.sh:384
 msgid "Cannot remove worktree changes"
 msgstr "Không thể gỡ bỏ các thay đổi cây-làm-việc"
 
-#: builtin/stash.c:1452 builtin/stash.c:1488
+#: builtin/stash.c:1461 builtin/stash.c:1497
 msgid "keep index"
 msgstr "giữ nguyên bảng mục lục"
 
-#: builtin/stash.c:1454 builtin/stash.c:1490
+#: builtin/stash.c:1463 builtin/stash.c:1499
 msgid "stash in patch mode"
 msgstr "cất đi ở chế độ miếng vá"
 
-#: builtin/stash.c:1455 builtin/stash.c:1491
+#: builtin/stash.c:1464 builtin/stash.c:1500
 msgid "quiet mode"
 msgstr "chế độ im lặng"
 
-#: builtin/stash.c:1457 builtin/stash.c:1493
+#: builtin/stash.c:1466 builtin/stash.c:1502
 msgid "include untracked files in stash"
 msgstr "bao gồm các tập tin không được theo dõi trong stash"
 
-#: builtin/stash.c:1459 builtin/stash.c:1495
+#: builtin/stash.c:1468 builtin/stash.c:1504
 msgid "include ignore files"
 msgstr "bao gồm các tập tin bị bỏ qua"
 
-#: builtin/stash.c:1555
+#: builtin/stash.c:1564
 #, c-format
 msgid "could not exec %s"
 msgstr "không thể thực thi %s"
@@ -19953,9 +20038,9 @@
 msgstr "đừng in tiến trình nhân bản"
 
 #: builtin/submodule--helper.c:1877
-msgid "git submodule--helper update_clone [--prefix=<path>] [<path>...]"
+msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
 msgstr ""
-"git submodule--helper update_clone [--prefix=</đường/dẫn>] [</đường/dẫn>…]"
+"git submodule--helper update-clone [--prefix=</đường/dẫn>] [</đường/dẫn>…]"
 
 #: builtin/submodule--helper.c:1890
 msgid "bad value for update parameter"
@@ -20008,7 +20093,7 @@
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr "hãy đảm bảo rằng tập tin .gitmodules có trong cây làm việc"
 
-#: builtin/submodule--helper.c:2235 git.c:434 git.c:684
+#: builtin/submodule--helper.c:2235 git.c:433 git.c:683
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s không hỗ trợ --super-prefix"
@@ -20331,143 +20416,143 @@
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<các tùy chọn>] [--] [<tập-tin>…]"
 
-#: builtin/update-index.c:971
+#: builtin/update-index.c:972
 msgid "continue refresh even when index needs update"
 msgstr "tiếp tục làm mới ngay cả khi bảng mục lục cần được cập nhật"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:975
 msgid "refresh: ignore submodules"
 msgstr "refresh: lờ đi mô-đun-con"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:978
 msgid "do not ignore new files"
 msgstr "không bỏ qua các tập tin mới tạo"
 
-#: builtin/update-index.c:979
+#: builtin/update-index.c:980
 msgid "let files replace directories and vice-versa"
 msgstr "để các tập tin thay thế các thư mục và “vice-versa”"
 
-#: builtin/update-index.c:981
+#: builtin/update-index.c:982
 msgid "notice files missing from worktree"
 msgstr "thông báo các tập-tin thiếu trong thư-mục làm việc"
 
-#: builtin/update-index.c:983
+#: builtin/update-index.c:984
 msgid "refresh even if index contains unmerged entries"
 msgstr ""
 "làm tươi mới thậm chí khi bảng mục lục chứa các mục tin chưa được hòa trộn"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:987
 msgid "refresh stat information"
 msgstr "lấy lại thông tin thống kê"
 
-#: builtin/update-index.c:990
+#: builtin/update-index.c:991
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "giống --refresh, nhưng bỏ qua các cài đặt “assume-unchanged”"
 
-#: builtin/update-index.c:994
+#: builtin/update-index.c:995
 msgid "<mode>,<object>,<path>"
 msgstr "<chế_độ>,<đối_tượng>,<đường_dẫn>"
 
-#: builtin/update-index.c:995
+#: builtin/update-index.c:996
 msgid "add the specified entry to the index"
 msgstr "thêm các tập tin đã chỉ ra vào bảng mục lục"
 
-#: builtin/update-index.c:1005
+#: builtin/update-index.c:1006
 msgid "mark files as \"not changing\""
 msgstr "đánh dấu các tập tin là \"không thay đổi\""
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1009
 msgid "clear assumed-unchanged bit"
 msgstr "xóa bít assumed-unchanged (giả định là không thay đổi)"
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1012
 msgid "mark files as \"index-only\""
 msgstr "đánh dấu các tập tin là “chỉ-đọc”"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1015
 msgid "clear skip-worktree bit"
 msgstr "xóa bít skip-worktree"
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1018
 msgid "add to index only; do not add content to object database"
 msgstr ""
 "chỉ thêm vào bảng mục lục; không thêm nội dung vào cơ sở dữ liệu đối tượng"
 
-#: builtin/update-index.c:1019
+#: builtin/update-index.c:1020
 msgid "remove named paths even if present in worktree"
 msgstr ""
 "gỡ bỏ các đường dẫn được đặt tên thậm chí cả khi nó hiện diện trong thư mục "
 "làm việc"
 
-#: builtin/update-index.c:1021
+#: builtin/update-index.c:1022
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "với tùy chọn --stdin: các dòng đầu vào được chấm dứt bởi ký tự null"
 
-#: builtin/update-index.c:1023
+#: builtin/update-index.c:1024
 msgid "read list of paths to be updated from standard input"
 msgstr "đọc danh sách đường dẫn cần cập nhật từ đầu vào tiêu chuẩn"
 
-#: builtin/update-index.c:1027
+#: builtin/update-index.c:1028
 msgid "add entries from standard input to the index"
 msgstr "không thể đọc các mục từ đầu vào tiêu chuẩn vào bảng mục lục"
 
-#: builtin/update-index.c:1031
+#: builtin/update-index.c:1032
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "phục hồi các trạng thái #2 và #3 cho các đường dẫn được liệt kê"
 
-#: builtin/update-index.c:1035
+#: builtin/update-index.c:1036
 msgid "only update entries that differ from HEAD"
 msgstr "chỉ cập nhật các mục tin mà nó khác biệt so với HEAD"
 
-#: builtin/update-index.c:1039
+#: builtin/update-index.c:1040
 msgid "ignore files missing from worktree"
 msgstr "bỏ qua các tập-tin thiếu trong thư-mục làm việc"
 
-#: builtin/update-index.c:1042
+#: builtin/update-index.c:1043
 msgid "report actions to standard output"
 msgstr "báo cáo các thao tác ra thiết bị xuất chuẩn"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1045
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(cho “porcelains”) quên các xung đột chưa được giải quyết đã ghi"
 
-#: builtin/update-index.c:1048
+#: builtin/update-index.c:1049
 msgid "write index in this format"
 msgstr "ghi mục lục ở định dạng này"
 
-#: builtin/update-index.c:1050
+#: builtin/update-index.c:1051
 msgid "enable or disable split index"
 msgstr "bật/tắt chia cắt bảng mục lục"
 
-#: builtin/update-index.c:1052
+#: builtin/update-index.c:1053
 msgid "enable/disable untracked cache"
 msgstr "bật/tắt bộ đệm không theo vết"
 
-#: builtin/update-index.c:1054
+#: builtin/update-index.c:1055
 msgid "test if the filesystem supports untracked cache"
 msgstr "kiểm tra xem hệ thống tập tin có hỗ trợ đệm không theo dõi hay không"
 
-#: builtin/update-index.c:1056
+#: builtin/update-index.c:1057
 msgid "enable untracked cache without testing the filesystem"
 msgstr "bật bộ đệm không theo vết mà không kiểm tra hệ thống tập tin"
 
-#: builtin/update-index.c:1058
+#: builtin/update-index.c:1059
 msgid "write out the index even if is not flagged as changed"
 msgstr "ghi ra mục lục ngay cả khi không được đánh cờ là có thay đổi"
 
-#: builtin/update-index.c:1060
+#: builtin/update-index.c:1061
 msgid "enable or disable file system monitor"
 msgstr "bật/tắt theo dõi hệ thống tập tin"
 
-#: builtin/update-index.c:1062
+#: builtin/update-index.c:1063
 msgid "mark files as fsmonitor valid"
 msgstr "đánh dấu các tập tin là hợp lệ fsmonitor"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1066
 msgid "clear fsmonitor valid bit"
 msgstr "xóa bít hợp lệ fsmonitor"
 
-#: builtin/update-index.c:1168
+#: builtin/update-index.c:1169
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
@@ -20475,7 +20560,7 @@
 "core.splitIndex được đặt là sai; xóa bỏ hay thay đổi nó, nếu bạn thực sự "
 "muốn bật chia tách mục lục"
 
-#: builtin/update-index.c:1177
+#: builtin/update-index.c:1178
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
@@ -20483,7 +20568,7 @@
 "core.splitIndex được đặt là đúng; xóa bỏ hay thay đổi nó, nếu bạn thực sự "
 "muốn tắt chia tách mục lục"
 
-#: builtin/update-index.c:1188
+#: builtin/update-index.c:1190
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -20491,11 +20576,11 @@
 "core.untrackedCache được đặt là đúng; xóa bỏ hay thay đổi nó, nếu bạn thực "
 "sự muốn tắt bộ đệm chưa theo dõi"
 
-#: builtin/update-index.c:1192
+#: builtin/update-index.c:1194
 msgid "Untracked cache disabled"
 msgstr "Nhớ đệm không theo vết bị tắt"
 
-#: builtin/update-index.c:1200
+#: builtin/update-index.c:1202
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -20503,29 +20588,29 @@
 "core.untrackedCache được đặt là sai; xóa bỏ hay thay đổi nó, nếu bạn thực sự "
 "muốn bật bộ đệm chưa theo dõi"
 
-#: builtin/update-index.c:1204
+#: builtin/update-index.c:1206
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "Nhớ đệm không theo vết được bật cho “%s”"
 
-#: builtin/update-index.c:1212
+#: builtin/update-index.c:1214
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr ""
 "core.fsmonitor chưa được đặt; đặt nó nếu bạn thực sự muốn bật theo dõi hệ "
 "thống tập tin"
 
-#: builtin/update-index.c:1216
+#: builtin/update-index.c:1218
 msgid "fsmonitor enabled"
 msgstr "fsmonitor được bật"
 
-#: builtin/update-index.c:1219
+#: builtin/update-index.c:1221
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 "core.fsmonitor đã được đặt; bỏ đặt nó nếu bạn thực sự muốn bật theo dõi hệ "
 "thống tập tin"
 
-#: builtin/update-index.c:1223
+#: builtin/update-index.c:1225
 msgid "fsmonitor disabled"
 msgstr "fsmonitor bị tắt"
 
@@ -20617,90 +20702,90 @@
 msgid "print tag contents"
 msgstr "hiển thị nội dung của thẻ"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:17
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [<các tùy chọn>] </đường/dẫn> [<commit-ish>]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:18
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [<các tùy chọn>]"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:19
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [<các tùy chọn>] </đường/dẫn>"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:20
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move <worktree> </đường/dẫn/mới>"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:21
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [<các tùy chọn>]"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:22
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<các tùy chọn>] <worktree>"
 
-#: builtin/worktree.c:24
+#: builtin/worktree.c:23
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock </đường/dẫn>"
 
-#: builtin/worktree.c:61 builtin/worktree.c:899
+#: builtin/worktree.c:60 builtin/worktree.c:898
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "gặp lỗi khi xóa “%s”"
 
-#: builtin/worktree.c:80
+#: builtin/worktree.c:79
 #, c-format
 msgid "Removing worktrees/%s: not a valid directory"
 msgstr "Gỡ bỏ cây làm việc/%s: không phải là thư mục hợp lệ"
 
-#: builtin/worktree.c:86
+#: builtin/worktree.c:85
 #, c-format
 msgid "Removing worktrees/%s: gitdir file does not exist"
 msgstr "Gỡ bỏ cây làm việc/%s: không có tập tin gitdir"
 
-#: builtin/worktree.c:91 builtin/worktree.c:100
+#: builtin/worktree.c:90 builtin/worktree.c:99
 #, c-format
 msgid "Removing worktrees/%s: unable to read gitdir file (%s)"
 msgstr "Gỡ bỏ cây làm việc/%s: không thể đọc tập tin gitdir (%s)"
 
-#: builtin/worktree.c:110
+#: builtin/worktree.c:109
 #, c-format
 msgid ""
 "Removing worktrees/%s: short read (expected %<PRIuMAX> bytes, read "
 "%<PRIuMAX>)"
 msgstr "Gỡ bỏ cây làm việc/%s: đọc ngắn (cần %<PRIuMAX> byte, đọc %<PRIuMAX>)"
 
-#: builtin/worktree.c:118
+#: builtin/worktree.c:117
 #, c-format
 msgid "Removing worktrees/%s: invalid gitdir file"
 msgstr "Gỡ bỏ cây làm việc/%s: tập tin gitdir không hợp lệ"
 
-#: builtin/worktree.c:127
+#: builtin/worktree.c:126
 #, c-format
 msgid "Removing worktrees/%s: gitdir file points to non-existent location"
 msgstr "Gỡ bỏ cây làm việc/%s: tập tin gitdir chỉ đến vị trí không tồn tại"
 
-#: builtin/worktree.c:166
+#: builtin/worktree.c:165
 msgid "report pruned working trees"
 msgstr "báo cáo các cây làm việc đã prune"
 
-#: builtin/worktree.c:168
+#: builtin/worktree.c:167
 msgid "expire working trees older than <time>"
 msgstr "các cây làm việc hết hạn cũ hơn khoảng <thời gian>"
 
-#: builtin/worktree.c:235
+#: builtin/worktree.c:234
 #, c-format
 msgid "'%s' already exists"
 msgstr "“%s” đã có từ trước rồi"
 
-#: builtin/worktree.c:252
+#: builtin/worktree.c:251
 #, c-format
 msgid "unable to re-add worktree '%s'"
 msgstr "không thể thêm-lại cây “%s”"
 
-#: builtin/worktree.c:257
+#: builtin/worktree.c:256
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -20709,7 +20794,7 @@
 "“%s” bị mất nhưng cây làm việc bị khóa;\n"
 "dùng “add -f -f” để ghi đè, hoặc “unlock” và “prune” hay “remove” để xóa"
 
-#: builtin/worktree.c:259
+#: builtin/worktree.c:258
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -20718,120 +20803,120 @@
 "“%s” bị mất nhưng cây làm việc đã được đăng ký;\n"
 "dùng “add -f” để ghi đè, hoặc “prune” hay “remove” để xóa"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:308
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "không thể tạo thư mục của “%s”"
 
-#: builtin/worktree.c:440 builtin/worktree.c:446
+#: builtin/worktree.c:439 builtin/worktree.c:445
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "Đang chuẩn bị cây làm việc (nhánh mới “%s”)"
 
-#: builtin/worktree.c:442
+#: builtin/worktree.c:441
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr "Đang chuẩn bị cây làm việc (đang cài đặt nhánh “%s”, trước đây tại %s)"
 
-#: builtin/worktree.c:451
+#: builtin/worktree.c:450
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "Đang chuẩn bị cây làm việc (đang lấy ra “%s”)"
 
-#: builtin/worktree.c:457
+#: builtin/worktree.c:456
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "Đang chuẩn bị cây làm việc (HEAD đã tách rời “%s”)"
 
-#: builtin/worktree.c:498
+#: builtin/worktree.c:497
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr "lấy ra <nhánh> ngay cả khi nó đã được lấy ra ở cây làm việc khác"
 
-#: builtin/worktree.c:501
+#: builtin/worktree.c:500
 msgid "create a new branch"
 msgstr "tạo nhánh mới"
 
-#: builtin/worktree.c:503
+#: builtin/worktree.c:502
 msgid "create or reset a branch"
 msgstr "tạo hay đặt lại một nhánh"
 
-#: builtin/worktree.c:505
+#: builtin/worktree.c:504
 msgid "populate the new working tree"
 msgstr "di chuyển cây làm việc mới"
 
-#: builtin/worktree.c:506
+#: builtin/worktree.c:505
 msgid "keep the new working tree locked"
 msgstr "giữ cây làm việc mới bị khóa"
 
-#: builtin/worktree.c:509
+#: builtin/worktree.c:508
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "cài đặt chế độ theo dõi (xem git-branch(1))"
 
-#: builtin/worktree.c:512
+#: builtin/worktree.c:511
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr "có khớp tên tên nhánh mới với một nhánh theo dõi máy chủ"
 
-#: builtin/worktree.c:520
+#: builtin/worktree.c:519
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr "Các tùy chọn -b, -B, và --detach loại từ lẫn nhau"
 
-#: builtin/worktree.c:581
+#: builtin/worktree.c:580
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "--[no-]track chỉ có thể được dùng nếu một nhánh mới được tạo"
 
-#: builtin/worktree.c:681
+#: builtin/worktree.c:680
 msgid "reason for locking"
 msgstr "lý do khóa"
 
-#: builtin/worktree.c:693 builtin/worktree.c:726 builtin/worktree.c:800
-#: builtin/worktree.c:927
+#: builtin/worktree.c:692 builtin/worktree.c:725 builtin/worktree.c:799
+#: builtin/worktree.c:926
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "%s không phải là cây làm việc"
 
-#: builtin/worktree.c:695 builtin/worktree.c:728
+#: builtin/worktree.c:694 builtin/worktree.c:727
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "Cây thư mục làm việc chính không thể khóa hay bỏ khóa được"
 
-#: builtin/worktree.c:700
+#: builtin/worktree.c:699
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "“%s” đã được khóa rồi, lý do: %s"
 
-#: builtin/worktree.c:702
+#: builtin/worktree.c:701
 #, c-format
 msgid "'%s' is already locked"
 msgstr "“%s” đã được khóa rồi"
 
-#: builtin/worktree.c:730
+#: builtin/worktree.c:729
 #, c-format
 msgid "'%s' is not locked"
 msgstr "“%s” chưa bị khóa"
 
-#: builtin/worktree.c:771
+#: builtin/worktree.c:770
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr "cây làm việc có chứa mô-đun-con không thể di chuyển hay xóa bỏ"
 
-#: builtin/worktree.c:779
+#: builtin/worktree.c:778
 msgid "force move even if worktree is dirty or locked"
 msgstr "ép buộc ngay cả khi cây làm việc đang bẩn hay bị khóa"
 
-#: builtin/worktree.c:802 builtin/worktree.c:929
+#: builtin/worktree.c:801 builtin/worktree.c:928
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "“%s” là cây làm việc chính"
 
-#: builtin/worktree.c:807
+#: builtin/worktree.c:806
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "không thể phác họa ra tên đích đến “%s”"
 
-#: builtin/worktree.c:813
+#: builtin/worktree.c:812
 #, c-format
 msgid "target '%s' already exists"
 msgstr "đích “%s” đã tồn tại rồi"
 
-#: builtin/worktree.c:821
+#: builtin/worktree.c:820
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -20840,7 +20925,7 @@
 "không thể di chuyển một cây-làm-việc bị khóa, khóa vì: %s\n"
 "dùng “move -f -f” để ghi đè hoặc mở khóa trước đã"
 
-#: builtin/worktree.c:823
+#: builtin/worktree.c:822
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -20848,36 +20933,38 @@
 "không thể di chuyển một cây-làm-việc bị khóa;\n"
 "dùng “move -f -f” để ghi đè hoặc mở khóa trước đã"
 
-#: builtin/worktree.c:826
+#: builtin/worktree.c:825
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "thẩm tra gặp lỗi, không thể di chuyển một cây-làm-việc: %s"
 
-#: builtin/worktree.c:831
+#: builtin/worktree.c:830
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "gặp lỗi khi chuyển “%s” sang “%s”"
 
-#: builtin/worktree.c:879
+#: builtin/worktree.c:878
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "gặp lỗi khi chạy “git status” vào “%s”"
 
-#: builtin/worktree.c:883
+#: builtin/worktree.c:882
 #, c-format
-msgid "'%s' is dirty, use --force to delete it"
-msgstr "“%s” đang bẩn, hãy dùng --force để xóa nó"
+msgid "'%s' contains modified or untracked files, use --force to delete it"
+msgstr ""
+"“%s” có chứa các tập tin đã bị sửa chữa hoặc chưa được theo dõi, hãy dùng --"
+"force để xóa nó"
 
-#: builtin/worktree.c:888
+#: builtin/worktree.c:887
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "gặp lỗi khi chạy “git status” trong “%s”, mã %d"
 
-#: builtin/worktree.c:911
+#: builtin/worktree.c:910
 msgid "force removal even if worktree is dirty or locked"
 msgstr "ép buộc di chuyển thậm chí cả khi cây làm việc đang bẩn hay bị khóa"
 
-#: builtin/worktree.c:934
+#: builtin/worktree.c:933
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -20886,7 +20973,7 @@
 "không thể xóa bỏ một cây-làm-việc bị khóa, khóa vì: %s\n"
 "dùng “remove -f -f” để ghi đè hoặc mở khóa trước đã"
 
-#: builtin/worktree.c:936
+#: builtin/worktree.c:935
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -20894,7 +20981,7 @@
 "không thể xóa bỏ một cây-làm-việc bị khóa;\n"
 "dùng “remove -f -f” để ghi đè hoặc mở khóa trước đã"
 
-#: builtin/worktree.c:939
+#: builtin/worktree.c:938
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "thẩm tra gặp lỗi, không thể gỡ bỏ một cây-làm-việc: %s"
@@ -20915,6 +21002,16 @@
 msgid "only useful for debugging"
 msgstr "chỉ hữu ích khi cần gỡ lỗi"
 
+#: fast-import.c:3118
+#, c-format
+msgid "Expected 'mark' command, got %s"
+msgstr "Cần lệnh 'mark', nhưng lại nhận được %s"
+
+#: fast-import.c:3123
+#, c-format
+msgid "Expected 'to' command, got %s"
+msgstr "Cần lệnh 'to', nhưng lại nhận được %s"
+
 #: credential-cache--daemon.c:223
 #, c-format
 msgid ""
@@ -21028,40 +21125,40 @@
 "bí danh “%s” thay đổi biến môi trường.\n"
 "Bạn có thể sử dụng “!git” trong đặt bí danh để làm việc này"
 
-#: git.c:377
+#: git.c:376
 #, c-format
 msgid "empty alias for %s"
 msgstr "làm trống bí danh cho %s"
 
-#: git.c:380
+#: git.c:379
 #, c-format
 msgid "recursive alias: %s"
 msgstr "đệ quy các bí danh: %s"
 
-#: git.c:460
+#: git.c:459
 msgid "write failure on standard output"
 msgstr "lỗi ghi nghiêm trong trên đầu ra tiêu chuẩn"
 
-#: git.c:462
+#: git.c:461
 msgid "unknown write failure on standard output"
 msgstr "lỗi nghiêm trọng chưa biết khi ghi ra đầu ra tiêu chuẩn"
 
-#: git.c:464
+#: git.c:463
 msgid "close failed on standard output"
 msgstr "gặp lỗi khi đóng đầu ra tiêu chuẩn"
 
-#: git.c:793
+#: git.c:792
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr ""
 "dò tìm thấy các bí danh quẩn tròn: biểu thức của “%s” không có điểm kết:%s"
 
-#: git.c:843
+#: git.c:842
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "không thể xử lý %s như là một phần bổ sung"
 
-#: git.c:856
+#: git.c:855
 #, c-format
 msgid ""
 "usage: %s\n"
@@ -21070,12 +21167,12 @@
 "cách dùng: %s\n"
 "\n"
 
-#: git.c:876
+#: git.c:875
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr "gặp lỗi khi khai triển bí danh “%s”; “%s” không phải là lệnh git\n"
 
-#: git.c:888
+#: git.c:887
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr "gặp lỗi khi chạy lệnh “%s”: %s\n"
@@ -21093,34 +21190,34 @@
 msgid "Public key pinning not supported with cURL < 7.44.0"
 msgstr "Chốt khóa công không được hỗ trợ với cURL < 7.44.0"
 
-#: http.c:876
+#: http.c:878
 msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
 msgstr "CURLSSLOPT_NO_REVOKE không được hỗ trợ với cURL < 7.44.0"
 
-#: http.c:949
+#: http.c:951
 msgid "Protocol restrictions not supported with cURL < 7.19.4"
 msgstr "Các hạn chế giao thức không được hỗ trợ với cURL < 7.19.4"
 
-#: http.c:1085
+#: http.c:1088
 #, c-format
 msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
 msgstr ""
 "Không hỗ trợ ứng dụng SSL chạy phía sau “%s”. Hỗ trợ ứng dụng SSL chạy phía "
 "sau:"
 
-#: http.c:1092
+#: http.c:1095
 #, c-format
 msgid "Could not set SSL backend to '%s': cURL was built without SSL backends"
 msgstr ""
 "Không thể đặt ứng dụng chạy SSL phía sau “%s”: cURL được biên dịch không có "
 "sự hỗ trợ ứng dụng chạy phía sau SSL"
 
-#: http.c:1096
+#: http.c:1099
 #, c-format
 msgid "Could not set SSL backend to '%s': already set"
 msgstr "Không thể đặt ứng dụng chạy sau SSL cho “%s”: đã đặt rồi"
 
-#: http.c:1965
+#: http.c:1968
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -21131,130 +21228,130 @@
 "      hỏi cho: %s\n"
 " chuyển hướng: %s"
 
-#: remote-curl.c:157
+#: remote-curl.c:166
 #, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr "sai trích dẫn trong giá trị push-option :“%s”"
 
-#: remote-curl.c:254
+#: remote-curl.c:263
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr "%sinfo/refs không hợp lệ: đây có phải là một kho git?"
 
-#: remote-curl.c:355
+#: remote-curl.c:364
 msgid "invalid server response; expected service, got flush packet"
 msgstr ""
 "đáp ứng từ máy phục vụ không hợp lệ; cần dịch vụ, nhưng lại nhận được gói "
 "flush"
 
-#: remote-curl.c:386
+#: remote-curl.c:395
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr "trả về của máy phục vụ không hợp lệ; nhận được %s"
 
-#: remote-curl.c:446
+#: remote-curl.c:455
 #, c-format
 msgid "repository '%s' not found"
 msgstr "không tìm thấy kho “%s”"
 
-#: remote-curl.c:450
+#: remote-curl.c:459
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr "Xác thực gặp lỗi cho “%s”"
 
-#: remote-curl.c:454
+#: remote-curl.c:463
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "không thể truy cập “%s”: %s"
 
-#: remote-curl.c:460
+#: remote-curl.c:469
 #, c-format
 msgid "redirecting to %s"
 msgstr "chuyển hướng đến %s"
 
-#: remote-curl.c:584
+#: remote-curl.c:593
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr "không nên có EOF khi không gentle trên EOF"
 
-#: remote-curl.c:664
+#: remote-curl.c:673
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr "không thể tua lại dữ liệu post rpc - thử tăng http.postBuffer"
 
-#: remote-curl.c:724
+#: remote-curl.c:733
 #, c-format
 msgid "RPC failed; %s"
 msgstr "RPC gặp lỗi; %s"
 
-#: remote-curl.c:764
+#: remote-curl.c:773
 msgid "cannot handle pushes this big"
 msgstr "không thể xử lý đẩy cái lớn này"
 
-#: remote-curl.c:879
+#: remote-curl.c:888
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr "không thể giải nén yêu cầu; có lỗi khi giải nén của zlib %d"
 
-#: remote-curl.c:883
+#: remote-curl.c:892
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr "không thể giải nén yêu cầu; có lỗi ở cuối %d"
 
-#: remote-curl.c:1014
+#: remote-curl.c:1023
 msgid "dumb http transport does not support shallow capabilities"
 msgstr "đổ vận chuyển http không hỗ trợ khả năng nông"
 
-#: remote-curl.c:1028
+#: remote-curl.c:1037
 msgid "fetch failed."
 msgstr "lấy về gặp lỗi."
 
-#: remote-curl.c:1076
+#: remote-curl.c:1085
 msgid "cannot fetch by sha1 over smart http"
 msgstr "không thể lấy về bằng sha1 thông qua smart http"
 
-#: remote-curl.c:1120 remote-curl.c:1126
+#: remote-curl.c:1129 remote-curl.c:1135
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr "lỗi giao thức: cần sha/ref, nhưng lại nhận được “%s”"
 
-#: remote-curl.c:1138 remote-curl.c:1252
+#: remote-curl.c:1147 remote-curl.c:1261
 #, c-format
 msgid "http transport does not support %s"
 msgstr "vận chuyển http không hỗ trợ %s"
 
-#: remote-curl.c:1174
+#: remote-curl.c:1183
 msgid "git-http-push failed"
 msgstr "git-http-push gặp lỗi"
 
-#: remote-curl.c:1360
+#: remote-curl.c:1367
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr "remote-curl: usage: git remote-curl <máy chủ> [<url>]"
 
-#: remote-curl.c:1392
+#: remote-curl.c:1399
 msgid "remote-curl: error reading command stream from git"
 msgstr "remote-curl: gặp lỗi khi đọc luồng dữ liệu lệnh từ git"
 
-#: remote-curl.c:1399
+#: remote-curl.c:1406
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr "remote-curl: đã cố gắng fetch mà không có kho nội bộ"
 
-#: remote-curl.c:1439
+#: remote-curl.c:1446
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr "remote-curl: không hiểu lệnh “%s” từ git"
 
-#: list-objects-filter-options.h:61
+#: list-objects-filter-options.h:85
 msgid "args"
 msgstr "các_tham_số"
 
-#: list-objects-filter-options.h:62
+#: list-objects-filter-options.h:86
 msgid "object filtering"
 msgstr "lọc đối tượng"
 
-#: parse-options.h:170
+#: parse-options.h:179
 msgid "expiry-date"
 msgstr "ngày hết hạn"
 
-#: parse-options.h:184
+#: parse-options.h:193
 msgid "no-op (backward compatibility)"
 msgstr "no-op (tương thích ngược)"
 
@@ -23669,6 +23766,47 @@
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "Bạn có thực sự muốn gửi %s? [y|N](có/KHÔNG): "
 
+#, c-format
+#~ msgid "unknown core.untrackedCache value '%s'; using 'keep' default value"
+#~ msgstr ""
+#~ "không hiểu giá trị core.untrackedCache “%s”; dùng giá trị mặc định “keep”"
+
+#~ msgid "cannot change partial clone promisor remote"
+#~ msgstr "không thể thay đổi nhân bản từng phần máy chủ promisor"
+
+#~ msgid "error building trees"
+#~ msgstr "gặp lỗi khi xây dựng cây"
+
+#, c-format
+#~ msgid "invalid date format '%s' in '%s'"
+#~ msgstr "định dạng ngày tháng không hợp lệ “%s” trong “%s”"
+
+#~ msgid "writing root commit"
+#~ msgstr "ghi chuyển giao gốc"
+
+#, c-format
+#~ msgid "staged changes in the following files may be lost: %s"
+#~ msgstr ""
+#~ "các thay đổi đã đưa lên bệ phóng trong các tập tin sau đây có thể bị mất: "
+#~ "%s"
+
+#~ msgid ""
+#~ "--filter can only be used with the remote configured in extensions."
+#~ "partialClone"
+#~ msgstr ""
+#~ "--filter chỉ có thể được dùng với máy chủ được cấu hình bằng extensions."
+#~ "partialClone"
+
+#~ msgid "verify commit-msg hook"
+#~ msgstr "thẩm tra móc (hook) commit-msg"
+
+#~ msgid "cannot combine '--rebase-merges' with '--strategy-option'"
+#~ msgstr "không thể kết hợp “--rebase-merges” với “--strategy-option”"
+
+#, c-format
+#~ msgid "invalid sparse value '%s'"
+#~ msgstr "giá trị sparse không hợp lệ “%s”"
+
 #~ msgid ""
 #~ "Fetch normally indicates which branches had a forced update, but that "
 #~ "check has been disabled."
@@ -24590,9 +24728,6 @@
 #~ msgid "no such user"
 #~ msgstr "không có người dùng như vậy"
 
-#~ msgid "Missing author: %s"
-#~ msgstr "Thiếu tên tác giả: %s"
-
 #~ msgid "Testing "
 #~ msgstr "Đang thử"
 
@@ -24645,9 +24780,6 @@
 #~ msgid "option %s does not accept negative form"
 #~ msgstr "tùy chọn %s không chấp nhận dạng thức âm"
 
-#~ msgid "unable to parse value '%s' for option %s"
-#~ msgstr "không thể phân tích giá trị “%s” cho tùy chọn %s"
-
 #~ msgid "-b and -B are mutually exclusive"
 #~ msgstr "-b và -B loại từ lẫn nhau."
 
diff --git a/po/zh_CN.po b/po/zh_CN.po
index c6bdb3e..ba03b10 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -139,8 +139,8 @@
 msgstr ""
 "Project-Id-Version: Git\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2019-08-10 20:12+0800\n"
-"PO-Revision-Date: 2019-08-13 21:16+0800\n"
+"POT-Creation-Date: 2019-10-28 13:19+0800\n"
+"PO-Revision-Date: 2019-10-30 14:58+0800\n"
 "Last-Translator: Jiang Xin <worldhello.net@gmail.com>\n"
 "Language-Team: GitHub <https://github.com/jiangxin/git/>\n"
 "Language: zh_CN\n"
@@ -191,7 +191,7 @@
 msgid "Exiting because of an unresolved conflict."
 msgstr "因为存在未解决的冲突而退出。"
 
-#: advice.c:193 builtin/merge.c:1327
+#: advice.c:193 builtin/merge.c:1332
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "您尚未结束您的合并(存在 MERGE_HEAD)。"
 
@@ -325,17 +325,7 @@
 msgid "inconsistent header lines %d and %d"
 msgstr "不一致的文件头,%d 行和 %d 行"
 
-#: apply.c:1460
-#, c-format
-msgid "recount: unexpected line: %.*s"
-msgstr "recount:意外的行:%.*s"
-
-#: apply.c:1529
-#, c-format
-msgid "patch fragment without header at line %d: %.*s"
-msgstr "第 %d 行的补丁片段没有头信息:%.*s"
-
-#: apply.c:1551
+#: apply.c:1372
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -346,82 +336,92 @@
 msgstr[0] "当移除 %d 个前导路径后 git diff 头缺乏文件名信息(第 %d 行)"
 msgstr[1] "当移除 %d 个前导路径后 git diff 头缺乏文件名信息(第 %d 行)"
 
-#: apply.c:1564
+#: apply.c:1385
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr "git diff 的头信息中缺乏文件名信息(第 %d 行)"
 
-#: apply.c:1752
+#: apply.c:1481
+#, c-format
+msgid "recount: unexpected line: %.*s"
+msgstr "recount:意外的行:%.*s"
+
+#: apply.c:1550
+#, c-format
+msgid "patch fragment without header at line %d: %.*s"
+msgstr "第 %d 行的补丁片段没有头信息:%.*s"
+
+#: apply.c:1753
 msgid "new file depends on old contents"
 msgstr "新文件依赖旧内容"
 
-#: apply.c:1754
+#: apply.c:1755
 msgid "deleted file still has contents"
 msgstr "删除的文件仍有内容"
 
-#: apply.c:1788
+#: apply.c:1789
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "补丁在第 %d 行损坏"
 
-#: apply.c:1825
+#: apply.c:1826
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "新文件 %s 依赖旧内容"
 
-#: apply.c:1827
+#: apply.c:1828
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "删除的文件 %s 仍有内容"
 
-#: apply.c:1830
+#: apply.c:1831
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** 警告:文件 %s 成为空文件但并未删除"
 
-#: apply.c:1977
+#: apply.c:1978
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "二进制补丁在第 %d 行损坏:%.*s"
 
-#: apply.c:2014
+#: apply.c:2015
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "未能识别的二进制补丁位于第 %d 行"
 
-#: apply.c:2176
+#: apply.c:2177
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "补丁文件的第 %d 行只有垃圾数据"
 
-#: apply.c:2262
+#: apply.c:2263
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "无法读取符号链接 %s"
 
-#: apply.c:2266
+#: apply.c:2267
 #, c-format
 msgid "unable to open or read %s"
 msgstr "不能打开或读取 %s"
 
-#: apply.c:2925
+#: apply.c:2926
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "无效的行首字符:'%c'"
 
-#: apply.c:3046
+#: apply.c:3047
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "块 #%d 成功应用于 %d(偏移 %d 行)"
 msgstr[1] "块 #%d 成功应用于 %d(偏移 %d 行)"
 
-#: apply.c:3058
+#: apply.c:3059
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "上下文减少到(%ld/%ld)以在第 %d 行应用补丁片段"
 
-#: apply.c:3064
+#: apply.c:3065
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -430,445 +430,445 @@
 "当查询:\n"
 "%.*s"
 
-#: apply.c:3086
+#: apply.c:3087
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "缺失 '%s' 的二进制补丁数据"
 
-#: apply.c:3094
+#: apply.c:3095
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr "不能反向应用一个缺少到 '%s' 的反向数据块的二进制补丁"
 
-#: apply.c:3141
+#: apply.c:3142
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr "不能在 '%s' 上应用没有完整索引行的二进制补丁"
 
-#: apply.c:3151
+#: apply.c:3152
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr "补丁应用到 '%s'(%s),但是和当前内容不匹配。"
 
-#: apply.c:3159
+#: apply.c:3160
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "补丁应用到空文件 '%s',但其并非空文件"
 
-#: apply.c:3177
+#: apply.c:3178
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "无法读取 '%2$s' 必需的目标文件 %1$s"
 
-#: apply.c:3190
+#: apply.c:3191
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "二进制补丁未应用到 '%s'"
 
-#: apply.c:3196
+#: apply.c:3197
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr "到 '%s' 的二进制补丁产生了不正确的结果(应为 %s,却为 %s)"
 
-#: apply.c:3217
+#: apply.c:3218
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "打补丁失败:%s:%ld"
 
-#: apply.c:3340
+#: apply.c:3341
 #, c-format
 msgid "cannot checkout %s"
 msgstr "不能检出 %s"
 
-#: apply.c:3392 apply.c:3403 apply.c:3449 midx.c:62 setup.c:279
+#: apply.c:3393 apply.c:3404 apply.c:3450 midx.c:61 setup.c:280
 #, c-format
 msgid "failed to read %s"
 msgstr "无法读取 %s"
 
-#: apply.c:3400
+#: apply.c:3401
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "读取位于符号链接中的 '%s'"
 
-#: apply.c:3429 apply.c:3672
+#: apply.c:3430 apply.c:3673
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "路径 %s 已经被重命名/删除"
 
-#: apply.c:3515 apply.c:3687
+#: apply.c:3516 apply.c:3688
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s:不存在于索引中"
 
-#: apply.c:3524 apply.c:3695
+#: apply.c:3525 apply.c:3696
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s:和索引不匹配"
 
-#: apply.c:3559
+#: apply.c:3560
 msgid "repository lacks the necessary blob to fall back on 3-way merge."
 msgstr "仓库缺乏必要的数据对象以进行三方合并。"
 
-#: apply.c:3562
+#: apply.c:3563
 #, c-format
 msgid "Falling back to three-way merge...\n"
 msgstr "回落到三方合并...\n"
 
-#: apply.c:3578 apply.c:3582
+#: apply.c:3579 apply.c:3583
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "无法读取 '%s' 的当前内容"
 
-#: apply.c:3594
+#: apply.c:3595
 #, c-format
 msgid "Failed to fall back on three-way merge...\n"
 msgstr "无法回落到三方合并...\n"
 
-#: apply.c:3608
+#: apply.c:3609
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "应用补丁到 '%s' 存在冲突。\n"
 
-#: apply.c:3613
+#: apply.c:3614
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "成功应用补丁到 '%s'。\n"
 
-#: apply.c:3639
+#: apply.c:3640
 msgid "removal patch leaves file contents"
 msgstr "移除补丁仍留下了文件内容"
 
-#: apply.c:3712
+#: apply.c:3713
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s:错误类型"
 
-#: apply.c:3714
+#: apply.c:3715
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s 的类型是 %o,应为 %o"
 
-#: apply.c:3865 apply.c:3867 read-cache.c:830 read-cache.c:856
+#: apply.c:3866 apply.c:3868 read-cache.c:830 read-cache.c:856
 #: read-cache.c:1309
 #, c-format
 msgid "invalid path '%s'"
 msgstr "无效路径 '%s'"
 
-#: apply.c:3923
+#: apply.c:3924
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s:已经存在于索引中"
 
-#: apply.c:3926
+#: apply.c:3927
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s:已经存在于工作区中"
 
-#: apply.c:3946
+#: apply.c:3947
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "%2$s 的新模式(%1$o)和旧模式(%3$o)不匹配"
 
-#: apply.c:3951
+#: apply.c:3952
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "%2$s 的新模式(%1$o)和 %4$s 的旧模式(%3$o)不匹配"
 
-#: apply.c:3971
+#: apply.c:3972
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "受影响的文件 '%s' 位于符号链接中"
 
-#: apply.c:3975
+#: apply.c:3976
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s:补丁未应用"
 
-#: apply.c:3990
+#: apply.c:3991
 #, c-format
 msgid "Checking patch %s..."
 msgstr "正在检查补丁 %s..."
 
-#: apply.c:4082
+#: apply.c:4083
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "子模组 %s 的 sha1 信息缺失或无效"
 
-#: apply.c:4089
+#: apply.c:4090
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "%s 的模式变更,但它不在当前 HEAD 中"
 
-#: apply.c:4092
+#: apply.c:4093
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "sha1 信息缺失或无效(%s)。"
 
-#: apply.c:4097 builtin/checkout.c:278 builtin/reset.c:143
+#: apply.c:4098 builtin/checkout.c:279 builtin/reset.c:143
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "对路径 '%s' 的 make_cache_entry 操作失败"
 
-#: apply.c:4101
+#: apply.c:4102
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "不能在临时索引中添加 %s"
 
-#: apply.c:4111
+#: apply.c:4112
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "不能把临时索引写入到 %s"
 
-#: apply.c:4249
+#: apply.c:4250
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "不能从索引中移除 %s"
 
-#: apply.c:4283
+#: apply.c:4284
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "子模组 %s 损坏的补丁"
 
-#: apply.c:4289
+#: apply.c:4290
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "不能对新建文件 '%s' 调用 stat"
 
-#: apply.c:4297
+#: apply.c:4298
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr "不能为新建文件 %s 创建后端存储"
 
-#: apply.c:4303 apply.c:4448
+#: apply.c:4304 apply.c:4449
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "无法为 %s 添加缓存条目"
 
-#: apply.c:4346
+#: apply.c:4347
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "写入 '%s' 失败"
 
-#: apply.c:4350
+#: apply.c:4351
 #, c-format
 msgid "closing file '%s'"
 msgstr "关闭文件 '%s'"
 
-#: apply.c:4420
+#: apply.c:4421
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "不能写文件 '%s' 权限 %o"
 
-#: apply.c:4518
+#: apply.c:4519
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "成功应用补丁 %s。"
 
-#: apply.c:4526
+#: apply.c:4527
 msgid "internal error"
 msgstr "内部错误"
 
-#: apply.c:4529
+#: apply.c:4530
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "应用 %%s 个补丁,其中 %d 个被拒绝..."
 msgstr[1] "应用 %%s 个补丁,其中 %d 个被拒绝..."
 
-#: apply.c:4540
+#: apply.c:4541
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "截短 .rej 文件名为 %.*s.rej"
 
-#: apply.c:4548 builtin/fetch.c:878 builtin/fetch.c:1168
+#: apply.c:4549 builtin/fetch.c:898 builtin/fetch.c:1194
 #, c-format
 msgid "cannot open %s"
 msgstr "不能打开 %s"
 
-#: apply.c:4562
+#: apply.c:4563
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "第 #%d 个片段成功应用。"
 
-#: apply.c:4566
+#: apply.c:4567
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "拒绝第 #%d 个片段。"
 
-#: apply.c:4676
+#: apply.c:4686
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "略过补丁 '%s'。"
 
-#: apply.c:4684
+#: apply.c:4694
 msgid "unrecognized input"
 msgstr "未能识别的输入"
 
-#: apply.c:4704
+#: apply.c:4714
 msgid "unable to read index file"
 msgstr "无法读取索引文件"
 
-#: apply.c:4859
+#: apply.c:4871
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "不能打开补丁 '%s':%s"
 
-#: apply.c:4886
+#: apply.c:4898
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "抑制下仍有 %d 个空白字符误用"
 msgstr[1] "抑制下仍有 %d 个空白字符误用"
 
-#: apply.c:4892 apply.c:4907
+#: apply.c:4904 apply.c:4919
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d 行新增了空白字符误用。"
 msgstr[1] "%d 行新增了空白字符误用。"
 
-#: apply.c:4900
+#: apply.c:4912
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] "修复空白错误后,应用了 %d 行。"
 msgstr[1] "修复空白错误后,应用了 %d 行。"
 
-#: apply.c:4916 builtin/add.c:540 builtin/mv.c:301 builtin/rm.c:390
+#: apply.c:4928 builtin/add.c:540 builtin/mv.c:301 builtin/rm.c:390
 msgid "Unable to write new index file"
 msgstr "无法写入新索引文件"
 
-#: apply.c:4943 apply.c:4946 builtin/am.c:2208 builtin/am.c:2211
-#: builtin/clone.c:123 builtin/fetch.c:128 builtin/merge.c:273
-#: builtin/pull.c:208 builtin/submodule--helper.c:407
+#: apply.c:4955 apply.c:4958 builtin/am.c:2197 builtin/am.c:2200
+#: builtin/clone.c:122 builtin/fetch.c:143 builtin/merge.c:273
+#: builtin/pull.c:209 builtin/submodule--helper.c:407
 #: builtin/submodule--helper.c:1367 builtin/submodule--helper.c:1370
 #: builtin/submodule--helper.c:1850 builtin/submodule--helper.c:1853
 #: builtin/submodule--helper.c:2092 git-add--interactive.perl:211
 msgid "path"
 msgstr "路径"
 
-#: apply.c:4944
+#: apply.c:4956
 msgid "don't apply changes matching the given path"
 msgstr "不要应用与给出路径向匹配的变更"
 
-#: apply.c:4947
+#: apply.c:4959
 msgid "apply changes matching the given path"
 msgstr "应用与给出路径向匹配的变更"
 
-#: apply.c:4949 builtin/am.c:2217
+#: apply.c:4961 builtin/am.c:2206
 msgid "num"
 msgstr "数字"
 
-#: apply.c:4950
+#: apply.c:4962
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "从传统的 diff 路径中移除指定数量的前导斜线"
 
-#: apply.c:4953
+#: apply.c:4965
 msgid "ignore additions made by the patch"
 msgstr "忽略补丁中的添加的文件"
 
-#: apply.c:4955
+#: apply.c:4967
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "不应用补丁,而是显示输入的差异统计(diffstat)"
 
-#: apply.c:4959
+#: apply.c:4971
 msgid "show number of added and deleted lines in decimal notation"
 msgstr "以十进制数显示添加和删除的行数"
 
-#: apply.c:4961
+#: apply.c:4973
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "不应用补丁,而是显示输入的概要"
 
-#: apply.c:4963
+#: apply.c:4975
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "不应用补丁,而是查看补丁是否可应用"
 
-#: apply.c:4965
+#: apply.c:4977
 msgid "make sure the patch is applicable to the current index"
 msgstr "确认补丁可以应用到当前索引"
 
-#: apply.c:4967
+#: apply.c:4979
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "使用命令 `git add --intent-to-add` 标记新增文件"
 
-#: apply.c:4969
+#: apply.c:4981
 msgid "apply a patch without touching the working tree"
 msgstr "应用补丁而不修改工作区"
 
-#: apply.c:4971
+#: apply.c:4983
 msgid "accept a patch that touches outside the working area"
 msgstr "接受修改工作区之外文件的补丁"
 
-#: apply.c:4974
+#: apply.c:4986
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "还应用此补丁(与 --stat/--summary/--check 选项同时使用)"
 
-#: apply.c:4976
+#: apply.c:4988
 msgid "attempt three-way merge if a patch does not apply"
 msgstr "如果一个补丁不能应用则尝试三方合并"
 
-#: apply.c:4978
+#: apply.c:4990
 msgid "build a temporary index based on embedded index information"
 msgstr "创建一个临时索引基于嵌入的索引信息"
 
-#: apply.c:4981 builtin/checkout-index.c:173 builtin/ls-files.c:524
+#: apply.c:4993 builtin/checkout-index.c:173 builtin/ls-files.c:524
 msgid "paths are separated with NUL character"
 msgstr "路径以 NUL 字符分隔"
 
-#: apply.c:4983
+#: apply.c:4995
 msgid "ensure at least <n> lines of context match"
 msgstr "确保至少匹配 <n> 行上下文"
 
-#: apply.c:4984 builtin/am.c:2196 builtin/interpret-trailers.c:98
+#: apply.c:4996 builtin/am.c:2185 builtin/interpret-trailers.c:98
 #: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3330 builtin/rebase.c:1421
+#: builtin/pack-objects.c:3310 builtin/rebase.c:1445
 msgid "action"
 msgstr "动作"
 
-#: apply.c:4985
+#: apply.c:4997
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "检查新增和修改的行中间的空白字符滥用"
 
-#: apply.c:4988 apply.c:4991
+#: apply.c:5000 apply.c:5003
 msgid "ignore changes in whitespace when finding context"
 msgstr "查找上下文时忽略空白字符的变更"
 
-#: apply.c:4994
+#: apply.c:5006
 msgid "apply the patch in reverse"
 msgstr "反向应用补丁"
 
-#: apply.c:4996
+#: apply.c:5008
 msgid "don't expect at least one line of context"
 msgstr "无需至少一行上下文"
 
-#: apply.c:4998
+#: apply.c:5010
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "将拒绝的补丁片段保存在对应的 *.rej 文件中"
 
-#: apply.c:5000
+#: apply.c:5012
 msgid "allow overlapping hunks"
 msgstr "允许重叠的补丁片段"
 
-#: apply.c:5001 builtin/add.c:291 builtin/check-ignore.c:22
+#: apply.c:5013 builtin/add.c:291 builtin/check-ignore.c:22
 #: builtin/commit.c:1337 builtin/count-objects.c:98 builtin/fsck.c:786
-#: builtin/log.c:2068 builtin/mv.c:123 builtin/read-tree.c:128
+#: builtin/log.c:2085 builtin/mv.c:123 builtin/read-tree.c:128
 msgid "be verbose"
 msgstr "冗长输出"
 
-#: apply.c:5003
+#: apply.c:5015
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr "允许不正确的文件末尾换行符"
 
-#: apply.c:5006
+#: apply.c:5018
 msgid "do not trust the line counts in the hunk headers"
 msgstr "不信任补丁片段的头信息中的行号"
 
-#: apply.c:5008 builtin/am.c:2205
+#: apply.c:5020 builtin/am.c:2194
 msgid "root"
 msgstr "根目录"
 
-#: apply.c:5009
+#: apply.c:5021
 msgid "prepend <root> to all filenames"
 msgstr "为所有文件名前添加 <根目录>"
 
@@ -922,7 +922,7 @@
 msgid "archive format"
 msgstr "归档格式"
 
-#: archive.c:458 builtin/log.c:1580
+#: archive.c:458 builtin/log.c:1581
 msgid "prefix"
 msgstr "前缀"
 
@@ -930,11 +930,12 @@
 msgid "prepend prefix to each pathname in the archive"
 msgstr "为归档中每个路径名加上前缀"
 
-#: archive.c:460 builtin/blame.c:862 builtin/blame.c:874 builtin/blame.c:875
-#: builtin/commit-tree.c:117 builtin/config.c:129 builtin/fast-export.c:1134
-#: builtin/fast-export.c:1136 builtin/grep.c:897 builtin/hash-object.c:105
-#: builtin/ls-files.c:560 builtin/ls-files.c:563 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:177
+#: archive.c:460 builtin/blame.c:861 builtin/blame.c:873 builtin/blame.c:874
+#: builtin/commit-tree.c:117 builtin/config.c:129 builtin/fast-export.c:1162
+#: builtin/fast-export.c:1164 builtin/fast-export.c:1168 builtin/grep.c:899
+#: builtin/hash-object.c:105 builtin/ls-files.c:560 builtin/ls-files.c:563
+#: builtin/notes.c:412 builtin/notes.c:578 builtin/read-tree.c:123
+#: parse-options.h:186
 msgid "file"
 msgstr "文件"
 
@@ -966,7 +967,7 @@
 msgid "list supported archive formats"
 msgstr "列出支持的归档格式"
 
-#: archive.c:479 builtin/archive.c:91 builtin/clone.c:113 builtin/clone.c:116
+#: archive.c:479 builtin/archive.c:91 builtin/clone.c:112 builtin/clone.c:115
 #: builtin/submodule--helper.c:1379 builtin/submodule--helper.c:1859
 msgid "repo"
 msgstr "仓库"
@@ -975,7 +976,7 @@
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "从远程仓库(<仓库>)提取归档文件"
 
-#: archive.c:481 builtin/archive.c:93 builtin/difftool.c:707
+#: archive.c:481 builtin/archive.c:93 builtin/difftool.c:715
 #: builtin/notes.c:498
 msgid "command"
 msgstr "命令"
@@ -1011,26 +1012,26 @@
 msgid "cannot stream blob %s"
 msgstr "不能打开数据对象 %s"
 
-#: archive-tar.c:260 archive-zip.c:363
+#: archive-tar.c:266 archive-zip.c:363
 #, c-format
 msgid "unsupported file mode: 0%o (SHA1: %s)"
 msgstr "不支持的文件模式:0%o (SHA1: %s)"
 
-#: archive-tar.c:287 archive-zip.c:353
+#: archive-tar.c:293 archive-zip.c:353
 #, c-format
 msgid "cannot read %s"
 msgstr "不能读取 %s"
 
-#: archive-tar.c:459
+#: archive-tar.c:465
 #, c-format
 msgid "unable to start '%s' filter"
 msgstr "无法启动 '%s' 过滤器"
 
-#: archive-tar.c:462
+#: archive-tar.c:468
 msgid "unable to redirect descriptor"
 msgstr "无法重定向描述符"
 
-#: archive-tar.c:469
+#: archive-tar.c:475
 #, c-format
 msgid "'%s' filter reported error"
 msgstr "'%s' 过滤器报告了错误"
@@ -1055,17 +1056,17 @@
 msgid "timestamp too large for this system: %<PRIuMAX>"
 msgstr "对于本系统时间戳太大:%<PRIuMAX>"
 
-#: attr.c:211
+#: attr.c:213
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s 不是一个有效的属性名"
 
-#: attr.c:368
+#: attr.c:370
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "不允许 %s:%s:%d"
 
-#: attr.c:408
+#: attr.c:410
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1192,37 +1193,37 @@
 msgstr[0] "二分查找中:在此之后,还剩 %d 个版本待测试 %s\n"
 msgstr[1] "二分查找中:在此之后,还剩 %d 个版本待测试 %s\n"
 
-#: blame.c:2697
+#: blame.c:2700
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents 和 --reverse 不能混用。"
 
-#: blame.c:2711
+#: blame.c:2714
 msgid "cannot use --contents with final commit object name"
 msgstr "不能将 --contents 和最终的提交对象名共用"
 
-#: blame.c:2732
+#: blame.c:2735
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr "--reverse 和 --first-parent 共用,需要指定最新的提交"
 
-#: blame.c:2741 bundle.c:167 ref-filter.c:2196 remote.c:1938 sequencer.c:2033
-#: sequencer.c:4348 builtin/commit.c:1020 builtin/log.c:387 builtin/log.c:963
-#: builtin/log.c:1451 builtin/log.c:1827 builtin/log.c:2117 builtin/merge.c:411
-#: builtin/pack-objects.c:3148 builtin/pack-objects.c:3163
+#: blame.c:2744 bundle.c:167 ref-filter.c:2203 remote.c:1941 sequencer.c:1971
+#: sequencer.c:4305 builtin/commit.c:1020 builtin/log.c:387 builtin/log.c:964
+#: builtin/log.c:1452 builtin/log.c:1844 builtin/log.c:2134 builtin/merge.c:411
+#: builtin/pack-objects.c:3128 builtin/pack-objects.c:3143
 #: builtin/shortlog.c:192
 msgid "revision walk setup failed"
 msgstr "版本遍历设置失败"
 
-#: blame.c:2759
+#: blame.c:2762
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr "--reverse 和 --first-parent 共用,需要第一祖先链上的提交范围"
 
-#: blame.c:2770
+#: blame.c:2773
 #, c-format
 msgid "no such path %s in %s"
 msgstr "在 %2$s 中无此路径 %1$s"
 
-#: blame.c:2781
+#: blame.c:2784
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "不能为路径 %2$s 读取数据对象 %1$s"
@@ -1370,7 +1371,7 @@
 msgid "unrecognized header: %s%s (%d)"
 msgstr "未能识别的包头:%s%s (%d)"
 
-#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2283 sequencer.c:3024
+#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2221 sequencer.c:2962
 #: builtin/commit.c:791
 #, c-format
 msgid "could not open '%s'"
@@ -1423,7 +1424,7 @@
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "引用 '%s' 被 rev-list 选项排除"
 
-#: bundle.c:460 builtin/log.c:202 builtin/log.c:1732 builtin/shortlog.c:306
+#: bundle.c:460 builtin/log.c:202 builtin/log.c:1733 builtin/shortlog.c:306
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "未能识别的参数:%s"
@@ -1446,8 +1447,8 @@
 msgid "invalid color value: %.*s"
 msgstr "无效的颜色值:%.*s"
 
-#: commit.c:50 sequencer.c:2727 builtin/am.c:355 builtin/am.c:399
-#: builtin/am.c:1378 builtin/am.c:2020 builtin/replace.c:455
+#: commit.c:50 sequencer.c:2665 builtin/am.c:354 builtin/am.c:398
+#: builtin/am.c:1366 builtin/am.c:2009 builtin/replace.c:456
 #, c-format
 msgid "could not parse %s"
 msgstr "不能解析 %s"
@@ -1477,27 +1478,27 @@
 "设置 \"git config advice.graftFileDeprecated false\"\n"
 "可关闭本消息"
 
-#: commit.c:1127
+#: commit.c:1128
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr "提交 %s 有一个非可信的声称来自 %s 的 GPG 签名。"
 
-#: commit.c:1130
+#: commit.c:1131
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "提交 %s 有一个错误的声称来自 %s 的 GPG 签名。"
 
-#: commit.c:1133
+#: commit.c:1134
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "提交 %s 没有 GPG 签名。"
 
-#: commit.c:1136
+#: commit.c:1137
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "提交 %s 有一个来自 %s 的好的 GPG 签名。\n"
 
-#: commit.c:1390
+#: commit.c:1391
 msgid ""
 "Warning: commit message did not conform to UTF-8.\n"
 "You may want to amend it after fixing the message, or set the config\n"
@@ -1557,193 +1558,208 @@
 msgid "unable to find all commit-graph files"
 msgstr "无法找到所有提交图形文件"
 
-#: commit-graph.c:554 commit-graph.c:614
+#: commit-graph.c:561 commit-graph.c:621
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr "无效的提交位置。提交图形可能已损坏"
 
-#: commit-graph.c:575
+#: commit-graph.c:582
 #, c-format
 msgid "could not find commit %s"
 msgstr "无法找到提交 %s"
 
-#: commit-graph.c:1002 builtin/pack-objects.c:2657
+#: commit-graph.c:855 builtin/am.c:1287
+#, c-format
+msgid "unable to parse commit %s"
+msgstr "不能解析提交 %s"
+
+#: commit-graph.c:859
+#, c-format
+msgid "unable to get tree for %s"
+msgstr "无法得到 %s 的树对象"
+
+#: commit-graph.c:1017 builtin/pack-objects.c:2641
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "无法获得对象 %s 类型"
 
-#: commit-graph.c:1034
+#: commit-graph.c:1049
 msgid "Loading known commits in commit graph"
 msgstr "正在加载提交图中的已知提交"
 
-#: commit-graph.c:1051
+#: commit-graph.c:1066
 msgid "Expanding reachable commits in commit graph"
 msgstr "正在扩展提交图中的可达提交"
 
-#: commit-graph.c:1070
+#: commit-graph.c:1085
 msgid "Clearing commit marks in commit graph"
 msgstr "正在清除提交图中的提交标记"
 
-#: commit-graph.c:1089
+#: commit-graph.c:1104
 msgid "Computing commit graph generation numbers"
 msgstr "正在计算提交图世代数字"
 
-#: commit-graph.c:1163
+#: commit-graph.c:1179
 #, c-format
 msgid "Finding commits for commit graph in %d pack"
 msgid_plural "Finding commits for commit graph in %d packs"
 msgstr[0] "正在 %d 个包中查找提交图的提交"
 msgstr[1] "正在 %d 个包中查找提交图的提交"
 
-#: commit-graph.c:1176
+#: commit-graph.c:1192
 #, c-format
 msgid "error adding pack %s"
 msgstr "添加包 %s 出错"
 
-#: commit-graph.c:1180
+#: commit-graph.c:1196
 #, c-format
 msgid "error opening index for %s"
 msgstr "为 %s 打开索引出错"
 
-#: commit-graph.c:1204
+#: commit-graph.c:1220
 #, c-format
 msgid "Finding commits for commit graph from %d ref"
 msgid_plural "Finding commits for commit graph from %d refs"
 msgstr[0] "正在从 %d 个引用中查找提交图的提交"
 msgstr[1] "正在从 %d 个引用中查找提交图的提交"
 
-#: commit-graph.c:1238
+#: commit-graph.c:1240
+#, c-format
+msgid "invalid commit object id: %s"
+msgstr "无效的提交对象 ID:%s"
+
+#: commit-graph.c:1255
 msgid "Finding commits for commit graph among packed objects"
 msgstr "正在打包对象中查找提交图的提交"
 
-#: commit-graph.c:1253
+#: commit-graph.c:1270
 msgid "Counting distinct commits in commit graph"
 msgstr "正在计算提交图中不同的提交"
 
-#: commit-graph.c:1284
+#: commit-graph.c:1300
 msgid "Finding extra edges in commit graph"
 msgstr "正在查找提交图中额外的边"
 
-#: commit-graph.c:1332
+#: commit-graph.c:1346
 msgid "failed to write correct number of base graph ids"
 msgstr "无法写入正确数量的基础图形 ID"
 
-#: commit-graph.c:1365 midx.c:811
+#: commit-graph.c:1379 midx.c:810
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "不能为 %s 创建先导目录"
 
-#: commit-graph.c:1377 builtin/index-pack.c:306 builtin/repack.c:240
+#: commit-graph.c:1391 builtin/index-pack.c:306 builtin/repack.c:241
 #, c-format
 msgid "unable to create '%s'"
 msgstr "不能创建 '%s'"
 
-#: commit-graph.c:1437
+#: commit-graph.c:1451
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "正在用 %d 步写出提交图"
 msgstr[1] "正在用 %d 步写出提交图"
 
-#: commit-graph.c:1478
+#: commit-graph.c:1492
 msgid "unable to open commit-graph chain file"
 msgstr "无法打开提交图形链文件"
 
-#: commit-graph.c:1490
+#: commit-graph.c:1504
 msgid "failed to rename base commit-graph file"
 msgstr "无法重命名基础提交图形文件"
 
-#: commit-graph.c:1510
+#: commit-graph.c:1524
 msgid "failed to rename temporary commit-graph file"
 msgstr "无法重命名临时提交图形文件"
 
-#: commit-graph.c:1621
+#: commit-graph.c:1635
 msgid "Scanning merged commits"
 msgstr "正在扫描合并提交"
 
-#: commit-graph.c:1632
+#: commit-graph.c:1646
 #, c-format
 msgid "unexpected duplicate commit id %s"
 msgstr "意外的重复提交 ID %s"
 
-#: commit-graph.c:1657
+#: commit-graph.c:1670
 msgid "Merging commit-graph"
 msgstr "正在合并提交图形"
 
-#: commit-graph.c:1844
+#: commit-graph.c:1860
 #, c-format
 msgid "the commit graph format cannot write %d commits"
 msgstr "提交图格式不能写入 %d 个提交"
 
-#: commit-graph.c:1855
+#: commit-graph.c:1871
 msgid "too many commits to write graph"
 msgstr "提交太多不能画图"
 
-#: commit-graph.c:1945
+#: commit-graph.c:1961
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr "提交图文件的校验码错误,可能已经损坏"
 
-#: commit-graph.c:1955
+#: commit-graph.c:1971
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "提交图形的对象 ID 顺序不正确:%s 然后 %s"
 
-#: commit-graph.c:1965 commit-graph.c:1980
+#: commit-graph.c:1981 commit-graph.c:1996
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr "提交图形有不正确的扇出值:fanout[%d] = %u != %u"
 
-#: commit-graph.c:1972
+#: commit-graph.c:1988
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "无法从提交图形中解析提交 %s"
 
-#: commit-graph.c:1989
+#: commit-graph.c:2006
 msgid "Verifying commits in commit graph"
 msgstr "正在校验提交图中的提交"
 
-#: commit-graph.c:2002
+#: commit-graph.c:2020
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr "无法从提交图形的对象库中解析提交 %s"
 
-#: commit-graph.c:2009
+#: commit-graph.c:2027
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr "提交图形中的提交 %s 的根树对象 ID 是 %s != %s"
 
-#: commit-graph.c:2019
+#: commit-graph.c:2037
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr "提交 %s 的提交图形父提交列表太长了"
 
-#: commit-graph.c:2028
+#: commit-graph.c:2046
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "%s 的提交图形父提交是 %s != %s"
 
-#: commit-graph.c:2041
+#: commit-graph.c:2059
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr "提交 %s 的提交图形父提交列表过早终止"
 
-#: commit-graph.c:2046
+#: commit-graph.c:2064
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
 msgstr "提交图形中提交 %s 的世代号是零,但其它地方非零"
 
-#: commit-graph.c:2050
+#: commit-graph.c:2068
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
 msgstr "提交图形中提交 %s 的世代号非零,但其它地方是零"
 
-#: commit-graph.c:2065
+#: commit-graph.c:2083
 #, c-format
 msgid "commit-graph generation for commit %s is %u != %u"
 msgstr "提交图形中的提交 %s 的世代号是 %u != %u"
 
-#: commit-graph.c:2071
+#: commit-graph.c:2089
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr "提交图形中提交 %s 的提交日期是 %<PRIuMAX> != %<PRIuMAX>"
@@ -1790,7 +1806,7 @@
 msgid "key does not contain variable name: %s"
 msgstr "键名没有包含变量名:%s"
 
-#: config.c:406 sequencer.c:2463
+#: config.c:406 sequencer.c:2401
 #, c-format
 msgid "invalid key: %s"
 msgstr "无效键名:%s"
@@ -1912,149 +1928,144 @@
 msgid "invalid mode for object creation: %s"
 msgstr "无效的对象创建模式:%s"
 
-#: config.c:1430
+#: config.c:1425
 #, c-format
 msgid "malformed value for %s"
 msgstr "%s 的取值格式错误"
 
-#: config.c:1456
+#: config.c:1451
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "%s 的取值格式错误:%s"
 
-#: config.c:1457
+#: config.c:1452
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr "必须是其中之一:nothing、matching、simple、upstream 或 current"
 
-#: config.c:1518 builtin/pack-objects.c:3410
+#: config.c:1513 builtin/pack-objects.c:3394
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "错误的打包压缩级别 %d"
 
-#: config.c:1639
+#: config.c:1634
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "无法从数据对象 '%s' 加载配置"
 
-#: config.c:1642
+#: config.c:1637
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "引用 '%s' 没有指向一个数据对象"
 
-#: config.c:1659
+#: config.c:1654
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "不能解析配置对象 '%s'"
 
-#: config.c:1689
+#: config.c:1684
 #, c-format
 msgid "failed to parse %s"
 msgstr "解析 %s 失败"
 
-#: config.c:1745
+#: config.c:1740
 msgid "unable to parse command-line config"
 msgstr "无法解析命令行中的配置"
 
-#: config.c:2094
+#: config.c:2091
 msgid "unknown error occurred while reading the configuration files"
 msgstr "在读取配置文件时遇到未知错误"
 
-#: config.c:2264
+#: config.c:2261
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "无效 %s:'%s'"
 
-#: config.c:2307
-#, c-format
-msgid "unknown core.untrackedCache value '%s'; using 'keep' default value"
-msgstr "未知的 core.untrackedCache 取值 '%s',使用默认值 'keep'"
-
-#: config.c:2333
+#: config.c:2306
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr "splitIndex.maxPercentChange 的取值 '%d' 应该介于 0 和 100 之间"
 
-#: config.c:2379
+#: config.c:2352
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "无法解析命令行配置中的 '%s'"
 
-#: config.c:2381
+#: config.c:2354
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "在文件 '%2$s' 的第 %3$d 行发现错误的配置变量 '%1$s'"
 
-#: config.c:2462
+#: config.c:2435
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "无效的小节名称 '%s'"
 
-#: config.c:2494
+#: config.c:2467
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s 有多个取值"
 
-#: config.c:2523
+#: config.c:2496
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "写入新的配置文件 %s 失败"
 
-#: config.c:2775 config.c:3099
+#: config.c:2748 config.c:3072
 #, c-format
 msgid "could not lock config file %s"
 msgstr "不能锁定配置文件 %s"
 
-#: config.c:2786
+#: config.c:2759
 #, c-format
 msgid "opening %s"
 msgstr "打开 %s"
 
-#: config.c:2821 builtin/config.c:328
+#: config.c:2794 builtin/config.c:328
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "无效模式:%s"
 
-#: config.c:2846
+#: config.c:2819
 #, c-format
 msgid "invalid config file %s"
 msgstr "无效的配置文件 %s"
 
-#: config.c:2859 config.c:3112
+#: config.c:2832 config.c:3085
 #, c-format
 msgid "fstat on %s failed"
 msgstr "对 %s 调用 fstat 失败"
 
-#: config.c:2870
+#: config.c:2843
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr "不能 mmap '%s'"
 
-#: config.c:2879 config.c:3117
+#: config.c:2852 config.c:3090
 #, c-format
 msgid "chmod on %s failed"
 msgstr "对 %s 调用 chmod 失败"
 
-#: config.c:2964 config.c:3214
+#: config.c:2937 config.c:3187
 #, c-format
 msgid "could not write config file %s"
 msgstr "不能写入配置文件 %s"
 
-#: config.c:2998
+#: config.c:2971
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "不能设置 '%s' 为 '%s'"
 
-#: config.c:3000 builtin/remote.c:782
+#: config.c:2973 builtin/remote.c:782
 #, c-format
 msgid "could not unset '%s'"
 msgstr "不能取消设置 '%s'"
 
-#: config.c:3090
+#: config.c:3063
 #, c-format
 msgid "invalid section name: %s"
 msgstr "无效的小节名称:%s"
 
-#: config.c:3257
+#: config.c:3230
 #, c-format
 msgid "missing value for '%s'"
 msgstr "%s 的取值缺失"
@@ -2177,7 +2188,7 @@
 msgid "unknown port %s"
 msgstr "未知端口 %s"
 
-#: connect.c:845 connect.c:1171
+#: connect.c:845 connect.c:1175
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr "已阻止奇怪的主机名 '%s'"
@@ -2192,58 +2203,58 @@
 msgid "cannot start proxy %s"
 msgstr "不能启动代理 %s"
 
-#: connect.c:924
+#: connect.c:928
 msgid "no path specified; see 'git help pull' for valid url syntax"
 msgstr "未指定路径,执行 'git help pull' 查看有效的 url 语法"
 
-#: connect.c:1119
+#: connect.c:1123
 msgid "ssh variant 'simple' does not support -4"
 msgstr "ssh 变体 'simple' 不支持 -4"
 
-#: connect.c:1131
+#: connect.c:1135
 msgid "ssh variant 'simple' does not support -6"
 msgstr "ssh 变体 'simple' 不支持 -6"
 
-#: connect.c:1148
+#: connect.c:1152
 msgid "ssh variant 'simple' does not support setting port"
 msgstr "ssh 变体 'simple' 不支持设置端口"
 
-#: connect.c:1260
+#: connect.c:1264
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr "已阻止奇怪的路径名 '%s'"
 
-#: connect.c:1307
+#: connect.c:1311
 msgid "unable to fork"
 msgstr "无法 fork"
 
-#: connected.c:86 builtin/fsck.c:221 builtin/prune.c:43
+#: connected.c:88 builtin/fsck.c:221 builtin/prune.c:43
 msgid "Checking connectivity"
 msgstr "正在检查连通性"
 
-#: connected.c:98
+#: connected.c:100
 msgid "Could not run 'git rev-list'"
 msgstr "不能执行 'git rev-list'"
 
-#: connected.c:118
+#: connected.c:120
 msgid "failed write to rev-list"
 msgstr "写入 rev-list 失败"
 
-#: connected.c:125
+#: connected.c:127
 msgid "failed to close rev-list's stdin"
 msgstr "关闭 rev-list 的标准输入失败"
 
-#: convert.c:193
+#: convert.c:194
 #, c-format
 msgid "illegal crlf_action %d"
 msgstr "非法的 crlf 动作 %d"
 
-#: convert.c:206
+#: convert.c:207
 #, c-format
 msgid "CRLF would be replaced by LF in %s"
 msgstr "%s 中的 CRLF 将被 LF 替换"
 
-#: convert.c:208
+#: convert.c:209
 #, c-format
 msgid ""
 "CRLF will be replaced by LF in %s.\n"
@@ -2252,12 +2263,12 @@
 "%s 中的 CRLF 将被 LF 替换。<\n"
 "在工作区中该文件仍保持原有的换行符。"
 
-#: convert.c:216
+#: convert.c:217
 #, c-format
 msgid "LF would be replaced by CRLF in %s"
 msgstr "文件 %s 中的 LF 将被 CRLF 替换"
 
-#: convert.c:218
+#: convert.c:219
 #, c-format
 msgid ""
 "LF will be replaced by CRLF in %s.\n"
@@ -2266,24 +2277,24 @@
 "%s 中的 LF 将被 CRLF 替换。\n"
 "在工作区中该文件仍保持原有的换行符"
 
-#: convert.c:279
+#: convert.c:280
 #, c-format
 msgid "BOM is prohibited in '%s' if encoded as %s"
 msgstr "如果使用 %2$s 编码,禁止在 '%1$s' 中使用 BOM"
 
-#: convert.c:286
+#: convert.c:287
 #, c-format
 msgid ""
 "The file '%s' contains a byte order mark (BOM). Please use UTF-%s as working-"
 "tree-encoding."
 msgstr "文件 '%s' 包含一个字节顺序标记(BOM)。请使用 UTF-%s 作为工作区编码。"
 
-#: convert.c:304
+#: convert.c:305
 #, c-format
 msgid "BOM is required in '%s' if encoded as %s"
 msgstr "如果编码为 %2$s,需要在 '%1$s' 中使用 BOM"
 
-#: convert.c:306
+#: convert.c:307
 #, c-format
 msgid ""
 "The file '%s' is missing a byte order mark (BOM). Please use UTF-%sBE or UTF-"
@@ -2292,117 +2303,117 @@
 "文件 '%s' 缺失一个字节顺序标记(BOM)。请使用 UTF-%sBE or UTF-%sLE(取决于字"
 "节序)作为工作区编码。"
 
-#: convert.c:424 convert.c:495
+#: convert.c:425 convert.c:496
 #, c-format
 msgid "failed to encode '%s' from %s to %s"
 msgstr "无法对 '%s' 进行从 %s 到 %s 的编码"
 
-#: convert.c:467
+#: convert.c:468
 #, c-format
 msgid "encoding '%s' from %s to %s and back is not the same"
 msgstr "将'%s' 的编码从 %s 到 %s 来回转换不一致"
 
-#: convert.c:673
+#: convert.c:674
 #, c-format
 msgid "cannot fork to run external filter '%s'"
 msgstr "不能 fork 以执行外部过滤器 '%s'"
 
-#: convert.c:693
+#: convert.c:694
 #, c-format
 msgid "cannot feed the input to external filter '%s'"
 msgstr "不能将输入传递给外部过滤器 '%s'"
 
-#: convert.c:700
+#: convert.c:701
 #, c-format
 msgid "external filter '%s' failed %d"
 msgstr "外部过滤器 '%s' 失败码 %d"
 
-#: convert.c:735 convert.c:738
+#: convert.c:736 convert.c:739
 #, c-format
 msgid "read from external filter '%s' failed"
 msgstr "从外部过滤器 '%s' 读取失败"
 
-#: convert.c:741 convert.c:796
+#: convert.c:742 convert.c:797
 #, c-format
 msgid "external filter '%s' failed"
 msgstr "外部过滤器 '%s' 失败"
 
-#: convert.c:844
+#: convert.c:845
 msgid "unexpected filter type"
 msgstr "意外的过滤类型"
 
-#: convert.c:855
+#: convert.c:856
 msgid "path name too long for external filter"
 msgstr "外部过滤器的路径名太长"
 
-#: convert.c:929
+#: convert.c:930
 #, c-format
 msgid ""
 "external filter '%s' is not available anymore although not all paths have "
 "been filtered"
 msgstr "外部过滤器 '%s' 不再可用,但并非所有路径都已过滤"
 
-#: convert.c:1228
+#: convert.c:1229
 msgid "true/false are no valid working-tree-encodings"
 msgstr "true/false 不是有效的工作区编码"
 
-#: convert.c:1398 convert.c:1432
+#: convert.c:1417 convert.c:1451
 #, c-format
 msgid "%s: clean filter '%s' failed"
 msgstr "%s:clean 过滤器 '%s' 失败"
 
-#: convert.c:1476
+#: convert.c:1495
 #, c-format
 msgid "%s: smudge filter %s failed"
 msgstr "%s:smudge 过滤器 %s 失败"
 
-#: date.c:137
+#: date.c:138
 msgid "in the future"
 msgstr "在将来"
 
-#: date.c:143
+#: date.c:144
 #, c-format
 msgid "%<PRIuMAX> second ago"
 msgid_plural "%<PRIuMAX> seconds ago"
 msgstr[0] "%<PRIuMAX> 秒钟前"
 msgstr[1] "%<PRIuMAX> 秒钟前"
 
-#: date.c:150
+#: date.c:151
 #, c-format
 msgid "%<PRIuMAX> minute ago"
 msgid_plural "%<PRIuMAX> minutes ago"
 msgstr[0] "%<PRIuMAX> 分钟前"
 msgstr[1] "%<PRIuMAX> 分钟前"
 
-#: date.c:157
+#: date.c:158
 #, c-format
 msgid "%<PRIuMAX> hour ago"
 msgid_plural "%<PRIuMAX> hours ago"
 msgstr[0] "%<PRIuMAX> 小时前"
 msgstr[1] "%<PRIuMAX> 小时前"
 
-#: date.c:164
+#: date.c:165
 #, c-format
 msgid "%<PRIuMAX> day ago"
 msgid_plural "%<PRIuMAX> days ago"
 msgstr[0] "%<PRIuMAX> 天前"
 msgstr[1] "%<PRIuMAX> 天前"
 
-#: date.c:170
+#: date.c:171
 #, c-format
 msgid "%<PRIuMAX> week ago"
 msgid_plural "%<PRIuMAX> weeks ago"
 msgstr[0] "%<PRIuMAX> 周前"
 msgstr[1] "%<PRIuMAX> 周前"
 
-#: date.c:177
+#: date.c:178
 #, c-format
 msgid "%<PRIuMAX> month ago"
 msgid_plural "%<PRIuMAX> months ago"
 msgstr[0] "%<PRIuMAX> 个月前"
 msgstr[1] "%<PRIuMAX> 个月前"
 
-#: date.c:188
+#: date.c:189
 #, c-format
 msgid "%<PRIuMAX> year"
 msgid_plural "%<PRIuMAX> years"
@@ -2410,14 +2421,14 @@
 msgstr[1] "%<PRIuMAX> 年"
 
 #. TRANSLATORS: "%s" is "<n> years"
-#: date.c:191
+#: date.c:192
 #, c-format
 msgid "%s, %<PRIuMAX> month ago"
 msgid_plural "%s, %<PRIuMAX> months ago"
 msgstr[0] "%s %<PRIuMAX> 个月前"
 msgstr[1] "%s %<PRIuMAX> 个月前"
 
-#: date.c:196 date.c:201
+#: date.c:197 date.c:202
 #, c-format
 msgid "%<PRIuMAX> year ago"
 msgid_plural "%<PRIuMAX> years ago"
@@ -2453,7 +2464,7 @@
 msgid "failed to read orderfile '%s'"
 msgstr "读取排序文件 '%s' 失败"
 
-#: diffcore-rename.c:544
+#: diffcore-rename.c:543
 msgid "Performing inexact rename detection"
 msgstr "正在进行非精确的重命名探测"
 
@@ -2516,35 +2527,35 @@
 "发现配置变量 'diff.dirstat' 中的错误:\n"
 "%s"
 
-#: diff.c:4215
+#: diff.c:4218
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "外部 diff 退出,停止在 %s"
 
-#: diff.c:4560
+#: diff.c:4563
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr "--name-only、--name-status、--check 和 -s 是互斥的"
 
-#: diff.c:4563
+#: diff.c:4566
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "-G、-S 和 --find-object 是互斥的"
 
-#: diff.c:4641
+#: diff.c:4644
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow 明确要求只跟一个路径规格"
 
-#: diff.c:4689
+#: diff.c:4692
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "无效的 --stat 值:%s"
 
-#: diff.c:4694 diff.c:4699 diff.c:4704 diff.c:4709 diff.c:5222
+#: diff.c:4697 diff.c:4702 diff.c:4707 diff.c:4712 diff.c:5225
 #: parse-options.c:199 parse-options.c:203
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s 期望一个数字值"
 
-#: diff.c:4726
+#: diff.c:4729
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -2553,195 +2564,195 @@
 "无法解析 --dirstat/-X 选项的参数:\n"
 "%s"
 
-#: diff.c:4811
+#: diff.c:4814
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "--diff-filter=%2$s 中未知的变更类 '%1$c'"
 
-#: diff.c:4835
+#: diff.c:4838
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "ws-error-highlight=%.*s 之后未知的值"
 
-#: diff.c:4849
+#: diff.c:4852
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "不能解析 '%s'"
 
-#: diff.c:4899 diff.c:4905
+#: diff.c:4902 diff.c:4908
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s 期望 <n>/<m> 格式"
 
-#: diff.c:4917
+#: diff.c:4920
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s 期望一个字符,得到 '%s'"
 
-#: diff.c:4938
+#: diff.c:4941
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "坏的 --color-moved 参数:%s"
 
-#: diff.c:4957
+#: diff.c:4960
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "--color-moved-ws 中的无效模式 '%s' "
 
-#: diff.c:4997
+#: diff.c:5000
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
 msgstr ""
 "diff-algorithm 选项有 \"myers\"、\"minimal\"、\"patience\" 和 \"histogram\""
 
-#: diff.c:5033 diff.c:5053
+#: diff.c:5036 diff.c:5056
 #, c-format
 msgid "invalid argument to %s"
 msgstr "%s 的参数无效"
 
-#: diff.c:5191
+#: diff.c:5194
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "无法解析 --submodule 选项的参数:'%s'"
 
-#: diff.c:5247
+#: diff.c:5250
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "坏的 --word-diff 参数:%s"
 
-#: diff.c:5270
+#: diff.c:5273
 msgid "Diff output format options"
 msgstr "差异输出格式化选项"
 
-#: diff.c:5272 diff.c:5278
+#: diff.c:5275 diff.c:5281
 msgid "generate patch"
 msgstr "生成补丁"
 
-#: diff.c:5275 builtin/log.c:172
+#: diff.c:5278 builtin/log.c:172
 msgid "suppress diff output"
 msgstr "不显示差异输出"
 
-#: diff.c:5280 diff.c:5394 diff.c:5401
+#: diff.c:5283 diff.c:5397 diff.c:5404
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5281 diff.c:5284
+#: diff.c:5284 diff.c:5287
 msgid "generate diffs with <n> lines context"
 msgstr "生成含 <n> 行上下文的差异"
 
-#: diff.c:5286
+#: diff.c:5289
 msgid "generate the diff in raw format"
 msgstr "生成原始格式的差异"
 
-#: diff.c:5289
+#: diff.c:5292
 msgid "synonym for '-p --raw'"
 msgstr "和 '-p --raw' 同义"
 
-#: diff.c:5293
+#: diff.c:5296
 msgid "synonym for '-p --stat'"
 msgstr "和 '-p --stat' 同义"
 
-#: diff.c:5297
+#: diff.c:5300
 msgid "machine friendly --stat"
 msgstr "机器友好的 --stat"
 
-#: diff.c:5300
+#: diff.c:5303
 msgid "output only the last line of --stat"
 msgstr "只输出 --stat 的最后一行"
 
-#: diff.c:5302 diff.c:5310
+#: diff.c:5305 diff.c:5313
 msgid "<param1,param2>..."
 msgstr "<参数1,参数2>..."
 
-#: diff.c:5303
+#: diff.c:5306
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr "输出每个子目录相对变更的分布"
 
-#: diff.c:5307
+#: diff.c:5310
 msgid "synonym for --dirstat=cumulative"
 msgstr "和 --dirstat=cumulative 同义"
 
-#: diff.c:5311
+#: diff.c:5314
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "是 --dirstat=files,param1,param2... 的同义词"
 
-#: diff.c:5315
+#: diff.c:5318
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr "如果变更中引入冲突定界符或空白错误,给出警告"
 
-#: diff.c:5318
+#: diff.c:5321
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr "精简摘要,例如创建、重命名和模式变更"
 
-#: diff.c:5321
+#: diff.c:5324
 msgid "show only names of changed files"
 msgstr "只显示变更文件的文件名"
 
-#: diff.c:5324
+#: diff.c:5327
 msgid "show only names and status of changed files"
 msgstr "只显示变更文件的文件名和状态"
 
-#: diff.c:5326
+#: diff.c:5329
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<宽度>[,<文件名宽度>[,<次数>]]"
 
-#: diff.c:5327
+#: diff.c:5330
 msgid "generate diffstat"
 msgstr "生成差异统计(diffstat)"
 
-#: diff.c:5329 diff.c:5332 diff.c:5335
+#: diff.c:5332 diff.c:5335 diff.c:5338
 msgid "<width>"
 msgstr "<宽度>"
 
-#: diff.c:5330
+#: diff.c:5333
 msgid "generate diffstat with a given width"
 msgstr "使用给定的长度生成差异统计"
 
-#: diff.c:5333
+#: diff.c:5336
 msgid "generate diffstat with a given name width"
 msgstr "使用给定的文件名长度生成差异统计"
 
-#: diff.c:5336
+#: diff.c:5339
 msgid "generate diffstat with a given graph width"
 msgstr "使用给定的图形长度生成差异统计"
 
-#: diff.c:5338
+#: diff.c:5341
 msgid "<count>"
 msgstr "<次数>"
 
-#: diff.c:5339
+#: diff.c:5342
 msgid "generate diffstat with limited lines"
 msgstr "生成有限行数的差异统计"
 
-#: diff.c:5342
+#: diff.c:5345
 msgid "generate compact summary in diffstat"
 msgstr "生成差异统计的简洁摘要"
 
-#: diff.c:5345
+#: diff.c:5348
 msgid "output a binary diff that can be applied"
 msgstr "输出一个可以应用的二进制差异"
 
-#: diff.c:5348
+#: diff.c:5351
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr "在 \"index\" 行显示完整的前后对象名称"
 
-#: diff.c:5350
+#: diff.c:5353
 msgid "show colored diff"
 msgstr "显示带颜色的差异"
 
-#: diff.c:5351
+#: diff.c:5354
 msgid "<kind>"
 msgstr "<类型>"
 
-#: diff.c:5352
+#: diff.c:5355
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
 msgstr "对于差异中的上下文、旧的和新的行,加亮显示错误的空白字符"
 
-#: diff.c:5355
+#: diff.c:5358
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -2749,334 +2760,334 @@
 "在 --raw 或者 --numstat 中,不对路径字符转码并使用 NUL 字符做为输出字段的分隔"
 "符"
 
-#: diff.c:5358 diff.c:5361 diff.c:5364 diff.c:5470
+#: diff.c:5361 diff.c:5364 diff.c:5367 diff.c:5473
 msgid "<prefix>"
 msgstr "<前缀>"
 
-#: diff.c:5359
+#: diff.c:5362
 msgid "show the given source prefix instead of \"a/\""
 msgstr "显示给定的源前缀取代 \"a/\""
 
-#: diff.c:5362
+#: diff.c:5365
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "显示给定的目标前缀取代 \"b/\""
 
-#: diff.c:5365
+#: diff.c:5368
 msgid "prepend an additional prefix to every line of output"
 msgstr "输出的每一行附加前缀"
 
-#: diff.c:5368
+#: diff.c:5371
 msgid "do not show any source or destination prefix"
 msgstr "不显示任何源和目标前缀"
 
-#: diff.c:5371
+#: diff.c:5374
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr "显示指定行数的差异块间的上下文"
 
-#: diff.c:5375 diff.c:5380 diff.c:5385
+#: diff.c:5378 diff.c:5383 diff.c:5388
 msgid "<char>"
 msgstr "<字符>"
 
-#: diff.c:5376
+#: diff.c:5379
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "指定一个字符取代 '+' 来表示新的一行"
 
-#: diff.c:5381
+#: diff.c:5384
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "指定一个字符取代 '-' 来表示旧的一行"
 
-#: diff.c:5386
+#: diff.c:5389
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "指定一个字符取代 ' ' 来表示一行上下文"
 
-#: diff.c:5389
+#: diff.c:5392
 msgid "Diff rename options"
 msgstr "差异重命名选项"
 
-#: diff.c:5390
+#: diff.c:5393
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5391
+#: diff.c:5394
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr "将完全重写的变更打破为成对的删除和创建"
 
-#: diff.c:5395
+#: diff.c:5398
 msgid "detect renames"
 msgstr "检测重命名"
 
-#: diff.c:5399
+#: diff.c:5402
 msgid "omit the preimage for deletes"
 msgstr "省略删除操作的差异输出"
 
-#: diff.c:5402
+#: diff.c:5405
 msgid "detect copies"
 msgstr "检测拷贝"
 
-#: diff.c:5406
+#: diff.c:5409
 msgid "use unmodified files as source to find copies"
 msgstr "使用未修改的文件做为发现拷贝的源"
 
-#: diff.c:5408
+#: diff.c:5411
 msgid "disable rename detection"
 msgstr "禁用重命名探测"
 
-#: diff.c:5411
+#: diff.c:5414
 msgid "use empty blobs as rename source"
 msgstr "使用空的数据对象做为重命名的源"
 
-#: diff.c:5413
+#: diff.c:5416
 msgid "continue listing the history of a file beyond renames"
 msgstr "继续列出文件重命名以外的历史记录"
 
-#: diff.c:5416
+#: diff.c:5419
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
 msgstr "如果重命名/拷贝目标超过给定的限制,禁止重命名/拷贝检测"
 
-#: diff.c:5418
+#: diff.c:5421
 msgid "Diff algorithm options"
 msgstr "差异算法选项"
 
-#: diff.c:5420
+#: diff.c:5423
 msgid "produce the smallest possible diff"
 msgstr "生成尽可能小的差异"
 
-#: diff.c:5423
+#: diff.c:5426
 msgid "ignore whitespace when comparing lines"
 msgstr "行比较时忽略空白字符"
 
-#: diff.c:5426
+#: diff.c:5429
 msgid "ignore changes in amount of whitespace"
 msgstr "忽略空白字符的变更"
 
-#: diff.c:5429
+#: diff.c:5432
 msgid "ignore changes in whitespace at EOL"
 msgstr "忽略行尾的空白字符变更"
 
-#: diff.c:5432
+#: diff.c:5435
 msgid "ignore carrier-return at the end of line"
 msgstr "忽略行尾的回车符(CR)"
 
-#: diff.c:5435
+#: diff.c:5438
 msgid "ignore changes whose lines are all blank"
 msgstr "忽略整行都是空白的变更"
 
-#: diff.c:5438
+#: diff.c:5441
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr "启发式转换差异边界以便阅读"
 
-#: diff.c:5441
+#: diff.c:5444
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "使用 \"patience diff\" 算法生成差异"
 
-#: diff.c:5445
+#: diff.c:5448
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "使用 \"histogram diff\" 算法生成差异"
 
-#: diff.c:5447
+#: diff.c:5450
 msgid "<algorithm>"
 msgstr "<算法>"
 
-#: diff.c:5448
+#: diff.c:5451
 msgid "choose a diff algorithm"
 msgstr "选择一个差异算法"
 
-#: diff.c:5450
+#: diff.c:5453
 msgid "<text>"
 msgstr "<文本>"
 
-#: diff.c:5451
+#: diff.c:5454
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "使用 \"anchored diff\" 算法生成差异"
 
-#: diff.c:5453 diff.c:5462 diff.c:5465
+#: diff.c:5456 diff.c:5465 diff.c:5468
 msgid "<mode>"
 msgstr "<模式>"
 
-#: diff.c:5454
+#: diff.c:5457
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr "显示单词差异,使用 <模式> 分隔变更的单词"
 
-#: diff.c:5456 diff.c:5459 diff.c:5504
+#: diff.c:5459 diff.c:5462 diff.c:5507
 msgid "<regex>"
 msgstr "<正则>"
 
-#: diff.c:5457
+#: diff.c:5460
 msgid "use <regex> to decide what a word is"
 msgstr "使用 <正则表达式> 确定何为一个词"
 
-#: diff.c:5460
+#: diff.c:5463
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "相当于 --word-diff=color --word-diff-regex=<正则>"
 
-#: diff.c:5463
+#: diff.c:5466
 msgid "moved lines of code are colored differently"
 msgstr "移动的代码行用不同方式着色"
 
-#: diff.c:5466
+#: diff.c:5469
 msgid "how white spaces are ignored in --color-moved"
 msgstr "在 --color-moved 下如何忽略空白字符"
 
-#: diff.c:5469
+#: diff.c:5472
 msgid "Other diff options"
 msgstr "其它差异选项"
 
-#: diff.c:5471
+#: diff.c:5474
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr "当从子目录运行,排除目录之外的变更并显示相对路径"
 
-#: diff.c:5475
+#: diff.c:5478
 msgid "treat all files as text"
 msgstr "把所有文件当做文本处理"
 
-#: diff.c:5477
+#: diff.c:5480
 msgid "swap two inputs, reverse the diff"
 msgstr "交换两个输入,反转差异"
 
-#: diff.c:5479
+#: diff.c:5482
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "有差异时退出码为 1,否则为 0"
 
-#: diff.c:5481
+#: diff.c:5484
 msgid "disable all output of the program"
 msgstr "禁用本程序的所有输出"
 
-#: diff.c:5483
+#: diff.c:5486
 msgid "allow an external diff helper to be executed"
 msgstr "允许执行一个外置的差异助手"
 
-#: diff.c:5485
+#: diff.c:5488
 msgid "run external text conversion filters when comparing binary files"
 msgstr "当比较二进制文件时,运行外部的文本转换过滤器"
 
-#: diff.c:5487
+#: diff.c:5490
 msgid "<when>"
 msgstr "<何时>"
 
-#: diff.c:5488
+#: diff.c:5491
 msgid "ignore changes to submodules in the diff generation"
 msgstr "在生成差异时,忽略子模组的更改"
 
-#: diff.c:5491
+#: diff.c:5494
 msgid "<format>"
 msgstr "<格式>"
 
-#: diff.c:5492
+#: diff.c:5495
 msgid "specify how differences in submodules are shown"
 msgstr "指定子模组的差异如何显示"
 
-#: diff.c:5496
+#: diff.c:5499
 msgid "hide 'git add -N' entries from the index"
 msgstr "隐藏索引中 'git add -N' 条目"
 
-#: diff.c:5499
+#: diff.c:5502
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "将索引中 'git add -N' 条目当做真实的"
 
-#: diff.c:5501
+#: diff.c:5504
 msgid "<string>"
 msgstr "<字符串>"
 
-#: diff.c:5502
+#: diff.c:5505
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
 msgstr "查找改变了指定字符串出现次数的差异"
 
-#: diff.c:5505
+#: diff.c:5508
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
 msgstr "查找改变指定正则匹配出现次数的差异"
 
-#: diff.c:5508
+#: diff.c:5511
 msgid "show all changes in the changeset with -S or -G"
 msgstr "显示使用 -S 或 -G 的变更集的所有变更"
 
-#: diff.c:5511
+#: diff.c:5514
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "将 -S 的 <string> 当做扩展的 POSIX 正则表达式"
 
-#: diff.c:5514
+#: diff.c:5517
 msgid "control the order in which files appear in the output"
 msgstr "控制输出中的文件显示顺序"
 
-#: diff.c:5515
+#: diff.c:5518
 msgid "<object-id>"
 msgstr "<对象 ID>"
 
-#: diff.c:5516
+#: diff.c:5519
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
 msgstr "查找改变指定对象出现次数的差异"
 
-#: diff.c:5518
+#: diff.c:5521
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5519
+#: diff.c:5522
 msgid "select files by diff type"
 msgstr "通过差异类型选择文件"
 
-#: diff.c:5521
+#: diff.c:5524
 msgid "<file>"
 msgstr "<文件>"
 
-#: diff.c:5522
+#: diff.c:5525
 msgid "Output to a specific file"
 msgstr "输出到一个指定的文件"
 
-#: diff.c:6177
+#: diff.c:6180
 msgid "inexact rename detection was skipped due to too many files."
 msgstr "因为文件太多,略过不严格的重命名检查。"
 
-#: diff.c:6180
+#: diff.c:6183
 msgid "only found copies from modified paths due to too many files."
 msgstr "因为文件太多,只在修改的路径中查找拷贝。"
 
-#: diff.c:6183
+#: diff.c:6186
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
 msgstr "您可能想要将变量 %s 设置为至少 %d 并再次执行此命令。"
 
-#: dir.c:537
+#: dir.c:549
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
 msgstr "路径规格 '%s' 未匹配任何 git 已知文件"
 
-#: dir.c:926
+#: dir.c:938
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr "不能将 %s 用作排除文件"
 
-#: dir.c:1843
+#: dir.c:1877
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "不能打开目录 '%s'"
 
-#: dir.c:2085
+#: dir.c:2128
 msgid "failed to get kernel name and information"
 msgstr "无法获得内核名称和信息"
 
-#: dir.c:2209
+#: dir.c:2252
 msgid "untracked cache is disabled on this system or location"
 msgstr "缓存未跟踪文件在本系统或位置中被禁用"
 
-#: dir.c:3013
+#: dir.c:3056
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "仓库 %s 中的索引文件损坏"
 
-#: dir.c:3058 dir.c:3063
+#: dir.c:3101 dir.c:3106
 #, c-format
 msgid "could not create directories for %s"
 msgstr "不能为 %s 创建目录"
 
-#: dir.c:3092
+#: dir.c:3135
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "不能从 '%s' 迁移 git 目录到 '%s'"
@@ -3095,12 +3106,12 @@
 msgid "could not stat file '%s'"
 msgstr "不能对文件 '%s' 调用 stat"
 
-#: environment.c:150
+#: environment.c:148
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "错误的 git 名字空间路径 \"%s\""
 
-#: environment.c:332
+#: environment.c:330
 #, c-format
 msgid "could not set GIT_DIR to '%s'"
 msgstr "不能设置 GIT_DIR 为 '%s'"
@@ -3110,158 +3121,154 @@
 msgid "too many args to run %s"
 msgstr "执行 %s 的参数太多"
 
-#: fetch-object.c:17
-msgid "Remote with no URL"
-msgstr "远程未设置 URL"
-
-#: fetch-pack.c:151
+#: fetch-pack.c:150
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack:应为 shallow 列表"
 
-#: fetch-pack.c:154
+#: fetch-pack.c:153
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr "git fetch-pack:在浅克隆列表之后期望一个 flush 包"
 
-#: fetch-pack.c:165
+#: fetch-pack.c:164
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr "git fetch-pack:期望 ACK/NAK,却得到 flush 包"
 
-#: fetch-pack.c:185
+#: fetch-pack.c:184
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr "git fetch-pack:应为 ACK/NAK,却得到 '%s'"
 
-#: fetch-pack.c:196
+#: fetch-pack.c:195
 msgid "unable to write to remote"
 msgstr "无法写到远程"
 
-#: fetch-pack.c:258
+#: fetch-pack.c:257
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "--stateless-rpc 需要 multi_ack_detailed"
 
-#: fetch-pack.c:360 fetch-pack.c:1284
+#: fetch-pack.c:356 fetch-pack.c:1280
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "无效的 shallow 信息:%s"
 
-#: fetch-pack.c:366 fetch-pack.c:1290
+#: fetch-pack.c:362 fetch-pack.c:1286
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "无效的 unshallow 信息:%s"
 
-#: fetch-pack.c:368 fetch-pack.c:1292
+#: fetch-pack.c:364 fetch-pack.c:1288
 #, c-format
 msgid "object not found: %s"
 msgstr "对象未找到:%s"
 
-#: fetch-pack.c:371 fetch-pack.c:1295
+#: fetch-pack.c:367 fetch-pack.c:1291
 #, c-format
 msgid "error in object: %s"
 msgstr "对象中出错:%s"
 
-#: fetch-pack.c:373 fetch-pack.c:1297
+#: fetch-pack.c:369 fetch-pack.c:1293
 #, c-format
 msgid "no shallow found: %s"
 msgstr "未发现 shallow:%s"
 
-#: fetch-pack.c:376 fetch-pack.c:1301
+#: fetch-pack.c:372 fetch-pack.c:1297
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "应为 shallow/unshallow,却得到 %s"
 
-#: fetch-pack.c:417
+#: fetch-pack.c:414
 #, c-format
 msgid "got %s %d %s"
 msgstr "得到 %s %d %s"
 
-#: fetch-pack.c:434
+#: fetch-pack.c:431
 #, c-format
 msgid "invalid commit %s"
 msgstr "无效提交 %s"
 
-#: fetch-pack.c:465
+#: fetch-pack.c:462
 msgid "giving up"
 msgstr "放弃"
 
-#: fetch-pack.c:477 progress.c:277
+#: fetch-pack.c:475 progress.c:312
 msgid "done"
 msgstr "完成"
 
-#: fetch-pack.c:489
+#: fetch-pack.c:487
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "得到 %s (%d) %s"
 
-#: fetch-pack.c:535
+#: fetch-pack.c:533
 #, c-format
 msgid "Marking %s as complete"
 msgstr "标记 %s 为完成"
 
-#: fetch-pack.c:744
+#: fetch-pack.c:742
 #, c-format
 msgid "already have %s (%s)"
 msgstr "已经有 %s(%s)"
 
-#: fetch-pack.c:783
+#: fetch-pack.c:781
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack:无法派生 sideband 多路输出"
 
-#: fetch-pack.c:791
+#: fetch-pack.c:789
 msgid "protocol error: bad pack header"
 msgstr "协议错误:坏的包头"
 
-#: fetch-pack.c:859
+#: fetch-pack.c:857
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack:无法派生进程 %s"
 
-#: fetch-pack.c:875
+#: fetch-pack.c:873
 #, c-format
 msgid "%s failed"
 msgstr "%s 失败"
 
-#: fetch-pack.c:877
+#: fetch-pack.c:875
 msgid "error in sideband demultiplexer"
 msgstr "sideband 多路输出出错"
 
-#: fetch-pack.c:908
+#: fetch-pack.c:907
 #, c-format
 msgid "Server version is %.*s"
 msgstr "服务器版本 %.*s"
 
-#: fetch-pack.c:913 fetch-pack.c:919 fetch-pack.c:922 fetch-pack.c:928
-#: fetch-pack.c:932 fetch-pack.c:936 fetch-pack.c:940 fetch-pack.c:944
-#: fetch-pack.c:948 fetch-pack.c:952 fetch-pack.c:956 fetch-pack.c:960
-#: fetch-pack.c:966 fetch-pack.c:972 fetch-pack.c:977 fetch-pack.c:982
+#: fetch-pack.c:912 fetch-pack.c:918 fetch-pack.c:921 fetch-pack.c:927
+#: fetch-pack.c:931 fetch-pack.c:935 fetch-pack.c:939 fetch-pack.c:943
+#: fetch-pack.c:947 fetch-pack.c:951 fetch-pack.c:955 fetch-pack.c:959
+#: fetch-pack.c:965 fetch-pack.c:971 fetch-pack.c:976 fetch-pack.c:981
 #, c-format
 msgid "Server supports %s"
 msgstr "服务器支持 %s"
 
-#: fetch-pack.c:915
+#: fetch-pack.c:914
 msgid "Server does not support shallow clients"
 msgstr "服务器不支持 shalllow 客户端"
 
-#: fetch-pack.c:975
+#: fetch-pack.c:974
 msgid "Server does not support --shallow-since"
 msgstr "服务器不支持 --shallow-since"
 
-#: fetch-pack.c:980
+#: fetch-pack.c:979
 msgid "Server does not support --shallow-exclude"
 msgstr "服务器不支持 --shallow-exclude"
 
-#: fetch-pack.c:984
+#: fetch-pack.c:983
 msgid "Server does not support --deepen"
 msgstr "服务器不支持 --deepen"
 
-#: fetch-pack.c:1001
+#: fetch-pack.c:1000
 msgid "no common commits"
 msgstr "没有共同的提交"
 
-#: fetch-pack.c:1013 fetch-pack.c:1462
+#: fetch-pack.c:1012 fetch-pack.c:1468
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack:获取失败。"
 
-#: fetch-pack.c:1151
+#: fetch-pack.c:1150
 msgid "Server does not support shallow requests"
 msgstr "服务器不支持 shalllow 请求"
 
@@ -3269,72 +3276,72 @@
 msgid "Server supports filter"
 msgstr "服务器支持 filter"
 
-#: fetch-pack.c:1184
+#: fetch-pack.c:1180
 msgid "unable to write request to remote"
 msgstr "无法将请求写到远程"
 
-#: fetch-pack.c:1202
+#: fetch-pack.c:1198
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "读取节标题 '%s' 出错"
 
-#: fetch-pack.c:1208
+#: fetch-pack.c:1204
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "预期 '%s',得到 '%s'"
 
-#: fetch-pack.c:1247
+#: fetch-pack.c:1243
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "意外的确认行:'%s'"
 
-#: fetch-pack.c:1252
+#: fetch-pack.c:1248
 #, c-format
 msgid "error processing acks: %d"
 msgstr "处理 ack 出错:%d"
 
-#: fetch-pack.c:1262
+#: fetch-pack.c:1258
 msgid "expected packfile to be sent after 'ready'"
 msgstr "预期在 'ready' 之后发送 packfile"
 
-#: fetch-pack.c:1264
+#: fetch-pack.c:1260
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr "在没有 'ready' 不应该发送其它小节"
 
-#: fetch-pack.c:1306
+#: fetch-pack.c:1302
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "处理浅克隆信息出错:%d"
 
-#: fetch-pack.c:1353
+#: fetch-pack.c:1349
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "预期 wanted-ref,得到 '%s'"
 
-#: fetch-pack.c:1358
+#: fetch-pack.c:1354
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "意外的 wanted-ref:'%s'"
 
-#: fetch-pack.c:1363
+#: fetch-pack.c:1359
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "处理要获取的引用出错:%d"
 
-#: fetch-pack.c:1689
+#: fetch-pack.c:1693
 msgid "no matching remote head"
 msgstr "没有匹配的远程分支"
 
-#: fetch-pack.c:1712 builtin/clone.c:686
+#: fetch-pack.c:1716 builtin/clone.c:685
 msgid "remote did not send all necessary objects"
 msgstr "远程没有发送所有必需的对象"
 
-#: fetch-pack.c:1739
+#: fetch-pack.c:1743
 #, c-format
 msgid "no such remote ref %s"
 msgstr "没有这样的远程引用 %s"
 
-#: fetch-pack.c:1742
+#: fetch-pack.c:1746
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "服务器不允许请求未公开的对象 %s"
@@ -3357,18 +3364,25 @@
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr "忽略 log.graphColors 中无效的颜色 '%.*s'"
 
-#: grep.c:2117
+#: grep.c:668
+msgid ""
+"given pattern contains NULL byte (via -f <file>). This is only supported "
+"with -P under PCRE v2"
+msgstr ""
+"给定的模式包含 NULL 字符(通过 -f <文件> 参数)。只有 PCRE v2 下的 -P 支持此功能"
+
+#: grep.c:2124
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "'%s':无法读取 %s"
 
-#: grep.c:2134 setup.c:164 builtin/clone.c:409 builtin/diff.c:82
+#: grep.c:2141 setup.c:165 builtin/clone.c:408 builtin/diff.c:82
 #: builtin/rm.c:135
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "对 '%s' 调用 stat 失败"
 
-#: grep.c:2145
+#: grep.c:2152
 #, c-format
 msgid "'%s': short read"
 msgstr "'%s':读取不完整"
@@ -3510,12 +3524,12 @@
 msgid "git version [<options>]"
 msgstr "git version [<选项>]"
 
-#: help.c:782
+#: help.c:783
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s:%s - %s"
 
-#: help.c:786
+#: help.c:787
 msgid ""
 "\n"
 "Did you mean this?"
@@ -3587,41 +3601,56 @@
 msgid "invalid date format: %s"
 msgstr "无效的日期格式:%s"
 
-#: list-objects.c:129
+#: list-objects.c:127
 #, c-format
 msgid "entry '%s' in tree %s has tree mode, but is not a tree"
 msgstr "树 %2$s 中的条目 '%1$s' 具有树的属性,但不是一个树对象"
 
-#: list-objects.c:142
+#: list-objects.c:140
 #, c-format
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr "树 %2$s 中的条目 '%1$s' 具有数据对象的属性,但不是一个数据对象"
 
-#: list-objects.c:378
+#: list-objects.c:375
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "无法为提交 %s 加载根树"
 
-#: list-objects-filter-options.c:36
-msgid "multiple filter-specs cannot be combined"
-msgstr "不能混用多种过滤规格"
+#: list-objects-filter.c:492
+#, c-format
+msgid "unable to access sparse blob in '%s'"
+msgstr "不能访问 '%s' 中的稀疏数据对象"
+
+#: list-objects-filter.c:495
+#, c-format
+msgid "unable to parse sparse filter data in %s"
+msgstr "无法解析 %s 中的稀疏过滤器数据"
 
 #: list-objects-filter-options.c:58
 msgid "expected 'tree:<depth>'"
 msgstr "期望 'tree:<深度>'"
 
-#: list-objects-filter-options.c:84
+#: list-objects-filter-options.c:73
 msgid "sparse:path filters support has been dropped"
 msgstr "sparse:path 过滤器支持已被删除"
 
-#: list-objects-filter-options.c:94
+#: list-objects-filter-options.c:86
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "无效的过滤器表达式 '%s'"
 
-#: list-objects-filter-options.c:158
-msgid "cannot change partial clone promisor remote"
-msgstr "无法修改部分克隆的 promisor 远程仓库"
+#: list-objects-filter-options.c:102
+#, c-format
+msgid "must escape char in sub-filter-spec: '%c'"
+msgstr "必须对 sub-filter-spec 中的字符进行转义:'%c'"
+
+#: list-objects-filter-options.c:144
+msgid "expected something after combine:"
+msgstr "期望在组合后有一些东西:"
+
+#: list-objects-filter-options.c:226
+msgid "multiple filter-specs cannot be combined"
+msgstr "不能混用多种过滤规格"
 
 #: lockfile.c:151
 #, c-format
@@ -3650,114 +3679,110 @@
 msgid "failed to read the cache"
 msgstr "读取缓存失败"
 
-#: merge.c:107 rerere.c:720 builtin/am.c:1885 builtin/am.c:1919
-#: builtin/checkout.c:536 builtin/checkout.c:796 builtin/clone.c:786
+#: merge.c:107 rerere.c:720 builtin/am.c:1874 builtin/am.c:1908
+#: builtin/checkout.c:537 builtin/checkout.c:796 builtin/clone.c:785
 #: builtin/stash.c:264
 msgid "unable to write new index file"
 msgstr "无法写新的索引文件"
 
-#: merge-recursive.c:322
+#: merge-recursive.c:367
 msgid "(bad commit)\n"
 msgstr "(坏提交)\n"
 
-#: merge-recursive.c:345
+#: merge-recursive.c:390
 #, c-format
 msgid "add_cacheinfo failed for path '%s'; merge aborting."
 msgstr "add_cacheinfo 对路径 '%s' 执行失败,合并终止。"
 
-#: merge-recursive.c:354
+#: merge-recursive.c:399
 #, c-format
 msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
 msgstr "add_cacheinfo 无法刷新路径 '%s',合并终止。"
 
-#: merge-recursive.c:437
-msgid "error building trees"
-msgstr "创建树出错"
-
-#: merge-recursive.c:863
+#: merge-recursive.c:885
 #, c-format
 msgid "failed to create path '%s'%s"
 msgstr "创建路径 '%s'%s 失败"
 
-#: merge-recursive.c:874
+#: merge-recursive.c:896
 #, c-format
 msgid "Removing %s to make room for subdirectory\n"
 msgstr "删除 %s 以便为子目录留出空间\n"
 
-#: merge-recursive.c:888 merge-recursive.c:907
+#: merge-recursive.c:910 merge-recursive.c:929
 msgid ": perhaps a D/F conflict?"
 msgstr ":可能是一个目录/文件冲突?"
 
-#: merge-recursive.c:897
+#: merge-recursive.c:919
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
 msgstr "拒绝丢弃 '%s' 中的未跟踪文件"
 
-#: merge-recursive.c:938 builtin/cat-file.c:40
+#: merge-recursive.c:960 builtin/cat-file.c:41
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "不能读取对象 %s '%s'"
 
-#: merge-recursive.c:941
+#: merge-recursive.c:965
 #, c-format
 msgid "blob expected for %s '%s'"
 msgstr "%s '%s' 应为数据对象"
 
-#: merge-recursive.c:965
+#: merge-recursive.c:990
 #, c-format
 msgid "failed to open '%s': %s"
 msgstr "打开 '%s' 失败:%s"
 
-#: merge-recursive.c:976
+#: merge-recursive.c:1001
 #, c-format
 msgid "failed to symlink '%s': %s"
 msgstr "创建符号链接 '%s' 失败:%s"
 
-#: merge-recursive.c:981
+#: merge-recursive.c:1006
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "不知道如何处理 %06o %s '%s'"
 
-#: merge-recursive.c:1177
+#: merge-recursive.c:1199
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "无法合并子模组 %s (没有检出)"
 
-#: merge-recursive.c:1184
+#: merge-recursive.c:1206
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr "无法合并子模组 %s(提交不存在)"
 
-#: merge-recursive.c:1191
+#: merge-recursive.c:1213
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr "无法合并子模组 %s (提交未跟随合并基线)"
 
-#: merge-recursive.c:1199 merge-recursive.c:1211
+#: merge-recursive.c:1221 merge-recursive.c:1233
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "子模组 %s 快进到如下提交:"
 
-#: merge-recursive.c:1202 merge-recursive.c:1214
+#: merge-recursive.c:1224 merge-recursive.c:1236
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "快进子模组 %s"
 
-#: merge-recursive.c:1237
+#: merge-recursive.c:1259
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr "无法合并子模组 %s (没发现合并跟随的提交)"
 
-#: merge-recursive.c:1241
+#: merge-recursive.c:1263
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "无法合并子模组 %s(非快进)"
 
-#: merge-recursive.c:1242
+#: merge-recursive.c:1264
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr "找到子模组的一个可能的合并方案:\n"
 
-#: merge-recursive.c:1245
+#: merge-recursive.c:1267
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -3773,31 +3798,31 @@
 "\n"
 "以接受此建议。\n"
 
-#: merge-recursive.c:1254
+#: merge-recursive.c:1276
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr "无法合并子模组 %s (发现多个合并)"
 
-#: merge-recursive.c:1327
+#: merge-recursive.c:1349
 msgid "Failed to execute internal merge"
 msgstr "无法执行内部合并"
 
-#: merge-recursive.c:1332
+#: merge-recursive.c:1354
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "不能添加 %s 至对象库"
 
-#: merge-recursive.c:1364
+#: merge-recursive.c:1386
 #, c-format
 msgid "Auto-merging %s"
 msgstr "自动合并 %s"
 
-#: merge-recursive.c:1387
+#: merge-recursive.c:1410
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr "错误:拒绝丢失未跟踪文件 '%s',而是写入 %s。"
 
-#: merge-recursive.c:1459
+#: merge-recursive.c:1482
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -3806,7 +3831,7 @@
 "冲突(%1$s/删除):%2$s 在 %3$s 中被删除,在 %5$s 中被 %4$s。%7$s 的 %6$s 版"
 "本被保留。"
 
-#: merge-recursive.c:1464
+#: merge-recursive.c:1487
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -3815,7 +3840,7 @@
 "冲突(%1$s/删除):%2$s 在 %3$s 中被删除,在 %6$s 中的 %5$s 被 %4$s。%8$s 的 "
 "%7$s 版本被保留。"
 
-#: merge-recursive.c:1471
+#: merge-recursive.c:1494
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -3824,7 +3849,7 @@
 "冲突(%1$s/删除):%2$s 在 %3$s 中被删除,在 %5$s 中被 %4$s。%7$s 的 %6$s 版"
 "本保留在 %8$s 中。"
 
-#: merge-recursive.c:1476
+#: merge-recursive.c:1499
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -3833,40 +3858,40 @@
 "冲突(%1$s/删除):%2$s 在 %3$s 中被删除,在 %6$s 中的 %5$s 被 %4$s。%8$s 的 "
 "%7$s 版本保留在 %9$s 中。"
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1534
 msgid "rename"
 msgstr "重命名"
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1534
 msgid "renamed"
 msgstr "重命名"
 
-#: merge-recursive.c:1591 merge-recursive.c:2450 merge-recursive.c:3094
+#: merge-recursive.c:1614 merge-recursive.c:2472 merge-recursive.c:3117
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "拒绝丢失脏文件 '%s'"
 
-#: merge-recursive.c:1601
+#: merge-recursive.c:1624
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr "拒绝在 '%s' 处失去未跟踪文件,即使它存在于重命名中。"
 
-#: merge-recursive.c:1659
+#: merge-recursive.c:1682
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr "冲突(重命名/添加):在 %3$s 中重命名 %1$s->%2$s。在 %5$s 中添加 %4$s"
 
-#: merge-recursive.c:1690
+#: merge-recursive.c:1713
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s 是 %s 中的一个目录而以 %s 为名被添加"
 
-#: merge-recursive.c:1695
+#: merge-recursive.c:1718
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr "拒绝丢失未跟踪文件 '%s',而是添加为 %s"
 
-#: merge-recursive.c:1714
+#: merge-recursive.c:1737
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -3875,18 +3900,18 @@
 "冲突(重命名/重命名):在分支 \"%3$s\" 中重命名 \"%1$s\"->\"%2$s\",在分支 "
 "\"%6$s\" 中重命名 \"%4$s\"->\"%5$s\"%7$s"
 
-#: merge-recursive.c:1719
+#: merge-recursive.c:1742
 msgid " (left unresolved)"
 msgstr "(留下未解决)"
 
-#: merge-recursive.c:1828
+#: merge-recursive.c:1851
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "冲突(重命名/重命名):在 %3$s 中重命名 %1$s->%2$s,在 %6$s 中重命名 %4$s->"
 "%5$s"
 
-#: merge-recursive.c:2035
+#: merge-recursive.c:2056
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -3896,7 +3921,7 @@
 "冲突(分割的目录重命名):不清楚 %s 应该放在哪里,因为目录 %s 被重命名到多个"
 "其它目录,没有目录包含大部分文件。"
 
-#: merge-recursive.c:2067
+#: merge-recursive.c:2088
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -3905,7 +3930,7 @@
 "冲突(隐式目录重命名):处于隐式目录重命名的现存文件/目录 %s,将以下路径放"
 "在:%s。"
 
-#: merge-recursive.c:2077
+#: merge-recursive.c:2098
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -3914,7 +3939,7 @@
 "冲突(隐式目录重命名):无法映射一个以上路径到 %s,隐式目录重命名尝试将这些路"
 "径放置于此:%s"
 
-#: merge-recursive.c:2169
+#: merge-recursive.c:2190
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -3923,59 +3948,59 @@
 "冲突(重命名/重命名):在 %3$s 中重命名目录 %1$s->%2$s,在 %6$s 中重命名目录 "
 "%4$s->%5$s"
 
-#: merge-recursive.c:2413
+#: merge-recursive.c:2435
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
 "renamed."
 msgstr "警告:避免应用 %s -> %s 的重命名到 %s,因为 %s 本身已被重命名。"
 
-#: merge-recursive.c:2938
+#: merge-recursive.c:2961
 #, c-format
 msgid "cannot read object %s"
 msgstr "不能读取对象 %s"
 
-#: merge-recursive.c:2941
+#: merge-recursive.c:2964
 #, c-format
 msgid "object %s is not a blob"
 msgstr "对象 %s 不是一个数据对象"
 
-#: merge-recursive.c:3005
+#: merge-recursive.c:3028
 msgid "modify"
 msgstr "修改"
 
-#: merge-recursive.c:3005
+#: merge-recursive.c:3028
 msgid "modified"
 msgstr "修改"
 
-#: merge-recursive.c:3017
+#: merge-recursive.c:3040
 msgid "content"
 msgstr "内容"
 
-#: merge-recursive.c:3021
+#: merge-recursive.c:3044
 msgid "add/add"
 msgstr "添加/添加"
 
-#: merge-recursive.c:3044
+#: merge-recursive.c:3067
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "略过 %s(已经做过相同合并)"
 
-#: merge-recursive.c:3066 git-submodule.sh:937
+#: merge-recursive.c:3089 git-submodule.sh:937
 msgid "submodule"
 msgstr "子模组"
 
-#: merge-recursive.c:3067
+#: merge-recursive.c:3090
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "冲突(%s):合并冲突于 %s"
 
-#: merge-recursive.c:3097
+#: merge-recursive.c:3120
 #, c-format
 msgid "Adding as %s instead"
 msgstr "而是以 %s 为名添加"
 
-#: merge-recursive.c:3179
+#: merge-recursive.c:3203
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
@@ -3983,7 +4008,7 @@
 msgstr ""
 "路径已更新:%s 添加到 %s,位于一个被重命名到 %s 的目录中,将其移动到 %s。"
 
-#: merge-recursive.c:3182
+#: merge-recursive.c:3206
 #, c-format
 msgid ""
 "CONFLICT (file location): %s added in %s inside a directory that was renamed "
@@ -3992,7 +4017,7 @@
 "冲突(文件位置):%s 添加到 %s,位于一个被重命名为 %s 的目录中,建议将其移动"
 "到 %s。"
 
-#: merge-recursive.c:3186
+#: merge-recursive.c:3210
 #, c-format
 msgid ""
 "Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
@@ -4001,7 +4026,7 @@
 "路径已更新:%1$s 重命名为 %3$s 中的 %2$s,而该目录被重命名到 %4$s 中,将其移"
 "动到 %5$s。"
 
-#: merge-recursive.c:3189
+#: merge-recursive.c:3213
 #, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
@@ -4010,35 +4035,59 @@
 "冲突(文件位置):%1$s 重命名为 %3$s 中的 %2$s,而该目录被重命名到 %4$s 中,"
 "建议将其移动到 %5$s。"
 
-#: merge-recursive.c:3303
+#: merge-recursive.c:3327
 #, c-format
 msgid "Removing %s"
 msgstr "删除 %s"
 
-#: merge-recursive.c:3326
+#: merge-recursive.c:3350
 msgid "file/directory"
 msgstr "文件/目录"
 
-#: merge-recursive.c:3331
+#: merge-recursive.c:3355
 msgid "directory/file"
 msgstr "目录/文件"
 
-#: merge-recursive.c:3338
+#: merge-recursive.c:3362
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr "冲突(%1$s):在 %3$s 中有一个名为 %2$s 的目录。以 %5$s 为名添加 %4$s"
 
-#: merge-recursive.c:3347
+#: merge-recursive.c:3371
 #, c-format
 msgid "Adding %s"
 msgstr "添加 %s"
 
-#: merge-recursive.c:3356
+#: merge-recursive.c:3380
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "冲突(add/add):合并冲突于 %s"
 
-#: merge-recursive.c:3394
+#: merge-recursive.c:3424
+msgid "Already up to date!"
+msgstr "已经是最新的!"
+
+#: merge-recursive.c:3433
+#, c-format
+msgid "merging of trees %s and %s failed"
+msgstr "无法合并树 %s 和 %s"
+
+#: merge-recursive.c:3537
+msgid "Merging:"
+msgstr "合并:"
+
+#: merge-recursive.c:3550
+#, c-format
+msgid "found %u common ancestor:"
+msgid_plural "found %u common ancestors:"
+msgstr[0] "发现 %u 个共同祖先:"
+msgstr[1] "发现 %u 个共同祖先:"
+
+#: merge-recursive.c:3600
+msgid "merge returned no commit"
+msgstr "合并未返回提交"
+
+#: merge-recursive.c:3659
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -4047,187 +4096,163 @@
 "您对下列文件的本地修改将被合并操作覆盖:\n"
 "  %s"
 
-#: merge-recursive.c:3405
-msgid "Already up to date!"
-msgstr "已经是最新的!"
-
-#: merge-recursive.c:3414
-#, c-format
-msgid "merging of trees %s and %s failed"
-msgstr "无法合并树 %s 和 %s"
-
-#: merge-recursive.c:3513
-msgid "Merging:"
-msgstr "合并:"
-
-#: merge-recursive.c:3526
-#, c-format
-msgid "found %u common ancestor:"
-msgid_plural "found %u common ancestors:"
-msgstr[0] "发现 %u 个共同祖先:"
-msgstr[1] "发现 %u 个共同祖先:"
-
-#: merge-recursive.c:3565
-msgid "merge returned no commit"
-msgstr "合并未返回提交"
-
-#: merge-recursive.c:3631
+#: merge-recursive.c:3756
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "不能解析对象 '%s'"
 
-#: merge-recursive.c:3647 builtin/merge.c:698 builtin/merge.c:869
+#: merge-recursive.c:3774 builtin/merge.c:694 builtin/merge.c:874
 msgid "Unable to write index."
 msgstr "不能写入索引。"
 
-#: midx.c:69
+#: midx.c:68
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "多包索引文件 %s 太小"
 
-#: midx.c:85
+#: midx.c:84
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr "多包索引签名 0x%08x 和签名 0x%08x 不匹配"
 
-#: midx.c:90
+#: midx.c:89
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "multi-pack-index 版本 %d 不能被识别"
 
-#: midx.c:95
+#: midx.c:94
 #, c-format
 msgid "hash version %u does not match"
 msgstr "散列版本 %u 不匹配"
 
-#: midx.c:109
+#: midx.c:108
 msgid "invalid chunk offset (too large)"
 msgstr "无效的块偏移(太大)"
 
-#: midx.c:133
+#: midx.c:132
 msgid "terminating multi-pack-index chunk id appears earlier than expected"
 msgstr "终止多包索引块 id 出现时间早于预期"
 
-#: midx.c:146
+#: midx.c:145
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "多包索引缺少必需的包名块"
 
-#: midx.c:148
+#: midx.c:147
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "多包索引缺少必需的对象 ID 扇出块"
 
-#: midx.c:150
+#: midx.c:149
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "多包索引缺少必需的对象 ID 查询块"
 
-#: midx.c:152
+#: midx.c:151
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "多包索引缺少必需的对象偏移块"
 
-#: midx.c:166
+#: midx.c:165
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr "多包索引包名无序:'%s' 在 '%s' 之前"
 
-#: midx.c:211
+#: midx.c:210
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "错的 pack-int-id:%u(共有 %u 个包)"
 
-#: midx.c:261
+#: midx.c:260
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr "多包索引存储一个64位偏移,但是 off_t 太小"
 
-#: midx.c:289
+#: midx.c:288
 msgid "error preparing packfile from multi-pack-index"
 msgstr "从多包索引准备 packfile 出错"
 
-#: midx.c:470
+#: midx.c:469
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "添加包文件 '%s' 失败"
 
-#: midx.c:476
+#: midx.c:475
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "打开包索引 '%s' 失败"
 
-#: midx.c:536
+#: midx.c:535
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "在包文件中定位对象 %d 失败"
 
-#: midx.c:865
+#: midx.c:864
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "没有看到要丢弃的包文件 %s"
 
-#: midx.c:1036
+#: midx.c:1035
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "清理位于 %s 的多包索引失败"
 
-#: midx.c:1091
+#: midx.c:1090
 msgid "Looking for referenced packfiles"
 msgstr "正在查找引用的包文件"
 
-#: midx.c:1106
+#: midx.c:1105
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr "对象 ID 扇出无序:fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 
-#: midx.c:1110
+#: midx.c:1109
 msgid "Verifying OID order in MIDX"
 msgstr "正在校验 MIDX 中的对象 ID 顺序"
 
-#: midx.c:1119
+#: midx.c:1118
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "对象 ID 查询无序:oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1138
+#: midx.c:1137
 msgid "Sorting objects by packfile"
 msgstr "通过包文件为对象排序"
 
-#: midx.c:1144
+#: midx.c:1143
 msgid "Verifying object offsets"
 msgstr "校验对象偏移"
 
-#: midx.c:1160
+#: midx.c:1159
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "为 oid[%d] = %s 加载包条目失败"
 
-#: midx.c:1166
+#: midx.c:1165
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "为包文件 %s 加载包索引失败"
 
-#: midx.c:1175
+#: midx.c:1174
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "oid[%d] = %s 错误的对象偏移:%<PRIx64> != %<PRIx64>"
 
-#: midx.c:1350
+#: midx.c:1349
 msgid "could not start pack-objects"
 msgstr "不能开始 pack-objects"
 
-#: midx.c:1369
+#: midx.c:1368
 msgid "could not finish pack-objects"
 msgstr "不能结束 pack-objects"
 
-#: name-hash.c:532
+#: name-hash.c:537
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
 msgstr "不能创建 lazy_dir 线程:%s"
 
-#: name-hash.c:554
+#: name-hash.c:559
 #, c-format
 msgid "unable to create lazy_name thread: %s"
 msgstr "不能创建 lazy_name 线程:%s"
 
-#: name-hash.c:560
+#: name-hash.c:565
 #, c-format
 msgid "unable to join lazy_name thread: %s"
 msgstr "不能加入 lasy_name 线程:%s"
@@ -4271,41 +4296,41 @@
 msgid "Bad %s value: '%s'"
 msgstr "坏的 %s 值:'%s'"
 
-#: object.c:54
+#: object.c:53
 #, c-format
 msgid "invalid object type \"%s\""
 msgstr "无效的对象类型 \"%s\""
 
-#: object.c:174
+#: object.c:173
 #, c-format
 msgid "object %s is a %s, not a %s"
 msgstr "对象 %s 是一个 %s,不是一个 %s"
 
-#: object.c:234
+#: object.c:233
 #, c-format
 msgid "object %s has unknown type id %d"
 msgstr "对象 %s 有未知的类型 id %d"
 
-#: object.c:247
+#: object.c:246
 #, c-format
 msgid "unable to parse object: %s"
 msgstr "不能解析对象:%s"
 
-#: object.c:267 object.c:278
+#: object.c:266 object.c:277
 #, c-format
 msgid "hash mismatch %s"
 msgstr "哈希值与 %s 不匹配"
 
-#: packfile.c:648
+#: packfile.c:641
 msgid "offset before end of packfile (broken .idx?)"
 msgstr "偏移量在包文件结束之前(损坏的 .idx?)"
 
-#: packfile.c:1899
+#: packfile.c:1887
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr "偏移量在 %s 的包索引开始之前(损坏的索引?)"
 
-#: packfile.c:1903
+#: packfile.c:1891
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr "偏移量越过了 %s 的包索引的结尾(被截断的索引?)"
@@ -4350,26 +4375,26 @@
 msgid "did you mean `--%s` (with two dashes ?)"
 msgstr "你的意思是 `--%s`(有两个短线?)"
 
-#: parse-options.c:859
+#: parse-options.c:860
 #, c-format
 msgid "unknown option `%s'"
 msgstr "未知选项 `%s'"
 
-#: parse-options.c:861
+#: parse-options.c:862
 #, c-format
 msgid "unknown switch `%c'"
 msgstr "未知开关 `%c'"
 
-#: parse-options.c:863
+#: parse-options.c:864
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr "字符串中未知的非 ascii 字符选项:`%s'"
 
-#: parse-options.c:887
+#: parse-options.c:888
 msgid "..."
 msgstr "..."
 
-#: parse-options.c:906
+#: parse-options.c:907
 #, c-format
 msgid "usage: %s"
 msgstr "用法:%s"
@@ -4377,22 +4402,22 @@
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
 #.
-#: parse-options.c:912
+#: parse-options.c:913
 #, c-format
 msgid "   or: %s"
 msgstr "  或:%s"
 
 #  译者:为保证在输出中对齐,注意调整句中空格!
-#: parse-options.c:915
+#: parse-options.c:916
 #, c-format
 msgid "    %s"
 msgstr "    %s"
 
-#: parse-options.c:954
+#: parse-options.c:955
 msgid "-NUM"
 msgstr "-数字"
 
-#: parse-options.c:968
+#: parse-options.c:969
 #, c-format
 msgid "alias of --%s"
 msgstr "--%s 的别名"
@@ -4557,29 +4582,38 @@
 msgid "unable to parse --pretty format"
 msgstr "不能解析 --pretty 格式"
 
-#: range-diff.c:70
+#: promisor-remote.c:25
+msgid "Remote with no URL"
+msgstr "远程未设置 URL"
+
+#: promisor-remote.c:61
+#, c-format
+msgid "promisor remote name cannot begin with '/': %s"
+msgstr "promisor 远程名称不能以 '/' 开始:%s"
+
+#: range-diff.c:71
 msgid "could not start `log`"
 msgstr "不能启动 `log`"
 
-#: range-diff.c:72
+#: range-diff.c:73
 msgid "could not read `log` output"
 msgstr "不能读取 `log` 的输出"
 
-#: range-diff.c:91 sequencer.c:5021
+#: range-diff.c:92 sequencer.c:4985
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "不能解析提交 '%s'"
 
-#: range-diff.c:117
+#: range-diff.c:118
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "无法解析 git 头 '%.*s'"
 
-#: range-diff.c:274
+#: range-diff.c:275
 msgid "failed to generate diff"
 msgstr "生成 diff 失败"
 
-#: range-diff.c:506 range-diff.c:508
+#: range-diff.c:507 range-diff.c:509
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "不能解析 '%s' 的日志"
@@ -4623,11 +4657,11 @@
 msgid "'%s' appears as both a file and as a directory"
 msgstr "'%s' 看起来既是文件又是目录"
 
-#: read-cache.c:1499
+#: read-cache.c:1520
 msgid "Refresh index"
 msgstr "刷新索引"
 
-#: read-cache.c:1613
+#: read-cache.c:1635
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -4636,7 +4670,7 @@
 "设置了 index.version,但是取值无效。\n"
 "使用版本 %i"
 
-#: read-cache.c:1623
+#: read-cache.c:1645
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -4645,139 +4679,139 @@
 "设置了 GIT_INDEX_VERSION,但是取值无效。\n"
 "使用版本 %i"
 
-#: read-cache.c:1679
+#: read-cache.c:1701
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "坏的签名 0x%08x"
 
-#: read-cache.c:1682
+#: read-cache.c:1704
 #, c-format
 msgid "bad index version %d"
 msgstr "坏的索引版本 %d"
 
-#: read-cache.c:1691
+#: read-cache.c:1713
 msgid "bad index file sha1 signature"
 msgstr "坏的索引文件 sha1 签名"
 
-#: read-cache.c:1721
+#: read-cache.c:1743
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "索引使用不被支持的 %.4s 扩展"
 
 # 	
-#: read-cache.c:1723
+#: read-cache.c:1745
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "忽略 %.4s 扩展"
 
-#: read-cache.c:1760
+#: read-cache.c:1782
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "未知的索引条目格式 0x%08x"
 
-#: read-cache.c:1776
+#: read-cache.c:1798
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "索引中靠近路径 '%s' 有错误的名称字段"
 
-#: read-cache.c:1833
+#: read-cache.c:1855
 msgid "unordered stage entries in index"
 msgstr "索引中有未排序的暂存条目"
 
-#: read-cache.c:1836
+#: read-cache.c:1858
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "合并文件 '%s' 有多个暂存条目"
 
-#: read-cache.c:1839
+#: read-cache.c:1861
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "'%s' 的未排序暂存条目"
 
-#: read-cache.c:1946 read-cache.c:2234 rerere.c:565 rerere.c:599 rerere.c:1111
-#: builtin/add.c:460 builtin/check-ignore.c:178 builtin/checkout.c:467
-#: builtin/checkout.c:651 builtin/clean.c:956 builtin/commit.c:347
+#: read-cache.c:1967 read-cache.c:2255 rerere.c:565 rerere.c:599 rerere.c:1111
+#: builtin/add.c:460 builtin/check-ignore.c:178 builtin/checkout.c:468
+#: builtin/checkout.c:652 builtin/clean.c:967 builtin/commit.c:347
 #: builtin/diff-tree.c:120 builtin/grep.c:499 builtin/mv.c:145
 #: builtin/reset.c:245 builtin/rm.c:271 builtin/submodule--helper.c:330
 msgid "index file corrupt"
 msgstr "索引文件损坏"
 
-#: read-cache.c:2087
+#: read-cache.c:2108
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "无法创建 load_cache_entries 线程:%s"
 
-#: read-cache.c:2100
+#: read-cache.c:2121
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "无法加入 load_cache_entries 线程:%s"
 
-#: read-cache.c:2133
+#: read-cache.c:2154
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s:打开索引文件失败"
 
-#: read-cache.c:2137
+#: read-cache.c:2158
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s:不能对打开的索引执行 stat 操作"
 
-#: read-cache.c:2141
+#: read-cache.c:2162
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s:索引文件比预期的小"
 
-#: read-cache.c:2145
+#: read-cache.c:2166
 #, c-format
 msgid "%s: unable to map index file"
 msgstr "%s:无法对索引文件执行 map 操作"
 
-#: read-cache.c:2187
+#: read-cache.c:2208
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "无法创建 load_index_extensions 线程:%s"
 
-#: read-cache.c:2214
+#: read-cache.c:2235
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "无法加入 load_index_extensions 线程:%s"
 
-#: read-cache.c:2246
+#: read-cache.c:2267
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "无法刷新共享索引 '%s'"
 
-#: read-cache.c:2293
+#: read-cache.c:2314
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "损坏的索引,期望在 %2$s 中的 %1$s,得到 %3$s"
 
-#: read-cache.c:2989 wrapper.c:658 builtin/merge.c:1114
+#: read-cache.c:3010 wrapper.c:622 builtin/merge.c:1119
 #, c-format
 msgid "could not close '%s'"
 msgstr "不能关闭 '%s'"
 
-#: read-cache.c:3092 sequencer.c:2358 sequencer.c:3928
+#: read-cache.c:3113 sequencer.c:2296 sequencer.c:3917
 #, c-format
 msgid "could not stat '%s'"
 msgstr "不能对 '%s' 调用 stat"
 
-#: read-cache.c:3105
+#: read-cache.c:3126
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "不能打开 git 目录:%s"
 
-#: read-cache.c:3117
+#: read-cache.c:3138
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "无法删除:%s"
 
-#: read-cache.c:3142
+#: read-cache.c:3163
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "不能修复 '%s' 的权限位"
 
-#: read-cache.c:3291
+#: read-cache.c:3312
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s:不能落到暂存区 #0"
@@ -4879,8 +4913,8 @@
 msgid "Note that empty commits are commented out"
 msgstr "注意空提交已被注释掉"
 
-#: rebase-interactive.c:105 rerere.c:485 rerere.c:692 sequencer.c:3447
-#: sequencer.c:3473 sequencer.c:5120 builtin/fsck.c:356 builtin/rebase.c:235
+#: rebase-interactive.c:105 rerere.c:485 rerere.c:692 sequencer.c:3388
+#: sequencer.c:3414 sequencer.c:5084 builtin/fsck.c:356 builtin/rebase.c:235
 #, c-format
 msgid "could not write '%s'"
 msgstr "不能写入 '%s'"
@@ -4925,7 +4959,7 @@
 msgid "ignoring dangling symref %s"
 msgstr "忽略悬空符号引用 %s"
 
-#: refs.c:669 ref-filter.c:2092
+#: refs.c:669 ref-filter.c:2098
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "忽略损坏的引用 %s"
@@ -4950,14 +4984,14 @@
 msgid "unexpected object ID when writing '%s'"
 msgstr "写入 '%s' 时意外的对象 ID"
 
-#: refs.c:833 sequencer.c:403 sequencer.c:2709 sequencer.c:2913
-#: sequencer.c:2927 sequencer.c:3184 sequencer.c:5037 wrapper.c:656
+#: refs.c:833 sequencer.c:403 sequencer.c:2647 sequencer.c:2851
+#: sequencer.c:2865 sequencer.c:3122 sequencer.c:5001 wrapper.c:620
 #, c-format
 msgid "could not write to '%s'"
 msgstr "不能写入 '%s'"
 
-#: refs.c:860 wrapper.c:225 wrapper.c:395 builtin/am.c:715
-#: builtin/rebase.c:1003
+#: refs.c:860 wrapper.c:188 wrapper.c:358 builtin/am.c:714
+#: builtin/rebase.c:1004
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "无法打开 '%s' 进行写入"
@@ -4992,21 +5026,21 @@
 msgid "update_ref failed for ref '%s': %s"
 msgstr "对引用 '%s' 执行 update_ref 失败:%s"
 
-#: refs.c:2012
+#: refs.c:2023
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "不允许对引用 '%s' 多次更新"
 
-#: refs.c:2044
+#: refs.c:2055
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "在隔离环境中禁止更新引用"
 
-#: refs.c:2140 refs.c:2170
+#: refs.c:2151 refs.c:2181
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "'%s' 已存在,无法创建 '%s'"
 
-#: refs.c:2146 refs.c:2181
+#: refs.c:2157 refs.c:2192
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "无法同时处理 '%s' 和 '%s'"
@@ -5016,13 +5050,13 @@
 msgid "could not remove reference %s"
 msgstr "无法删除引用 %s"
 
-#: refs/files-backend.c:1248 refs/packed-backend.c:1532
-#: refs/packed-backend.c:1542
+#: refs/files-backend.c:1248 refs/packed-backend.c:1541
+#: refs/packed-backend.c:1551
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr "无法删除引用 %s:%s"
 
-#: refs/files-backend.c:1251 refs/packed-backend.c:1545
+#: refs/files-backend.c:1251 refs/packed-backend.c:1554
 #, c-format
 msgid "could not delete references: %s"
 msgstr "无法删除引用:%s"
@@ -5032,7 +5066,7 @@
 msgid "invalid refspec '%s'"
 msgstr "无效的引用表达式:'%s'"
 
-#: ref-filter.c:42 wt-status.c:1934
+#: ref-filter.c:42 wt-status.c:1938
 msgid "gone"
 msgstr "丢失"
 
@@ -5051,280 +5085,280 @@
 msgid "ahead %d, behind %d"
 msgstr "领先 %d,落后 %d"
 
-#: ref-filter.c:162
+#: ref-filter.c:165
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr "期望的格式:%%(color:<颜色>)"
 
-#: ref-filter.c:164
+#: ref-filter.c:167
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr "未能识别的颜色:%%(color:%s)"
 
-#: ref-filter.c:186
+#: ref-filter.c:189
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr "期望整数值 refname:lstrip=%s"
 
-#: ref-filter.c:190
+#: ref-filter.c:193
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr "期望整数值 refname:rstrip=%s"
 
-#: ref-filter.c:192
+#: ref-filter.c:195
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr "未能识别的 %%(%s) 参数:%s"
 
-#: ref-filter.c:247
+#: ref-filter.c:250
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr "%%(objecttype) 不带参数"
 
-#: ref-filter.c:269
+#: ref-filter.c:272
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr "未能识别的 %%(objectsize) 参数:%s"
 
-#: ref-filter.c:277
+#: ref-filter.c:280
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr "%%(deltabase) 不带参数"
 
-#: ref-filter.c:289
+#: ref-filter.c:292
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr "%%(body) 不带参数"
 
-#: ref-filter.c:298
+#: ref-filter.c:301
 #, c-format
 msgid "%%(subject) does not take arguments"
 msgstr "%%(subject) 不带参数"
 
-#: ref-filter.c:320
+#: ref-filter.c:323
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr "未知的 %%(trailers) 参数:%s"
 
-#: ref-filter.c:349
+#: ref-filter.c:352
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr "期望一个正数 contents:lines=%s"
 
-#: ref-filter.c:351
+#: ref-filter.c:354
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr "未能识别的 %%(contents) 参数:%s"
 
-#: ref-filter.c:366
+#: ref-filter.c:369
 #, c-format
 msgid "positive value expected objectname:short=%s"
 msgstr "期望一个正数 objectname:short=%s"
 
-#: ref-filter.c:370
+#: ref-filter.c:373
 #, c-format
 msgid "unrecognized %%(objectname) argument: %s"
 msgstr "未能识别的 %%(objectname) 参数:%s"
 
-#: ref-filter.c:400
+#: ref-filter.c:403
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr "期望的格式:%%(align:<宽度>,<位置>)"
 
-#: ref-filter.c:412
+#: ref-filter.c:415
 #, c-format
 msgid "unrecognized position:%s"
 msgstr "未能识别的位置:%s"
 
-#: ref-filter.c:419
+#: ref-filter.c:422
 #, c-format
 msgid "unrecognized width:%s"
 msgstr "未能识别的宽度:%s"
 
-#: ref-filter.c:428
+#: ref-filter.c:431
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr "未能识别的 %%(align) 参数:%s"
 
-#: ref-filter.c:436
+#: ref-filter.c:439
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr "元素 %%(align) 需要一个正数的宽度"
 
-#: ref-filter.c:454
+#: ref-filter.c:457
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr "未能识别的 %%(if) 参数:%s"
 
-#: ref-filter.c:556
+#: ref-filter.c:559
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "格式错误的字段名:%.*s"
 
-#: ref-filter.c:583
+#: ref-filter.c:586
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "未知的字段名:%.*s"
 
-#: ref-filter.c:587
+#: ref-filter.c:590
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
 msgstr "不是一个 git 仓库,但是字段 '%.*s' 需要访问对象数据"
 
-#: ref-filter.c:711
+#: ref-filter.c:714
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr "格式:使用了 %%(if) 元素而没有 %%(then) 元素"
 
-#: ref-filter.c:774
+#: ref-filter.c:777
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr "格式:使用了 %%(then) 元素而没有 %%(if) 元素"
 
-#: ref-filter.c:776
+#: ref-filter.c:779
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr "格式:%%(then) 元素用了多次"
 
-#: ref-filter.c:778
+#: ref-filter.c:781
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "格式:%%(then) 元素用在了 %%(else) 之后"
 
-#: ref-filter.c:806
+#: ref-filter.c:809
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr "格式:使用了 %%(else) 元素而没有 %%(if) 元素"
 
-#: ref-filter.c:808
+#: ref-filter.c:811
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr "格式:使用了 %%(else) 元素而没有 %%(then) 元素"
 
-#: ref-filter.c:810
+#: ref-filter.c:813
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr "格式:%%(else) 元素用了多次"
 
-#: ref-filter.c:825
+#: ref-filter.c:828
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr "格式:使用了 %%(end) 元素却没有它的对应元素"
 
-#: ref-filter.c:882
+#: ref-filter.c:885
 #, c-format
 msgid "malformed format string %s"
 msgstr "错误的格式化字符串 %s"
 
-#: ref-filter.c:1485
+#: ref-filter.c:1488
 #, c-format
 msgid "no branch, rebasing %s"
 msgstr "非分支,正变基 %s"
 
-#: ref-filter.c:1488
+#: ref-filter.c:1491
 #, c-format
 msgid "no branch, rebasing detached HEAD %s"
 msgstr "非分支,正变基分离头指针 %s"
 
-#: ref-filter.c:1491
+#: ref-filter.c:1494
 #, c-format
 msgid "no branch, bisect started on %s"
 msgstr "非分支,二分查找开始于 %s"
 
-#: ref-filter.c:1501
+#: ref-filter.c:1504
 msgid "no branch"
 msgstr "非分支"
 
-#: ref-filter.c:1537 ref-filter.c:1743
+#: ref-filter.c:1540 ref-filter.c:1749
 #, c-format
 msgid "missing object %s for %s"
 msgstr "缺失 %2$s 的对象 %1$s"
 
-#: ref-filter.c:1547
+#: ref-filter.c:1550
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "parse_object_buffer 失败于 %2$s 的 %1$s"
 
-#: ref-filter.c:1998
+#: ref-filter.c:2004
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "格式错误的对象 '%s'"
 
-#: ref-filter.c:2087
+#: ref-filter.c:2093
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "忽略带有错误名称 %s 的引用"
 
-#: ref-filter.c:2382
+#: ref-filter.c:2389
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "格式:缺少 %%(end) 元素"
 
-#: ref-filter.c:2482
+#: ref-filter.c:2489
 #, c-format
 msgid "option `%s' is incompatible with --merged"
 msgstr "选项 `%s' 和 --merged 不兼容"
 
-#: ref-filter.c:2485
+#: ref-filter.c:2492
 #, c-format
 msgid "option `%s' is incompatible with --no-merged"
 msgstr "选项 `%s' 和 --no-merged 不兼容"
 
-#: ref-filter.c:2495
+#: ref-filter.c:2502
 #, c-format
 msgid "malformed object name %s"
 msgstr "格式错误的对象名 %s"
 
-#: ref-filter.c:2500
+#: ref-filter.c:2507
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "选项 `%s' 必须指向一个提交"
 
-#: remote.c:363
+#: remote.c:366
 #, c-format
 msgid "config remote shorthand cannot begin with '/': %s"
 msgstr "配置的远程短名称不能以 '/' 开始:%s"
 
-#: remote.c:410
+#: remote.c:413
 msgid "more than one receivepack given, using the first"
 msgstr "提供了一个以上的 receivepack,使用第一个"
 
-#: remote.c:418
+#: remote.c:421
 msgid "more than one uploadpack given, using the first"
 msgstr "提供了一个以上的 uploadpack,使用第一个"
 
-#: remote.c:608
+#: remote.c:611
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
 msgstr "不能同时获取 %s 和 %s 至 %s"
 
-#: remote.c:612
+#: remote.c:615
 #, c-format
 msgid "%s usually tracks %s, not %s"
 msgstr "%s 通常跟踪 %s,而非 %s"
 
-#: remote.c:616
+#: remote.c:619
 #, c-format
 msgid "%s tracks both %s and %s"
 msgstr "%s 同时跟踪 %s 和 %s"
 
-#: remote.c:684
+#: remote.c:687
 #, c-format
 msgid "key '%s' of pattern had no '*'"
 msgstr "模式的键 '%s' 没有 '*'"
 
-#: remote.c:694
+#: remote.c:697
 #, c-format
 msgid "value '%s' of pattern has no '*'"
 msgstr "模式的值 '%s' 没有 '*'"
 
-#: remote.c:1000
+#: remote.c:1003
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "源引用表达式 %s 没有匹配"
 
-#: remote.c:1005
+#: remote.c:1008
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr "源引用表达式 %s 匹配超过一个"
@@ -5333,7 +5367,7 @@
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1020
+#: remote.c:1023
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -5355,7 +5389,7 @@
 "\n"
 "都不行,所以我们已放弃。您必须给出完整的引用。"
 
-#: remote.c:1040
+#: remote.c:1043
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -5365,7 +5399,7 @@
 "引用表达式的 <src> 是一个提交对象。您是想创建一个新的分支而向\n"
 "'%s:refs/heads/%s' 推送么?"
 
-#: remote.c:1045
+#: remote.c:1048
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -5375,7 +5409,7 @@
 "引用表达式的 <src> 是一个标签对象。您是想创建一个新的标签而向\n"
 "'%s:refs/tags/%s' 推送么?"
 
-#: remote.c:1050
+#: remote.c:1053
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -5385,7 +5419,7 @@
 "引用表达式的 <src> 是一个树对象。您是想为这个树对象创建标签而向\n"
 "'%s:refs/tags/%s' 推送么?"
 
-#: remote.c:1055
+#: remote.c:1058
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -5395,114 +5429,114 @@
 "引用表达式的 <src> 是一个数据对象。您是想为这个数据对象创建标签而向\n"
 "'%s:refs/tags/%s' 推送么?"
 
-#: remote.c:1091
+#: remote.c:1094
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "%s 无法被解析为分支"
 
-#: remote.c:1102
+#: remote.c:1105
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "无法删除 '%s':远程引用不存在"
 
-#: remote.c:1114
+#: remote.c:1117
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr "目标引用表达式 %s 匹配超过一个"
 
-#: remote.c:1121
+#: remote.c:1124
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "目标引用 %s 接收超过一个源"
 
-#: remote.c:1624 remote.c:1725
+#: remote.c:1627 remote.c:1728
 msgid "HEAD does not point to a branch"
 msgstr "HEAD 没有指向一个分支"
 
-#: remote.c:1633
+#: remote.c:1636
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "没有此分支:'%s'"
 
-#: remote.c:1636
+#: remote.c:1639
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "尚未给分支 '%s' 设置上游"
 
-#: remote.c:1642
+#: remote.c:1645
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "上游分支 '%s' 没有存储为一个远程跟踪分支"
 
-#: remote.c:1657
+#: remote.c:1660
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr "推送目标 '%s' 至远程 '%s' 没有本地跟踪分支"
 
-#: remote.c:1669
+#: remote.c:1672
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "分支 '%s' 没有设置要推送的远程服务器"
 
-#: remote.c:1679
+#: remote.c:1682
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "向 '%s' 推送引用规格未包含 '%s'"
 
-#: remote.c:1692
+#: remote.c:1695
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "推送无目标(push.default 是 'nothing')"
 
-#: remote.c:1714
+#: remote.c:1717
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "无法解析 'simple' 推送至一个单独的目标"
 
-#: remote.c:1840
+#: remote.c:1843
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "无法找到远程引用 %s"
 
-#: remote.c:1853
+#: remote.c:1856
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* 在本地忽略可笑的引用 '%s'"
 
-#: remote.c:2016
+#: remote.c:2019
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "您的分支基于 '%s',但此上游分支已经不存在。\n"
 
-#: remote.c:2020
+#: remote.c:2023
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (使用 \"git branch --unset-upstream\" 来修复)\n"
 
-#: remote.c:2023
+#: remote.c:2026
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "您的分支与上游分支 '%s' 一致。\n"
 
-#: remote.c:2027
+#: remote.c:2030
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "您的分支和 '%s' 指向不同的提交。\n"
 
-#: remote.c:2030
+#: remote.c:2033
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (使用 \"%s\" 查看详情)\n"
 
-#: remote.c:2034
+#: remote.c:2037
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "您的分支领先 '%s' 共 %d 个提交。\n"
 msgstr[1] "您的分支领先 '%s' 共 %d 个提交。\n"
 
-#: remote.c:2040
+#: remote.c:2043
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (使用 \"git push\" 来发布您的本地提交)\n"
 
-#: remote.c:2043
+#: remote.c:2046
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -5511,11 +5545,11 @@
 msgstr[1] "您的分支落后 '%s' 共 %d 个提交,并且可以快进。\n"
 
 #  译者:注意保持前导空格
-#: remote.c:2051
+#: remote.c:2054
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (使用 \"git pull\" 来更新您的本地分支)\n"
 
-#: remote.c:2054
+#: remote.c:2057
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -5531,11 +5565,11 @@
 "并且分别有 %d 和 %d 处不同的提交。\n"
 
 #  译者:注意保持前导空格
-#: remote.c:2064
+#: remote.c:2067
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (使用 \"git pull\" 来合并远程分支)\n"
 
-#: remote.c:2247
+#: remote.c:2250
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "无法解析期望的对象名 '%s'"
@@ -5613,7 +5647,7 @@
 msgid "Recorded preimage for '%s'"
 msgstr "为 '%s' 记录 preimage"
 
-#: rerere.c:881 submodule.c:2023 builtin/log.c:1773
+#: rerere.c:881 submodule.c:2023 builtin/log.c:1790
 #: builtin/submodule--helper.c:1418 builtin/submodule--helper.c:1428
 #, c-format
 msgid "could not create directory '%s'"
@@ -5648,20 +5682,20 @@
 msgid "unable to open rr-cache directory"
 msgstr "不能打开 rr-cache 目录"
 
-#: revision.c:2507
+#: revision.c:2509
 msgid "your current branch appears to be broken"
 msgstr "您的当前分支好像被损坏"
 
-#: revision.c:2510
+#: revision.c:2512
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "您的当前分支 '%s' 尚无任何提交"
 
-#: revision.c:2710
+#: revision.c:2720
 msgid "--first-parent is incompatible with --bisect"
 msgstr "--first-parent 与 --bisect 不兼容"
 
-#: revision.c:2714
+#: revision.c:2724
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L 尚不支持 -p 和 -s 之外的差异格式"
 
@@ -5683,39 +5717,39 @@
 "因为没有将钩子 '%s' 设置为可执行,钩子被忽略。您可以通过\n"
 "配置 `git config advice.ignoredHook false` 来关闭这条警告。"
 
-#: send-pack.c:141
+#: send-pack.c:142
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr "读取远程解包状态时收到意外的 flush 包"
 
-#: send-pack.c:143
+#: send-pack.c:144
 #, c-format
 msgid "unable to parse remote unpack status: %s"
 msgstr "不能解析远程解包状态:%s"
 
-#: send-pack.c:145
+#: send-pack.c:146
 #, c-format
 msgid "remote unpack failed: %s"
 msgstr "远程解包失败:%s"
 
-#: send-pack.c:306
+#: send-pack.c:307
 msgid "failed to sign the push certificate"
 msgstr "为推送证书签名失败"
 
-#: send-pack.c:420
+#: send-pack.c:421
 msgid "the receiving end does not support --signed push"
 msgstr "接收端不支持签名推送"
 
-#: send-pack.c:422
+#: send-pack.c:423
 msgid ""
 "not sending a push certificate since the receiving end does not support --"
 "signed push"
 msgstr "未发送推送证书,因为接收端不支持签名推送"
 
-#: send-pack.c:434
+#: send-pack.c:435
 msgid "the receiving end does not support --atomic push"
 msgstr "接收端不支持原子推送"
 
-#: send-pack.c:439
+#: send-pack.c:440
 msgid "the receiving end does not support push options"
 msgstr "接收端不支持推送选项"
 
@@ -5729,7 +5763,7 @@
 msgid "could not delete '%s'"
 msgstr "无法删除 '%s'"
 
-#: sequencer.c:311 builtin/rebase.c:759 builtin/rebase.c:1645 builtin/rm.c:369
+#: sequencer.c:311 builtin/rebase.c:760 builtin/rebase.c:1676 builtin/rm.c:369
 #, c-format
 msgid "could not remove '%s'"
 msgstr "无法删除 '%s'"
@@ -5768,7 +5802,7 @@
 "冲突解决完毕后,用 'git add <路径>' 或 'git rm <路径>'\n"
 "对修正后的文件做标记,然后用 'git commit' 提交"
 
-#: sequencer.c:401 sequencer.c:2909
+#: sequencer.c:401 sequencer.c:2847
 #, c-format
 msgid "could not lock '%s'"
 msgstr "不能锁定 '%s'"
@@ -5778,15 +5812,15 @@
 msgid "could not write eol to '%s'"
 msgstr "不能将换行符写入 '%s'"
 
-#: sequencer.c:413 sequencer.c:2714 sequencer.c:2915 sequencer.c:2929
-#: sequencer.c:3192
+#: sequencer.c:413 sequencer.c:2652 sequencer.c:2853 sequencer.c:2867
+#: sequencer.c:3130
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "无法完成 '%s'"
 
-#: sequencer.c:436 sequencer.c:981 sequencer.c:1655 sequencer.c:2734
-#: sequencer.c:3174 sequencer.c:3283 builtin/am.c:245 builtin/commit.c:763
-#: builtin/merge.c:1112 builtin/rebase.c:567
+#: sequencer.c:436 sequencer.c:1585 sequencer.c:2672 sequencer.c:3112
+#: sequencer.c:3221 builtin/am.c:244 builtin/commit.c:763 builtin/merge.c:1117
+#: builtin/rebase.c:568
 #, c-format
 msgid "could not read '%s'"
 msgstr "不能读取 '%s'"
@@ -5813,70 +5847,65 @@
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase -i".
 #.
-#: sequencer.c:632
+#: sequencer.c:631
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s:无法写入新索引文件"
 
-#: sequencer.c:649
+#: sequencer.c:648
 msgid "unable to update cache tree"
 msgstr "不能更新缓存树"
 
-#: sequencer.c:663
+#: sequencer.c:662
 msgid "could not resolve HEAD commit"
 msgstr "不能解析 HEAD 提交"
 
-#: sequencer.c:743
+#: sequencer.c:742
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr "在 '%.*s' 中没有 key"
 
-#: sequencer.c:754
+#: sequencer.c:753
 #, c-format
 msgid "unable to dequote value of '%s'"
 msgstr "无法为 '%s' 的值去引号"
 
-#: sequencer.c:791 wrapper.c:227 wrapper.c:397 builtin/am.c:706
-#: builtin/am.c:798 builtin/merge.c:1109 builtin/rebase.c:1045
+#: sequencer.c:790 wrapper.c:190 wrapper.c:360 builtin/am.c:705
+#: builtin/am.c:797 builtin/merge.c:1114 builtin/rebase.c:1046
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "无法打开 '%s' 进行读取"
 
-#: sequencer.c:801
+#: sequencer.c:800
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr "已经给出 'GIT_AUTHOR_NAME'"
 
-#: sequencer.c:806
+#: sequencer.c:805
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr "已经给出 'GIT_AUTHOR_EMAIL'"
 
-#: sequencer.c:811
+#: sequencer.c:810
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr "已经给出 'GIT_AUTHOR_DATE'"
 
-#: sequencer.c:815
+#: sequencer.c:814
 #, c-format
 msgid "unknown variable '%s'"
 msgstr "未知变量 '%s'"
 
-#: sequencer.c:820
+#: sequencer.c:819
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr "缺少 'GIT_AUTHOR_NAME'"
 
-#: sequencer.c:822
+#: sequencer.c:821
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr "缺少 'GIT_AUTHOR_EMAIL'"
 
-#: sequencer.c:824
+#: sequencer.c:823
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr "缺少 'GIT_AUTHOR_DATE'"
 
-#: sequencer.c:884
-#, c-format
-msgid "invalid date format '%s' in '%s'"
-msgstr "'%2$s' 中无效的日期格式 '%1$s'"
-
-#: sequencer.c:901
+#: sequencer.c:872
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -5905,15 +5934,11 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:995
-msgid "writing root commit"
-msgstr "写根提交"
-
-#: sequencer.c:1216
+#: sequencer.c:1146
 msgid "'prepare-commit-msg' hook failed"
 msgstr "'prepare-commit-msg' 钩子失败"
 
-#: sequencer.c:1223
+#: sequencer.c:1153
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -5937,7 +5962,7 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1236
+#: sequencer.c:1166
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -5960,326 +5985,326 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1278
+#: sequencer.c:1208
 msgid "couldn't look up newly created commit"
 msgstr "无法找到新创建的提交"
 
-#: sequencer.c:1280
+#: sequencer.c:1210
 msgid "could not parse newly created commit"
 msgstr "不能解析新创建的提交"
 
-#: sequencer.c:1326
+#: sequencer.c:1256
 msgid "unable to resolve HEAD after creating commit"
 msgstr "创建提交后,不能解析 HEAD"
 
-#: sequencer.c:1328
+#: sequencer.c:1258
 msgid "detached HEAD"
 msgstr "分离头指针"
 
 #  译者:中文字符串拼接,可删除前导空格
-#: sequencer.c:1332
+#: sequencer.c:1262
 msgid " (root-commit)"
 msgstr "(根提交)"
 
-#: sequencer.c:1353
+#: sequencer.c:1283
 msgid "could not parse HEAD"
 msgstr "不能解析 HEAD"
 
-#: sequencer.c:1355
+#: sequencer.c:1285
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s 不是一个提交!"
 
-#: sequencer.c:1359 builtin/commit.c:1571
+#: sequencer.c:1289 builtin/commit.c:1571
 msgid "could not parse HEAD commit"
 msgstr "不能解析 HEAD 提交"
 
-#: sequencer.c:1411 sequencer.c:2004
+#: sequencer.c:1341 sequencer.c:1933
 msgid "unable to parse commit author"
 msgstr "不能解析提交作者"
 
-#: sequencer.c:1421 builtin/am.c:1573 builtin/merge.c:684
+#: sequencer.c:1352 builtin/am.c:1561 builtin/merge.c:684
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree 无法写入树对象"
 
-#: sequencer.c:1438 sequencer.c:1499
+#: sequencer.c:1369 sequencer.c:1429
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "不能从 '%s' 读取提交说明"
 
-#: sequencer.c:1465 builtin/am.c:1595 builtin/commit.c:1670 builtin/merge.c:878
-#: builtin/merge.c:903
+#: sequencer.c:1396 builtin/am.c:1583 builtin/commit.c:1670 builtin/merge.c:883
+#: builtin/merge.c:908
 msgid "failed to write commit object"
 msgstr "写提交对象失败"
 
-#: sequencer.c:1526
+#: sequencer.c:1456
 #, c-format
 msgid "could not parse commit %s"
 msgstr "不能解析提交 %s"
 
-#: sequencer.c:1531
+#: sequencer.c:1461
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "不能解析父提交 %s"
 
-#: sequencer.c:1605 sequencer.c:1715
+#: sequencer.c:1535 sequencer.c:1645
 #, c-format
 msgid "unknown command: %d"
 msgstr "未知命令:%d"
 
-#: sequencer.c:1662 sequencer.c:1687
+#: sequencer.c:1592 sequencer.c:1617
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr "这是一个 %d 个提交的组合。"
 
-#: sequencer.c:1672
+#: sequencer.c:1602
 msgid "need a HEAD to fixup"
 msgstr "需要一个 HEAD 来修复"
 
-#: sequencer.c:1674 sequencer.c:3219
+#: sequencer.c:1604 sequencer.c:3157
 msgid "could not read HEAD"
 msgstr "不能读取 HEAD"
 
-#: sequencer.c:1676
+#: sequencer.c:1606
 msgid "could not read HEAD's commit message"
 msgstr "不能读取 HEAD 的提交说明"
 
-#: sequencer.c:1682
+#: sequencer.c:1612
 #, c-format
 msgid "cannot write '%s'"
 msgstr "不能写 '%s'"
 
-#: sequencer.c:1689 git-rebase--preserve-merges.sh:496
+#: sequencer.c:1619 git-rebase--preserve-merges.sh:496
 msgid "This is the 1st commit message:"
 msgstr "这是第一个提交说明:"
 
-#: sequencer.c:1697
+#: sequencer.c:1627
 #, c-format
 msgid "could not read commit message of %s"
 msgstr "不能读取 %s 的提交说明"
 
-#: sequencer.c:1704
+#: sequencer.c:1634
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "这是提交说明 #%d:"
 
-#: sequencer.c:1710
+#: sequencer.c:1640
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "提交说明 #%d 将被跳过:"
 
-#: sequencer.c:1798
+#: sequencer.c:1728
 msgid "your index file is unmerged."
 msgstr "您的索引文件未完成合并。"
 
-#: sequencer.c:1805
+#: sequencer.c:1735
 msgid "cannot fixup root commit"
 msgstr "不能修复根提交"
 
-#: sequencer.c:1824
+#: sequencer.c:1754
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "提交 %s 是一个合并提交但未提供 -m 选项。"
 
-#: sequencer.c:1832 sequencer.c:1840
+#: sequencer.c:1762 sequencer.c:1770
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "提交 %s 没有第 %d 个父提交"
 
-#: sequencer.c:1846
+#: sequencer.c:1776
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "不能得到 %s 的提交说明"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:1865
+#: sequencer.c:1795
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s:不能解析父提交 %s"
 
-#: sequencer.c:1930
+#: sequencer.c:1860
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "不能将 '%s' 重命名为 '%s'"
 
-#: sequencer.c:1985
+#: sequencer.c:1915
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "不能还原 %s... %s"
 
-#: sequencer.c:1986
+#: sequencer.c:1916
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "不能应用 %s... %s"
 
-#: sequencer.c:2045
+#: sequencer.c:1983
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s:无法读取索引"
 
-#: sequencer.c:2052
+#: sequencer.c:1990
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s:无法刷新索引"
 
-#: sequencer.c:2128
+#: sequencer.c:2066
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s 不接受参数:'%s'"
 
-#: sequencer.c:2137
+#: sequencer.c:2075
 #, c-format
 msgid "missing arguments for %s"
 msgstr "缺少 %s 的参数"
 
-#: sequencer.c:2174
+#: sequencer.c:2112
 #, c-format
 msgid "could not parse '%.*s'"
 msgstr "无法解析 '%.*s'"
 
-#: sequencer.c:2228
+#: sequencer.c:2166
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "无效行 %d:%.*s"
 
-#: sequencer.c:2239
+#: sequencer.c:2177
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "没有父提交的情况下不能 '%s'"
 
-#: sequencer.c:2287 builtin/rebase.c:153 builtin/rebase.c:178
+#: sequencer.c:2225 builtin/rebase.c:153 builtin/rebase.c:178
 #: builtin/rebase.c:204 builtin/rebase.c:229
 #, c-format
 msgid "could not read '%s'."
 msgstr "不能读取 '%s'。"
 
-#: sequencer.c:2323
+#: sequencer.c:2261
 msgid "cancelling a cherry picking in progress"
 msgstr "正在取消一个进行中的拣选"
 
-#: sequencer.c:2330
+#: sequencer.c:2268
 msgid "cancelling a revert in progress"
 msgstr "正在取消一个进行中的还原"
 
-#: sequencer.c:2364
+#: sequencer.c:2302
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "请用 'git rebase --edit-todo' 来修改。"
 
-#: sequencer.c:2366
+#: sequencer.c:2304
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "不可用的指令清单:'%s'"
 
-#: sequencer.c:2371
+#: sequencer.c:2309
 msgid "no commits parsed."
 msgstr "没有解析提交。"
 
-#: sequencer.c:2382
+#: sequencer.c:2320
 msgid "cannot cherry-pick during a revert."
 msgstr "不能在回退中执行拣选。"
 
-#: sequencer.c:2384
+#: sequencer.c:2322
 msgid "cannot revert during a cherry-pick."
 msgstr "不能在拣选中执行回退。"
 
-#: sequencer.c:2466
+#: sequencer.c:2404
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr "%s 的值无效:%s"
 
-#: sequencer.c:2553
+#: sequencer.c:2491
 msgid "unusable squash-onto"
 msgstr "不可用的 squash-onto"
 
-#: sequencer.c:2569
+#: sequencer.c:2507
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "格式错误的选项清单:'%s'"
 
-#: sequencer.c:2652 sequencer.c:4351
+#: sequencer.c:2590 sequencer.c:4308
 msgid "empty commit set passed"
 msgstr "提供了空的提交集"
 
-#: sequencer.c:2668
+#: sequencer.c:2606
 msgid "revert is already in progress"
 msgstr "一个还原操作已在进行"
 
-#: sequencer.c:2670
+#: sequencer.c:2608
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "尝试 \"git revert (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2673
+#: sequencer.c:2611
 msgid "cherry-pick is already in progress"
 msgstr "拣选操作已在进行"
 
-#: sequencer.c:2675
+#: sequencer.c:2613
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "尝试 \"git cherry-pick (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2689
+#: sequencer.c:2627
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "不能创建序列目录 '%s'"
 
-#: sequencer.c:2704
+#: sequencer.c:2642
 msgid "could not lock HEAD"
 msgstr "不能锁定 HEAD"
 
-#: sequencer.c:2764 sequencer.c:4103
+#: sequencer.c:2702 sequencer.c:4057
 msgid "no cherry-pick or revert in progress"
 msgstr "拣选或还原操作并未进行"
 
-#: sequencer.c:2766 sequencer.c:2777
+#: sequencer.c:2704 sequencer.c:2715
 msgid "cannot resolve HEAD"
 msgstr "不能解析 HEAD"
 
-#: sequencer.c:2768 sequencer.c:2812
+#: sequencer.c:2706 sequencer.c:2750
 msgid "cannot abort from a branch yet to be born"
 msgstr "不能从尚未建立的分支终止"
 
-#: sequencer.c:2798 builtin/grep.c:734
+#: sequencer.c:2736 builtin/grep.c:736
 #, c-format
 msgid "cannot open '%s'"
 msgstr "不能打开 '%s'"
 
-#: sequencer.c:2800
+#: sequencer.c:2738
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "不能读取 '%s':%s"
 
-#: sequencer.c:2801
+#: sequencer.c:2739
 msgid "unexpected end of file"
 msgstr "意外的文件结束"
 
-#: sequencer.c:2807
+#: sequencer.c:2745
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "保存拣选提交前的 HEAD 文件 '%s' 损坏"
 
-#: sequencer.c:2818
+#: sequencer.c:2756
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr "您好像移动了 HEAD。未能回退,检查您的 HEAD!"
 
-#: sequencer.c:2859
+#: sequencer.c:2797
 msgid "no revert in progress"
 msgstr "没有正在进行的还原"
 
-#: sequencer.c:2867
+#: sequencer.c:2805
 msgid "no cherry-pick in progress"
 msgstr "没有正在进行的拣选"
 
-#: sequencer.c:2877
+#: sequencer.c:2815
 msgid "failed to skip the commit"
 msgstr "无法跳过这个提交"
 
-#: sequencer.c:2884
+#: sequencer.c:2822
 msgid "there is nothing to skip"
 msgstr "没有要跳过的"
 
-#: sequencer.c:2887
+#: sequencer.c:2825
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -6288,21 +6313,21 @@
 "您已经提交了么?\n"
 "试试 \"git %s --continue\""
 
-#: sequencer.c:3011 sequencer.c:4015
+#: sequencer.c:2949 sequencer.c:3969
 #, c-format
 msgid "could not update %s"
 msgstr "不能更新 %s"
 
-#: sequencer.c:3049 sequencer.c:3995
+#: sequencer.c:2987 sequencer.c:3949
 msgid "cannot read HEAD"
 msgstr "不能读取 HEAD"
 
-#: sequencer.c:3066
+#: sequencer.c:3004
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "无法拷贝 '%s' 至 '%s'"
 
-#: sequencer.c:3074
+#: sequencer.c:3012
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -6321,28 +6346,28 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:3084
+#: sequencer.c:3022
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "不能应用 %s... %.*s"
 
-#: sequencer.c:3091
+#: sequencer.c:3029
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "不能合并 %.*s"
 
-#: sequencer.c:3105 sequencer.c:3109 builtin/difftool.c:633
+#: sequencer.c:3043 sequencer.c:3047 builtin/difftool.c:641
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "不能拷贝 '%s' 至 '%s'"
 
-#: sequencer.c:3131 sequencer.c:3558 builtin/rebase.c:849 builtin/rebase.c:1582
-#: builtin/rebase.c:1953 builtin/rebase.c:2008
+#: sequencer.c:3069 sequencer.c:3506 builtin/rebase.c:850 builtin/rebase.c:1613
+#: builtin/rebase.c:1987 builtin/rebase.c:2031
 msgid "could not read index"
 msgstr "不能读取索引"
 
 #  译者:注意保持前导空格
-#: sequencer.c:3136
+#: sequencer.c:3074
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -6357,11 +6382,11 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3142
+#: sequencer.c:3080
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "并且修改索引和/或工作区\n"
 
-#: sequencer.c:3148
+#: sequencer.c:3086
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -6378,76 +6403,76 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3209
+#: sequencer.c:3147
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "非法的标签名称:'%.*s'"
 
-#: sequencer.c:3263
+#: sequencer.c:3201
 msgid "writing fake root commit"
 msgstr "写伪根提交"
 
-#: sequencer.c:3268
+#: sequencer.c:3206
 msgid "writing squash-onto"
 msgstr "写入 squash-onto"
 
-#: sequencer.c:3306 builtin/rebase.c:854 builtin/rebase.c:860
+#: sequencer.c:3244 builtin/rebase.c:855 builtin/rebase.c:861
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "无法找到 %s 指向的树。"
 
-#: sequencer.c:3324 builtin/rebase.c:873
+#: sequencer.c:3262 builtin/rebase.c:874
 msgid "could not write index"
 msgstr "不能写入索引"
 
-#: sequencer.c:3351
+#: sequencer.c:3289
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "无法解析 '%s'"
 
-#: sequencer.c:3379
+#: sequencer.c:3320
 msgid "cannot merge without a current revision"
 msgstr "没有当前版本不能合并"
 
-#: sequencer.c:3401
+#: sequencer.c:3342
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "无法解析 '%.*s'"
 
-#: sequencer.c:3410
+#: sequencer.c:3351
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "无可用合并:'%.*s'"
 
-#: sequencer.c:3422
+#: sequencer.c:3363
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr "章鱼合并不能在一个新的根提交上执行"
 
-#: sequencer.c:3437
+#: sequencer.c:3378
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "不能获取 '%s' 的提交说明"
 
-#: sequencer.c:3590
+#: sequencer.c:3538
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "甚至不能尝试合并 '%.*s'"
 
-#: sequencer.c:3606
+#: sequencer.c:3554
 msgid "merge: Unable to write new index file"
 msgstr "合并:无法写入新索引文件"
 
-#: sequencer.c:3675 builtin/rebase.c:711
+#: sequencer.c:3623 builtin/rebase.c:712
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "已应用 autostash。\n"
 
-#: sequencer.c:3687
+#: sequencer.c:3635
 #, c-format
 msgid "cannot store %s"
 msgstr "不能存储 %s"
 
-#: sequencer.c:3690 builtin/rebase.c:727 git-rebase--preserve-merges.sh:113
+#: sequencer.c:3638 builtin/rebase.c:728 git-rebase--preserve-merges.sh:113
 #, c-format
 msgid ""
 "Applying autostash resulted in conflicts.\n"
@@ -6458,31 +6483,31 @@
 "您的修改安全地保存在贮藏区中。\n"
 "您可以在任何时候运行 \"git stash pop\" 或 \"git stash drop\"。\n"
 
-#: sequencer.c:3751
+#: sequencer.c:3699
 #, c-format
 msgid "could not checkout %s"
 msgstr "不能检出 %s"
 
-#: sequencer.c:3765
+#: sequencer.c:3713
 #, c-format
 msgid "%s: not a valid OID"
 msgstr "%s:不是一个有效的对象 ID"
 
-#: sequencer.c:3770 git-rebase--preserve-merges.sh:779
+#: sequencer.c:3718 git-rebase--preserve-merges.sh:779
 msgid "could not detach HEAD"
 msgstr "不能分离头指针"
 
-#: sequencer.c:3785
+#: sequencer.c:3733
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "停止在 HEAD\n"
 
-#: sequencer.c:3787
+#: sequencer.c:3735
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "停止在 %s\n"
 
-#: sequencer.c:3795
+#: sequencer.c:3743
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -6502,48 +6527,48 @@
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:3877
+#: sequencer.c:3827
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "停止在 %s... %.*s\n"
 
-#: sequencer.c:3958
+#: sequencer.c:3898
 #, c-format
 msgid "unknown command %d"
 msgstr "未知命令 %d"
 
-#: sequencer.c:4003
+#: sequencer.c:3957
 msgid "could not read orig-head"
 msgstr "不能读取 orig-head"
 
-#: sequencer.c:4008
+#: sequencer.c:3962
 msgid "could not read 'onto'"
 msgstr "不能读取 'onto'"
 
-#: sequencer.c:4022
+#: sequencer.c:3976
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "不能更新 HEAD 为 %s"
 
-#: sequencer.c:4115
+#: sequencer.c:4069
 msgid "cannot rebase: You have unstaged changes."
 msgstr "不能变基:您有未暂存的变更。"
 
-#: sequencer.c:4124
+#: sequencer.c:4078
 msgid "cannot amend non-existing commit"
 msgstr "不能修补不存在的提交"
 
-#: sequencer.c:4126
+#: sequencer.c:4080
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "无效文件:'%s'"
 
-#: sequencer.c:4128
+#: sequencer.c:4082
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "无效内容:'%s'"
 
-#: sequencer.c:4131
+#: sequencer.c:4085
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -6552,42 +6577,42 @@
 "\n"
 "您的工作区中有未提交的变更。请先提交然后再次运行 'git rebase --continue'。"
 
-#: sequencer.c:4167 sequencer.c:4205
+#: sequencer.c:4121 sequencer.c:4159
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "不能写入文件:'%s'"
 
-#: sequencer.c:4220
+#: sequencer.c:4174
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "不能删除 CHERRY_PICK_HEAD"
 
-#: sequencer.c:4227
+#: sequencer.c:4181
 msgid "could not commit staged changes."
 msgstr "不能提交暂存的修改。"
 
-#: sequencer.c:4328
+#: sequencer.c:4285
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s:不能拣选一个%s"
 
-#: sequencer.c:4332
+#: sequencer.c:4289
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s:错误的版本"
 
-#: sequencer.c:4367
+#: sequencer.c:4324
 msgid "can't revert as initial commit"
 msgstr "不能作为初始提交回退"
 
-#: sequencer.c:4810
+#: sequencer.c:4774
 msgid "make_script: unhandled options"
 msgstr "make_script:有未能处理的选项"
 
-#: sequencer.c:4813
+#: sequencer.c:4777
 msgid "make_script: error preparing revisions"
 msgstr "make_script:准备版本时错误"
 
-#: sequencer.c:4971
+#: sequencer.c:4935
 msgid ""
 "You can fix this with 'git rebase --edit-todo' and then run 'git rebase --"
 "continue'.\n"
@@ -6596,24 +6621,24 @@
 "您可以用 'git rebase --edit-todo' 修正,然后执行 'git rebase --continue'。\n"
 "或者您可以用 'git rebase --abort' 终止变基。\n"
 
-#: sequencer.c:5083 sequencer.c:5100
+#: sequencer.c:5047 sequencer.c:5064
 msgid "nothing to do"
 msgstr "无事可做"
 
-#: sequencer.c:5114
+#: sequencer.c:5078
 msgid "could not skip unnecessary pick commands"
 msgstr "无法跳过不必要的拣选"
 
-#: sequencer.c:5197
+#: sequencer.c:5166
 msgid "the script was already rearranged."
 msgstr "脚本已经重新编排。"
 
-#: setup.c:123
+#: setup.c:124
 #, c-format
 msgid "'%s' is outside repository"
 msgstr "'%s' 在仓库之外"
 
-#: setup.c:173
+#: setup.c:174
 #, c-format
 msgid ""
 "%s: no such path in the working tree.\n"
@@ -6622,7 +6647,7 @@
 "%s:工作区中无此路径。\n"
 "使用命令 'git <命令> -- <路径>...' 来指定本地不存在的路径。"
 
-#: setup.c:186
+#: setup.c:187
 #, c-format
 msgid ""
 "ambiguous argument '%s': unknown revision or path not in the working tree.\n"
@@ -6633,12 +6658,12 @@
 "使用 '--' 来分隔版本和路径,例如:\n"
 "'git <命令> [<版本>...] -- [<文件>...]'"
 
-#: setup.c:235
+#: setup.c:236
 #, c-format
 msgid "option '%s' must come before non-option arguments"
 msgstr "选项 '%s' 必须在其他非选项参数之前"
 
-#: setup.c:254
+#: setup.c:255
 #, c-format
 msgid ""
 "ambiguous argument '%s': both revision and filename\n"
@@ -6649,92 +6674,92 @@
 "使用 '--' 来分隔版本和路径,例如:\n"
 "'git <命令> [<版本>...] -- [<文件>...]'"
 
-#: setup.c:390
+#: setup.c:391
 msgid "unable to set up work tree using invalid config"
 msgstr "无法使用无效配置来创建工作区"
 
-#: setup.c:394
+#: setup.c:395
 msgid "this operation must be run in a work tree"
 msgstr "该操作必须在一个工作区中运行"
 
-#: setup.c:540
+#: setup.c:541
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
 msgstr "期望 git 仓库版本 <= %d,却得到 %d"
 
-#: setup.c:548
+#: setup.c:549
 msgid "unknown repository extensions found:"
 msgstr "发现未知的仓库扩展:"
 
-#: setup.c:567
+#: setup.c:568
 #, c-format
 msgid "error opening '%s'"
 msgstr "打开 '%s' 出错"
 
-#: setup.c:569
+#: setup.c:570
 #, c-format
 msgid "too large to be a .git file: '%s'"
 msgstr "文件太大,无法作为 .git 文件:'%s'"
 
-#: setup.c:571
+#: setup.c:572
 #, c-format
 msgid "error reading %s"
 msgstr "读取 %s 出错"
 
-#: setup.c:573
+#: setup.c:574
 #, c-format
 msgid "invalid gitfile format: %s"
 msgstr "无效的 gitfile 格式:%s"
 
-#: setup.c:575
+#: setup.c:576
 #, c-format
 msgid "no path in gitfile: %s"
 msgstr "在 gitfile 中没有路径:%s"
 
-#: setup.c:577
+#: setup.c:578
 #, c-format
 msgid "not a git repository: %s"
 msgstr "不是一个 git 仓库:%s"
 
-#: setup.c:676
+#: setup.c:677
 #, c-format
 msgid "'$%s' too big"
 msgstr "'$%s' 太大"
 
-#: setup.c:690
+#: setup.c:691
 #, c-format
 msgid "not a git repository: '%s'"
 msgstr "不是一个 git 仓库:'%s'"
 
-#: setup.c:719 setup.c:721 setup.c:752
+#: setup.c:720 setup.c:722 setup.c:753
 #, c-format
 msgid "cannot chdir to '%s'"
 msgstr "不能切换目录到 '%s'"
 
-#: setup.c:724 setup.c:780 setup.c:790 setup.c:829 setup.c:837
+#: setup.c:725 setup.c:781 setup.c:791 setup.c:830 setup.c:838
 msgid "cannot come back to cwd"
 msgstr "无法返回当前工作目录"
 
-#: setup.c:851
+#: setup.c:852
 #, c-format
 msgid "failed to stat '%*s%s%s'"
 msgstr "获取 '%*s%s%s' 状态(stat)失败"
 
-#: setup.c:1083
+#: setup.c:1090
 msgid "Unable to read current working directory"
 msgstr "不能读取当前工作目录"
 
-#: setup.c:1092 setup.c:1098
+#: setup.c:1099 setup.c:1105
 #, c-format
 msgid "cannot change to '%s'"
 msgstr "不能切换到 '%s'"
 
-#: setup.c:1103
+#: setup.c:1110
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
 msgstr "不是一个 git 仓库(或者任何父目录):%s"
 
-#: setup.c:1109
+#: setup.c:1116
 #, c-format
 msgid ""
 "not a git repository (or any parent up to mount point %s)\n"
@@ -6743,7 +6768,7 @@
 "不是一个 git 仓库(或者直至挂载点 %s 的任何父目录)\n"
 "停止在文件系统边界(未设置 GIT_DISCOVERY_ACROSS_FILESYSTEM)。"
 
-#: setup.c:1220
+#: setup.c:1227
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -6752,282 +6777,282 @@
 "参数 core.sharedRepository 的文件属性值有问题(0%.3o)。\n"
 "文件属主必须始终拥有读写权限。"
 
-#: setup.c:1264
+#: setup.c:1271
 msgid "open /dev/null or dup failed"
 msgstr "不能打开或者复制 /dev/null"
 
-#: setup.c:1279
+#: setup.c:1286
 msgid "fork failed"
 msgstr "fork 失败"
 
-#: setup.c:1284
+#: setup.c:1291
 msgid "setsid failed"
 msgstr "setsid 失败"
 
-#: sha1-file.c:453
+#: sha1-file.c:452
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr "对象目录 %s 不存在,检查 .git/objects/info/alternates"
 
-#: sha1-file.c:504
+#: sha1-file.c:503
 #, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr "无法规范化备用对象路径:%s"
 
-#: sha1-file.c:576
+#: sha1-file.c:575
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr "%s:忽略备用对象库,嵌套太深"
 
-#: sha1-file.c:583
+#: sha1-file.c:582
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr "无法规范化对象目录: %s"
 
-#: sha1-file.c:626
+#: sha1-file.c:625
 msgid "unable to fdopen alternates lockfile"
 msgstr "无法 fdopen 替换锁文件"
 
-#: sha1-file.c:644
+#: sha1-file.c:643
 msgid "unable to read alternates file"
 msgstr "无法读取替代文件"
 
-#: sha1-file.c:651
+#: sha1-file.c:650
 msgid "unable to move new alternates file into place"
 msgstr "无法将新的替代文件移动到位"
 
-#: sha1-file.c:686
+#: sha1-file.c:685
 #, c-format
 msgid "path '%s' does not exist"
 msgstr "路径 '%s' 不存在"
 
-#: sha1-file.c:712
+#: sha1-file.c:711
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr "尚不支持将参考仓库 '%s' 作为一个链接检出。"
 
-#: sha1-file.c:718
+#: sha1-file.c:717
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "参考仓库 '%s' 不是一个本地仓库。"
 
-#: sha1-file.c:724
+#: sha1-file.c:723
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr "参考仓库 '%s' 是一个浅克隆"
 
-#: sha1-file.c:732
+#: sha1-file.c:731
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr "参考仓库 '%s' 已被移植"
 
-#: sha1-file.c:792
+#: sha1-file.c:791
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr "解析备用引用时无效的行:%s"
 
-#: sha1-file.c:944
+#: sha1-file.c:943
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr "尝试 mmap %<PRIuMAX>,超过了最大值 %<PRIuMAX>"
 
-#: sha1-file.c:969
+#: sha1-file.c:964
 msgid "mmap failed"
 msgstr "mmap 失败"
 
-#: sha1-file.c:1133
+#: sha1-file.c:1128
 #, c-format
 msgid "object file %s is empty"
 msgstr "对象文件 %s 为空"
 
-#: sha1-file.c:1257 sha1-file.c:2396
+#: sha1-file.c:1252 sha1-file.c:2392
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr "损坏的松散对象 '%s'"
 
-#: sha1-file.c:1259 sha1-file.c:2400
+#: sha1-file.c:1254 sha1-file.c:2396
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr "松散对象 '%s' 后面有垃圾数据"
 
-#: sha1-file.c:1301
+#: sha1-file.c:1296
 msgid "invalid object type"
 msgstr "无效的对象类型"
 
-#: sha1-file.c:1385
+#: sha1-file.c:1380
 #, c-format
 msgid "unable to unpack %s header with --allow-unknown-type"
 msgstr "无法用 --allow-unknown-type 参数解开 %s 头信息"
 
-#: sha1-file.c:1388
+#: sha1-file.c:1383
 #, c-format
 msgid "unable to unpack %s header"
 msgstr "无法解开 %s 头部"
 
-#: sha1-file.c:1394
+#: sha1-file.c:1389
 #, c-format
 msgid "unable to parse %s header with --allow-unknown-type"
 msgstr "无法用 --allow-unknown-type 参数解析 %s 头信息"
 
-#: sha1-file.c:1397
+#: sha1-file.c:1392
 #, c-format
 msgid "unable to parse %s header"
 msgstr "无法解析 %s 头部"
 
-#: sha1-file.c:1588
+#: sha1-file.c:1584
 #, c-format
 msgid "failed to read object %s"
 msgstr "读取对象 %s 失败"
 
-#: sha1-file.c:1592
+#: sha1-file.c:1588
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr "找不到 %2$s 的替代 %1$s"
 
-#: sha1-file.c:1596
+#: sha1-file.c:1592
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr "松散对象 %s(保存在 %s)已损坏"
 
-#: sha1-file.c:1600
+#: sha1-file.c:1596
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr "打包对象 %s(保存在 %s)已损坏"
 
-#: sha1-file.c:1703
+#: sha1-file.c:1699
 #, c-format
 msgid "unable to write file %s"
 msgstr "无法写文件 %s"
 
-#: sha1-file.c:1710
+#: sha1-file.c:1706
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr "无法为 '%s' 设置权限"
 
-#: sha1-file.c:1717
+#: sha1-file.c:1713
 msgid "file write error"
 msgstr "文件写错误"
 
-#: sha1-file.c:1736
+#: sha1-file.c:1732
 msgid "error when closing loose object file"
 msgstr "关闭松散对象文件时出错"
 
-#: sha1-file.c:1801
+#: sha1-file.c:1797
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr "权限不足,无法在仓库对象库 %s 中添加对象"
 
-#: sha1-file.c:1803
+#: sha1-file.c:1799
 msgid "unable to create temporary file"
 msgstr "无法创建临时文件"
 
-#: sha1-file.c:1827
+#: sha1-file.c:1823
 msgid "unable to write loose object file"
 msgstr "不能写松散对象文件"
 
-#: sha1-file.c:1833
+#: sha1-file.c:1829
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr "不能压缩新对象 %s(%d)"
 
-#: sha1-file.c:1837
+#: sha1-file.c:1833
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr "在对象 %s 上调用 deflateEnd 失败(%d)"
 
-#: sha1-file.c:1841
+#: sha1-file.c:1837
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr "被 %s 的不稳定对象源数据搞糊涂了"
 
-#: sha1-file.c:1851 builtin/pack-objects.c:925
+#: sha1-file.c:1847 builtin/pack-objects.c:925
 #, c-format
 msgid "failed utime() on %s"
 msgstr "在 %s 上调用 utime() 失败"
 
-#: sha1-file.c:1926
+#: sha1-file.c:1922
 #, c-format
 msgid "cannot read object for %s"
 msgstr "不能读取对象 %s"
 
-#: sha1-file.c:1966
+#: sha1-file.c:1962
 msgid "corrupt commit"
 msgstr "损坏的提交"
 
-#: sha1-file.c:1974
+#: sha1-file.c:1970
 msgid "corrupt tag"
 msgstr "损坏的标签"
 
-#: sha1-file.c:2073
+#: sha1-file.c:2069
 #, c-format
 msgid "read error while indexing %s"
 msgstr "索引 %s 时读取错误"
 
-#: sha1-file.c:2076
+#: sha1-file.c:2072
 #, c-format
 msgid "short read while indexing %s"
 msgstr "索引 %s 时读入不完整"
 
-#: sha1-file.c:2149 sha1-file.c:2158
+#: sha1-file.c:2145 sha1-file.c:2154
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr "%s:插入数据库失败"
 
-#: sha1-file.c:2164
+#: sha1-file.c:2160
 #, c-format
 msgid "%s: unsupported file type"
 msgstr "%s:不支持的文件类型"
 
-#: sha1-file.c:2188
+#: sha1-file.c:2184
 #, c-format
 msgid "%s is not a valid object"
 msgstr "%s 不是一个有效的对象"
 
-#: sha1-file.c:2190
+#: sha1-file.c:2186
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr "%s 不是一个有效的 '%s' 对象"
 
-#: sha1-file.c:2217 builtin/index-pack.c:155
+#: sha1-file.c:2213 builtin/index-pack.c:155
 #, c-format
 msgid "unable to open %s"
 msgstr "不能打开 %s"
 
-#: sha1-file.c:2407 sha1-file.c:2459
+#: sha1-file.c:2403 sha1-file.c:2455
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr "%s 的哈希值不匹配(预期 %s)"
 
-#: sha1-file.c:2431
+#: sha1-file.c:2427
 #, c-format
 msgid "unable to mmap %s"
 msgstr "不能 mmap %s"
 
-#: sha1-file.c:2436
+#: sha1-file.c:2432
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr "无法解压缩 %s 的头部"
 
-#: sha1-file.c:2442
+#: sha1-file.c:2438
 #, c-format
 msgid "unable to parse header of %s"
 msgstr "无法解析 %s 的头部"
 
-#: sha1-file.c:2453
+#: sha1-file.c:2449
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr "无法解压缩 %s 的内容"
 
-#: sha1-name.c:490
+#: sha1-name.c:487
 #, c-format
 msgid "short SHA1 %s is ambiguous"
 msgstr "短 SHA1 %s 存在歧义"
 
-#: sha1-name.c:501
+#: sha1-name.c:498
 msgid "The candidates are:"
 msgstr "候选者有:"
 
-#: sha1-name.c:800
+#: sha1-name.c:797
 msgid ""
 "Git normally never creates a ref that ends with 40 hex characters\n"
 "because it will be ignored when you just specify 40-hex. These refs\n"
@@ -7049,43 +7074,43 @@
 "false\" 命令关闭本消息通知。"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:821
+#: strbuf.c:822
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:823
+#: strbuf.c:824
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u GiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:831
+#: strbuf.c:832
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:833
+#: strbuf.c:834
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u MiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:840
+#: strbuf.c:841
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:842
+#: strbuf.c:843
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u KiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:848
+#: strbuf.c:849
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -7093,7 +7118,7 @@
 msgstr[1] "%u 字节"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:850
+#: strbuf.c:851
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
@@ -7208,26 +7233,26 @@
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree 返回未知返回值 %d"
 
-#: submodule-config.c:232
+#: submodule-config.c:236
 #, c-format
 msgid "ignoring suspicious submodule name: %s"
 msgstr "忽略可疑的子模组名称:%s"
 
-#: submodule-config.c:299
+#: submodule-config.c:303
 msgid "negative values not allowed for submodule.fetchjobs"
 msgstr "submodule.fetchjobs 不允许为负值"
 
-#: submodule-config.c:397
+#: submodule-config.c:401
 #, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
 msgstr "忽略可能被解析为命令行选项的 '%s':%s"
 
-#: submodule-config.c:486
+#: submodule-config.c:490
 #, c-format
 msgid "invalid value for %s"
 msgstr "%s 的值无效"
 
-#: submodule-config.c:755
+#: submodule-config.c:761
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr "不能更新 .gitmodules 条目 %s"
@@ -7262,7 +7287,7 @@
 msgid "could not read from stdin"
 msgstr "不能自标准输入读取"
 
-#: trailer.c:1011 wrapper.c:701
+#: trailer.c:1011 wrapper.c:665
 #, c-format
 msgid "could not stat %s"
 msgstr "不能对 %s 调用 stat"
@@ -7291,54 +7316,54 @@
 msgid "Would set upstream of '%s' to '%s' of '%s'\n"
 msgstr "将要设置 '%1$s' 的上游为 '%3$s' 的 '%2$s'\n"
 
-#: transport.c:142
+#: transport.c:145
 #, c-format
 msgid "could not read bundle '%s'"
 msgstr "无法读取 bundle '%s'"
 
-#: transport.c:208
+#: transport.c:214
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr "传输:无效的深度选项 '%s'"
 
-#: transport.c:259
+#: transport.c:266
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "查看 'git help config' 中的 protocol.version 获取更多信息"
 
-#: transport.c:260
+#: transport.c:267
 msgid "server options require protocol version 2 or later"
 msgstr "服务端选项需要版本 2 协议或更高"
 
-#: transport.c:625
+#: transport.c:632
 msgid "could not parse transport.color.* config"
 msgstr "不能解析 transport.color.* 配置"
 
-#: transport.c:698
+#: transport.c:705
 msgid "support for protocol v2 not implemented yet"
 msgstr "协议 v2 的支持尚未实现"
 
-#: transport.c:825
+#: transport.c:831
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "配置 '%s' 的取值未知:%s"
 
-#: transport.c:891
+#: transport.c:897
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "传输 '%s' 不允许"
 
-#: transport.c:945
+#: transport.c:949
 msgid "git-over-rsync is no longer supported"
 msgstr "不再支持 git-over-rsync"
 
-#: transport.c:1040
+#: transport.c:1044
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
 "not be found on any remote:\n"
 msgstr "下列子模组路径所包含的修改在任何远程源中都找不到:\n"
 
-#: transport.c:1044
+#: transport.c:1048
 #, c-format
 msgid ""
 "\n"
@@ -7365,131 +7390,136 @@
 "以推送至远程。\n"
 "\n"
 
-#: transport.c:1052
+#: transport.c:1056
 msgid "Aborting."
 msgstr "正在终止。"
 
-#: transport.c:1193
+#: transport.c:1201
 msgid "failed to push all needed submodules"
 msgstr "不能推送全部需要的子模组"
 
-#: transport.c:1340 transport-helper.c:645
+#: transport.c:1345 transport-helper.c:655
 msgid "operation not supported by protocol"
 msgstr "协议不支持该操作"
 
-#: transport-helper.c:51 transport-helper.c:80
+#: transport-helper.c:61 transport-helper.c:90
 msgid "full write to remote helper failed"
 msgstr "完整写入远程助手失败"
 
-#: transport-helper.c:134
+#: transport-helper.c:144
 #, c-format
 msgid "unable to find remote helper for '%s'"
 msgstr "无法为 '%s' 找到远程助手"
 
-#: transport-helper.c:150 transport-helper.c:559
+#: transport-helper.c:160 transport-helper.c:569
 msgid "can't dup helper output fd"
 msgstr "无法复制助手输出文件句柄"
 
-#: transport-helper.c:201
+#: transport-helper.c:211
 #, c-format
 msgid ""
 "unknown mandatory capability %s; this remote helper probably needs newer "
 "version of Git"
 msgstr "未知的强制能力 %s,该远程助手可能需要新版本的Git"
 
-#: transport-helper.c:207
+#: transport-helper.c:217
 msgid "this remote helper should implement refspec capability"
 msgstr "远程助手需要实现 refspec 能力"
 
-#: transport-helper.c:274 transport-helper.c:414
+#: transport-helper.c:284 transport-helper.c:424
 #, c-format
 msgid "%s unexpectedly said: '%s'"
 msgstr "%s 意外地说:'%s'"
 
-#: transport-helper.c:403
+#: transport-helper.c:413
 #, c-format
 msgid "%s also locked %s"
 msgstr "%s 也锁定了 %s"
 
-#: transport-helper.c:481
+#: transport-helper.c:491
 msgid "couldn't run fast-import"
 msgstr "不能执行 fast-import"
 
-#: transport-helper.c:504
+#: transport-helper.c:514
 msgid "error while running fast-import"
 msgstr "执行 fast-import 出错"
 
-#: transport-helper.c:533 transport-helper.c:1105
+#: transport-helper.c:543 transport-helper.c:1132
 #, c-format
 msgid "could not read ref %s"
 msgstr "无法读取引用 %s"
 
-#: transport-helper.c:578
+#: transport-helper.c:588
 #, c-format
 msgid "unknown response to connect: %s"
 msgstr "连接时未知的响应:%s"
 
-#: transport-helper.c:600
+#: transport-helper.c:610
 msgid "setting remote service path not supported by protocol"
 msgstr "协议不支持设置远程服务路径"
 
-#: transport-helper.c:602
+#: transport-helper.c:612
 msgid "invalid remote service path"
 msgstr "无效的远程服务路径"
 
-#: transport-helper.c:648
+#: transport-helper.c:658
 #, c-format
 msgid "can't connect to subservice %s"
 msgstr "不能连接到子服务 %s"
 
-#: transport-helper.c:720
+#: transport-helper.c:734
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "预期 ok/error,助手说 '%s'"
 
-#: transport-helper.c:773
+#: transport-helper.c:787
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "助手报告 %s 的意外状态"
 
-#: transport-helper.c:834
+#: transport-helper.c:848
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "助手 %s 不支持 dry-run"
 
-#: transport-helper.c:837
+#: transport-helper.c:851
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "助手 %s 不支持 --signed"
 
-#: transport-helper.c:840
+#: transport-helper.c:854
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "助手 %s 不支持 --signed=if-asked"
 
-#: transport-helper.c:847
+#: transport-helper.c:859
+#, c-format
+msgid "helper %s does not support --atomic"
+msgstr "助手 %s 不支持 --atomic"
+
+#: transport-helper.c:865
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "助手 %s 不支持 'push-option'"
 
-#: transport-helper.c:945
+#: transport-helper.c:963
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr "remote-heper 不支持 push,需要引用表达式"
 
-#: transport-helper.c:950
+#: transport-helper.c:968
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "助手 %s 不支持 'force'"
 
-#: transport-helper.c:997
+#: transport-helper.c:1015
 msgid "couldn't run fast-export"
 msgstr "无法执行 fast-export"
 
-#: transport-helper.c:1002
+#: transport-helper.c:1020
 msgid "error while running fast-export"
 msgstr "执行 fast-export 时出错"
 
-#: transport-helper.c:1027
+#: transport-helper.c:1045
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -7498,47 +7528,47 @@
 "没有共同的引用并且也没有指定,什么也不会做。\n"
 "可能您应该指定一个分支如 'master'。\n"
 
-#: transport-helper.c:1091
+#: transport-helper.c:1118
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "引用列表中格式错误的响应:%s"
 
-#: transport-helper.c:1244
+#: transport-helper.c:1270
 #, c-format
 msgid "read(%s) failed"
 msgstr "读取(%s)失败"
 
-#: transport-helper.c:1271
+#: transport-helper.c:1297
 #, c-format
 msgid "write(%s) failed"
 msgstr "写(%s)失败"
 
-#: transport-helper.c:1320
+#: transport-helper.c:1346
 #, c-format
 msgid "%s thread failed"
 msgstr "%s 线程失败"
 
-#: transport-helper.c:1324
+#: transport-helper.c:1350
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "%s 线程等待失败:%s"
 
-#: transport-helper.c:1343 transport-helper.c:1347
+#: transport-helper.c:1369 transport-helper.c:1373
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "不能启动线程来拷贝数据:%s"
 
-#: transport-helper.c:1384
+#: transport-helper.c:1410
 #, c-format
 msgid "%s process failed to wait"
 msgstr "%s 进程等待失败"
 
-#: transport-helper.c:1388
+#: transport-helper.c:1414
 #, c-format
 msgid "%s process failed"
 msgstr "%s 进程失败"
 
-#: transport-helper.c:1406 transport-helper.c:1415
+#: transport-helper.c:1432 transport-helper.c:1441
 msgid "can't start thread for copying data"
 msgstr "不能启动线程来拷贝数据"
 
@@ -7558,7 +7588,7 @@
 msgid "too-short tree file"
 msgstr "太短的树文件"
 
-#: unpack-trees.c:111
+#: unpack-trees.c:110
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -7567,7 +7597,7 @@
 "您对下列文件的本地修改将被检出操作覆盖:\n"
 "%%s请在切换分支前提交或贮藏您的修改。"
 
-#: unpack-trees.c:113
+#: unpack-trees.c:112
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -7576,7 +7606,7 @@
 "您对下列文件的本地修改将被检出操作覆盖:\n"
 "%%s"
 
-#: unpack-trees.c:116
+#: unpack-trees.c:115
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -7585,7 +7615,7 @@
 "您对下列文件的本地修改将被合并操作覆盖:\n"
 "%%s请在合并前提交或贮藏您的修改。"
 
-#: unpack-trees.c:118
+#: unpack-trees.c:117
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -7594,7 +7624,7 @@
 "您对下列文件的本地修改将被合并操作覆盖:\n"
 "%%s"
 
-#: unpack-trees.c:121
+#: unpack-trees.c:120
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -7603,7 +7633,7 @@
 "您对下列文件的本地修改将被 %s 覆盖:\n"
 "%%s请在 %s 之前提交或贮藏您的修改。"
 
-#: unpack-trees.c:123
+#: unpack-trees.c:122
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -7612,7 +7642,7 @@
 "您对下列文件的本地修改将被 %s 覆盖:\n"
 "%%s"
 
-#: unpack-trees.c:128
+#: unpack-trees.c:127
 #, c-format
 msgid ""
 "Updating the following directories would lose untracked files in them:\n"
@@ -7621,7 +7651,7 @@
 "更新如下目录将会丢失其中未跟踪的文件:\n"
 "%s"
 
-#: unpack-trees.c:132
+#: unpack-trees.c:131
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -7630,7 +7660,7 @@
 "工作区中下列未跟踪的文件将会因为检出操作而被删除:\n"
 "%%s请在切换分支之前移动或删除。"
 
-#: unpack-trees.c:134
+#: unpack-trees.c:133
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -7639,7 +7669,7 @@
 "工作区中下列未跟踪的文件将会因为检出操作而被删除:\n"
 "%%s"
 
-#: unpack-trees.c:137
+#: unpack-trees.c:136
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -7648,7 +7678,7 @@
 "工作区中下列未跟踪的文件将会因为合并操作而被删除:\n"
 "%%s请在合并前移动或删除。"
 
-#: unpack-trees.c:139
+#: unpack-trees.c:138
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -7657,7 +7687,7 @@
 "工作区中下列未跟踪的文件将会因为合并操作而被删除:\n"
 "%%s"
 
-#: unpack-trees.c:142
+#: unpack-trees.c:141
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -7666,7 +7696,7 @@
 "工作区中下列未跟踪的文件将会因为 %s 操作而被删除:\n"
 "%%s请在 %s 前移动或删除。"
 
-#: unpack-trees.c:144
+#: unpack-trees.c:143
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -7675,7 +7705,7 @@
 "工作区中下列未跟踪的文件将会因为 %s 操作而被删除:\n"
 "%%s"
 
-#: unpack-trees.c:150
+#: unpack-trees.c:149
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -7685,7 +7715,7 @@
 "工作区中下列未跟踪的文件将会因为检出操作而被覆盖:\n"
 "%%s请在切换分支前移动或删除。"
 
-#: unpack-trees.c:152
+#: unpack-trees.c:151
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -7695,7 +7725,7 @@
 "工作区中下列未跟踪的文件将会因为检出操作而被覆盖:\n"
 "%%s"
 
-#: unpack-trees.c:155
+#: unpack-trees.c:154
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -7704,7 +7734,7 @@
 "工作区中下列未跟踪的文件将会因为合并操作而被覆盖:\n"
 "%%s请在合并前移动或删除。"
 
-#: unpack-trees.c:157
+#: unpack-trees.c:156
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -7713,7 +7743,7 @@
 "工作区中下列未跟踪的文件将会因为合并操作而被覆盖:\n"
 "%%s"
 
-#: unpack-trees.c:160
+#: unpack-trees.c:159
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -7722,7 +7752,7 @@
 "工作区中下列未跟踪的文件将会因为 %s 操作而被覆盖:\n"
 "%%s请在 %s 前移动或删除。"
 
-#: unpack-trees.c:162
+#: unpack-trees.c:161
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -7731,12 +7761,12 @@
 "工作区中下列未跟踪的文件将会因为 %s 操作而被覆盖:\n"
 "%%s"
 
-#: unpack-trees.c:170
+#: unpack-trees.c:169
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
 msgstr "条目 '%s' 和 '%s' 重叠。无法合并。"
 
-#: unpack-trees.c:173
+#: unpack-trees.c:172
 #, c-format
 msgid ""
 "Cannot update sparse checkout: the following entries are not up to date:\n"
@@ -7745,7 +7775,7 @@
 "无法更新稀疏检出:如下条目不是最新:\n"
 "%s"
 
-#: unpack-trees.c:175
+#: unpack-trees.c:174
 #, c-format
 msgid ""
 "The following working tree files would be overwritten by sparse checkout "
@@ -7755,7 +7785,7 @@
 "工作区中下列文件将被稀疏检出更新所覆盖:\n"
 "%s"
 
-#: unpack-trees.c:177
+#: unpack-trees.c:176
 #, c-format
 msgid ""
 "The following working tree files would be removed by sparse checkout "
@@ -7765,7 +7795,7 @@
 "工作区中下列文件将被稀疏检出更新所删除:\n"
 "%s"
 
-#: unpack-trees.c:179
+#: unpack-trees.c:178
 #, c-format
 msgid ""
 "Cannot update submodule:\n"
@@ -7774,16 +7804,16 @@
 "无法更新子模组:\n"
 "%s"
 
-#: unpack-trees.c:256
+#: unpack-trees.c:255
 #, c-format
 msgid "Aborting\n"
 msgstr "正在终止\n"
 
-#: unpack-trees.c:318
+#: unpack-trees.c:317
 msgid "Updating files"
 msgstr "正在更新文件"
 
-#: unpack-trees.c:350
+#: unpack-trees.c:349
 msgid ""
 "the following paths have collided (e.g. case-sensitive paths\n"
 "on a case-insensitive filesystem) and only one from the same\n"
@@ -7821,7 +7851,7 @@
 msgid "invalid '..' path segment"
 msgstr "无效的 '..' 路径片段"
 
-#: worktree.c:258 builtin/am.c:2095
+#: worktree.c:258 builtin/am.c:2084
 #, c-format
 msgid "failed to read '%s'"
 msgstr "读取 '%s' 失败"
@@ -7851,17 +7881,17 @@
 msgid "'%s' does not point back to '%s'"
 msgstr "'%s' 没有指回到 '%s'"
 
-#: wrapper.c:223 wrapper.c:393
+#: wrapper.c:186 wrapper.c:356
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr "无法打开 '%s' 进行读写"
 
-#: wrapper.c:424 wrapper.c:624
+#: wrapper.c:387 wrapper.c:588
 #, c-format
 msgid "unable to access '%s'"
 msgstr "不能访问 '%s'"
 
-#: wrapper.c:632
+#: wrapper.c:596
 msgid "unable to get current working directory"
 msgstr "不能获取当前工作目录"
 
@@ -8216,85 +8246,95 @@
 
 #  译者:注意保持前导空格
 #: wt-status.c:1437
+msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
+msgstr "  (使用 \"git cherry-pick --skip\" 跳过此补丁)"
+
+#  译者:注意保持前导空格
+#: wt-status.c:1439
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr "  (使用 \"git cherry-pick --abort\" 以取消拣选操作)"
 
-#: wt-status.c:1447
+#: wt-status.c:1449
 msgid "Revert currently in progress."
 msgstr "还原操作正在行中。"
 
-#: wt-status.c:1450
+#: wt-status.c:1452
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "您在执行反转提交 %s 的操作。"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1456
+#: wt-status.c:1458
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (解决冲突并执行 \"git revert --continue\")"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1459
+#: wt-status.c:1461
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (执行 \"git revert --continue\" 以继续)"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1462
+#: wt-status.c:1464
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (所有冲突已解决:执行 \"git revert --continue\")"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1464
+#: wt-status.c:1466
+msgid "  (use \"git revert --skip\" to skip this patch)"
+msgstr "  (使用 \"git revert --skip\" 跳过此补丁)"
+
+#  译者:注意保持前导空格
+#: wt-status.c:1468
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (使用 \"git revert --abort\" 以取消反转提交操作)"
 
-#: wt-status.c:1474
+#: wt-status.c:1478
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "您在执行从分支 '%s' 开始的二分查找操作。"
 
-#: wt-status.c:1478
+#: wt-status.c:1482
 msgid "You are currently bisecting."
 msgstr "您在执行二分查找操作。"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1481
+#: wt-status.c:1485
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (使用 \"git bisect reset\" 以回到原有分支)"
 
-#: wt-status.c:1690
+#: wt-status.c:1694
 msgid "On branch "
 msgstr "位于分支 "
 
-#: wt-status.c:1697
+#: wt-status.c:1701
 msgid "interactive rebase in progress; onto "
 msgstr "交互式变基操作正在进行中;至 "
 
-#: wt-status.c:1699
+#: wt-status.c:1703
 msgid "rebase in progress; onto "
 msgstr "变基操作正在进行中;至 "
 
-#: wt-status.c:1709
+#: wt-status.c:1713
 msgid "Not currently on any branch."
 msgstr "当前不在任何分支上。"
 
-#: wt-status.c:1726
+#: wt-status.c:1730
 msgid "Initial commit"
 msgstr "初始提交"
 
-#: wt-status.c:1727
+#: wt-status.c:1731
 msgid "No commits yet"
 msgstr "尚无提交"
 
-#: wt-status.c:1741
+#: wt-status.c:1745
 msgid "Untracked files"
 msgstr "未跟踪的文件"
 
-#: wt-status.c:1743
+#: wt-status.c:1747
 msgid "Ignored files"
 msgstr "忽略的文件"
 
-#: wt-status.c:1747
+#: wt-status.c:1751
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -8304,101 +8344,106 @@
 "耗费了 %.2f 秒以枚举未跟踪的文件。'status -uno' 也许能提高速度,\n"
 "但您需要小心不要忘了添加新文件(参见 'git help status')。"
 
-#: wt-status.c:1753
+#: wt-status.c:1757
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "未跟踪的文件没有列出%s"
 
 #  译者:中文字符串拼接,可删除前导空格
-#: wt-status.c:1755
+#: wt-status.c:1759
 msgid " (use -u option to show untracked files)"
 msgstr "(使用 -u 参数显示未跟踪的文件)"
 
-#: wt-status.c:1761
+#: wt-status.c:1765
 msgid "No changes"
 msgstr "没有修改"
 
-#: wt-status.c:1766
+#: wt-status.c:1770
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr "修改尚未加入提交(使用 \"git add\" 和/或 \"git commit -a\")\n"
 
-#: wt-status.c:1769
+#: wt-status.c:1773
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "修改尚未加入提交\n"
 
-#: wt-status.c:1772
+#: wt-status.c:1776
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
 "track)\n"
 msgstr "提交为空,但是存在尚未跟踪的文件(使用 \"git add\" 建立跟踪)\n"
 
-#: wt-status.c:1775
+#: wt-status.c:1779
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr "提交为空,但是存在尚未跟踪的文件\n"
 
 #  译者:中文字符串拼接,可删除前导空格
-#: wt-status.c:1778
+#: wt-status.c:1782
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr "无文件要提交(创建/拷贝文件并使用 \"git add\" 建立跟踪)\n"
 
-#: wt-status.c:1781 wt-status.c:1786
+#: wt-status.c:1785 wt-status.c:1790
 #, c-format
 msgid "nothing to commit\n"
 msgstr "无文件要提交\n"
 
 #  译者:中文字符串拼接,可删除前导空格
-#: wt-status.c:1784
+#: wt-status.c:1788
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr "无文件要提交(使用 -u 显示未跟踪的文件)\n"
 
 #  译者:中文字符串拼接,可删除前导空格
-#: wt-status.c:1788
+#: wt-status.c:1792
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "无文件要提交,干净的工作区\n"
 
-#: wt-status.c:1901
+#: wt-status.c:1905
 msgid "No commits yet on "
 msgstr "尚无提交在 "
 
-#: wt-status.c:1905
+#: wt-status.c:1909
 msgid "HEAD (no branch)"
 msgstr "HEAD(非分支)"
 
-#: wt-status.c:1936
+#: wt-status.c:1940
 msgid "different"
 msgstr "不同"
 
 #  译者:注意保持句尾空格
-#: wt-status.c:1938 wt-status.c:1946
+#: wt-status.c:1942 wt-status.c:1950
 msgid "behind "
 msgstr "落后 "
 
-#: wt-status.c:1941 wt-status.c:1944
+#: wt-status.c:1945 wt-status.c:1948
 msgid "ahead "
 msgstr "领先 "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2466
+#: wt-status.c:2470
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "不能%s:您有未暂存的变更。"
 
-#: wt-status.c:2472
+#: wt-status.c:2476
 msgid "additionally, your index contains uncommitted changes."
 msgstr "另外,您的索引中包含未提交的变更。"
 
-#: wt-status.c:2474
+#: wt-status.c:2478
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "不能%s:您的索引中包含未提交的变更。"
 
+#: compat/precompose_utf8.c:58 builtin/clone.c:452
+#, c-format
+msgid "failed to unlink '%s'"
+msgstr "删除 '%s' 失败"
+
 #: builtin/add.c:25
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<选项>] [--] <路径规格>..."
@@ -8421,7 +8466,7 @@
 msgid "Unstaged changes after refreshing the index:"
 msgstr "刷新索引之后尚未被暂存的变更:"
 
-#: builtin/add.c:234 builtin/rev-parse.c:896
+#: builtin/add.c:234 builtin/rev-parse.c:897
 msgid "Could not read the index"
 msgstr "不能读取索引"
 
@@ -8456,8 +8501,8 @@
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr "下列路径根据您的一个 .gitignore 文件而被忽略:\n"
 
-#: builtin/add.c:290 builtin/clean.c:909 builtin/fetch.c:147 builtin/mv.c:124
-#: builtin/prune-packed.c:56 builtin/pull.c:222 builtin/push.c:560
+#: builtin/add.c:290 builtin/clean.c:910 builtin/fetch.c:162 builtin/mv.c:124
+#: builtin/prune-packed.c:56 builtin/pull.c:223 builtin/push.c:547
 #: builtin/remote.c:1345 builtin/rm.c:241 builtin/send-pack.c:165
 msgid "dry run"
 msgstr "演习"
@@ -8510,7 +8555,7 @@
 msgid "check if - even missing - files are ignored in dry run"
 msgstr "检查在演习模式下文件(即使不存在)是否被忽略"
 
-#: builtin/add.c:309 builtin/update-index.c:1001
+#: builtin/add.c:309 builtin/update-index.c:1002
 msgid "override the executable bit of the listed files"
 msgstr "覆盖列表里文件的可执行位"
 
@@ -8584,109 +8629,105 @@
 msgid "Maybe you wanted to say 'git add .'?\n"
 msgstr "也许您想要执行 'git add .'?\n"
 
-#: builtin/am.c:348
+#: builtin/am.c:347
 msgid "could not parse author script"
 msgstr "不能解析作者脚本"
 
-#: builtin/am.c:432
+#: builtin/am.c:431
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "'%s' 被 applypatch-msg 钩子删除"
 
-#: builtin/am.c:474
+#: builtin/am.c:473
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "非法的输入行:'%s'。"
 
-#: builtin/am.c:512
+#: builtin/am.c:511
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "从 '%s' 拷贝注解到 '%s' 时失败"
 
-#: builtin/am.c:538
+#: builtin/am.c:537
 msgid "fseek failed"
 msgstr "fseek 失败"
 
-#: builtin/am.c:726
+#: builtin/am.c:725
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "无法解析补丁 '%s'"
 
-#: builtin/am.c:791
+#: builtin/am.c:790
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "一次只能有一个 StGIT 补丁队列被应用"
 
-#: builtin/am.c:839
+#: builtin/am.c:838
 msgid "invalid timestamp"
 msgstr "无效的时间戳"
 
-#: builtin/am.c:844 builtin/am.c:856
+#: builtin/am.c:843 builtin/am.c:855
 msgid "invalid Date line"
 msgstr "无效的日期行"
 
-#: builtin/am.c:851
+#: builtin/am.c:850
 msgid "invalid timezone offset"
 msgstr "无效的时区偏移值"
 
-#: builtin/am.c:944
+#: builtin/am.c:943
 msgid "Patch format detection failed."
 msgstr "补丁格式探测失败。"
 
-#: builtin/am.c:949 builtin/clone.c:407
+#: builtin/am.c:948 builtin/clone.c:406
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "创建目录 '%s' 失败"
 
-#: builtin/am.c:954
+#: builtin/am.c:953
 msgid "Failed to split patches."
 msgstr "拆分补丁失败。"
 
-#: builtin/am.c:1084 builtin/commit.c:374
-msgid "unable to write index file"
-msgstr "无法写入索引文件"
-
-#: builtin/am.c:1098
+#: builtin/am.c:1084
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "当您解决这一问题,执行 \"%s --continue\"。"
 
-#: builtin/am.c:1099
+#: builtin/am.c:1085
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "如果您想要跳过这一补丁,则执行 \"%s --skip\"。"
 
-#: builtin/am.c:1100
+#: builtin/am.c:1086
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr "若要复原至原始分支并停止补丁操作,执行 \"%s --abort\"。"
 
-#: builtin/am.c:1183
+#: builtin/am.c:1169
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr "补丁使用 format=flowed 格式发送,行尾的空格可能会丢失。"
 
-#: builtin/am.c:1211
+#: builtin/am.c:1197
 msgid "Patch is empty."
 msgstr "补丁为空。"
 
-#: builtin/am.c:1277
+#: builtin/am.c:1262
+#, c-format
+msgid "missing author line in commit %s"
+msgstr "在提交 %s 中缺失作者行"
+
+#: builtin/am.c:1265
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "无效的身份标识:%.*s"
 
-#: builtin/am.c:1299
-#, c-format
-msgid "unable to parse commit %s"
-msgstr "不能解析提交 %s"
-
-#: builtin/am.c:1496
+#: builtin/am.c:1484
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr "仓库缺乏必要的数据对象以进行三方合并。"
 
-#: builtin/am.c:1498
+#: builtin/am.c:1486
 msgid "Using index info to reconstruct a base tree..."
 msgstr "使用索引来重建一个(三方合并的)基础目录树..."
 
-#: builtin/am.c:1517
+#: builtin/am.c:1505
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -8694,24 +8735,24 @@
 "您是否曾手动编辑过您的补丁?\n"
 "无法应用补丁到索引中的数据对象上。"
 
-#: builtin/am.c:1523
+#: builtin/am.c:1511
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "回落到基础版本上打补丁及进行三方合并..."
 
-#: builtin/am.c:1549
+#: builtin/am.c:1537
 msgid "Failed to merge in the changes."
 msgstr "无法合并变更。"
 
-#: builtin/am.c:1581
+#: builtin/am.c:1569
 msgid "applying to an empty history"
 msgstr "正应用到一个空历史上"
 
-#: builtin/am.c:1628 builtin/am.c:1632
+#: builtin/am.c:1616 builtin/am.c:1620
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "无法继续:%s 不存在。"
 
-#: builtin/am.c:1650
+#: builtin/am.c:1638
 msgid "Commit Body is:"
 msgstr "提交内容为:"
 
@@ -8720,35 +8761,39 @@
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1660
+#: builtin/am.c:1648
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr "应用?是[y]/否[n]/编辑[e]/查看补丁[v]/应用所有[a]:"
 
-#: builtin/am.c:1710
+#: builtin/am.c:1695 builtin/commit.c:374
+msgid "unable to write index file"
+msgstr "无法写入索引文件"
+
+#: builtin/am.c:1699
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "脏索引:不能应用补丁(脏文件:%s)"
 
-#: builtin/am.c:1750 builtin/am.c:1818
+#: builtin/am.c:1739 builtin/am.c:1807
 #, c-format
 msgid "Applying: %.*s"
 msgstr "应用:%.*s"
 
-#: builtin/am.c:1767
+#: builtin/am.c:1756
 msgid "No changes -- Patch already applied."
 msgstr "没有变更 —— 补丁已经应用过。"
 
-#: builtin/am.c:1773
+#: builtin/am.c:1762
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "打补丁失败于 %s %.*s"
 
-#: builtin/am.c:1777
+#: builtin/am.c:1766
 msgid "Use 'git am --show-current-patch' to see the failed patch"
 msgstr "用 'git am --show-current-patch' 命令查看失败的补丁"
 
-#: builtin/am.c:1821
+#: builtin/am.c:1810
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -8758,7 +8803,7 @@
 "如果没有什么要添加到暂存区的,则很可能是其它提交已经引入了相同的变更。\n"
 "您也许想要跳过这个补丁。"
 
-#: builtin/am.c:1828
+#: builtin/am.c:1817
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -8769,159 +8814,159 @@
 "您应该对已经冲突解决的每一个文件执行 'git add' 来标记已经完成。 \n"
 "你可以对 \"由他们删除\" 的文件执行 `git rm` 命令。"
 
-#: builtin/am.c:1935 builtin/am.c:1939 builtin/am.c:1951 builtin/reset.c:329
+#: builtin/am.c:1924 builtin/am.c:1928 builtin/am.c:1940 builtin/reset.c:329
 #: builtin/reset.c:337
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "不能解析对象 '%s'。"
 
-#: builtin/am.c:1987
+#: builtin/am.c:1976
 msgid "failed to clean index"
 msgstr "清空索引失败"
 
-#: builtin/am.c:2031
+#: builtin/am.c:2020
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
 msgstr "您好像在上一次 'am' 失败后移动了 HEAD。未回退至 ORIG_HEAD"
 
-#: builtin/am.c:2128
+#: builtin/am.c:2117
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr "无效的 --patch-format 值:%s"
 
-#: builtin/am.c:2164
+#: builtin/am.c:2153
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<选项>] [(<mbox> | <Maildir>)...]"
 
-#: builtin/am.c:2165
+#: builtin/am.c:2154
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<选项>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2171
+#: builtin/am.c:2160
 msgid "run interactively"
 msgstr "以交互式方式运行"
 
-#: builtin/am.c:2173
+#: builtin/am.c:2162
 msgid "historical option -- no-op"
 msgstr "老的参数 —— 无作用"
 
-#: builtin/am.c:2175
+#: builtin/am.c:2164
 msgid "allow fall back on 3way merging if needed"
 msgstr "如果必要,允许使用三方合并。"
 
-#: builtin/am.c:2176 builtin/init-db.c:494 builtin/prune-packed.c:58
-#: builtin/repack.c:296 builtin/stash.c:806
+#: builtin/am.c:2165 builtin/init-db.c:494 builtin/prune-packed.c:58
+#: builtin/repack.c:297 builtin/stash.c:812
 msgid "be quiet"
 msgstr "静默模式"
 
-#: builtin/am.c:2178
+#: builtin/am.c:2167
 msgid "add a Signed-off-by line to the commit message"
 msgstr "在提交说明中添加一个 Signed-off-by 签名"
 
-#: builtin/am.c:2181
+#: builtin/am.c:2170
 msgid "recode into utf8 (default)"
 msgstr "使用 utf8 字符集(默认)"
 
-#: builtin/am.c:2183
+#: builtin/am.c:2172
 msgid "pass -k flag to git-mailinfo"
 msgstr "向 git-mailinfo 传递 -k 参数"
 
-#: builtin/am.c:2185
+#: builtin/am.c:2174
 msgid "pass -b flag to git-mailinfo"
 msgstr "向 git-mailinfo 传递 -b 参数"
 
-#: builtin/am.c:2187
+#: builtin/am.c:2176
 msgid "pass -m flag to git-mailinfo"
 msgstr "向 git-mailinfo 传递 -m 参数"
 
-#: builtin/am.c:2189
+#: builtin/am.c:2178
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "针对 mbox 格式,向 git-mailsplit 传递 --keep-cr 参数"
 
-#: builtin/am.c:2192
+#: builtin/am.c:2181
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr "不向 git-mailsplit 传递 --keep-cr 参数,覆盖 am.keepcr 的设置"
 
-#: builtin/am.c:2195
+#: builtin/am.c:2184
 msgid "strip everything before a scissors line"
 msgstr "丢弃裁切线前的所有内容"
 
-#: builtin/am.c:2197 builtin/am.c:2200 builtin/am.c:2203 builtin/am.c:2206
-#: builtin/am.c:2209 builtin/am.c:2212 builtin/am.c:2215 builtin/am.c:2218
-#: builtin/am.c:2224
+#: builtin/am.c:2186 builtin/am.c:2189 builtin/am.c:2192 builtin/am.c:2195
+#: builtin/am.c:2198 builtin/am.c:2201 builtin/am.c:2204 builtin/am.c:2207
+#: builtin/am.c:2213
 msgid "pass it through git-apply"
 msgstr "传递给 git-apply"
 
-#: builtin/am.c:2214 builtin/commit.c:1368 builtin/fmt-merge-msg.c:671
-#: builtin/fmt-merge-msg.c:674 builtin/grep.c:881 builtin/merge.c:249
-#: builtin/pull.c:159 builtin/pull.c:218 builtin/rebase.c:1418
-#: builtin/repack.c:307 builtin/repack.c:311 builtin/repack.c:313
+#: builtin/am.c:2203 builtin/commit.c:1368 builtin/fmt-merge-msg.c:671
+#: builtin/fmt-merge-msg.c:674 builtin/grep.c:883 builtin/merge.c:249
+#: builtin/pull.c:160 builtin/pull.c:219 builtin/rebase.c:1442
+#: builtin/repack.c:308 builtin/repack.c:312 builtin/repack.c:314
 #: builtin/show-branch.c:650 builtin/show-ref.c:172 builtin/tag.c:403
-#: parse-options.h:141 parse-options.h:162 parse-options.h:312
+#: parse-options.h:150 parse-options.h:171 parse-options.h:312
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2220 builtin/branch.c:661 builtin/for-each-ref.c:38
-#: builtin/replace.c:554 builtin/tag.c:437 builtin/verify-tag.c:38
+#: builtin/am.c:2209 builtin/branch.c:661 builtin/for-each-ref.c:38
+#: builtin/replace.c:555 builtin/tag.c:437 builtin/verify-tag.c:38
 msgid "format"
 msgstr "格式"
 
-#: builtin/am.c:2221
+#: builtin/am.c:2210
 msgid "format the patch(es) are in"
 msgstr "补丁的格式"
 
-#: builtin/am.c:2227
+#: builtin/am.c:2216
 msgid "override error message when patch failure occurs"
 msgstr "打补丁失败时显示的错误信息"
 
-#: builtin/am.c:2229
+#: builtin/am.c:2218
 msgid "continue applying patches after resolving a conflict"
 msgstr "冲突解决后继续应用补丁"
 
-#: builtin/am.c:2232
+#: builtin/am.c:2221
 msgid "synonyms for --continue"
 msgstr "和 --continue 同义"
 
-#: builtin/am.c:2235
+#: builtin/am.c:2224
 msgid "skip the current patch"
 msgstr "跳过当前补丁"
 
-#: builtin/am.c:2238
+#: builtin/am.c:2227
 msgid "restore the original branch and abort the patching operation."
 msgstr "恢复原始分支并终止打补丁操作。"
 
-#: builtin/am.c:2241
+#: builtin/am.c:2230
 msgid "abort the patching operation but keep HEAD where it is."
 msgstr "终止补丁操作但保持 HEAD 不变。"
 
-#: builtin/am.c:2244
+#: builtin/am.c:2233
 msgid "show the patch being applied."
 msgstr "显示正在应用的补丁。"
 
-#: builtin/am.c:2248
+#: builtin/am.c:2237
 msgid "lie about committer date"
 msgstr "将作者日期作为提交日期"
 
-#: builtin/am.c:2250
+#: builtin/am.c:2239
 msgid "use current timestamp for author date"
 msgstr "用当前时间作为作者日期"
 
-#: builtin/am.c:2252 builtin/commit-tree.c:120 builtin/commit.c:1511
-#: builtin/merge.c:286 builtin/pull.c:193 builtin/rebase.c:489
-#: builtin/rebase.c:1459 builtin/revert.c:117 builtin/tag.c:418
+#: builtin/am.c:2241 builtin/commit-tree.c:120 builtin/commit.c:1511
+#: builtin/merge.c:286 builtin/pull.c:194 builtin/rebase.c:490
+#: builtin/rebase.c:1483 builtin/revert.c:117 builtin/tag.c:418
 msgid "key-id"
 msgstr "key-id"
 
-#: builtin/am.c:2253 builtin/rebase.c:490 builtin/rebase.c:1460
+#: builtin/am.c:2242 builtin/rebase.c:491 builtin/rebase.c:1484
 msgid "GPG-sign commits"
 msgstr "使用 GPG 签名提交"
 
-#: builtin/am.c:2256
+#: builtin/am.c:2245
 msgid "(internal use for git-rebase)"
 msgstr "(内部使用,用于 git-rebase)"
 
-#: builtin/am.c:2274
+#: builtin/am.c:2263
 msgid ""
 "The -b/--binary option has been a no-op for long time, and\n"
 "it will be removed. Please do not use it anymore."
@@ -8929,16 +8974,16 @@
 "参数 -b/--binary 已经很长时间不做任何实质操作了,并且将被移除。\n"
 "请不要再使用它了。"
 
-#: builtin/am.c:2281
+#: builtin/am.c:2270
 msgid "failed to read the index"
 msgstr "读取索引失败"
 
-#: builtin/am.c:2296
+#: builtin/am.c:2285
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr "之前的变基目录 %s 仍然存在,但却提供了 mbox。"
 
-#: builtin/am.c:2320
+#: builtin/am.c:2309
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -8947,11 +8992,11 @@
 "发现了错误的 %s 目录。\n"
 "使用 \"git am --abort\" 删除它。"
 
-#: builtin/am.c:2326
+#: builtin/am.c:2315
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "解决操作未进行,我们不会继续。"
 
-#: builtin/am.c:2336
+#: builtin/am.c:2325
 msgid "interactive mode requires patches on the command line"
 msgstr "交互式模式需要命令行上提供补丁"
 
@@ -9261,154 +9306,154 @@
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms 需要 0 或 1 个参数"
 
-#: builtin/blame.c:32
+#: builtin/blame.c:31
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
 msgstr "git blame [<选项>] [<版本选项>] [<版本>] [--] <文件>"
 
-#: builtin/blame.c:37
+#: builtin/blame.c:36
 msgid "<rev-opts> are documented in git-rev-list(1)"
 msgstr "<版本选项> 的文档记录在 git-rev-list(1) 中"
 
-#: builtin/blame.c:410
+#: builtin/blame.c:409
 #, c-format
 msgid "expecting a color: %s"
 msgstr "期望一个颜色:%s"
 
-#: builtin/blame.c:417
+#: builtin/blame.c:416
 msgid "must end with a color"
 msgstr "必须以一个颜色结尾"
 
-#: builtin/blame.c:730
+#: builtin/blame.c:729
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr "设置 color.blame.repeatedLines 中的无效颜色 '%s'"
 
-#: builtin/blame.c:748
+#: builtin/blame.c:747
 msgid "invalid value for blame.coloring"
 msgstr "设置 blame.coloring 中的无效取值"
 
-#: builtin/blame.c:823
+#: builtin/blame.c:822
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "不能找到要忽略的版本 %s"
 
-#: builtin/blame.c:845
+#: builtin/blame.c:844
 msgid "Show blame entries as we find them, incrementally"
 msgstr "增量式地显示发现的 blame 条目"
 
-#: builtin/blame.c:846
+#: builtin/blame.c:845
 msgid "Show blank SHA-1 for boundary commits (Default: off)"
 msgstr "边界提交显示空的 SHA-1(默认:关闭)"
 
-#: builtin/blame.c:847
+#: builtin/blame.c:846
 msgid "Do not treat root commits as boundaries (Default: off)"
 msgstr "不把根提交作为边界(默认:关闭)"
 
-#: builtin/blame.c:848
+#: builtin/blame.c:847
 msgid "Show work cost statistics"
 msgstr "显示命令消耗统计"
 
-#: builtin/blame.c:849
+#: builtin/blame.c:848
 msgid "Force progress reporting"
 msgstr "强制进度显示"
 
-#: builtin/blame.c:850
+#: builtin/blame.c:849
 msgid "Show output score for blame entries"
 msgstr "显示判断 blame 条目位移的得分诊断信息"
 
-#: builtin/blame.c:851
+#: builtin/blame.c:850
 msgid "Show original filename (Default: auto)"
 msgstr "显示原始文件名(默认:自动)"
 
-#: builtin/blame.c:852
+#: builtin/blame.c:851
 msgid "Show original linenumber (Default: off)"
 msgstr "显示原始的行号(默认:关闭)"
 
-#: builtin/blame.c:853
+#: builtin/blame.c:852
 msgid "Show in a format designed for machine consumption"
 msgstr "显示为一个适合机器读取的格式"
 
-#: builtin/blame.c:854
+#: builtin/blame.c:853
 msgid "Show porcelain format with per-line commit information"
 msgstr "为每一行显示机器适用的提交信息"
 
-#: builtin/blame.c:855
+#: builtin/blame.c:854
 msgid "Use the same output mode as git-annotate (Default: off)"
 msgstr "使用和 git-annotate 相同的输出模式(默认:关闭)"
 
-#: builtin/blame.c:856
+#: builtin/blame.c:855
 msgid "Show raw timestamp (Default: off)"
 msgstr "显示原始时间戳(默认:关闭)"
 
-#: builtin/blame.c:857
+#: builtin/blame.c:856
 msgid "Show long commit SHA1 (Default: off)"
 msgstr "显示长的 SHA1 提交号(默认:关闭)"
 
-#: builtin/blame.c:858
+#: builtin/blame.c:857
 msgid "Suppress author name and timestamp (Default: off)"
 msgstr "隐藏作者名字和时间戳(默认:关闭)"
 
-#: builtin/blame.c:859
+#: builtin/blame.c:858
 msgid "Show author email instead of name (Default: off)"
 msgstr "显示作者的邮箱而不是名字(默认:关闭)"
 
-#: builtin/blame.c:860
+#: builtin/blame.c:859
 msgid "Ignore whitespace differences"
 msgstr "忽略空白差异"
 
-#: builtin/blame.c:861 builtin/log.c:1629
+#: builtin/blame.c:860 builtin/log.c:1630
 msgid "rev"
 msgstr "版本"
 
-#: builtin/blame.c:861
+#: builtin/blame.c:860
 msgid "Ignore <rev> when blaming"
 msgstr "在执行 blame 操作时忽略 <版本>"
 
-#: builtin/blame.c:862
+#: builtin/blame.c:861
 msgid "Ignore revisions from <file>"
 msgstr "忽略来自 <文件> 中的版本"
 
-#: builtin/blame.c:863
+#: builtin/blame.c:862
 msgid "color redundant metadata from previous line differently"
 msgstr "使用颜色间隔输出与前一行不同的重复元信息"
 
-#: builtin/blame.c:864
+#: builtin/blame.c:863
 msgid "color lines by age"
 msgstr "依据时间着色"
 
-#: builtin/blame.c:871
+#: builtin/blame.c:870
 msgid "Use an experimental heuristic to improve diffs"
 msgstr "使用一个试验性的启发式算法改进差异显示"
 
-#: builtin/blame.c:873
+#: builtin/blame.c:872
 msgid "Spend extra cycles to find better match"
 msgstr "花费额外的循环来找到更好的匹配"
 
-#: builtin/blame.c:874
+#: builtin/blame.c:873
 msgid "Use revisions from <file> instead of calling git-rev-list"
 msgstr "使用来自 <文件> 的修订集而不是调用 git-rev-list"
 
-#: builtin/blame.c:875
+#: builtin/blame.c:874
 msgid "Use <file>'s contents as the final image"
 msgstr "使用 <文件> 的内容作为最终的图片"
 
-#: builtin/blame.c:876 builtin/blame.c:877
+#: builtin/blame.c:875 builtin/blame.c:876
 msgid "score"
 msgstr "得分"
 
-#: builtin/blame.c:876
+#: builtin/blame.c:875
 msgid "Find line copies within and across files"
 msgstr "找到文件内及跨文件的行拷贝"
 
-#: builtin/blame.c:877
+#: builtin/blame.c:876
 msgid "Find line movements within and across files"
 msgstr "找到文件内及跨文件的行移动"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:877
 msgid "n,m"
 msgstr "n,m"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:877
 msgid "Process only line range n,m, counting from 1"
 msgstr "只处理行范围在 n 和 m 之间的,从 1 开始"
 
@@ -9646,7 +9691,7 @@
 msgid "do not use"
 msgstr "不要使用"
 
-#: builtin/branch.c:626 builtin/rebase.c:485
+#: builtin/branch.c:626 builtin/rebase.c:486
 msgid "upstream"
 msgstr "上游"
 
@@ -9757,7 +9802,7 @@
 msgid "format to use for the output"
 msgstr "输出格式"
 
-#: builtin/branch.c:684 builtin/clone.c:761
+#: builtin/branch.c:684 builtin/clone.c:760
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD 没有位于 /refs/heads 之下!"
 
@@ -9856,7 +9901,7 @@
 msgid "Need a repository to unbundle."
 msgstr "需要一个仓库来解包。"
 
-#: builtin/cat-file.c:594
+#: builtin/cat-file.c:595
 msgid ""
 "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
 "p | <type> | --textconv | --filters) [--path=<path>] <object>"
@@ -9864,7 +9909,7 @@
 "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
 "p | <类型> | --textconv | --filters) [--path=<路径>] <对象>"
 
-#: builtin/cat-file.c:595
+#: builtin/cat-file.c:596
 msgid ""
 "git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
 "filters]"
@@ -9872,71 +9917,71 @@
 "git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
 "filters]"
 
-#: builtin/cat-file.c:616
+#: builtin/cat-file.c:617
 msgid "only one batch option may be specified"
 msgstr "只能指定一个批处理选项"
 
-#: builtin/cat-file.c:634
+#: builtin/cat-file.c:635
 msgid "<type> can be one of: blob, tree, commit, tag"
 msgstr "<类型> 可以是其中之一:blob、tree、commit、tag"
 
-#: builtin/cat-file.c:635
+#: builtin/cat-file.c:636
 msgid "show object type"
 msgstr "显示对象类型"
 
-#: builtin/cat-file.c:636
+#: builtin/cat-file.c:637
 msgid "show object size"
 msgstr "显示对象大小"
 
-#: builtin/cat-file.c:638
+#: builtin/cat-file.c:639
 msgid "exit with zero when there's no error"
 msgstr "当没有错误时退出并返回零"
 
-#: builtin/cat-file.c:639
+#: builtin/cat-file.c:640
 msgid "pretty-print object's content"
 msgstr "美观地打印对象的内容"
 
-#: builtin/cat-file.c:641
+#: builtin/cat-file.c:642
 msgid "for blob objects, run textconv on object's content"
 msgstr "对于数据对象,对其内容做文本转换"
 
-#: builtin/cat-file.c:643
+#: builtin/cat-file.c:644
 msgid "for blob objects, run filters on object's content"
 msgstr "对于数据对象,对其内容做过滤"
 
-#: builtin/cat-file.c:644 git-submodule.sh:936
+#: builtin/cat-file.c:645 git-submodule.sh:936
 msgid "blob"
 msgstr "数据对象"
 
-#: builtin/cat-file.c:645
+#: builtin/cat-file.c:646
 msgid "use a specific path for --textconv/--filters"
 msgstr "对于 --textconv/--filters 使用一个特定的路径"
 
-#: builtin/cat-file.c:647
+#: builtin/cat-file.c:648
 msgid "allow -s and -t to work with broken/corrupt objects"
 msgstr "允许 -s 和 -t 对损坏的对象生效"
 
-#: builtin/cat-file.c:648
+#: builtin/cat-file.c:649
 msgid "buffer --batch output"
 msgstr "缓冲 --batch 的输出"
 
-#: builtin/cat-file.c:650
+#: builtin/cat-file.c:651
 msgid "show info and content of objects fed from the standard input"
 msgstr "显示从标准输入提供的对象的信息和内容"
 
-#: builtin/cat-file.c:654
+#: builtin/cat-file.c:655
 msgid "show info about objects fed from the standard input"
 msgstr "显示从标准输入提供的对象的信息"
 
-#: builtin/cat-file.c:658
+#: builtin/cat-file.c:659
 msgid "follow in-tree symlinks (used with --batch or --batch-check)"
 msgstr "跟随树内符号链接(和 --batch 或 --batch-check 共用)"
 
-#: builtin/cat-file.c:660
+#: builtin/cat-file.c:661
 msgid "show all objects with --batch or --batch-check"
 msgstr "使用 --batch 或 --batch-check 参数显示所有对象"
 
-#: builtin/cat-file.c:662
+#: builtin/cat-file.c:663
 msgid "do not order --batch-all-objects output"
 msgstr "不要对 --batch-all-objects 的输出排序"
 
@@ -9964,8 +10009,8 @@
 msgid "terminate input and output records by a NUL character"
 msgstr "输入和输出的记录使用 NUL 字符终结"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1433 builtin/gc.c:538
-#: builtin/worktree.c:507
+#: builtin/check-ignore.c:21 builtin/checkout.c:1433 builtin/gc.c:537
+#: builtin/worktree.c:506
 msgid "suppress progress reporting"
 msgstr "不显示进度报告"
 
@@ -10057,7 +10102,7 @@
 #: builtin/checkout-index.c:178 builtin/column.c:31
 #: builtin/submodule--helper.c:1373 builtin/submodule--helper.c:1376
 #: builtin/submodule--helper.c:1384 builtin/submodule--helper.c:1857
-#: builtin/worktree.c:680
+#: builtin/worktree.c:679
 msgid "string"
 msgstr "字符串"
 
@@ -10085,98 +10130,98 @@
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<选项>] [--source=<分支>] <文件>..."
 
-#: builtin/checkout.c:172 builtin/checkout.c:211
+#: builtin/checkout.c:173 builtin/checkout.c:212
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "路径 '%s' 没有我们的版本"
 
-#: builtin/checkout.c:174 builtin/checkout.c:213
+#: builtin/checkout.c:175 builtin/checkout.c:214
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "路径 '%s' 没有他们的版本"
 
-#: builtin/checkout.c:190
+#: builtin/checkout.c:191
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "路径 '%s' 没有全部必需的版本"
 
-#: builtin/checkout.c:240
+#: builtin/checkout.c:241
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "路径 '%s' 没有必需的版本"
 
-#: builtin/checkout.c:258
+#: builtin/checkout.c:259
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "path '%s':无法合并"
 
-#: builtin/checkout.c:274
+#: builtin/checkout.c:275
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "无法为 '%s' 添加合并结果"
 
-#: builtin/checkout.c:374
+#: builtin/checkout.c:375
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "重新创建了 %d 个合并冲突"
 msgstr[1] "重新创建了 %d 个合并冲突"
 
-#: builtin/checkout.c:379
+#: builtin/checkout.c:380
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "从 %2$s 更新了 %1$d 个路径"
 msgstr[1] "从 %2$s 更新了 %1$d 个路径"
 
-#: builtin/checkout.c:386
+#: builtin/checkout.c:387
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "从索引区更新了 %d 个路径"
 msgstr[1] "从索引区更新了 %d 个路径"
 
-#: builtin/checkout.c:409 builtin/checkout.c:412 builtin/checkout.c:415
-#: builtin/checkout.c:419
+#: builtin/checkout.c:410 builtin/checkout.c:413 builtin/checkout.c:416
+#: builtin/checkout.c:420
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "'%s' 不能在更新路径时使用"
 
-#: builtin/checkout.c:422 builtin/checkout.c:425
+#: builtin/checkout.c:423 builtin/checkout.c:426
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr "'%s' 不能和 %s 同时使用"
 
-#: builtin/checkout.c:429
+#: builtin/checkout.c:430
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr "不能同时更新路径并切换到分支'%s'。"
 
-#: builtin/checkout.c:433
+#: builtin/checkout.c:434
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "'%s' 或 '%s' 都没有指定"
 
-#: builtin/checkout.c:437
+#: builtin/checkout.c:438
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "未指定 '%2$s' 时,必须使用 '%1$s'"
 
-#: builtin/checkout.c:442 builtin/checkout.c:447
+#: builtin/checkout.c:443 builtin/checkout.c:448
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "'%s' 或 '%s' 不能和 %s 一起使用"
 
-#: builtin/checkout.c:506 builtin/checkout.c:513
+#: builtin/checkout.c:507 builtin/checkout.c:514
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "路径 '%s' 未合并"
 
-#: builtin/checkout.c:679
+#: builtin/checkout.c:680
 msgid "you need to resolve your current index first"
 msgstr "您需要先解决当前索引的冲突"
 
-#: builtin/checkout.c:729
+#: builtin/checkout.c:730
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -10185,11 +10230,6 @@
 "不能继续,下列文件有暂存的修改:\n"
 "%s"
 
-#: builtin/checkout.c:736
-#, c-format
-msgid "staged changes in the following files may be lost: %s"
-msgstr "下列文件暂存的修改可能会丢失:%s"
-
 #: builtin/checkout.c:833
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
@@ -10199,7 +10239,7 @@
 msgid "HEAD is now at"
 msgstr "HEAD 目前位于"
 
-#: builtin/checkout.c:879 builtin/clone.c:714
+#: builtin/checkout.c:879 builtin/clone.c:713
 msgid "unable to update HEAD"
 msgstr "不能更新 HEAD"
 
@@ -10312,7 +10352,7 @@
 "'%s' 既可以是一个本地文件,也可以是一个跟踪分支。\n"
 "请使用 --(和可选的 --no-guess)来消除歧义"
 
-#: builtin/checkout.c:1243 builtin/worktree.c:291 builtin/worktree.c:456
+#: builtin/checkout.c:1243 builtin/worktree.c:290 builtin/worktree.c:455
 #, c-format
 msgid "invalid reference: %s"
 msgstr "无效引用:%s"
@@ -10415,9 +10455,9 @@
 msgid "missing branch or commit argument"
 msgstr "缺少分支或提交参数"
 
-#: builtin/checkout.c:1437 builtin/clone.c:91 builtin/fetch.c:151
-#: builtin/merge.c:285 builtin/pull.c:137 builtin/push.c:575
-#: builtin/send-pack.c:174
+#: builtin/checkout.c:1437 builtin/clone.c:90 builtin/commit-graph.c:59
+#: builtin/commit-graph.c:180 builtin/fetch.c:166 builtin/merge.c:285
+#: builtin/pull.c:138 builtin/push.c:562 builtin/send-pack.c:174
 msgid "force progress reporting"
 msgstr "强制显示进度报告"
 
@@ -10425,7 +10465,7 @@
 msgid "perform a 3-way merge with the new branch"
 msgstr "和新的分支执行三方合并"
 
-#: builtin/checkout.c:1439 builtin/log.c:1617 parse-options.h:318
+#: builtin/checkout.c:1439 builtin/log.c:1618 parse-options.h:318
 msgid "style"
 msgstr "风格"
 
@@ -10433,7 +10473,7 @@
 msgid "conflict style (merge or diff3)"
 msgstr "冲突输出风格(merge 或 diff3)"
 
-#: builtin/checkout.c:1452 builtin/worktree.c:504
+#: builtin/checkout.c:1452 builtin/worktree.c:503
 msgid "detach HEAD at named commit"
 msgstr "HEAD 从指定的提交分离"
 
@@ -10547,9 +10587,9 @@
 "如果您总是喜欢使用模糊的简短分支名 <name>,而不喜欢如 'origin' 的远程\n"
 "仓库名,可以在配置中设置 checkout.defaultRemote=origin。"
 
-#: builtin/checkout.c:1691 builtin/checkout.c:1693 builtin/checkout.c:1733
-#: builtin/checkout.c:1735 builtin/clone.c:121 builtin/remote.c:169
-#: builtin/remote.c:171 builtin/worktree.c:500 builtin/worktree.c:502
+#: builtin/checkout.c:1691 builtin/checkout.c:1693 builtin/checkout.c:1742
+#: builtin/checkout.c:1744 builtin/clone.c:120 builtin/remote.c:169
+#: builtin/remote.c:171 builtin/worktree.c:499 builtin/worktree.c:501
 msgid "branch"
 msgstr "分支"
 
@@ -10573,39 +10613,39 @@
 msgid "use overlay mode (default)"
 msgstr "使用叠加模式(默认)"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1743
 msgid "create and switch to a new branch"
 msgstr "创建并切换一个新分支"
 
-#: builtin/checkout.c:1736
+#: builtin/checkout.c:1745
 msgid "create/reset and switch to a branch"
 msgstr "创建/重置并切换一个分支"
 
-#: builtin/checkout.c:1738
+#: builtin/checkout.c:1747
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "二次猜测 'git switch <无此分支>'"
 
-#: builtin/checkout.c:1740
+#: builtin/checkout.c:1749
 msgid "throw away local modifications"
 msgstr "丢弃本地修改"
 
-#: builtin/checkout.c:1772
+#: builtin/checkout.c:1781
 msgid "which tree-ish to checkout from"
 msgstr "要检出哪一个树"
 
-#: builtin/checkout.c:1774
+#: builtin/checkout.c:1783
 msgid "restore the index"
 msgstr "恢复索引"
 
-#: builtin/checkout.c:1776
+#: builtin/checkout.c:1785
 msgid "restore the working tree (default)"
 msgstr "恢复工作区(默认)"
 
-#: builtin/checkout.c:1778
+#: builtin/checkout.c:1787
 msgid "ignore unmerged entries"
 msgstr "忽略未合并条目"
 
-#: builtin/checkout.c:1779
+#: builtin/checkout.c:1788
 msgid "use overlay mode"
 msgstr "使用叠加模式"
 
@@ -10645,7 +10685,7 @@
 msgid "could not lstat %s\n"
 msgstr "不能对 %s 调用 lstat\n"
 
-#: builtin/clean.c:300 git-add--interactive.perl:593
+#: builtin/clean.c:301 git-add--interactive.perl:593
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -10658,7 +10698,7 @@
 "foo        - 通过唯一前缀选择一个选项\n"
 "           - (空)什么也不选择\n"
 
-#: builtin/clean.c:304 git-add--interactive.perl:602
+#: builtin/clean.c:305 git-add--interactive.perl:602
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -10679,38 +10719,38 @@
 "*          - 选择所有选项\n"
 "           - (空)结束选择\n"
 
-#: builtin/clean.c:520 git-add--interactive.perl:568
+#: builtin/clean.c:521 git-add--interactive.perl:568
 #: git-add--interactive.perl:573
 #, c-format, perl-format
 msgid "Huh (%s)?\n"
 msgstr "嗯(%s)?\n"
 
-#: builtin/clean.c:662
+#: builtin/clean.c:663
 #, c-format
 msgid "Input ignore patterns>> "
 msgstr "输入模版以排除条目>> "
 
-#: builtin/clean.c:699
+#: builtin/clean.c:700
 #, c-format
 msgid "WARNING: Cannot find items matched by: %s"
 msgstr "警告:无法找到和 %s 匹配的条目"
 
-#: builtin/clean.c:720
+#: builtin/clean.c:721
 msgid "Select items to delete"
 msgstr "选择要删除的条目"
 
 #. TRANSLATORS: Make sure to keep [y/N] as is
-#: builtin/clean.c:761
+#: builtin/clean.c:762
 #, c-format
 msgid "Remove %s [y/N]? "
 msgstr "删除 %s [y/N]?"
 
-#: builtin/clean.c:786 git-add--interactive.perl:1763
+#: builtin/clean.c:787 git-add--interactive.perl:1763
 #, c-format
 msgid "Bye.\n"
 msgstr "再见。\n"
 
-#: builtin/clean.c:794
+#: builtin/clean.c:795
 msgid ""
 "clean               - start cleaning\n"
 "filter by pattern   - exclude items from deletion\n"
@@ -10728,231 +10768,231 @@
 "help                - 显示本帮助\n"
 "?                   - 显示如何在提示符下选择的帮助"
 
-#: builtin/clean.c:821 git-add--interactive.perl:1849
+#: builtin/clean.c:822 git-add--interactive.perl:1849
 msgid "*** Commands ***"
 msgstr "*** 命令 ***"
 
-#: builtin/clean.c:822 git-add--interactive.perl:1846
+#: builtin/clean.c:823 git-add--interactive.perl:1846
 msgid "What now"
 msgstr "请选择"
 
-#: builtin/clean.c:830
+#: builtin/clean.c:831
 msgid "Would remove the following item:"
 msgid_plural "Would remove the following items:"
 msgstr[0] "将删除如下条目:"
 msgstr[1] "将删除如下条目:"
 
-#: builtin/clean.c:846
+#: builtin/clean.c:847
 msgid "No more files to clean, exiting."
 msgstr "没有要清理的文件,退出。"
 
-#: builtin/clean.c:908
+#: builtin/clean.c:909
 msgid "do not print names of files removed"
 msgstr "不打印删除文件的名称"
 
-#: builtin/clean.c:910
+#: builtin/clean.c:911
 msgid "force"
 msgstr "强制"
 
-#: builtin/clean.c:911
+#: builtin/clean.c:912
 msgid "interactive cleaning"
 msgstr "交互式清除"
 
-#: builtin/clean.c:913
+#: builtin/clean.c:914
 msgid "remove whole directories"
 msgstr "删除整个目录"
 
-#: builtin/clean.c:914 builtin/describe.c:546 builtin/describe.c:548
-#: builtin/grep.c:899 builtin/log.c:176 builtin/log.c:178
-#: builtin/ls-files.c:557 builtin/name-rev.c:413 builtin/name-rev.c:415
+#: builtin/clean.c:915 builtin/describe.c:548 builtin/describe.c:550
+#: builtin/grep.c:901 builtin/log.c:176 builtin/log.c:178
+#: builtin/ls-files.c:557 builtin/name-rev.c:417 builtin/name-rev.c:419
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr "模式"
 
-#: builtin/clean.c:915
+#: builtin/clean.c:916
 msgid "add <pattern> to ignore rules"
 msgstr "添加 <模式> 到忽略规则"
 
-#: builtin/clean.c:916
+#: builtin/clean.c:917
 msgid "remove ignored files, too"
 msgstr "也删除忽略的文件"
 
-#: builtin/clean.c:918
+#: builtin/clean.c:919
 msgid "remove only ignored files"
 msgstr "只删除忽略的文件"
 
-#: builtin/clean.c:936
+#: builtin/clean.c:937
 msgid "-x and -X cannot be used together"
 msgstr "-x 和 -X 不能同时使用"
 
-#: builtin/clean.c:940
+#: builtin/clean.c:941
 msgid ""
 "clean.requireForce set to true and neither -i, -n, nor -f given; refusing to "
 "clean"
 msgstr ""
 "clean.requireForce 设置为 true 且未提供 -i、-n 或 -f 选项,拒绝执行清理动作"
 
-#: builtin/clean.c:943
+#: builtin/clean.c:944
 msgid ""
 "clean.requireForce defaults to true and neither -i, -n, nor -f given; "
 "refusing to clean"
 msgstr ""
 "clean.requireForce 默认为 true 且未提供 -i、-n 或 -f 选项,拒绝执行清理动作"
 
-#: builtin/clone.c:46
+#: builtin/clone.c:45
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<选项>] [--] <仓库> [<路径>]"
 
-#: builtin/clone.c:93
+#: builtin/clone.c:92
 msgid "don't create a checkout"
 msgstr "不创建一个检出"
 
-#: builtin/clone.c:94 builtin/clone.c:96 builtin/init-db.c:489
+#: builtin/clone.c:93 builtin/clone.c:95 builtin/init-db.c:489
 msgid "create a bare repository"
 msgstr "创建一个纯仓库"
 
-#: builtin/clone.c:98
+#: builtin/clone.c:97
 msgid "create a mirror repository (implies bare)"
 msgstr "创建一个镜像仓库(也是纯仓库)"
 
-#: builtin/clone.c:100
+#: builtin/clone.c:99
 msgid "to clone from a local repository"
 msgstr "从本地仓库克隆"
 
-#: builtin/clone.c:102
+#: builtin/clone.c:101
 msgid "don't use local hardlinks, always copy"
 msgstr "不使用本地硬链接,始终复制"
 
-#: builtin/clone.c:104
+#: builtin/clone.c:103
 msgid "setup as shared repository"
 msgstr "设置为共享仓库"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:106
 msgid "pathspec"
 msgstr "路径规格"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:106
 msgid "initialize submodules in the clone"
 msgstr "在克隆时初始化子模组"
 
-#: builtin/clone.c:110
+#: builtin/clone.c:109
 msgid "number of submodules cloned in parallel"
 msgstr "并发克隆的子模组的数量"
 
-#: builtin/clone.c:111 builtin/init-db.c:486
+#: builtin/clone.c:110 builtin/init-db.c:486
 msgid "template-directory"
 msgstr "模板目录"
 
-#: builtin/clone.c:112 builtin/init-db.c:487
+#: builtin/clone.c:111 builtin/init-db.c:487
 msgid "directory from which templates will be used"
 msgstr "模板目录将被使用"
 
-#: builtin/clone.c:114 builtin/clone.c:116 builtin/submodule--helper.c:1380
+#: builtin/clone.c:113 builtin/clone.c:115 builtin/submodule--helper.c:1380
 #: builtin/submodule--helper.c:1860
 msgid "reference repository"
 msgstr "参考仓库"
 
-#: builtin/clone.c:118 builtin/submodule--helper.c:1382
+#: builtin/clone.c:117 builtin/submodule--helper.c:1382
 #: builtin/submodule--helper.c:1862
 msgid "use --reference only while cloning"
 msgstr "仅在克隆时参考 --reference 指向的本地仓库"
 
-#: builtin/clone.c:119 builtin/column.c:27 builtin/merge-file.c:46
-#: builtin/pack-objects.c:3314 builtin/repack.c:319
+#: builtin/clone.c:118 builtin/column.c:27 builtin/merge-file.c:46
+#: builtin/pack-objects.c:3294 builtin/repack.c:320
 msgid "name"
 msgstr "名称"
 
-#: builtin/clone.c:120
+#: builtin/clone.c:119
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "使用 <名称> 而不是 'origin' 去跟踪上游"
 
-#: builtin/clone.c:122
+#: builtin/clone.c:121
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "检出 <分支> 而不是远程 HEAD"
 
-#: builtin/clone.c:124
+#: builtin/clone.c:123
 msgid "path to git-upload-pack on the remote"
 msgstr "远程 git-upload-pack 路径"
 
-#: builtin/clone.c:125 builtin/fetch.c:152 builtin/grep.c:838
-#: builtin/pull.c:226
+#: builtin/clone.c:124 builtin/fetch.c:167 builtin/grep.c:840
+#: builtin/pull.c:227
 msgid "depth"
 msgstr "深度"
 
-#: builtin/clone.c:126
+#: builtin/clone.c:125
 msgid "create a shallow clone of that depth"
 msgstr "创建一个指定深度的浅克隆"
 
-#: builtin/clone.c:127 builtin/fetch.c:154 builtin/pack-objects.c:3303
+#: builtin/clone.c:126 builtin/fetch.c:169 builtin/pack-objects.c:3283
 msgid "time"
 msgstr "时间"
 
-#: builtin/clone.c:128
+#: builtin/clone.c:127
 msgid "create a shallow clone since a specific time"
 msgstr "从一个特定时间创建一个浅克隆"
 
-#: builtin/clone.c:129 builtin/fetch.c:156 builtin/fetch.c:179
-#: builtin/rebase.c:1395
+#: builtin/clone.c:128 builtin/fetch.c:171 builtin/fetch.c:194
+#: builtin/rebase.c:1417
 msgid "revision"
 msgstr "版本"
 
-#: builtin/clone.c:130 builtin/fetch.c:157
+#: builtin/clone.c:129 builtin/fetch.c:172
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "深化浅克隆的历史,除了特定版本"
 
-#: builtin/clone.c:132
+#: builtin/clone.c:131
 msgid "clone only one branch, HEAD or --branch"
 msgstr "只克隆一个分支、HEAD 或 --branch"
 
-#: builtin/clone.c:134
+#: builtin/clone.c:133
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr "不要克隆任何标签,并且后续获取操作也不下载它们"
 
-#: builtin/clone.c:136
+#: builtin/clone.c:135
 msgid "any cloned submodules will be shallow"
 msgstr "子模组将以浅下载模式克隆"
 
-#: builtin/clone.c:137 builtin/init-db.c:495
+#: builtin/clone.c:136 builtin/init-db.c:495
 msgid "gitdir"
 msgstr "git目录"
 
-#: builtin/clone.c:138 builtin/init-db.c:496
+#: builtin/clone.c:137 builtin/init-db.c:496
 msgid "separate git dir from working tree"
 msgstr "git目录和工作区分离"
 
-#: builtin/clone.c:139
+#: builtin/clone.c:138
 msgid "key=value"
 msgstr "key=value"
 
-#: builtin/clone.c:140
+#: builtin/clone.c:139
 msgid "set config inside the new repository"
 msgstr "在新仓库中设置配置信息"
 
-#: builtin/clone.c:142 builtin/fetch.c:174 builtin/ls-remote.c:76
-#: builtin/push.c:585 builtin/send-pack.c:172
+#: builtin/clone.c:141 builtin/fetch.c:189 builtin/ls-remote.c:76
+#: builtin/push.c:572 builtin/send-pack.c:172
 msgid "server-specific"
 msgstr "server-specific"
 
-#: builtin/clone.c:142 builtin/fetch.c:174 builtin/ls-remote.c:76
-#: builtin/push.c:585 builtin/send-pack.c:173
+#: builtin/clone.c:141 builtin/fetch.c:189 builtin/ls-remote.c:76
+#: builtin/push.c:572 builtin/send-pack.c:173
 msgid "option to transmit"
 msgstr "传输选项"
 
-#: builtin/clone.c:143 builtin/fetch.c:175 builtin/pull.c:239
-#: builtin/push.c:586
+#: builtin/clone.c:142 builtin/fetch.c:190 builtin/pull.c:240
+#: builtin/push.c:573
 msgid "use IPv4 addresses only"
 msgstr "只使用 IPv4 地址"
 
-#: builtin/clone.c:145 builtin/fetch.c:177 builtin/pull.c:242
-#: builtin/push.c:588
+#: builtin/clone.c:144 builtin/fetch.c:192 builtin/pull.c:243
+#: builtin/push.c:575
 msgid "use IPv6 addresses only"
 msgstr "只使用 IPv6 地址"
 
-#: builtin/clone.c:149
+#: builtin/clone.c:148
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "任何克隆的子模组将使用它们的远程跟踪分支"
 
-#: builtin/clone.c:285
+#: builtin/clone.c:284
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -10960,47 +11000,42 @@
 "无法猜到目录名。\n"
 "请在命令行指定一个目录"
 
-#: builtin/clone.c:338
+#: builtin/clone.c:337
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "info: 不能为 '%s' 添加一个备用:%s\n"
 
-#: builtin/clone.c:411
+#: builtin/clone.c:410
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s 存在且不是一个目录"
 
-#: builtin/clone.c:428
+#: builtin/clone.c:427
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "无法在 '%s' 上启动迭代器"
 
-#: builtin/clone.c:453
-#, c-format
-msgid "failed to unlink '%s'"
-msgstr "删除 '%s' 失败"
-
-#: builtin/clone.c:458
+#: builtin/clone.c:457
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "创建链接 '%s' 失败"
 
-#: builtin/clone.c:462
+#: builtin/clone.c:461
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "拷贝文件至 '%s' 失败"
 
-#: builtin/clone.c:467
+#: builtin/clone.c:466
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "无法在 '%s' 上迭代"
 
-#: builtin/clone.c:492
+#: builtin/clone.c:491
 #, c-format
 msgid "done.\n"
 msgstr "完成。\n"
 
-#: builtin/clone.c:506
+#: builtin/clone.c:505
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -11010,130 +11045,130 @@
 "您可以通过 'git status' 检查哪些已被检出,然后使用命令\n"
 "'git restore --source=HEAD :/' 重试\n"
 
-#: builtin/clone.c:583
+#: builtin/clone.c:582
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "不能发现要克隆的远程分支 %s。"
 
-#: builtin/clone.c:702
+#: builtin/clone.c:701
 #, c-format
 msgid "unable to update %s"
 msgstr "不能更新 %s"
 
-#: builtin/clone.c:752
+#: builtin/clone.c:751
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr "远程 HEAD 指向一个不存在的引用,无法检出。\n"
 
-#: builtin/clone.c:783
+#: builtin/clone.c:782
 msgid "unable to checkout working tree"
 msgstr "不能检出工作区"
 
-#: builtin/clone.c:833
+#: builtin/clone.c:832
 msgid "unable to write parameters to config file"
 msgstr "无法将参数写入配置文件"
 
-#: builtin/clone.c:896
+#: builtin/clone.c:895
 msgid "cannot repack to clean up"
 msgstr "无法执行 repack 来清理"
 
-#: builtin/clone.c:898
+#: builtin/clone.c:897
 msgid "cannot unlink temporary alternates file"
 msgstr "无法删除临时的 alternates 文件"
 
-#: builtin/clone.c:938 builtin/receive-pack.c:1950
+#: builtin/clone.c:937 builtin/receive-pack.c:1948
 msgid "Too many arguments."
 msgstr "太多参数。"
 
-#: builtin/clone.c:942
+#: builtin/clone.c:941
 msgid "You must specify a repository to clone."
 msgstr "您必须指定一个仓库来克隆。"
 
-#: builtin/clone.c:955
+#: builtin/clone.c:954
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "--bare 和 --origin %s 选项不兼容。"
 
-#: builtin/clone.c:958
+#: builtin/clone.c:957
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "--bare 和 --separate-git-dir 选项不兼容。"
 
-#: builtin/clone.c:971
+#: builtin/clone.c:970
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "仓库 '%s' 不存在"
 
-#: builtin/clone.c:977 builtin/fetch.c:1660
+#: builtin/clone.c:976 builtin/fetch.c:1790
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "深度 %s 不是一个正数"
 
-#: builtin/clone.c:987
+#: builtin/clone.c:986
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "目标路径 '%s' 已经存在,并且不是一个空目录。"
 
-#: builtin/clone.c:997
+#: builtin/clone.c:996
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "工作区 '%s' 已经存在。"
 
-#: builtin/clone.c:1012 builtin/clone.c:1033 builtin/difftool.c:264
-#: builtin/worktree.c:303 builtin/worktree.c:335
+#: builtin/clone.c:1011 builtin/clone.c:1032 builtin/difftool.c:271
+#: builtin/log.c:1785 builtin/worktree.c:302 builtin/worktree.c:334
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "不能为 '%s' 创建先导目录"
 
-#: builtin/clone.c:1017
+#: builtin/clone.c:1016
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "不能创建工作区目录 '%s'"
 
-#: builtin/clone.c:1037
+#: builtin/clone.c:1036
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "克隆到纯仓库 '%s'...\n"
 
-#: builtin/clone.c:1039
+#: builtin/clone.c:1038
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "正克隆到 '%s'...\n"
 
-#: builtin/clone.c:1063
+#: builtin/clone.c:1062
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
 msgstr "clone --recursive 和 --reference 以及 --reference-if-able 不兼容"
 
-#: builtin/clone.c:1124
+#: builtin/clone.c:1123
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "--depth 在本地克隆时被忽略,请改用 file:// 协议。"
 
-#: builtin/clone.c:1126
+#: builtin/clone.c:1125
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr "--shallow-since 在本地克隆时被忽略,请改用 file:// 协议。"
 
-#: builtin/clone.c:1128
+#: builtin/clone.c:1127
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr "--shallow-exclude 在本地克隆时被忽略,请改用 file:// 协议。"
 
-#: builtin/clone.c:1130
+#: builtin/clone.c:1129
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr "--filter 在本地克隆时被忽略,请改用 file:// 协议。"
 
-#: builtin/clone.c:1133
+#: builtin/clone.c:1132
 msgid "source repository is shallow, ignoring --local"
 msgstr "源仓库是浅克隆,忽略 --local"
 
-#: builtin/clone.c:1138
+#: builtin/clone.c:1137
 msgid "--local is ignored"
 msgstr "--local 被忽略"
 
-#: builtin/clone.c:1215 builtin/clone.c:1223
+#: builtin/clone.c:1212 builtin/clone.c:1220
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "远程分支 %s 在上游 %s 未发现"
 
-#: builtin/clone.c:1226
+#: builtin/clone.c:1223
 msgid "You appear to have cloned an empty repository."
 msgstr "您似乎克隆了一个空仓库。"
 
@@ -11211,7 +11246,7 @@
 msgstr "父提交对象 ID"
 
 #: builtin/commit-tree.c:114 builtin/commit.c:1500 builtin/merge.c:270
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1460
+#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1469
 #: builtin/tag.c:412
 msgid "message"
 msgstr "说明"
@@ -11225,7 +11260,7 @@
 msgstr "从文件中读取提交说明"
 
 #: builtin/commit-tree.c:121 builtin/commit.c:1512 builtin/merge.c:287
-#: builtin/pull.c:194 builtin/revert.c:118
+#: builtin/pull.c:195 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "GPG 提交签名"
 
@@ -11546,8 +11581,8 @@
 msgid "version"
 msgstr "版本"
 
-#: builtin/commit.c:1347 builtin/commit.c:1529 builtin/push.c:561
-#: builtin/worktree.c:651
+#: builtin/commit.c:1347 builtin/commit.c:1529 builtin/push.c:548
+#: builtin/worktree.c:650
 msgid "machine-readable output"
 msgstr "机器可读的输出"
 
@@ -11560,8 +11595,8 @@
 msgstr "条目以 NUL 字符结尾"
 
 #: builtin/commit.c:1355 builtin/commit.c:1359 builtin/commit.c:1537
-#: builtin/fast-export.c:1125 builtin/fast-export.c:1128
-#: builtin/fast-export.c:1131 builtin/rebase.c:1471 parse-options.h:332
+#: builtin/fast-export.c:1153 builtin/fast-export.c:1156
+#: builtin/fast-export.c:1159 builtin/rebase.c:1495 parse-options.h:332
 msgid "mode"
 msgstr "模式"
 
@@ -11576,7 +11611,7 @@
 msgstr ""
 "显示已忽略的文件,可选模式:traditional、matching、no。(默认:traditional)"
 
-#: builtin/commit.c:1362 parse-options.h:179
+#: builtin/commit.c:1362 parse-options.h:188
 msgid "when"
 msgstr "何时"
 
@@ -11627,7 +11662,7 @@
 msgid "override author for commit"
 msgstr "提交时覆盖作者"
 
-#: builtin/commit.c:1499 builtin/gc.c:539
+#: builtin/commit.c:1499 builtin/gc.c:538
 msgid "date"
 msgstr "日期"
 
@@ -11660,8 +11695,8 @@
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr "现在将该提交的作者改为我(和 -C/-c/--amend 参数共用)"
 
-#: builtin/commit.c:1506 builtin/log.c:1564 builtin/merge.c:289
-#: builtin/pull.c:163 builtin/revert.c:110
+#: builtin/commit.c:1506 builtin/log.c:1565 builtin/merge.c:289
+#: builtin/pull.c:164 builtin/revert.c:110
 msgid "add Signed-off-by:"
 msgstr "添加 Signed-off-by: 签名"
 
@@ -11767,64 +11802,69 @@
 msgstr "git commit-graph read [--object-dir <对象目录>]"
 
 #: builtin/commit-graph.c:13 builtin/commit-graph.c:19
-msgid "git commit-graph verify [--object-dir <objdir>] [--shallow]"
-msgstr "git commit-graph verify [--object-dir <对象目录>] [--shallow]"
+msgid ""
+"git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
+msgstr ""
+"git commit-graph verify [--object-dir <对象目录>] [--shallow] [--"
+"[no-]progress]"
 
 #: builtin/commit-graph.c:14 builtin/commit-graph.c:29
 msgid ""
 "git commit-graph write [--object-dir <objdir>] [--append|--split] [--"
-"reachable|--stdin-packs|--stdin-commits] <split options>"
-msgstr "git commit-graph write [--object-dir <对象目录>] [--append|--split] [--reachable|--stdin-packs|--stdin-commits] <split options>"
+"reachable|--stdin-packs|--stdin-commits] [--[no-]progress] <split options>"
+msgstr ""
+"git commit-graph write [--object-dir <对象目录>] [--append|--split] [--"
+"reachable|--stdin-packs|--stdin-commits] [--[no-]progress] <split options>"
 
-#: builtin/commit-graph.c:54 builtin/commit-graph.c:100
-#: builtin/commit-graph.c:161 builtin/commit-graph.c:237 builtin/fetch.c:163
-#: builtin/log.c:1584
+#: builtin/commit-graph.c:55 builtin/commit-graph.c:107
+#: builtin/commit-graph.c:170 builtin/commit-graph.c:254 builtin/fetch.c:178
+#: builtin/log.c:1585
 msgid "dir"
 msgstr "目录"
 
-#: builtin/commit-graph.c:55 builtin/commit-graph.c:101
-#: builtin/commit-graph.c:162 builtin/commit-graph.c:238
+#: builtin/commit-graph.c:56 builtin/commit-graph.c:108
+#: builtin/commit-graph.c:171 builtin/commit-graph.c:255
 msgid "The object directory to store the graph"
 msgstr "保存图形的对象目录"
 
-#: builtin/commit-graph.c:57
+#: builtin/commit-graph.c:58
 msgid "if the commit-graph is split, only verify the tip file"
 msgstr "如果提交图形被拆分,只验证头一个文件"
 
-#: builtin/commit-graph.c:73 builtin/commit-graph.c:116
+#: builtin/commit-graph.c:80 builtin/commit-graph.c:125
 #, c-format
 msgid "Could not open commit-graph '%s'"
 msgstr "无法打开提交图形 '%s'"
 
-#: builtin/commit-graph.c:164
+#: builtin/commit-graph.c:173
 msgid "start walk at all refs"
 msgstr "开始遍历所有引用"
 
-#: builtin/commit-graph.c:166
+#: builtin/commit-graph.c:175
 msgid "scan pack-indexes listed by stdin for commits"
 msgstr "从标准输入中的包索引文件列表中扫描提交"
 
-#: builtin/commit-graph.c:168
+#: builtin/commit-graph.c:177
 msgid "start walk at commits listed by stdin"
 msgstr "从标准输入中的提交开始扫描"
 
-#: builtin/commit-graph.c:170
+#: builtin/commit-graph.c:179
 msgid "include all commits already in the commit-graph file"
 msgstr "包含 commit-graph 文件中已有所有提交"
 
-#: builtin/commit-graph.c:172
+#: builtin/commit-graph.c:182
 msgid "allow writing an incremental commit-graph file"
 msgstr "允许写一个增量提交图形文件"
 
-#: builtin/commit-graph.c:174 builtin/commit-graph.c:178
+#: builtin/commit-graph.c:184 builtin/commit-graph.c:188
 msgid "maximum number of commits in a non-base split commit-graph"
 msgstr "在非基本拆分提交图形中的最大提交数"
 
-#: builtin/commit-graph.c:176
+#: builtin/commit-graph.c:186
 msgid "maximum ratio between two levels of a split commit-graph"
 msgstr "一个拆分提交图形的两个级别之间的最大比率"
 
-#: builtin/commit-graph.c:191
+#: builtin/commit-graph.c:204
 msgid "use at most one of --reachable, --stdin-commits, or --stdin-packs"
 msgstr "不能同时使用 --reachable、--stdin-commits 或 --stdin-packs"
 
@@ -12136,57 +12176,57 @@
 msgid "print sizes in human readable format"
 msgstr "以用户可读的格式显示大小"
 
-#: builtin/describe.c:27
+#: builtin/describe.c:26
 msgid "git describe [<options>] [<commit-ish>...]"
 msgstr "git describe [<选项>] [<提交号>...]"
 
-#: builtin/describe.c:28
+#: builtin/describe.c:27
 msgid "git describe [<options>] --dirty"
 msgstr "git describe [<选项>] --dirty"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "head"
 msgstr "头"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "lightweight"
 msgstr "轻量级的"
 
-#: builtin/describe.c:63
+#: builtin/describe.c:62
 msgid "annotated"
 msgstr "附注的"
 
-#: builtin/describe.c:273
+#: builtin/describe.c:275
 #, c-format
 msgid "annotated tag %s not available"
 msgstr "附注标签 %s 无效"
 
-#: builtin/describe.c:277
+#: builtin/describe.c:279
 #, c-format
 msgid "annotated tag %s has no embedded name"
 msgstr "附注标签 %s 没有嵌入名称"
 
-#: builtin/describe.c:279
+#: builtin/describe.c:281
 #, c-format
 msgid "tag '%s' is really '%s' here"
 msgstr "标签 '%s' 的确是在 '%s'"
 
-#: builtin/describe.c:323
+#: builtin/describe.c:325
 #, c-format
 msgid "no tag exactly matches '%s'"
 msgstr "没有标签准确匹配 '%s'"
 
-#: builtin/describe.c:325
+#: builtin/describe.c:327
 #, c-format
 msgid "No exact match on refs or tags, searching to describe\n"
 msgstr "没有精确匹配到引用或标签,继续搜索进行描述\n"
 
-#: builtin/describe.c:379
+#: builtin/describe.c:381
 #, c-format
 msgid "finished search at %s\n"
 msgstr "完成搜索 %s\n"
 
-#: builtin/describe.c:405
+#: builtin/describe.c:407
 #, c-format
 msgid ""
 "No annotated tags can describe '%s'.\n"
@@ -12195,7 +12235,7 @@
 "没有附注标签能描述 '%s'。\n"
 "然而,存在未附注标签:尝试 --tags。"
 
-#: builtin/describe.c:409
+#: builtin/describe.c:411
 #, c-format
 msgid ""
 "No tags can describe '%s'.\n"
@@ -12204,12 +12244,12 @@
 "没有标签能描述 '%s'。\n"
 "尝试 --always,或者创建一些标签。"
 
-#: builtin/describe.c:439
+#: builtin/describe.c:441
 #, c-format
 msgid "traversed %lu commits\n"
 msgstr "已遍历 %lu 个提交\n"
 
-#: builtin/describe.c:442
+#: builtin/describe.c:444
 #, c-format
 msgid ""
 "more than %i tags found; listed %i most recent\n"
@@ -12218,90 +12258,90 @@
 "发现多于 %i 个标签,列出最近的 %i 个\n"
 "在 %s 放弃搜索\n"
 
-#: builtin/describe.c:510
+#: builtin/describe.c:512
 #, c-format
 msgid "describe %s\n"
 msgstr "描述 %s\n"
 
-#: builtin/describe.c:513
+#: builtin/describe.c:515
 #, c-format
 msgid "Not a valid object name %s"
 msgstr "不是一个有效的对象名 %s"
 
-#: builtin/describe.c:521
+#: builtin/describe.c:523
 #, c-format
 msgid "%s is neither a commit nor blob"
 msgstr "%s 既不是提交也不是数据对象"
 
-#: builtin/describe.c:535
+#: builtin/describe.c:537
 msgid "find the tag that comes after the commit"
 msgstr "寻找该提交之后的标签"
 
-#: builtin/describe.c:536
+#: builtin/describe.c:538
 msgid "debug search strategy on stderr"
 msgstr "在标准错误上调试搜索策略"
 
-#: builtin/describe.c:537
+#: builtin/describe.c:539
 msgid "use any ref"
 msgstr "使用任意引用"
 
-#: builtin/describe.c:538
+#: builtin/describe.c:540
 msgid "use any tag, even unannotated"
 msgstr "使用任意标签,即使未附带注释"
 
-#: builtin/describe.c:539
+#: builtin/describe.c:541
 msgid "always use long format"
 msgstr "始终使用长提交号格式"
 
-#: builtin/describe.c:540
+#: builtin/describe.c:542
 msgid "only follow first parent"
 msgstr "只跟随第一个父提交"
 
-#: builtin/describe.c:543
+#: builtin/describe.c:545
 msgid "only output exact matches"
 msgstr "只输出精确匹配"
 
-#: builtin/describe.c:545
+#: builtin/describe.c:547
 msgid "consider <n> most recent tags (default: 10)"
 msgstr "考虑最近 <n> 个标签(默认:10)"
 
-#: builtin/describe.c:547
+#: builtin/describe.c:549
 msgid "only consider tags matching <pattern>"
 msgstr "只考虑匹配 <模式> 的标签"
 
-#: builtin/describe.c:549
+#: builtin/describe.c:551
 msgid "do not consider tags matching <pattern>"
 msgstr "不考虑匹配 <模式> 的标签"
 
-#: builtin/describe.c:551 builtin/name-rev.c:422
+#: builtin/describe.c:553 builtin/name-rev.c:426
 msgid "show abbreviated commit object as fallback"
 msgstr "显示简写的提交号作为后备"
 
-#: builtin/describe.c:552 builtin/describe.c:555
+#: builtin/describe.c:554 builtin/describe.c:557
 msgid "mark"
 msgstr "标记"
 
-#: builtin/describe.c:553
+#: builtin/describe.c:555
 msgid "append <mark> on dirty working tree (default: \"-dirty\")"
 msgstr "对于脏工作区,追加 <标记>(默认:\"-dirty\")"
 
-#: builtin/describe.c:556
+#: builtin/describe.c:558
 msgid "append <mark> on broken working tree (default: \"-broken\")"
 msgstr "对于损坏的工作区,追加 <标记>(默认:\"-broken\")"
 
-#: builtin/describe.c:574
+#: builtin/describe.c:576
 msgid "--long is incompatible with --abbrev=0"
 msgstr "--long 与 --abbrev=0 不兼容"
 
-#: builtin/describe.c:603
+#: builtin/describe.c:605
 msgid "No names found, cannot describe anything."
 msgstr "没有发现名称,无法描述任何东西。"
 
-#: builtin/describe.c:654
+#: builtin/describe.c:656
 msgid "--dirty is incompatible with commit-ishes"
 msgstr "--dirty 与提交号不兼容"
 
-#: builtin/describe.c:656
+#: builtin/describe.c:658
 msgid "--broken is incompatible with commit-ishes"
 msgstr "--broken 与提交号不兼容"
 
@@ -12338,27 +12378,27 @@
 msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
 msgstr "git difftool [<选项>] [<提交> [<提交>]] [--] [<路径>...]"
 
-#: builtin/difftool.c:253
+#: builtin/difftool.c:260
 #, c-format
 msgid "failed: %d"
 msgstr "失败:%d"
 
-#: builtin/difftool.c:295
+#: builtin/difftool.c:302
 #, c-format
 msgid "could not read symlink %s"
 msgstr "无法读取符号链接 %s"
 
-#: builtin/difftool.c:297
+#: builtin/difftool.c:304
 #, c-format
 msgid "could not read symlink file %s"
 msgstr "无法读取符号链接文件 %s"
 
-#: builtin/difftool.c:305
+#: builtin/difftool.c:312
 #, c-format
 msgid "could not read object %s for symlink %s"
 msgstr "无法读取符号链接 %2$s 指向的对象 %1$s"
 
-#: builtin/difftool.c:406
+#: builtin/difftool.c:413
 msgid ""
 "combined diff formats('-c' and '--cc') are not supported in\n"
 "directory diff mode('-d' and '--dir-diff')."
@@ -12366,83 +12406,83 @@
 "不支持在目录比较模式('-d' 和 '--dir-diff')中采用组合差异格式('-c' 和 '--"
 "cc')。"
 
-#: builtin/difftool.c:626
+#: builtin/difftool.c:634
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "两个文件都被修改:'%s' 和 '%s'。"
 
-#: builtin/difftool.c:628
+#: builtin/difftool.c:636
 msgid "working tree file has been left."
 msgstr "工作区文件被留了下来。"
 
-#: builtin/difftool.c:639
+#: builtin/difftool.c:647
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "临时文件存在于 '%s'。"
 
-#: builtin/difftool.c:640
+#: builtin/difftool.c:648
 msgid "you may want to cleanup or recover these."
 msgstr "您可能想要清理或者恢复它们。"
 
-#: builtin/difftool.c:689
+#: builtin/difftool.c:697
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr "使用 `diff.guitool` 代替 `diff.tool`"
 
-#: builtin/difftool.c:691
+#: builtin/difftool.c:699
 msgid "perform a full-directory diff"
 msgstr "执行一个全目录差异比较"
 
-#: builtin/difftool.c:693
+#: builtin/difftool.c:701
 msgid "do not prompt before launching a diff tool"
 msgstr "启动差异比较工具之前不提示"
 
-#: builtin/difftool.c:698
+#: builtin/difftool.c:706
 msgid "use symlinks in dir-diff mode"
 msgstr "在 dir-diff 模式中使用符号链接"
 
-#: builtin/difftool.c:699
+#: builtin/difftool.c:707
 msgid "tool"
 msgstr "工具"
 
-#: builtin/difftool.c:700
+#: builtin/difftool.c:708
 msgid "use the specified diff tool"
 msgstr "使用指定的差异比较工具"
 
-#: builtin/difftool.c:702
+#: builtin/difftool.c:710
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr "显示可以用在 `--tool` 参数后的差异工具列表"
 
-#: builtin/difftool.c:705
+#: builtin/difftool.c:713
 msgid ""
 "make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
 "code"
 msgstr "当执行 diff 工具返回非零退出码时,使 'git-difftool' 退出"
 
-#: builtin/difftool.c:708
+#: builtin/difftool.c:716
 msgid "specify a custom command for viewing diffs"
 msgstr "指定一个用于查看差异的自定义命令"
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:717
 msgid "passed to `diff`"
 msgstr "传递给 `diff`"
 
-#: builtin/difftool.c:724
+#: builtin/difftool.c:732
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool 要求工作区或者 --no-index"
 
-#: builtin/difftool.c:731
+#: builtin/difftool.c:739
 msgid "--dir-diff is incompatible with --no-index"
 msgstr "--dir-diff 和 --no-index 不兼容"
 
-#: builtin/difftool.c:734
+#: builtin/difftool.c:742
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr "--gui、--tool 和 --extcmd 互斥"
 
-#: builtin/difftool.c:742
+#: builtin/difftool.c:750
 msgid "no <tool> given for --tool=<tool>"
 msgstr "没有为 --tool=<工具> 参数提供 <工具>"
 
-#: builtin/difftool.c:749
+#: builtin/difftool.c:757
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "没有为 --extcmd=<命令> 参数提供 <命令>"
 
@@ -12478,245 +12518,269 @@
 msgid "git fast-export [rev-list-opts]"
 msgstr "git fast-export [rev-list-opts]"
 
-#: builtin/fast-export.c:1124
+#: builtin/fast-export.c:852
+msgid "Error: Cannot export nested tags unless --mark-tags is specified."
+msgstr "错误:除非指定 --mark-tags,否则无法导出嵌套标签。"
+
+#: builtin/fast-export.c:1152
 msgid "show progress after <n> objects"
 msgstr "在 <n> 个对象之后显示进度"
 
-#: builtin/fast-export.c:1126
+#: builtin/fast-export.c:1154
 msgid "select handling of signed tags"
 msgstr "选择如何处理签名标签"
 
-#: builtin/fast-export.c:1129
+#: builtin/fast-export.c:1157
 msgid "select handling of tags that tag filtered objects"
 msgstr "选择当标签指向被过滤对象时该标签的处理方式"
 
-#: builtin/fast-export.c:1132
+#: builtin/fast-export.c:1160
 msgid "select handling of commit messages in an alternate encoding"
 msgstr "选择使用备用编码处理提交说明"
 
-#: builtin/fast-export.c:1135
+#: builtin/fast-export.c:1163
 msgid "Dump marks to this file"
 msgstr "把标记存储到这个文件"
 
-#: builtin/fast-export.c:1137
+#: builtin/fast-export.c:1165
 msgid "Import marks from this file"
 msgstr "从这个文件导入标记"
 
-#: builtin/fast-export.c:1139
+#: builtin/fast-export.c:1169
+msgid "Import marks from this file if it exists"
+msgstr "从该文件导入标记(如果存在的话)"
+
+#: builtin/fast-export.c:1171
 msgid "Fake a tagger when tags lack one"
 msgstr "当标签缺少标记者字段时,假装提供一个"
 
-#: builtin/fast-export.c:1141
+#: builtin/fast-export.c:1173
 msgid "Output full tree for each commit"
 msgstr "每次提交都输出整个树"
 
-#: builtin/fast-export.c:1143
+#: builtin/fast-export.c:1175
 msgid "Use the done feature to terminate the stream"
 msgstr "使用 done 功能来终止流"
 
-#: builtin/fast-export.c:1144
+#: builtin/fast-export.c:1176
 msgid "Skip output of blob data"
 msgstr "跳过数据对象的输出"
 
-#: builtin/fast-export.c:1145 builtin/log.c:1632
+#: builtin/fast-export.c:1177 builtin/log.c:1633
 msgid "refspec"
 msgstr "引用规格"
 
-#: builtin/fast-export.c:1146
+#: builtin/fast-export.c:1178
 msgid "Apply refspec to exported refs"
 msgstr "对导出的引用应用引用规格"
 
-#: builtin/fast-export.c:1147
+#: builtin/fast-export.c:1179
 msgid "anonymize output"
 msgstr "匿名输出"
 
-#: builtin/fast-export.c:1149
+#: builtin/fast-export.c:1181
 msgid "Reference parents which are not in fast-export stream by object id"
 msgstr "引用父对象 ID 不在 fast-export 流中"
 
-#: builtin/fast-export.c:1151
+#: builtin/fast-export.c:1183
 msgid "Show original object ids of blobs/commits"
 msgstr "显示数据对象/提交的原始对象 ID"
 
-#: builtin/fetch.c:30
+#: builtin/fast-export.c:1185
+msgid "Label tags with mark ids"
+msgstr "对带有标记 ID 的标签做标记"
+
+#: builtin/fast-export.c:1220
+msgid "Cannot pass both --import-marks and --import-marks-if-exists"
+msgstr "不能同时传递参数 --import-marks 和 --import-marks-if-exists"
+
+#: builtin/fetch.c:34
 msgid "git fetch [<options>] [<repository> [<refspec>...]]"
 msgstr "git fetch [<选项>] [<仓库> [<引用规格>...]]"
 
-#: builtin/fetch.c:31
+#: builtin/fetch.c:35
 msgid "git fetch [<options>] <group>"
 msgstr "git fetch [<选项>] <组>"
 
-#: builtin/fetch.c:32
+#: builtin/fetch.c:36
 msgid "git fetch --multiple [<options>] [(<repository> | <group>)...]"
 msgstr "git fetch --multiple [<选项>] [(<仓库> | <组>)...]"
 
-#: builtin/fetch.c:33
+#: builtin/fetch.c:37
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<选项>]"
 
-#: builtin/fetch.c:125 builtin/pull.c:203
+#: builtin/fetch.c:115
+msgid "fetch.parallel cannot be negative"
+msgstr "fetch.parallel 不能为负数"
+
+#: builtin/fetch.c:138 builtin/pull.c:204
 msgid "fetch from all remotes"
 msgstr "从所有的远程抓取"
 
-#: builtin/fetch.c:127 builtin/pull.c:206
+#: builtin/fetch.c:140 builtin/pull.c:248
+msgid "set upstream for git pull/fetch"
+msgstr "为 git pull/fetch 设置上游"
+
+#: builtin/fetch.c:142 builtin/pull.c:207
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "追加到 .git/FETCH_HEAD 而不是覆盖它"
 
-#: builtin/fetch.c:129 builtin/pull.c:209
+#: builtin/fetch.c:144 builtin/pull.c:210
 msgid "path to upload pack on remote end"
 msgstr "上传包到远程的路径"
 
-#: builtin/fetch.c:130
+#: builtin/fetch.c:145
 msgid "force overwrite of local reference"
 msgstr "强制覆盖本地引用"
 
-#: builtin/fetch.c:132
+#: builtin/fetch.c:147
 msgid "fetch from multiple remotes"
 msgstr "从多个远程抓取"
 
-#: builtin/fetch.c:134 builtin/pull.c:213
+#: builtin/fetch.c:149 builtin/pull.c:214
 msgid "fetch all tags and associated objects"
 msgstr "抓取所有的标签和关联对象"
 
-#: builtin/fetch.c:136
+#: builtin/fetch.c:151
 msgid "do not fetch all tags (--no-tags)"
 msgstr "不抓取任何标签(--no-tags)"
 
-#: builtin/fetch.c:138
+#: builtin/fetch.c:153
 msgid "number of submodules fetched in parallel"
 msgstr "子模组获取的并发数"
 
-#: builtin/fetch.c:140 builtin/pull.c:216
+#: builtin/fetch.c:155 builtin/pull.c:217
 msgid "prune remote-tracking branches no longer on remote"
 msgstr "清除远程已经不存在的分支的跟踪分支"
 
-#: builtin/fetch.c:142
+#: builtin/fetch.c:157
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr "清除远程不存在的本地标签,并且替换变更标签"
 
 #  译者:可选值,不能翻译
-#: builtin/fetch.c:143 builtin/fetch.c:166 builtin/pull.c:140
+#: builtin/fetch.c:158 builtin/fetch.c:181 builtin/pull.c:141
 msgid "on-demand"
 msgstr "on-demand"
 
-#: builtin/fetch.c:144
+#: builtin/fetch.c:159
 msgid "control recursive fetching of submodules"
 msgstr "控制子模组的递归抓取"
 
-#: builtin/fetch.c:148 builtin/pull.c:224
+#: builtin/fetch.c:163 builtin/pull.c:225
 msgid "keep downloaded pack"
 msgstr "保持下载包"
 
-#: builtin/fetch.c:150
+#: builtin/fetch.c:165
 msgid "allow updating of HEAD ref"
 msgstr "允许更新 HEAD 引用"
 
-#: builtin/fetch.c:153 builtin/fetch.c:159 builtin/pull.c:227
+#: builtin/fetch.c:168 builtin/fetch.c:174 builtin/pull.c:228
 msgid "deepen history of shallow clone"
 msgstr "深化浅克隆的历史"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:170
 msgid "deepen history of shallow repository based on time"
 msgstr "基于时间来深化浅克隆的历史"
 
-#: builtin/fetch.c:161 builtin/pull.c:230
+#: builtin/fetch.c:176 builtin/pull.c:231
 msgid "convert to a complete repository"
 msgstr "转换为一个完整的仓库"
 
-#: builtin/fetch.c:164
+#: builtin/fetch.c:179
 msgid "prepend this to submodule path output"
 msgstr "在子模组路径输出的前面加上此目录"
 
-#: builtin/fetch.c:167
+#: builtin/fetch.c:182
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
 msgstr "递归获取子模组的缺省值(比配置文件优先级低)"
 
-#: builtin/fetch.c:171 builtin/pull.c:233
+#: builtin/fetch.c:186 builtin/pull.c:234
 msgid "accept refs that update .git/shallow"
 msgstr "接受更新 .git/shallow 的引用"
 
-#: builtin/fetch.c:172 builtin/pull.c:235
+#: builtin/fetch.c:187 builtin/pull.c:236
 msgid "refmap"
 msgstr "引用映射"
 
-#: builtin/fetch.c:173 builtin/pull.c:236
+#: builtin/fetch.c:188 builtin/pull.c:237
 msgid "specify fetch refmap"
 msgstr "指定获取操作的引用映射"
 
-#: builtin/fetch.c:180
+#: builtin/fetch.c:195
 msgid "report that we have only objects reachable from this object"
 msgstr "报告我们只拥有从该对象开始可达的对象"
 
-#: builtin/fetch.c:183
+#: builtin/fetch.c:198
 msgid "run 'gc --auto' after fetching"
 msgstr "获取后执行 'gc --auto'"
 
-#: builtin/fetch.c:185 builtin/pull.c:245
+#: builtin/fetch.c:200 builtin/pull.c:246
 msgid "check for forced-updates on all updated branches"
 msgstr "在所有更新分支上检查强制更新"
 
-#: builtin/fetch.c:491
+#: builtin/fetch.c:510
 msgid "Couldn't find remote ref HEAD"
 msgstr "无法发现远程 HEAD 引用"
 
-#: builtin/fetch.c:630
+#: builtin/fetch.c:650
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
 msgstr "配置变量 fetch.output 包含无效值 %s"
 
-#: builtin/fetch.c:728
+#: builtin/fetch.c:748
 #, c-format
 msgid "object %s not found"
 msgstr "对象 %s 未发现"
 
-#: builtin/fetch.c:732
+#: builtin/fetch.c:752
 msgid "[up to date]"
 msgstr "[最新]"
 
-#: builtin/fetch.c:745 builtin/fetch.c:761 builtin/fetch.c:833
+#: builtin/fetch.c:765 builtin/fetch.c:781 builtin/fetch.c:853
 msgid "[rejected]"
 msgstr "[已拒绝]"
 
-#: builtin/fetch.c:746
+#: builtin/fetch.c:766
 msgid "can't fetch in current branch"
 msgstr "当前分支下不能执行获取操作"
 
-#: builtin/fetch.c:756
+#: builtin/fetch.c:776
 msgid "[tag update]"
 msgstr "[标签更新]"
 
-#: builtin/fetch.c:757 builtin/fetch.c:794 builtin/fetch.c:816
-#: builtin/fetch.c:828
+#: builtin/fetch.c:777 builtin/fetch.c:814 builtin/fetch.c:836
+#: builtin/fetch.c:848
 msgid "unable to update local ref"
 msgstr "不能更新本地引用"
 
-#: builtin/fetch.c:761
+#: builtin/fetch.c:781
 msgid "would clobber existing tag"
 msgstr "会破坏现有的标签"
 
-#: builtin/fetch.c:783
+#: builtin/fetch.c:803
 msgid "[new tag]"
 msgstr "[新标签]"
 
-#: builtin/fetch.c:786
+#: builtin/fetch.c:806
 msgid "[new branch]"
 msgstr "[新分支]"
 
-#: builtin/fetch.c:789
+#: builtin/fetch.c:809
 msgid "[new ref]"
 msgstr "[新引用]"
 
-#: builtin/fetch.c:828
+#: builtin/fetch.c:848
 msgid "forced update"
 msgstr "强制更新"
 
-#: builtin/fetch.c:833
+#: builtin/fetch.c:853
 msgid "non-fast-forward"
 msgstr "非快进"
 
-#: builtin/fetch.c:854
+#: builtin/fetch.c:874
 msgid ""
 "Fetch normally indicates which branches had a forced update,\n"
 "but that check has been disabled. To re-enable, use '--show-forced-updates'\n"
@@ -12726,7 +12790,7 @@
 "要重新启用,请使用 '--show-forced-updates' 选项或运行\n"
 "'git config fetch.showForcedUpdates true'。"
 
-#: builtin/fetch.c:858
+#: builtin/fetch.c:878
 #, c-format
 msgid ""
 "It took %.2f seconds to check forced updates. You can use\n"
@@ -12737,22 +12801,22 @@
 "花了 %.2f 秒来检查强制更新。您可以使用 '--no-show-forced-updates'\n"
 "或运行 'git config fetch.showForcedUpdates false' 以避免此项检查。\n"
 
-#: builtin/fetch.c:888
+#: builtin/fetch.c:908
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s 未发送所有必需的对象\n"
 
-#: builtin/fetch.c:909
+#: builtin/fetch.c:929
 #, c-format
 msgid "reject %s because shallow roots are not allowed to be updated"
 msgstr "拒绝 %s 因为浅克隆不允许被更新"
 
-#: builtin/fetch.c:1000 builtin/fetch.c:1131
+#: builtin/fetch.c:1020 builtin/fetch.c:1157
 #, c-format
 msgid "From %.*s\n"
 msgstr "来自 %.*s\n"
 
-#: builtin/fetch.c:1011
+#: builtin/fetch.c:1031
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -12762,100 +12826,123 @@
 " 'git remote prune %s' 来删除旧的、有冲突的分支"
 
 #  译者:注意保持前导空格
-#: builtin/fetch.c:1101
+#: builtin/fetch.c:1127
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s 将成为悬空状态)"
 
 #  译者:注意保持前导空格
-#: builtin/fetch.c:1102
+#: builtin/fetch.c:1128
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s 已成为悬空状态)"
 
-#: builtin/fetch.c:1134
+#: builtin/fetch.c:1160
 msgid "[deleted]"
 msgstr "[已删除]"
 
-#: builtin/fetch.c:1135 builtin/remote.c:1036
+#: builtin/fetch.c:1161 builtin/remote.c:1036
 msgid "(none)"
 msgstr "(无)"
 
-#: builtin/fetch.c:1158
+#: builtin/fetch.c:1184
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr "拒绝获取到非纯仓库的当前分支 %s"
 
-#: builtin/fetch.c:1177
+#: builtin/fetch.c:1203
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr "选项 \"%s\" 的值 \"%s\" 对于 %s 是无效的"
 
-#: builtin/fetch.c:1180
+#: builtin/fetch.c:1206
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr "选项 \"%s\" 为 %s 所忽略\n"
 
-#: builtin/fetch.c:1484
+#: builtin/fetch.c:1414
+msgid "multiple branch detected, incompatible with --set-upstream"
+msgstr "检测到多分支,和 --set-upstream 不兼容"
+
+#: builtin/fetch.c:1429
+msgid "not setting upstream for a remote remote-tracking branch"
+msgstr "没有为一个远程跟踪分支设置上游"
+
+#: builtin/fetch.c:1431
+msgid "not setting upstream for a remote tag"
+msgstr "没有为一个远程标签设置上游"
+
+#: builtin/fetch.c:1433
+msgid "unknown branch type"
+msgstr "未知的分支类型"
+
+#: builtin/fetch.c:1435
+msgid ""
+"no source branch found.\n"
+"you need to specify exactly one branch with the --set-upstream option."
+msgstr ""
+"未发现源分支。\n"
+"您需要使用 --set-upstream 选项指定一个分支。"
+
+#: builtin/fetch.c:1561 builtin/fetch.c:1623
 #, c-format
 msgid "Fetching %s\n"
 msgstr "正在获取 %s\n"
 
-#: builtin/fetch.c:1486 builtin/remote.c:100
+#: builtin/fetch.c:1571 builtin/fetch.c:1625 builtin/remote.c:100
 #, c-format
 msgid "Could not fetch %s"
 msgstr "不能获取 %s"
 
-#: builtin/fetch.c:1532
-msgid ""
-"--filter can only be used with the remote configured in extensions."
-"partialClone"
-msgstr "只可以将 --filter 用于在 extensions.partialClone 中配置的远程仓库"
+#: builtin/fetch.c:1583
+#, c-format
+msgid "could not fetch '%s' (exit code: %d)\n"
+msgstr "无法获取 '%s'(退出码:%d)\n"
 
-#: builtin/fetch.c:1556
+#: builtin/fetch.c:1685
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
 msgstr "未指定远程仓库。请通过一个 URL 或远程仓库名指定,用以获取新提交。"
 
-#: builtin/fetch.c:1593
+#: builtin/fetch.c:1722
 msgid "You need to specify a tag name."
 msgstr "您需要指定一个标签名称。"
 
-#: builtin/fetch.c:1644
+#: builtin/fetch.c:1774
 msgid "Negative depth in --deepen is not supported"
 msgstr "--deepen 不支持负数深度"
 
-#: builtin/fetch.c:1646
+#: builtin/fetch.c:1776
 msgid "--deepen and --depth are mutually exclusive"
 msgstr "--deepen 和 --depth 是互斥的"
 
-#: builtin/fetch.c:1651
+#: builtin/fetch.c:1781
 msgid "--depth and --unshallow cannot be used together"
 msgstr "--depth 和 --unshallow 不能同时使用"
 
-#: builtin/fetch.c:1653
+#: builtin/fetch.c:1783
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "对于一个完整的仓库,参数 --unshallow 没有意义"
 
-#: builtin/fetch.c:1669
+#: builtin/fetch.c:1799
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all 不能带一个仓库参数"
 
-#: builtin/fetch.c:1671
+#: builtin/fetch.c:1801
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all 带引用规格没有任何意义"
 
-#: builtin/fetch.c:1680
+#: builtin/fetch.c:1810
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr "没有这样的远程或远程组:%s"
 
-#: builtin/fetch.c:1687
+#: builtin/fetch.c:1817
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr "获取组并指定引用规格没有意义"
 
-#: builtin/fetch.c:1703
+#: builtin/fetch.c:1835
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
@@ -13189,7 +13276,7 @@
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "无效的参数:期望 sha1,得到 '%s'"
 
-#: builtin/gc.c:34
+#: builtin/gc.c:35
 msgid "git gc [<options>]"
 msgstr "git gc [<选项>]"
 
@@ -13203,17 +13290,17 @@
 msgid "failed to parse '%s' value '%s'"
 msgstr "无法解析 '%s' 值 '%s'"
 
-#: builtin/gc.c:476 builtin/init-db.c:55
+#: builtin/gc.c:475 builtin/init-db.c:55
 #, c-format
 msgid "cannot stat '%s'"
 msgstr "不能对 '%s' 调用 stat"
 
-#: builtin/gc.c:485 builtin/notes.c:240 builtin/tag.c:529
+#: builtin/gc.c:484 builtin/notes.c:240 builtin/tag.c:529
 #, c-format
 msgid "cannot read '%s'"
 msgstr "不能读取 '%s'"
 
-#: builtin/gc.c:492
+#: builtin/gc.c:491
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -13227,59 +13314,59 @@
 "\n"
 "%s"
 
-#: builtin/gc.c:540
+#: builtin/gc.c:539
 msgid "prune unreferenced objects"
 msgstr "清除未引用的对象"
 
-#: builtin/gc.c:542
+#: builtin/gc.c:541
 msgid "be more thorough (increased runtime)"
 msgstr "更彻底(增加运行时间)"
 
-#: builtin/gc.c:543
+#: builtin/gc.c:542
 msgid "enable auto-gc mode"
 msgstr "启用自动垃圾回收模式"
 
-#: builtin/gc.c:546
+#: builtin/gc.c:545
 msgid "force running gc even if there may be another gc running"
 msgstr "强制执行 gc 即使另外一个 gc 正在执行"
 
-#: builtin/gc.c:549
+#: builtin/gc.c:548
 msgid "repack all other packs except the largest pack"
 msgstr "除了最大的包之外,对所有其它包文件重新打包"
 
-#: builtin/gc.c:566
+#: builtin/gc.c:565
 #, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr "解析 gc.logexpiry 的值 %s 失败"
 
-#: builtin/gc.c:577
+#: builtin/gc.c:576
 #, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr "解析清除期限值 %s 失败"
 
-#: builtin/gc.c:597
+#: builtin/gc.c:596
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr "自动在后台执行仓库打包以求最佳性能。\n"
 
-#: builtin/gc.c:599
+#: builtin/gc.c:598
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr "自动打包仓库以求最佳性能。\n"
 
-#: builtin/gc.c:600
+#: builtin/gc.c:599
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr "手工维护参见 \"git help gc\"。\n"
 
-#: builtin/gc.c:640
+#: builtin/gc.c:639
 #, c-format
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
 msgstr ""
 "已经有一个 gc 正运行在机器 '%s' pid %<PRIuMAX>(如果不是,使用 --force)"
 
-#: builtin/gc.c:695
+#: builtin/gc.c:694
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr "有太多不可达的松散对象,运行 'git prune' 删除它们。"
@@ -13303,258 +13390,258 @@
 #. grep.threads
 #.
 #: builtin/grep.c:287 builtin/index-pack.c:1534 builtin/index-pack.c:1727
-#: builtin/pack-objects.c:2728
+#: builtin/pack-objects.c:2708
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "没有线程支持,忽略 %s"
 
-#: builtin/grep.c:467 builtin/grep.c:591 builtin/grep.c:633
+#: builtin/grep.c:467 builtin/grep.c:592 builtin/grep.c:635
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "无法读取树(%s)"
 
-#: builtin/grep.c:648
+#: builtin/grep.c:650
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "无法抓取来自于 %s 类型的对象"
 
-#: builtin/grep.c:714
+#: builtin/grep.c:716
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "开关 `%c' 期望一个数字值"
 
-#: builtin/grep.c:813
+#: builtin/grep.c:815
 msgid "search in index instead of in the work tree"
 msgstr "在索引区搜索而不是在工作区"
 
-#: builtin/grep.c:815
+#: builtin/grep.c:817
 msgid "find in contents not managed by git"
 msgstr "在未被 git 管理的内容中查找"
 
 #  译者:中文字符串拼接,可删除前导空格
-#: builtin/grep.c:817
+#: builtin/grep.c:819
 msgid "search in both tracked and untracked files"
 msgstr "在跟踪和未跟踪的文件中搜索"
 
-#: builtin/grep.c:819
+#: builtin/grep.c:821
 msgid "ignore files specified via '.gitignore'"
 msgstr "忽略 '.gitignore' 包含的文件"
 
-#: builtin/grep.c:821
+#: builtin/grep.c:823
 msgid "recursively search in each submodule"
 msgstr "在每一个子模组中递归搜索"
 
-#: builtin/grep.c:824
+#: builtin/grep.c:826
 msgid "show non-matching lines"
 msgstr "显示未匹配的行"
 
-#: builtin/grep.c:826
+#: builtin/grep.c:828
 msgid "case insensitive matching"
 msgstr "不区分大小写匹配"
 
-#: builtin/grep.c:828
+#: builtin/grep.c:830
 msgid "match patterns only at word boundaries"
 msgstr "只在单词边界匹配模式"
 
-#: builtin/grep.c:830
+#: builtin/grep.c:832
 msgid "process binary files as text"
 msgstr "把二进制文件当做文本处理"
 
-#: builtin/grep.c:832
+#: builtin/grep.c:834
 msgid "don't match patterns in binary files"
 msgstr "不在二进制文件中匹配模式"
 
-#: builtin/grep.c:835
+#: builtin/grep.c:837
 msgid "process binary files with textconv filters"
 msgstr "用 textconv 过滤器处理二进制文件"
 
-#: builtin/grep.c:837
+#: builtin/grep.c:839
 msgid "search in subdirectories (default)"
 msgstr "在子目录中寻找(默认)"
 
-#: builtin/grep.c:839
+#: builtin/grep.c:841
 msgid "descend at most <depth> levels"
 msgstr "最多以指定的深度向下寻找"
 
-#: builtin/grep.c:843
+#: builtin/grep.c:845
 msgid "use extended POSIX regular expressions"
 msgstr "使用扩展的 POSIX 正则表达式"
 
-#: builtin/grep.c:846
+#: builtin/grep.c:848
 msgid "use basic POSIX regular expressions (default)"
 msgstr "使用基本的 POSIX 正则表达式(默认)"
 
-#: builtin/grep.c:849
+#: builtin/grep.c:851
 msgid "interpret patterns as fixed strings"
 msgstr "把模式解析为固定的字符串"
 
-#: builtin/grep.c:852
+#: builtin/grep.c:854
 msgid "use Perl-compatible regular expressions"
 msgstr "使用 Perl 兼容的正则表达式"
 
-#: builtin/grep.c:855
+#: builtin/grep.c:857
 msgid "show line numbers"
 msgstr "显示行号"
 
-#: builtin/grep.c:856
+#: builtin/grep.c:858
 msgid "show column number of first match"
 msgstr "显示第一个匹配的列号"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:859
 msgid "don't show filenames"
 msgstr "不显示文件名"
 
-#: builtin/grep.c:858
+#: builtin/grep.c:860
 msgid "show filenames"
 msgstr "显示文件名"
 
-#: builtin/grep.c:860
+#: builtin/grep.c:862
 msgid "show filenames relative to top directory"
 msgstr "显示相对于顶级目录的文件名"
 
-#: builtin/grep.c:862
+#: builtin/grep.c:864
 msgid "show only filenames instead of matching lines"
 msgstr "只显示文件名而不显示匹配的行"
 
-#: builtin/grep.c:864
+#: builtin/grep.c:866
 msgid "synonym for --files-with-matches"
 msgstr "和 --files-with-matches 同义"
 
-#: builtin/grep.c:867
+#: builtin/grep.c:869
 msgid "show only the names of files without match"
 msgstr "只显示未匹配的文件名"
 
-#: builtin/grep.c:869
+#: builtin/grep.c:871
 msgid "print NUL after filenames"
 msgstr "在文件名后输出 NUL 字符"
 
-#: builtin/grep.c:872
+#: builtin/grep.c:874
 msgid "show only matching parts of a line"
 msgstr "只显示行中的匹配的部分"
 
-#: builtin/grep.c:874
+#: builtin/grep.c:876
 msgid "show the number of matches instead of matching lines"
 msgstr "显示总匹配行数,而不显示匹配的行"
 
-#: builtin/grep.c:875
+#: builtin/grep.c:877
 msgid "highlight matches"
 msgstr "高亮显示匹配项"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:879
 msgid "print empty line between matches from different files"
 msgstr "在不同文件的匹配项之间打印空行"
 
-#: builtin/grep.c:879
+#: builtin/grep.c:881
 msgid "show filename only once above matches from same file"
 msgstr "只在同一文件的匹配项的上面显示一次文件名"
 
-#: builtin/grep.c:882
+#: builtin/grep.c:884
 msgid "show <n> context lines before and after matches"
 msgstr "显示匹配项前后的 <n> 行上下文"
 
-#: builtin/grep.c:885
+#: builtin/grep.c:887
 msgid "show <n> context lines before matches"
 msgstr "显示匹配项前 <n> 行上下文"
 
-#: builtin/grep.c:887
+#: builtin/grep.c:889
 msgid "show <n> context lines after matches"
 msgstr "显示匹配项后 <n> 行上下文"
 
-#: builtin/grep.c:889
+#: builtin/grep.c:891
 msgid "use <n> worker threads"
 msgstr "使用 <n> 个工作线程"
 
-#: builtin/grep.c:890
+#: builtin/grep.c:892
 msgid "shortcut for -C NUM"
 msgstr "快捷键 -C 数字"
 
-#: builtin/grep.c:893
+#: builtin/grep.c:895
 msgid "show a line with the function name before matches"
 msgstr "在匹配的前面显示一行函数名"
 
-#: builtin/grep.c:895
+#: builtin/grep.c:897
 msgid "show the surrounding function"
 msgstr "显示所在函数的前后内容"
 
-#: builtin/grep.c:898
+#: builtin/grep.c:900
 msgid "read patterns from file"
 msgstr "从文件读取模式"
 
-#: builtin/grep.c:900
+#: builtin/grep.c:902
 msgid "match <pattern>"
 msgstr "匹配 <模式>"
 
-#: builtin/grep.c:902
+#: builtin/grep.c:904
 msgid "combine patterns specified with -e"
 msgstr "组合用 -e 参数设定的模式"
 
-#: builtin/grep.c:914
+#: builtin/grep.c:916
 msgid "indicate hit with exit status without output"
 msgstr "不输出,而用退出码标识命中状态"
 
-#: builtin/grep.c:916
+#: builtin/grep.c:918
 msgid "show only matches from files that match all patterns"
 msgstr "只显示匹配所有模式的文件中的匹配"
 
-#: builtin/grep.c:918
+#: builtin/grep.c:920
 msgid "show parse tree for grep expression"
 msgstr "显示 grep 表达式的解析树"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:924
 msgid "pager"
 msgstr "分页"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:924
 msgid "show matching files in the pager"
 msgstr "分页显示匹配的文件"
 
-#: builtin/grep.c:926
+#: builtin/grep.c:928
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "允许调用 grep(1)(本次构建忽略)"
 
-#: builtin/grep.c:990
+#: builtin/grep.c:992
 msgid "no pattern given"
 msgstr "未提供匹配模式"
 
-#: builtin/grep.c:1026
+#: builtin/grep.c:1028
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr "--no-index 或 --untracked 不能和版本同时使用"
 
-#: builtin/grep.c:1034
+#: builtin/grep.c:1036
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "不能解析版本:%s"
 
-#: builtin/grep.c:1065
+#: builtin/grep.c:1067
 msgid "invalid option combination, ignoring --threads"
 msgstr "无效的选项组合,忽略 --threads"
 
-#: builtin/grep.c:1068 builtin/pack-objects.c:3416
+#: builtin/grep.c:1070 builtin/pack-objects.c:3400
 msgid "no threads support, ignoring --threads"
 msgstr "没有线程支持,忽略 --threads"
 
-#: builtin/grep.c:1071 builtin/index-pack.c:1531 builtin/pack-objects.c:2725
+#: builtin/grep.c:1073 builtin/index-pack.c:1531 builtin/pack-objects.c:2705
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "指定的线程数无效(%d)"
 
-#: builtin/grep.c:1094
+#: builtin/grep.c:1096
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "--open-files-in-pager 仅用于工作区"
 
-#: builtin/grep.c:1117
+#: builtin/grep.c:1119
 msgid "option not supported with --recurse-submodules"
 msgstr "选项不支持和 --recurse-submodules 共用"
 
-#: builtin/grep.c:1123
+#: builtin/grep.c:1125
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr "--cached 或 --untracked 不能与 --no-index 同时使用"
 
-#: builtin/grep.c:1129
+#: builtin/grep.c:1131
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr "--[no-]exclude-standard 不能用于已跟踪内容"
 
-#: builtin/grep.c:1137
+#: builtin/grep.c:1139
 msgid "both --cached and trees are given"
 msgstr "同时给出了 --cached 和树对象"
 
@@ -13866,7 +13953,7 @@
 msgid "Resolving deltas"
 msgstr "处理 delta 中"
 
-#: builtin/index-pack.c:1205 builtin/pack-objects.c:2497
+#: builtin/index-pack.c:1205 builtin/pack-objects.c:2481
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "不能创建线程:%s"
@@ -13931,7 +14018,7 @@
 msgid "cannot store index file"
 msgstr "无法存储索引文件"
 
-#: builtin/index-pack.c:1525 builtin/pack-objects.c:2736
+#: builtin/index-pack.c:1525 builtin/pack-objects.c:2716
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "坏的 pack.indexversion=%<PRIu32>"
@@ -14210,74 +14297,74 @@
 msgid "git show %s: bad file"
 msgstr "git show %s: 损坏的文件"
 
-#: builtin/log.c:549 builtin/log.c:643
+#: builtin/log.c:549 builtin/log.c:644
 #, c-format
 msgid "could not read object %s"
 msgstr "不能读取对象 %s"
 
-#: builtin/log.c:668
+#: builtin/log.c:669
 #, c-format
 msgid "unknown type: %d"
 msgstr "未知类型:%d"
 
-#: builtin/log.c:791
+#: builtin/log.c:792
 msgid "format.headers without value"
 msgstr "format.headers 没有值"
 
-#: builtin/log.c:908
+#: builtin/log.c:909
 msgid "name of output directory is too long"
 msgstr "输出目录名太长"
 
-#: builtin/log.c:924
+#: builtin/log.c:925
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "无法打开补丁文件 %s"
 
-#: builtin/log.c:941
+#: builtin/log.c:942
 msgid "need exactly one range"
 msgstr "只需要一个范围"
 
-#: builtin/log.c:951
+#: builtin/log.c:952
 msgid "not a range"
 msgstr "不是一个范围"
 
-#: builtin/log.c:1074
+#: builtin/log.c:1075
 msgid "cover letter needs email format"
 msgstr "附函需要邮件地址格式"
 
-#: builtin/log.c:1080
+#: builtin/log.c:1081
 msgid "failed to create cover-letter file"
 msgstr "无法创建附函文件"
 
-#: builtin/log.c:1159
+#: builtin/log.c:1160
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "不正常的 in-reply-to:%s"
 
-#: builtin/log.c:1186
+#: builtin/log.c:1187
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<选项>] [<从> | <版本范围>]"
 
-#: builtin/log.c:1244
+#: builtin/log.c:1245
 msgid "two output directories?"
 msgstr "两个输出目录?"
 
-#: builtin/log.c:1355 builtin/log.c:2099 builtin/log.c:2101 builtin/log.c:2113
+#: builtin/log.c:1356 builtin/log.c:2116 builtin/log.c:2118 builtin/log.c:2130
 #, c-format
 msgid "unknown commit %s"
 msgstr "未知提交 %s"
 
-#: builtin/log.c:1365 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1366 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "无法将 '%s' 解析为一个有效引用"
 
-#: builtin/log.c:1370
+#: builtin/log.c:1371
 msgid "could not find exact merge base"
 msgstr "不能找到准确的合并基线"
 
-#: builtin/log.c:1374
+#: builtin/log.c:1375
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -14287,267 +14374,267 @@
 "git branch --set-upstream-to 来跟踪一个远程分支。或者你可以通过\n"
 "参数 --base=<基线提交> 手动指定一个基线提交"
 
-#: builtin/log.c:1394
+#: builtin/log.c:1395
 msgid "failed to find exact merge base"
 msgstr "无法找到准确的合并基线"
 
-#: builtin/log.c:1405
+#: builtin/log.c:1406
 msgid "base commit should be the ancestor of revision list"
 msgstr "基线提交应该是版本列表的祖先"
 
-#: builtin/log.c:1409
+#: builtin/log.c:1410
 msgid "base commit shouldn't be in revision list"
 msgstr "基线提交不应该出现在版本列表中"
 
-#: builtin/log.c:1462
+#: builtin/log.c:1463
 msgid "cannot get patch id"
 msgstr "无法得到补丁 id"
 
-#: builtin/log.c:1514
+#: builtin/log.c:1515
 msgid "failed to infer range-diff ranges"
 msgstr "无法推断 range-diff 范围"
 
-#: builtin/log.c:1559
+#: builtin/log.c:1560
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "使用 [PATCH n/m],即使只有一个补丁"
 
-#: builtin/log.c:1562
+#: builtin/log.c:1563
 msgid "use [PATCH] even with multiple patches"
 msgstr "使用 [PATCH],即使有多个补丁"
 
-#: builtin/log.c:1566
+#: builtin/log.c:1567
 msgid "print patches to standard out"
 msgstr "打印补丁到标准输出"
 
-#: builtin/log.c:1568
+#: builtin/log.c:1569
 msgid "generate a cover letter"
 msgstr "生成一封附函"
 
-#: builtin/log.c:1570
+#: builtin/log.c:1571
 msgid "use simple number sequence for output file names"
 msgstr "使用简单的数字序列作为输出文件名"
 
-#: builtin/log.c:1571
+#: builtin/log.c:1572
 msgid "sfx"
 msgstr "后缀"
 
-#: builtin/log.c:1572
+#: builtin/log.c:1573
 msgid "use <sfx> instead of '.patch'"
 msgstr "使用 <后缀> 代替 '.patch'"
 
-#: builtin/log.c:1574
+#: builtin/log.c:1575
 msgid "start numbering patches at <n> instead of 1"
 msgstr "补丁以 <n> 开始编号,而不是1"
 
-#: builtin/log.c:1576
+#: builtin/log.c:1577
 msgid "mark the series as Nth re-roll"
 msgstr "标记补丁系列是第几次重制"
 
-#: builtin/log.c:1578
+#: builtin/log.c:1579
 msgid "Use [RFC PATCH] instead of [PATCH]"
 msgstr "使用 [RFC PATCH] 代替 [PATCH]"
 
-#: builtin/log.c:1581
+#: builtin/log.c:1582
 msgid "Use [<prefix>] instead of [PATCH]"
 msgstr "使用 [<前缀>] 代替 [PATCH]"
 
-#: builtin/log.c:1584
+#: builtin/log.c:1585
 msgid "store resulting files in <dir>"
 msgstr "把结果文件存储在 <目录>"
 
-#: builtin/log.c:1587
+#: builtin/log.c:1588
 msgid "don't strip/add [PATCH]"
 msgstr "不删除/添加 [PATCH]"
 
-#: builtin/log.c:1590
+#: builtin/log.c:1591
 msgid "don't output binary diffs"
 msgstr "不输出二进制差异"
 
-#: builtin/log.c:1592
+#: builtin/log.c:1593
 msgid "output all-zero hash in From header"
 msgstr "在 From 头信息中输出全为零的哈希值"
 
-#: builtin/log.c:1594
+#: builtin/log.c:1595
 msgid "don't include a patch matching a commit upstream"
 msgstr "不包含已在上游提交中的补丁"
 
-#: builtin/log.c:1596
+#: builtin/log.c:1597
 msgid "show patch format instead of default (patch + stat)"
 msgstr "显示纯补丁格式而非默认的(补丁+状态)"
 
-#: builtin/log.c:1598
+#: builtin/log.c:1599
 msgid "Messaging"
 msgstr "邮件发送"
 
-#: builtin/log.c:1599
+#: builtin/log.c:1600
 msgid "header"
 msgstr "header"
 
-#: builtin/log.c:1600
+#: builtin/log.c:1601
 msgid "add email header"
 msgstr "添加邮件头"
 
-#: builtin/log.c:1601 builtin/log.c:1603
+#: builtin/log.c:1602 builtin/log.c:1604
 msgid "email"
 msgstr "邮件地址"
 
-#: builtin/log.c:1601
+#: builtin/log.c:1602
 msgid "add To: header"
 msgstr "添加收件人"
 
-#: builtin/log.c:1603
+#: builtin/log.c:1604
 msgid "add Cc: header"
 msgstr "添加抄送"
 
-#: builtin/log.c:1605
+#: builtin/log.c:1606
 msgid "ident"
 msgstr "标识"
 
-#: builtin/log.c:1606
+#: builtin/log.c:1607
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr "将 From 地址设置为 <标识>(如若不提供,则用提交者 ID 做为地址)"
 
-#: builtin/log.c:1608
+#: builtin/log.c:1609
 msgid "message-id"
 msgstr "邮件标识"
 
-#: builtin/log.c:1609
+#: builtin/log.c:1610
 msgid "make first mail a reply to <message-id>"
 msgstr "使第一封邮件作为对 <邮件标识> 的回复"
 
-#: builtin/log.c:1610 builtin/log.c:1613
+#: builtin/log.c:1611 builtin/log.c:1614
 msgid "boundary"
 msgstr "边界"
 
-#: builtin/log.c:1611
+#: builtin/log.c:1612
 msgid "attach the patch"
 msgstr "附件方式添加补丁"
 
-#: builtin/log.c:1614
+#: builtin/log.c:1615
 msgid "inline the patch"
 msgstr "内联显示补丁"
 
-#: builtin/log.c:1618
+#: builtin/log.c:1619
 msgid "enable message threading, styles: shallow, deep"
 msgstr "启用邮件线索,风格:浅,深"
 
-#: builtin/log.c:1620
+#: builtin/log.c:1621
 msgid "signature"
 msgstr "签名"
 
-#: builtin/log.c:1621
+#: builtin/log.c:1622
 msgid "add a signature"
 msgstr "添加一个签名"
 
-#: builtin/log.c:1622
+#: builtin/log.c:1623
 msgid "base-commit"
 msgstr "基线提交"
 
-#: builtin/log.c:1623
+#: builtin/log.c:1624
 msgid "add prerequisite tree info to the patch series"
 msgstr "为补丁列表添加前置树信息"
 
-#: builtin/log.c:1625
+#: builtin/log.c:1626
 msgid "add a signature from a file"
 msgstr "从文件添加一个签名"
 
-#: builtin/log.c:1626
+#: builtin/log.c:1627
 msgid "don't print the patch filenames"
 msgstr "不要打印补丁文件名"
 
-#: builtin/log.c:1628
+#: builtin/log.c:1629
 msgid "show progress while generating patches"
 msgstr "在生成补丁时显示进度"
 
-#: builtin/log.c:1630
+#: builtin/log.c:1631
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr "在附函或单个补丁中显示和 <rev> 的差异"
 
-#: builtin/log.c:1633
+#: builtin/log.c:1634
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr "在附函或单个补丁中显示和 <refspec> 的差异"
 
-#: builtin/log.c:1635
+#: builtin/log.c:1636
 msgid "percentage by which creation is weighted"
 msgstr "创建权重的百分比"
 
-#: builtin/log.c:1710
+#: builtin/log.c:1711
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "包含无效的身份标识:%s"
 
-#: builtin/log.c:1725
+#: builtin/log.c:1726
 msgid "-n and -k are mutually exclusive"
 msgstr "-n 和 -k 互斥"
 
-#: builtin/log.c:1727
+#: builtin/log.c:1728
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr "--subject-prefix/--rfc 和 -k 互斥"
 
-#: builtin/log.c:1735
+#: builtin/log.c:1736
 msgid "--name-only does not make sense"
 msgstr "--name-only 无意义"
 
-#: builtin/log.c:1737
+#: builtin/log.c:1738
 msgid "--name-status does not make sense"
 msgstr "--name-status 无意义"
 
-#: builtin/log.c:1739
+#: builtin/log.c:1740
 msgid "--check does not make sense"
 msgstr "--check 无意义"
 
-#: builtin/log.c:1771
+#: builtin/log.c:1773
 msgid "standard output, or directory, which one?"
 msgstr "标准输出或目录,哪一个?"
 
-#: builtin/log.c:1860
+#: builtin/log.c:1877
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff 需要 --cover-letter 或单一补丁"
 
-#: builtin/log.c:1864
+#: builtin/log.c:1881
 msgid "Interdiff:"
 msgstr "版本间差异:"
 
-#: builtin/log.c:1865
+#: builtin/log.c:1882
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "对 v%d 的版本差异:"
 
-#: builtin/log.c:1871
+#: builtin/log.c:1888
 msgid "--creation-factor requires --range-diff"
 msgstr "--creation-factor 需要 --range-diff"
 
-#: builtin/log.c:1875
+#: builtin/log.c:1892
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff 需要 --cover-letter 或单一补丁"
 
-#: builtin/log.c:1883
+#: builtin/log.c:1900
 msgid "Range-diff:"
 msgstr "范围差异:"
 
-#: builtin/log.c:1884
+#: builtin/log.c:1901
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "对 v%d 的范围差异:"
 
-#: builtin/log.c:1895
+#: builtin/log.c:1912
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "无法读取签名文件 '%s'"
 
-#: builtin/log.c:1931
+#: builtin/log.c:1948
 msgid "Generating patches"
 msgstr "生成补丁"
 
-#: builtin/log.c:1975
+#: builtin/log.c:1992
 msgid "failed to create output files"
 msgstr "无法创建输出文件"
 
-#: builtin/log.c:2034
+#: builtin/log.c:2051
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<上游> [<头> [<限制>]]]"
 
-#: builtin/log.c:2088
+#: builtin/log.c:2105
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -14671,7 +14758,7 @@
 msgid "do not print remote URL"
 msgstr "不打印远程 URL"
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1464
+#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1488
 msgid "exec"
 msgstr "exec"
 
@@ -14780,31 +14867,31 @@
 msgid "Available custom strategies are:"
 msgstr "可用的自定义策略有:"
 
-#: builtin/merge.c:244 builtin/pull.c:151
+#: builtin/merge.c:244 builtin/pull.c:152
 msgid "do not show a diffstat at the end of the merge"
 msgstr "在合并的最后不显示差异统计"
 
-#: builtin/merge.c:247 builtin/pull.c:154
+#: builtin/merge.c:247 builtin/pull.c:155
 msgid "show a diffstat at the end of the merge"
 msgstr "在合并的最后显示差异统计"
 
-#: builtin/merge.c:248 builtin/pull.c:157
+#: builtin/merge.c:248 builtin/pull.c:158
 msgid "(synonym to --stat)"
 msgstr "(和 --stat 同义)"
 
-#: builtin/merge.c:250 builtin/pull.c:160
+#: builtin/merge.c:250 builtin/pull.c:161
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr "在合并提交信息中添加(最多 <n> 条)精简提交记录"
 
-#: builtin/merge.c:253 builtin/pull.c:166
+#: builtin/merge.c:253 builtin/pull.c:167
 msgid "create a single commit instead of doing a merge"
 msgstr "创建一个单独的提交而不是做一次合并"
 
-#: builtin/merge.c:255 builtin/pull.c:169
+#: builtin/merge.c:255 builtin/pull.c:170
 msgid "perform a commit if the merge succeeds (default)"
 msgstr "如果合并成功,执行一次提交(默认)"
 
-#: builtin/merge.c:257 builtin/pull.c:172
+#: builtin/merge.c:257 builtin/pull.c:173
 msgid "edit message before committing"
 msgstr "在提交前编辑提交说明"
 
@@ -14812,28 +14899,28 @@
 msgid "allow fast-forward (default)"
 msgstr "允许快进(默认)"
 
-#: builtin/merge.c:261 builtin/pull.c:179
+#: builtin/merge.c:261 builtin/pull.c:180
 msgid "abort if fast-forward is not possible"
 msgstr "如果不能快进就放弃合并"
 
-#: builtin/merge.c:265 builtin/pull.c:182
+#: builtin/merge.c:265 builtin/pull.c:183
 msgid "verify that the named commit has a valid GPG signature"
 msgstr "验证指定的提交是否包含一个有效的 GPG 签名"
 
-#: builtin/merge.c:266 builtin/notes.c:787 builtin/pull.c:186
-#: builtin/rebase.c:492 builtin/rebase.c:1477 builtin/revert.c:114
+#: builtin/merge.c:266 builtin/notes.c:787 builtin/pull.c:187
+#: builtin/rebase.c:493 builtin/rebase.c:1501 builtin/revert.c:114
 msgid "strategy"
 msgstr "策略"
 
-#: builtin/merge.c:267 builtin/pull.c:187
+#: builtin/merge.c:267 builtin/pull.c:188
 msgid "merge strategy to use"
 msgstr "要使用的合并策略"
 
-#: builtin/merge.c:268 builtin/pull.c:190
+#: builtin/merge.c:268 builtin/pull.c:191
 msgid "option=value"
 msgstr "option=value"
 
-#: builtin/merge.c:269 builtin/pull.c:191
+#: builtin/merge.c:269 builtin/pull.c:192
 msgid "option for selected merge strategy"
 msgstr "所选的合并策略的选项"
 
@@ -14854,13 +14941,13 @@
 msgid "continue the current in-progress merge"
 msgstr "继续当前正在进行的合并"
 
-#: builtin/merge.c:284 builtin/pull.c:198
+#: builtin/merge.c:284 builtin/pull.c:199
 msgid "allow merging unrelated histories"
 msgstr "允许合并不相关的历史"
 
 #: builtin/merge.c:290
-msgid "verify commit-msg hook"
-msgstr "校验 commit-msg 钩子"
+msgid "bypass pre-merge-commit and commit-msg hooks"
+msgstr "绕过 pre-merge-commit 和 commit-msg 钩子"
 
 #: builtin/merge.c:307
 msgid "could not run stash."
@@ -14904,31 +14991,31 @@
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "坏的 branch.%s.mergeoptions 字符串:%s"
 
-#: builtin/merge.c:708
+#: builtin/merge.c:705
 msgid "Not handling anything other than two heads merge."
 msgstr "未处理两个头合并之外的任何操作。"
 
-#: builtin/merge.c:722
+#: builtin/merge.c:719
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr "merge-recursive 的未知选项:-X%s"
 
-#: builtin/merge.c:737
+#: builtin/merge.c:734
 #, c-format
 msgid "unable to write %s"
 msgstr "不能写 %s"
 
-#: builtin/merge.c:789
+#: builtin/merge.c:786
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "不能从 '%s' 读取"
 
-#: builtin/merge.c:798
+#: builtin/merge.c:795
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr "未提交合并,使用 'git commit' 完成此次合并。\n"
 
-#: builtin/merge.c:804
+#: builtin/merge.c:801
 msgid ""
 "Please enter a commit message to explain why this merge is necessary,\n"
 "especially if it merges an updated upstream into a topic branch.\n"
@@ -14938,83 +15025,83 @@
 "合并到主题分支。\n"
 "\n"
 
-#: builtin/merge.c:809
+#: builtin/merge.c:806
 msgid "An empty message aborts the commit.\n"
 msgstr "空的提交说明会终止提交。\n"
 
-#: builtin/merge.c:812
+#: builtin/merge.c:809
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
 "the commit.\n"
 msgstr "以 '%c' 开始的行将被忽略,而空的提交说明将终止提交。\n"
 
-#: builtin/merge.c:853
+#: builtin/merge.c:862
 msgid "Empty commit message."
 msgstr "空提交信息。"
 
-#: builtin/merge.c:872
+#: builtin/merge.c:877
 #, c-format
 msgid "Wonderful.\n"
 msgstr "太棒了。\n"
 
-#: builtin/merge.c:933
+#: builtin/merge.c:938
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr "自动合并失败,修正冲突然后提交修正的结果。\n"
 
-#: builtin/merge.c:972
+#: builtin/merge.c:977
 msgid "No current branch."
 msgstr "没有当前分支。"
 
-#: builtin/merge.c:974
+#: builtin/merge.c:979
 msgid "No remote for the current branch."
 msgstr "当前分支没有对应的远程仓库。"
 
-#: builtin/merge.c:976
+#: builtin/merge.c:981
 msgid "No default upstream defined for the current branch."
 msgstr "当前分支没有定义默认的上游分支。"
 
-#: builtin/merge.c:981
+#: builtin/merge.c:986
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "对于 %s 没有来自 %s 的远程跟踪分支"
 
-#: builtin/merge.c:1038
+#: builtin/merge.c:1043
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "环境 '%2$s' 中存在坏的取值 '%1$s'"
 
-#: builtin/merge.c:1141
+#: builtin/merge.c:1146
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "不能在 %s 中合并:%s"
 
-#: builtin/merge.c:1175
+#: builtin/merge.c:1180
 msgid "not something we can merge"
 msgstr "不能合并"
 
-#: builtin/merge.c:1278
+#: builtin/merge.c:1283
 msgid "--abort expects no arguments"
 msgstr "--abort 不带参数"
 
-#: builtin/merge.c:1282
+#: builtin/merge.c:1287
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "没有要终止的合并(MERGE_HEAD 丢失)。"
 
-#: builtin/merge.c:1291
+#: builtin/merge.c:1296
 msgid "--quit expects no arguments"
 msgstr "--quit 不带参数"
 
-#: builtin/merge.c:1304
+#: builtin/merge.c:1309
 msgid "--continue expects no arguments"
 msgstr "--continue 不带参数"
 
-#: builtin/merge.c:1308
+#: builtin/merge.c:1313
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "没有进行中的合并(MERGE_HEAD 丢失)。"
 
-#: builtin/merge.c:1324
+#: builtin/merge.c:1329
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -15022,7 +15109,7 @@
 "您尚未结束您的合并(存在 MERGE_HEAD)。\n"
 "请在合并前先提交您的修改。"
 
-#: builtin/merge.c:1331
+#: builtin/merge.c:1336
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -15030,96 +15117,96 @@
 "您尚未结束您的拣选(存在 CHERRY_PICK_HEAD)。\n"
 "请在合并前先提交您的修改。"
 
-#: builtin/merge.c:1334
+#: builtin/merge.c:1339
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "您尚未结束您的拣选(存在 CHERRY_PICK_HEAD)。"
 
-#: builtin/merge.c:1348
+#: builtin/merge.c:1353
 msgid "You cannot combine --squash with --no-ff."
 msgstr "您不能将 --squash 和 --no-ff 组合使用。"
 
-#: builtin/merge.c:1350
+#: builtin/merge.c:1355
 msgid "You cannot combine --squash with --commit."
 msgstr "您不能将 --squash 和 --commit 组合使用。"
 
-#: builtin/merge.c:1366
+#: builtin/merge.c:1371
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr "未指定提交并且 merge.defaultToUpstream 未设置。"
 
-#: builtin/merge.c:1383
+#: builtin/merge.c:1388
 msgid "Squash commit into empty head not supported yet"
 msgstr "尚不支持到空分支的压缩提交"
 
-#: builtin/merge.c:1385
+#: builtin/merge.c:1390
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr "到空分支的非快进式提交没有意义"
 
-#: builtin/merge.c:1390
+#: builtin/merge.c:1395
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - 不能被合并"
 
-#: builtin/merge.c:1392
+#: builtin/merge.c:1397
 msgid "Can merge only exactly one commit into empty head"
 msgstr "只能将一个提交合并到空分支上"
 
-#: builtin/merge.c:1471
+#: builtin/merge.c:1476
 msgid "refusing to merge unrelated histories"
 msgstr "拒绝合并无关的历史"
 
-#: builtin/merge.c:1480
+#: builtin/merge.c:1485
 msgid "Already up to date."
 msgstr "已经是最新的。"
 
-#: builtin/merge.c:1490
+#: builtin/merge.c:1495
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "更新 %s..%s\n"
 
-#: builtin/merge.c:1532
+#: builtin/merge.c:1537
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "尝试非常小的索引内合并...\n"
 
-#: builtin/merge.c:1539
+#: builtin/merge.c:1544
 #, c-format
 msgid "Nope.\n"
 msgstr "无。\n"
 
-#: builtin/merge.c:1564
+#: builtin/merge.c:1569
 msgid "Already up to date. Yeeah!"
 msgstr "已经是最新的。耶!"
 
-#: builtin/merge.c:1570
+#: builtin/merge.c:1575
 msgid "Not possible to fast-forward, aborting."
 msgstr "无法快进,终止。"
 
-#: builtin/merge.c:1593 builtin/merge.c:1658
+#: builtin/merge.c:1598 builtin/merge.c:1663
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "将树回滚至原始状态...\n"
 
-#: builtin/merge.c:1597
+#: builtin/merge.c:1602
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "尝试合并策略 %s...\n"
 
-#: builtin/merge.c:1649
+#: builtin/merge.c:1654
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "没有合并策略处理此合并。\n"
 
-#: builtin/merge.c:1651
+#: builtin/merge.c:1656
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "使用策略 %s 合并失败。\n"
 
-#: builtin/merge.c:1660
+#: builtin/merge.c:1665
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr "使用 %s 以准备手工解决。\n"
 
-#: builtin/merge.c:1672
+#: builtin/merge.c:1677
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr "自动合并进展顺利,按要求在提交前停止\n"
@@ -15204,33 +15291,33 @@
 msgid "set labels for file1/orig-file/file2"
 msgstr "为 文件1/初始文件/文件2 设置标签"
 
-#: builtin/merge-recursive.c:46
+#: builtin/merge-recursive.c:47
 #, c-format
 msgid "unknown option %s"
 msgstr "未知选项 %s"
 
-#: builtin/merge-recursive.c:52
+#: builtin/merge-recursive.c:53
 #, c-format
 msgid "could not parse object '%s'"
 msgstr "不能解析对象 '%s'"
 
-#: builtin/merge-recursive.c:56
+#: builtin/merge-recursive.c:57
 #, c-format
 msgid "cannot handle more than %d base. Ignoring %s."
 msgid_plural "cannot handle more than %d bases. Ignoring %s."
 msgstr[0] "无法处理 %d 条以上的基线。忽略 %s。"
 msgstr[1] "无法处理 %d 条以上的基线。忽略 %s。"
 
-#: builtin/merge-recursive.c:64
+#: builtin/merge-recursive.c:65
 msgid "not handling anything other than two heads merge."
 msgstr "不能处理两个头合并之外的任何操作。"
 
-#: builtin/merge-recursive.c:70 builtin/merge-recursive.c:72
+#: builtin/merge-recursive.c:74 builtin/merge-recursive.c:76
 #, c-format
 msgid "could not resolve ref '%s'"
 msgstr "无法解析引用 '%s'"
 
-#: builtin/merge-recursive.c:78
+#: builtin/merge-recursive.c:82
 #, c-format
 msgid "Merging %s with %s\n"
 msgstr "合并 %s 和 %s\n"
@@ -15369,52 +15456,52 @@
 msgid "Renaming %s to %s\n"
 msgstr "重命名 %s 至 %s\n"
 
-#: builtin/mv.c:277 builtin/remote.c:717 builtin/repack.c:510
+#: builtin/mv.c:277 builtin/remote.c:717 builtin/repack.c:511
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "重命名 '%s' 失败"
 
-#: builtin/name-rev.c:352
+#: builtin/name-rev.c:356
 msgid "git name-rev [<options>] <commit>..."
 msgstr "git name-rev [<选项>] <提交>..."
 
-#: builtin/name-rev.c:353
+#: builtin/name-rev.c:357
 msgid "git name-rev [<options>] --all"
 msgstr "git name-rev [<选项>] --all"
 
-#: builtin/name-rev.c:354
+#: builtin/name-rev.c:358
 msgid "git name-rev [<options>] --stdin"
 msgstr "git name-rev [<选项>] --stdin"
 
-#: builtin/name-rev.c:411
+#: builtin/name-rev.c:415
 msgid "print only names (no SHA-1)"
 msgstr "只打印名称(无 SHA-1)"
 
-#: builtin/name-rev.c:412
+#: builtin/name-rev.c:416
 msgid "only use tags to name the commits"
 msgstr "只使用标签来命名提交"
 
-#: builtin/name-rev.c:414
+#: builtin/name-rev.c:418
 msgid "only use refs matching <pattern>"
 msgstr "只使用和 <模式> 相匹配的引用"
 
-#: builtin/name-rev.c:416
+#: builtin/name-rev.c:420
 msgid "ignore refs matching <pattern>"
 msgstr "忽略和 <模式> 相匹配的引用"
 
-#: builtin/name-rev.c:418
+#: builtin/name-rev.c:422
 msgid "list all commits reachable from all refs"
 msgstr "列出可以从所有引用访问的提交"
 
-#: builtin/name-rev.c:419
+#: builtin/name-rev.c:423
 msgid "read from stdin"
 msgstr "从标准输入读取"
 
-#: builtin/name-rev.c:420
+#: builtin/name-rev.c:424
 msgid "allow to print `undefined` names (default)"
 msgstr "允许打印 `未定义` 的名称(默认)"
 
-#: builtin/name-rev.c:426
+#: builtin/name-rev.c:430
 msgid "dereference tags in the input (internal use)"
 msgstr "反向解析输入中的标签(内部使用)"
 
@@ -15801,7 +15888,7 @@
 msgid "read object names from the standard input"
 msgstr "从标准输入读取对象名称"
 
-#: builtin/notes.c:954 builtin/prune.c:130 builtin/worktree.c:165
+#: builtin/notes.c:954 builtin/prune.c:130 builtin/worktree.c:164
 msgid "do not remove, show only"
 msgstr "不删除,只显示"
 
@@ -15817,7 +15904,7 @@
 msgid "use notes from <notes-ref>"
 msgstr "从 <注解引用> 使用注解"
 
-#: builtin/notes.c:1034 builtin/stash.c:1598
+#: builtin/notes.c:1034 builtin/stash.c:1607
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "未知子命令:%s"
@@ -15888,68 +15975,68 @@
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "写入 %<PRIu32> 个对象而预期 %<PRIu32> 个"
 
-#: builtin/pack-objects.c:1166
+#: builtin/pack-objects.c:1164
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr "禁用 bitmap 写入,因为一些对象将不会被打包"
 
-#: builtin/pack-objects.c:1597
+#: builtin/pack-objects.c:1592
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "%s 压缩中 delta 基准偏移越界"
 
-#: builtin/pack-objects.c:1606
+#: builtin/pack-objects.c:1601
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "%s 的 delta 基准偏移越界"
 
-#: builtin/pack-objects.c:1875
+#: builtin/pack-objects.c:1870
 msgid "Counting objects"
 msgstr "对象计数中"
 
-#: builtin/pack-objects.c:2005
+#: builtin/pack-objects.c:2000
 #, c-format
 msgid "unable to get size of %s"
 msgstr "不能得到 %s 的大小"
 
-#: builtin/pack-objects.c:2020
+#: builtin/pack-objects.c:2015
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "无法解析对象 %s 头信息"
 
-#: builtin/pack-objects.c:2090 builtin/pack-objects.c:2106
-#: builtin/pack-objects.c:2116
+#: builtin/pack-objects.c:2085 builtin/pack-objects.c:2101
+#: builtin/pack-objects.c:2111
 #, c-format
 msgid "object %s cannot be read"
 msgstr "对象 %s 无法读取"
 
-#: builtin/pack-objects.c:2093 builtin/pack-objects.c:2120
+#: builtin/pack-objects.c:2088 builtin/pack-objects.c:2115
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr "对象 %s 不一致的对象长度(%<PRIuMAX> vs %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2130
+#: builtin/pack-objects.c:2125
 msgid "suboptimal pack - out of memory"
 msgstr "次优(suboptimal)打包 - 内存不足"
 
-#: builtin/pack-objects.c:2456
+#: builtin/pack-objects.c:2440
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "使用 %d 个线程进行压缩"
 
-#: builtin/pack-objects.c:2588
+#: builtin/pack-objects.c:2572
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "无法为标签 %s 压缩对象"
 
-#: builtin/pack-objects.c:2675
+#: builtin/pack-objects.c:2659
 msgid "Compressing objects"
 msgstr "压缩对象中"
 
-#: builtin/pack-objects.c:2681
+#: builtin/pack-objects.c:2665
 msgid "inconsistency with delta count"
 msgstr "不一致的差异计数"
 
-#: builtin/pack-objects.c:2762
+#: builtin/pack-objects.c:2742
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -15958,7 +16045,7 @@
 "预期边界对象(edge object)ID,却得到垃圾数据:\n"
 " %s"
 
-#: builtin/pack-objects.c:2768
+#: builtin/pack-objects.c:2748
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -15967,242 +16054,242 @@
 "预期对象 ID,却得到垃圾数据:\n"
 " %s"
 
-#: builtin/pack-objects.c:2866
+#: builtin/pack-objects.c:2846
 msgid "invalid value for --missing"
 msgstr "选项 --missing 的值无效"
 
-#: builtin/pack-objects.c:2925 builtin/pack-objects.c:3033
+#: builtin/pack-objects.c:2905 builtin/pack-objects.c:3013
 msgid "cannot open pack index"
 msgstr "无法打开包文件索引"
 
-#: builtin/pack-objects.c:2956
+#: builtin/pack-objects.c:2936
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "无法检查 %s 处的松散对象"
 
-#: builtin/pack-objects.c:3041
+#: builtin/pack-objects.c:3021
 msgid "unable to force loose object"
 msgstr "无法强制松散对象"
 
-#: builtin/pack-objects.c:3133
+#: builtin/pack-objects.c:3113
 #, c-format
 msgid "not a rev '%s'"
 msgstr "不是一个版本 '%s'"
 
-#: builtin/pack-objects.c:3136
+#: builtin/pack-objects.c:3116
 #, c-format
 msgid "bad revision '%s'"
 msgstr "坏的版本 '%s'"
 
-#: builtin/pack-objects.c:3161
+#: builtin/pack-objects.c:3141
 msgid "unable to add recent objects"
 msgstr "无法添加最近的对象"
 
-#: builtin/pack-objects.c:3214
+#: builtin/pack-objects.c:3194
 #, c-format
 msgid "unsupported index version %s"
 msgstr "不支持的索引版本 %s"
 
-#: builtin/pack-objects.c:3218
+#: builtin/pack-objects.c:3198
 #, c-format
 msgid "bad index version '%s'"
 msgstr "坏的索引版本 '%s'"
 
-#: builtin/pack-objects.c:3248
+#: builtin/pack-objects.c:3228
 msgid "do not show progress meter"
 msgstr "不显示进度表"
 
-#: builtin/pack-objects.c:3250
+#: builtin/pack-objects.c:3230
 msgid "show progress meter"
 msgstr "显示进度表"
 
-#: builtin/pack-objects.c:3252
+#: builtin/pack-objects.c:3232
 msgid "show progress meter during object writing phase"
 msgstr "在对象写入阶段显示进度表"
 
-#: builtin/pack-objects.c:3255
+#: builtin/pack-objects.c:3235
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "当进度表显示时类似于 --all-progress"
 
-#: builtin/pack-objects.c:3256
+#: builtin/pack-objects.c:3236
 msgid "<version>[,<offset>]"
 msgstr "<版本>[,<偏移>]"
 
-#: builtin/pack-objects.c:3257
+#: builtin/pack-objects.c:3237
 msgid "write the pack index file in the specified idx format version"
 msgstr "用指定的 idx 格式版本来写包索引文件"
 
-#: builtin/pack-objects.c:3260
+#: builtin/pack-objects.c:3240
 msgid "maximum size of each output pack file"
 msgstr "每个输出包的最大尺寸"
 
-#: builtin/pack-objects.c:3262
+#: builtin/pack-objects.c:3242
 msgid "ignore borrowed objects from alternate object store"
 msgstr "忽略从备用对象存储里借用对象"
 
-#: builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3244
 msgid "ignore packed objects"
 msgstr "忽略包对象"
 
-#: builtin/pack-objects.c:3266
+#: builtin/pack-objects.c:3246
 msgid "limit pack window by objects"
 msgstr "限制打包窗口的对象数"
 
-#: builtin/pack-objects.c:3268
+#: builtin/pack-objects.c:3248
 msgid "limit pack window by memory in addition to object limit"
 msgstr "除对象数量限制外设置打包窗口的内存限制"
 
-#: builtin/pack-objects.c:3270
+#: builtin/pack-objects.c:3250
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr "打包允许的 delta 链的最大长度"
 
-#: builtin/pack-objects.c:3272
+#: builtin/pack-objects.c:3252
 msgid "reuse existing deltas"
 msgstr "重用已存在的 deltas"
 
-#: builtin/pack-objects.c:3274
+#: builtin/pack-objects.c:3254
 msgid "reuse existing objects"
 msgstr "重用已存在的对象"
 
-#: builtin/pack-objects.c:3276
+#: builtin/pack-objects.c:3256
 msgid "use OFS_DELTA objects"
 msgstr "使用 OFS_DELTA 对象"
 
-#: builtin/pack-objects.c:3278
+#: builtin/pack-objects.c:3258
 msgid "use threads when searching for best delta matches"
 msgstr "使用线程查询最佳 delta 匹配"
 
-#: builtin/pack-objects.c:3280
+#: builtin/pack-objects.c:3260
 msgid "do not create an empty pack output"
 msgstr "不创建空的包输出"
 
-#: builtin/pack-objects.c:3282
+#: builtin/pack-objects.c:3262
 msgid "read revision arguments from standard input"
 msgstr "从标准输入读取版本号参数"
 
-#: builtin/pack-objects.c:3284
+#: builtin/pack-objects.c:3264
 msgid "limit the objects to those that are not yet packed"
 msgstr "限制那些尚未打包的对象"
 
-#: builtin/pack-objects.c:3287
+#: builtin/pack-objects.c:3267
 msgid "include objects reachable from any reference"
 msgstr "包括可以从任何引用访问到的对象"
 
-#: builtin/pack-objects.c:3290
+#: builtin/pack-objects.c:3270
 msgid "include objects referred by reflog entries"
 msgstr "包括被引用日志引用到的对象"
 
-#: builtin/pack-objects.c:3293
+#: builtin/pack-objects.c:3273
 msgid "include objects referred to by the index"
 msgstr "包括被索引引用到的对象"
 
-#: builtin/pack-objects.c:3296
+#: builtin/pack-objects.c:3276
 msgid "output pack to stdout"
 msgstr "输出包到标准输出"
 
-#: builtin/pack-objects.c:3298
+#: builtin/pack-objects.c:3278
 msgid "include tag objects that refer to objects to be packed"
 msgstr "包括那些引用了待打包对象的标签对象"
 
-#: builtin/pack-objects.c:3300
+#: builtin/pack-objects.c:3280
 msgid "keep unreachable objects"
 msgstr "维持不可达的对象"
 
-#: builtin/pack-objects.c:3302
+#: builtin/pack-objects.c:3282
 msgid "pack loose unreachable objects"
 msgstr "打包松散的不可达对象"
 
-#: builtin/pack-objects.c:3304
+#: builtin/pack-objects.c:3284
 msgid "unpack unreachable objects newer than <time>"
 msgstr "将比给定 <时间> 新的无法访问的对象解包"
 
-#: builtin/pack-objects.c:3307
+#: builtin/pack-objects.c:3287
 msgid "use the sparse reachability algorithm"
 msgstr "使用稀疏可达性算法"
 
-#: builtin/pack-objects.c:3309
+#: builtin/pack-objects.c:3289
 msgid "create thin packs"
 msgstr "创建精简包"
 
-#: builtin/pack-objects.c:3311
+#: builtin/pack-objects.c:3291
 msgid "create packs suitable for shallow fetches"
 msgstr "创建适合浅克隆仓库获取的包"
 
-#: builtin/pack-objects.c:3313
+#: builtin/pack-objects.c:3293
 msgid "ignore packs that have companion .keep file"
 msgstr "忽略配有 .keep 文件的包"
 
-#: builtin/pack-objects.c:3315
+#: builtin/pack-objects.c:3295
 msgid "ignore this pack"
 msgstr "忽略该 pack"
 
-#: builtin/pack-objects.c:3317
+#: builtin/pack-objects.c:3297
 msgid "pack compression level"
 msgstr "打包压缩级别"
 
-#: builtin/pack-objects.c:3319
+#: builtin/pack-objects.c:3299
 msgid "do not hide commits by grafts"
 msgstr "显示被移植隐藏的提交"
 
-#: builtin/pack-objects.c:3321
+#: builtin/pack-objects.c:3301
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr "使用 bitmap 索引(如果有的话)以提高对象计数时的速度"
 
-#: builtin/pack-objects.c:3323
+#: builtin/pack-objects.c:3303
 msgid "write a bitmap index together with the pack index"
 msgstr "在建立包索引的同时创建 bitmap 索引"
 
-#: builtin/pack-objects.c:3327
+#: builtin/pack-objects.c:3307
 msgid "write a bitmap index if possible"
 msgstr "如果可能,写 bitmap 索引"
 
-#: builtin/pack-objects.c:3331
+#: builtin/pack-objects.c:3311
 msgid "handling for missing objects"
 msgstr "处理丢失的对象"
 
-#: builtin/pack-objects.c:3334
+#: builtin/pack-objects.c:3314
 msgid "do not pack objects in promisor packfiles"
 msgstr "不要打包 promisor 包文件中的对象"
 
-#: builtin/pack-objects.c:3336
+#: builtin/pack-objects.c:3316
 msgid "respect islands during delta compression"
 msgstr "在增量压缩时参考数据岛"
 
-#: builtin/pack-objects.c:3361
+#: builtin/pack-objects.c:3345
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "增量链深度 %d 太深了,强制为 %d"
 
-#: builtin/pack-objects.c:3366
+#: builtin/pack-objects.c:3350
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "配置 pack.deltaCacheLimit 太高了,强制为 %d"
 
-#: builtin/pack-objects.c:3420
+#: builtin/pack-objects.c:3404
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr "不能使用 --max-pack-size 来构建传输用的包文件"
 
-#: builtin/pack-objects.c:3422
+#: builtin/pack-objects.c:3406
 msgid "minimum pack size limit is 1 MiB"
 msgstr "最小的包文件大小是 1 MiB"
 
-#: builtin/pack-objects.c:3427
+#: builtin/pack-objects.c:3411
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "--thin 不能用于创建一个可索引包"
 
-#: builtin/pack-objects.c:3430
+#: builtin/pack-objects.c:3414
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr "--keep-unreachable 和 --unpack-unreachable 不兼容"
 
-#: builtin/pack-objects.c:3436
+#: builtin/pack-objects.c:3420
 msgid "cannot use --filter without --stdout"
 msgstr "不能在没有 --stdout 的情况下使用 --filter"
 
-#: builtin/pack-objects.c:3497
+#: builtin/pack-objects.c:3481
 msgid "Enumerating objects"
 msgstr "枚举对象"
 
-#: builtin/pack-objects.c:3527
+#: builtin/pack-objects.c:3511
 #, c-format
 msgid "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>)"
 msgstr "总共 %<PRIu32> (差异 %<PRIu32>),复用 %<PRIu32> (差异 %<PRIu32>)"
@@ -16256,61 +16343,61 @@
 msgid "git pull [<options>] [<repository> [<refspec>...]]"
 msgstr "git pull [<选项>] [<仓库> [<引用规格>...]]"
 
-#: builtin/pull.c:141
+#: builtin/pull.c:142
 msgid "control for recursive fetching of submodules"
 msgstr "控制子模组的递归获取"
 
-#: builtin/pull.c:145
+#: builtin/pull.c:146
 msgid "Options related to merging"
 msgstr "和合并相关的选项"
 
-#: builtin/pull.c:148
+#: builtin/pull.c:149
 msgid "incorporate changes by rebasing rather than merging"
 msgstr "使用变基操作取代合并操作以合入修改"
 
-#: builtin/pull.c:176 builtin/rebase.c:447 builtin/revert.c:126
+#: builtin/pull.c:177 builtin/rebase.c:448 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "允许快进式"
 
-#: builtin/pull.c:185
+#: builtin/pull.c:186
 msgid "automatically stash/stash pop before and after rebase"
 msgstr "变基操作前后执行自动贮藏和弹出贮藏"
 
-#: builtin/pull.c:201
+#: builtin/pull.c:202
 msgid "Options related to fetching"
 msgstr "和获取相关的参数"
 
-#: builtin/pull.c:211
+#: builtin/pull.c:212
 msgid "force overwrite of local branch"
 msgstr "强制覆盖本地分支"
 
-#: builtin/pull.c:219
+#: builtin/pull.c:220
 msgid "number of submodules pulled in parallel"
 msgstr "并发拉取的子模组的数量"
 
-#: builtin/pull.c:316
+#: builtin/pull.c:320
 #, c-format
 msgid "Invalid value for pull.ff: %s"
 msgstr "pull.ff 的取值无效:%s"
 
-#: builtin/pull.c:433
+#: builtin/pull.c:437
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
 "fetched."
 msgstr "在您刚刚获取到的引用中没有变基操作的候选。"
 
-#: builtin/pull.c:435
+#: builtin/pull.c:439
 msgid ""
 "There are no candidates for merging among the refs that you just fetched."
 msgstr "在您刚刚获取到的引用中没有合并操作的候选。"
 
-#: builtin/pull.c:436
+#: builtin/pull.c:440
 msgid ""
 "Generally this means that you provided a wildcard refspec which had no\n"
 "matches on the remote end."
 msgstr "通常这意味着您提供了一个通配符引用规格但未能和远端匹配。"
 
-#: builtin/pull.c:439
+#: builtin/pull.c:443
 #, c-format
 msgid ""
 "You asked to pull from the remote '%s', but did not specify\n"
@@ -16320,42 +16407,42 @@
 "您要求从远程 '%s' 拉取,但是未指定一个分支。因为这不是当前\n"
 "分支默认的远程仓库,您必须在命令行中指定一个分支名。"
 
-#: builtin/pull.c:444 builtin/rebase.c:1326 git-parse-remote.sh:73
+#: builtin/pull.c:448 builtin/rebase.c:1347 git-parse-remote.sh:73
 msgid "You are not currently on a branch."
 msgstr "您当前不在一个分支上。"
 
-#: builtin/pull.c:446 builtin/pull.c:461 git-parse-remote.sh:79
+#: builtin/pull.c:450 builtin/pull.c:465 git-parse-remote.sh:79
 msgid "Please specify which branch you want to rebase against."
 msgstr "请指定您要变基到哪一个分支。"
 
-#: builtin/pull.c:448 builtin/pull.c:463 git-parse-remote.sh:82
+#: builtin/pull.c:452 builtin/pull.c:467 git-parse-remote.sh:82
 msgid "Please specify which branch you want to merge with."
 msgstr "请指定您要合并哪一个分支。"
 
-#: builtin/pull.c:449 builtin/pull.c:464
+#: builtin/pull.c:453 builtin/pull.c:468
 msgid "See git-pull(1) for details."
 msgstr "详见 git-pull(1)。"
 
-#: builtin/pull.c:451 builtin/pull.c:457 builtin/pull.c:466
-#: builtin/rebase.c:1332 git-parse-remote.sh:64
+#: builtin/pull.c:455 builtin/pull.c:461 builtin/pull.c:470
+#: builtin/rebase.c:1353 git-parse-remote.sh:64
 msgid "<remote>"
 msgstr "<远程>"
 
-#: builtin/pull.c:451 builtin/pull.c:466 builtin/pull.c:471
+#: builtin/pull.c:455 builtin/pull.c:470 builtin/pull.c:475
 #: git-parse-remote.sh:65
 msgid "<branch>"
 msgstr "<分支>"
 
-#: builtin/pull.c:459 builtin/rebase.c:1324 git-parse-remote.sh:75
+#: builtin/pull.c:463 builtin/rebase.c:1345 git-parse-remote.sh:75
 msgid "There is no tracking information for the current branch."
 msgstr "当前分支没有跟踪信息。"
 
-#: builtin/pull.c:468 git-parse-remote.sh:95
+#: builtin/pull.c:472 git-parse-remote.sh:95
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:"
 msgstr "如果您想要为此分支创建跟踪信息,您可以执行:"
 
-#: builtin/pull.c:473
+#: builtin/pull.c:477
 #, c-format
 msgid ""
 "Your configuration specifies to merge with the ref '%s'\n"
@@ -16364,32 +16451,32 @@
 "您的配置中指定要合并远程的引用 '%s',\n"
 "但是没有获取到这个引用。"
 
-#: builtin/pull.c:581
+#: builtin/pull.c:587
 #, c-format
 msgid "unable to access commit %s"
 msgstr "无法访问提交 %s"
 
-#: builtin/pull.c:861
+#: builtin/pull.c:867
 msgid "ignoring --verify-signatures for rebase"
 msgstr "为变基操作忽略 --verify-signatures"
 
-#: builtin/pull.c:916
+#: builtin/pull.c:922
 msgid "--[no-]autostash option is only valid with --rebase."
 msgstr "--[no-]autostash 选项只在使用 --rebase 时有效。"
 
-#: builtin/pull.c:924
+#: builtin/pull.c:930
 msgid "Updating an unborn branch with changes added to the index."
 msgstr "更新尚未诞生的分支,变更添加至索引。"
 
-#: builtin/pull.c:928
+#: builtin/pull.c:934
 msgid "pull with rebase"
 msgstr "变基式拉取"
 
-#: builtin/pull.c:929
+#: builtin/pull.c:935
 msgid "please commit or stash them."
 msgstr "请提交或贮藏它们。"
 
-#: builtin/pull.c:954
+#: builtin/pull.c:960
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -16399,7 +16486,7 @@
 "fetch 更新了当前的分支。快进您的工作区\n"
 "至提交 %s。"
 
-#: builtin/pull.c:960
+#: builtin/pull.c:966
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -16416,15 +16503,15 @@
 "$ git reset --hard\n"
 "恢复之前的状态。"
 
-#: builtin/pull.c:975
+#: builtin/pull.c:981
 msgid "Cannot merge multiple branches into empty head."
 msgstr "无法将多个分支合并到空分支。"
 
-#: builtin/pull.c:979
+#: builtin/pull.c:985
 msgid "Cannot rebase onto multiple branches."
 msgstr "无法变基到多个分支。"
 
-#: builtin/pull.c:986
+#: builtin/pull.c:992
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr "本地子模组中有修改,无法变基"
 
@@ -16572,17 +16659,94 @@
 msgid "Pushing to %s\n"
 msgstr "推送到 %s\n"
 
-#: builtin/push.c:364
+#: builtin/push.c:366
 #, c-format
 msgid "failed to push some refs to '%s'"
 msgstr "推送一些引用到 '%s' 失败"
 
-#: builtin/push.c:398
+#: builtin/push.c:541
+msgid "repository"
+msgstr "仓库"
+
+#: builtin/push.c:542 builtin/send-pack.c:164
+msgid "push all refs"
+msgstr "推送所有引用"
+
+#: builtin/push.c:543 builtin/send-pack.c:166
+msgid "mirror all refs"
+msgstr "镜像所有引用"
+
+#: builtin/push.c:545
+msgid "delete refs"
+msgstr "删除引用"
+
+#: builtin/push.c:546
+msgid "push tags (can't be used with --all or --mirror)"
+msgstr "推送标签(不能使用 --all or --mirror)"
+
+#: builtin/push.c:549 builtin/send-pack.c:167
+msgid "force updates"
+msgstr "强制更新"
+
+#: builtin/push.c:551 builtin/send-pack.c:181
+msgid "<refname>:<expect>"
+msgstr "<引用名>:<期望值>"
+
+#: builtin/push.c:552 builtin/send-pack.c:182
+msgid "require old value of ref to be at this value"
+msgstr "要求引用旧的取值为设定值"
+
+#: builtin/push.c:555
+msgid "control recursive pushing of submodules"
+msgstr "控制子模组的递归推送"
+
+#: builtin/push.c:557 builtin/send-pack.c:175
+msgid "use thin pack"
+msgstr "使用精简打包"
+
+#: builtin/push.c:558 builtin/push.c:559 builtin/send-pack.c:161
+#: builtin/send-pack.c:162
+msgid "receive pack program"
+msgstr "接收包程序"
+
+#: builtin/push.c:560
+msgid "set upstream for git pull/status"
+msgstr "设置 git pull/status 的上游"
+
+#: builtin/push.c:563
+msgid "prune locally removed refs"
+msgstr "清除本地删除的引用"
+
+#: builtin/push.c:565
+msgid "bypass pre-push hook"
+msgstr "绕过 pre-push 钩子"
+
+#: builtin/push.c:566
+msgid "push missing but relevant tags"
+msgstr "推送缺失但有关的标签"
+
+#: builtin/push.c:569 builtin/send-pack.c:169
+msgid "GPG sign the push"
+msgstr "用 GPG 为推送签名"
+
+#: builtin/push.c:571 builtin/send-pack.c:176
+msgid "request atomic transaction on remote side"
+msgstr "需要远端支持原子事务"
+
+#: builtin/push.c:589
+msgid "--delete is incompatible with --all, --mirror and --tags"
+msgstr "--delete 与 --all、--mirror 及 --tags 不兼容"
+
+#: builtin/push.c:591
+msgid "--delete doesn't make sense without any refs"
+msgstr "--delete 未接任何引用没有意义"
+
+#: builtin/push.c:611
 #, c-format
 msgid "bad repository '%s'"
 msgstr "坏的仓库 '%s'"
 
-#: builtin/push.c:399
+#: builtin/push.c:612
 msgid ""
 "No configured push destination.\n"
 "Either specify the URL from the command-line or configure a remote "
@@ -16603,104 +16767,27 @@
 "\n"
 "    git push <名称>\n"
 
-#: builtin/push.c:554
-msgid "repository"
-msgstr "仓库"
-
-#: builtin/push.c:555 builtin/send-pack.c:164
-msgid "push all refs"
-msgstr "推送所有引用"
-
-#: builtin/push.c:556 builtin/send-pack.c:166
-msgid "mirror all refs"
-msgstr "镜像所有引用"
-
-#: builtin/push.c:558
-msgid "delete refs"
-msgstr "删除引用"
-
-#: builtin/push.c:559
-msgid "push tags (can't be used with --all or --mirror)"
-msgstr "推送标签(不能使用 --all or --mirror)"
-
-#: builtin/push.c:562 builtin/send-pack.c:167
-msgid "force updates"
-msgstr "强制更新"
-
-#: builtin/push.c:564 builtin/send-pack.c:181
-msgid "<refname>:<expect>"
-msgstr "<引用名>:<期望值>"
-
-#: builtin/push.c:565 builtin/send-pack.c:182
-msgid "require old value of ref to be at this value"
-msgstr "要求引用旧的取值为设定值"
-
-#: builtin/push.c:568
-msgid "control recursive pushing of submodules"
-msgstr "控制子模组的递归推送"
-
-#: builtin/push.c:570 builtin/send-pack.c:175
-msgid "use thin pack"
-msgstr "使用精简打包"
-
-#: builtin/push.c:571 builtin/push.c:572 builtin/send-pack.c:161
-#: builtin/send-pack.c:162
-msgid "receive pack program"
-msgstr "接收包程序"
-
-#: builtin/push.c:573
-msgid "set upstream for git pull/status"
-msgstr "设置 git pull/status 的上游"
-
-#: builtin/push.c:576
-msgid "prune locally removed refs"
-msgstr "清除本地删除的引用"
-
-#: builtin/push.c:578
-msgid "bypass pre-push hook"
-msgstr "绕过 pre-push 钩子"
-
-#: builtin/push.c:579
-msgid "push missing but relevant tags"
-msgstr "推送缺失但有关的标签"
-
-#: builtin/push.c:582 builtin/send-pack.c:169
-msgid "GPG sign the push"
-msgstr "用 GPG 为推送签名"
-
-#: builtin/push.c:584 builtin/send-pack.c:176
-msgid "request atomic transaction on remote side"
-msgstr "需要远端支持原子事务"
-
-#: builtin/push.c:602
-msgid "--delete is incompatible with --all, --mirror and --tags"
-msgstr "--delete 与 --all、--mirror 及 --tags 不兼容"
-
-#: builtin/push.c:604
-msgid "--delete doesn't make sense without any refs"
-msgstr "--delete 未接任何引用没有意义"
-
-#: builtin/push.c:607
+#: builtin/push.c:627
 msgid "--all and --tags are incompatible"
 msgstr "--all 和 --tags 不兼容"
 
-#: builtin/push.c:609
+#: builtin/push.c:629
 msgid "--all can't be combined with refspecs"
 msgstr "--all 不能和引用规格同时使用"
 
-#: builtin/push.c:613
+#: builtin/push.c:633
 msgid "--mirror and --tags are incompatible"
 msgstr "--mirror 和 --tags 不兼容"
 
-#: builtin/push.c:615
+#: builtin/push.c:635
 msgid "--mirror can't be combined with refspecs"
 msgstr "--mirror 不能和引用规格同时使用"
 
-#: builtin/push.c:618
+#: builtin/push.c:638
 msgid "--all and --mirror are incompatible"
 msgstr "--all 和 --mirror 不兼容"
 
-#: builtin/push.c:637
+#: builtin/push.c:642
 msgid "push options must not have new line characters"
 msgstr "推送选项不能有换行符"
 
@@ -16817,10 +16904,9 @@
 
 #: builtin/rebase.c:32
 msgid ""
-"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] "
-"[<branch>]"
-msgstr ""
-"git rebase [-i] [选项] [--exec <命令>] [--onto <新基线>] [<上游>] [<分支>]"
+"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
+"[<upstream> [<branch>]]"
+msgstr "git rebase [-i] [options] [--exec <命令>] [--onto <新基线> | --keep-base] [<上游> [<分支>]]"
 
 #: builtin/rebase.c:34
 msgid ""
@@ -16859,189 +16945,189 @@
 msgid "could not generate todo list"
 msgstr "无法生成待办列表"
 
-#: builtin/rebase.c:382
+#: builtin/rebase.c:383
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "使用 --upstream 或 --onto 必须提供一个基线提交"
 
-#: builtin/rebase.c:437
+#: builtin/rebase.c:438
 msgid "git rebase--interactive [<options>]"
 msgstr "git rebase--interactive [<选项>]"
 
-#: builtin/rebase.c:449
+#: builtin/rebase.c:450
 msgid "keep empty commits"
 msgstr "保持空提交"
 
-#: builtin/rebase.c:451 builtin/revert.c:128
+#: builtin/rebase.c:452 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr "允许提交说明为空"
 
-#: builtin/rebase.c:452
+#: builtin/rebase.c:453
 msgid "rebase merge commits"
 msgstr "对合并提交变基"
 
-#: builtin/rebase.c:454
+#: builtin/rebase.c:455
 msgid "keep original branch points of cousins"
 msgstr "保持兄弟提交的原始分支点"
 
-#: builtin/rebase.c:456
+#: builtin/rebase.c:457
 msgid "move commits that begin with squash!/fixup!"
 msgstr "移动以 squash!/fixup! 开头的提交"
 
-#: builtin/rebase.c:457
+#: builtin/rebase.c:458
 msgid "sign commits"
 msgstr "签名提交"
 
-#: builtin/rebase.c:459 builtin/rebase.c:1403
+#: builtin/rebase.c:460 builtin/rebase.c:1427
 msgid "display a diffstat of what changed upstream"
 msgstr "显示上游变化的差异统计"
 
-#: builtin/rebase.c:461
+#: builtin/rebase.c:462
 msgid "continue rebase"
 msgstr "继续变基"
 
-#: builtin/rebase.c:463
+#: builtin/rebase.c:464
 msgid "skip commit"
 msgstr "跳过提交"
 
-#: builtin/rebase.c:464
+#: builtin/rebase.c:465
 msgid "edit the todo list"
 msgstr "变基待办列表"
 
-#: builtin/rebase.c:466
+#: builtin/rebase.c:467
 msgid "show the current patch"
 msgstr "显示当前补丁"
 
-#: builtin/rebase.c:469
+#: builtin/rebase.c:470
 msgid "shorten commit ids in the todo list"
 msgstr "缩短待办列表中的提交号"
 
-#: builtin/rebase.c:471
+#: builtin/rebase.c:472
 msgid "expand commit ids in the todo list"
 msgstr "扩展待办列表中的提交号"
 
-#: builtin/rebase.c:473
+#: builtin/rebase.c:474
 msgid "check the todo list"
 msgstr "检查待办列表"
 
-#: builtin/rebase.c:475
+#: builtin/rebase.c:476
 msgid "rearrange fixup/squash lines"
 msgstr "重新排列 fixup/squash 行"
 
-#: builtin/rebase.c:477
+#: builtin/rebase.c:478
 msgid "insert exec commands in todo list"
 msgstr "在待办列表中插入 exec 执行命令"
 
-#: builtin/rebase.c:478
+#: builtin/rebase.c:479
 msgid "onto"
 msgstr "onto"
 
-#: builtin/rebase.c:481
+#: builtin/rebase.c:482
 msgid "restrict-revision"
 msgstr "restrict-revision"
 
-#: builtin/rebase.c:481
+#: builtin/rebase.c:482
 msgid "restrict revision"
 msgstr "限制版本"
 
-#: builtin/rebase.c:483
+#: builtin/rebase.c:484
 msgid "squash-onto"
 msgstr "squash-onto"
 
-#: builtin/rebase.c:484
+#: builtin/rebase.c:485
 msgid "squash onto"
 msgstr "squash onto"
 
-#: builtin/rebase.c:486
+#: builtin/rebase.c:487
 msgid "the upstream commit"
 msgstr "上游提交"
 
-#: builtin/rebase.c:488
+#: builtin/rebase.c:489
 msgid "head-name"
 msgstr "head-name"
 
-#: builtin/rebase.c:488
+#: builtin/rebase.c:489
 msgid "head name"
 msgstr "head 名称"
 
-#: builtin/rebase.c:493
+#: builtin/rebase.c:494
 msgid "rebase strategy"
 msgstr "变基策略"
 
-#: builtin/rebase.c:494
+#: builtin/rebase.c:495
 msgid "strategy-opts"
 msgstr "strategy-opts"
 
-#: builtin/rebase.c:495
+#: builtin/rebase.c:496
 msgid "strategy options"
 msgstr "策略选项"
 
-#: builtin/rebase.c:496
+#: builtin/rebase.c:497
 msgid "switch-to"
 msgstr "切换到"
 
-#: builtin/rebase.c:497
+#: builtin/rebase.c:498
 msgid "the branch or commit to checkout"
 msgstr "要检出的分支或提交"
 
-#: builtin/rebase.c:498
+#: builtin/rebase.c:499
 msgid "onto-name"
 msgstr "onto-name"
 
-#: builtin/rebase.c:498
+#: builtin/rebase.c:499
 msgid "onto name"
 msgstr "onto name"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "cmd"
 msgstr "cmd"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "the command to run"
 msgstr "要执行的命令"
 
-#: builtin/rebase.c:502 builtin/rebase.c:1486
+#: builtin/rebase.c:503 builtin/rebase.c:1510
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "自动重新安排任何失败的 `exec`"
 
-#: builtin/rebase.c:518
+#: builtin/rebase.c:519
 msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
 msgstr "不使用 --rebase-merges,则 --[no-]rebase-cousins 没有效果"
 
-#: builtin/rebase.c:534
+#: builtin/rebase.c:535
 #, c-format
 msgid "%s requires an interactive rebase"
 msgstr "%s 需要交互式变基"
 
-#: builtin/rebase.c:586
+#: builtin/rebase.c:587
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "无法获取 'onto':'%s'"
 
-#: builtin/rebase.c:601
+#: builtin/rebase.c:602
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "无效的原始 head:'%s'"
 
-#: builtin/rebase.c:626
+#: builtin/rebase.c:627
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "忽略无效的 allow_rerere_autoupdate:'%s'"
 
-#: builtin/rebase.c:702
+#: builtin/rebase.c:703
 #, c-format
 msgid "Could not read '%s'"
 msgstr "不能读取 '%s'"
 
-#: builtin/rebase.c:720
+#: builtin/rebase.c:721
 #, c-format
 msgid "Cannot store %s"
 msgstr "不能存储 %s"
 
-#: builtin/rebase.c:827
+#: builtin/rebase.c:828
 msgid "could not determine HEAD revision"
 msgstr "不能确定 HEAD 版本"
 
-#: builtin/rebase.c:950 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:951 git-rebase--preserve-merges.sh:81
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -17054,7 +17140,7 @@
 "\"git rebase --skip\" 命令跳过这个提交。如果想要终止执行并回到\n"
 "\"git rebase\" 执行之前的状态,执行 \"git rebase --abort\"。"
 
-#: builtin/rebase.c:1031
+#: builtin/rebase.c:1032
 #, c-format
 msgid ""
 "\n"
@@ -17072,7 +17158,7 @@
 "\n"
 "因此 git 无法对其变基。"
 
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1339
 #, c-format
 msgid ""
 "%s\n"
@@ -17089,7 +17175,7 @@
 "    git rebase '<branch>'\n"
 "\n"
 
-#: builtin/rebase.c:1334
+#: builtin/rebase.c:1355
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -17102,128 +17188,132 @@
 "    git branch --set-upstream-to=%s/<branch> %s\n"
 "\n"
 
-#: builtin/rebase.c:1364
+#: builtin/rebase.c:1385
 msgid "exec commands cannot contain newlines"
 msgstr "exec 命令不能包含换行符"
 
-#: builtin/rebase.c:1368
+#: builtin/rebase.c:1389
 msgid "empty exec command"
 msgstr "空的 exec 命令"
 
-#: builtin/rebase.c:1396
+#: builtin/rebase.c:1418
 msgid "rebase onto given branch instead of upstream"
 msgstr "变基到给定的分支而非上游"
 
-#: builtin/rebase.c:1398
+#: builtin/rebase.c:1420
+msgid "use the merge-base of upstream and branch as the current base"
+msgstr "使用上游和分支的合并基线做为当前基线"
+
+#: builtin/rebase.c:1422
 msgid "allow pre-rebase hook to run"
 msgstr "允许执行 pre-rebase 钩子"
 
-#: builtin/rebase.c:1400
+#: builtin/rebase.c:1424
 msgid "be quiet. implies --no-stat"
 msgstr "安静。暗示 --no-stat"
 
-#: builtin/rebase.c:1406
+#: builtin/rebase.c:1430
 msgid "do not show diffstat of what changed upstream"
 msgstr "不显示上游变化的差异统计"
 
-#: builtin/rebase.c:1409
+#: builtin/rebase.c:1433
 msgid "add a Signed-off-by: line to each commit"
 msgstr "为每一个提交添加一个 Signed-off-by: 签名"
 
-#: builtin/rebase.c:1411 builtin/rebase.c:1415 builtin/rebase.c:1417
+#: builtin/rebase.c:1435 builtin/rebase.c:1439 builtin/rebase.c:1441
 msgid "passed to 'git am'"
 msgstr "传递给 'git am'"
 
-#: builtin/rebase.c:1419 builtin/rebase.c:1421
+#: builtin/rebase.c:1443 builtin/rebase.c:1445
 msgid "passed to 'git apply'"
 msgstr "传递给 'git apply'"
 
-#: builtin/rebase.c:1423 builtin/rebase.c:1426
+#: builtin/rebase.c:1447 builtin/rebase.c:1450
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "拣选所有提交,即使未修改"
 
-#: builtin/rebase.c:1428
+#: builtin/rebase.c:1452
 msgid "continue"
 msgstr "继续"
 
-#: builtin/rebase.c:1431
+#: builtin/rebase.c:1455
 msgid "skip current patch and continue"
 msgstr "跳过当前补丁并继续"
 
 #  译者:注意保持前导空格
-#: builtin/rebase.c:1433
+#: builtin/rebase.c:1457
 msgid "abort and check out the original branch"
 msgstr "终止并检出原有分支"
 
-#: builtin/rebase.c:1436
+#: builtin/rebase.c:1460
 msgid "abort but keep HEAD where it is"
 msgstr "终止但保持 HEAD 不变"
 
-#: builtin/rebase.c:1437
+#: builtin/rebase.c:1461
 msgid "edit the todo list during an interactive rebase"
 msgstr "在交互式变基中编辑待办列表"
 
-#: builtin/rebase.c:1440
+#: builtin/rebase.c:1464
 msgid "show the patch file being applied or merged"
 msgstr "显示正在应用或合并的补丁文件"
 
-#: builtin/rebase.c:1443
+#: builtin/rebase.c:1467
 msgid "use merging strategies to rebase"
 msgstr "使用合并策略进行变基"
 
-#: builtin/rebase.c:1447
+#: builtin/rebase.c:1471
 msgid "let the user edit the list of commits to rebase"
 msgstr "让用户编辑要变基的提交列表"
 
-#: builtin/rebase.c:1451
+#: builtin/rebase.c:1475
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr "(已弃用)尝试重建合并提交而非忽略它们"
 
-#: builtin/rebase.c:1455
+#: builtin/rebase.c:1479
 msgid "preserve empty commits during rebase"
 msgstr "变基时保留空提交"
 
-#: builtin/rebase.c:1457
+#: builtin/rebase.c:1481
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "在 -i 交互模式下,移动以 squash!/fixup! 开头的提交"
 
-#: builtin/rebase.c:1463
+#: builtin/rebase.c:1487
 msgid "automatically stash/stash pop before and after"
 msgstr "在操作前后执行自动贮藏和弹出贮藏"
 
-#: builtin/rebase.c:1465
+#: builtin/rebase.c:1489
 msgid "add exec lines after each commit of the editable list"
 msgstr "可编辑列表的每一个提交下面增加一行 exec"
 
-#: builtin/rebase.c:1469
+#: builtin/rebase.c:1493
 msgid "allow rebasing commits with empty messages"
 msgstr "允许针对空提交说明的提交变基"
 
-#: builtin/rebase.c:1472
+#: builtin/rebase.c:1496
 msgid "try to rebase merges instead of skipping them"
 msgstr "尝试对合并提交变基而不是忽略它们"
 
-#: builtin/rebase.c:1475
+#: builtin/rebase.c:1499
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "使用 'merge-base --fork-point' 来优化上游"
 
-#: builtin/rebase.c:1477
+#: builtin/rebase.c:1501
 msgid "use the given merge strategy"
 msgstr "使用给定的合并策略"
 
-#: builtin/rebase.c:1479 builtin/revert.c:115
+#: builtin/rebase.c:1503 builtin/revert.c:115
 msgid "option"
 msgstr "选项"
 
-#: builtin/rebase.c:1480
+#: builtin/rebase.c:1504
 msgid "pass the argument through to the merge strategy"
 msgstr "将参数传递给合并策略"
 
-#: builtin/rebase.c:1483
+#: builtin/rebase.c:1507
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "将所有可达的提交变基到根提交"
 
-#: builtin/rebase.c:1500
+#: builtin/rebase.c:1524
 msgid ""
 "the rebase.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
@@ -17231,28 +17321,36 @@
 "对 rebase.useBuiltin 的支持已被删除!\n"
 "详见 'git help config' 中的条目。"
 
-#: builtin/rebase.c:1506
+#: builtin/rebase.c:1530
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "看起来 'git-am' 正在执行中。无法变基。"
 
-#: builtin/rebase.c:1547
+#: builtin/rebase.c:1571
 msgid ""
 "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
 msgstr "git rebase --preserve-merges 被弃用。用 --rebase-merges 代替。"
 
-#: builtin/rebase.c:1551
+#: builtin/rebase.c:1576
+msgid "cannot combine '--keep-base' with '--onto'"
+msgstr "不能将 '--keep-base' 和 '--onto' 组合使用"
+
+#: builtin/rebase.c:1578
+msgid "cannot combine '--keep-base' with '--root'"
+msgstr "不能将 '--keep-base' 和 '--root' 组合使用"
+
+#: builtin/rebase.c:1582
 msgid "No rebase in progress?"
 msgstr "没有正在进行的变基?"
 
-#: builtin/rebase.c:1555
+#: builtin/rebase.c:1586
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr "动作 --edit-todo 只能用在交互式变基过程中。"
 
-#: builtin/rebase.c:1578
+#: builtin/rebase.c:1609
 msgid "Cannot read HEAD"
 msgstr "不能读取 HEAD"
 
-#: builtin/rebase.c:1590
+#: builtin/rebase.c:1621
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -17260,16 +17358,16 @@
 "您必须编辑所有的合并冲突,然后通过 git add\n"
 "命令将它们标记为已解决"
 
-#: builtin/rebase.c:1609
+#: builtin/rebase.c:1640
 msgid "could not discard worktree changes"
 msgstr "无法丢弃工作区变更"
 
-#: builtin/rebase.c:1628
+#: builtin/rebase.c:1659
 #, c-format
 msgid "could not move back to %s"
 msgstr "无法移回 %s"
 
-#: builtin/rebase.c:1673
+#: builtin/rebase.c:1704
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -17288,163 +17386,155 @@
 "\t%s\n"
 "然后再重新执行。 为避免丢失重要数据,我已经停止当前操作。\n"
 
-#: builtin/rebase.c:1694
+#: builtin/rebase.c:1725
 msgid "switch `C' expects a numerical value"
 msgstr "开关 `C' 期望一个数字值"
 
-#: builtin/rebase.c:1735
+#: builtin/rebase.c:1766
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "未知模式:%s"
 
-#: builtin/rebase.c:1757
+#: builtin/rebase.c:1788
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy 需要 --merge 或 --interactive"
 
-#: builtin/rebase.c:1797
+#: builtin/rebase.c:1828
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec 需要 --exec 或 --interactive"
 
-#: builtin/rebase.c:1809
+#: builtin/rebase.c:1840
 msgid "cannot combine am options with either interactive or merge options"
 msgstr "不能将 am 选项与交互或合并选项同时使用"
 
-#: builtin/rebase.c:1828
+#: builtin/rebase.c:1859
 msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
 msgstr "不能将 '--preserve-merges' 和 '--rebase-merges' 同时使用"
 
-#: builtin/rebase.c:1832
+#: builtin/rebase.c:1863
 msgid ""
 "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
 msgstr ""
 "错误:不能将 '--preserve-merges' 和 '--reschedule-failed-exec' 同时使用"
 
-#: builtin/rebase.c:1838
-msgid "cannot combine '--rebase-merges' with '--strategy-option'"
-msgstr "不能将 '--rebase-merges' 和 '--strategy-option' 同时使用"
-
-#: builtin/rebase.c:1841
-msgid "cannot combine '--rebase-merges' with '--strategy'"
-msgstr "不能将 '--rebase-merges' 和 '--strategy' 同时使用"
-
-#: builtin/rebase.c:1865
+#: builtin/rebase.c:1887
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "无效的上游 '%s'"
 
-#: builtin/rebase.c:1871
+#: builtin/rebase.c:1893
 msgid "Could not create new root commit"
 msgstr "不能创建新的根提交"
 
-#: builtin/rebase.c:1889
+#: builtin/rebase.c:1919
+#, c-format
+msgid "'%s': need exactly one merge base with branch"
+msgstr "'%s':只需要与分支的一个合并基线"
+
+#: builtin/rebase.c:1922
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "'%s':只需要一个合并基线"
 
-#: builtin/rebase.c:1896
+#: builtin/rebase.c:1930
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "没有指向一个有效的提交 '%s'"
 
-#: builtin/rebase.c:1921
+#: builtin/rebase.c:1955
 #, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr "致命错误:无此分支/提交 '%s'"
 
-#: builtin/rebase.c:1929 builtin/submodule--helper.c:38
+#: builtin/rebase.c:1963 builtin/submodule--helper.c:38
 #: builtin/submodule--helper.c:1934
 #, c-format
 msgid "No such ref: %s"
 msgstr "没有这样的引用:%s"
 
-#: builtin/rebase.c:1940
+#: builtin/rebase.c:1974
 msgid "Could not resolve HEAD to a revision"
 msgstr "无法将 HEAD 解析为一个版本"
 
-#: builtin/rebase.c:1981
+#: builtin/rebase.c:2012
 msgid "Cannot autostash"
 msgstr "无法 autostash"
 
-#: builtin/rebase.c:1984
+#: builtin/rebase.c:2015
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "意外的 stash 响应:'%s'"
 
-#: builtin/rebase.c:1990
+#: builtin/rebase.c:2021
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "不能为 '%s' 创建目录"
 
-#: builtin/rebase.c:1993
+#: builtin/rebase.c:2024
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "创建了 autostash:%s\n"
 
-#: builtin/rebase.c:1996
+#: builtin/rebase.c:2027
 msgid "could not reset --hard"
 msgstr "无法 reset --hard"
 
-#: builtin/rebase.c:1997 builtin/reset.c:114
-#, c-format
-msgid "HEAD is now at %s"
-msgstr "HEAD 现在位于 %s"
-
-#: builtin/rebase.c:2013
+#: builtin/rebase.c:2036
 msgid "Please commit or stash them."
 msgstr "请提交或贮藏修改。"
 
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:2063
 #, c-format
 msgid "could not parse '%s'"
 msgstr "无法解析 '%s'"
 
-#: builtin/rebase.c:2053
+#: builtin/rebase.c:2076
 #, c-format
 msgid "could not switch to %s"
 msgstr "无法切换到 %s"
 
-#: builtin/rebase.c:2064
+#: builtin/rebase.c:2087
 msgid "HEAD is up to date."
 msgstr "HEAD 是最新的。"
 
-#: builtin/rebase.c:2066
+#: builtin/rebase.c:2089
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "当前分支 %s 是最新的。\n"
 
-#: builtin/rebase.c:2074
+#: builtin/rebase.c:2097
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD 是最新的,强制变基。"
 
-#: builtin/rebase.c:2076
+#: builtin/rebase.c:2099
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "当前分支 %s 是最新的,强制变基。\n"
 
-#: builtin/rebase.c:2084
+#: builtin/rebase.c:2107
 msgid "The pre-rebase hook refused to rebase."
 msgstr "pre-rebase 钩子拒绝了变基操作。"
 
-#: builtin/rebase.c:2091
+#: builtin/rebase.c:2114
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "到 %s 的变更:\n"
 
-#: builtin/rebase.c:2094
+#: builtin/rebase.c:2117
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "从 %s 到 %s 的变更:\n"
 
-#: builtin/rebase.c:2119
+#: builtin/rebase.c:2142
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr "首先,回退头指针以便在其上重放您的工作...\n"
 
-#: builtin/rebase.c:2128
+#: builtin/rebase.c:2151
 msgid "Could not detach HEAD"
 msgstr "无法分离头指针"
 
-#: builtin/rebase.c:2137
+#: builtin/rebase.c:2160
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "快进 %s 到 %s。\n"
@@ -17453,7 +17543,7 @@
 msgid "git receive-pack <git-dir>"
 msgstr "git receive-pack <仓库目录>"
 
-#: builtin/receive-pack.c:832
+#: builtin/receive-pack.c:830
 msgid ""
 "By default, updating the current branch in a non-bare repository\n"
 "is denied, because it will make the index and work tree inconsistent\n"
@@ -17479,7 +17569,7 @@
 "若要屏蔽此信息且保持默认行为,设置 'receive.denyCurrentBranch'\n"
 "配置变量为 'refuse'。"
 
-#: builtin/receive-pack.c:852
+#: builtin/receive-pack.c:850
 msgid ""
 "By default, deleting the current branch is denied, because the next\n"
 "'git clone' won't result in any file checked out, causing confusion.\n"
@@ -17498,11 +17588,11 @@
 "\n"
 "若要屏蔽此信息,您可以设置它为 'refuse'。"
 
-#: builtin/receive-pack.c:1938
+#: builtin/receive-pack.c:1936
 msgid "quiet"
 msgstr "静默模式"
 
-#: builtin/receive-pack.c:1952
+#: builtin/receive-pack.c:1950
 msgid "You must specify a directory."
 msgstr "您必须指定一个目录。"
 
@@ -18071,11 +18161,11 @@
 msgid "Unknown subcommand: %s"
 msgstr "未知子命令:%s"
 
-#: builtin/repack.c:22
+#: builtin/repack.c:23
 msgid "git repack [<options>]"
 msgstr "git repack [<选项>]"
 
-#: builtin/repack.c:27
+#: builtin/repack.c:28
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -18083,111 +18173,111 @@
 "增量 repack 和 bitmap 索引不兼容。  使用 --no-write-bitmap-index\n"
 "或禁用 pack.writebitmaps 配置。"
 
-#: builtin/repack.c:190
+#: builtin/repack.c:191
 msgid "could not start pack-objects to repack promisor objects"
 msgstr "无法开始 pack-objects 来重新打包 promisor 对象"
 
-#: builtin/repack.c:229 builtin/repack.c:408
+#: builtin/repack.c:230 builtin/repack.c:409
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr "repack:期望来自 pack-objects 的完整十六进制对象 ID。"
 
-#: builtin/repack.c:246
+#: builtin/repack.c:247
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr "无法完成 pack-objects 来重新打包 promisor 对象"
 
-#: builtin/repack.c:284
+#: builtin/repack.c:285
 msgid "pack everything in a single pack"
 msgstr "所有内容打包到一个包文件中"
 
-#: builtin/repack.c:286
+#: builtin/repack.c:287
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "和 -a 相同,并将不可达的对象设为松散对象"
 
-#: builtin/repack.c:289
+#: builtin/repack.c:290
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "删除多余的包,运行 git-prune-packed"
 
-#: builtin/repack.c:291
+#: builtin/repack.c:292
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "向 git-pack-objects 传递参数 --no-reuse-delta"
 
-#: builtin/repack.c:293
+#: builtin/repack.c:294
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "向 git-pack-objects 传递参数 --no-reuse-object"
 
-#: builtin/repack.c:295
+#: builtin/repack.c:296
 msgid "do not run git-update-server-info"
 msgstr "不运行 git-update-server-info"
 
-#: builtin/repack.c:298
+#: builtin/repack.c:299
 msgid "pass --local to git-pack-objects"
 msgstr "向 git-pack-objects 传递参数 --local"
 
-#: builtin/repack.c:300
+#: builtin/repack.c:301
 msgid "write bitmap index"
 msgstr "写 bitmap 索引"
 
-#: builtin/repack.c:302
+#: builtin/repack.c:303
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "向 git-pack-objects 传递参数 --delta-islands"
 
-#: builtin/repack.c:303
+#: builtin/repack.c:304
 msgid "approxidate"
 msgstr "近似日期"
 
-#: builtin/repack.c:304
+#: builtin/repack.c:305
 msgid "with -A, do not loosen objects older than this"
 msgstr "使用 -A,不要将早于给定时间的对象过期"
 
-#: builtin/repack.c:306
+#: builtin/repack.c:307
 msgid "with -a, repack unreachable objects"
 msgstr "使用 -a ,重新对不可达对象打包"
 
-#: builtin/repack.c:308
+#: builtin/repack.c:309
 msgid "size of the window used for delta compression"
 msgstr "用于增量压缩的窗口值"
 
-#: builtin/repack.c:309 builtin/repack.c:315
+#: builtin/repack.c:310 builtin/repack.c:316
 msgid "bytes"
 msgstr "字节"
 
-#: builtin/repack.c:310
+#: builtin/repack.c:311
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr "和上面的相似,但限制内存大小而非条目数"
 
-#: builtin/repack.c:312
+#: builtin/repack.c:313
 msgid "limits the maximum delta depth"
 msgstr "限制最大增量深度"
 
-#: builtin/repack.c:314
+#: builtin/repack.c:315
 msgid "limits the maximum number of threads"
 msgstr "限制最大线程数"
 
-#: builtin/repack.c:316
+#: builtin/repack.c:317
 msgid "maximum size of each packfile"
 msgstr "每个包文件的最大尺寸"
 
-#: builtin/repack.c:318
+#: builtin/repack.c:319
 msgid "repack objects in packs marked with .keep"
 msgstr "对标记为 .keep 的包中的对象重新打包"
 
-#: builtin/repack.c:320
+#: builtin/repack.c:321
 msgid "do not repack this pack"
 msgstr "不要对该包文件重新打包"
 
-#: builtin/repack.c:330
+#: builtin/repack.c:331
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "不能删除珍品仓库中的打包文件"
 
-#: builtin/repack.c:334
+#: builtin/repack.c:335
 msgid "--keep-unreachable and -A are incompatible"
 msgstr "--keep-unreachable 和 -A 不兼容"
 
-#: builtin/repack.c:417
+#: builtin/repack.c:418
 msgid "Nothing new to pack."
 msgstr "没有新的要打包。"
 
-#: builtin/repack.c:478
+#: builtin/repack.c:479
 #, c-format
 msgid ""
 "WARNING: Some packs in use have been renamed by\n"
@@ -18203,7 +18293,7 @@
 "警告:并且尝试重命名改回原有文件名的操作也失败。\n"
 "警告:请手动将 %s 下的这些文件重命名:\n"
 
-#: builtin/repack.c:526
+#: builtin/repack.c:527
 #, c-format
 msgid "failed to remove '%s'"
 msgstr "删除 '%s' 失败"
@@ -18311,8 +18401,8 @@
 msgid "unable to write object to database"
 msgstr "无法向数据库写入对象"
 
-#: builtin/replace.c:322 builtin/replace.c:377 builtin/replace.c:422
-#: builtin/replace.c:452
+#: builtin/replace.c:322 builtin/replace.c:378 builtin/replace.c:423
+#: builtin/replace.c:453
 #, c-format
 msgid "not a valid object name: '%s'"
 msgstr "不是一个有效的对象名:'%s'"
@@ -18331,53 +18421,53 @@
 msgid "new object is the same as the old one: '%s'"
 msgstr "新对象和旧对象相同:'%s'"
 
-#: builtin/replace.c:383
+#: builtin/replace.c:384
 #, c-format
 msgid "could not parse %s as a commit"
 msgstr "无法将 %s 解析为一个提交"
 
-#: builtin/replace.c:414
+#: builtin/replace.c:415
 #, c-format
 msgid "bad mergetag in commit '%s'"
 msgstr "提交 '%s' 中含有损坏的合并标签"
 
-#: builtin/replace.c:416
+#: builtin/replace.c:417
 #, c-format
 msgid "malformed mergetag in commit '%s'"
 msgstr "提交 '%s' 中含有格式错误的合并标签"
 
-#: builtin/replace.c:428
+#: builtin/replace.c:429
 #, c-format
 msgid ""
 "original commit '%s' contains mergetag '%s' that is discarded; use --edit "
 "instead of --graft"
 msgstr "原始提交 '%s' 包含已经丢弃的合并标签 '%s',使用 --edit 代替 --graft"
 
-#: builtin/replace.c:467
+#: builtin/replace.c:468
 #, c-format
 msgid "the original commit '%s' has a gpg signature"
 msgstr "原始提交 '%s' 中有一个 gpg 签名"
 
-#: builtin/replace.c:468
+#: builtin/replace.c:469
 msgid "the signature will be removed in the replacement commit!"
 msgstr "在替换的提交中签名将被移除!"
 
-#: builtin/replace.c:478
+#: builtin/replace.c:479
 #, c-format
 msgid "could not write replacement commit for: '%s'"
 msgstr "不能为 '%s' 写替换提交"
 
-#: builtin/replace.c:486
+#: builtin/replace.c:487
 #, c-format
 msgid "graft for '%s' unnecessary"
 msgstr "对 '%s' 移植没有必要"
 
-#: builtin/replace.c:490
+#: builtin/replace.c:491
 #, c-format
 msgid "new commit is the same as the old one: '%s'"
 msgstr "新提交和旧的一样:'%s'"
 
-#: builtin/replace.c:525
+#: builtin/replace.c:526
 #, c-format
 msgid ""
 "could not convert the following graft(s):\n"
@@ -18386,71 +18476,71 @@
 "不能转换下列移植:\n"
 "%s"
 
-#: builtin/replace.c:546
+#: builtin/replace.c:547
 msgid "list replace refs"
 msgstr "列出替换的引用"
 
-#: builtin/replace.c:547
+#: builtin/replace.c:548
 msgid "delete replace refs"
 msgstr "删除替换的引用"
 
-#: builtin/replace.c:548
+#: builtin/replace.c:549
 msgid "edit existing object"
 msgstr "编辑现存的对象"
 
-#: builtin/replace.c:549
+#: builtin/replace.c:550
 msgid "change a commit's parents"
 msgstr "修改一个提交的父提交"
 
-#: builtin/replace.c:550
+#: builtin/replace.c:551
 msgid "convert existing graft file"
 msgstr "转换现存的移植文件"
 
-#: builtin/replace.c:551
+#: builtin/replace.c:552
 msgid "replace the ref if it exists"
 msgstr "如果存在则替换引用"
 
-#: builtin/replace.c:553
+#: builtin/replace.c:554
 msgid "do not pretty-print contents for --edit"
 msgstr "不要为 --edit 操作美观显示内容"
 
-#: builtin/replace.c:554
+#: builtin/replace.c:555
 msgid "use this format"
 msgstr "使用此格式"
 
-#: builtin/replace.c:567
+#: builtin/replace.c:568
 msgid "--format cannot be used when not listing"
 msgstr "不列出时不能使用 --format"
 
-#: builtin/replace.c:575
+#: builtin/replace.c:576
 msgid "-f only makes sense when writing a replacement"
 msgstr "只有写一个替换时 -f 才有意义"
 
-#: builtin/replace.c:579
+#: builtin/replace.c:580
 msgid "--raw only makes sense with --edit"
 msgstr "--raw 只有和 --edit 共用才有意义"
 
-#: builtin/replace.c:585
+#: builtin/replace.c:586
 msgid "-d needs at least one argument"
 msgstr "-d 需要至少一个参数"
 
-#: builtin/replace.c:591
+#: builtin/replace.c:592
 msgid "bad number of arguments"
 msgstr "错误的参数个数"
 
-#: builtin/replace.c:597
+#: builtin/replace.c:598
 msgid "-e needs exactly one argument"
 msgstr "-e 需要且仅需要一个参数"
 
-#: builtin/replace.c:603
+#: builtin/replace.c:604
 msgid "-g needs at least one argument"
 msgstr "-g 需要至少一个参数"
 
-#: builtin/replace.c:609
+#: builtin/replace.c:610
 msgid "--convert-graft-file takes no argument"
 msgstr "--convert-graft-file 不带参数"
 
-#: builtin/replace.c:615
+#: builtin/replace.c:616
 msgid "only one pattern can be given with -l"
 msgstr "只能为 -l 提供一个模式"
 
@@ -18517,14 +18607,19 @@
 msgid "Failed to find tree of %s."
 msgstr "无法找到 %s 指向的树。"
 
+#: builtin/reset.c:114
+#, c-format
+msgid "HEAD is now at %s"
+msgstr "HEAD 现在位于 %s"
+
 #  译者:汉字之间无空格,故删除%s前后空格
 #: builtin/reset.c:193
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "在合并过程中不能做%s重置操作。"
 
-#: builtin/reset.c:293 builtin/stash.c:514 builtin/stash.c:589
-#: builtin/stash.c:613
+#: builtin/reset.c:293 builtin/stash.c:520 builtin/stash.c:595
+#: builtin/stash.c:619
 msgid "be quiet, only report errors"
 msgstr "安静模式,只报告错误"
 
@@ -18607,24 +18702,19 @@
 msgid "Could not write new index file."
 msgstr "不能写入新的索引文件。"
 
-#: builtin/rev-list.c:412
+#: builtin/rev-list.c:411
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr "不能同时使用 --exclude-promisor-objects 和 --missing 选项"
 
-#: builtin/rev-list.c:473
+#: builtin/rev-list.c:472
 msgid "object filtering requires --objects"
 msgstr "对象过滤需要 --objects"
 
-#: builtin/rev-list.c:476
-#, c-format
-msgid "invalid sparse value '%s'"
-msgstr "无效的稀疏值 '%s'"
-
-#: builtin/rev-list.c:527
+#: builtin/rev-list.c:522
 msgid "rev-list does not support display of notes"
 msgstr "rev-list 不支持显示注解"
 
-#: builtin/rev-list.c:530
+#: builtin/rev-list.c:525
 msgid "cannot combine --use-bitmap-index with object filtering"
 msgstr "不能将 --use-bitmap-index 和对象过滤组合使用"
 
@@ -19155,134 +19245,134 @@
 msgid "could not save index tree"
 msgstr "不能保存索引树"
 
-#: builtin/stash.c:434
+#: builtin/stash.c:436
 msgid "could not restore untracked files from stash"
 msgstr "无法从贮藏条目中恢复未跟踪文件"
 
-#: builtin/stash.c:448
+#: builtin/stash.c:450
 #, c-format
 msgid "Merging %s with %s"
 msgstr "正在合并 %s 和 %s"
 
-#: builtin/stash.c:458 git-legacy-stash.sh:680
+#: builtin/stash.c:460 git-legacy-stash.sh:680
 msgid "Index was not unstashed."
 msgstr "索引未从贮藏中恢复。"
 
-#: builtin/stash.c:516 builtin/stash.c:615
+#: builtin/stash.c:522 builtin/stash.c:621
 msgid "attempt to recreate the index"
 msgstr "尝试重建索引"
 
-#: builtin/stash.c:549
+#: builtin/stash.c:555
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "丢弃了 %s(%s)"
 
-#: builtin/stash.c:552
+#: builtin/stash.c:558
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s:无法丢弃贮藏条目"
 
-#: builtin/stash.c:577
+#: builtin/stash.c:583
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "'%s' 不是一个贮藏引用"
 
-#: builtin/stash.c:627 git-legacy-stash.sh:694
+#: builtin/stash.c:633 git-legacy-stash.sh:694
 msgid "The stash entry is kept in case you need it again."
 msgstr "贮藏条目被保留以备您再次需要。"
 
-#: builtin/stash.c:650 git-legacy-stash.sh:712
+#: builtin/stash.c:656 git-legacy-stash.sh:712
 msgid "No branch name specified"
 msgstr "未指定分支名"
 
-#: builtin/stash.c:790 builtin/stash.c:827
+#: builtin/stash.c:796 builtin/stash.c:833
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "无法用 %2$s 更新 %1$s"
 
-#: builtin/stash.c:808 builtin/stash.c:1461 builtin/stash.c:1497
+#: builtin/stash.c:814 builtin/stash.c:1470 builtin/stash.c:1506
 msgid "stash message"
 msgstr "贮藏说明"
 
-#: builtin/stash.c:818
+#: builtin/stash.c:824
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" 需要一个 <提交> 参数"
 
-#: builtin/stash.c:1040 git-legacy-stash.sh:217
+#: builtin/stash.c:1046 git-legacy-stash.sh:217
 msgid "No changes selected"
 msgstr "没有选择变更"
 
-#: builtin/stash.c:1136 git-legacy-stash.sh:150
+#: builtin/stash.c:1145 git-legacy-stash.sh:150
 msgid "You do not have the initial commit yet"
 msgstr "您尚未建立初始提交"
 
-#: builtin/stash.c:1163 git-legacy-stash.sh:165
+#: builtin/stash.c:1172 git-legacy-stash.sh:165
 msgid "Cannot save the current index state"
 msgstr "无法保存当前索引状态"
 
-#: builtin/stash.c:1172 git-legacy-stash.sh:180
+#: builtin/stash.c:1181 git-legacy-stash.sh:180
 msgid "Cannot save the untracked files"
 msgstr "无法保存未跟踪文件"
 
-#: builtin/stash.c:1183 builtin/stash.c:1192 git-legacy-stash.sh:200
+#: builtin/stash.c:1192 builtin/stash.c:1201 git-legacy-stash.sh:200
 #: git-legacy-stash.sh:213
 msgid "Cannot save the current worktree state"
 msgstr "无法保存当前工作区状态"
 
-#: builtin/stash.c:1220 git-legacy-stash.sh:233
+#: builtin/stash.c:1229 git-legacy-stash.sh:233
 msgid "Cannot record working tree state"
 msgstr "不能记录工作区状态"
 
-#: builtin/stash.c:1269 git-legacy-stash.sh:337
+#: builtin/stash.c:1278 git-legacy-stash.sh:337
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr "不能同时使用参数 --patch 和 --include-untracked 或 --all"
 
-#: builtin/stash.c:1285
+#: builtin/stash.c:1294
 msgid "Did you forget to 'git add'?"
 msgstr "您是否忘了执行 'git add'?"
 
-#: builtin/stash.c:1300 git-legacy-stash.sh:345
+#: builtin/stash.c:1309 git-legacy-stash.sh:345
 msgid "No local changes to save"
 msgstr "没有要保存的本地修改"
 
-#: builtin/stash.c:1307 git-legacy-stash.sh:350
+#: builtin/stash.c:1316 git-legacy-stash.sh:350
 msgid "Cannot initialize stash"
 msgstr "无法初始化贮藏"
 
-#: builtin/stash.c:1322 git-legacy-stash.sh:354
+#: builtin/stash.c:1331 git-legacy-stash.sh:354
 msgid "Cannot save the current status"
 msgstr "无法保存当前状态"
 
-#: builtin/stash.c:1327
+#: builtin/stash.c:1336
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "保存工作目录和索引状态 %s"
 
-#: builtin/stash.c:1417 git-legacy-stash.sh:384
+#: builtin/stash.c:1426 git-legacy-stash.sh:384
 msgid "Cannot remove worktree changes"
 msgstr "无法删除工作区变更"
 
-#: builtin/stash.c:1452 builtin/stash.c:1488
+#: builtin/stash.c:1461 builtin/stash.c:1497
 msgid "keep index"
 msgstr "保持索引"
 
-#: builtin/stash.c:1454 builtin/stash.c:1490
+#: builtin/stash.c:1463 builtin/stash.c:1499
 msgid "stash in patch mode"
 msgstr "以补丁模式贮藏"
 
-#: builtin/stash.c:1455 builtin/stash.c:1491
+#: builtin/stash.c:1464 builtin/stash.c:1500
 msgid "quiet mode"
 msgstr "静默模式"
 
-#: builtin/stash.c:1457 builtin/stash.c:1493
+#: builtin/stash.c:1466 builtin/stash.c:1502
 msgid "include untracked files in stash"
 msgstr "贮藏中包含未跟踪文件"
 
-#: builtin/stash.c:1459 builtin/stash.c:1495
+#: builtin/stash.c:1468 builtin/stash.c:1504
 msgid "include ignore files"
 msgstr "包含忽略的文件"
 
-#: builtin/stash.c:1555
+#: builtin/stash.c:1564
 #, c-format
 msgid "could not exec %s"
 msgstr "不能执行 %s"
@@ -19642,8 +19732,8 @@
 msgstr "不要输出克隆进度"
 
 #: builtin/submodule--helper.c:1877
-msgid "git submodule--helper update_clone [--prefix=<path>] [<path>...]"
-msgstr "git submodule--helper update_clone [--prefix=<路径>] [<路径>...]"
+msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
+msgstr "git submodule--helper update-clone [--prefix=<路径>] [<路径>...]"
 
 #: builtin/submodule--helper.c:1890
 msgid "bad value for update parameter"
@@ -19694,7 +19784,7 @@
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr "请确认 .gitmodules 文件在工作区里"
 
-#: builtin/submodule--helper.c:2235 git.c:434 git.c:684
+#: builtin/submodule--helper.c:2235 git.c:433 git.c:683
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s 不支持 --super-prefix"
@@ -20013,153 +20103,153 @@
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<选项>] [--] [<文件>...]"
 
-#: builtin/update-index.c:971
+#: builtin/update-index.c:972
 msgid "continue refresh even when index needs update"
 msgstr "当索引需要更新时继续刷新"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:975
 msgid "refresh: ignore submodules"
 msgstr "刷新:忽略子模组"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:978
 msgid "do not ignore new files"
 msgstr "不忽略新的文件"
 
-#: builtin/update-index.c:979
+#: builtin/update-index.c:980
 msgid "let files replace directories and vice-versa"
 msgstr "让文件替换目录(反之亦然)"
 
-#: builtin/update-index.c:981
+#: builtin/update-index.c:982
 msgid "notice files missing from worktree"
 msgstr "通知文件从工作区丢失"
 
-#: builtin/update-index.c:983
+#: builtin/update-index.c:984
 msgid "refresh even if index contains unmerged entries"
 msgstr "即使索引区包含未合并的条目也执行刷新"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:987
 msgid "refresh stat information"
 msgstr "刷新统计信息"
 
-#: builtin/update-index.c:990
+#: builtin/update-index.c:991
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "类似于 --refresh,但是忽略 assume-unchanged 设置"
 
-#: builtin/update-index.c:994
+#: builtin/update-index.c:995
 msgid "<mode>,<object>,<path>"
 msgstr "<存取模式>,<对象>,<路径>"
 
-#: builtin/update-index.c:995
+#: builtin/update-index.c:996
 msgid "add the specified entry to the index"
 msgstr "添加指定的条目到索引区"
 
-#: builtin/update-index.c:1005
+#: builtin/update-index.c:1006
 msgid "mark files as \"not changing\""
 msgstr "把文件标记为 \"没有变更\""
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1009
 msgid "clear assumed-unchanged bit"
 msgstr "清除 assumed-unchanged 位"
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1012
 msgid "mark files as \"index-only\""
 msgstr "把文件标记为 \"仅索引\""
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1015
 msgid "clear skip-worktree bit"
 msgstr "清除 skip-worktree 位"
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1018
 msgid "add to index only; do not add content to object database"
 msgstr "只添加到索引区;不添加对象到对象库"
 
-#: builtin/update-index.c:1019
+#: builtin/update-index.c:1020
 msgid "remove named paths even if present in worktree"
 msgstr "即使存在工作区里,也删除路径"
 
-#: builtin/update-index.c:1021
+#: builtin/update-index.c:1022
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "携带 --stdin:输入的行以 null 字符终止"
 
-#: builtin/update-index.c:1023
+#: builtin/update-index.c:1024
 msgid "read list of paths to be updated from standard input"
 msgstr "从标准输入中读取需要更新的路径列表"
 
-#: builtin/update-index.c:1027
+#: builtin/update-index.c:1028
 msgid "add entries from standard input to the index"
 msgstr "从标准输入添加条目到索引区"
 
-#: builtin/update-index.c:1031
+#: builtin/update-index.c:1032
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "为指定文件重新生成第2和第3暂存区"
 
-#: builtin/update-index.c:1035
+#: builtin/update-index.c:1036
 msgid "only update entries that differ from HEAD"
 msgstr "只更新与 HEAD 不同的条目"
 
-#: builtin/update-index.c:1039
+#: builtin/update-index.c:1040
 msgid "ignore files missing from worktree"
 msgstr "忽略工作区丢失的文件"
 
-#: builtin/update-index.c:1042
+#: builtin/update-index.c:1043
 msgid "report actions to standard output"
 msgstr "在标准输出显示操作"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1045
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(for porcelains) 忘记保存的未解决的冲突"
 
-#: builtin/update-index.c:1048
+#: builtin/update-index.c:1049
 msgid "write index in this format"
 msgstr "以这种格式写入索引区"
 
-#: builtin/update-index.c:1050
+#: builtin/update-index.c:1051
 msgid "enable or disable split index"
 msgstr "启用或禁用索引拆分"
 
-#: builtin/update-index.c:1052
+#: builtin/update-index.c:1053
 msgid "enable/disable untracked cache"
 msgstr "启用/禁用对未跟踪文件的缓存"
 
-#: builtin/update-index.c:1054
+#: builtin/update-index.c:1055
 msgid "test if the filesystem supports untracked cache"
 msgstr "测试文件系统是否支持未跟踪文件缓存"
 
-#: builtin/update-index.c:1056
+#: builtin/update-index.c:1057
 msgid "enable untracked cache without testing the filesystem"
 msgstr "无需检测文件系统,启用对未跟踪文件的缓存"
 
-#: builtin/update-index.c:1058
+#: builtin/update-index.c:1059
 msgid "write out the index even if is not flagged as changed"
 msgstr "即使没有被标记为已更改,也要写出索引"
 
-#: builtin/update-index.c:1060
+#: builtin/update-index.c:1061
 msgid "enable or disable file system monitor"
 msgstr "启用或禁用文件系统监控"
 
-#: builtin/update-index.c:1062
+#: builtin/update-index.c:1063
 msgid "mark files as fsmonitor valid"
 msgstr "标记文件为 fsmonitor 有效"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1066
 msgid "clear fsmonitor valid bit"
 msgstr "清除 fsmonitor 有效位"
 
-#: builtin/update-index.c:1168
+#: builtin/update-index.c:1169
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
 msgstr ""
 "core.splitIndex 被设置为 false。如果您确实要启用索引拆分,请删除或修改它。"
 
-#: builtin/update-index.c:1177
+#: builtin/update-index.c:1178
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
 msgstr ""
 "core.splitIndex 被设置为 true。如果您确实要禁用索引拆分,请删除或修改它。"
 
-#: builtin/update-index.c:1188
+#: builtin/update-index.c:1190
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -20167,11 +20257,11 @@
 "core.untrackedCache 被设置为 true。如果您确实要禁用未跟踪文件缓存,请删除或修"
 "改它。"
 
-#: builtin/update-index.c:1192
+#: builtin/update-index.c:1194
 msgid "Untracked cache disabled"
 msgstr "缓存未跟踪文件被禁用"
 
-#: builtin/update-index.c:1200
+#: builtin/update-index.c:1202
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -20179,25 +20269,25 @@
 "core.untrackedCache 被设置为 false。如果您确实要启用未跟踪文件缓存,请删除或"
 "修改它。"
 
-#: builtin/update-index.c:1204
+#: builtin/update-index.c:1206
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "缓存未跟踪文件在 '%s' 启用"
 
-#: builtin/update-index.c:1212
+#: builtin/update-index.c:1214
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr "core.fsmonitor 未设置;如果想要启用 fsmonitor 请设置该选项"
 
-#: builtin/update-index.c:1216
+#: builtin/update-index.c:1218
 msgid "fsmonitor enabled"
 msgstr "fsmonitor 被启用"
 
-#: builtin/update-index.c:1219
+#: builtin/update-index.c:1221
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr "core.fsmonitor 已设置;如果想要禁用 fsmonitor 请移除该选项"
 
-#: builtin/update-index.c:1223
+#: builtin/update-index.c:1225
 msgid "fsmonitor disabled"
 msgstr "fsmonitor 被禁用"
 
@@ -20289,90 +20379,90 @@
 msgid "print tag contents"
 msgstr "打印标签内容"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:17
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [<选项>] <路径> [<提交>]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:18
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [<选项>]"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:19
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [<选项>] <路径>"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:20
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move <工作区> <新路径>"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:21
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [<选项>]"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:22
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<选项>] <工作区>"
 
-#: builtin/worktree.c:24
+#: builtin/worktree.c:23
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <路径>"
 
-#: builtin/worktree.c:61 builtin/worktree.c:899
+#: builtin/worktree.c:60 builtin/worktree.c:898
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "删除 '%s' 失败"
 
-#: builtin/worktree.c:80
+#: builtin/worktree.c:79
 #, c-format
 msgid "Removing worktrees/%s: not a valid directory"
 msgstr "删除工作区/%s:不是一个有效的目录"
 
-#: builtin/worktree.c:86
+#: builtin/worktree.c:85
 #, c-format
 msgid "Removing worktrees/%s: gitdir file does not exist"
 msgstr "删除 worktrees/%s:gitdir 文件不存在"
 
-#: builtin/worktree.c:91 builtin/worktree.c:100
+#: builtin/worktree.c:90 builtin/worktree.c:99
 #, c-format
 msgid "Removing worktrees/%s: unable to read gitdir file (%s)"
 msgstr "删除 worktrees/%s:无法读取 gitdir 文件 (%s)"
 
-#: builtin/worktree.c:110
+#: builtin/worktree.c:109
 #, c-format
 msgid ""
 "Removing worktrees/%s: short read (expected %<PRIuMAX> bytes, read "
 "%<PRIuMAX>)"
 msgstr "删除工作树/%s:读取过短(期望 %<PRIuMAX> 字节,读取 %<PRIuMAX>)"
 
-#: builtin/worktree.c:118
+#: builtin/worktree.c:117
 #, c-format
 msgid "Removing worktrees/%s: invalid gitdir file"
 msgstr "删除 worktrees/%s:无效的 gitdir 文件"
 
-#: builtin/worktree.c:127
+#: builtin/worktree.c:126
 #, c-format
 msgid "Removing worktrees/%s: gitdir file points to non-existent location"
 msgstr "删除 worktrees/%s:gitdir 文件的指向不存在"
 
-#: builtin/worktree.c:166
+#: builtin/worktree.c:165
 msgid "report pruned working trees"
 msgstr "报告清除的工作区"
 
-#: builtin/worktree.c:168
+#: builtin/worktree.c:167
 msgid "expire working trees older than <time>"
 msgstr "将早于 <时间> 的工作区过期"
 
-#: builtin/worktree.c:235
+#: builtin/worktree.c:234
 #, c-format
 msgid "'%s' already exists"
 msgstr "'%s' 已经存在"
 
-#: builtin/worktree.c:252
+#: builtin/worktree.c:251
 #, c-format
 msgid "unable to re-add worktree '%s'"
 msgstr "无法再次添加工作区 '%s'"
 
-#: builtin/worktree.c:257
+#: builtin/worktree.c:256
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -20381,7 +20471,7 @@
 "'%s' 是一个丢失但锁定的工作区,使用\n"
 "'add -f -f' 覆盖,或 'unlock' 和 'prune' 或 'remove' 清除"
 
-#: builtin/worktree.c:259
+#: builtin/worktree.c:258
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -20390,120 +20480,120 @@
 "'%s' 是一个丢失但已经注册的工作区,使用\n"
 "'add -f' 覆盖,或 'prune' 或 'remove' 清除"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:308
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "不能创建目录 '%s'"
 
-#: builtin/worktree.c:440 builtin/worktree.c:446
+#: builtin/worktree.c:439 builtin/worktree.c:445
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "准备工作区(新分支 '%s')"
 
-#: builtin/worktree.c:442
+#: builtin/worktree.c:441
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr "准备工作区(重置分支 '%s',之前为 %s)"
 
-#: builtin/worktree.c:451
+#: builtin/worktree.c:450
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "准备工作区(检出 '%s')"
 
-#: builtin/worktree.c:457
+#: builtin/worktree.c:456
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "准备工作区(分离头指针 %s)"
 
-#: builtin/worktree.c:498
+#: builtin/worktree.c:497
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr "检出 <分支>,即使已经被检出到其它工作区"
 
-#: builtin/worktree.c:501
+#: builtin/worktree.c:500
 msgid "create a new branch"
 msgstr "创建一个新分支"
 
-#: builtin/worktree.c:503
+#: builtin/worktree.c:502
 msgid "create or reset a branch"
 msgstr "创建或重置一个分支"
 
-#: builtin/worktree.c:505
+#: builtin/worktree.c:504
 msgid "populate the new working tree"
 msgstr "生成新的工作区"
 
-#: builtin/worktree.c:506
+#: builtin/worktree.c:505
 msgid "keep the new working tree locked"
 msgstr "锁定新工作区"
 
-#: builtin/worktree.c:509
+#: builtin/worktree.c:508
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "设置跟踪模式(参见 git-branch(1))"
 
-#: builtin/worktree.c:512
+#: builtin/worktree.c:511
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr "尝试为新分支名匹配一个远程跟踪分支"
 
-#: builtin/worktree.c:520
+#: builtin/worktree.c:519
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr "-b、-B 和 --detach 是互斥的"
 
-#: builtin/worktree.c:581
+#: builtin/worktree.c:580
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "只能在创建新分支时使用选项 --[no-]track "
 
-#: builtin/worktree.c:681
+#: builtin/worktree.c:680
 msgid "reason for locking"
 msgstr "锁定原因"
 
-#: builtin/worktree.c:693 builtin/worktree.c:726 builtin/worktree.c:800
-#: builtin/worktree.c:927
+#: builtin/worktree.c:692 builtin/worktree.c:725 builtin/worktree.c:799
+#: builtin/worktree.c:926
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "'%s' 不是一个工作区"
 
-#: builtin/worktree.c:695 builtin/worktree.c:728
+#: builtin/worktree.c:694 builtin/worktree.c:727
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "主工作区无法被加锁或解锁"
 
-#: builtin/worktree.c:700
+#: builtin/worktree.c:699
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "'%s' 已被锁定,原因:%s"
 
-#: builtin/worktree.c:702
+#: builtin/worktree.c:701
 #, c-format
 msgid "'%s' is already locked"
 msgstr "'%s' 已被锁定"
 
-#: builtin/worktree.c:730
+#: builtin/worktree.c:729
 #, c-format
 msgid "'%s' is not locked"
 msgstr "'%s' 未被锁定"
 
-#: builtin/worktree.c:771
+#: builtin/worktree.c:770
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr "不能移动或删除包含子模组的工作区"
 
-#: builtin/worktree.c:779
+#: builtin/worktree.c:778
 msgid "force move even if worktree is dirty or locked"
 msgstr "强制移动,即使工作区是脏的或已锁定"
 
-#: builtin/worktree.c:802 builtin/worktree.c:929
+#: builtin/worktree.c:801 builtin/worktree.c:928
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "'%s' 是一个主工作区"
 
-#: builtin/worktree.c:807
+#: builtin/worktree.c:806
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "无法从 '%s' 算出目标名称"
 
-#: builtin/worktree.c:813
+#: builtin/worktree.c:812
 #, c-format
 msgid "target '%s' already exists"
 msgstr "目标 '%s' 已存在"
 
-#: builtin/worktree.c:821
+#: builtin/worktree.c:820
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -20512,7 +20602,7 @@
 "无法移动一个锁定的工作区,锁定原因:%s\n"
 "使用 'move -f -f' 覆盖或先解锁"
 
-#: builtin/worktree.c:823
+#: builtin/worktree.c:822
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -20520,36 +20610,36 @@
 "无法移动一个锁定的工作区,\n"
 "使用 'move -f -f' 覆盖或先解锁"
 
-#: builtin/worktree.c:826
+#: builtin/worktree.c:825
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "验证失败,无法移动工作区:%s"
 
-#: builtin/worktree.c:831
+#: builtin/worktree.c:830
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "移动 '%s' 到 '%s' 失败"
 
-#: builtin/worktree.c:879
+#: builtin/worktree.c:878
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "在 '%s' 中执行 'git status' 失败"
 
-#: builtin/worktree.c:883
+#: builtin/worktree.c:882
 #, c-format
-msgid "'%s' is dirty, use --force to delete it"
-msgstr "'%s' 是脏的,使用 --force 删除"
+msgid "'%s' contains modified or untracked files, use --force to delete it"
+msgstr "'%s' 包含修改或未跟踪的文件,使用 --force 删除"
 
-#: builtin/worktree.c:888
+#: builtin/worktree.c:887
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "在 '%s' 中执行 'git status' 失败,退出码 %d"
 
-#: builtin/worktree.c:911
+#: builtin/worktree.c:910
 msgid "force removal even if worktree is dirty or locked"
 msgstr "强制删除,即使工作区是脏的或已锁定"
 
-#: builtin/worktree.c:934
+#: builtin/worktree.c:933
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -20558,7 +20648,7 @@
 "无法删除一个锁定的工作区,锁定原因:%s\n"
 "使用 'remove -f -f' 覆盖或先解锁"
 
-#: builtin/worktree.c:936
+#: builtin/worktree.c:935
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -20566,7 +20656,7 @@
 "无法删除一个锁定的工作区,\n"
 "使用 'remove -f -f' 覆盖或先解锁"
 
-#: builtin/worktree.c:939
+#: builtin/worktree.c:938
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "验证失败,无法删除工作区:%s"
@@ -20587,6 +20677,16 @@
 msgid "only useful for debugging"
 msgstr "只对调试有用"
 
+#: fast-import.c:3118
+#, c-format
+msgid "Expected 'mark' command, got %s"
+msgstr "预期 'mark' 命令,得到 %s"
+
+#: fast-import.c:3123
+#, c-format
+msgid "Expected 'to' command, got %s"
+msgstr "预期 'to' 命令,得到 %s"
+
 #: credential-cache--daemon.c:223
 #, c-format
 msgid ""
@@ -20698,39 +20798,39 @@
 "别名 '%s' 修改环境变量。您可以使用在别名中\n"
 "使用 '!git'"
 
-#: git.c:377
+#: git.c:376
 #, c-format
 msgid "empty alias for %s"
 msgstr "%s 的空别名"
 
-#: git.c:380
+#: git.c:379
 #, c-format
 msgid "recursive alias: %s"
 msgstr "递归的别名:%s"
 
-#: git.c:460
+#: git.c:459
 msgid "write failure on standard output"
 msgstr "在标准输出写入失败"
 
-#: git.c:462
+#: git.c:461
 msgid "unknown write failure on standard output"
 msgstr "到标准输出的未知写入错误"
 
-#: git.c:464
+#: git.c:463
 msgid "close failed on standard output"
 msgstr "标准输出关闭失败"
 
-#: git.c:793
+#: git.c:792
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr "检测到别名循环:'%s'的扩展未终止:%s"
 
-#: git.c:843
+#: git.c:842
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "不能作为内置命令处理 %s"
 
-#: git.c:856
+#: git.c:855
 #, c-format
 msgid ""
 "usage: %s\n"
@@ -20739,12 +20839,12 @@
 "用法:%s\n"
 "\n"
 
-#: git.c:876
+#: git.c:875
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr "展开别名命令 '%s' 失败,'%s' 不是一个 git 命令\n"
 
-#: git.c:888
+#: git.c:887
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr "运行命令 '%s' 失败:%s\n"
@@ -20762,30 +20862,30 @@
 msgid "Public key pinning not supported with cURL < 7.44.0"
 msgstr "不支持公钥文件锁定,因为 cURL < 7.44.0"
 
-#: http.c:876
+#: http.c:878
 msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
 msgstr "不支持 CURLSSLOPT_NO_REVOKE,因为 cURL < 7.44.0"
 
-#: http.c:949
+#: http.c:951
 msgid "Protocol restrictions not supported with cURL < 7.19.4"
 msgstr "不支持协议限制,因为 cURL < 7.19.4"
 
-#: http.c:1085
+#: http.c:1088
 #, c-format
 msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
 msgstr "不支持的 SSL 后端 '%s'。支持的 SSL 后端:"
 
-#: http.c:1092
+#: http.c:1095
 #, c-format
 msgid "Could not set SSL backend to '%s': cURL was built without SSL backends"
 msgstr "无法设置 SSL 后端为 '%s':cURL: cURL 没有使用 SSL 后端构建"
 
-#: http.c:1096
+#: http.c:1099
 #, c-format
 msgid "Could not set SSL backend to '%s': already set"
 msgstr "无法将 SSL 后端设置为 '%s':已经设置"
 
-#: http.c:1965
+#: http.c:1968
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -20796,128 +20896,128 @@
 "     请求:%s\n"
 "   重定向:%s"
 
-#: remote-curl.c:157
+#: remote-curl.c:166
 #, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr "在 push-option 取值中无效的引号:'%s'"
 
-#: remote-curl.c:254
+#: remote-curl.c:263
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr "%sinfo/refs 无效:这是一个 git 仓库么?"
 
-#: remote-curl.c:355
+#: remote-curl.c:364
 msgid "invalid server response; expected service, got flush packet"
 msgstr "无效的服务端响应。预期服务,得到 flush 包"
 
-#: remote-curl.c:386
+#: remote-curl.c:395
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr "无效的服务端响应,得到 '%s'"
 
-#: remote-curl.c:446
+#: remote-curl.c:455
 #, c-format
 msgid "repository '%s' not found"
 msgstr "仓库 '%s' 未找到"
 
-#: remote-curl.c:450
+#: remote-curl.c:459
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr "'%s' 鉴权失败"
 
-#: remote-curl.c:454
+#: remote-curl.c:463
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "无法访问 '%s':%s"
 
-#: remote-curl.c:460
+#: remote-curl.c:469
 #, c-format
 msgid "redirecting to %s"
 msgstr "重定向到 %s"
 
-#: remote-curl.c:584
+#: remote-curl.c:593
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr "当没有设置温和处理文件结束符(EOF)时,不应该有文件结束符"
 
-#: remote-curl.c:664
+#: remote-curl.c:673
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr "无法倒回 rpc post 数据 - 尝试增加 http.postBuffer"
 
-#: remote-curl.c:724
+#: remote-curl.c:733
 #, c-format
 msgid "RPC failed; %s"
 msgstr "RPC 失败。%s"
 
-#: remote-curl.c:764
+#: remote-curl.c:773
 msgid "cannot handle pushes this big"
 msgstr "不能处理这么大的推送"
 
-#: remote-curl.c:879
+#: remote-curl.c:888
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr "不能压缩请求,zlib 压缩错误 %d"
 
-#: remote-curl.c:883
+#: remote-curl.c:892
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr "不能压缩请求,zlib 结束错误 %d"
 
-#: remote-curl.c:1014
+#: remote-curl.c:1023
 msgid "dumb http transport does not support shallow capabilities"
 msgstr "哑 http 传输不支持 shalllow 能力"
 
-#: remote-curl.c:1028
+#: remote-curl.c:1037
 msgid "fetch failed."
 msgstr "获取失败。"
 
-#: remote-curl.c:1076
+#: remote-curl.c:1085
 msgid "cannot fetch by sha1 over smart http"
 msgstr "无法通过智能 HTTP 获取 sha1"
 
-#: remote-curl.c:1120 remote-curl.c:1126
+#: remote-curl.c:1129 remote-curl.c:1135
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr "协议错误:期望 sha/ref,却得到 '%s'"
 
-#: remote-curl.c:1138 remote-curl.c:1252
+#: remote-curl.c:1147 remote-curl.c:1261
 #, c-format
 msgid "http transport does not support %s"
 msgstr "http 传输协议不支持 %s"
 
-#: remote-curl.c:1174
+#: remote-curl.c:1183
 msgid "git-http-push failed"
 msgstr "git-http-push 失败"
 
-#: remote-curl.c:1360
+#: remote-curl.c:1367
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr "remote-curl:用法:git remote-curl <远程> [<url>]"
 
-#: remote-curl.c:1392
+#: remote-curl.c:1399
 msgid "remote-curl: error reading command stream from git"
 msgstr "remote-curl:错误读取来自 git 的命令流"
 
-#: remote-curl.c:1399
+#: remote-curl.c:1406
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr "remote-curl:尝试没有本地仓库下获取"
 
-#: remote-curl.c:1439
+#: remote-curl.c:1446
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr "remote-curl:未知的来自 git 的命令 '%s'"
 
-#: list-objects-filter-options.h:61
+#: list-objects-filter-options.h:85
 msgid "args"
 msgstr "参数"
 
-#: list-objects-filter-options.h:62
+#: list-objects-filter-options.h:86
 msgid "object filtering"
 msgstr "对象过滤"
 
-#: parse-options.h:170
+#: parse-options.h:179
 msgid "expiry-date"
 msgstr "到期时间"
 
-#: parse-options.h:184
+#: parse-options.h:193
 msgid "no-op (backward compatibility)"
 msgstr "空操作(向后兼容)"
 
diff --git a/pretty.c b/pretty.c
index e4ed14e..b32f036 100644
--- a/pretty.c
+++ b/pretty.c
@@ -1239,11 +1239,9 @@
 		strbuf_addstr(sb, get_revision_mark(NULL, commit));
 		return 1;
 	case 'd':
-		load_ref_decorations(NULL, DECORATE_SHORT_REFS);
 		format_decorations(sb, commit, c->auto_color);
 		return 1;
 	case 'D':
-		load_ref_decorations(NULL, DECORATE_SHORT_REFS);
 		format_decorations_extended(sb, commit, c->auto_color, "", ", ", "");
 		return 1;
 	case 'S':		/* tag/branch like --source */
diff --git a/progress.c b/progress.c
index 277db8a..0063559 100644
--- a/progress.c
+++ b/progress.c
@@ -45,6 +45,19 @@
 
 static volatile sig_atomic_t progress_update;
 
+/*
+ * These are only intended for testing the progress output, i.e. exclusively
+ * for 'test-tool progress'.
+ */
+int progress_testing;
+uint64_t progress_test_ns = 0;
+void progress_test_force_update(void); /* To silence -Wmissing-prototypes */
+void progress_test_force_update(void)
+{
+	progress_update = 1;
+}
+
+
 static void progress_interval(int signum)
 {
 	progress_update = 1;
@@ -55,6 +68,9 @@
 	struct sigaction sa;
 	struct itimerval v;
 
+	if (progress_testing)
+		return;
+
 	progress_update = 0;
 
 	memset(&sa, 0, sizeof(sa));
@@ -72,6 +88,10 @@
 static void clear_progress_signal(void)
 {
 	struct itimerval v = {{0,},};
+
+	if (progress_testing)
+		return;
+
 	setitimer(ITIMER_REAL, &v, NULL);
 	signal(SIGALRM, SIG_IGN);
 	progress_update = 0;
@@ -88,6 +108,7 @@
 	const char *tp;
 	struct strbuf *counters_sb = &progress->counters_sb;
 	int show_update = 0;
+	int last_count_len = counters_sb->len;
 
 	if (progress->delay && (!progress_update || --progress->delay))
 		return;
@@ -115,21 +136,27 @@
 	if (show_update) {
 		if (is_foreground_fd(fileno(stderr)) || done) {
 			const char *eol = done ? done : "\r";
+			size_t clear_len = counters_sb->len < last_count_len ?
+					last_count_len - counters_sb->len + 1 :
+					0;
+			/* The "+ 2" accounts for the ": ". */
+			size_t progress_line_len = progress->title_len +
+						counters_sb->len + 2;
+			int cols = term_columns();
 
-			term_clear_line();
 			if (progress->split) {
-				fprintf(stderr, "  %s%s", counters_sb->buf,
-					eol);
-			} else if (!done &&
-				   /* The "+ 2" accounts for the ": ". */
-				   term_columns() < progress->title_len +
-						    counters_sb->len + 2) {
-				fprintf(stderr, "%s:\n  %s%s",
-					progress->title, counters_sb->buf, eol);
+				fprintf(stderr, "  %s%*s", counters_sb->buf,
+					(int) clear_len, eol);
+			} else if (!done && cols < progress_line_len) {
+				clear_len = progress->title_len + 1 < cols ?
+					    cols - progress->title_len - 1 : 0;
+				fprintf(stderr, "%s:%*s\n  %s%s",
+					progress->title, (int) clear_len, "",
+					counters_sb->buf, eol);
 				progress->split = 1;
 			} else {
-				fprintf(stderr, "%s: %s%s", progress->title,
-					counters_sb->buf, eol);
+				fprintf(stderr, "%s: %s%*s", progress->title,
+					counters_sb->buf, (int) clear_len, eol);
 			}
 			fflush(stderr);
 		}
@@ -147,6 +174,14 @@
 	strbuf_humanise_rate(buf, rate * 1024);
 }
 
+static uint64_t progress_getnanotime(struct progress *progress)
+{
+	if (progress_testing)
+		return progress->start_ns + progress_test_ns;
+	else
+		return getnanotime();
+}
+
 void display_throughput(struct progress *progress, uint64_t total)
 {
 	struct throughput *tp;
@@ -157,7 +192,7 @@
 		return;
 	tp = progress->throughput;
 
-	now_ns = getnanotime();
+	now_ns = progress_getnanotime(progress);
 
 	if (!tp) {
 		progress->throughput = tp = xcalloc(1, sizeof(*tp));
@@ -289,7 +324,7 @@
 		struct throughput *tp = progress->throughput;
 
 		if (tp) {
-			uint64_t now_ns = getnanotime();
+			uint64_t now_ns = progress_getnanotime(progress);
 			unsigned int misecs, rate;
 			misecs = ((now_ns - progress->start_ns) * 4398) >> 32;
 			rate = tp->curr_total / (misecs ? misecs : 1);
diff --git a/promisor-remote.c b/promisor-remote.c
new file mode 100644
index 0000000..9bd5b79
--- /dev/null
+++ b/promisor-remote.c
@@ -0,0 +1,268 @@
+#include "cache.h"
+#include "object-store.h"
+#include "promisor-remote.h"
+#include "config.h"
+#include "transport.h"
+
+static char *repository_format_partial_clone;
+static const char *core_partial_clone_filter_default;
+
+void set_repository_format_partial_clone(char *partial_clone)
+{
+	repository_format_partial_clone = xstrdup_or_null(partial_clone);
+}
+
+static int fetch_refs(const char *remote_name, struct ref *ref)
+{
+	struct remote *remote;
+	struct transport *transport;
+	int original_fetch_if_missing = fetch_if_missing;
+	int res;
+
+	fetch_if_missing = 0;
+	remote = remote_get(remote_name);
+	if (!remote->url[0])
+		die(_("Remote with no URL"));
+	transport = transport_get(remote, remote->url[0]);
+
+	transport_set_option(transport, TRANS_OPT_FROM_PROMISOR, "1");
+	transport_set_option(transport, TRANS_OPT_NO_DEPENDENTS, "1");
+	res = transport_fetch_refs(transport, ref);
+	fetch_if_missing = original_fetch_if_missing;
+
+	return res;
+}
+
+static int fetch_objects(const char *remote_name,
+			 const struct object_id *oids,
+			 int oid_nr)
+{
+	struct ref *ref = NULL;
+	int i;
+
+	for (i = 0; i < oid_nr; i++) {
+		struct ref *new_ref = alloc_ref(oid_to_hex(&oids[i]));
+		oidcpy(&new_ref->old_oid, &oids[i]);
+		new_ref->exact_oid = 1;
+		new_ref->next = ref;
+		ref = new_ref;
+	}
+	return fetch_refs(remote_name, ref);
+}
+
+static struct promisor_remote *promisors;
+static struct promisor_remote **promisors_tail = &promisors;
+
+static struct promisor_remote *promisor_remote_new(const char *remote_name)
+{
+	struct promisor_remote *r;
+
+	if (*remote_name == '/') {
+		warning(_("promisor remote name cannot begin with '/': %s"),
+			remote_name);
+		return NULL;
+	}
+
+	FLEX_ALLOC_STR(r, name, remote_name);
+
+	*promisors_tail = r;
+	promisors_tail = &r->next;
+
+	return r;
+}
+
+static struct promisor_remote *promisor_remote_lookup(const char *remote_name,
+						      struct promisor_remote **previous)
+{
+	struct promisor_remote *r, *p;
+
+	for (p = NULL, r = promisors; r; p = r, r = r->next)
+		if (!strcmp(r->name, remote_name)) {
+			if (previous)
+				*previous = p;
+			return r;
+		}
+
+	return NULL;
+}
+
+static void promisor_remote_move_to_tail(struct promisor_remote *r,
+					 struct promisor_remote *previous)
+{
+	if (r->next == NULL)
+		return;
+
+	if (previous)
+		previous->next = r->next;
+	else
+		promisors = r->next ? r->next : r;
+	r->next = NULL;
+	*promisors_tail = r;
+	promisors_tail = &r->next;
+}
+
+static int promisor_remote_config(const char *var, const char *value, void *data)
+{
+	const char *name;
+	int namelen;
+	const char *subkey;
+
+	if (!strcmp(var, "core.partialclonefilter"))
+		return git_config_string(&core_partial_clone_filter_default,
+					 var, value);
+
+	if (parse_config_key(var, "remote", &name, &namelen, &subkey) < 0)
+		return 0;
+
+	if (!strcmp(subkey, "promisor")) {
+		char *remote_name;
+
+		if (!git_config_bool(var, value))
+			return 0;
+
+		remote_name = xmemdupz(name, namelen);
+
+		if (!promisor_remote_lookup(remote_name, NULL))
+			promisor_remote_new(remote_name);
+
+		free(remote_name);
+		return 0;
+	}
+	if (!strcmp(subkey, "partialclonefilter")) {
+		struct promisor_remote *r;
+		char *remote_name = xmemdupz(name, namelen);
+
+		r = promisor_remote_lookup(remote_name, NULL);
+		if (!r)
+			r = promisor_remote_new(remote_name);
+
+		free(remote_name);
+
+		if (!r)
+			return 0;
+
+		return git_config_string(&r->partial_clone_filter, var, value);
+	}
+
+	return 0;
+}
+
+static int initialized;
+
+static void promisor_remote_init(void)
+{
+	if (initialized)
+		return;
+	initialized = 1;
+
+	git_config(promisor_remote_config, NULL);
+
+	if (repository_format_partial_clone) {
+		struct promisor_remote *o, *previous;
+
+		o = promisor_remote_lookup(repository_format_partial_clone,
+					   &previous);
+		if (o)
+			promisor_remote_move_to_tail(o, previous);
+		else
+			promisor_remote_new(repository_format_partial_clone);
+	}
+}
+
+static void promisor_remote_clear(void)
+{
+	while (promisors) {
+		struct promisor_remote *r = promisors;
+		promisors = promisors->next;
+		free(r);
+	}
+
+	promisors_tail = &promisors;
+}
+
+void promisor_remote_reinit(void)
+{
+	initialized = 0;
+	promisor_remote_clear();
+	promisor_remote_init();
+}
+
+struct promisor_remote *promisor_remote_find(const char *remote_name)
+{
+	promisor_remote_init();
+
+	if (!remote_name)
+		return promisors;
+
+	return promisor_remote_lookup(remote_name, NULL);
+}
+
+int has_promisor_remote(void)
+{
+	return !!promisor_remote_find(NULL);
+}
+
+static int remove_fetched_oids(struct repository *repo,
+			       struct object_id **oids,
+			       int oid_nr, int to_free)
+{
+	int i, remaining_nr = 0;
+	int *remaining = xcalloc(oid_nr, sizeof(*remaining));
+	struct object_id *old_oids = *oids;
+	struct object_id *new_oids;
+
+	for (i = 0; i < oid_nr; i++)
+		if (oid_object_info_extended(repo, &old_oids[i], NULL,
+					     OBJECT_INFO_SKIP_FETCH_OBJECT)) {
+			remaining[i] = 1;
+			remaining_nr++;
+		}
+
+	if (remaining_nr) {
+		int j = 0;
+		new_oids = xcalloc(remaining_nr, sizeof(*new_oids));
+		for (i = 0; i < oid_nr; i++)
+			if (remaining[i])
+				oidcpy(&new_oids[j++], &old_oids[i]);
+		*oids = new_oids;
+		if (to_free)
+			free(old_oids);
+	}
+
+	free(remaining);
+
+	return remaining_nr;
+}
+
+int promisor_remote_get_direct(struct repository *repo,
+			       const struct object_id *oids,
+			       int oid_nr)
+{
+	struct promisor_remote *r;
+	struct object_id *remaining_oids = (struct object_id *)oids;
+	int remaining_nr = oid_nr;
+	int to_free = 0;
+	int res = -1;
+
+	promisor_remote_init();
+
+	for (r = promisors; r; r = r->next) {
+		if (fetch_objects(r->name, remaining_oids, remaining_nr) < 0) {
+			if (remaining_nr == 1)
+				continue;
+			remaining_nr = remove_fetched_oids(repo, &remaining_oids,
+							 remaining_nr, to_free);
+			if (remaining_nr) {
+				to_free = 1;
+				continue;
+			}
+		}
+		res = 0;
+		break;
+	}
+
+	if (to_free)
+		free(remaining_oids);
+
+	return res;
+}
diff --git a/promisor-remote.h b/promisor-remote.h
new file mode 100644
index 0000000..737bac3
--- /dev/null
+++ b/promisor-remote.h
@@ -0,0 +1,33 @@
+#ifndef PROMISOR_REMOTE_H
+#define PROMISOR_REMOTE_H
+
+#include "repository.h"
+
+struct object_id;
+
+/*
+ * Promisor remote linked list
+ *
+ * Information in its fields come from remote.XXX config entries or
+ * from extensions.partialclone or core.partialclonefilter.
+ */
+struct promisor_remote {
+	struct promisor_remote *next;
+	const char *partial_clone_filter;
+	const char name[FLEX_ARRAY];
+};
+
+void promisor_remote_reinit(void);
+struct promisor_remote *promisor_remote_find(const char *remote_name);
+int has_promisor_remote(void);
+int promisor_remote_get_direct(struct repository *repo,
+			       const struct object_id *oids,
+			       int oid_nr);
+
+/*
+ * This should be used only once from setup.c to set the value we got
+ * from the extensions.partialclone config option.
+ */
+void set_repository_format_partial_clone(char *partial_clone);
+
+#endif /* PROMISOR_REMOTE_H */
diff --git a/quote.c b/quote.c
index 7f2aa6f..24a58ba 100644
--- a/quote.c
+++ b/quote.c
@@ -48,6 +48,12 @@
 	static const char ok_punct[] = "+,-./:=@_^";
 	const char *p;
 
+	/* Avoid losing a zero-length string by adding '' */
+	if (!*src) {
+		strbuf_addstr(dst, "''");
+		return;
+	}
+
 	for (p = src; *p; p++) {
 		if (!isalpha(*p) && !isdigit(*p) && !strchr(ok_punct, *p)) {
 			sq_quote_buf(dst, src);
@@ -84,12 +90,28 @@
 	}
 }
 
+/*
+ * Legacy function to append each argv value, quoted as necessasry,
+ * with whitespace before each value.  This results in a leading
+ * space in the result.
+ */
 void sq_quote_argv_pretty(struct strbuf *dst, const char **argv)
 {
+	if (argv[0])
+		strbuf_addch(dst, ' ');
+	sq_append_quote_argv_pretty(dst, argv);
+}
+
+/*
+ * Append each argv value, quoted as necessary, with whitespace between them.
+ */
+void sq_append_quote_argv_pretty(struct strbuf *dst, const char **argv)
+{
 	int i;
 
 	for (i = 0; argv[i]; i++) {
-		strbuf_addch(dst, ' ');
+		if (i > 0)
+			strbuf_addch(dst, ' ');
 		sq_quote_buf_pretty(dst, argv[i]);
 	}
 }
diff --git a/quote.h b/quote.h
index fb08dc0..ca8ee31 100644
--- a/quote.h
+++ b/quote.h
@@ -40,6 +40,7 @@
  */
 void sq_quote_buf_pretty(struct strbuf *, const char *src);
 void sq_quote_argv_pretty(struct strbuf *, const char **argv);
+void sq_append_quote_argv_pretty(struct strbuf *dst, const char **argv);
 
 /* This unwraps what sq_quote() produces in place, but returns
  * NULL if the input does not look like what sq_quote would have
diff --git a/range-diff.c b/range-diff.c
index ba1e9a4..7fed5a3 100644
--- a/range-diff.c
+++ b/range-diff.c
@@ -52,6 +52,7 @@
 
 	argv_array_pushl(&cp.args, "log", "--no-color", "-p", "--no-merges",
 			"--reverse", "--date-order", "--decorate=no",
+			"--no-prefix",
 			/*
 			 * Choose indicators that are not used anywhere
 			 * else in diffs, but still look reasonable
@@ -111,7 +112,7 @@
 			if (!util->diff_offset)
 				util->diff_offset = buf.len;
 			line[len - 1] = '\n';
-			len = parse_git_diff_header(&root, &linenr, 1, line,
+			len = parse_git_diff_header(&root, &linenr, 0, line,
 						    len, size, &patch);
 			if (len < 0)
 				die(_("could not parse git header '%.*s'"), (int)len, line);
@@ -217,8 +218,8 @@
 		util->i = i;
 		util->patch = a->items[i].string;
 		util->diff = util->patch + util->diff_offset;
-		hashmap_entry_init(util, strhash(util->diff));
-		hashmap_add(&map, util);
+		hashmap_entry_init(&util->e, strhash(util->diff));
+		hashmap_add(&map, &util->e);
 	}
 
 	/* Now try to find exact matches in b */
@@ -228,8 +229,8 @@
 		util->i = i;
 		util->patch = b->items[i].string;
 		util->diff = util->patch + util->diff_offset;
-		hashmap_entry_init(util, strhash(util->diff));
-		other = hashmap_remove(&map, util, NULL);
+		hashmap_entry_init(&util->e, strhash(util->diff));
+		other = hashmap_remove_entry(&map, util, e, NULL);
 		if (other) {
 			if (other->matching >= 0)
 				BUG("already assigned!");
@@ -239,7 +240,7 @@
 		}
 	}
 
-	hashmap_free(&map, 0);
+	hashmap_free(&map);
 }
 
 static void diffsize_consume(void *data, char *line, unsigned long len)
diff --git a/read-cache.c b/read-cache.c
index 3b512f1..fc80d79 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -1287,7 +1287,7 @@
 	 */
 	if (istate->cache_nr > 0 &&
 		strcmp(ce->name, istate->cache[istate->cache_nr - 1]->name) > 0)
-		pos = -istate->cache_nr - 1;
+		pos = index_pos_to_insert_pos(istate->cache_nr);
 	else
 		pos = index_name_stage_pos(istate, ce->name, ce_namelen(ce), ce_stage(ce));
 
@@ -1483,6 +1483,27 @@
 	printf(fmt, name);
 }
 
+int repo_refresh_and_write_index(struct repository *repo,
+				 unsigned int refresh_flags,
+				 unsigned int write_flags,
+				 int gentle,
+				 const struct pathspec *pathspec,
+				 char *seen, const char *header_msg)
+{
+	struct lock_file lock_file = LOCK_INIT;
+	int fd, ret = 0;
+
+	fd = repo_hold_locked_index(repo, &lock_file, 0);
+	if (!gentle && fd < 0)
+		return -1;
+	if (refresh_index(repo->index, refresh_flags, pathspec, seen, header_msg))
+		ret = 1;
+	if (0 <= fd && write_locked_index(repo->index, &lock_file, COMMIT_LOCK | write_flags))
+		ret = -1;
+	return ret;
+}
+
+
 int refresh_index(struct index_state *istate, unsigned int flags,
 		  const struct pathspec *pathspec,
 		  char *seen, const char *header_msg)
@@ -1610,16 +1631,17 @@
 
 #define INDEX_FORMAT_DEFAULT 3
 
-static unsigned int get_index_format_default(void)
+static unsigned int get_index_format_default(struct repository *r)
 {
 	char *envversion = getenv("GIT_INDEX_VERSION");
 	char *endp;
-	int value;
 	unsigned int version = INDEX_FORMAT_DEFAULT;
 
 	if (!envversion) {
-		if (!git_config_get_int("index.version", &value))
-			version = value;
+		prepare_repo_settings(r);
+
+		if (r->settings.index_version >= 0)
+			version = r->settings.index_version;
 		if (version < INDEX_FORMAT_LB || INDEX_FORMAT_UB < version) {
 			warning(_("index.version set, but the value is invalid.\n"
 				  "Using version %i"), INDEX_FORMAT_DEFAULT);
@@ -1855,18 +1877,17 @@
 
 static void tweak_untracked_cache(struct index_state *istate)
 {
-	switch (git_config_get_untracked_cache()) {
-	case -1: /* keep: do nothing */
-		break;
-	case 0: /* false */
+	struct repository *r = the_repository;
+
+	prepare_repo_settings(r);
+
+	if (r->settings.core_untracked_cache  == UNTRACKED_CACHE_REMOVE) {
 		remove_untracked_cache(istate);
-		break;
-	case 1: /* true */
-		add_untracked_cache(istate);
-		break;
-	default: /* unknown value: do nothing */
-		break;
+		return;
 	}
+
+	if (r->settings.core_untracked_cache == UNTRACKED_CACHE_WRITE)
+		add_untracked_cache(istate);
 }
 
 static void tweak_split_index(struct index_state *istate)
@@ -1905,7 +1926,7 @@
 	/*
 	 * Account for potential alignment differences.
 	 */
-	per_entry += align_padding_size(sizeof(struct cache_entry), -sizeof(struct ondisk_cache_entry));
+	per_entry += align_padding_size(per_entry, 0);
 	return ondisk_size + entries * per_entry;
 }
 
@@ -2776,7 +2797,7 @@
 	}
 
 	if (!istate->version) {
-		istate->version = get_index_format_default();
+		istate->version = get_index_format_default(the_repository);
 		if (git_env_bool("GIT_TEST_SPLIT_INDEX", 0))
 			init_split_index(istate);
 	}
diff --git a/ref-filter.c b/ref-filter.c
index f27cfc8..6867e33 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -79,17 +79,20 @@
 } oi, oi_deref;
 
 struct ref_to_worktree_entry {
-	struct hashmap_entry ent; /* must be the first member! */
+	struct hashmap_entry ent;
 	struct worktree *wt; /* key is wt->head_ref */
 };
 
 static int ref_to_worktree_map_cmpfnc(const void *unused_lookupdata,
-				      const void *existing_hashmap_entry_to_test,
-				      const void *key,
+				      const struct hashmap_entry *eptr,
+				      const struct hashmap_entry *kptr,
 				      const void *keydata_aka_refname)
 {
-	const struct ref_to_worktree_entry *e = existing_hashmap_entry_to_test;
-	const struct ref_to_worktree_entry *k = key;
+	const struct ref_to_worktree_entry *e, *k;
+
+	e = container_of(eptr, const struct ref_to_worktree_entry, ent);
+	k = container_of(kptr, const struct ref_to_worktree_entry, ent);
+
 	return strcmp(e->wt->head_ref,
 		keydata_aka_refname ? keydata_aka_refname : k->wt->head_ref);
 }
@@ -1028,7 +1031,7 @@
 		if (!strncmp(cp, " <", 2))
 			return xmemdupz(buf, cp - buf);
 	}
-	return "";
+	return xstrdup("");
 }
 
 static const char *copy_email(const char *buf)
@@ -1036,10 +1039,10 @@
 	const char *email = strchr(buf, '<');
 	const char *eoemail;
 	if (!email)
-		return "";
+		return xstrdup("");
 	eoemail = strchr(email, '>');
 	if (!eoemail)
-		return "";
+		return xstrdup("");
 	return xmemdupz(email, eoemail + 1 - email);
 }
 
@@ -1565,9 +1568,10 @@
 			struct ref_to_worktree_entry *entry;
 			entry = xmalloc(sizeof(*entry));
 			entry->wt = worktrees[i];
-			hashmap_entry_init(entry, strhash(worktrees[i]->head_ref));
+			hashmap_entry_init(&entry->ent,
+					strhash(worktrees[i]->head_ref));
 
-			hashmap_add(map, entry);
+			hashmap_add(map, &entry->ent);
 		}
 	}
 }
@@ -1584,18 +1588,20 @@
 
 static char *get_worktree_path(const struct used_atom *atom, const struct ref_array_item *ref)
 {
-	struct hashmap_entry entry;
+	struct hashmap_entry entry, *e;
 	struct ref_to_worktree_entry *lookup_result;
 
 	lazy_init_worktree_map();
 
 	hashmap_entry_init(&entry, strhash(ref->refname));
-	lookup_result = hashmap_get(&(ref_to_worktree_map.map), &entry, ref->refname);
+	e = hashmap_get(&(ref_to_worktree_map.map), &entry, ref->refname);
 
-	if (lookup_result)
-		return xstrdup(lookup_result->wt->path);
-	else
+	if (!e)
 		return xstrdup("");
+
+	lookup_result = container_of(e, struct ref_to_worktree_entry, ent);
+
+	return xstrdup(lookup_result->wt->path);
 }
 
 /*
@@ -1766,7 +1772,7 @@
 	 * If it is a tag object, see if we use a value that derefs
 	 * the object, and if we do grab the object it refers to.
 	 */
-	oi_deref.oid = ((struct tag *)obj)->tagged->oid;
+	oi_deref.oid = *get_tagged_oid((struct tag *)obj);
 
 	/*
 	 * NEEDSWORK: This derefs tag only once, which
@@ -1997,7 +2003,7 @@
 	if (!obj)
 		die(_("malformed object at '%s'"), refname);
 	if (obj->type == OBJ_TAG)
-		tagged_oid = &((struct tag *)obj)->tagged->oid;
+		tagged_oid = get_tagged_oid((struct tag *)obj);
 	if (tagged_oid && oid_array_lookup(points_at, tagged_oid) >= 0)
 		return tagged_oid;
 	return NULL;
@@ -2166,7 +2172,8 @@
 	used_atom_cnt = 0;
 
 	if (ref_to_worktree_map.worktrees) {
-		hashmap_free(&(ref_to_worktree_map.map), 1);
+		hashmap_free_entries(&(ref_to_worktree_map.map),
+					struct ref_to_worktree_entry, ent);
 		free_worktrees(ref_to_worktree_map.worktrees);
 		ref_to_worktree_map.worktrees = NULL;
 	}
diff --git a/refs.c b/refs.c
index cd297ee..1ab0bb5 100644
--- a/refs.c
+++ b/refs.c
@@ -1772,7 +1772,7 @@
 
 struct ref_store_hash_entry
 {
-	struct hashmap_entry ent; /* must be the first member! */
+	struct hashmap_entry ent;
 
 	struct ref_store *refs;
 
@@ -1781,11 +1781,16 @@
 };
 
 static int ref_store_hash_cmp(const void *unused_cmp_data,
-			      const void *entry, const void *entry_or_key,
+			      const struct hashmap_entry *eptr,
+			      const struct hashmap_entry *entry_or_key,
 			      const void *keydata)
 {
-	const struct ref_store_hash_entry *e1 = entry, *e2 = entry_or_key;
-	const char *name = keydata ? keydata : e2->name;
+	const struct ref_store_hash_entry *e1, *e2;
+	const char *name;
+
+	e1 = container_of(eptr, const struct ref_store_hash_entry, ent);
+	e2 = container_of(entry_or_key, const struct ref_store_hash_entry, ent);
+	name = keydata ? keydata : e2->name;
 
 	return strcmp(e1->name, name);
 }
@@ -1796,7 +1801,7 @@
 	struct ref_store_hash_entry *entry;
 
 	FLEX_ALLOC_STR(entry, name, name);
-	hashmap_entry_init(entry, strhash(name));
+	hashmap_entry_init(&entry->ent, strhash(name));
 	entry->refs = refs;
 	return entry;
 }
@@ -1815,12 +1820,15 @@
 					      const char *name)
 {
 	struct ref_store_hash_entry *entry;
+	unsigned int hash;
 
 	if (!map->tablesize)
 		/* It's initialized on demand in register_ref_store(). */
 		return NULL;
 
-	entry = hashmap_get_from_hash(map, strhash(name), name);
+	hash = strhash(name);
+	entry = hashmap_get_entry_from_hash(map, hash, name,
+					struct ref_store_hash_entry, ent);
 	return entry ? entry->refs : NULL;
 }
 
@@ -1863,10 +1871,13 @@
 				   struct ref_store *refs,
 				   const char *name)
 {
+	struct ref_store_hash_entry *entry;
+
 	if (!map->tablesize)
 		hashmap_init(map, ref_store_hash_cmp, NULL, 0);
 
-	if (hashmap_put(map, alloc_ref_store_hash_entry(name, refs)))
+	entry = alloc_ref_store_hash_entry(name, refs);
+	if (hashmap_put(map, &entry->ent))
 		BUG("%s ref_store '%s' initialized twice", type, name);
 }
 
diff --git a/refs/packed-backend.c b/refs/packed-backend.c
index c01c7f5..4458a0f 100644
--- a/refs/packed-backend.c
+++ b/refs/packed-backend.c
@@ -1012,14 +1012,23 @@
 	}
 
 	/*
-	 * Now that we hold the `packed-refs` lock, make sure that our
-	 * snapshot matches the current version of the file. Normally
-	 * `get_snapshot()` does that for us, but that function
-	 * assumes that when the file is locked, any existing snapshot
-	 * is still valid. We've just locked the file, but it might
-	 * have changed the moment *before* we locked it.
+	 * There is a stat-validity problem might cause `update-ref -d`
+	 * lost the newly commit of a ref, because a new `packed-refs`
+	 * file might has the same on-disk file attributes such as
+	 * timestamp, file size and inode value, but has a changed
+	 * ref value.
+	 *
+	 * This could happen with a very small chance when
+	 * `update-ref -d` is called and at the same time another
+	 * `pack-refs --all` process is running.
+	 *
+	 * Now that we hold the `packed-refs` lock, it is important
+	 * to make sure we could read the latest version of
+	 * `packed-refs` file no matter we have just mmap it or not.
+	 * So what need to do is clear the snapshot if we hold it
+	 * already.
 	 */
-	validate_snapshot(refs);
+	clear_snapshot(refs);
 
 	/*
 	 * Now make sure that the packed-refs file as it exists in the
diff --git a/remote-curl.c b/remote-curl.c
index 051f266..350d92a 100644
--- a/remote-curl.c
+++ b/remote-curl.c
@@ -40,7 +40,8 @@
 		push_cert : 2,
 		deepen_relative : 1,
 		from_promisor : 1,
-		no_dependents : 1;
+		no_dependents : 1,
+		atomic : 1;
 };
 static struct options options;
 static struct string_list cas_options = STRING_LIST_INIT_DUP;
@@ -148,6 +149,14 @@
 		else
 			return -1;
 		return 0;
+	} else if (!strcmp(name, "atomic")) {
+		if (!strcmp(value, "true"))
+			options.atomic = 1;
+		else if (!strcmp(value, "false"))
+			options.atomic = 0;
+		else
+			return -1;
+		return 0;
 	} else if (!strcmp(name, "push-option")) {
 		if (*value != '"')
 			string_list_append(&options.push_options, value);
@@ -1154,7 +1163,7 @@
 	strbuf_reset(buf);
 }
 
-static int push_dav(int nr_spec, char **specs)
+static int push_dav(int nr_spec, const char **specs)
 {
 	struct child_process child = CHILD_PROCESS_INIT;
 	size_t i;
@@ -1175,7 +1184,7 @@
 	return 0;
 }
 
-static int push_git(struct discovery *heads, int nr_spec, char **specs)
+static int push_git(struct discovery *heads, int nr_spec, const char **specs)
 {
 	struct rpc_state rpc;
 	int i, err;
@@ -1196,6 +1205,8 @@
 		argv_array_push(&args, "--signed=yes");
 	else if (options.push_cert == SEND_PACK_PUSH_CERT_IF_ASKED)
 		argv_array_push(&args, "--signed=if-asked");
+	if (options.atomic)
+		argv_array_push(&args, "--atomic");
 	if (options.verbosity == 0)
 		argv_array_push(&args, "--quiet");
 	else if (options.verbosity > 1)
@@ -1225,7 +1236,7 @@
 	return err;
 }
 
-static int push(int nr_spec, char **specs)
+static int push(int nr_spec, const char **specs)
 {
 	struct discovery *heads = discover_refs("git-receive-pack", 1);
 	int ret;
@@ -1240,14 +1251,12 @@
 
 static void parse_push(struct strbuf *buf)
 {
-	char **specs = NULL;
-	int alloc_spec = 0, nr_spec = 0, i, ret;
+	struct argv_array specs = ARGV_ARRAY_INIT;
+	int ret;
 
 	do {
-		if (starts_with(buf->buf, "push ")) {
-			ALLOC_GROW(specs, nr_spec + 1, alloc_spec);
-			specs[nr_spec++] = xstrdup(buf->buf + 5);
-		}
+		if (starts_with(buf->buf, "push "))
+			argv_array_push(&specs, buf->buf + 5);
 		else
 			die(_("http transport does not support %s"), buf->buf);
 
@@ -1258,7 +1267,7 @@
 			break;
 	} while (1);
 
-	ret = push(nr_spec, specs);
+	ret = push(specs.argc, specs.argv);
 	printf("\n");
 	fflush(stdout);
 
@@ -1266,9 +1275,7 @@
 		exit(128); /* error already reported */
 
  free_specs:
-	for (i = 0; i < nr_spec; i++)
-		free(specs[i]);
-	free(specs);
+	argv_array_clear(&specs);
 }
 
 static int stateless_connect(const char *service_name)
diff --git a/remote.c b/remote.c
index e50f760..5c4666b 100644
--- a/remote.c
+++ b/remote.c
@@ -111,14 +111,16 @@
 };
 
 static int remotes_hash_cmp(const void *unused_cmp_data,
-			    const void *entry,
-			    const void *entry_or_key,
+			    const struct hashmap_entry *eptr,
+			    const struct hashmap_entry *entry_or_key,
 			    const void *keydata)
 {
-	const struct remote *a = entry;
-	const struct remote *b = entry_or_key;
+	const struct remote *a, *b;
 	const struct remotes_hash_key *key = keydata;
 
+	a = container_of(eptr, const struct remote, ent);
+	b = container_of(entry_or_key, const struct remote, ent);
+
 	if (key)
 		return strncmp(a->name, key->str, key->len) || a->name[key->len];
 	else
@@ -135,7 +137,7 @@
 {
 	struct remote *ret, *replaced;
 	struct remotes_hash_key lookup;
-	struct hashmap_entry lookup_entry;
+	struct hashmap_entry lookup_entry, *e;
 
 	if (!len)
 		len = strlen(name);
@@ -145,8 +147,9 @@
 	lookup.len = len;
 	hashmap_entry_init(&lookup_entry, memhash(name, len));
 
-	if ((ret = hashmap_get(&remotes_hash, &lookup_entry, &lookup)) != NULL)
-		return ret;
+	e = hashmap_get(&remotes_hash, &lookup_entry, &lookup);
+	if (e)
+		return container_of(e, struct remote, ent);
 
 	ret = xcalloc(1, sizeof(struct remote));
 	ret->prune = -1;  /* unspecified */
@@ -158,8 +161,8 @@
 	ALLOC_GROW(remotes, remotes_nr + 1, remotes_alloc);
 	remotes[remotes_nr++] = ret;
 
-	hashmap_entry_init(ret, lookup_entry.hash);
-	replaced = hashmap_put(&remotes_hash, ret);
+	hashmap_entry_init(&ret->ent, lookup_entry.hash);
+	replaced = hashmap_put_entry(&remotes_hash, ret, ent);
 	assert(replaced == NULL);  /* no previous entry overwritten */
 	return ret;
 }
diff --git a/remote.h b/remote.h
index 83e8856..0e1d2b2 100644
--- a/remote.h
+++ b/remote.h
@@ -14,7 +14,7 @@
 };
 
 struct remote {
-	struct hashmap_entry ent;  /* must be first */
+	struct hashmap_entry ent;
 
 	const char *name;
 	int origin, configured_in_repo;
diff --git a/repo-settings.c b/repo-settings.c
new file mode 100644
index 0000000..a703e40
--- /dev/null
+++ b/repo-settings.c
@@ -0,0 +1,68 @@
+#include "cache.h"
+#include "config.h"
+#include "repository.h"
+
+#define UPDATE_DEFAULT_BOOL(s,v) do { if (s == -1) { s = v; } } while(0)
+
+void prepare_repo_settings(struct repository *r)
+{
+	int value;
+	char *strval;
+
+	if (r->settings.initialized)
+		return;
+
+	/* Defaults */
+	memset(&r->settings, -1, sizeof(r->settings));
+
+	if (!repo_config_get_bool(r, "core.commitgraph", &value))
+		r->settings.core_commit_graph = value;
+	if (!repo_config_get_bool(r, "gc.writecommitgraph", &value))
+		r->settings.gc_write_commit_graph = value;
+	UPDATE_DEFAULT_BOOL(r->settings.core_commit_graph, 1);
+	UPDATE_DEFAULT_BOOL(r->settings.gc_write_commit_graph, 1);
+
+	if (!repo_config_get_int(r, "index.version", &value))
+		r->settings.index_version = value;
+	if (!repo_config_get_maybe_bool(r, "core.untrackedcache", &value)) {
+		if (value == 0)
+			r->settings.core_untracked_cache = UNTRACKED_CACHE_REMOVE;
+		else
+			r->settings.core_untracked_cache = UNTRACKED_CACHE_WRITE;
+	} else if (!repo_config_get_string(r, "core.untrackedcache", &strval)) {
+		if (!strcasecmp(strval, "keep"))
+			r->settings.core_untracked_cache = UNTRACKED_CACHE_KEEP;
+
+		free(strval);
+	}
+
+	if (!repo_config_get_string(r, "fetch.negotiationalgorithm", &strval)) {
+		if (!strcasecmp(strval, "skipping"))
+			r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_SKIPPING;
+		else
+			r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_DEFAULT;
+	}
+
+	if (!repo_config_get_bool(r, "pack.usesparse", &value))
+		r->settings.pack_use_sparse = value;
+	if (!repo_config_get_bool(r, "feature.manyfiles", &value) && value) {
+		UPDATE_DEFAULT_BOOL(r->settings.index_version, 4);
+		UPDATE_DEFAULT_BOOL(r->settings.core_untracked_cache, UNTRACKED_CACHE_WRITE);
+	}
+	if (!repo_config_get_bool(r, "fetch.writecommitgraph", &value))
+		r->settings.fetch_write_commit_graph = value;
+	if (!repo_config_get_bool(r, "feature.experimental", &value) && value) {
+		UPDATE_DEFAULT_BOOL(r->settings.pack_use_sparse, 1);
+		UPDATE_DEFAULT_BOOL(r->settings.fetch_negotiation_algorithm, FETCH_NEGOTIATION_SKIPPING);
+		UPDATE_DEFAULT_BOOL(r->settings.fetch_write_commit_graph, 1);
+	}
+	UPDATE_DEFAULT_BOOL(r->settings.fetch_write_commit_graph, 0);
+
+	/* Hack for test programs like test-dump-untracked-cache */
+	if (ignore_untracked_cache_config)
+		r->settings.core_untracked_cache = UNTRACKED_CACHE_KEEP;
+	else
+		UPDATE_DEFAULT_BOOL(r->settings.core_untracked_cache, UNTRACKED_CACHE_KEEP);
+
+	UPDATE_DEFAULT_BOOL(r->settings.fetch_negotiation_algorithm, FETCH_NEGOTIATION_DEFAULT);
+}
diff --git a/repository.h b/repository.h
index 4fb6a58..fe42197 100644
--- a/repository.h
+++ b/repository.h
@@ -11,6 +11,34 @@
 struct raw_object_store;
 struct submodule_cache;
 
+enum untracked_cache_setting {
+	UNTRACKED_CACHE_UNSET = -1,
+	UNTRACKED_CACHE_REMOVE = 0,
+	UNTRACKED_CACHE_KEEP = 1,
+	UNTRACKED_CACHE_WRITE = 2
+};
+
+enum fetch_negotiation_setting {
+	FETCH_NEGOTIATION_UNSET = -1,
+	FETCH_NEGOTIATION_NONE = 0,
+	FETCH_NEGOTIATION_DEFAULT = 1,
+	FETCH_NEGOTIATION_SKIPPING = 2,
+};
+
+struct repo_settings {
+	int initialized;
+
+	int core_commit_graph;
+	int gc_write_commit_graph;
+	int fetch_write_commit_graph;
+
+	int index_version;
+	enum untracked_cache_setting core_untracked_cache;
+
+	int pack_use_sparse;
+	enum fetch_negotiation_setting fetch_negotiation_algorithm;
+};
+
 struct repository {
 	/* Environment */
 	/*
@@ -72,6 +100,8 @@
 	 */
 	char *submodule_prefix;
 
+	struct repo_settings settings;
+
 	/* Subsystems */
 	/*
 	 * Repository's config which contains key-value pairs from the usual
@@ -95,6 +125,9 @@
 	/* A unique-id for tracing purposes. */
 	int trace2_repo_id;
 
+	/* True if commit-graph has been disabled within this process. */
+	int commit_graph_disabled;
+
 	/* Configurations */
 
 	/* Indicate if a repository has a different 'commondir' from 'gitdir' */
@@ -157,5 +190,6 @@
  */
 void repo_update_index_if_able(struct repository *, struct lock_file *);
 
+void prepare_repo_settings(struct repository *r);
 
 #endif /* REPOSITORY_H */
diff --git a/rerere.c b/rerere.c
index 17abb47..3e51fdf 100644
--- a/rerere.c
+++ b/rerere.c
@@ -52,7 +52,7 @@
 
 static const char *rerere_id_hex(const struct rerere_id *id)
 {
-	return sha1_to_hex(id->collection->hash);
+	return hash_to_hex(id->collection->hash);
 }
 
 static void fit_variant(struct rerere_dir *rr_dir, int variant)
@@ -115,7 +115,7 @@
 static void scan_rerere_dir(struct rerere_dir *rr_dir)
 {
 	struct dirent *de;
-	DIR *dir = opendir(git_path("rr-cache/%s", sha1_to_hex(rr_dir->hash)));
+	DIR *dir = opendir(git_path("rr-cache/%s", hash_to_hex(rr_dir->hash)));
 
 	if (!dir)
 		return;
@@ -186,9 +186,9 @@
 	return id;
 }
 
-static struct rerere_id *new_rerere_id(unsigned char *sha1)
+static struct rerere_id *new_rerere_id(unsigned char *hash)
 {
-	return new_rerere_id_hex(sha1_to_hex(sha1));
+	return new_rerere_id_hex(hash_to_hex(hash));
 }
 
 /*
diff --git a/revision.c b/revision.c
index 0741229..0e39b2b 100644
--- a/revision.c
+++ b/revision.c
@@ -28,6 +28,7 @@
 #include "commit-graph.h"
 #include "prio-queue.h"
 #include "hashmap.h"
+#include "utf8.h"
 
 volatile show_early_output_fn_t show_early_output;
 
@@ -107,30 +108,34 @@
 };
 
 static int path_and_oids_cmp(const void *hashmap_cmp_fn_data,
-			     const struct path_and_oids_entry *e1,
-			     const struct path_and_oids_entry *e2,
+			     const struct hashmap_entry *eptr,
+			     const struct hashmap_entry *entry_or_key,
 			     const void *keydata)
 {
+	const struct path_and_oids_entry *e1, *e2;
+
+	e1 = container_of(eptr, const struct path_and_oids_entry, ent);
+	e2 = container_of(entry_or_key, const struct path_and_oids_entry, ent);
+
 	return strcmp(e1->path, e2->path);
 }
 
 static void paths_and_oids_init(struct hashmap *map)
 {
-	hashmap_init(map, (hashmap_cmp_fn) path_and_oids_cmp, NULL, 0);
+	hashmap_init(map, path_and_oids_cmp, NULL, 0);
 }
 
 static void paths_and_oids_clear(struct hashmap *map)
 {
 	struct hashmap_iter iter;
 	struct path_and_oids_entry *entry;
-	hashmap_iter_init(map, &iter);
 
-	while ((entry = (struct path_and_oids_entry *)hashmap_iter_next(&iter))) {
+	hashmap_for_each_entry(map, &iter, entry, ent /* member name */) {
 		oidset_clear(&entry->trees);
 		free(entry->path);
 	}
 
-	hashmap_free(map, 1);
+	hashmap_free_entries(map, struct path_and_oids_entry, ent);
 }
 
 static void paths_and_oids_insert(struct hashmap *map,
@@ -141,18 +146,19 @@
 	struct path_and_oids_entry key;
 	struct path_and_oids_entry *entry;
 
-	hashmap_entry_init(&key, hash);
+	hashmap_entry_init(&key.ent, hash);
 
 	/* use a shallow copy for the lookup */
 	key.path = (char *)path;
 	oidset_init(&key.trees, 0);
 
-	if (!(entry = (struct path_and_oids_entry *)hashmap_get(map, &key, NULL))) {
+	entry = hashmap_get_entry(map, &key, ent, NULL);
+	if (!entry) {
 		entry = xcalloc(1, sizeof(struct path_and_oids_entry));
-		hashmap_entry_init(entry, hash);
+		hashmap_entry_init(&entry->ent, hash);
 		entry->path = xstrdup(key.path);
 		oidset_init(&entry->trees, 16);
-		hashmap_put(map, entry);
+		hashmap_put(map, &entry->ent);
 	}
 
 	oidset_insert(&entry->trees, oid);
@@ -235,8 +241,7 @@
 		add_children_by_path(r, tree, &map);
 	}
 
-	hashmap_iter_init(&map, &map_iter);
-	while ((entry = hashmap_iter_next(&map_iter)))
+	hashmap_for_each_entry(&map, &map_iter, entry, ent /* member name */)
 		mark_trees_uninteresting_sparse(r, &entry->trees);
 
 	paths_and_oids_clear(&map);
@@ -404,9 +409,7 @@
 		struct tag *tag = (struct tag *) object;
 		if (revs->tag_objects && !(flags & UNINTERESTING))
 			add_pending_object(revs, object, tag->tag);
-		if (!tag->tagged)
-			die("bad tag");
-		object = parse_object(revs->repo, &tag->tagged->oid);
+		object = parse_object(revs->repo, get_tagged_oid(tag));
 		if (!object) {
 			if (revs->ignore_missing_links || (flags & UNINTERESTING))
 				return NULL;
@@ -2063,7 +2066,6 @@
 		revs->simplify_by_decoration = 1;
 		revs->limited = 1;
 		revs->prune = 1;
-		load_ref_decorations(NULL, DECORATE_SHORT_REFS);
 	} else if (!strcmp(arg, "--date-order")) {
 		revs->sort_order = REV_SORT_BY_COMMIT_DATE;
 		revs->topo_order = 1;
@@ -2523,6 +2525,7 @@
 	int i, flags, left, seen_dashdash, got_rev_arg = 0, revarg_opt;
 	struct argv_array prune_data = ARGV_ARRAY_INIT;
 	const char *submodule = NULL;
+	int seen_end_of_options = 0;
 
 	if (opt)
 		submodule = opt->submodule;
@@ -2552,7 +2555,7 @@
 		revarg_opt |= REVARG_CANNOT_BE_FILENAME;
 	for (left = i = 1; i < argc; i++) {
 		const char *arg = argv[i];
-		if (*arg == '-') {
+		if (!seen_end_of_options && *arg == '-') {
 			int opts;
 
 			opts = handle_revision_pseudo_opt(submodule,
@@ -2574,6 +2577,11 @@
 				continue;
 			}
 
+			if (!strcmp(arg, "--end-of-options")) {
+				seen_end_of_options = 1;
+				continue;
+			}
+
 			opts = handle_revision_opt(revs, argc - i, argv + i,
 						   &left, argv, opt);
 			if (opts > 0) {
@@ -2684,6 +2692,8 @@
 
 	grep_commit_pattern_type(GREP_PATTERN_TYPE_UNSPECIFIED,
 				 &revs->grep_filter);
+	if (!is_encoding_utf8(get_log_output_encoding()))
+		revs->grep_filter.ignore_locale = 1;
 	compile_grep_patterns(&revs->grep_filter);
 
 	if (revs->reverse && revs->reflog_info)
diff --git a/send-pack.c b/send-pack.c
index 6dc16c3..34c77cb 100644
--- a/send-pack.c
+++ b/send-pack.c
@@ -40,7 +40,8 @@
 
 static void feed_object(const struct object_id *oid, FILE *fh, int negative)
 {
-	if (negative && !has_object_file(oid))
+	if (negative &&
+	    !has_object_file_with_flags(oid, OBJECT_INFO_SKIP_FETCH_OBJECT))
 		return;
 
 	if (negative)
diff --git a/sequencer.c b/sequencer.c
index 34ebf8e..9d5964f 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -586,7 +586,7 @@
 			      struct replay_opts *opts)
 {
 	struct merge_options o;
-	struct tree *result, *next_tree, *base_tree, *head_tree;
+	struct tree *next_tree, *base_tree, *head_tree;
 	int clean;
 	char **xopt;
 	struct lock_file index_lock = LOCK_INIT;
@@ -613,11 +613,10 @@
 
 	clean = merge_trees(&o,
 			    head_tree,
-			    next_tree, base_tree, &result);
+			    next_tree, base_tree);
 	if (is_rebase_i(opts) && clean <= 0)
 		fputs(o.obuf.buf, stdout);
 	strbuf_release(&o.obuf);
-	diff_warn_rename_limit("merge.renamelimit", o.needed_rename_limit, 0);
 	if (clean < 0) {
 		rollback_lock_file(&index_lock);
 		return clean;
@@ -869,34 +868,6 @@
 	return NULL;
 }
 
-/* Read author-script and return an ident line (author <email> timestamp) */
-static const char *read_author_ident(struct strbuf *buf)
-{
-	struct strbuf out = STRBUF_INIT;
-	char *name, *email, *date;
-
-	if (read_author_script(rebase_path_author_script(),
-			       &name, &email, &date, 0))
-		return NULL;
-
-	/* validate date since fmt_ident() will die() on bad value */
-	if (parse_date(date, &out)){
-		warning(_("invalid date format '%s' in '%s'"),
-			date, rebase_path_author_script());
-		strbuf_release(&out);
-		return NULL;
-	}
-
-	strbuf_reset(&out);
-	strbuf_addstr(&out, fmt_ident(name, email, WANT_AUTHOR_IDENT, date, 0));
-	strbuf_swap(buf, &out);
-	strbuf_release(&out);
-	free(name);
-	free(email);
-	free(date);
-	return buf->buf;
-}
-
 static const char staged_changes_advice[] =
 N_("you have staged changes in your working tree\n"
 "If these changes are meant to be squashed into the previous commit, run:\n"
@@ -954,47 +925,6 @@
 {
 	struct child_process cmd = CHILD_PROCESS_INIT;
 
-	if ((flags & CREATE_ROOT_COMMIT) && !(flags & AMEND_MSG)) {
-		struct strbuf msg = STRBUF_INIT, script = STRBUF_INIT;
-		const char *author = NULL;
-		struct object_id root_commit, *cache_tree_oid;
-		int res = 0;
-
-		if (is_rebase_i(opts)) {
-			author = read_author_ident(&script);
-			if (!author) {
-				strbuf_release(&script);
-				return -1;
-			}
-		}
-
-		if (!defmsg)
-			BUG("root commit without message");
-
-		if (!(cache_tree_oid = get_cache_tree_oid(r->index)))
-			res = -1;
-
-		if (!res)
-			res = strbuf_read_file(&msg, defmsg, 0);
-
-		if (res <= 0)
-			res = error_errno(_("could not read '%s'"), defmsg);
-		else
-			res = commit_tree(msg.buf, msg.len, cache_tree_oid,
-					  NULL, &root_commit, author,
-					  opts->gpg_sign);
-
-		strbuf_release(&msg);
-		strbuf_release(&script);
-		if (!res) {
-			update_ref(NULL, "CHERRY_PICK_HEAD", &root_commit, NULL,
-				   REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR);
-			res = update_ref(NULL, "HEAD", &root_commit, NULL, 0,
-					 UPDATE_REFS_MSG_ON_ERR);
-		}
-		return res < 0 ? error(_("writing root commit")) : 0;
-	}
-
 	cmd.git_cmd = 1;
 
 	if (is_rebase_i(opts) && read_env_script(&cmd.env_array)) {
@@ -1378,7 +1308,7 @@
 			 struct object_id *oid)
 {
 	struct object_id tree;
-	struct commit *current_head;
+	struct commit *current_head = NULL;
 	struct commit_list *parents = NULL;
 	struct commit_extra_header *extra = NULL;
 	struct strbuf err = STRBUF_INIT;
@@ -1413,7 +1343,8 @@
 		}
 		parents = copy_commit_list(current_head->parents);
 		extra = read_commit_extra_headers(current_head, exclude_gpgsig);
-	} else if (current_head) {
+	} else if (current_head &&
+		   (!(flags & CREATE_ROOT_COMMIT) || (flags & AMEND_MSG))) {
 		commit_list_insert(current_head, &parents);
 	}
 
@@ -1490,8 +1421,7 @@
 {
 	int res = 1;
 
-	if (!(flags & EDIT_MSG) && !(flags & VERIFY_MSG) &&
-	    !(flags & CREATE_ROOT_COMMIT)) {
+	if (!(flags & EDIT_MSG) && !(flags & VERIFY_MSG)) {
 		struct object_id oid;
 		struct strbuf sb = STRBUF_INIT;
 
@@ -1775,7 +1705,7 @@
 			  enum todo_command command,
 			  struct commit *commit,
 			  struct replay_opts *opts,
-			  int final_fixup)
+			  int final_fixup, int *check_todo)
 {
 	unsigned int flags = opts->edit ? EDIT_MSG : 0;
 	const char *msg_file = opts->edit ? NULL : git_path_merge_msg(r);
@@ -1785,7 +1715,7 @@
 	char *author = NULL;
 	struct commit_message msg = { NULL, NULL, NULL, NULL };
 	struct strbuf msgbuf = STRBUF_INIT;
-	int res, unborn = 0, allow;
+	int res, unborn = 0, reword = 0, allow;
 
 	if (opts->no_commit) {
 		/*
@@ -1855,7 +1785,7 @@
 			opts);
 		if (res || command != TODO_REWORD)
 			goto leave;
-		flags |= EDIT_MSG | AMEND_MSG | VERIFY_MSG;
+		reword = 1;
 		msg_file = NULL;
 		goto fast_forward_edit;
 	}
@@ -1913,7 +1843,7 @@
 	}
 
 	if (command == TODO_REWORD)
-		flags |= EDIT_MSG | VERIFY_MSG;
+		reword = 1;
 	else if (is_fixup(command)) {
 		if (update_squash_messages(r, command, commit, opts))
 			return -1;
@@ -1997,13 +1927,21 @@
 	} else if (allow)
 		flags |= ALLOW_EMPTY;
 	if (!opts->no_commit) {
-fast_forward_edit:
 		if (author || command == TODO_REVERT || (flags & AMEND_MSG))
 			res = do_commit(r, msg_file, author, opts, flags);
 		else
 			res = error(_("unable to parse commit author"));
+		*check_todo = !!(flags & EDIT_MSG);
+		if (!res && reword) {
+fast_forward_edit:
+			res = run_git_commit(r, NULL, opts, EDIT_MSG |
+					     VERIFY_MSG | AMEND_MSG |
+					     (flags & ALLOW_EMPTY));
+			*check_todo = 1;
+		}
 	}
 
+
 	if (!res && final_fixup) {
 		unlink(rebase_path_fixup_msg());
 		unlink(rebase_path_squash_msg());
@@ -3364,6 +3302,9 @@
 	struct commit *head_commit, *merge_commit, *i;
 	struct commit_list *bases, *j, *reversed = NULL;
 	struct commit_list *to_merge = NULL, **tail = &to_merge;
+	const char *strategy = !opts->xopts_nr &&
+		(!opts->strategy || !strcmp(opts->strategy, "recursive")) ?
+		NULL : opts->strategy;
 	struct merge_options o;
 	int merge_arg_len, oneline_offset, can_fast_forward, ret, k;
 	static struct lock_file lock;
@@ -3516,7 +3457,7 @@
 		goto leave_merge;
 	}
 
-	if (to_merge->next) {
+	if (strategy || to_merge->next) {
 		/* Octopus merge */
 		struct child_process cmd = CHILD_PROCESS_INIT;
 
@@ -3530,7 +3471,14 @@
 		cmd.git_cmd = 1;
 		argv_array_push(&cmd.args, "merge");
 		argv_array_push(&cmd.args, "-s");
-		argv_array_push(&cmd.args, "octopus");
+		if (!strategy)
+			argv_array_push(&cmd.args, "octopus");
+		else {
+			argv_array_push(&cmd.args, strategy);
+			for (k = 0; k < opts->xopts_nr; k++)
+				argv_array_pushf(&cmd.args,
+						 "-X%s", opts->xopts[k]);
+		}
 		argv_array_push(&cmd.args, "--no-edit");
 		argv_array_push(&cmd.args, "--no-ff");
 		argv_array_push(&cmd.args, "--no-log");
@@ -3568,7 +3516,7 @@
 		goto leave_merge;
 	}
 
-	write_message(oid_to_hex(&merge_commit->object.oid), GIT_SHA1_HEXSZ,
+	write_message(oid_to_hex(&merge_commit->object.oid), the_hash_algo->hexsz,
 		      git_path_merge_head(r), 0);
 	write_message("no-ff", 5, git_path_merge_mode(r), 0);
 
@@ -3818,6 +3766,7 @@
 	while (todo_list->current < todo_list->nr) {
 		struct todo_item *item = todo_list->items + todo_list->current;
 		const char *arg = todo_item_get_arg(todo_list, item);
+		int check_todo = 0;
 
 		if (save_todo(todo_list, opts))
 			return -1;
@@ -3856,7 +3805,8 @@
 					command_to_string(item->command), NULL),
 					1);
 			res = do_pick_commit(r, item->command, item->commit,
-					opts, is_final_fixup(todo_list));
+					     opts, is_final_fixup(todo_list),
+					     &check_todo);
 			if (is_rebase_i(opts) && res < 0) {
 				/* Reschedule */
 				advise(_(rescheduled_advice),
@@ -3913,7 +3863,6 @@
 		} else if (item->command == TODO_EXEC) {
 			char *end_of_arg = (char *)(arg + item->arg_len);
 			int saved = *end_of_arg;
-			struct stat st;
 
 			if (!opts->verbose)
 				term_clear_line();
@@ -3924,17 +3873,8 @@
 			if (res) {
 				if (opts->reschedule_failed_exec)
 					reschedule = 1;
-			} else if (stat(get_todo_path(opts), &st))
-				res = error_errno(_("could not stat '%s'"),
-						  get_todo_path(opts));
-			else if (match_stat_data(&todo_list->stat, &st)) {
-				/* Reread the todo file if it has changed. */
-				todo_list_release(todo_list);
-				if (read_populate_todo(r, todo_list, opts))
-					res = -1; /* message was printed */
-				/* `current` will be incremented below */
-				todo_list->current = -1;
 			}
+			check_todo = 1;
 		} else if (item->command == TODO_LABEL) {
 			if ((res = do_label(r, arg, item->arg_len)))
 				reschedule = 1;
@@ -3970,6 +3910,20 @@
 							item->commit,
 							arg, item->arg_len,
 							opts, res, 0);
+		} else if (check_todo && !res) {
+			struct stat st;
+
+			if (stat(get_todo_path(opts), &st)) {
+				res = error_errno(_("could not stat '%s'"),
+						  get_todo_path(opts));
+			} else if (match_stat_data(&todo_list->stat, &st)) {
+				/* Reread the todo file if it has changed. */
+				todo_list_release(todo_list);
+				if (read_populate_todo(r, todo_list, opts))
+					res = -1; /* message was printed */
+				/* `current` will be incremented below */
+				todo_list->current = -1;
+			}
 		}
 
 		todo_list->current++;
@@ -4296,9 +4250,12 @@
 		       struct commit *cmit,
 		       struct replay_opts *opts)
 {
+	int check_todo;
+
 	setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
 	return do_pick_commit(r, opts->action == REPLAY_PICK ?
-		TODO_PICK : TODO_REVERT, cmit, opts, 0);
+			      TODO_PICK : TODO_REVERT, cmit, opts, 0,
+			      &check_todo);
 }
 
 int sequencer_pick_revisions(struct repository *r,
@@ -4440,9 +4397,14 @@
 	char label[FLEX_ARRAY];
 };
 
-static int labels_cmp(const void *fndata, const struct labels_entry *a,
-		      const struct labels_entry *b, const void *key)
+static int labels_cmp(const void *fndata, const struct hashmap_entry *eptr,
+		      const struct hashmap_entry *entry_or_key, const void *key)
 {
+	const struct labels_entry *a, *b;
+
+	a = container_of(eptr, const struct labels_entry, entry);
+	b = container_of(entry_or_key, const struct labels_entry, entry);
+
 	return key ? strcmp(a->label, key) : strcmp(a->label, b->label);
 }
 
@@ -4487,7 +4449,7 @@
 		char *p;
 
 		strbuf_reset(&state->buf);
-		strbuf_grow(&state->buf, GIT_SHA1_HEXSZ);
+		strbuf_grow(&state->buf, GIT_MAX_HEXSZ);
 		label = p = state->buf.buf;
 
 		find_unique_abbrev_r(p, oid, default_abbrev);
@@ -4500,7 +4462,7 @@
 			size_t i = strlen(p) + 1;
 
 			oid_to_hex_r(p, oid);
-			for (; i < GIT_SHA1_HEXSZ; i++) {
+			for (; i < the_hash_algo->hexsz; i++) {
 				char save = p[i];
 				p[i] = '\0';
 				if (!hashmap_get_from_hash(&state->labels,
@@ -4538,8 +4500,8 @@
 	}
 
 	FLEX_ALLOC_STR(labels_entry, label, label);
-	hashmap_entry_init(labels_entry, strihash(label));
-	hashmap_add(&state->labels, labels_entry);
+	hashmap_entry_init(&labels_entry->entry, strihash(label));
+	hashmap_add(&state->labels, &labels_entry->entry);
 
 	FLEX_ALLOC_STR(string_entry, string, label);
 	oidcpy(&string_entry->entry.oid, oid);
@@ -4554,6 +4516,7 @@
 {
 	int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
 	int rebase_cousins = flags & TODO_LIST_REBASE_COUSINS;
+	int root_with_onto = flags & TODO_LIST_ROOT_WITH_ONTO;
 	struct strbuf buf = STRBUF_INIT, oneline = STRBUF_INIT;
 	struct strbuf label = STRBUF_INIT;
 	struct commit_list *commits = NULL, **tail = &commits, *iter;
@@ -4573,7 +4536,7 @@
 
 	oidmap_init(&commit2todo, 0);
 	oidmap_init(&state.commit2label, 0);
-	hashmap_init(&state.labels, (hashmap_cmp_fn) labels_cmp, NULL, 0);
+	hashmap_init(&state.labels, labels_cmp, NULL, 0);
 	strbuf_init(&state.buf, 32);
 
 	if (revs->cmdline.nr && (revs->cmdline.rev[0].flags & BOTTOM)) {
@@ -4720,7 +4683,8 @@
 
 		if (!commit)
 			strbuf_addf(out, "%s %s\n", cmd_reset,
-				    rebase_cousins ? "onto" : "[new root]");
+				    rebase_cousins || root_with_onto ?
+				    "onto" : "[new root]");
 		else {
 			const char *to = NULL;
 
@@ -4767,7 +4731,7 @@
 
 	oidmap_free(&commit2todo, 1);
 	oidmap_free(&state.commit2label, 1);
-	hashmap_free(&state.labels, 1);
+	hashmap_free_entries(&state.labels, struct labels_entry, entry);
 	strbuf_release(&state.buf);
 
 	return 0;
@@ -5138,9 +5102,15 @@
 };
 
 static int subject2item_cmp(const void *fndata,
-			    const struct subject2item_entry *a,
-			    const struct subject2item_entry *b, const void *key)
+			    const struct hashmap_entry *eptr,
+			    const struct hashmap_entry *entry_or_key,
+			    const void *key)
 {
+	const struct subject2item_entry *a, *b;
+
+	a = container_of(eptr, const struct subject2item_entry, entry);
+	b = container_of(entry_or_key, const struct subject2item_entry, entry);
+
 	return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject);
 }
 
@@ -5173,8 +5143,7 @@
 	 * In that case, last[i] will indicate the index of the latest item to
 	 * be moved to appear after the i'th.
 	 */
-	hashmap_init(&subject2item, (hashmap_cmp_fn) subject2item_cmp,
-		     NULL, todo_list->nr);
+	hashmap_init(&subject2item, subject2item_cmp, NULL, todo_list->nr);
 	ALLOC_ARRAY(next, todo_list->nr);
 	ALLOC_ARRAY(tail, todo_list->nr);
 	ALLOC_ARRAY(subjects, todo_list->nr);
@@ -5217,8 +5186,11 @@
 					break;
 			}
 
-			if ((entry = hashmap_get_from_hash(&subject2item,
-							   strhash(p), p)))
+			entry = hashmap_get_entry_from_hash(&subject2item,
+						strhash(p), p,
+						struct subject2item_entry,
+						entry);
+			if (entry)
 				/* found by title */
 				i2 = entry->i;
 			else if (!strchr(p, ' ') &&
@@ -5252,8 +5224,9 @@
 						strhash(subject), subject)) {
 			FLEX_ALLOC_MEM(entry, subject, subject, subject_len);
 			entry->i = i;
-			hashmap_entry_init(entry, strhash(entry->subject));
-			hashmap_put(&subject2item, entry);
+			hashmap_entry_init(&entry->entry,
+					strhash(entry->subject));
+			hashmap_put(&subject2item, &entry->entry);
 		}
 	}
 
@@ -5287,7 +5260,7 @@
 	for (i = 0; i < todo_list->nr; i++)
 		free(subjects[i]);
 	free(subjects);
-	hashmap_free(&subject2item, 1);
+	hashmap_free_entries(&subject2item, struct subject2item_entry, entry);
 
 	clear_commit_todo_item(&commit_todo);
 
diff --git a/sequencer.h b/sequencer.h
index 6704acb..574260f 100644
--- a/sequencer.h
+++ b/sequencer.h
@@ -143,6 +143,12 @@
  */
 #define TODO_LIST_REBASE_COUSINS (1U << 4)
 #define TODO_LIST_APPEND_TODO_HELP (1U << 5)
+/*
+ * When generating a script that rebases merges with `--root` *and* with
+ * `--onto`, we do not want to re-generate the root commits.
+ */
+#define TODO_LIST_ROOT_WITH_ONTO (1U << 6)
+
 
 int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
 			  const char **argv, unsigned flags);
diff --git a/setup.c b/setup.c
index 8dcb463..e2a479a 100644
--- a/setup.c
+++ b/setup.c
@@ -4,6 +4,7 @@
 #include "dir.h"
 #include "string-list.h"
 #include "chdir-notify.h"
+#include "promisor-remote.h"
 
 static int inside_git_dir = -1;
 static int inside_work_tree = -1;
@@ -478,7 +479,7 @@
 	}
 
 	repository_format_precious_objects = candidate->precious_objects;
-	repository_format_partial_clone = xstrdup_or_null(candidate->partial_clone);
+	set_repository_format_partial_clone(candidate->partial_clone);
 	repository_format_worktree_config = candidate->worktree_config;
 	string_list_clear(&candidate->unknown_extensions, 0);
 
@@ -797,7 +798,7 @@
 		set_git_dir(gitdir);
 	inside_git_dir = 0;
 	inside_work_tree = 1;
-	if (offset == cwd->len)
+	if (offset >= cwd->len)
 		return NULL;
 
 	/* Make "offset" point past the '/' (already the case for root dirs) */
@@ -919,7 +920,7 @@
 	const char *env_ceiling_dirs = getenv(CEILING_DIRECTORIES_ENVIRONMENT);
 	struct string_list ceiling_dirs = STRING_LIST_INIT_DUP;
 	const char *gitdirenv;
-	int ceil_offset = -1, min_offset = has_dos_drive_prefix(dir->buf) ? 3 : 1;
+	int ceil_offset = -1, min_offset = offset_1st_component(dir->buf);
 	dev_t current_device = 0;
 	int one_filesystem = 1;
 
@@ -947,6 +948,12 @@
 	if (ceil_offset < 0)
 		ceil_offset = min_offset - 2;
 
+	if (min_offset && min_offset == dir->len &&
+	    !is_dir_sep(dir->buf[min_offset - 1])) {
+		strbuf_addch(dir, '/');
+		min_offset++;
+	}
+
 	/*
 	 * Test in the following order (relative to the dir):
 	 * - .git (file containing "gitdir: <path>")
diff --git a/sha1-file.c b/sha1-file.c
index 487ea35..188de57 100644
--- a/sha1-file.c
+++ b/sha1-file.c
@@ -30,8 +30,8 @@
 #include "mergesort.h"
 #include "quote.h"
 #include "packfile.h"
-#include "fetch-object.h"
 #include "object-store.h"
+#include "promisor-remote.h"
 
 /* The maximum size for an object header. */
 #define MAX_HEADER_LEN 32
@@ -55,7 +55,6 @@
 	"\x6f\xe1\x41\xf7\x74\x91\x20\xa3\x03\x72" \
 	"\x18\x13"
 
-const unsigned char null_sha1[GIT_MAX_RAWSZ];
 const struct object_id null_oid;
 static const struct object_id empty_tree_oid = {
 	EMPTY_TREE_SHA1_BIN_LITERAL
@@ -952,12 +951,8 @@
 
 	mmap_limit_check(length);
 	ret = mmap(start, length, prot, flags, fd, offset);
-	if (ret == MAP_FAILED) {
-		if (!length)
-			return NULL;
-		release_pack_memory(length);
-		ret = mmap(start, length, prot, flags, fd, offset);
-	}
+	if (ret == MAP_FAILED && !length)
+		ret = NULL;
 	return ret;
 }
 
@@ -1475,16 +1470,17 @@
 		}
 
 		/* Check if it is a missing object */
-		if (fetch_if_missing && repository_format_partial_clone &&
+		if (fetch_if_missing && has_promisor_remote() &&
 		    !already_retried && r == the_repository &&
 		    !(flags & OBJECT_INFO_SKIP_FETCH_OBJECT)) {
 			/*
-			 * TODO Investigate having fetch_object() return
-			 * TODO error/success and stopping the music here.
-			 * TODO Pass a repository struct through fetch_object,
-			 * such that arbitrary repositories work.
+			 * TODO Investigate checking promisor_remote_get_direct()
+			 * TODO return value and stopping on error here.
+			 * TODO Pass a repository struct through
+			 * promisor_remote_get_direct(), such that arbitrary
+			 * repositories work.
 			 */
-			fetch_objects(repository_format_partial_clone, real, 1);
+			promisor_remote_get_direct(r, real, 1);
 			already_retried = 1;
 			continue;
 		}
diff --git a/sha1-lookup.c b/sha1-lookup.c
index 796ab68..2918584 100644
--- a/sha1-lookup.c
+++ b/sha1-lookup.c
@@ -50,7 +50,7 @@
  * The sha1 of element i (between 0 and nr - 1) should be returned
  * by "fn(i, table)".
  */
-int sha1_pos(const unsigned char *sha1, void *table, size_t nr,
+int sha1_pos(const unsigned char *hash, void *table, size_t nr,
 	     sha1_access_fn fn)
 {
 	size_t hi = nr;
@@ -63,14 +63,14 @@
 	if (nr != 1) {
 		size_t lov, hiv, miv, ofs;
 
-		for (ofs = 0; ofs < 18; ofs += 2) {
+		for (ofs = 0; ofs < the_hash_algo->rawsz - 2; ofs += 2) {
 			lov = take2(fn(0, table) + ofs);
 			hiv = take2(fn(nr - 1, table) + ofs);
-			miv = take2(sha1 + ofs);
+			miv = take2(hash + ofs);
 			if (miv < lov)
 				return -1;
 			if (hiv < miv)
-				return -1 - nr;
+				return index_pos_to_insert_pos(nr);
 			if (lov != hiv) {
 				/*
 				 * At this point miv could be equal
@@ -88,7 +88,7 @@
 
 	do {
 		int cmp;
-		cmp = hashcmp(fn(mi, table), sha1);
+		cmp = hashcmp(fn(mi, table), hash);
 		if (!cmp)
 			return mi;
 		if (cmp > 0)
@@ -97,7 +97,7 @@
 			lo = mi + 1;
 		mi = lo + (hi - lo) / 2;
 	} while (lo < hi);
-	return -lo-1;
+	return index_pos_to_insert_pos(lo);
 }
 
 int bsearch_hash(const unsigned char *sha1, const uint32_t *fanout_nbo,
diff --git a/sha1-name.c b/sha1-name.c
index 2989e27..200eb37 100644
--- a/sha1-name.c
+++ b/sha1-name.c
@@ -403,9 +403,9 @@
 	return collect_ambiguous(oid, data);
 }
 
-static struct repository *sort_ambiguous_repo;
-static int sort_ambiguous(const void *a, const void *b)
+static int sort_ambiguous(const void *a, const void *b, void *ctx)
 {
+	struct repository *sort_ambiguous_repo = ctx;
 	int a_type = oid_object_info(sort_ambiguous_repo, a, NULL);
 	int b_type = oid_object_info(sort_ambiguous_repo, b, NULL);
 	int a_type_sort;
@@ -434,10 +434,7 @@
 
 static void sort_ambiguous_oid_array(struct repository *r, struct oid_array *a)
 {
-	/* mutex will be needed if this code is to be made thread safe */
-	sort_ambiguous_repo = r;
-	QSORT(a->oid, a->nr, sort_ambiguous);
-	sort_ambiguous_repo = NULL;
+	QSORT_S(a->oid, a->nr, sort_ambiguous, r);
 }
 
 static enum get_oid_result get_short_oid(struct repository *r,
@@ -1163,13 +1160,22 @@
 	}
 
 	if (has_suffix) {
-		int num = 0;
+		unsigned int num = 0;
 		int len1 = cp - name;
 		cp++;
-		while (cp < name + len)
-			num = num * 10 + *cp++ - '0';
+		while (cp < name + len) {
+			unsigned int digit = *cp++ - '0';
+			if (unsigned_mult_overflows(num, 10))
+				return MISSING_OBJECT;
+			num *= 10;
+			if (unsigned_add_overflows(num, digit))
+				return MISSING_OBJECT;
+			num += digit;
+		}
 		if (!num && len1 == len - 1)
 			num = 1;
+		else if (num > INT_MAX)
+			return MISSING_OBJECT;
 		if (has_suffix == '^')
 			return get_parent(r, name, len1, oid, num);
 		/* else if (has_suffix == '~') -- goes without saying */
@@ -1289,7 +1295,7 @@
 
 struct grab_nth_branch_switch_cbdata {
 	int remaining;
-	struct strbuf buf;
+	struct strbuf *sb;
 };
 
 static int grab_nth_branch_switch(struct object_id *ooid, struct object_id *noid,
@@ -1307,8 +1313,8 @@
 		return 0;
 	if (--(cb->remaining) == 0) {
 		len = target - match;
-		strbuf_reset(&cb->buf);
-		strbuf_add(&cb->buf, match, len);
+		strbuf_reset(cb->sb);
+		strbuf_add(cb->sb, match, len);
 		return 1; /* we are done */
 	}
 	return 0;
@@ -1341,18 +1347,15 @@
 	if (nth <= 0)
 		return -1;
 	cb.remaining = nth;
-	strbuf_init(&cb.buf, 20);
+	cb.sb = buf;
 
 	retval = refs_for_each_reflog_ent_reverse(get_main_ref_store(r),
 			"HEAD", grab_nth_branch_switch, &cb);
 	if (0 < retval) {
-		strbuf_reset(buf);
-		strbuf_addbuf(buf, &cb.buf);
 		retval = brace - name + 1;
 	} else
 		retval = 0;
 
-	strbuf_release(&cb.buf);
 	return retval;
 }
 
diff --git a/shallow.c b/shallow.c
index 5fa2b15..7fd04af 100644
--- a/shallow.c
+++ b/shallow.c
@@ -12,10 +12,7 @@
 #include "diff.h"
 #include "revision.h"
 #include "commit-slab.h"
-#include "revision.h"
 #include "list-objects.h"
-#include "commit-slab.h"
-#include "repository.h"
 #include "commit-reach.h"
 
 void set_alternate_shallow_file(struct repository *r, const char *path, int override)
@@ -156,6 +153,8 @@
 	for (i = 0; i < depths.slab_count; i++) {
 		int j;
 
+		if (!depths.slab[i])
+			continue;
 		for (j = 0; j < depths.slab_size; j++)
 			free(depths.slab[i][j]);
 	}
diff --git a/compat/qsort.c b/stable-qsort.c
similarity index 88%
rename from compat/qsort.c
rename to stable-qsort.c
index 7d071af..6cbaf39 100644
--- a/compat/qsort.c
+++ b/stable-qsort.c
@@ -1,4 +1,4 @@
-#include "../git-compat-util.h"
+#include "git-compat-util.h"
 
 /*
  * A merge sort implementation, simplified from the qsort implementation
@@ -44,8 +44,8 @@
 	memcpy(b, t, (n - n2) * s);
 }
 
-void git_qsort(void *b, size_t n, size_t s,
-	       int (*cmp)(const void *, const void *))
+void git_stable_qsort(void *b, size_t n, size_t s,
+		      int (*cmp)(const void *, const void *))
 {
 	const size_t size = st_mult(n, s);
 	char buf[1024];
diff --git a/strbuf.c b/strbuf.c
index d30f916..aa48d17 100644
--- a/strbuf.c
+++ b/strbuf.c
@@ -774,8 +774,10 @@
 	}
 }
 
-static int is_rfc3986_reserved(char ch)
+int is_rfc3986_reserved_or_unreserved(char ch)
 {
+	if (is_rfc3986_unreserved(ch))
+		return 1;
 	switch (ch) {
 		case '!': case '*': case '\'': case '(': case ')': case ';':
 		case ':': case '@': case '&': case '=': case '+': case '$':
@@ -785,20 +787,19 @@
 	return 0;
 }
 
-static int is_rfc3986_unreserved(char ch)
+int is_rfc3986_unreserved(char ch)
 {
 	return isalnum(ch) ||
 		ch == '-' || ch == '_' || ch == '.' || ch == '~';
 }
 
 static void strbuf_add_urlencode(struct strbuf *sb, const char *s, size_t len,
-				 int reserved)
+				 char_predicate allow_unencoded_fn)
 {
 	strbuf_grow(sb, len);
 	while (len--) {
 		char ch = *s++;
-		if (is_rfc3986_unreserved(ch) ||
-		    (!reserved && is_rfc3986_reserved(ch)))
+		if (allow_unencoded_fn(ch))
 			strbuf_addch(sb, ch);
 		else
 			strbuf_addf(sb, "%%%02x", (unsigned char)ch);
@@ -806,9 +807,9 @@
 }
 
 void strbuf_addstr_urlencode(struct strbuf *sb, const char *s,
-			     int reserved)
+			     char_predicate allow_unencoded_fn)
 {
-	strbuf_add_urlencode(sb, s, strlen(s), reserved);
+	strbuf_add_urlencode(sb, s, strlen(s), allow_unencoded_fn);
 }
 
 static void strbuf_humanise(struct strbuf *buf, off_t bytes,
diff --git a/strbuf.h b/strbuf.h
index f62278a..84cf969 100644
--- a/strbuf.h
+++ b/strbuf.h
@@ -672,8 +672,13 @@
  */
 int strbuf_check_branch_ref(struct strbuf *sb, const char *name);
 
+typedef int (*char_predicate)(char ch);
+
+int is_rfc3986_unreserved(char ch);
+int is_rfc3986_reserved_or_unreserved(char ch);
+
 void strbuf_addstr_urlencode(struct strbuf *sb, const char *name,
-			     int reserved);
+			     char_predicate allow_unencoded_fn);
 
 __attribute__((format (printf,1,2)))
 int printf_ln(const char *fmt, ...);
diff --git a/sub-process.c b/sub-process.c
index 3f4af93..1b1af9d 100644
--- a/sub-process.c
+++ b/sub-process.c
@@ -6,12 +6,14 @@
 #include "pkt-line.h"
 
 int cmd2process_cmp(const void *unused_cmp_data,
-		    const void *entry,
-		    const void *entry_or_key,
+		    const struct hashmap_entry *eptr,
+		    const struct hashmap_entry *entry_or_key,
 		    const void *unused_keydata)
 {
-	const struct subprocess_entry *e1 = entry;
-	const struct subprocess_entry *e2 = entry_or_key;
+	const struct subprocess_entry *e1, *e2;
+
+	e1 = container_of(eptr, const struct subprocess_entry, ent);
+	e2 = container_of(entry_or_key, const struct subprocess_entry, ent);
 
 	return strcmp(e1->cmd, e2->cmd);
 }
@@ -20,9 +22,9 @@
 {
 	struct subprocess_entry key;
 
-	hashmap_entry_init(&key, strhash(cmd));
+	hashmap_entry_init(&key.ent, strhash(cmd));
 	key.cmd = cmd;
-	return hashmap_get(hashmap, &key, NULL);
+	return hashmap_get_entry(hashmap, &key, ent, NULL);
 }
 
 int subprocess_read_status(int fd, struct strbuf *status)
@@ -58,7 +60,7 @@
 	kill(entry->process.pid, SIGTERM);
 	finish_command(&entry->process);
 
-	hashmap_remove(hashmap, entry, NULL);
+	hashmap_remove(hashmap, &entry->ent, NULL);
 }
 
 static void subprocess_exit_handler(struct child_process *process)
@@ -96,7 +98,7 @@
 		return err;
 	}
 
-	hashmap_entry_init(entry, strhash(cmd));
+	hashmap_entry_init(&entry->ent, strhash(cmd));
 
 	err = startfn(entry);
 	if (err) {
@@ -105,7 +107,7 @@
 		return err;
 	}
 
-	hashmap_add(hashmap, entry);
+	hashmap_add(hashmap, &entry->ent);
 	return 0;
 }
 
diff --git a/sub-process.h b/sub-process.h
index 5c182fa..e85f21f 100644
--- a/sub-process.h
+++ b/sub-process.h
@@ -24,7 +24,7 @@
 
 /* Members should not be accessed directly. */
 struct subprocess_entry {
-	struct hashmap_entry ent; /* must be the first member! */
+	struct hashmap_entry ent;
 	const char *cmd;
 	struct child_process process;
 };
@@ -43,8 +43,8 @@
 
 /* Function to test two subprocess hashmap entries for equality. */
 int cmd2process_cmp(const void *unused_cmp_data,
-		    const void *e1,
-		    const void *e2,
+		    const struct hashmap_entry *e,
+		    const struct hashmap_entry *entry_or_key,
 		    const void *unused_keydata);
 
 /*
diff --git a/submodule-config.c b/submodule-config.c
index bb52c8d..b93482d 100644
--- a/submodule-config.c
+++ b/submodule-config.c
@@ -38,24 +38,28 @@
 };
 
 static int config_path_cmp(const void *unused_cmp_data,
-			   const void *entry,
-			   const void *entry_or_key,
+			   const struct hashmap_entry *eptr,
+			   const struct hashmap_entry *entry_or_key,
 			   const void *unused_keydata)
 {
-	const struct submodule_entry *a = entry;
-	const struct submodule_entry *b = entry_or_key;
+	const struct submodule_entry *a, *b;
+
+	a = container_of(eptr, const struct submodule_entry, ent);
+	b = container_of(entry_or_key, const struct submodule_entry, ent);
 
 	return strcmp(a->config->path, b->config->path) ||
 	       !oideq(&a->config->gitmodules_oid, &b->config->gitmodules_oid);
 }
 
 static int config_name_cmp(const void *unused_cmp_data,
-			   const void *entry,
-			   const void *entry_or_key,
+			   const struct hashmap_entry *eptr,
+			   const struct hashmap_entry *entry_or_key,
 			   const void *unused_keydata)
 {
-	const struct submodule_entry *a = entry;
-	const struct submodule_entry *b = entry_or_key;
+	const struct submodule_entry *a, *b;
+
+	a = container_of(eptr, const struct submodule_entry, ent);
+	b = container_of(entry_or_key, const struct submodule_entry, ent);
 
 	return strcmp(a->config->name, b->config->name) ||
 	       !oideq(&a->config->gitmodules_oid, &b->config->gitmodules_oid);
@@ -95,12 +99,12 @@
 	 * allocation of struct submodule entries. Each is allocated by
 	 * their .gitmodules blob sha1 and submodule name.
 	 */
-	hashmap_iter_init(&cache->for_name, &iter);
-	while ((entry = hashmap_iter_next(&iter)))
+	hashmap_for_each_entry(&cache->for_name, &iter, entry,
+				ent /* member name */)
 		free_one_config(entry);
 
-	hashmap_free(&cache->for_path, 1);
-	hashmap_free(&cache->for_name, 1);
+	hashmap_free_entries(&cache->for_path, struct submodule_entry, ent);
+	hashmap_free_entries(&cache->for_name, struct submodule_entry, ent);
 	cache->initialized = 0;
 	cache->gitmodules_read = 0;
 }
@@ -123,9 +127,9 @@
 	unsigned int hash = hash_oid_string(&submodule->gitmodules_oid,
 					    submodule->path);
 	struct submodule_entry *e = xmalloc(sizeof(*e));
-	hashmap_entry_init(e, hash);
+	hashmap_entry_init(&e->ent, hash);
 	e->config = submodule;
-	hashmap_put(&cache->for_path, e);
+	hashmap_put(&cache->for_path, &e->ent);
 }
 
 static void cache_remove_path(struct submodule_cache *cache,
@@ -135,9 +139,9 @@
 					    submodule->path);
 	struct submodule_entry e;
 	struct submodule_entry *removed;
-	hashmap_entry_init(&e, hash);
+	hashmap_entry_init(&e.ent, hash);
 	e.config = submodule;
-	removed = hashmap_remove(&cache->for_path, &e, NULL);
+	removed = hashmap_remove_entry(&cache->for_path, &e, ent, NULL);
 	free(removed);
 }
 
@@ -147,9 +151,9 @@
 	unsigned int hash = hash_oid_string(&submodule->gitmodules_oid,
 					    submodule->name);
 	struct submodule_entry *e = xmalloc(sizeof(*e));
-	hashmap_entry_init(e, hash);
+	hashmap_entry_init(&e->ent, hash);
 	e->config = submodule;
-	hashmap_add(&cache->for_name, e);
+	hashmap_add(&cache->for_name, &e->ent);
 }
 
 static const struct submodule *cache_lookup_path(struct submodule_cache *cache,
@@ -163,10 +167,10 @@
 	oidcpy(&key_config.gitmodules_oid, gitmodules_oid);
 	key_config.path = path;
 
-	hashmap_entry_init(&key, hash);
+	hashmap_entry_init(&key.ent, hash);
 	key.config = &key_config;
 
-	entry = hashmap_get(&cache->for_path, &key, NULL);
+	entry = hashmap_get_entry(&cache->for_path, &key, ent, NULL);
 	if (entry)
 		return entry->config;
 	return NULL;
@@ -183,10 +187,10 @@
 	oidcpy(&key_config.gitmodules_oid, gitmodules_oid);
 	key_config.name = name;
 
-	hashmap_entry_init(&key, hash);
+	hashmap_entry_init(&key.ent, hash);
 	key.config = &key_config;
 
-	entry = hashmap_get(&cache->for_name, &key, NULL);
+	entry = hashmap_get_entry(&cache->for_name, &key, ent, NULL);
 	if (entry)
 		return entry->config;
 	return NULL;
@@ -558,7 +562,9 @@
 		struct hashmap_iter iter;
 		struct submodule_entry *entry;
 
-		entry = hashmap_iter_first(&cache->for_name, &iter);
+		entry = hashmap_iter_first_entry(&cache->for_name, &iter,
+						struct submodule_entry,
+						ent /* member name */);
 		if (!entry)
 			return NULL;
 		return entry->config;
diff --git a/t/helper/.gitignore b/t/helper/.gitignore
index 2bad28a..48c7bb0bb 100644
--- a/t/helper/.gitignore
+++ b/t/helper/.gitignore
@@ -1,5 +1,4 @@
-*
-!*.sh
-!*.[ch]
-!*.gitignore
-
+/test-tool
+/test-fake-ssh
+/test-line-buffer
+/test-svn-fe
diff --git a/t/helper/test-date.c b/t/helper/test-date.c
index 585347e..099eff4 100644
--- a/t/helper/test-date.c
+++ b/t/helper/test-date.c
@@ -12,13 +12,13 @@
 "  test-tool date is64bit\n"
 "  test-tool date time_t-is64bit\n";
 
-static void show_relative_dates(const char **argv, struct timeval *now)
+static void show_relative_dates(const char **argv)
 {
 	struct strbuf buf = STRBUF_INIT;
 
 	for (; *argv; argv++) {
 		time_t t = atoi(*argv);
-		show_date_relative(t, now, &buf);
+		show_date_relative(t, &buf);
 		printf("%s -> %s\n", *argv, buf.buf);
 	}
 	strbuf_release(&buf);
@@ -74,20 +74,20 @@
 	strbuf_release(&result);
 }
 
-static void parse_approxidate(const char **argv, struct timeval *now)
+static void parse_approxidate(const char **argv)
 {
 	for (; *argv; argv++) {
 		timestamp_t t;
-		t = approxidate_relative(*argv, now);
+		t = approxidate_relative(*argv);
 		printf("%s -> %s\n", *argv, show_date(t, 0, DATE_MODE(ISO8601)));
 	}
 }
 
-static void parse_approx_timestamp(const char **argv, struct timeval *now)
+static void parse_approx_timestamp(const char **argv)
 {
 	for (; *argv; argv++) {
 		timestamp_t t;
-		t = approxidate_relative(*argv, now);
+		t = approxidate_relative(*argv);
 		printf("%s -> %"PRItime"\n", *argv, t);
 	}
 }
@@ -103,22 +103,13 @@
 
 int cmd__date(int argc, const char **argv)
 {
-	struct timeval now;
 	const char *x;
 
-	x = getenv("GIT_TEST_DATE_NOW");
-	if (x) {
-		now.tv_sec = atoi(x);
-		now.tv_usec = 0;
-	}
-	else
-		gettimeofday(&now, NULL);
-
 	argv++;
 	if (!*argv)
 		usage(usage_msg);
 	if (!strcmp(*argv, "relative"))
-		show_relative_dates(argv+1, &now);
+		show_relative_dates(argv+1);
 	else if (!strcmp(*argv, "human"))
 		show_human_dates(argv+1);
 	else if (skip_prefix(*argv, "show:", &x))
@@ -126,9 +117,9 @@
 	else if (!strcmp(*argv, "parse"))
 		parse_dates(argv+1);
 	else if (!strcmp(*argv, "approxidate"))
-		parse_approxidate(argv+1, &now);
+		parse_approxidate(argv+1);
 	else if (!strcmp(*argv, "timestamp"))
-		parse_approx_timestamp(argv+1, &now);
+		parse_approx_timestamp(argv+1);
 	else if (!strcmp(*argv, "getnanos"))
 		getnanos(argv+1);
 	else if (!strcmp(*argv, "is64bit"))
diff --git a/t/helper/test-hashmap.c b/t/helper/test-hashmap.c
index aaf17b0..f387062 100644
--- a/t/helper/test-hashmap.c
+++ b/t/helper/test-hashmap.c
@@ -5,6 +5,7 @@
 
 struct test_entry
 {
+	int padding; /* hashmap entry no longer needs to be the first member */
 	struct hashmap_entry ent;
 	/* key and value as two \0-terminated strings */
 	char key[FLEX_ARRAY];
@@ -16,15 +17,17 @@
 }
 
 static int test_entry_cmp(const void *cmp_data,
-			  const void *entry,
-			  const void *entry_or_key,
+			  const struct hashmap_entry *eptr,
+			  const struct hashmap_entry *entry_or_key,
 			  const void *keydata)
 {
 	const int ignore_case = cmp_data ? *((int *)cmp_data) : 0;
-	const struct test_entry *e1 = entry;
-	const struct test_entry *e2 = entry_or_key;
+	const struct test_entry *e1, *e2;
 	const char *key = keydata;
 
+	e1 = container_of(eptr, const struct test_entry, ent);
+	e2 = container_of(entry_or_key, const struct test_entry, ent);
+
 	if (ignore_case)
 		return strcasecmp(e1->key, key ? key : e2->key);
 	else
@@ -37,7 +40,7 @@
 	size_t klen = strlen(key);
 	size_t vlen = strlen(value);
 	struct test_entry *entry = xmalloc(st_add4(sizeof(*entry), klen, vlen, 2));
-	hashmap_entry_init(entry, hash);
+	hashmap_entry_init(&entry->ent, hash);
 	memcpy(entry->key, key, klen + 1);
 	memcpy(entry->key + klen + 1, value, vlen + 1);
 	return entry;
@@ -103,11 +106,11 @@
 
 			/* add entries */
 			for (i = 0; i < TEST_SIZE; i++) {
-				hashmap_entry_init(entries[i], hashes[i]);
-				hashmap_add(&map, entries[i]);
+				hashmap_entry_init(&entries[i]->ent, hashes[i]);
+				hashmap_add(&map, &entries[i]->ent);
 			}
 
-			hashmap_free(&map, 0);
+			hashmap_free(&map);
 		}
 	} else {
 		/* test map lookups */
@@ -116,8 +119,8 @@
 		/* fill the map (sparsely if specified) */
 		j = (method & TEST_SPARSE) ? TEST_SIZE / 10 : TEST_SIZE;
 		for (i = 0; i < j; i++) {
-			hashmap_entry_init(entries[i], hashes[i]);
-			hashmap_add(&map, entries[i]);
+			hashmap_entry_init(&entries[i]->ent, hashes[i]);
+			hashmap_add(&map, &entries[i]->ent);
 		}
 
 		for (j = 0; j < rounds; j++) {
@@ -127,7 +130,7 @@
 			}
 		}
 
-		hashmap_free(&map, 0);
+		hashmap_free(&map);
 	}
 }
 
@@ -179,7 +182,7 @@
 			entry = alloc_test_entry(hash, p1, p2);
 
 			/* add to hashmap */
-			hashmap_add(&map, entry);
+			hashmap_add(&map, &entry->ent);
 
 		} else if (!strcmp("put", cmd) && p1 && p2) {
 
@@ -187,43 +190,44 @@
 			entry = alloc_test_entry(hash, p1, p2);
 
 			/* add / replace entry */
-			entry = hashmap_put(&map, entry);
+			entry = hashmap_put_entry(&map, entry, ent);
 
 			/* print and free replaced entry, if any */
 			puts(entry ? get_value(entry) : "NULL");
 			free(entry);
 
 		} else if (!strcmp("get", cmd) && p1) {
-
 			/* lookup entry in hashmap */
-			entry = hashmap_get_from_hash(&map, hash, p1);
+			entry = hashmap_get_entry_from_hash(&map, hash, p1,
+							struct test_entry, ent);
 
 			/* print result */
 			if (!entry)
 				puts("NULL");
-			while (entry) {
+			hashmap_for_each_entry_from(&map, entry, ent)
 				puts(get_value(entry));
-				entry = hashmap_get_next(&map, entry);
-			}
 
 		} else if (!strcmp("remove", cmd) && p1) {
 
 			/* setup static key */
 			struct hashmap_entry key;
+			struct hashmap_entry *rm;
 			hashmap_entry_init(&key, hash);
 
 			/* remove entry from hashmap */
-			entry = hashmap_remove(&map, &key, p1);
+			rm = hashmap_remove(&map, &key, p1);
+			entry = rm ? container_of(rm, struct test_entry, ent)
+					: NULL;
 
 			/* print result and free entry*/
 			puts(entry ? get_value(entry) : "NULL");
 			free(entry);
 
 		} else if (!strcmp("iterate", cmd)) {
-
 			struct hashmap_iter iter;
-			hashmap_iter_init(&map, &iter);
-			while ((entry = hashmap_iter_next(&iter)))
+
+			hashmap_for_each_entry(&map, &iter, entry,
+						ent /* member name */)
 				printf("%s %s\n", entry->key, get_value(entry));
 
 		} else if (!strcmp("size", cmd)) {
@@ -258,6 +262,6 @@
 	}
 
 	strbuf_release(&line);
-	hashmap_free(&map, 1);
+	hashmap_free_entries(&map, struct test_entry, ent);
 	return 0;
 }
diff --git a/t/helper/test-lazy-init-name-hash.c b/t/helper/test-lazy-init-name-hash.c
index b99a370..cd1b4c9 100644
--- a/t/helper/test-lazy-init-name-hash.c
+++ b/t/helper/test-lazy-init-name-hash.c
@@ -41,17 +41,13 @@
 			die("non-threaded code path used");
 	}
 
-	dir = hashmap_iter_first(&the_index.dir_hash, &iter_dir);
-	while (dir) {
+	hashmap_for_each_entry(&the_index.dir_hash, &iter_dir, dir,
+				ent /* member name */)
 		printf("dir %08x %7d %s\n", dir->ent.hash, dir->nr, dir->name);
-		dir = hashmap_iter_next(&iter_dir);
-	}
 
-	ce = hashmap_iter_first(&the_index.name_hash, &iter_cache);
-	while (ce) {
+	hashmap_for_each_entry(&the_index.name_hash, &iter_cache, ce,
+				ent /* member name */)
 		printf("name %08x %s\n", ce->ent.hash, ce->name);
-		ce = hashmap_iter_next(&iter_cache);
-	}
 
 	discard_cache();
 }
diff --git a/t/helper/test-progress.c b/t/helper/test-progress.c
new file mode 100644
index 0000000..42b96cb
--- /dev/null
+++ b/t/helper/test-progress.c
@@ -0,0 +1,81 @@
+/*
+ * A test helper to exercise the progress display.
+ *
+ * Reads instructions from standard input, one instruction per line:
+ *
+ *   "progress <items>" - Call display_progress() with the given item count
+ *                        as parameter.
+ *   "throughput <bytes> <millis> - Call display_throughput() with the given
+ *                                  byte count as parameter.  The 'millis'
+ *                                  specify the time elapsed since the
+ *                                  start_progress() call.
+ *   "update" - Set the 'progress_update' flag.
+ *
+ * See 't0500-progress-display.sh' for examples.
+ */
+#include "test-tool.h"
+#include "gettext.h"
+#include "parse-options.h"
+#include "progress.h"
+#include "strbuf.h"
+
+/*
+ * These are defined in 'progress.c', but are not exposed in 'progress.h',
+ * because they are exclusively for testing.
+ */
+extern int progress_testing;
+extern uint64_t progress_test_ns;
+void progress_test_force_update(void);
+
+int cmd__progress(int argc, const char **argv)
+{
+	int total = 0;
+	const char *title;
+	struct strbuf line = STRBUF_INIT;
+	struct progress *progress;
+
+	const char *usage[] = {
+		"test-tool progress [--total=<n>] <progress-title>",
+		NULL
+	};
+	struct option options[] = {
+		OPT_INTEGER(0, "total", &total, "total number of items"),
+		OPT_END(),
+	};
+
+	argc = parse_options(argc, argv, NULL, options, usage, 0);
+	if (argc != 1)
+		die("need a title for the progress output");
+	title = argv[0];
+
+	progress_testing = 1;
+	progress = start_progress(title, total);
+	while (strbuf_getline(&line, stdin) != EOF) {
+		char *end;
+
+		if (skip_prefix(line.buf, "progress ", (const char **) &end)) {
+			uint64_t item_count = strtoull(end, &end, 10);
+			if (*end != '\0')
+				die("invalid input: '%s'\n", line.buf);
+			display_progress(progress, item_count);
+		} else if (skip_prefix(line.buf, "throughput ",
+				       (const char **) &end)) {
+			uint64_t byte_count, test_ms;
+
+			byte_count = strtoull(end, &end, 10);
+			if (*end != ' ')
+				die("invalid input: '%s'\n", line.buf);
+			test_ms = strtoull(end + 1, &end, 10);
+			if (*end != '\0')
+				die("invalid input: '%s'\n", line.buf);
+			progress_test_ns = test_ms * 1000 * 1000;
+			display_throughput(progress, byte_count);
+		} else if (!strcmp(line.buf, "update"))
+			progress_test_force_update();
+		else
+			die("invalid input: '%s'\n", line.buf);
+	}
+	stop_progress(&progress);
+
+	return 0;
+}
diff --git a/t/helper/test-read-cache.c b/t/helper/test-read-cache.c
index 7e79b55..244977a 100644
--- a/t/helper/test-read-cache.c
+++ b/t/helper/test-read-cache.c
@@ -4,11 +4,10 @@
 
 int cmd__read_cache(int argc, const char **argv)
 {
-	int i, cnt = 1, namelen;
+	int i, cnt = 1;
 	const char *name = NULL;
 
 	if (argc > 1 && skip_prefix(argv[1], "--print-and-refresh=", &name)) {
-		namelen = strlen(name);
 		argc--;
 		argv++;
 	}
@@ -24,7 +23,7 @@
 
 			refresh_index(&the_index, REFRESH_QUIET,
 				      NULL, NULL, NULL);
-			pos = index_name_pos(&the_index, name, namelen);
+			pos = index_name_pos(&the_index, name, strlen(name));
 			if (pos < 0)
 				die("%s not in index", name);
 			printf("%s is%s up to date\n", name,
diff --git a/t/helper/test-run-command.c b/t/helper/test-run-command.c
index 8579b1f..7243289 100644
--- a/t/helper/test-run-command.c
+++ b/t/helper/test-run-command.c
@@ -10,9 +10,14 @@
 
 #include "test-tool.h"
 #include "git-compat-util.h"
+#include "cache.h"
 #include "run-command.h"
 #include "argv-array.h"
 #include "strbuf.h"
+#include "parse-options.h"
+#include "string-list.h"
+#include "thread-utils.h"
+#include "wildmatch.h"
 #include "gettext.h"
 #include "parse-options.h"
 
@@ -50,6 +55,151 @@
 	return 1;
 }
 
+struct testsuite {
+	struct string_list tests, failed;
+	int next;
+	int quiet, immediate, verbose, verbose_log, trace, write_junit_xml;
+};
+#define TESTSUITE_INIT \
+	{ STRING_LIST_INIT_DUP, STRING_LIST_INIT_DUP, -1, 0, 0, 0, 0, 0, 0 }
+
+static int next_test(struct child_process *cp, struct strbuf *err, void *cb,
+		     void **task_cb)
+{
+	struct testsuite *suite = cb;
+	const char *test;
+	if (suite->next >= suite->tests.nr)
+		return 0;
+
+	test = suite->tests.items[suite->next++].string;
+	argv_array_pushl(&cp->args, "sh", test, NULL);
+	if (suite->quiet)
+		argv_array_push(&cp->args, "--quiet");
+	if (suite->immediate)
+		argv_array_push(&cp->args, "-i");
+	if (suite->verbose)
+		argv_array_push(&cp->args, "-v");
+	if (suite->verbose_log)
+		argv_array_push(&cp->args, "-V");
+	if (suite->trace)
+		argv_array_push(&cp->args, "-x");
+	if (suite->write_junit_xml)
+		argv_array_push(&cp->args, "--write-junit-xml");
+
+	strbuf_addf(err, "Output of '%s':\n", test);
+	*task_cb = (void *)test;
+
+	return 1;
+}
+
+static int test_finished(int result, struct strbuf *err, void *cb,
+			 void *task_cb)
+{
+	struct testsuite *suite = cb;
+	const char *name = (const char *)task_cb;
+
+	if (result)
+		string_list_append(&suite->failed, name);
+
+	strbuf_addf(err, "%s: '%s'\n", result ? "FAIL" : "SUCCESS", name);
+
+	return 0;
+}
+
+static int test_failed(struct strbuf *out, void *cb, void *task_cb)
+{
+	struct testsuite *suite = cb;
+	const char *name = (const char *)task_cb;
+
+	string_list_append(&suite->failed, name);
+	strbuf_addf(out, "FAILED TO START: '%s'\n", name);
+
+	return 0;
+}
+
+static const char * const testsuite_usage[] = {
+	"test-run-command testsuite [<options>] [<pattern>...]",
+	NULL
+};
+
+static int testsuite(int argc, const char **argv)
+{
+	struct testsuite suite = TESTSUITE_INIT;
+	int max_jobs = 1, i, ret;
+	DIR *dir;
+	struct dirent *d;
+	struct option options[] = {
+		OPT_BOOL('i', "immediate", &suite.immediate,
+			 "stop at first failed test case(s)"),
+		OPT_INTEGER('j', "jobs", &max_jobs, "run <N> jobs in parallel"),
+		OPT_BOOL('q', "quiet", &suite.quiet, "be terse"),
+		OPT_BOOL('v', "verbose", &suite.verbose, "be verbose"),
+		OPT_BOOL('V', "verbose-log", &suite.verbose_log,
+			 "be verbose, redirected to a file"),
+		OPT_BOOL('x', "trace", &suite.trace, "trace shell commands"),
+		OPT_BOOL(0, "write-junit-xml", &suite.write_junit_xml,
+			 "write JUnit-style XML files"),
+		OPT_END()
+	};
+
+	memset(&suite, 0, sizeof(suite));
+	suite.tests.strdup_strings = suite.failed.strdup_strings = 1;
+
+	argc = parse_options(argc, argv, NULL, options,
+			testsuite_usage, PARSE_OPT_STOP_AT_NON_OPTION);
+
+	if (max_jobs <= 0)
+		max_jobs = online_cpus();
+
+	dir = opendir(".");
+	if (!dir)
+		die("Could not open the current directory");
+	while ((d = readdir(dir))) {
+		const char *p = d->d_name;
+
+		if (*p != 't' || !isdigit(p[1]) || !isdigit(p[2]) ||
+		    !isdigit(p[3]) || !isdigit(p[4]) || p[5] != '-' ||
+		    !ends_with(p, ".sh"))
+			continue;
+
+		/* No pattern: match all */
+		if (!argc) {
+			string_list_append(&suite.tests, p);
+			continue;
+		}
+
+		for (i = 0; i < argc; i++)
+			if (!wildmatch(argv[i], p, 0)) {
+				string_list_append(&suite.tests, p);
+				break;
+			}
+	}
+	closedir(dir);
+
+	if (!suite.tests.nr)
+		die("No tests match!");
+	if (max_jobs > suite.tests.nr)
+		max_jobs = suite.tests.nr;
+
+	fprintf(stderr, "Running %d tests (%d at a time)\n",
+		suite.tests.nr, max_jobs);
+
+	ret = run_processes_parallel(max_jobs, next_test, test_failed,
+				     test_finished, &suite);
+
+	if (suite.failed.nr > 0) {
+		ret = 1;
+		fprintf(stderr, "%d tests failed:\n\n", suite.failed.nr);
+		for (i = 0; i < suite.failed.nr; i++)
+			fprintf(stderr, "\t%s\n", suite.failed.items[i].string);
+	}
+
+	string_list_clear(&suite.tests, 0);
+	string_list_clear(&suite.failed, 0);
+
+	return !!ret;
+}
+
 static uint64_t my_random_next = 1234;
 
 static uint64_t my_random(void)
@@ -183,6 +333,9 @@
 	struct child_process proc = CHILD_PROCESS_INIT;
 	int jobs;
 
+	if (argc > 1 && !strcmp(argv[1], "testsuite"))
+		exit(testsuite(argc - 1, argv + 1));
+
 	if (argc >= 2 && !strcmp(argv[1], "quote-stress-test"))
 		return !!quote_stress_test(argc - 1, argv + 1);
 
diff --git a/t/helper/test-tool.c b/t/helper/test-tool.c
index ce7e890..19ee26d 100644
--- a/t/helper/test-tool.c
+++ b/t/helper/test-tool.c
@@ -42,6 +42,7 @@
 	{ "path-utils", cmd__path_utils },
 	{ "pkt-line", cmd__pkt_line },
 	{ "prio-queue", cmd__prio_queue },
+	{ "progress", cmd__progress },
 	{ "reach", cmd__reach },
 	{ "read-cache", cmd__read_cache },
 	{ "read-midx", cmd__read_midx },
diff --git a/t/helper/test-tool.h b/t/helper/test-tool.h
index f805bb3..c2aa56e 100644
--- a/t/helper/test-tool.h
+++ b/t/helper/test-tool.h
@@ -32,6 +32,7 @@
 int cmd__path_utils(int argc, const char **argv);
 int cmd__pkt_line(int argc, const char **argv);
 int cmd__prio_queue(int argc, const char **argv);
+int cmd__progress(int argc, const char **argv);
 int cmd__reach(int argc, const char **argv);
 int cmd__read_cache(int argc, const char **argv);
 int cmd__read_midx(int argc, const char **argv);
diff --git a/t/lib-git-svn.sh b/t/lib-git-svn.sh
index 5d4ae62..bc0b9c7 100644
--- a/t/lib-git-svn.sh
+++ b/t/lib-git-svn.sh
@@ -69,7 +69,7 @@
 maybe_start_httpd () {
 	loc=${1-svn}
 
-	if git env--helper --type=bool --default=false --exit-code GIT_TEST_HTTPD
+	if git env--helper --type=bool --default=false --exit-code GIT_TEST_SVN_HTTPD
 	then
 		. "$TEST_DIRECTORY"/lib-httpd.sh
 		LIB_HTTPD_SVN="$loc"
diff --git a/t/lib-rebase.sh b/t/lib-rebase.sh
index 7ea30e5..6d87961 100644
--- a/t/lib-rebase.sh
+++ b/t/lib-rebase.sh
@@ -44,10 +44,10 @@
 	rm -f "$1"
 	echo 'rebase -i script before editing:'
 	cat "$1".tmp
-	action=pick
+	action=\&
 	for line in $FAKE_LINES; do
 		case $line in
-		pick|p|squash|s|fixup|f|edit|e|reword|r|drop|d)
+		pick|p|squash|s|fixup|f|edit|e|reword|r|drop|d|label|l|reset|r|merge|m)
 			action="$line";;
 		exec_*|x_*|break|b)
 			echo "$line" | sed 's/_/ /g' >> "$1";;
@@ -58,11 +58,12 @@
 		bad)
 			action="badcmd";;
 		fakesha)
+			test \& != "$action" || action=pick
 			echo "$action XXXXXXX False commit" >> "$1"
 			action=pick;;
 		*)
-			sed -n "${line}s/^pick/$action/p" < "$1".tmp >> "$1"
-			action=pick;;
+			sed -n "${line}s/^[a-z][a-z]*/$action/p" < "$1".tmp >> "$1"
+			action=\&;;
 		esac
 	done
 	echo 'rebase -i script after editing:'
diff --git a/t/perf/p5600-clone-reference.sh b/t/perf/p5601-clone-reference.sh
similarity index 100%
rename from t/perf/p5600-clone-reference.sh
rename to t/perf/p5601-clone-reference.sh
diff --git a/t/t0000-basic.sh b/t/t0000-basic.sh
index 9ca0818..4d3f7ba 100755
--- a/t/t0000-basic.sh
+++ b/t/t0000-basic.sh
@@ -274,23 +274,23 @@
 
 test_expect_success C_LOCALE_OUTPUT 'test --verbose' '
 	test_must_fail run_sub_test_lib_test \
-		test-verbose "test verbose" --verbose <<-\EOF &&
+		t1234-verbose "test verbose" --verbose <<-\EOF &&
 	test_expect_success "passing test" true
 	test_expect_success "test with output" "echo foo"
 	test_expect_success "failing test" false
 	test_done
 	EOF
-	mv test-verbose/out test-verbose/out+ &&
-	grep -v "^Initialized empty" test-verbose/out+ >test-verbose/out &&
-	check_sub_test_lib_test test-verbose <<-\EOF
-	> expecting success: true
+	mv t1234-verbose/out t1234-verbose/out+ &&
+	grep -v "^Initialized empty" t1234-verbose/out+ >t1234-verbose/out &&
+	check_sub_test_lib_test t1234-verbose <<-\EOF
+	> expecting success of 1234.1 '\''passing test'\'': true
 	> ok 1 - passing test
 	> Z
-	> expecting success: echo foo
+	> expecting success of 1234.2 '\''test with output'\'': echo foo
 	> foo
 	> ok 2 - test with output
 	> Z
-	> expecting success: false
+	> expecting success of 1234.3 '\''failing test'\'': false
 	> not ok 3 - failing test
 	> #	false
 	> Z
@@ -301,17 +301,17 @@
 
 test_expect_success 'test --verbose-only' '
 	test_must_fail run_sub_test_lib_test \
-		test-verbose-only-2 "test verbose-only=2" \
+		t2345-verbose-only-2 "test verbose-only=2" \
 		--verbose-only=2 <<-\EOF &&
 	test_expect_success "passing test" true
 	test_expect_success "test with output" "echo foo"
 	test_expect_success "failing test" false
 	test_done
 	EOF
-	check_sub_test_lib_test test-verbose-only-2 <<-\EOF
+	check_sub_test_lib_test t2345-verbose-only-2 <<-\EOF
 	> ok 1 - passing test
 	> Z
-	> expecting success: echo foo
+	> expecting success of 2345.2 '\''test with output'\'': echo foo
 	> foo
 	> ok 2 - test with output
 	> Z
@@ -391,6 +391,44 @@
 	)
 "
 
+test_expect_success 'GIT_SKIP_TESTS entire suite' "
+	(
+		GIT_SKIP_TESTS='git' && export GIT_SKIP_TESTS &&
+		run_sub_test_lib_test git-skip-tests-entire-suite \
+			'GIT_SKIP_TESTS entire suite' <<-\\EOF &&
+		for i in 1 2 3
+		do
+			test_expect_success \"passing test #\$i\" 'true'
+		done
+		test_done
+		EOF
+		check_sub_test_lib_test git-skip-tests-entire-suite <<-\\EOF
+		> 1..0 # SKIP skip all tests in git
+		EOF
+	)
+"
+
+test_expect_success 'GIT_SKIP_TESTS does not skip unmatched suite' "
+	(
+		GIT_SKIP_TESTS='notgit' && export GIT_SKIP_TESTS &&
+		run_sub_test_lib_test git-skip-tests-unmatched-suite \
+			'GIT_SKIP_TESTS does not skip unmatched suite' <<-\\EOF &&
+		for i in 1 2 3
+		do
+			test_expect_success \"passing test #\$i\" 'true'
+		done
+		test_done
+		EOF
+		check_sub_test_lib_test git-skip-tests-unmatched-suite <<-\\EOF
+		> ok 1 - passing test #1
+		> ok 2 - passing test #2
+		> ok 3 - passing test #3
+		> # passed all 3 test(s)
+		> 1..3
+		EOF
+	)
+"
+
 test_expect_success '--run basic' "
 	run_sub_test_lib_test run-basic \
 		'--run basic' --run='1 3 5' <<-\\EOF &&
diff --git a/t/t0014-alias.sh b/t/t0014-alias.sh
index a070e64..2694c81 100755
--- a/t/t0014-alias.sh
+++ b/t/t0014-alias.sh
@@ -37,4 +37,11 @@
 #	test_i18ngrep "^fatal: alias loop detected: expansion of" output
 #'
 
+test_expect_success 'run-command formats empty args properly' '
+    GIT_TRACE=1 git frotz a "" b " " c 2>&1 |
+    sed -ne "/run_command:/s/.*trace: run_command: //p" >actual &&
+    echo "git-frotz a '\'''\'' b '\'' '\'' c" >expect &&
+    test_cmp expect actual
+'
+
 test_done
diff --git a/t/t0021-conversion.sh b/t/t0021-conversion.sh
index e10f5f7..c954c70 100755
--- a/t/t0021-conversion.sh
+++ b/t/t0021-conversion.sh
@@ -390,6 +390,9 @@
 		EOF
 		test_cmp_exclude_clean expected.log debug.log &&
 
+		# Make sure that the file appears dirty, so checkout below has to
+		# run the configured filter.
+		touch test.r &&
 		filter_git checkout --quiet --no-progress empty-branch &&
 		cat >expected.log <<-EOF &&
 			START
diff --git a/t/t0028-working-tree-encoding.sh b/t/t0028-working-tree-encoding.sh
index 1090e65..7aa0945 100755
--- a/t/t0028-working-tree-encoding.sh
+++ b/t/t0028-working-tree-encoding.sh
@@ -40,7 +40,7 @@
 	printf "$text" | write_utf16 >test.utf16.raw &&
 	printf "$text" | write_utf32 >test.utf32.raw &&
 	printf "\377\376"                         >test.utf16lebom.raw &&
-	printf "$text" | iconv -f UTF-8 -t UTF-32LE >>test.utf16lebom.raw &&
+	printf "$text" | iconv -f UTF-8 -t UTF-16LE >>test.utf16lebom.raw &&
 
 	# Line ending tests
 	printf "one\ntwo\nthree\n" >lf.utf8.raw &&
@@ -280,4 +280,43 @@
 	git reset
 '
 
+# $1: checkout encoding
+# $2: test string
+# $3: binary test string in checkout encoding
+test_commit_utf8_checkout_other () {
+	encoding="$1"
+	orig_string="$2"
+	expect_bytes="$3"
+
+	test_expect_success "Commit UTF-8, checkout $encoding" '
+		test_when_finished "git checkout HEAD -- .gitattributes" &&
+
+		test_ext="commit_utf8_checkout_$encoding" &&
+		test_file="test.$test_ext" &&
+
+		# Commit as UTF-8
+		echo "*.$test_ext text working-tree-encoding=UTF-8" >.gitattributes &&
+		printf "$orig_string" >$test_file &&
+		git add $test_file &&
+		git commit -m "Test data" &&
+
+		# Checkout in tested encoding
+		rm $test_file &&
+		echo "*.$test_ext text working-tree-encoding=$encoding" >.gitattributes &&
+		git checkout HEAD -- $test_file &&
+
+		# Test
+		printf $expect_bytes >$test_file.raw &&
+		test_cmp_bin $test_file.raw $test_file
+	'
+}
+
+test_commit_utf8_checkout_other "UTF-8"        "Test Тест" "\124\145\163\164\040\320\242\320\265\321\201\321\202"
+test_commit_utf8_checkout_other "UTF-16LE"     "Test Тест" "\124\000\145\000\163\000\164\000\040\000\042\004\065\004\101\004\102\004"
+test_commit_utf8_checkout_other "UTF-16BE"     "Test Тест" "\000\124\000\145\000\163\000\164\000\040\004\042\004\065\004\101\004\102"
+test_commit_utf8_checkout_other "UTF-16LE-BOM" "Test Тест" "\377\376\124\000\145\000\163\000\164\000\040\000\042\004\065\004\101\004\102\004"
+test_commit_utf8_checkout_other "UTF-16BE-BOM" "Test Тест" "\376\377\000\124\000\145\000\163\000\164\000\040\004\042\004\065\004\101\004\102"
+test_commit_utf8_checkout_other "UTF-32LE"     "Test Тест" "\124\000\000\000\145\000\000\000\163\000\000\000\164\000\000\000\040\000\000\000\042\004\000\000\065\004\000\000\101\004\000\000\102\004\000\000"
+test_commit_utf8_checkout_other "UTF-32BE"     "Test Тест" "\000\000\000\124\000\000\000\145\000\000\000\163\000\000\000\164\000\000\000\040\000\000\004\042\000\000\004\065\000\000\004\101\000\000\004\102"
+
 test_done
diff --git a/t/t0040-parse-options.sh b/t/t0040-parse-options.sh
index cebc77f..705a136 100755
--- a/t/t0040-parse-options.sh
+++ b/t/t0040-parse-options.sh
@@ -399,4 +399,11 @@
 		test-tool parse-options --ye
 '
 
+test_expect_success '--end-of-options treats remainder as args' '
+	test-tool parse-options \
+	    --expect="verbose: -1" \
+	    --expect="arg 00: --verbose" \
+	    --end-of-options --verbose
+'
+
 test_done
diff --git a/t/t0050-filesystem.sh b/t/t0050-filesystem.sh
index 192c94e..608673f 100755
--- a/t/t0050-filesystem.sh
+++ b/t/t0050-filesystem.sh
@@ -131,4 +131,24 @@
 	git merge topic
 '
 
+test_expect_success CASE_INSENSITIVE_FS 'checkout with no pathspec and a case insensitive fs' '
+	git init repo &&
+	(
+		cd repo &&
+
+		>Gitweb &&
+		git add Gitweb &&
+		git commit -m "add Gitweb" &&
+
+		git checkout --orphan todo &&
+		git reset --hard &&
+		mkdir -p gitweb/subdir &&
+		>gitweb/subdir/file &&
+		git add gitweb &&
+		git commit -m "add gitweb/subdir/file" &&
+
+		git checkout master
+	)
+'
+
 test_done
diff --git a/t/t0061-run-command.sh b/t/t0061-run-command.sh
index 015fac8..17c9c0f 100755
--- a/t/t0061-run-command.sh
+++ b/t/t0061-run-command.sh
@@ -210,10 +210,23 @@
 	test_cmp expect actual
 '
 
-test_expect_success MINGW 'can spawn with argv[0] containing spaces' '
-	cp "$GIT_BUILD_DIR/t/helper/test-fake-ssh$X" ./ &&
-	test_must_fail "$PWD/test-fake-ssh$X" 2>err &&
-	grep TRASH_DIRECTORY err
+test_expect_success MINGW 'can spawn .bat with argv[0] containing spaces' '
+	bat="$TRASH_DIRECTORY/bat with spaces in name.bat" &&
+
+	# Every .bat invocation will log its arguments to file "out"
+	rm -f out &&
+	echo "echo %* >>out" >"$bat" &&
+
+	# Ask git to invoke .bat; clone will fail due to fake SSH helper
+	test_must_fail env GIT_SSH="$bat" git clone myhost:src ssh-clone &&
+
+	# Spawning .bat can fail if there are two quoted cmd.exe arguments.
+	# .bat itself is first (due to spaces in name), so just one more is
+	# needed to verify. GIT_SSH will invoke .bat multiple times:
+	# 1) -G myhost
+	# 2) myhost "git-upload-pack src"
+	# First invocation will always succeed. Test the second one.
+	grep "git-upload-pack" out
 '
 
 test_done
diff --git a/t/t0211-trace2-perf.sh b/t/t0211-trace2-perf.sh
index 2c3ad6e..6ee8ee3 100755
--- a/t/t0211-trace2-perf.sh
+++ b/t/t0211-trace2-perf.sh
@@ -130,11 +130,11 @@
 		d0|main|version|||||$V
 		d0|main|start||_T_ABS_|||_EXE_ trace2 004child test-tool trace2 004child test-tool trace2 001return 0
 		d0|main|cmd_name|||||trace2 (trace2)
-		d0|main|child_start||_T_ABS_|||[ch0] class:? argv: test-tool trace2 004child test-tool trace2 001return 0
+		d0|main|child_start||_T_ABS_|||[ch0] class:? argv:[test-tool trace2 004child test-tool trace2 001return 0]
 		d1|main|version|||||$V
 		d1|main|start||_T_ABS_|||_EXE_ trace2 004child test-tool trace2 001return 0
 		d1|main|cmd_name|||||trace2 (trace2/trace2)
-		d1|main|child_start||_T_ABS_|||[ch0] class:? argv: test-tool trace2 001return 0
+		d1|main|child_start||_T_ABS_|||[ch0] class:? argv:[test-tool trace2 001return 0]
 		d2|main|version|||||$V
 		d2|main|start||_T_ABS_|||_EXE_ trace2 001return 0
 		d2|main|cmd_name|||||trace2 (trace2/trace2/trace2)
diff --git a/t/t0212-trace2-event.sh b/t/t0212-trace2-event.sh
index ff5b9cc..7065a1b 100755
--- a/t/t0212-trace2-event.sh
+++ b/t/t0212-trace2-event.sh
@@ -265,4 +265,23 @@
 	test_cmp expect actual
 '
 
+test_expect_success 'discard traces when there are too many files' '
+	mkdir trace_target_dir &&
+	test_when_finished "rm -r trace_target_dir" &&
+	(
+		GIT_TRACE2_MAX_FILES=5 &&
+		export GIT_TRACE2_MAX_FILES &&
+		cd trace_target_dir &&
+		test_seq $GIT_TRACE2_MAX_FILES >../expected_filenames.txt &&
+		xargs touch <../expected_filenames.txt &&
+		cd .. &&
+		GIT_TRACE2_EVENT="$(pwd)/trace_target_dir" test-tool trace2 001return 0
+	) &&
+	echo git-trace2-discard >>expected_filenames.txt &&
+	ls trace_target_dir >ls_output.txt &&
+	test_cmp expected_filenames.txt ls_output.txt &&
+	head -n1 trace_target_dir/git-trace2-discard | grep \"event\":\"version\" &&
+	head -n2 trace_target_dir/git-trace2-discard | tail -n1 | grep \"event\":\"too_many_files\"
+'
+
 test_done
diff --git a/t/t0410-partial-clone.sh b/t/t0410-partial-clone.sh
index 5bd892f..a3988bd 100755
--- a/t/t0410-partial-clone.sh
+++ b/t/t0410-partial-clone.sh
@@ -26,7 +26,7 @@
 test_expect_success 'extensions.partialclone without filter' '
 	test_create_repo server &&
 	git clone --filter="blob:none" "file://$(pwd)/server" client &&
-	git -C client config --unset core.partialclonefilter &&
+	git -C client config --unset remote.origin.partialclonefilter &&
 	git -C client fetch origin
 '
 
@@ -166,8 +166,9 @@
 	# associated packfile contains the object
 	ls repo/.git/objects/pack/pack-*.promisor >promisorlist &&
 	test_line_count = 1 promisorlist &&
-	IDX=$(cat promisorlist | sed "s/promisor$/idx/") &&
-	git verify-pack --verbose "$IDX" | grep "$HASH"
+	IDX=$(sed "s/promisor$/idx/" promisorlist) &&
+	git verify-pack --verbose "$IDX" >out &&
+	grep "$HASH" out
 '
 
 test_expect_success 'fetching of missing objects works with ref-in-want enabled' '
@@ -182,8 +183,55 @@
 	grep "git< fetch=.*ref-in-want" trace
 '
 
+test_expect_success 'fetching of missing objects from another promisor remote' '
+	git clone "file://$(pwd)/server" server2 &&
+	test_commit -C server2 bar &&
+	git -C server2 repack -a -d --write-bitmap-index &&
+	HASH2=$(git -C server2 rev-parse bar) &&
+
+	git -C repo remote add server2 "file://$(pwd)/server2" &&
+	git -C repo config remote.server2.promisor true &&
+	git -C repo cat-file -p "$HASH2" &&
+
+	git -C repo fetch server2 &&
+	rm -rf repo/.git/objects/* &&
+	git -C repo cat-file -p "$HASH2" &&
+
+	# Ensure that the .promisor file is written, and check that its
+	# associated packfile contains the object
+	ls repo/.git/objects/pack/pack-*.promisor >promisorlist &&
+	test_line_count = 1 promisorlist &&
+	IDX=$(sed "s/promisor$/idx/" promisorlist) &&
+	git verify-pack --verbose "$IDX" >out &&
+	grep "$HASH2" out
+'
+
+test_expect_success 'fetching of missing objects configures a promisor remote' '
+	git clone "file://$(pwd)/server" server3 &&
+	test_commit -C server3 baz &&
+	git -C server3 repack -a -d --write-bitmap-index &&
+	HASH3=$(git -C server3 rev-parse baz) &&
+	git -C server3 config uploadpack.allowfilter 1 &&
+
+	rm repo/.git/objects/pack/pack-*.promisor &&
+
+	git -C repo remote add server3 "file://$(pwd)/server3" &&
+	git -C repo fetch --filter="blob:none" server3 $HASH3 &&
+
+	test_cmp_config -C repo true remote.server3.promisor &&
+
+	# Ensure that the .promisor file is written, and check that its
+	# associated packfile contains the object
+	ls repo/.git/objects/pack/pack-*.promisor >promisorlist &&
+	test_line_count = 1 promisorlist &&
+	IDX=$(sed "s/promisor$/idx/" promisorlist) &&
+	git verify-pack --verbose "$IDX" >out &&
+	grep "$HASH3" out
+'
+
 test_expect_success 'fetching of missing blobs works' '
-	rm -rf server repo &&
+	rm -rf server server2 repo &&
+	rm -rf server server3 repo &&
 	test_create_repo server &&
 	test_commit -C server foo &&
 	git -C server repack -a -d --write-bitmap-index &&
@@ -234,7 +282,7 @@
 
 	git -C repo config core.repositoryformatversion 1 &&
 	git -C repo config extensions.partialclone "arbitrary string" &&
-	GIT_TEST_COMMIT_GRAPH=0 git -C repo rev-list --exclude-promisor-objects --objects bar >out &&
+	GIT_TEST_COMMIT_GRAPH=0 git -C repo -c core.commitGraph=false rev-list --exclude-promisor-objects --objects bar >out &&
 	grep $(git -C repo rev-parse bar) out &&
 	! grep $FOO out
 '
@@ -381,6 +429,19 @@
 	done
 '
 
+test_expect_success 'single promisor remote can be re-initialized gracefully' '
+	# ensure one promisor is in the promisors list
+	rm -rf repo &&
+	test_create_repo repo &&
+	test_create_repo other &&
+	git -C repo remote add foo "file://$(pwd)/other" &&
+	git -C repo config remote.foo.promisor true &&
+	git -C repo config extensions.partialclone foo &&
+
+	# reinitialize the promisors list
+	git -C repo fetch --filter=blob:none foo
+'
+
 test_expect_success 'gc repacks promisor objects separately from non-promisor objects' '
 	rm -rf repo &&
 	test_create_repo repo &&
@@ -492,6 +553,20 @@
 	! grep "$TREE_HASH" out
 '
 
+test_expect_success 'do not fetch when checking existence of tree we construct ourselves' '
+	rm -rf repo &&
+	test_create_repo repo &&
+	test_commit -C repo base &&
+	test_commit -C repo side1 &&
+	git -C repo checkout base &&
+	test_commit -C repo side2 &&
+
+	git -C repo config core.repositoryformatversion 1 &&
+	git -C repo config extensions.partialclone "arbitrary string" &&
+
+	git -C repo cherry-pick side1
+'
+
 . "$TEST_DIRECTORY"/lib-httpd.sh
 start_httpd
 
@@ -514,8 +589,12 @@
 	# associated packfile contains the object
 	ls repo/.git/objects/pack/pack-*.promisor >promisorlist &&
 	test_line_count = 1 promisorlist &&
-	IDX=$(cat promisorlist | sed "s/promisor$/idx/") &&
-	git verify-pack --verbose "$IDX" | grep "$HASH"
+	IDX=$(sed "s/promisor$/idx/" promisorlist) &&
+	git verify-pack --verbose "$IDX" >out &&
+	grep "$HASH" out
 '
 
+# DO NOT add non-httpd-specific tests here, because the last part of this
+# test script is only executed when httpd is available and enabled.
+
 test_done
diff --git a/t/t0500-progress-display.sh b/t/t0500-progress-display.sh
new file mode 100755
index 0000000..24ccbd8
--- /dev/null
+++ b/t/t0500-progress-display.sh
@@ -0,0 +1,286 @@
+#!/bin/sh
+
+test_description='progress display'
+
+. ./test-lib.sh
+
+show_cr () {
+	tr '\015' Q | sed -e "s/Q/<CR>\\$LF/g"
+}
+
+test_expect_success 'simple progress display' '
+	cat >expect <<-\EOF &&
+	Working hard: 1<CR>
+	Working hard: 2<CR>
+	Working hard: 5<CR>
+	Working hard: 5, done.
+	EOF
+
+	cat >in <<-\EOF &&
+	update
+	progress 1
+	update
+	progress 2
+	progress 3
+	progress 4
+	update
+	progress 5
+	EOF
+	test-tool progress "Working hard" <in 2>stderr &&
+
+	show_cr <stderr >out &&
+	test_i18ncmp expect out
+'
+
+test_expect_success 'progress display with total' '
+	cat >expect <<-\EOF &&
+	Working hard:  33% (1/3)<CR>
+	Working hard:  66% (2/3)<CR>
+	Working hard: 100% (3/3)<CR>
+	Working hard: 100% (3/3), done.
+	EOF
+
+	cat >in <<-\EOF &&
+	progress 1
+	progress 2
+	progress 3
+	EOF
+	test-tool progress --total=3 "Working hard" <in 2>stderr &&
+
+	show_cr <stderr >out &&
+	test_i18ncmp expect out
+'
+
+test_expect_success 'progress display breaks long lines #1' '
+	sed -e "s/Z$//" >expect <<\EOF &&
+Working hard.......2.........3.........4.........5.........6:   0% (100/100000)<CR>
+Working hard.......2.........3.........4.........5.........6:   1% (1000/100000)<CR>
+Working hard.......2.........3.........4.........5.........6:                   Z
+   10% (10000/100000)<CR>
+  100% (100000/100000)<CR>
+  100% (100000/100000), done.
+EOF
+
+	cat >in <<-\EOF &&
+	progress 100
+	progress 1000
+	progress 10000
+	progress 100000
+	EOF
+	test-tool progress --total=100000 \
+		"Working hard.......2.........3.........4.........5.........6" \
+		<in 2>stderr &&
+
+	show_cr <stderr >out &&
+	test_i18ncmp expect out
+'
+
+test_expect_success 'progress display breaks long lines #2' '
+	# Note: we dont need that many spaces after the title to cover up
+	# the last line before breaking the progress line.
+	sed -e "s/Z$//" >expect <<\EOF &&
+Working hard.......2.........3.........4.........5.........6:   0% (1/100000)<CR>
+Working hard.......2.........3.........4.........5.........6:   0% (2/100000)<CR>
+Working hard.......2.........3.........4.........5.........6:                   Z
+   10% (10000/100000)<CR>
+  100% (100000/100000)<CR>
+  100% (100000/100000), done.
+EOF
+
+	cat >in <<-\EOF &&
+	update
+	progress 1
+	update
+	progress 2
+	progress 10000
+	progress 100000
+	EOF
+	test-tool progress --total=100000 \
+		"Working hard.......2.........3.........4.........5.........6" \
+		<in 2>stderr &&
+
+	show_cr <stderr >out &&
+	test_i18ncmp expect out
+'
+
+test_expect_success 'progress display breaks long lines #3 - even the first is too long' '
+	# Note: we dont actually need any spaces at the end of the title
+	# line, because there is no previous progress line to cover up.
+	sed -e "s/Z$//" >expect <<\EOF &&
+Working hard.......2.........3.........4.........5.........6:                   Z
+   25% (25000/100000)<CR>
+   50% (50000/100000)<CR>
+   75% (75000/100000)<CR>
+  100% (100000/100000)<CR>
+  100% (100000/100000), done.
+EOF
+
+	cat >in <<-\EOF &&
+	progress 25000
+	progress 50000
+	progress 75000
+	progress 100000
+	EOF
+	test-tool progress --total=100000 \
+		"Working hard.......2.........3.........4.........5.........6" \
+		<in 2>stderr &&
+
+	show_cr <stderr >out &&
+	test_i18ncmp expect out
+'
+
+test_expect_success 'progress display breaks long lines #4 - title line matches terminal width' '
+	cat >expect <<\EOF &&
+Working hard.......2.........3.........4.........5.........6.........7.........:
+   25% (25000/100000)<CR>
+   50% (50000/100000)<CR>
+   75% (75000/100000)<CR>
+  100% (100000/100000)<CR>
+  100% (100000/100000), done.
+EOF
+
+	cat >in <<-\EOF &&
+	progress 25000
+	progress 50000
+	progress 75000
+	progress 100000
+	EOF
+	test-tool progress --total=100000 \
+		"Working hard.......2.........3.........4.........5.........6.........7........." \
+		<in 2>stderr &&
+
+	show_cr <stderr >out &&
+	test_i18ncmp expect out
+'
+
+# Progress counter goes backwards, this should not happen in practice.
+test_expect_success 'progress shortens - crazy caller' '
+	cat >expect <<-\EOF &&
+	Working hard:  10% (100/1000)<CR>
+	Working hard:  20% (200/1000)<CR>
+	Working hard:   0% (1/1000)  <CR>
+	Working hard: 100% (1000/1000)<CR>
+	Working hard: 100% (1000/1000), done.
+	EOF
+
+	cat >in <<-\EOF &&
+	progress 100
+	progress 200
+	progress 1
+	progress 1000
+	EOF
+	test-tool progress --total=1000 "Working hard" <in 2>stderr &&
+
+	show_cr <stderr >out &&
+	test_i18ncmp expect out
+'
+
+test_expect_success 'progress display with throughput' '
+	cat >expect <<-\EOF &&
+	Working hard: 10<CR>
+	Working hard: 20, 200.00 KiB | 100.00 KiB/s<CR>
+	Working hard: 30, 300.00 KiB | 100.00 KiB/s<CR>
+	Working hard: 40, 400.00 KiB | 100.00 KiB/s<CR>
+	Working hard: 40, 400.00 KiB | 100.00 KiB/s, done.
+	EOF
+
+	cat >in <<-\EOF &&
+	throughput 102400 1000
+	update
+	progress 10
+	throughput 204800 2000
+	update
+	progress 20
+	throughput 307200 3000
+	update
+	progress 30
+	throughput 409600 4000
+	update
+	progress 40
+	EOF
+	test-tool progress "Working hard" <in 2>stderr &&
+
+	show_cr <stderr >out &&
+	test_i18ncmp expect out
+'
+
+test_expect_success 'progress display with throughput and total' '
+	cat >expect <<-\EOF &&
+	Working hard:  25% (10/40)<CR>
+	Working hard:  50% (20/40), 200.00 KiB | 100.00 KiB/s<CR>
+	Working hard:  75% (30/40), 300.00 KiB | 100.00 KiB/s<CR>
+	Working hard: 100% (40/40), 400.00 KiB | 100.00 KiB/s<CR>
+	Working hard: 100% (40/40), 400.00 KiB | 100.00 KiB/s, done.
+	EOF
+
+	cat >in <<-\EOF &&
+	throughput 102400 1000
+	progress 10
+	throughput 204800 2000
+	progress 20
+	throughput 307200 3000
+	progress 30
+	throughput 409600 4000
+	progress 40
+	EOF
+	test-tool progress --total=40 "Working hard" <in 2>stderr &&
+
+	show_cr <stderr >out &&
+	test_i18ncmp expect out
+'
+
+test_expect_success 'cover up after throughput shortens' '
+	cat >expect <<-\EOF &&
+	Working hard: 1<CR>
+	Working hard: 2, 800.00 KiB | 400.00 KiB/s<CR>
+	Working hard: 3, 1.17 MiB | 400.00 KiB/s  <CR>
+	Working hard: 4, 1.56 MiB | 400.00 KiB/s<CR>
+	Working hard: 4, 1.56 MiB | 400.00 KiB/s, done.
+	EOF
+
+	cat >in <<-\EOF &&
+	throughput 409600 1000
+	update
+	progress 1
+	throughput 819200 2000
+	update
+	progress 2
+	throughput 1228800 3000
+	update
+	progress 3
+	throughput 1638400 4000
+	update
+	progress 4
+	EOF
+	test-tool progress "Working hard" <in 2>stderr &&
+
+	show_cr <stderr >out &&
+	test_i18ncmp expect out
+'
+
+test_expect_success 'cover up after throughput shortens a lot' '
+	cat >expect <<-\EOF &&
+	Working hard: 1<CR>
+	Working hard: 2, 1000.00 KiB | 1000.00 KiB/s<CR>
+	Working hard: 3, 3.00 MiB | 1.50 MiB/s      <CR>
+	Working hard: 3, 3.00 MiB | 1024.00 KiB/s, done.
+	EOF
+
+	cat >in <<-\EOF &&
+	throughput 1 1000
+	update
+	progress 1
+	throughput 1024000 2000
+	update
+	progress 2
+	throughput 3145728 3000
+	update
+	progress 3
+	EOF
+	test-tool progress "Working hard" <in 2>stderr &&
+
+	show_cr <stderr >out &&
+	test_i18ncmp expect out
+'
+
+test_done
diff --git a/t/t1300-config.sh b/t/t1300-config.sh
index 428177c..983a0a1 100755
--- a/t/t1300-config.sh
+++ b/t/t1300-config.sh
@@ -1294,26 +1294,25 @@
 	GIT_CONFIG_PARAMETERS="" git -c x.one=1 config --list
 '
 
-sq="'"
 test_expect_success 'detect bogus GIT_CONFIG_PARAMETERS' '
 	cat >expect <<-\EOF &&
 	env.one one
 	env.two two
 	EOF
-	GIT_CONFIG_PARAMETERS="${sq}env.one=one${sq} ${sq}env.two=two${sq}" \
+	GIT_CONFIG_PARAMETERS="${SQ}env.one=one${SQ} ${SQ}env.two=two${SQ}" \
 		git config --get-regexp "env.*" >actual &&
 	test_cmp expect actual &&
 
 	cat >expect <<-EOF &&
-	env.one one${sq}
+	env.one one${SQ}
 	env.two two
 	EOF
-	GIT_CONFIG_PARAMETERS="${sq}env.one=one${sq}\\$sq$sq$sq ${sq}env.two=two${sq}" \
+	GIT_CONFIG_PARAMETERS="${SQ}env.one=one${SQ}\\$SQ$SQ$SQ ${SQ}env.two=two${SQ}" \
 		git config --get-regexp "env.*" >actual &&
 	test_cmp expect actual &&
 
 	test_must_fail env \
-		GIT_CONFIG_PARAMETERS="${sq}env.one=one${sq}\\$sq ${sq}env.two=two${sq}" \
+		GIT_CONFIG_PARAMETERS="${SQ}env.one=one${SQ}\\$SQ ${SQ}env.two=two${SQ}" \
 		git config --get-regexp "env.*"
 '
 
diff --git a/t/t1308-config-set.sh b/t/t1308-config-set.sh
index d0a2727..7b4e1a6 100755
--- a/t/t1308-config-set.sh
+++ b/t/t1308-config-set.sh
@@ -166,14 +166,14 @@
 '
 
 test_expect_success 'find value_list for a key from a configset' '
-	cat >except <<-\EOF &&
+	cat >expect <<-\EOF &&
+	lama
+	ball
 	sam
 	bat
 	hask
-	lama
-	ball
 	EOF
-	test-tool config configset_get_value case.baz config2 .git/config >actual &&
+	test-tool config configset_get_value_multi case.baz config2 .git/config >actual &&
 	test_cmp expect actual
 '
 
diff --git a/t/t1309-early-config.sh b/t/t1309-early-config.sh
index 0c37e71..3a0de0d 100755
--- a/t/t1309-early-config.sh
+++ b/t/t1309-early-config.sh
@@ -91,7 +91,12 @@
 
 test_expect_success 'early config and onbranch' '
 	echo "[broken" >broken &&
-	test_with_config "[includeif \"onbranch:refs/heads/master\"]path=../broken"
+	test_with_config "[includeif \"onbranch:master\"]path=../broken"
+'
+
+test_expect_success 'onbranch config outside of git repo' '
+	test_config_global includeIf.onbranch:master.path non-existent &&
+	nongit git help
 '
 
 test_done
diff --git a/t/t1404-update-ref-errors.sh b/t/t1404-update-ref-errors.sh
index 970c5c3..2d142e5 100755
--- a/t/t1404-update-ref-errors.sh
+++ b/t/t1404-update-ref-errors.sh
@@ -32,8 +32,6 @@
 	test_cmp unchanged actual
 }
 
-Q="'"
-
 # Test adding and deleting D/F-conflicting references in a single
 # transaction.
 df_test() {
@@ -93,7 +91,7 @@
 		delname="$delref"
 	fi &&
 	cat >expected-err <<-EOF &&
-	fatal: cannot lock ref $Q$addname$Q: $Q$delref$Q exists; cannot create $Q$addref$Q
+	fatal: cannot lock ref $SQ$addname$SQ: $SQ$delref$SQ exists; cannot create $SQ$addref$SQ
 	EOF
 	$pack &&
 	if $add_del
@@ -123,7 +121,7 @@
 
 	prefix=refs/1l &&
 	test_update_rejected "a c e" false "b c/x d" \
-		"$Q$prefix/c$Q exists; cannot create $Q$prefix/c/x$Q"
+		"$SQ$prefix/c$SQ exists; cannot create $SQ$prefix/c/x$SQ"
 
 '
 
@@ -131,7 +129,7 @@
 
 	prefix=refs/1p &&
 	test_update_rejected "a c e" true "b c/x d" \
-		"$Q$prefix/c$Q exists; cannot create $Q$prefix/c/x$Q"
+		"$SQ$prefix/c$SQ exists; cannot create $SQ$prefix/c/x$SQ"
 
 '
 
@@ -139,7 +137,7 @@
 
 	prefix=refs/2l &&
 	test_update_rejected "a c e" false "b c/x/y d" \
-		"$Q$prefix/c$Q exists; cannot create $Q$prefix/c/x/y$Q"
+		"$SQ$prefix/c$SQ exists; cannot create $SQ$prefix/c/x/y$SQ"
 
 '
 
@@ -147,7 +145,7 @@
 
 	prefix=refs/2p &&
 	test_update_rejected "a c e" true "b c/x/y d" \
-		"$Q$prefix/c$Q exists; cannot create $Q$prefix/c/x/y$Q"
+		"$SQ$prefix/c$SQ exists; cannot create $SQ$prefix/c/x/y$SQ"
 
 '
 
@@ -155,7 +153,7 @@
 
 	prefix=refs/3l &&
 	test_update_rejected "a c/x e" false "b c d" \
-		"$Q$prefix/c/x$Q exists; cannot create $Q$prefix/c$Q"
+		"$SQ$prefix/c/x$SQ exists; cannot create $SQ$prefix/c$SQ"
 
 '
 
@@ -163,7 +161,7 @@
 
 	prefix=refs/3p &&
 	test_update_rejected "a c/x e" true "b c d" \
-		"$Q$prefix/c/x$Q exists; cannot create $Q$prefix/c$Q"
+		"$SQ$prefix/c/x$SQ exists; cannot create $SQ$prefix/c$SQ"
 
 '
 
@@ -171,7 +169,7 @@
 
 	prefix=refs/4l &&
 	test_update_rejected "a c/x/y e" false "b c d" \
-		"$Q$prefix/c/x/y$Q exists; cannot create $Q$prefix/c$Q"
+		"$SQ$prefix/c/x/y$SQ exists; cannot create $SQ$prefix/c$SQ"
 
 '
 
@@ -179,7 +177,7 @@
 
 	prefix=refs/4p &&
 	test_update_rejected "a c/x/y e" true "b c d" \
-		"$Q$prefix/c/x/y$Q exists; cannot create $Q$prefix/c$Q"
+		"$SQ$prefix/c/x/y$SQ exists; cannot create $SQ$prefix/c$SQ"
 
 '
 
@@ -187,7 +185,7 @@
 
 	prefix=refs/5 &&
 	test_update_rejected "a e" false "b c c/x d" \
-		"cannot process $Q$prefix/c$Q and $Q$prefix/c/x$Q at the same time"
+		"cannot process $SQ$prefix/c$SQ and $SQ$prefix/c/x$SQ at the same time"
 
 '
 
@@ -334,7 +332,7 @@
 test_expect_success 'missing old value blocks update' '
 	prefix=refs/missing-update &&
 	cat >expected <<-EOF &&
-	fatal: cannot lock ref $Q$prefix/foo$Q: unable to resolve reference $Q$prefix/foo$Q
+	fatal: cannot lock ref $SQ$prefix/foo$SQ: unable to resolve reference $SQ$prefix/foo$SQ
 	EOF
 	printf "%s\n" "update $prefix/foo $E $D" |
 	test_must_fail git update-ref --stdin 2>output.err &&
@@ -345,7 +343,7 @@
 	prefix=refs/incorrect-update &&
 	git update-ref $prefix/foo $C &&
 	cat >expected <<-EOF &&
-	fatal: cannot lock ref $Q$prefix/foo$Q: is at $C but expected $D
+	fatal: cannot lock ref $SQ$prefix/foo$SQ: is at $C but expected $D
 	EOF
 	printf "%s\n" "update $prefix/foo $E $D" |
 	test_must_fail git update-ref --stdin 2>output.err &&
@@ -356,7 +354,7 @@
 	prefix=refs/existing-create &&
 	git update-ref $prefix/foo $C &&
 	cat >expected <<-EOF &&
-	fatal: cannot lock ref $Q$prefix/foo$Q: reference already exists
+	fatal: cannot lock ref $SQ$prefix/foo$SQ: reference already exists
 	EOF
 	printf "%s\n" "create $prefix/foo $E" |
 	test_must_fail git update-ref --stdin 2>output.err &&
@@ -367,7 +365,7 @@
 	prefix=refs/incorrect-delete &&
 	git update-ref $prefix/foo $C &&
 	cat >expected <<-EOF &&
-	fatal: cannot lock ref $Q$prefix/foo$Q: is at $C but expected $D
+	fatal: cannot lock ref $SQ$prefix/foo$SQ: is at $C but expected $D
 	EOF
 	printf "%s\n" "delete $prefix/foo $D" |
 	test_must_fail git update-ref --stdin 2>output.err &&
@@ -378,7 +376,7 @@
 	prefix=refs/missing-indirect-update &&
 	git symbolic-ref $prefix/symref $prefix/foo &&
 	cat >expected <<-EOF &&
-	fatal: cannot lock ref $Q$prefix/symref$Q: unable to resolve reference $Q$prefix/foo$Q
+	fatal: cannot lock ref $SQ$prefix/symref$SQ: unable to resolve reference $SQ$prefix/foo$SQ
 	EOF
 	printf "%s\n" "update $prefix/symref $E $D" |
 	test_must_fail git update-ref --stdin 2>output.err &&
@@ -390,7 +388,7 @@
 	git symbolic-ref $prefix/symref $prefix/foo &&
 	git update-ref $prefix/foo $C &&
 	cat >expected <<-EOF &&
-	fatal: cannot lock ref $Q$prefix/symref$Q: is at $C but expected $D
+	fatal: cannot lock ref $SQ$prefix/symref$SQ: is at $C but expected $D
 	EOF
 	printf "%s\n" "update $prefix/symref $E $D" |
 	test_must_fail git update-ref --stdin 2>output.err &&
@@ -402,7 +400,7 @@
 	git symbolic-ref $prefix/symref $prefix/foo &&
 	git update-ref $prefix/foo $C &&
 	cat >expected <<-EOF &&
-	fatal: cannot lock ref $Q$prefix/symref$Q: reference already exists
+	fatal: cannot lock ref $SQ$prefix/symref$SQ: reference already exists
 	EOF
 	printf "%s\n" "create $prefix/symref $E" |
 	test_must_fail git update-ref --stdin 2>output.err &&
@@ -414,7 +412,7 @@
 	git symbolic-ref $prefix/symref $prefix/foo &&
 	git update-ref $prefix/foo $C &&
 	cat >expected <<-EOF &&
-	fatal: cannot lock ref $Q$prefix/symref$Q: is at $C but expected $D
+	fatal: cannot lock ref $SQ$prefix/symref$SQ: is at $C but expected $D
 	EOF
 	printf "%s\n" "delete $prefix/symref $D" |
 	test_must_fail git update-ref --stdin 2>output.err &&
@@ -425,7 +423,7 @@
 	prefix=refs/missing-noderef-update &&
 	git symbolic-ref $prefix/symref $prefix/foo &&
 	cat >expected <<-EOF &&
-	fatal: cannot lock ref $Q$prefix/symref$Q: reference is missing but expected $D
+	fatal: cannot lock ref $SQ$prefix/symref$SQ: reference is missing but expected $D
 	EOF
 	printf "%s\n" "option no-deref" "update $prefix/symref $E $D" |
 	test_must_fail git update-ref --stdin 2>output.err &&
@@ -437,7 +435,7 @@
 	git symbolic-ref $prefix/symref $prefix/foo &&
 	git update-ref $prefix/foo $C &&
 	cat >expected <<-EOF &&
-	fatal: cannot lock ref $Q$prefix/symref$Q: is at $C but expected $D
+	fatal: cannot lock ref $SQ$prefix/symref$SQ: is at $C but expected $D
 	EOF
 	printf "%s\n" "option no-deref" "update $prefix/symref $E $D" |
 	test_must_fail git update-ref --stdin 2>output.err &&
@@ -449,7 +447,7 @@
 	git symbolic-ref $prefix/symref $prefix/foo &&
 	git update-ref $prefix/foo $C &&
 	cat >expected <<-EOF &&
-	fatal: cannot lock ref $Q$prefix/symref$Q: reference already exists
+	fatal: cannot lock ref $SQ$prefix/symref$SQ: reference already exists
 	EOF
 	printf "%s\n" "option no-deref" "create $prefix/symref $E" |
 	test_must_fail git update-ref --stdin 2>output.err &&
@@ -461,7 +459,7 @@
 	git symbolic-ref $prefix/symref $prefix/foo &&
 	git update-ref $prefix/foo $C &&
 	cat >expected <<-EOF &&
-	fatal: cannot lock ref $Q$prefix/symref$Q: is at $C but expected $D
+	fatal: cannot lock ref $SQ$prefix/symref$SQ: is at $C but expected $D
 	EOF
 	printf "%s\n" "option no-deref" "delete $prefix/symref $D" |
 	test_must_fail git update-ref --stdin 2>output.err &&
@@ -474,13 +472,13 @@
 	: >.git/$prefix/foo/bar/baz.lock &&
 	test_when_finished "rm -f .git/$prefix/foo/bar/baz.lock" &&
 	cat >expected <<-EOF &&
-	fatal: cannot lock ref $Q$prefix/foo$Q: there is a non-empty directory $Q.git/$prefix/foo$Q blocking reference $Q$prefix/foo$Q
+	fatal: cannot lock ref $SQ$prefix/foo$SQ: there is a non-empty directory $SQ.git/$prefix/foo$SQ blocking reference $SQ$prefix/foo$SQ
 	EOF
 	printf "%s\n" "update $prefix/foo $C" |
 	test_must_fail git update-ref --stdin 2>output.err &&
 	test_cmp expected output.err &&
 	cat >expected <<-EOF &&
-	fatal: cannot lock ref $Q$prefix/foo$Q: unable to resolve reference $Q$prefix/foo$Q
+	fatal: cannot lock ref $SQ$prefix/foo$SQ: unable to resolve reference $SQ$prefix/foo$SQ
 	EOF
 	printf "%s\n" "update $prefix/foo $D $C" |
 	test_must_fail git update-ref --stdin 2>output.err &&
@@ -493,13 +491,13 @@
 	echo "gobbledigook" >.git/$prefix/foo &&
 	test_when_finished "rm -f .git/$prefix/foo" &&
 	cat >expected <<-EOF &&
-	fatal: cannot lock ref $Q$prefix/foo$Q: unable to resolve reference $Q$prefix/foo$Q: reference broken
+	fatal: cannot lock ref $SQ$prefix/foo$SQ: unable to resolve reference $SQ$prefix/foo$SQ: reference broken
 	EOF
 	printf "%s\n" "update $prefix/foo $C" |
 	test_must_fail git update-ref --stdin 2>output.err &&
 	test_cmp expected output.err &&
 	cat >expected <<-EOF &&
-	fatal: cannot lock ref $Q$prefix/foo$Q: unable to resolve reference $Q$prefix/foo$Q: reference broken
+	fatal: cannot lock ref $SQ$prefix/foo$SQ: unable to resolve reference $SQ$prefix/foo$SQ: reference broken
 	EOF
 	printf "%s\n" "update $prefix/foo $D $C" |
 	test_must_fail git update-ref --stdin 2>output.err &&
@@ -513,13 +511,13 @@
 	: >.git/$prefix/foo/bar/baz.lock &&
 	test_when_finished "rm -f .git/$prefix/foo/bar/baz.lock" &&
 	cat >expected <<-EOF &&
-	fatal: cannot lock ref $Q$prefix/symref$Q: there is a non-empty directory $Q.git/$prefix/foo$Q blocking reference $Q$prefix/foo$Q
+	fatal: cannot lock ref $SQ$prefix/symref$SQ: there is a non-empty directory $SQ.git/$prefix/foo$SQ blocking reference $SQ$prefix/foo$SQ
 	EOF
 	printf "%s\n" "update $prefix/symref $C" |
 	test_must_fail git update-ref --stdin 2>output.err &&
 	test_cmp expected output.err &&
 	cat >expected <<-EOF &&
-	fatal: cannot lock ref $Q$prefix/symref$Q: unable to resolve reference $Q$prefix/foo$Q
+	fatal: cannot lock ref $SQ$prefix/symref$SQ: unable to resolve reference $SQ$prefix/foo$SQ
 	EOF
 	printf "%s\n" "update $prefix/symref $D $C" |
 	test_must_fail git update-ref --stdin 2>output.err &&
@@ -532,13 +530,13 @@
 	echo "gobbledigook" >.git/$prefix/foo &&
 	test_when_finished "rm -f .git/$prefix/foo" &&
 	cat >expected <<-EOF &&
-	fatal: cannot lock ref $Q$prefix/symref$Q: unable to resolve reference $Q$prefix/foo$Q: reference broken
+	fatal: cannot lock ref $SQ$prefix/symref$SQ: unable to resolve reference $SQ$prefix/foo$SQ: reference broken
 	EOF
 	printf "%s\n" "update $prefix/symref $C" |
 	test_must_fail git update-ref --stdin 2>output.err &&
 	test_cmp expected output.err &&
 	cat >expected <<-EOF &&
-	fatal: cannot lock ref $Q$prefix/symref$Q: unable to resolve reference $Q$prefix/foo$Q: reference broken
+	fatal: cannot lock ref $SQ$prefix/symref$SQ: unable to resolve reference $SQ$prefix/foo$SQ: reference broken
 	EOF
 	printf "%s\n" "update $prefix/symref $D $C" |
 	test_must_fail git update-ref --stdin 2>output.err &&
@@ -614,7 +612,7 @@
 	test_when_finished "rm -f .git/packed-refs.lock" &&
 	test_must_fail git update-ref -d $prefix/foo >out 2>err &&
 	git for-each-ref $prefix >actual &&
-	test_i18ngrep "Unable to create $Q.*packed-refs.lock$Q: " err &&
+	test_i18ngrep "Unable to create $SQ.*packed-refs.lock$SQ: " err &&
 	test_cmp unchanged actual
 '
 
diff --git a/t/t1414-reflog-walk.sh b/t/t1414-reflog-walk.sh
index feb1efd..1181a9f 100755
--- a/t/t1414-reflog-walk.sh
+++ b/t/t1414-reflog-walk.sh
@@ -18,10 +18,9 @@
 	git log -g --format="%gd %gs" "$@"
 }
 
-sq="'"
 test_expect_success 'set up expected reflog' '
 	cat >expect.all <<-EOF
-	HEAD@{0} commit (merge): Merge branch ${sq}master${sq} into side
+	HEAD@{0} commit (merge): Merge branch ${SQ}master${SQ} into side
 	HEAD@{1} commit: three
 	HEAD@{2} checkout: moving from master to side
 	HEAD@{3} commit: two
diff --git a/t/t1450-fsck.sh b/t/t1450-fsck.sh
index a2405b0..7436e63 100755
--- a/t/t1450-fsck.sh
+++ b/t/t1450-fsck.sh
@@ -70,7 +70,6 @@
 	test_when_finished "git update-ref -d refs/heads/bogus" &&
 
 	test_must_fail git fsck 2>out &&
-	cat out &&
 	test_i18ngrep "$sha.*corrupt" out
 '
 
@@ -78,7 +77,6 @@
 	git rev-parse HEAD^{tree} >.git/refs/heads/invalid &&
 	test_when_finished "git update-ref -d refs/heads/invalid" &&
 	test_must_fail git fsck 2>out &&
-	cat out &&
 	test_i18ngrep "not a commit" out
 '
 
@@ -88,7 +86,6 @@
 	echo $ZERO_OID >.git/HEAD &&
 	# avoid corrupt/broken HEAD from interfering with repo discovery
 	test_must_fail env GIT_DIR=.git git fsck 2>out &&
-	cat out &&
 	test_i18ngrep "detached HEAD points" out
 '
 
@@ -98,7 +95,6 @@
 	echo "ref: refs/funny/place" >.git/HEAD &&
 	# avoid corrupt/broken HEAD from interfering with repo discovery
 	test_must_fail env GIT_DIR=.git git fsck 2>out &&
-	cat out &&
 	test_i18ngrep "HEAD points to something strange" out
 '
 
@@ -157,7 +153,6 @@
 	git update-ref refs/heads/bogus "$new" &&
 	test_when_finished "git update-ref -d refs/heads/bogus" &&
 	test_must_fail git fsck 2>out &&
-	cat out &&
 	test_i18ngrep "error in commit $new" out
 '
 
@@ -169,7 +164,6 @@
 	git update-ref refs/heads/bogus "$new" &&
 	test_when_finished "git update-ref -d refs/heads/bogus" &&
 	test_must_fail git fsck 2>out &&
-	cat out &&
 	test_i18ngrep "error in commit $new.* - bad name" out
 '
 
@@ -181,7 +175,6 @@
 	git update-ref refs/heads/bogus "$new" &&
 	test_when_finished "git update-ref -d refs/heads/bogus" &&
 	test_must_fail git fsck 2>out &&
-	cat out &&
 	test_i18ngrep "error in commit $new.* - missing email" out
 '
 
@@ -193,7 +186,6 @@
 	git update-ref refs/heads/bogus "$new" &&
 	test_when_finished "git update-ref -d refs/heads/bogus" &&
 	test_must_fail git fsck 2>out &&
-	cat out &&
 	test_i18ngrep "error in commit $new" out
 '
 
@@ -207,7 +199,6 @@
 	git update-ref refs/heads/bogus "$new" &&
 	test_when_finished "git update-ref -d refs/heads/bogus" &&
 	test_must_fail git fsck 2>out &&
-	cat out &&
 	test_i18ngrep "error in commit $new.*integer overflow" out
 '
 
@@ -219,7 +210,6 @@
 	git update-ref refs/heads/bogus "$new" &&
 	test_when_finished "git update-ref -d refs/heads/bogus" &&
 	test_must_fail git fsck 2>out &&
-	cat out &&
 	test_i18ngrep "error in commit $new.*unterminated header: NUL at offset" out
 '
 
@@ -297,7 +287,6 @@
 	echo $tag >.git/refs/tags/invalid &&
 	test_when_finished "git update-ref -d refs/tags/invalid" &&
 	test_must_fail git fsck --tags >out &&
-	cat out &&
 	test_i18ngrep "broken link" out
 '
 
@@ -378,7 +367,6 @@
 	echo $tag >.git/refs/tags/wrong &&
 	test_when_finished "git update-ref -d refs/tags/wrong" &&
 	test_must_fail git fsck --tags 2>out &&
-	cat out &&
 	test_i18ngrep "error in tag $tag.*unterminated header: NUL at offset" out
 '
 
@@ -409,7 +397,6 @@
 	test_when_finished "git update-ref -d refs/heads/bogus" &&
 
 	test_might_fail git rev-list --verify-objects refs/heads/bogus >/dev/null 2>out &&
-	cat out &&
 	test_i18ngrep -q "error: hash mismatch $(dirname $new)$(test_oid ff_2)" out
 '
 
@@ -433,7 +420,6 @@
 	 sha=$(printf "100644 file$_bz$_bzoid" |
 	       git hash-object -w --stdin -t tree) &&
 	  git fsck 2>out &&
-	  cat out &&
 	  test_i18ngrep "warning.*null sha1" out
 	)
 '
@@ -444,7 +430,6 @@
 	 sha=$(printf "160000 submodule$_bz$_bzoid" |
 	       git hash-object -w --stdin -t tree) &&
 	  git fsck 2>out &&
-	  cat out &&
 	  test_i18ngrep "warning.*null sha1" out
 	)
 '
@@ -466,7 +451,6 @@
 			printf "$mode $type %s\t%s" "$value" "$path" >bad &&
 			bad_tree=$(git mktree <bad) &&
 			git fsck 2>out &&
-			cat out &&
 			test_i18ngrep "warning.*tree $bad_tree" out
 		)'
 	done <<-\EOF
diff --git a/t/t1506-rev-parse-diagnosis.sh b/t/t1506-rev-parse-diagnosis.sh
index 4ee009d..624d0a5 100755
--- a/t/t1506-rev-parse-diagnosis.sh
+++ b/t/t1506-rev-parse-diagnosis.sh
@@ -8,10 +8,9 @@
 
 test_did_you_mean ()
 {
-	sq="'" &&
 	cat >expected <<-EOF &&
-	fatal: Path '$2$3' $4, but not ${5:-$sq$3$sq}.
-	Did you mean '$1:$2$3'${2:+ aka $sq$1:./$3$sq}?
+	fatal: Path '$2$3' $4, but not ${5:-$SQ$3$SQ}.
+	Did you mean '$1:$2$3'${2:+ aka $SQ$1:./$3$SQ}?
 	EOF
 	test_cmp expected error
 }
@@ -215,4 +214,12 @@
 	test_cmp expect actual
 '
 
+test_expect_success 'reject Nth parent if N is too high' '
+	test_must_fail git rev-parse HEAD^100000000000000000000000000000000
+'
+
+test_expect_success 'reject Nth ancestor if N is too high' '
+	test_must_fail git rev-parse HEAD~100000000000000000000000000000000
+'
+
 test_done
diff --git a/t/t1507-rev-parse-upstream.sh b/t/t1507-rev-parse-upstream.sh
index fa3e499..8b4cf8a 100755
--- a/t/t1507-rev-parse-upstream.sh
+++ b/t/t1507-rev-parse-upstream.sh
@@ -28,8 +28,6 @@
 	)
 '
 
-sq="'"
-
 full_name () {
 	(cd clone &&
 	 git rev-parse --symbolic-full-name "$@")
@@ -129,7 +127,7 @@
 	git branch -t new my-side@{u} &&
 	git merge -s ours new@{u} &&
 	git show -s --pretty=tformat:%s >actual &&
-	echo "Merge remote-tracking branch ${sq}origin/side${sq}" >expect &&
+	echo "Merge remote-tracking branch ${SQ}origin/side${SQ}" >expect &&
 	test_cmp expect actual
 )
 '
@@ -156,7 +154,7 @@
 
 test_expect_success 'branch@{u} error message when no upstream' '
 	cat >expect <<-EOF &&
-	fatal: no upstream configured for branch ${sq}non-tracking${sq}
+	fatal: no upstream configured for branch ${SQ}non-tracking${SQ}
 	EOF
 	error_message non-tracking@{u} &&
 	test_i18ncmp expect error
@@ -164,7 +162,7 @@
 
 test_expect_success '@{u} error message when no upstream' '
 	cat >expect <<-EOF &&
-	fatal: no upstream configured for branch ${sq}master${sq}
+	fatal: no upstream configured for branch ${SQ}master${SQ}
 	EOF
 	test_must_fail git rev-parse --verify @{u} 2>actual &&
 	test_i18ncmp expect actual
@@ -172,7 +170,7 @@
 
 test_expect_success 'branch@{u} error message with misspelt branch' '
 	cat >expect <<-EOF &&
-	fatal: no such branch: ${sq}no-such-branch${sq}
+	fatal: no such branch: ${SQ}no-such-branch${SQ}
 	EOF
 	error_message no-such-branch@{u} &&
 	test_i18ncmp expect error
@@ -189,7 +187,7 @@
 
 test_expect_success 'branch@{u} error message if upstream branch not fetched' '
 	cat >expect <<-EOF &&
-	fatal: upstream branch ${sq}refs/heads/side${sq} not stored as a remote-tracking branch
+	fatal: upstream branch ${SQ}refs/heads/side${SQ} not stored as a remote-tracking branch
 	EOF
 	error_message bad-upstream@{u} &&
 	test_i18ncmp expect error
diff --git a/t/t1600-index.sh b/t/t1600-index.sh
index 42962ed..b7c31aa 100755
--- a/t/t1600-index.sh
+++ b/t/t1600-index.sh
@@ -59,17 +59,42 @@
 	)
 '
 
-test_expect_success 'GIT_INDEX_VERSION takes precedence over config' '
+test_index_version () {
+	INDEX_VERSION_CONFIG=$1 &&
+	FEATURE_MANY_FILES=$2 &&
+	ENV_VAR_VERSION=$3
+	EXPECTED_OUTPUT_VERSION=$4 &&
 	(
 		rm -f .git/index &&
-		GIT_INDEX_VERSION=4 &&
-		export GIT_INDEX_VERSION &&
-		git config --add index.version 2 &&
+		rm -f .git/config &&
+		if test "$INDEX_VERSION_CONFIG" -ne 0
+		then
+			git config --add index.version $INDEX_VERSION_CONFIG
+		fi &&
+		git config --add feature.manyFiles $FEATURE_MANY_FILES
+		if test "$ENV_VAR_VERSION" -ne 0
+		then
+			GIT_INDEX_VERSION=$ENV_VAR_VERSION &&
+			export GIT_INDEX_VERSION
+		else
+			unset GIT_INDEX_VERSION
+		fi &&
 		git add a 2>&1 &&
-		echo 4 >expect &&
+		echo $EXPECTED_OUTPUT_VERSION >expect &&
 		test-tool index-version <.git/index >actual &&
 		test_cmp expect actual
 	)
+}
+
+test_expect_success 'index version config precedence' '
+	test_index_version 0 false 0 2 &&
+	test_index_version 2 false 0 2 &&
+	test_index_version 3 false 0 2 &&
+	test_index_version 4 false 0 4 &&
+	test_index_version 2 false 4 4 &&
+	test_index_version 2 true 0 2 &&
+	test_index_version 0 true 0 4 &&
+	test_index_version 0 true 2 2
 '
 
 test_done
diff --git a/t/t2022-checkout-paths.sh b/t/t2022-checkout-paths.sh
index fc3eb43..6844afa 100755
--- a/t/t2022-checkout-paths.sh
+++ b/t/t2022-checkout-paths.sh
@@ -78,4 +78,15 @@
 	test_cmp expect actual
 '
 
+test_expect_success 'checkout HEAD adds deleted intent-to-add file back to index' '
+	echo "nonempty" >nonempty &&
+	>empty &&
+	git add nonempty empty &&
+	git commit -m "create files to be deleted" &&
+	git rm --cached nonempty empty &&
+	git add -N nonempty empty &&
+	git checkout HEAD nonempty empty &&
+	git diff --cached --exit-code
+'
+
 test_done
diff --git a/t/t2070-restore.sh b/t/t2070-restore.sh
index 2650df1..21c3f84 100755
--- a/t/t2070-restore.sh
+++ b/t/t2070-restore.sh
@@ -95,4 +95,15 @@
 	)
 '
 
+test_expect_success 'restore --staged adds deleted intent-to-add file back to index' '
+	echo "nonempty" >nonempty &&
+	>empty &&
+	git add nonempty empty &&
+	git commit -m "create files to be deleted" &&
+	git rm --cached nonempty empty &&
+	git add -N nonempty empty &&
+	git restore --staged nonempty empty &&
+	git diff --cached --exit-code
+'
+
 test_done
diff --git a/t/t3005-ls-files-relative.sh b/t/t3005-ls-files-relative.sh
index 209b4c7..2ec69a8 100755
--- a/t/t3005-ls-files-relative.sh
+++ b/t/t3005-ls-files-relative.sh
@@ -7,10 +7,6 @@
 
 . ./test-lib.sh
 
-new_line='
-'
-sq=\'
-
 test_expect_success 'prepare' '
 	: >never-mind-me &&
 	git add never-mind-me &&
@@ -44,9 +40,9 @@
 		cd top/sub &&
 		for f in ../y*
 		do
-			echo "error: pathspec $sq$f$sq did not match any file(s) known to git"
+			echo "error: pathspec $SQ$f$SQ did not match any file(s) known to git"
 		done >expect.err &&
-		echo "Did you forget to ${sq}git add${sq}?" >>expect.err &&
+		echo "Did you forget to ${SQ}git add${SQ}?" >>expect.err &&
 		ls ../x* >expect.out &&
 		test_must_fail git ls-files -c --error-unmatch ../[xy]* >actual.out 2>actual.err &&
 		test_cmp expect.out actual.out &&
@@ -59,9 +55,9 @@
 		cd top/sub &&
 		for f in ../x*
 		do
-			echo "error: pathspec $sq$f$sq did not match any file(s) known to git"
+			echo "error: pathspec $SQ$f$SQ did not match any file(s) known to git"
 		done >expect.err &&
-		echo "Did you forget to ${sq}git add${sq}?" >>expect.err &&
+		echo "Did you forget to ${SQ}git add${SQ}?" >>expect.err &&
 		ls ../y* >expect.out &&
 		test_must_fail git ls-files -o --error-unmatch ../[xy]* >actual.out 2>actual.err &&
 		test_cmp expect.out actual.out &&
diff --git a/t/t3030-merge-recursive.sh b/t/t3030-merge-recursive.sh
index ff641b3..2170758 100755
--- a/t/t3030-merge-recursive.sh
+++ b/t/t3030-merge-recursive.sh
@@ -452,6 +452,34 @@
 
 '
 
+test_expect_success SYMLINKS 'dir in working tree with symlink ancestor does not produce d/f conflict' '
+	git init sym &&
+	(
+		cd sym &&
+		ln -s . foo &&
+		mkdir bar &&
+		>bar/file &&
+		git add foo bar/file &&
+		git commit -m "foo symlink" &&
+
+		git checkout -b branch1 &&
+		git commit --allow-empty -m "empty commit" &&
+
+		git checkout master &&
+		git rm foo &&
+		mkdir foo &&
+		>foo/bar &&
+		git add foo/bar &&
+		git commit -m "replace foo symlink with real foo dir and foo/bar file" &&
+
+		git checkout branch1 &&
+
+		git cherry-pick master &&
+		test_path_is_dir foo &&
+		test_path_is_file foo/bar
+	)
+'
+
 test_expect_success 'reset and 3-way merge' '
 
 	git reset --hard "$c2" &&
@@ -667,15 +695,22 @@
 test_expect_success 'merge-recursive remembers the names of all base trees' '
 	git reset --hard HEAD &&
 
+	# make the index match $c1 so that merge-recursive below does not
+	# fail early
+	git diff --binary HEAD $c1 -- | git apply --cached &&
+
 	# more trees than static slots used by oid_to_hex()
 	for commit in $c0 $c2 $c4 $c5 $c6 $c7
 	do
 		git rev-parse "$commit^{tree}"
 	done >trees &&
 
-	# ignore the return code -- it only fails because the input is weird
+	# ignore the return code; it only fails because the input is weird...
 	test_must_fail git -c merge.verbosity=5 merge-recursive $(cat trees) -- $c1 $c3 >out &&
 
+	# ...but make sure it fails in the expected way
+	test_i18ngrep CONFLICT.*rename/rename out &&
+
 	# merge-recursive prints in reverse order, but we do not care
 	sort <trees >expect &&
 	sed -n "s/^virtual //p" out | sort >actual &&
diff --git a/t/t3201-branch-contains.sh b/t/t3201-branch-contains.sh
index 0ea4fc4..40251c9 100755
--- a/t/t3201-branch-contains.sh
+++ b/t/t3201-branch-contains.sh
@@ -192,10 +192,10 @@
 	EOF
 	test_cmp expect actual &&
 	git branch --verbose --merged topic >actual &&
-	cat >expect <<-\EOF &&
-	  master c77a0a9 second on master
-	* topic  2c939f4 [ahead 1] foo
-	  zzz    c77a0a9 second on master
+	cat >expect <<-EOF &&
+	  master $(git rev-parse --short master) second on master
+	* topic  $(git rev-parse --short topic ) [ahead 1] foo
+	  zzz    $(git rev-parse --short zzz   ) second on master
 	EOF
 	test_i18ncmp expect actual
 '
diff --git a/t/t3206-range-diff.sh b/t/t3206-range-diff.sh
index ec54865..0579cd9 100755
--- a/t/t3206-range-diff.sh
+++ b/t/t3206-range-diff.sh
@@ -8,17 +8,124 @@
 # harm than good.  We need some real history.
 
 test_expect_success 'setup' '
-	git fast-import < "$TEST_DIRECTORY"/t3206/history.export
+	git fast-import < "$TEST_DIRECTORY"/t3206/history.export &&
+	test_oid_cache <<-EOF
+	# topic
+	t1 sha1:4de457d
+	t2 sha1:fccce22
+	t3 sha1:147e64e
+	t4 sha1:a63e992
+	t1 sha256:b89f8b9
+	t2 sha256:5f12aad
+	t3 sha256:ea8b273
+	t4 sha256:14b7336
+
+	# unmodified
+	u1 sha1:35b9b25
+	u2 sha1:de345ab
+	u3 sha1:9af6654
+	u4 sha1:2901f77
+	u1 sha256:e3731be
+	u2 sha256:14fadf8
+	u3 sha256:736c4bc
+	u4 sha256:673e77d
+
+	# reordered
+	r1 sha1:aca177a
+	r2 sha1:14ad629
+	r3 sha1:ee58208
+	r4 sha1:307b27a
+	r1 sha256:f59d3aa
+	r2 sha256:fb261a8
+	r3 sha256:cb2649b
+	r4 sha256:958577e
+
+	# removed (deleted)
+	d1 sha1:7657159
+	d2 sha1:43d84d3
+	d3 sha1:a740396
+	d1 sha256:e312513
+	d2 sha256:eb19258
+	d3 sha256:1ccb3c1
+
+	# added
+	a1 sha1:2716022
+	a2 sha1:b62accd
+	a3 sha1:df46cfa
+	a4 sha1:3e64548
+	a5 sha1:12b4063
+	a1 sha256:d724f4d
+	a2 sha256:1de7762
+	a3 sha256:e159431
+	a4 sha256:b3e483c
+	a5 sha256:90866a7
+
+	# rebased
+	b1 sha1:cc9c443
+	b2 sha1:c5d9641
+	b3 sha1:28cc2b6
+	b4 sha1:5628ab7
+	b5 sha1:a31b12e
+	b1 sha256:a1a8717
+	b2 sha256:20a5862
+	b3 sha256:587172a
+	b4 sha256:2721c5d
+	b5 sha256:7b57864
+
+	# changed
+	c1 sha1:a4b3333
+	c2 sha1:f51d370
+	c3 sha1:0559556
+	c4 sha1:d966c5c
+	c1 sha256:f8c2b9d
+	c2 sha256:3fb6318
+	c3 sha256:168ab68
+	c4 sha256:3526539
+
+	# changed-message
+	m1 sha1:f686024
+	m2 sha1:4ab067d
+	m3 sha1:b9cb956
+	m4 sha1:8add5f1
+	m1 sha256:31e6281
+	m2 sha256:a06bf1b
+	m3 sha256:82dc654
+	m4 sha256:48470c5
+
+	# renamed
+	n1 sha1:f258d75
+	n2 sha1:017b62d
+	n3 sha1:3ce7af6
+	n4 sha1:1e6226b
+	n1 sha256:ad52114
+	n2 sha256:3b54c8f
+	n3 sha256:3b0a644
+	n4 sha256:e461653
+
+	# added and removed
+	s1 sha1:096b1ba
+	s2 sha1:d92e698
+	s3 sha1:9a1db4d
+	s4 sha1:fea3b5c
+	s1 sha256:a7f9134
+	s2 sha256:b4c2580
+	s3 sha256:1d62aa2
+	s4 sha256:48160e8
+
+	# Empty delimiter (included so lines match neatly)
+	__ sha1:-------
+	__ sha256:-------
+	EOF
 '
 
 test_expect_success 'simple A..B A..C (unmodified)' '
 	git range-diff --no-color master..topic master..unmodified \
 		>actual &&
 	cat >expected <<-EOF &&
-	1:  4de457d = 1:  35b9b25 s/5/A/
-	2:  fccce22 = 2:  de345ab s/4/A/
-	3:  147e64e = 3:  9af6654 s/11/B/
-	4:  a63e992 = 4:  2901f77 s/12/B/
+	1:  $(test_oid t1) = 1:  $(test_oid u1) s/5/A/
+	2:  $(test_oid t2) = 2:  $(test_oid u2) s/4/A/
+	3:  $(test_oid t3) = 3:  $(test_oid u3) s/11/B/
+	4:  $(test_oid t4) = 4:  $(test_oid u4) s/12/B/
 	EOF
 	test_cmp expected actual
 '
@@ -38,10 +145,10 @@
 test_expect_success 'trivial reordering' '
 	git range-diff --no-color master topic reordered >actual &&
 	cat >expected <<-EOF &&
-	1:  4de457d = 1:  aca177a s/5/A/
-	3:  147e64e = 2:  14ad629 s/11/B/
-	4:  a63e992 = 3:  ee58208 s/12/B/
-	2:  fccce22 = 4:  307b27a s/4/A/
+	1:  $(test_oid t1) = 1:  $(test_oid r1) s/5/A/
+	3:  $(test_oid t3) = 2:  $(test_oid r2) s/11/B/
+	4:  $(test_oid t4) = 3:  $(test_oid r3) s/12/B/
+	2:  $(test_oid t2) = 4:  $(test_oid r4) s/4/A/
 	EOF
 	test_cmp expected actual
 '
@@ -49,10 +156,10 @@
 test_expect_success 'removed a commit' '
 	git range-diff --no-color master topic removed >actual &&
 	cat >expected <<-EOF &&
-	1:  4de457d = 1:  7657159 s/5/A/
-	2:  fccce22 < -:  ------- s/4/A/
-	3:  147e64e = 2:  43d84d3 s/11/B/
-	4:  a63e992 = 3:  a740396 s/12/B/
+	1:  $(test_oid t1) = 1:  $(test_oid d1) s/5/A/
+	2:  $(test_oid t2) < -:  $(test_oid __) s/4/A/
+	3:  $(test_oid t3) = 2:  $(test_oid d2) s/11/B/
+	4:  $(test_oid t4) = 3:  $(test_oid d3) s/12/B/
 	EOF
 	test_cmp expected actual
 '
@@ -60,11 +167,11 @@
 test_expect_success 'added a commit' '
 	git range-diff --no-color master topic added >actual &&
 	cat >expected <<-EOF &&
-	1:  4de457d = 1:  2716022 s/5/A/
-	2:  fccce22 = 2:  b62accd s/4/A/
-	-:  ------- > 3:  df46cfa s/6/A/
-	3:  147e64e = 4:  3e64548 s/11/B/
-	4:  a63e992 = 5:  12b4063 s/12/B/
+	1:  $(test_oid t1) = 1:  $(test_oid a1) s/5/A/
+	2:  $(test_oid t2) = 2:  $(test_oid a2) s/4/A/
+	-:  $(test_oid __) > 3:  $(test_oid a3) s/6/A/
+	3:  $(test_oid t3) = 4:  $(test_oid a4) s/11/B/
+	4:  $(test_oid t4) = 5:  $(test_oid a5) s/12/B/
 	EOF
 	test_cmp expected actual
 '
@@ -72,10 +179,10 @@
 test_expect_success 'new base, A B C' '
 	git range-diff --no-color master topic rebased >actual &&
 	cat >expected <<-EOF &&
-	1:  4de457d = 1:  cc9c443 s/5/A/
-	2:  fccce22 = 2:  c5d9641 s/4/A/
-	3:  147e64e = 3:  28cc2b6 s/11/B/
-	4:  a63e992 = 4:  5628ab7 s/12/B/
+	1:  $(test_oid t1) = 1:  $(test_oid b1) s/5/A/
+	2:  $(test_oid t2) = 2:  $(test_oid b2) s/4/A/
+	3:  $(test_oid t3) = 3:  $(test_oid b3) s/11/B/
+	4:  $(test_oid t4) = 4:  $(test_oid b4) s/12/B/
 	EOF
 	test_cmp expected actual
 '
@@ -84,11 +191,11 @@
 	# this syntax includes the commits from master!
 	git range-diff --no-color topic...rebased >actual &&
 	cat >expected <<-EOF &&
-	-:  ------- > 1:  a31b12e unrelated
-	1:  4de457d = 2:  cc9c443 s/5/A/
-	2:  fccce22 = 3:  c5d9641 s/4/A/
-	3:  147e64e = 4:  28cc2b6 s/11/B/
-	4:  a63e992 = 5:  5628ab7 s/12/B/
+	-:  $(test_oid __) > 1:  $(test_oid b5) unrelated
+	1:  $(test_oid t1) = 2:  $(test_oid b1) s/5/A/
+	2:  $(test_oid t2) = 3:  $(test_oid b2) s/4/A/
+	3:  $(test_oid t3) = 4:  $(test_oid b3) s/11/B/
+	4:  $(test_oid t4) = 5:  $(test_oid b4) s/12/B/
 	EOF
 	test_cmp expected actual
 '
@@ -96,9 +203,9 @@
 test_expect_success 'changed commit' '
 	git range-diff --no-color topic...changed >actual &&
 	cat >expected <<-EOF &&
-	1:  4de457d = 1:  a4b3333 s/5/A/
-	2:  fccce22 = 2:  f51d370 s/4/A/
-	3:  147e64e ! 3:  0559556 s/11/B/
+	1:  $(test_oid t1) = 1:  $(test_oid c1) s/5/A/
+	2:  $(test_oid t2) = 2:  $(test_oid c2) s/4/A/
+	3:  $(test_oid t3) ! 3:  $(test_oid c3) s/11/B/
 	    @@ file: A
 	      9
 	      10
@@ -108,7 +215,7 @@
 	      12
 	      13
 	      14
-	4:  a63e992 ! 4:  d966c5c s/12/B/
+	4:  $(test_oid t4) ! 4:  $(test_oid c4) s/12/B/
 	    @@ file
 	     @@ file: A
 	      9
@@ -125,10 +232,10 @@
 test_expect_success 'changed commit with --no-patch diff option' '
 	git range-diff --no-color --no-patch topic...changed >actual &&
 	cat >expected <<-EOF &&
-	1:  4de457d = 1:  a4b3333 s/5/A/
-	2:  fccce22 = 2:  f51d370 s/4/A/
-	3:  147e64e ! 3:  0559556 s/11/B/
-	4:  a63e992 ! 4:  d966c5c s/12/B/
+	1:  $(test_oid t1) = 1:  $(test_oid c1) s/5/A/
+	2:  $(test_oid t2) = 2:  $(test_oid c2) s/4/A/
+	3:  $(test_oid t3) ! 3:  $(test_oid c3) s/11/B/
+	4:  $(test_oid t4) ! 4:  $(test_oid c4) s/12/B/
 	EOF
 	test_cmp expected actual
 '
@@ -136,16 +243,16 @@
 test_expect_success 'changed commit with --stat diff option' '
 	git range-diff --no-color --stat topic...changed >actual &&
 	cat >expected <<-EOF &&
-	1:  4de457d = 1:  a4b3333 s/5/A/
+	1:  $(test_oid t1) = 1:  $(test_oid c1) s/5/A/
 	     a => b | 0
 	     1 file changed, 0 insertions(+), 0 deletions(-)
-	2:  fccce22 = 2:  f51d370 s/4/A/
+	2:  $(test_oid t2) = 2:  $(test_oid c2) s/4/A/
 	     a => b | 0
 	     1 file changed, 0 insertions(+), 0 deletions(-)
-	3:  147e64e ! 3:  0559556 s/11/B/
+	3:  $(test_oid t3) ! 3:  $(test_oid c3) s/11/B/
 	     a => b | 0
 	     1 file changed, 0 insertions(+), 0 deletions(-)
-	4:  a63e992 ! 4:  d966c5c s/12/B/
+	4:  $(test_oid t4) ! 4:  $(test_oid c4) s/12/B/
 	     a => b | 0
 	     1 file changed, 0 insertions(+), 0 deletions(-)
 	EOF
@@ -155,9 +262,9 @@
 test_expect_success 'changed commit with sm config' '
 	git range-diff --no-color --submodule=log topic...changed >actual &&
 	cat >expected <<-EOF &&
-	1:  4de457d = 1:  a4b3333 s/5/A/
-	2:  fccce22 = 2:  f51d370 s/4/A/
-	3:  147e64e ! 3:  0559556 s/11/B/
+	1:  $(test_oid t1) = 1:  $(test_oid c1) s/5/A/
+	2:  $(test_oid t2) = 2:  $(test_oid c2) s/4/A/
+	3:  $(test_oid t3) ! 3:  $(test_oid c3) s/11/B/
 	    @@ file: A
 	      9
 	      10
@@ -167,7 +274,7 @@
 	      12
 	      13
 	      14
-	4:  a63e992 ! 4:  d966c5c s/12/B/
+	4:  $(test_oid t4) ! 4:  $(test_oid c4) s/12/B/
 	    @@ file
 	     @@ file: A
 	      9
@@ -184,8 +291,8 @@
 test_expect_success 'renamed file' '
 	git range-diff --no-color --submodule=log topic...renamed-file >actual &&
 	sed s/Z/\ /g >expected <<-EOF &&
-	1:  4de457d = 1:  f258d75 s/5/A/
-	2:  fccce22 ! 2:  017b62d s/4/A/
+	1:  $(test_oid t1) = 1:  $(test_oid n1) s/5/A/
+	2:  $(test_oid t2) ! 2:  $(test_oid n2) s/4/A/
 	    @@ Metadata
 	    ZAuthor: Thomas Rast <trast@inf.ethz.ch>
 	    Z
@@ -198,7 +305,7 @@
 	    Z@@
 	    Z 1
 	    Z 2
-	3:  147e64e ! 3:  3ce7af6 s/11/B/
+	3:  $(test_oid t3) ! 3:  $(test_oid n3) s/11/B/
 	    @@ Metadata
 	    Z ## Commit message ##
 	    Z    s/11/B/
@@ -210,7 +317,7 @@
 	    Z 8
 	    Z 9
 	    Z 10
-	4:  a63e992 ! 4:  1e6226b s/12/B/
+	4:  $(test_oid t4) ! 4:  $(test_oid n4) s/12/B/
 	    @@ Metadata
 	    Z ## Commit message ##
 	    Z    s/12/B/
@@ -226,11 +333,51 @@
 	test_cmp expected actual
 '
 
+test_expect_success 'file with mode only change' '
+	git range-diff --no-color --submodule=log topic...mode-only-change >actual &&
+	sed s/Z/\ /g >expected <<-EOF &&
+	1:  fccce22 ! 1:  4d39cb3 s/4/A/
+	    @@ Metadata
+	    ZAuthor: Thomas Rast <trast@inf.ethz.ch>
+	    Z
+	    Z ## Commit message ##
+	    -    s/4/A/
+	    +    s/4/A/ + add other-file
+	    Z
+	    Z ## file ##
+	    Z@@
+	    @@ file
+	    Z A
+	    Z 6
+	    Z 7
+	    +
+	    + ## other-file (new) ##
+	2:  147e64e ! 2:  26c107f s/11/B/
+	    @@ Metadata
+	    ZAuthor: Thomas Rast <trast@inf.ethz.ch>
+	    Z
+	    Z ## Commit message ##
+	    -    s/11/B/
+	    +    s/11/B/ + mode change other-file
+	    Z
+	    Z ## file ##
+	    Z@@ file: A
+	    @@ file: A
+	    Z 12
+	    Z 13
+	    Z 14
+	    +
+	    + ## other-file (mode change 100644 => 100755) ##
+	3:  a63e992 = 3:  4c1e0f5 s/12/B/
+	EOF
+	test_cmp expected actual
+'
+
 test_expect_success 'file added and later removed' '
 	git range-diff --no-color --submodule=log topic...added-removed >actual &&
 	sed s/Z/\ /g >expected <<-EOF &&
-	1:  4de457d = 1:  096b1ba s/5/A/
-	2:  fccce22 ! 2:  d92e698 s/4/A/
+	1:  $(test_oid t1) = 1:  $(test_oid s1) s/5/A/
+	2:  $(test_oid t2) ! 2:  $(test_oid s2) s/4/A/
 	    @@ Metadata
 	    ZAuthor: Thomas Rast <trast@inf.ethz.ch>
 	    Z
@@ -246,7 +393,7 @@
 	    Z 7
 	    +
 	    + ## new-file (new) ##
-	3:  147e64e ! 3:  9a1db4d s/11/B/
+	3:  $(test_oid t3) ! 3:  $(test_oid s3) s/11/B/
 	    @@ Metadata
 	    ZAuthor: Thomas Rast <trast@inf.ethz.ch>
 	    Z
@@ -262,7 +409,7 @@
 	    Z 14
 	    +
 	    + ## new-file (deleted) ##
-	4:  a63e992 = 4:  fea3b5c s/12/B/
+	4:  $(test_oid t4) = 4:  $(test_oid s4) s/12/B/
 	EOF
 	test_cmp expected actual
 '
@@ -275,8 +422,8 @@
 test_expect_success 'changed message' '
 	git range-diff --no-color topic...changed-message >actual &&
 	sed s/Z/\ /g >expected <<-EOF &&
-	1:  4de457d = 1:  f686024 s/5/A/
-	2:  fccce22 ! 2:  4ab067d s/4/A/
+	1:  $(test_oid t1) = 1:  $(test_oid m1) s/5/A/
+	2:  $(test_oid t2) ! 2:  $(test_oid m2) s/4/A/
 	    @@ Metadata
 	    Z ## Commit message ##
 	    Z    s/4/A/
@@ -286,16 +433,16 @@
 	    Z ## file ##
 	    Z@@
 	    Z 1
-	3:  147e64e = 3:  b9cb956 s/11/B/
-	4:  a63e992 = 4:  8add5f1 s/12/B/
+	3:  $(test_oid t3) = 3:  $(test_oid m3) s/11/B/
+	4:  $(test_oid t4) = 4:  $(test_oid m4) s/12/B/
 	EOF
 	test_cmp expected actual
 '
 
 test_expect_success 'dual-coloring' '
-	sed -e "s|^:||" >expect <<-\EOF &&
-	:<YELLOW>1:  a4b3333 = 1:  f686024 s/5/A/<RESET>
-	:<RED>2:  f51d370 <RESET><YELLOW>!<RESET><GREEN> 2:  4ab067d<RESET><YELLOW> s/4/A/<RESET>
+	sed -e "s|^:||" >expect <<-EOF &&
+	:<YELLOW>1:  $(test_oid c1) = 1:  $(test_oid m1) s/5/A/<RESET>
+	:<RED>2:  $(test_oid c2) <RESET><YELLOW>!<RESET><GREEN> 2:  $(test_oid m2)<RESET><YELLOW> s/4/A/<RESET>
 	:    <REVERSE><CYAN>@@<RESET> <RESET>Metadata<RESET>
 	:      ## Commit message ##<RESET>
 	:         s/4/A/<RESET>
@@ -305,7 +452,7 @@
 	:      ## file ##<RESET>
 	:    <CYAN> @@<RESET>
 	:      1<RESET>
-	:<RED>3:  0559556 <RESET><YELLOW>!<RESET><GREEN> 3:  b9cb956<RESET><YELLOW> s/11/B/<RESET>
+	:<RED>3:  $(test_oid c3) <RESET><YELLOW>!<RESET><GREEN> 3:  $(test_oid m3)<RESET><YELLOW> s/11/B/<RESET>
 	:    <REVERSE><CYAN>@@<RESET> <RESET>file: A<RESET>
 	:      9<RESET>
 	:      10<RESET>
@@ -315,7 +462,7 @@
 	:      12<RESET>
 	:      13<RESET>
 	:      14<RESET>
-	:<RED>4:  d966c5c <RESET><YELLOW>!<RESET><GREEN> 4:  8add5f1<RESET><YELLOW> s/12/B/<RESET>
+	:<RED>4:  $(test_oid c4) <RESET><YELLOW>!<RESET><GREEN> 4:  $(test_oid m4)<RESET><YELLOW> s/12/B/<RESET>
 	:    <REVERSE><CYAN>@@<RESET> <RESET>file<RESET>
 	:    <CYAN> @@ file: A<RESET>
 	:      9<RESET>
@@ -354,4 +501,8 @@
 	grep "> 1: .* new message" 0001-*
 '
 
+test_expect_success 'range-diff overrides diff.noprefix internally' '
+	git -c diff.noprefix=true range-diff HEAD^...
+'
+
 test_done
diff --git a/t/t3206/history.export b/t/t3206/history.export
index 7bb3814..4c808e5 100644
--- a/t/t3206/history.export
+++ b/t/t3206/history.export
@@ -55,7 +55,7 @@
 19
 20
 
-commit refs/heads/topic
+commit refs/heads/mode-only-change
 mark :4
 author Thomas Rast <trast@inf.ethz.ch> 1374485014 +0200
 committer Thomas Rast <trast@inf.ethz.ch> 1374485014 +0200
@@ -678,3 +678,32 @@
 from :55
 M 100644 :9 renamed-file
 
+commit refs/heads/mode-only-change
+mark :57
+author Thomas Rast <trast@inf.ethz.ch> 1374485024 +0200
+committer Thomas Gummerer <t.gummerer@gmail.com> 1570473767 +0100
+data 24
+s/4/A/ + add other-file
+from :4
+M 100644 :5 file
+M 100644 :49 other-file
+
+commit refs/heads/mode-only-change
+mark :58
+author Thomas Rast <trast@inf.ethz.ch> 1374485036 +0200
+committer Thomas Gummerer <t.gummerer@gmail.com> 1570473768 +0100
+data 33
+s/11/B/ + mode change other-file
+from :57
+M 100644 :7 file
+M 100755 :49 other-file
+
+commit refs/heads/mode-only-change
+mark :59
+author Thomas Rast <trast@inf.ethz.ch> 1374485044 +0200
+committer Thomas Gummerer <t.gummerer@gmail.com> 1570473768 +0100
+data 8
+s/12/B/
+from :58
+M 100644 :9 file
+
diff --git a/t/t3301-notes.sh b/t/t3301-notes.sh
index 704bbc6..d3fa298 100755
--- a/t/t3301-notes.sh
+++ b/t/t3301-notes.sh
@@ -66,8 +66,9 @@
 '
 
 test_expect_success 'create reflog entry' '
+	ref=$(git rev-parse --short refs/notes/commits) &&
 	cat <<-EOF >expect &&
-		a1d8fa6 refs/notes/commits@{0}: notes: Notes added by '\''git notes add'\''
+		$ref refs/notes/commits@{0}: notes: Notes added by '\''git notes add'\''
 	EOF
 	git reflog show refs/notes/commits >actual &&
 	test_cmp expect actual
@@ -134,8 +135,9 @@
 '
 
 test_expect_success 'show notes' '
+	commit=$(git rev-parse HEAD) &&
 	cat >expect <<-EOF &&
-		commit 7a4ca6ee52a974a66cbaa78e33214535dff1d691
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:14:13 2005 -0700
 
@@ -152,8 +154,9 @@
 test_expect_success 'show multi-line notes' '
 	test_commit 3rd &&
 	MSG="b3${LF}c3c3c3c3${LF}d3d3d3" git notes add &&
+	commit=$(git rev-parse HEAD) &&
 	cat >expect-multiline <<-EOF &&
-		commit d07d62e5208f22eb5695e7eb47667dc8b9860290
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:15:13 2005 -0700
 
@@ -174,8 +177,9 @@
 	test_commit 4th &&
 	echo "xyzzy" >note5 &&
 	git notes add -F note5 &&
+	commit=$(git rev-parse HEAD) &&
 	cat >expect-F <<-EOF &&
-		commit 0f7aa3ec6325aeb88b910453bb3eb37c49d75c11
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:16:13 2005 -0700
 
@@ -198,10 +202,13 @@
 '
 
 test_expect_success 'git log --pretty=raw does not show notes' '
+	commit=$(git rev-parse HEAD) &&
+	tree=$(git rev-parse HEAD^{tree}) &&
+	parent=$(git rev-parse HEAD^) &&
 	cat >expect <<-EOF &&
-		commit 0f7aa3ec6325aeb88b910453bb3eb37c49d75c11
-		tree 05ac65288c4c4b3b709a020ae94b2ece2f2201ae
-		parent d07d62e5208f22eb5695e7eb47667dc8b9860290
+		commit $commit
+		tree $tree
+		parent $parent
 		author A U Thor <author@example.com> 1112912173 -0700
 		committer C O Mitter <committer@example.com> 1112912173 -0700
 
@@ -291,8 +298,9 @@
 test_expect_success 'show -m notes' '
 	test_commit 5th &&
 	git notes add -m spam -m "foo${LF}bar${LF}baz" &&
+	commit=$(git rev-parse HEAD) &&
 	cat >expect-m <<-EOF &&
-		commit 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:17:13 2005 -0700
 
@@ -313,8 +321,9 @@
 
 test_expect_success 'remove note with add -f -F /dev/null' '
 	git notes add -f -F /dev/null &&
+	commit=$(git rev-parse HEAD) &&
 	cat >expect-rm-F <<-EOF &&
-		commit 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:17:13 2005 -0700
 
@@ -356,14 +365,16 @@
 test_expect_success 'remove note with "git notes remove"' '
 	git notes remove HEAD^ &&
 	git notes remove &&
+	commit=$(git rev-parse HEAD) &&
+	parent=$(git rev-parse HEAD^) &&
 	cat >expect-rm-remove <<-EOF &&
-		commit 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:17:13 2005 -0700
 
 		${indent}5th
 
-		commit 0f7aa3ec6325aeb88b910453bb3eb37c49d75c11
+		commit $parent
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:16:13 2005 -0700
 
@@ -459,9 +470,11 @@
 '
 
 test_expect_success 'list notes with "git notes list"' '
-	cat >expect <<-EOF &&
-		c9c6af7f78bc47490dbf3e822cf2f3c24d4b9061 7a4ca6ee52a974a66cbaa78e33214535dff1d691
-		c18dc024e14f08d18d14eea0d747ff692d66d6a3 d07d62e5208f22eb5695e7eb47667dc8b9860290
+	commit_2=$(git rev-parse 2nd) &&
+	commit_3=$(git rev-parse 3rd) &&
+	sort -t" " -k2 >expect <<-EOF &&
+		$(git rev-parse refs/notes/commits:$commit_2) $commit_2
+		$(git rev-parse refs/notes/commits:$commit_3) $commit_3
 	EOF
 	git notes list >actual &&
 	test_cmp expect actual
@@ -474,7 +487,7 @@
 
 test_expect_success 'list specific note with "git notes list <object>"' '
 	cat >expect <<-EOF &&
-		c18dc024e14f08d18d14eea0d747ff692d66d6a3
+		$(git rev-parse refs/notes/commits:$commit_3)
 	EOF
 	git notes list HEAD^^ >actual &&
 	test_cmp expect actual
@@ -498,10 +511,11 @@
 '
 
 test_expect_success '"git notes list" does not expand to "git notes list HEAD"' '
-	cat >expect_list <<-EOF &&
-		c9c6af7f78bc47490dbf3e822cf2f3c24d4b9061 7a4ca6ee52a974a66cbaa78e33214535dff1d691
-		4b6ad22357cc8a1296720574b8d2fbc22fab0671 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
-		c18dc024e14f08d18d14eea0d747ff692d66d6a3 d07d62e5208f22eb5695e7eb47667dc8b9860290
+	commit_5=$(git rev-parse 5th) &&
+	sort -t" " -k2 >expect_list <<-EOF &&
+		$(git rev-parse refs/notes/commits:$commit_2) $commit_2
+		$(git rev-parse refs/notes/commits:$commit_3) $commit_3
+		$(git rev-parse refs/notes/commits:$commit_5) $commit_5
 	EOF
 	git notes list >actual &&
 	test_cmp expect_list actual
@@ -531,8 +545,9 @@
 test_expect_success 'create other note on a different notes ref (setup)' '
 	test_commit 6th &&
 	GIT_NOTES_REF="refs/notes/other" git notes add -m "other note" &&
+	commit=$(git rev-parse HEAD) &&
 	cat >expect-not-other <<-EOF &&
-		commit 2c125331118caba0ff8238b7f4958ac6e93fe39c
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:18:13 2005 -0700
 
@@ -569,8 +584,10 @@
 '
 
 test_expect_success 'Show all notes when notes.displayRef=refs/notes/*' '
+	commit=$(git rev-parse HEAD) &&
+	parent=$(git rev-parse HEAD^) &&
 	cat >expect-both <<-EOF &&
-		commit 2c125331118caba0ff8238b7f4958ac6e93fe39c
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:18:13 2005 -0700
 
@@ -582,7 +599,7 @@
 		Notes (other):
 		${indent}other note
 
-		commit 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
+		commit $parent
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:17:13 2005 -0700
 
@@ -616,8 +633,9 @@
 '
 
 test_expect_success 'notes.displayRef respects order' '
+	commit=$(git rev-parse HEAD) &&
 	cat >expect-both-reversed <<-EOF &&
-		commit 2c125331118caba0ff8238b7f4958ac6e93fe39c
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:18:13 2005 -0700
 
@@ -642,14 +660,16 @@
 '
 
 test_expect_success 'GIT_NOTES_DISPLAY_REF overrides config' '
+	commit=$(git rev-parse HEAD) &&
+	parent=$(git rev-parse HEAD^) &&
 	cat >expect-none <<-EOF &&
-		commit 2c125331118caba0ff8238b7f4958ac6e93fe39c
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:18:13 2005 -0700
 
 		${indent}6th
 
-		commit 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
+		commit $parent
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:17:13 2005 -0700
 
@@ -666,8 +686,9 @@
 '
 
 test_expect_success '--no-standard-notes' '
+	commit=$(git rev-parse HEAD) &&
 	cat >expect-commits <<-EOF &&
-		commit 2c125331118caba0ff8238b7f4958ac6e93fe39c
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:18:13 2005 -0700
 
@@ -712,8 +733,10 @@
 '
 
 test_expect_success 'create note from other note with "git notes add -C"' '
+	test_commit 7th &&
+	commit=$(git rev-parse HEAD) &&
 	cat >expect <<-EOF &&
-		commit fb01e0ca8c33b6cc0c6451dde747f97df567cb5c
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:19:13 2005 -0700
 
@@ -722,7 +745,6 @@
 		Notes:
 		${indent}order test
 	EOF
-	test_commit 7th &&
 	git notes add -C $(git notes list HEAD^) &&
 	git log -1 >actual &&
 	test_cmp expect actual &&
@@ -744,8 +766,9 @@
 '
 
 test_expect_success 'create note from blob with "git notes add -C" reuses blob id' '
+	commit=$(git rev-parse HEAD) &&
 	cat >expect <<-EOF &&
-		commit 9a4c31c7f722b5d517e92c64e932dd751e1413bf
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:20:13 2005 -0700
 
@@ -762,8 +785,10 @@
 '
 
 test_expect_success 'create note from other note with "git notes add -c"' '
+	test_commit 9th &&
+	commit=$(git rev-parse HEAD) &&
 	cat >expect <<-EOF &&
-		commit 2e0db4bc649e174d667a1cde19e725cf897a5bd2
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:21:13 2005 -0700
 
@@ -772,7 +797,6 @@
 		Notes:
 		${indent}yet another note
 	EOF
-	test_commit 9th &&
 	MSG="yet another note" git notes add -c $(git notes list HEAD^^) &&
 	git log -1 >actual &&
 	test_cmp expect actual
@@ -785,8 +809,9 @@
 '
 
 test_expect_success 'append to note from other note with "git notes append -C"' '
+	commit=$(git rev-parse HEAD^) &&
 	cat >expect <<-EOF &&
-		commit 2e0db4bc649e174d667a1cde19e725cf897a5bd2
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:21:13 2005 -0700
 
@@ -803,8 +828,9 @@
 '
 
 test_expect_success 'create note from other note with "git notes append -c"' '
+	commit=$(git rev-parse HEAD) &&
 	cat >expect <<-EOF &&
-		commit 7c3b87ab368f81e11b1ea87b2ab99a71ccd25406
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:22:13 2005 -0700
 
@@ -819,8 +845,9 @@
 '
 
 test_expect_success 'append to note from other note with "git notes append -c"' '
+	commit=$(git rev-parse HEAD) &&
 	cat >expect <<-EOF &&
-		commit 7c3b87ab368f81e11b1ea87b2ab99a71ccd25406
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:22:13 2005 -0700
 
@@ -837,8 +864,10 @@
 '
 
 test_expect_success 'copy note with "git notes copy"' '
+	test_commit 11th &&
+	commit=$(git rev-parse HEAD) &&
 	cat >expect <<-EOF &&
-		commit a446fff8777efdc6eb8f4b7c8a5ff699484df0d5
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:23:13 2005 -0700
 
@@ -849,7 +878,6 @@
 		${indent}
 		${indent}yet another note
 	EOF
-	test_commit 11th &&
 	git notes copy HEAD^ HEAD &&
 	git log -1 >actual &&
 	test_cmp expect actual &&
@@ -864,8 +892,9 @@
 '
 
 test_expect_success 'allow overwrite with "git notes copy -f"' '
+	commit=$(git rev-parse HEAD) &&
 	cat >expect <<-EOF &&
-		commit a446fff8777efdc6eb8f4b7c8a5ff699484df0d5
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:23:13 2005 -0700
 
@@ -889,8 +918,10 @@
 '
 
 test_expect_success 'git notes copy --stdin' '
+	commit=$(git rev-parse HEAD) &&
+	parent=$(git rev-parse HEAD^) &&
 	cat >expect <<-EOF &&
-		commit e871aa61182b1d95d0a6fb75445d891722863b6b
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:25:13 2005 -0700
 
@@ -901,7 +932,7 @@
 		${indent}
 		${indent}yet another note
 
-		commit 65e263ded02ae4e8839bc151095113737579dc12
+		commit $parent
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:24:13 2005 -0700
 
@@ -922,21 +953,23 @@
 '
 
 test_expect_success 'git notes copy --for-rewrite (unconfigured)' '
+	test_commit 14th &&
+	test_commit 15th &&
+	commit=$(git rev-parse HEAD) &&
+	parent=$(git rev-parse HEAD^) &&
 	cat >expect <<-EOF &&
-		commit 4acf42e847e7fffbbf89ee365c20ac7caf40de89
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:27:13 2005 -0700
 
 		${indent}15th
 
-		commit 07c85d77059393ed0154b8c96906547a59dfcddd
+		commit $parent
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:26:13 2005 -0700
 
 		${indent}14th
 	EOF
-	test_commit 14th &&
-	test_commit 15th &&
 	(echo $(git rev-parse HEAD~3) $(git rev-parse HEAD^) &&
 	echo $(git rev-parse HEAD~2) $(git rev-parse HEAD)) |
 	git notes copy --for-rewrite=foo &&
@@ -945,8 +978,10 @@
 '
 
 test_expect_success 'git notes copy --for-rewrite (enabled)' '
+	commit=$(git rev-parse HEAD) &&
+	parent=$(git rev-parse HEAD^) &&
 	cat >expect <<-EOF &&
-		commit 4acf42e847e7fffbbf89ee365c20ac7caf40de89
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:27:13 2005 -0700
 
@@ -957,7 +992,7 @@
 		${indent}
 		${indent}yet another note
 
-		commit 07c85d77059393ed0154b8c96906547a59dfcddd
+		commit $parent
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:26:13 2005 -0700
 
@@ -986,8 +1021,9 @@
 '
 
 test_expect_success 'git notes copy --for-rewrite (overwrite)' '
+	commit=$(git rev-parse HEAD) &&
 	cat >expect <<-EOF &&
-		commit 4acf42e847e7fffbbf89ee365c20ac7caf40de89
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:27:13 2005 -0700
 
@@ -1015,8 +1051,9 @@
 '
 
 test_expect_success 'git notes copy --for-rewrite (append)' '
+	commit=$(git rev-parse HEAD) &&
 	cat >expect <<-EOF &&
-		commit 4acf42e847e7fffbbf89ee365c20ac7caf40de89
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:27:13 2005 -0700
 
@@ -1037,8 +1074,9 @@
 '
 
 test_expect_success 'git notes copy --for-rewrite (append two to one)' '
+	commit=$(git rev-parse HEAD) &&
 	cat >expect <<-EOF &&
-		commit 4acf42e847e7fffbbf89ee365c20ac7caf40de89
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:27:13 2005 -0700
 
@@ -1075,8 +1113,9 @@
 '
 
 test_expect_success 'GIT_NOTES_REWRITE_MODE works' '
+	commit=$(git rev-parse HEAD) &&
 	cat >expect <<-EOF &&
-		commit 4acf42e847e7fffbbf89ee365c20ac7caf40de89
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:27:13 2005 -0700
 
@@ -1095,8 +1134,9 @@
 '
 
 test_expect_success 'GIT_NOTES_REWRITE_REF works' '
+	commit=$(git rev-parse HEAD) &&
 	cat >expect <<-EOF &&
-		commit 4acf42e847e7fffbbf89ee365c20ac7caf40de89
+		commit $commit
 		Author: A U Thor <author@example.com>
 		Date:   Thu Apr 7 15:27:13 2005 -0700
 
diff --git a/t/t3305-notes-fanout.sh b/t/t3305-notes-fanout.sh
index 54460be..831f83d 100755
--- a/t/t3305-notes-fanout.sh
+++ b/t/t3305-notes-fanout.sh
@@ -35,15 +35,10 @@
 	git ls-tree -r --name-only refs/notes/commits |
 	while read path
 	do
-		case "$path" in
-		??/??????????????????????????????????????)
-			: true
-			;;
-		*)
+		echo $path | grep "^../[0-9a-f]*$" || {
 			echo "Invalid path \"$path\"" &&
-			return 1
-			;;
-		esac
+			return 1;
+		}
 	done
 '
 
@@ -77,15 +72,10 @@
 	git ls-tree -r --name-only refs/notes/commits |
 	while read path
 	do
-		case "$path" in
-		????????????????????????????????????????)
-			: true
-			;;
-		*)
+		echo $path | grep -v "^../.*" || {
 			echo "Invalid path \"$path\"" &&
-			return 1
-			;;
-		esac
+			return 1;
+		}
 	done
 '
 
diff --git a/t/t3306-notes-prune.sh b/t/t3306-notes-prune.sh
index 6174808..8f4102f 100755
--- a/t/t3306-notes-prune.sh
+++ b/t/t3306-notes-prune.sh
@@ -11,23 +11,26 @@
 	test_tick &&
 	git commit -m 1st &&
 	git notes add -m "Note #1" &&
+	first=$(git rev-parse HEAD) &&
 	: > file2 &&
 	git add file2 &&
 	test_tick &&
 	git commit -m 2nd &&
 	git notes add -m "Note #2" &&
+	second=$(git rev-parse HEAD) &&
 	: > file3 &&
 	git add file3 &&
 	test_tick &&
 	git commit -m 3rd &&
-	COMMIT_FILE=.git/objects/5e/e1c35e83ea47cd3cc4f8cbee0568915fbbbd29 &&
+	third=$(git rev-parse HEAD) &&
+	COMMIT_FILE=$(echo $third | sed "s!^..!.git/objects/&/!") &&
 	test -f $COMMIT_FILE &&
 	test-tool chmtime =+0 $COMMIT_FILE &&
 	git notes add -m "Note #3"
 '
 
 cat > expect <<END_OF_LOG
-commit 5ee1c35e83ea47cd3cc4f8cbee0568915fbbbd29
+commit $third
 Author: A U Thor <author@example.com>
 Date:   Thu Apr 7 15:15:13 2005 -0700
 
@@ -36,7 +39,7 @@
 Notes:
     Note #3
 
-commit 08341ad9e94faa089d60fd3f523affb25c6da189
+commit $second
 Author: A U Thor <author@example.com>
 Date:   Thu Apr 7 15:14:13 2005 -0700
 
@@ -45,7 +48,7 @@
 Notes:
     Note #2
 
-commit ab5f302035f2e7aaf04265f08b42034c23256e1f
+commit $first
 Author: A U Thor <author@example.com>
 Date:   Thu Apr 7 15:13:13 2005 -0700
 
@@ -70,16 +73,16 @@
 
 test_expect_success 'verify that commits are gone' '
 
-	test_must_fail git cat-file -p 5ee1c35e83ea47cd3cc4f8cbee0568915fbbbd29 &&
-	git cat-file -p 08341ad9e94faa089d60fd3f523affb25c6da189 &&
-	git cat-file -p ab5f302035f2e7aaf04265f08b42034c23256e1f
+	test_must_fail git cat-file -p $third &&
+	git cat-file -p $second &&
+	git cat-file -p $first
 '
 
 test_expect_success 'verify that notes are still present' '
 
-	git notes show 5ee1c35e83ea47cd3cc4f8cbee0568915fbbbd29 &&
-	git notes show 08341ad9e94faa089d60fd3f523affb25c6da189 &&
-	git notes show ab5f302035f2e7aaf04265f08b42034c23256e1f
+	git notes show $third &&
+	git notes show $second &&
+	git notes show $first
 '
 
 test_expect_success 'prune -n does not remove notes' '
@@ -90,13 +93,10 @@
 	test_cmp expect actual
 '
 
-cat > expect <<EOF
-5ee1c35e83ea47cd3cc4f8cbee0568915fbbbd29
-EOF
 
 test_expect_success 'prune -n lists prunable notes' '
 
-
+	echo $third >expect &&
 	git notes prune -n > actual &&
 	test_cmp expect actual
 '
@@ -109,9 +109,9 @@
 
 test_expect_success 'verify that notes are gone' '
 
-	test_must_fail git notes show 5ee1c35e83ea47cd3cc4f8cbee0568915fbbbd29 &&
-	git notes show 08341ad9e94faa089d60fd3f523affb25c6da189 &&
-	git notes show ab5f302035f2e7aaf04265f08b42034c23256e1f
+	test_must_fail git notes show $third &&
+	git notes show $second &&
+	git notes show $first
 '
 
 test_expect_success 'remove some commits' '
@@ -121,21 +121,18 @@
 	git gc --prune=now
 '
 
-cat > expect <<EOF
-08341ad9e94faa089d60fd3f523affb25c6da189
-EOF
-
 test_expect_success 'prune -v notes' '
 
+	echo $second >expect &&
 	git notes prune -v > actual &&
 	test_cmp expect actual
 '
 
 test_expect_success 'verify that notes are gone' '
 
-	test_must_fail git notes show 5ee1c35e83ea47cd3cc4f8cbee0568915fbbbd29 &&
-	test_must_fail git notes show 08341ad9e94faa089d60fd3f523affb25c6da189 &&
-	git notes show ab5f302035f2e7aaf04265f08b42034c23256e1f
+	test_must_fail git notes show $third &&
+	test_must_fail git notes show $second &&
+	git notes show $first
 '
 
 test_done
diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh
index 80b23fd..ab18ac5 100755
--- a/t/t3400-rebase.sh
+++ b/t/t3400-rebase.sh
@@ -295,12 +295,48 @@
 		echo two >>init.t &&
 		git commit -a -m two &&
 		git tag two &&
-		test_must_fail git rebase --onto init HEAD^ &&
+		test_must_fail git rebase -f --onto init HEAD^ &&
 		GIT_TRACE=1 git rebase --show-current-patch >/dev/null 2>stderr &&
 		grep "show.*$(git rev-parse two)" stderr
 	)
 '
 
+test_expect_success 'rebase --am and .gitattributes' '
+	test_create_repo attributes &&
+	(
+		cd attributes &&
+		test_commit init &&
+		git config filter.test.clean "sed -e '\''s/smudged/clean/g'\''" &&
+		git config filter.test.smudge "sed -e '\''s/clean/smudged/g'\''" &&
+
+		test_commit second &&
+		git checkout -b test HEAD^ &&
+
+		echo "*.txt filter=test" >.gitattributes &&
+		git add .gitattributes &&
+		test_commit third &&
+
+		echo "This text is smudged." >a.txt &&
+		git add a.txt &&
+		test_commit fourth &&
+
+		git checkout -b removal HEAD^ &&
+		git rm .gitattributes &&
+		git add -u &&
+		test_commit fifth &&
+		git cherry-pick test &&
+
+		git checkout test &&
+		git rebase master &&
+		grep "smudged" a.txt &&
+
+		git checkout removal &&
+		git reset --hard &&
+		git rebase master &&
+		grep "clean" a.txt
+	)
+'
+
 test_expect_success 'rebase--merge.sh and --show-current-patch' '
 	test_create_repo conflict-merge &&
 	(
diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
index 461dd53..d2dfbe4 100755
--- a/t/t3404-rebase-interactive.sh
+++ b/t/t3404-rebase-interactive.sh
@@ -29,9 +29,6 @@
 
 . "$TEST_DIRECTORY"/lib-rebase.sh
 
-# WARNING: Modifications to the initial repository can change the SHA ID used
-# in the expect2 file for the 'stop on conflicting pick' test.
-
 test_expect_success 'setup' '
 	test_commit A file1 &&
 	test_commit B file1 &&
@@ -155,8 +152,6 @@
 	test_i18ncmp expected actual
 '
 
-LF='
-'
 test_expect_success 'rebase -x with newline in command fails' '
 	test_when_finished "git rebase --abort ||:" &&
 	test_must_fail env git rebase -x "a${LF}b" @ 2>actual &&
@@ -233,25 +228,28 @@
 	set_fake_editor &&
 	FAKE_LINES="2 1" git rebase -i HEAD~2 &&
 	test H = $(git cat-file commit HEAD^ | sed -ne \$p) &&
-	test G = $(git cat-file commit HEAD | sed -ne \$p)
+	test G = $(git cat-file commit HEAD | sed -ne \$p) &&
+	blob1=$(git rev-parse --short HEAD^:file1) &&
+	blob2=$(git rev-parse --short HEAD:file1) &&
+	commit=$(git rev-parse --short HEAD)
 '
 
 test_expect_success 'stop on conflicting pick' '
-	cat >expect <<-\EOF &&
+	cat >expect <<-EOF &&
 	diff --git a/file1 b/file1
-	index f70f10e..fd79235 100644
+	index $blob1..$blob2 100644
 	--- a/file1
 	+++ b/file1
 	@@ -1 +1 @@
 	-A
 	+G
 	EOF
-	cat >expect2 <<-\EOF &&
+	cat >expect2 <<-EOF &&
 	<<<<<<< HEAD
 	D
 	=======
 	G
-	>>>>>>> 5d18e54... G
+	>>>>>>> $commit... G
 	EOF
 	git tag new-branch1 &&
 	set_fake_editor &&
@@ -1003,7 +1001,7 @@
 	git checkout B &&
 	set_fake_editor &&
 	test_must_fail env FAKE_LINES="2" git rebase -i --root &&
-	git cat-file commit HEAD | grep "^tree 4b825dc642cb" &&
+	git cat-file commit HEAD | grep "^tree $EMPTY_TREE" &&
 	git rebase --abort
 '
 
@@ -1016,9 +1014,9 @@
 	test 0 = $(git cat-file commit HEAD | grep -c ^parent\ )
 '
 
-test_expect_success 'rebase -i --root reword root commit' '
+test_expect_success 'rebase -i --root reword original root commit' '
 	test_when_finished "test_might_fail git rebase --abort" &&
-	git checkout -b reword-root-branch master &&
+	git checkout -b reword-original-root-branch master &&
 	set_fake_editor &&
 	FAKE_LINES="reword 1 2" FAKE_COMMIT_MESSAGE="A changed" \
 	git rebase -i --root &&
@@ -1026,6 +1024,16 @@
 	test -z "$(git show -s --format=%p HEAD^)"
 '
 
+test_expect_success 'rebase -i --root reword new root commit' '
+	test_when_finished "test_might_fail git rebase --abort" &&
+	git checkout -b reword-now-root-branch master &&
+	set_fake_editor &&
+	FAKE_LINES="reword 3 1" FAKE_COMMIT_MESSAGE="C changed" \
+	git rebase -i --root &&
+	git show HEAD^ | grep "C changed" &&
+	test -z "$(git show -s --format=%p HEAD^)"
+'
+
 test_expect_success 'rebase -i --root when root has untracked file conflict' '
 	test_when_finished "reset_rebase" &&
 	git checkout -b failing-root-pick A &&
@@ -1054,11 +1062,11 @@
 '
 
 test_expect_success C_LOCALE_OUTPUT 'rebase --edit-todo does not work on non-interactive rebase' '
-	git checkout reword-root-branch &&
+	git checkout reword-original-root-branch &&
 	git reset --hard &&
 	git checkout conflict-branch &&
 	set_fake_editor &&
-	test_must_fail git rebase --onto HEAD~2 HEAD~ &&
+	test_must_fail git rebase -f --onto HEAD~2 HEAD~ &&
 	test_must_fail git rebase --edit-todo &&
 	git rebase --abort
 '
@@ -1161,7 +1169,7 @@
 	test_expect_code 1 grep  "	emp" error
 '
 
-test_expect_success 'short SHA-1 setup' '
+test_expect_success SHA1 'short SHA-1 setup' '
 	test_when_finished "git checkout master" &&
 	git checkout --orphan collide &&
 	git rm -rf . &&
@@ -1173,7 +1181,7 @@
 	)
 '
 
-test_expect_success 'short SHA-1 collide' '
+test_expect_success SHA1 'short SHA-1 collide' '
 	test_when_finished "reset_rebase && git checkout master" &&
 	git checkout collide &&
 	(
@@ -1419,7 +1427,6 @@
 	)
 '
 
-SQ="'"
 test_expect_success 'rebase -i --gpg-sign=<key-id>' '
 	test_when_finished "test_might_fail git rebase --abort" &&
 	set_fake_editor &&
diff --git a/t/t3416-rebase-onto-threedots.sh b/t/t3416-rebase-onto-threedots.sh
index ddf2f64..9c25484 100755
--- a/t/t3416-rebase-onto-threedots.sh
+++ b/t/t3416-rebase-onto-threedots.sh
@@ -99,7 +99,64 @@
 	git checkout side &&
 	git reset --hard K &&
 
+	set_fake_editor &&
 	test_must_fail git rebase -i --onto master...side J
 '
 
+test_expect_success 'rebase --keep-base --onto incompatible' '
+	test_must_fail git rebase --keep-base --onto master...
+'
+
+test_expect_success 'rebase --keep-base --root incompatible' '
+	test_must_fail git rebase --keep-base --root
+'
+
+test_expect_success 'rebase --keep-base master from topic' '
+	git reset --hard &&
+	git checkout topic &&
+	git reset --hard G &&
+
+	git rebase --keep-base master &&
+	git rev-parse C >base.expect &&
+	git merge-base master HEAD >base.actual &&
+	test_cmp base.expect base.actual &&
+
+	git rev-parse HEAD~2 >actual &&
+	git rev-parse C^0 >expect &&
+	test_cmp expect actual
+'
+
+test_expect_success 'rebase --keep-base master from side' '
+	git reset --hard &&
+	git checkout side &&
+	git reset --hard K &&
+
+	test_must_fail git rebase --keep-base master
+'
+
+test_expect_success 'rebase -i --keep-base master from topic' '
+	git reset --hard &&
+	git checkout topic &&
+	git reset --hard G &&
+
+	set_fake_editor &&
+	EXPECT_COUNT=2 git rebase -i --keep-base master &&
+	git rev-parse C >base.expect &&
+	git merge-base master HEAD >base.actual &&
+	test_cmp base.expect base.actual &&
+
+	git rev-parse HEAD~2 >actual &&
+	git rev-parse C^0 >expect &&
+	test_cmp expect actual
+'
+
+test_expect_success 'rebase -i --keep-base master from side' '
+	git reset --hard &&
+	git checkout side &&
+	git reset --hard K &&
+
+	set_fake_editor &&
+	test_must_fail git rebase -i --keep-base master
+'
+
 test_done
diff --git a/t/t3418-rebase-continue.sh b/t/t3418-rebase-continue.sh
index 4eff14d..7a2da97 100755
--- a/t/t3418-rebase-continue.sh
+++ b/t/t3418-rebase-continue.sh
@@ -120,6 +120,20 @@
 	git rebase --continue
 '
 
+test_expect_success 'rebase -r passes merge strategy options correctly' '
+	rm -fr .git/rebase-* &&
+	git reset --hard commit-new-file-F3-on-topic-branch &&
+	test_commit merge-theirs &&
+	git reset --hard HEAD^ &&
+	test_commit some-other-commit &&
+	test_tick &&
+	git merge --no-ff merge-theirs &&
+	FAKE_LINES="1 3 edit 4 5 7 8 9" git rebase -i -f -r -m \
+		-s recursive --strategy-option=theirs HEAD~2 &&
+	test_commit force-change-ours &&
+	git rebase --continue
+'
+
 test_expect_success '--skip after failed fixup cleans commit message' '
 	test_when_finished "test_might_fail git rebase --abort" &&
 	git checkout -b with-conflicting-fixup &&
diff --git a/t/t3420-rebase-autostash.sh b/t/t3420-rebase-autostash.sh
index b8f4d03..5f7e73c 100755
--- a/t/t3420-rebase-autostash.sh
+++ b/t/t3420-rebase-autostash.sh
@@ -37,7 +37,6 @@
 create_expected_success_am () {
 	cat >expected <<-EOF
 	$(grep "^Created autostash: [0-9a-f][0-9a-f]*\$" actual)
-	HEAD is now at $(git rev-parse --short feature-branch) third commit
 	First, rewinding head to replay your work on top of it...
 	Applying: second commit
 	Applying: third commit
@@ -48,7 +47,6 @@
 create_expected_success_interactive () {
 	q_to_cr >expected <<-EOF
 	$(grep "^Created autostash: [0-9a-f][0-9a-f]*\$" actual)
-	HEAD is now at $(git rev-parse --short feature-branch) third commit
 	Applied autostash.
 	Successfully rebased and updated refs/heads/rebased-feature-branch.
 	EOF
@@ -57,7 +55,6 @@
 create_expected_failure_am () {
 	cat >expected <<-EOF
 	$(grep "^Created autostash: [0-9a-f][0-9a-f]*\$" actual)
-	HEAD is now at $(git rev-parse --short feature-branch) third commit
 	First, rewinding head to replay your work on top of it...
 	Applying: second commit
 	Applying: third commit
@@ -70,7 +67,6 @@
 create_expected_failure_interactive () {
 	cat >expected <<-EOF
 	$(grep "^Created autostash: [0-9a-f][0-9a-f]*\$" actual)
-	HEAD is now at $(git rev-parse --short feature-branch) third commit
 	Applying autostash resulted in conflicts.
 	Your changes are safe in the stash.
 	You can run "git stash pop" or "git stash drop" at any time.
@@ -306,4 +302,12 @@
 	test unchanged-branch = "$(git rev-parse --abbrev-ref HEAD)"
 '
 
+test_expect_success 'never change active branch' '
+	git checkout -b not-the-feature-branch unrelated-onto-branch &&
+	test_when_finished "git reset --hard && git checkout master" &&
+	echo changed >file0 &&
+	git rebase --autostash not-the-feature-branch feature-branch &&
+	test_cmp_rev not-the-feature-branch unrelated-onto-branch
+'
+
 test_done
diff --git a/t/t3421-rebase-topology-linear.sh b/t/t3421-rebase-topology-linear.sh
index 7274dca..b847064 100755
--- a/t/t3421-rebase-topology-linear.sh
+++ b/t/t3421-rebase-topology-linear.sh
@@ -31,6 +31,16 @@
 test_run_rebase success -i
 test_have_prereq !REBASE_P || test_run_rebase success -p
 
+test_expect_success 'setup branches and remote tracking' '
+	git tag -l >tags &&
+	for tag in $(cat tags)
+	do
+		git branch branch-$tag $tag || return 1
+	done &&
+	git remote add origin "file://$PWD" &&
+	git fetch origin
+'
+
 test_run_rebase () {
 	result=$1
 	shift
@@ -57,6 +67,7 @@
 	"
 }
 test_run_rebase success ''
+test_run_rebase success --fork-point
 test_run_rebase success -m
 test_run_rebase success -i
 test_have_prereq !REBASE_P || test_run_rebase failure -p
@@ -64,6 +75,23 @@
 test_run_rebase () {
 	result=$1
 	shift
+	test_expect_$result "rebase $* -f rewrites even if remote upstream is an ancestor" "
+		reset_rebase &&
+		git rebase $* -f branch-b branch-e &&
+		! test_cmp_rev branch-e origin/branch-e &&
+		test_cmp_rev branch-b HEAD~2 &&
+		test_linear_range 'd e' branch-b..
+	"
+}
+test_run_rebase success ''
+test_run_rebase success --fork-point
+test_run_rebase success -m
+test_run_rebase success -i
+test_have_prereq !REBASE_P || test_run_rebase success -p
+
+test_run_rebase () {
+	result=$1
+	shift
 	test_expect_$result "rebase $* fast-forwards from ancestor of upstream" "
 		reset_rebase &&
 		git rebase $* e b &&
@@ -71,6 +99,7 @@
 	"
 }
 test_run_rebase success ''
+test_run_rebase success --fork-point
 test_run_rebase success -m
 test_run_rebase success -i
 test_have_prereq !REBASE_P || test_run_rebase success -p
diff --git a/t/t3422-rebase-incompatible-options.sh b/t/t3422-rebase-incompatible-options.sh
index a5868ea..50e7960 100755
--- a/t/t3422-rebase-incompatible-options.sh
+++ b/t/t3422-rebase-incompatible-options.sh
@@ -76,14 +76,4 @@
 	test_must_fail git rebase --preserve-merges --rebase-merges A
 '
 
-test_expect_success '--rebase-merges incompatible with --strategy' '
-	git checkout B^0 &&
-	test_must_fail git rebase --rebase-merges -s resolve A
-'
-
-test_expect_success '--rebase-merges incompatible with --strategy-option' '
-	git checkout B^0 &&
-	test_must_fail git rebase --rebase-merges -Xignore-space-change A
-'
-
 test_done
diff --git a/t/t3427-rebase-subtree.sh b/t/t3427-rebase-subtree.sh
index d864052..bec48e6 100755
--- a/t/t3427-rebase-subtree.sh
+++ b/t/t3427-rebase-subtree.sh
@@ -11,113 +11,99 @@
 	git log --pretty=format:%s -1 "$1"
 }
 
+# There are a few bugs in the rebase with regards to the subtree strategy, and
+# this test script tries to document them.  First, the following commit history
+# is generated (the onelines are shown, time flows from left to right):
+#
+# master1 - master2 - master3
+#                             \
+# README ---------------------- Add subproject master - master4 - files_subtree/master5
+#
+# Where the merge moves the files master[123].t into the subdirectory
+# files_subtree/ and master4 as well as files_subtree/master5 add files to that
+# directory directly.
+#
+# Then, in subsequent test cases, `git filter-branch` is used to distill just
+# the commits that touch files_subtree/. To give it a final pre-rebase touch,
+# an empty commit is added on top. The pre-rebase commit history looks like
+# this:
+#
+# Add subproject master - master4 - files_subtree/master5 - Empty commit
+#
+# where the root commit adds three files: master1.t, master2.t and master3.t.
+#
+# This commit history is then rebased onto `master3` with the
+# `-Xsubtree=files_subtree` option in three different ways:
+#
+# 1. using `--preserve-merges`
+# 2. using `--preserve-merges` and --keep-empty
+# 3. without specifying a rebase backend
+
 test_expect_success 'setup' '
 	test_commit README &&
-	mkdir files &&
-	(
-		cd files &&
-		git init &&
-		test_commit master1 &&
-		test_commit master2 &&
-		test_commit master3
-	) &&
-	git fetch files master &&
-	git branch files-master FETCH_HEAD &&
-	git read-tree --prefix=files_subtree files-master &&
-	git checkout -- files_subtree &&
-	tree=$(git write-tree) &&
-	head=$(git rev-parse HEAD) &&
-	rev=$(git rev-parse --verify files-master^0) &&
-	commit=$(git commit-tree -p $head -p $rev -m "Add subproject master" $tree) &&
-	git update-ref HEAD $commit &&
-	(
-		cd files_subtree &&
-		test_commit master4
-	) &&
-	test_commit files_subtree/master5
+
+	git init files &&
+	test_commit -C files master1 &&
+	test_commit -C files master2 &&
+	test_commit -C files master3 &&
+
+	: perform subtree merge into files_subtree/ &&
+	git fetch files refs/heads/master:refs/heads/files-master &&
+	git merge -s ours --no-commit --allow-unrelated-histories \
+		files-master &&
+	git read-tree --prefix=files_subtree -u files-master &&
+	git commit -m "Add subproject master" &&
+
+	: add two extra commits to rebase &&
+	test_commit -C files_subtree master4 &&
+	test_commit files_subtree/master5 &&
+
+	git checkout -b to-rebase &&
+	git fast-export --no-data HEAD -- files_subtree/ |
+		sed -e "s%\([0-9a-f]\{40\} \)files_subtree/%\1%" |
+		git fast-import --force --quiet &&
+	git reset --hard &&
+	git commit -m "Empty commit" --allow-empty
 '
 
 # FAILURE: Does not preserve master4.
-test_expect_failure REBASE_P \
-	'Rebase -Xsubtree --preserve-merges --onto commit 4' '
+test_expect_failure REBASE_P 'Rebase -Xsubtree --preserve-merges --onto commit' '
 	reset_rebase &&
-	git checkout -b rebase-preserve-merges-4 master &&
-	git filter-branch --prune-empty -f --subdirectory-filter files_subtree &&
-	git commit -m "Empty commit" --allow-empty &&
+	git checkout -b rebase-preserve-merges to-rebase &&
 	git rebase -Xsubtree=files_subtree --preserve-merges --onto files-master master &&
-	verbose test "$(commit_message HEAD~)" = "files_subtree/master4"
-'
-
-# FAILURE: Does not preserve master5.
-test_expect_failure REBASE_P \
-	'Rebase -Xsubtree --preserve-merges --onto commit 5' '
-	reset_rebase &&
-	git checkout -b rebase-preserve-merges-5 master &&
-	git filter-branch --prune-empty -f --subdirectory-filter files_subtree &&
-	git commit -m "Empty commit" --allow-empty &&
-	git rebase -Xsubtree=files_subtree --preserve-merges --onto files-master master &&
+	verbose test "$(commit_message HEAD~)" = "master4" &&
 	verbose test "$(commit_message HEAD)" = "files_subtree/master5"
 '
 
 # FAILURE: Does not preserve master4.
-test_expect_failure REBASE_P \
-	'Rebase -Xsubtree --keep-empty --preserve-merges --onto commit 4' '
+test_expect_failure REBASE_P 'Rebase -Xsubtree --keep-empty --preserve-merges --onto commit' '
 	reset_rebase &&
-	git checkout -b rebase-keep-empty-4 master &&
-	git filter-branch --prune-empty -f --subdirectory-filter files_subtree &&
-	git commit -m "Empty commit" --allow-empty &&
+	git checkout -b rebase-keep-empty to-rebase &&
 	git rebase -Xsubtree=files_subtree --keep-empty --preserve-merges --onto files-master master &&
-	verbose test "$(commit_message HEAD~2)" = "files_subtree/master4"
-'
-
-# FAILURE: Does not preserve master5.
-test_expect_failure REBASE_P \
-	'Rebase -Xsubtree --keep-empty --preserve-merges --onto commit 5' '
-	reset_rebase &&
-	git checkout -b rebase-keep-empty-5 master &&
-	git filter-branch --prune-empty -f --subdirectory-filter files_subtree &&
-	git commit -m "Empty commit" --allow-empty &&
-	git rebase -Xsubtree=files_subtree --keep-empty --preserve-merges --onto files-master master &&
-	verbose test "$(commit_message HEAD~)" = "files_subtree/master5"
-'
-
-# FAILURE: Does not preserve Empty.
-test_expect_failure REBASE_P \
-	'Rebase -Xsubtree --keep-empty --preserve-merges --onto empty commit' '
-	reset_rebase &&
-	git checkout -b rebase-keep-empty-empty master &&
-	git filter-branch --prune-empty -f --subdirectory-filter files_subtree &&
-	git commit -m "Empty commit" --allow-empty &&
-	git rebase -Xsubtree=files_subtree --keep-empty --preserve-merges --onto files-master master &&
+	verbose test "$(commit_message HEAD~2)" = "master4" &&
+	verbose test "$(commit_message HEAD~)" = "files_subtree/master5" &&
 	verbose test "$(commit_message HEAD)" = "Empty commit"
 '
 
-# FAILURE: fatal: Could not parse object
-test_expect_failure 'Rebase -Xsubtree --onto commit 4' '
+test_expect_success 'Rebase -Xsubtree --keep-empty --onto commit' '
 	reset_rebase &&
-	git checkout -b rebase-onto-4 master &&
-	git filter-branch --prune-empty -f --subdirectory-filter files_subtree &&
-	git commit -m "Empty commit" --allow-empty &&
-	git rebase -Xsubtree=files_subtree --onto files-master master &&
-	verbose test "$(commit_message HEAD~2)" = "files_subtree/master4"
+	git checkout -b rebase-onto to-rebase &&
+	test_must_fail git rebase -Xsubtree=files_subtree --keep-empty --onto files-master master &&
+	: first pick results in no changes &&
+	git rebase --continue &&
+	verbose test "$(commit_message HEAD~2)" = "master4" &&
+	verbose test "$(commit_message HEAD~)" = "files_subtree/master5" &&
+	verbose test "$(commit_message HEAD)" = "Empty commit"
 '
 
-# FAILURE: fatal: Could not parse object
-test_expect_failure 'Rebase -Xsubtree --onto commit 5' '
+test_expect_success 'Rebase -Xsubtree --keep-empty --rebase-merges --onto commit' '
 	reset_rebase &&
-	git checkout -b rebase-onto-5 master &&
-	git filter-branch --prune-empty -f --subdirectory-filter files_subtree &&
-	git commit -m "Empty commit" --allow-empty &&
-	git rebase -Xsubtree=files_subtree --onto files-master master &&
-	verbose test "$(commit_message HEAD~)" = "files_subtree/master5"
-'
-# FAILURE: fatal: Could not parse object
-test_expect_failure 'Rebase -Xsubtree --onto empty commit' '
-	reset_rebase &&
-	git checkout -b rebase-onto-empty master &&
-	git filter-branch --prune-empty -f --subdirectory-filter files_subtree &&
-	git commit -m "Empty commit" --allow-empty &&
-	git rebase -Xsubtree=files_subtree --onto files-master master &&
+	git checkout -b rebase-merges-onto to-rebase &&
+	test_must_fail git rebase -Xsubtree=files_subtree --keep-empty --rebase-merges --onto files-master --root &&
+	: first pick results in no changes &&
+	git rebase --continue &&
+	verbose test "$(commit_message HEAD~2)" = "master4" &&
+	verbose test "$(commit_message HEAD~)" = "files_subtree/master5" &&
 	verbose test "$(commit_message HEAD)" = "Empty commit"
 '
 
diff --git a/t/t3429-rebase-edit-todo.sh b/t/t3429-rebase-edit-todo.sh
index 76f6d30..8739cb6 100755
--- a/t/t3429-rebase-edit-todo.sh
+++ b/t/t3429-rebase-edit-todo.sh
@@ -3,9 +3,15 @@
 test_description='rebase should reread the todo file if an exec modifies it'
 
 . ./test-lib.sh
+. "$TEST_DIRECTORY"/lib-rebase.sh
+
+test_expect_success 'setup' '
+	test_commit first file &&
+	test_commit second file &&
+	test_commit third file
+'
 
 test_expect_success 'rebase exec modifies rebase-todo' '
-	test_commit initial &&
 	todo=.git/rebase-merge/git-rebase-todo &&
 	git rebase HEAD -x "echo exec touch F >>$todo" &&
 	test -e F
@@ -33,4 +39,17 @@
 	git rebase HEAD -x "./append-todo.sh 5 6"
 '
 
+test_expect_success 'todo is re-read after reword and squash' '
+	write_script reword-editor.sh <<-\EOS &&
+	GIT_SEQUENCE_EDITOR="echo \"exec echo $(cat file) >>actual\" >>" \
+		git rebase --edit-todo
+	EOS
+
+	test_write_lines first third >expected &&
+	set_fake_editor &&
+	GIT_SEQUENCE_EDITOR="$EDITOR" FAKE_LINES="reword 1 squash 2 fixup 3" \
+		GIT_EDITOR=./reword-editor.sh git rebase -i --root third &&
+	test_cmp expected actual
+'
+
 test_done
diff --git a/t/t3430-rebase-merges.sh b/t/t3430-rebase-merges.sh
index 7b6c484..9efcf48 100755
--- a/t/t3430-rebase-merges.sh
+++ b/t/t3430-rebase-merges.sh
@@ -37,20 +37,27 @@
 	test_commit A &&
 	git checkout -b first &&
 	test_commit B &&
+	b=$(git rev-parse --short HEAD) &&
 	git checkout master &&
 	test_commit C &&
+	c=$(git rev-parse --short HEAD) &&
 	test_commit D &&
+	d=$(git rev-parse --short HEAD) &&
 	git merge --no-commit B &&
 	test_tick &&
 	git commit -m E &&
 	git tag -m E E &&
+	e=$(git rev-parse --short HEAD) &&
 	git checkout -b second C &&
 	test_commit F &&
+	f=$(git rev-parse --short HEAD) &&
 	test_commit G &&
+	g=$(git rev-parse --short HEAD) &&
 	git checkout master &&
 	git merge --no-commit G &&
 	test_tick &&
 	git commit -m H &&
+	h=$(git rev-parse --short HEAD) &&
 	git tag -m H H &&
 	git checkout A &&
 	test_commit conflicting-G G.t
@@ -93,24 +100,24 @@
 '
 
 test_expect_success 'generate correct todo list' '
-	cat >expect <<-\EOF &&
+	cat >expect <<-EOF &&
 	label onto
 
 	reset onto
-	pick d9df450 B
+	pick $b B
 	label E
 
 	reset onto
-	pick 5dee784 C
+	pick $c C
 	label branch-point
-	pick ca2c861 F
-	pick 088b00a G
+	pick $f F
+	pick $g G
 	label H
 
 	reset branch-point # C
-	pick 12bd07b D
-	merge -C 2051b56 E # E
-	merge -C 233d48a H # H
+	pick $d D
+	merge -C $e E # E
+	merge -C $h H # H
 
 	EOF
 
@@ -151,7 +158,6 @@
 	test_path_is_file .git/rebase-merge/patch
 '
 
-SQ="'"
 test_expect_success 'failed `merge <branch>` does not crash' '
 	test_when_finished "test_might_fail git rebase --abort" &&
 	git checkout conflicting-G &&
@@ -441,4 +447,25 @@
 	test_path_is_missing .git/MERGE_HEAD
 '
 
+test_expect_success '--rebase-merges with strategies' '
+	git checkout -b with-a-strategy F &&
+	test_tick &&
+	git merge -m "Merge conflicting-G" conflicting-G &&
+
+	: first, test with a merge strategy option &&
+	git rebase -ir -Xtheirs G &&
+	echo conflicting-G >expect &&
+	test_cmp expect G.t &&
+
+	: now, try with a merge strategy other than recursive &&
+	git reset --hard @{1} &&
+	write_script git-merge-override <<-\EOF &&
+	echo overridden$1 >>G.t
+	git add G.t
+	EOF
+	PATH="$PWD:$PATH" git rebase -ir -s override -Xxopt G &&
+	test_write_lines G overridden--xopt >expect &&
+	test_cmp expect G.t
+'
+
 test_done
diff --git a/t/t3431-rebase-fork-point.sh b/t/t3431-rebase-fork-point.sh
new file mode 100755
index 0000000..78851b9
--- /dev/null
+++ b/t/t3431-rebase-fork-point.sh
@@ -0,0 +1,57 @@
+#!/bin/sh
+#
+# Copyright (c) 2019 Denton Liu
+#
+
+test_description='git rebase --fork-point test'
+
+. ./test-lib.sh
+
+# A---B---D---E    (master)
+#      \
+#       C*---F---G (side)
+#
+# C was formerly part of master but master was rewound to remove C
+#
+test_expect_success setup '
+	test_commit A &&
+	test_commit B &&
+	test_commit C &&
+	git branch -t side &&
+	git reset --hard HEAD^ &&
+	test_commit D &&
+	test_commit E &&
+	git checkout side &&
+	test_commit F &&
+	test_commit G
+'
+
+test_rebase () {
+	expected="$1" &&
+	shift &&
+	test_expect_success "git rebase $*" "
+		git checkout master &&
+		git reset --hard E &&
+		git checkout side &&
+		git reset --hard G &&
+		git rebase $* &&
+		test_write_lines $expected >expect &&
+		git log --pretty=%s >actual &&
+		test_cmp expect actual
+	"
+}
+
+test_rebase 'G F E D B A'
+test_rebase 'G F D B A' --onto D
+test_rebase 'G F B A' --keep-base
+test_rebase 'G F C E D B A' --no-fork-point
+test_rebase 'G F C D B A' --no-fork-point --onto D
+test_rebase 'G F C B A' --no-fork-point --keep-base
+test_rebase 'G F E D B A' --fork-point refs/heads/master
+test_rebase 'G F D B A' --fork-point --onto D refs/heads/master
+test_rebase 'G F B A' --fork-point --keep-base refs/heads/master
+test_rebase 'G F C E D B A' refs/heads/master
+test_rebase 'G F C D B A' --onto D refs/heads/master
+test_rebase 'G F C B A' --keep-base refs/heads/master
+
+test_done
diff --git a/t/t3432-rebase-fast-forward.sh b/t/t3432-rebase-fast-forward.sh
new file mode 100755
index 0000000..034ffc7
--- /dev/null
+++ b/t/t3432-rebase-fast-forward.sh
@@ -0,0 +1,125 @@
+#!/bin/sh
+#
+# Copyright (c) 2019 Denton Liu
+#
+
+test_description='ensure rebase fast-forwards commits when possible'
+
+. ./test-lib.sh
+
+test_expect_success setup '
+	test_commit A &&
+	test_commit B &&
+	test_commit C &&
+	test_commit D &&
+	git checkout -t -b side
+'
+
+test_rebase_same_head () {
+	status_n="$1" &&
+	shift &&
+	what_n="$1" &&
+	shift &&
+	cmp_n="$1" &&
+	shift &&
+	status_f="$1" &&
+	shift &&
+	what_f="$1" &&
+	shift &&
+	cmp_f="$1" &&
+	shift &&
+	test_rebase_same_head_ $status_n $what_n $cmp_n "" "$*" &&
+	test_rebase_same_head_ $status_f $what_f $cmp_f " --no-ff" "$*"
+}
+
+test_rebase_same_head_ () {
+	status="$1" &&
+	shift &&
+	what="$1" &&
+	shift &&
+	cmp="$1" &&
+	shift &&
+	flag="$1"
+	shift &&
+	test_expect_$status "git rebase$flag $* with $changes is $what with $cmp HEAD" "
+		oldhead=\$(git rev-parse HEAD) &&
+		test_when_finished 'git reset --hard \$oldhead' &&
+		git rebase$flag $* >stdout &&
+		if test $what = work
+		then
+			# Must check this case first, for 'is up to
+			# date, rebase forced[...]rewinding head' cases
+			test_i18ngrep 'rewinding head' stdout
+		elif test $what = noop
+		then
+			test_i18ngrep 'is up to date' stdout &&
+			test_i18ngrep ! 'rebase forced' stdout
+		elif test $what = noop-force
+		then
+			test_i18ngrep 'is up to date, rebase forced' stdout
+		fi &&
+		newhead=\$(git rev-parse HEAD) &&
+		if test $cmp = same
+		then
+			test_cmp_rev \$oldhead \$newhead
+		elif test $cmp = diff
+		then
+			! test_cmp_rev \$oldhead \$newhead
+		fi
+	"
+}
+
+changes='no changes'
+test_rebase_same_head success noop same success work same
+test_rebase_same_head success noop same success noop-force same master
+test_rebase_same_head success noop same success noop-force diff --onto B B
+test_rebase_same_head success noop same success noop-force diff --onto B... B
+test_rebase_same_head success noop same success noop-force same --onto master... master
+test_rebase_same_head success noop same success noop-force same --keep-base master
+test_rebase_same_head success noop same success noop-force same --keep-base
+test_rebase_same_head success noop same success noop-force same --no-fork-point
+test_rebase_same_head success noop same success noop-force same --keep-base --no-fork-point
+test_rebase_same_head success noop same success work same --fork-point master
+test_rebase_same_head success noop same success work diff --fork-point --onto B B
+test_rebase_same_head success noop same success work diff --fork-point --onto B... B
+test_rebase_same_head success noop same success work same --fork-point --onto master... master
+test_rebase_same_head success noop same success work same --keep-base --keep-base master
+
+test_expect_success 'add work same to side' '
+	test_commit E
+'
+
+changes='our changes'
+test_rebase_same_head success noop same success work same
+test_rebase_same_head success noop same success noop-force same master
+test_rebase_same_head success noop same success noop-force diff --onto B B
+test_rebase_same_head success noop same success noop-force diff --onto B... B
+test_rebase_same_head success noop same success noop-force same --onto master... master
+test_rebase_same_head success noop same success noop-force same --keep-base master
+test_rebase_same_head success noop same success noop-force same --keep-base
+test_rebase_same_head success noop same success noop-force same --no-fork-point
+test_rebase_same_head success noop same success noop-force same --keep-base --no-fork-point
+test_rebase_same_head success noop same success work same --fork-point master
+test_rebase_same_head success noop same success work diff --fork-point --onto B B
+test_rebase_same_head success noop same success work diff --fork-point --onto B... B
+test_rebase_same_head success noop same success work same --fork-point --onto master... master
+test_rebase_same_head success noop same success work same --fork-point --keep-base master
+
+test_expect_success 'add work same to upstream' '
+	git checkout master &&
+	test_commit F &&
+	git checkout side
+'
+
+changes='our and their changes'
+test_rebase_same_head success noop same success noop-force diff --onto B B
+test_rebase_same_head success noop same success noop-force diff --onto B... B
+test_rebase_same_head success noop same success work diff --onto master... master
+test_rebase_same_head success noop same success work diff --keep-base master
+test_rebase_same_head success noop same success work diff --keep-base
+test_rebase_same_head failure work same success work diff --fork-point --onto B B
+test_rebase_same_head failure work same success work diff --fork-point --onto B... B
+test_rebase_same_head success noop same success work diff --fork-point --onto master... master
+test_rebase_same_head success noop same success work diff --fork-point --keep-base master
+
+test_done
diff --git a/t/t3506-cherry-pick-ff.sh b/t/t3506-cherry-pick-ff.sh
index 127dd00..9d5adbc 100755
--- a/t/t3506-cherry-pick-ff.sh
+++ b/t/t3506-cherry-pick-ff.sh
@@ -16,7 +16,11 @@
 	git add file1 &&
 	test_tick &&
 	git commit -m "second" &&
-	git tag second
+	git tag second &&
+	test_oid_cache <<-EOF
+	cp_ff sha1:1df192cd8bc58a2b275d842cede4d221ad9000d1
+	cp_ff sha256:e70d6b7fc064bddb516b8d512c9057094b96ce6ff08e12080acc4fe7f1d60a1d
+	EOF
 '
 
 test_expect_success 'cherry-pick using --ff fast forwards' '
@@ -102,7 +106,7 @@
 	git add file2 &&
 	git commit --amend -m "file2" &&
 	git cherry-pick --ff first &&
-	test "$(git rev-parse --verify HEAD)" = "1df192cd8bc58a2b275d842cede4d221ad9000d1"
+	test "$(git rev-parse --verify HEAD)" = "$(test_oid cp_ff)"
 '
 
 test_expect_success 'cherry-pick --ff on unborn branch' '
diff --git a/t/t3600-rm.sh b/t/t3600-rm.sh
index 66282a7..8c8cca5 100755
--- a/t/t3600-rm.sh
+++ b/t/t3600-rm.sh
@@ -240,12 +240,14 @@
 '
 
 test_expect_success 'choking "git rm" should not let it die with cruft' '
+	test_oid_init &&
 	git reset -q --hard &&
 	test_when_finished "rm -f .git/index.lock && git reset -q --hard" &&
 	i=0 &&
+	hash=$(test_oid deadbeef) &&
 	while test $i -lt 12000
 	do
-		echo "100644 1234567890123456789012345678901234567890 0	some-file-$i"
+		echo "100644 $hash 0	some-file-$i"
 		i=$(( $i + 1 ))
 	done | git update-index --index-info &&
 	git rm -n "some-file-*" | : &&
diff --git a/t/t3701-add-interactive.sh b/t/t3701-add-interactive.sh
index 69991a3..d50e165 100755
--- a/t/t3701-add-interactive.sh
+++ b/t/t3701-add-interactive.sh
@@ -314,7 +314,7 @@
 	git commit -am "clear local changes" &&
 	git apply patch &&
 	printf "%s\n" s y y | git add -p file 2>error |
-		sed -n -e "s/^Stage this hunk[^@]*\(@@ .*\)/\1/" \
+		sed -n -e "s/^([1-2]\/[1-2]) Stage this hunk[^@]*\(@@ .*\)/\1/" \
 		       -e "/^[-+@ \\\\]"/p  >output &&
 	test_must_be_empty error &&
 	git diff --cached >diff &&
diff --git a/t/t3800-mktag.sh b/t/t3800-mktag.sh
index 8eb4794..64dcc5e 100755
--- a/t/t3800-mktag.sh
+++ b/t/t3800-mktag.sh
@@ -23,6 +23,7 @@
 # first create a commit, so we have a valid object/type
 # for the tag.
 test_expect_success 'setup' '
+	test_oid_init &&
 	echo Hello >A &&
 	git update-index --add A &&
 	git commit -m "Initial commit" &&
@@ -69,28 +70,28 @@
 #  4. type line label check
 
 cat >tag.sig <<EOF
-object 779e9b33986b1c2670fff52c5067603117b3e895
+object $head
 xxxx tag
 tag mytag
 tagger . <> 0 +0000
 
 EOF
 
-check_verify_failure '"type" line label check' '^error: char47: .*"\\ntype "$'
+check_verify_failure '"type" line label check' '^error: char.*: .*"\\ntype "$'
 
 ############################################################
 #  5. type line eol check
 
-echo "object 779e9b33986b1c2670fff52c5067603117b3e895" >tag.sig
+echo "object $head" >tag.sig
 printf "type tagsssssssssssssssssssssssssssssss" >>tag.sig
 
-check_verify_failure '"type" line eol check' '^error: char48: .*"\\n"$'
+check_verify_failure '"type" line eol check' '^error: char.*: .*"\\n"$'
 
 ############################################################
 #  6. tag line label check #1
 
 cat >tag.sig <<EOF
-object 779e9b33986b1c2670fff52c5067603117b3e895
+object $head
 type tag
 xxx mytag
 tagger . <> 0 +0000
@@ -98,37 +99,37 @@
 EOF
 
 check_verify_failure '"tag" line label check #1' \
-	'^error: char57: no "tag " found$'
+	'^error: char.*: no "tag " found$'
 
 ############################################################
 #  7. tag line label check #2
 
 cat >tag.sig <<EOF
-object 779e9b33986b1c2670fff52c5067603117b3e895
+object $head
 type taggggggggggggggggggggggggggggggg
 tag
 EOF
 
 check_verify_failure '"tag" line label check #2' \
-	'^error: char87: no "tag " found$'
+	'^error: char.*: no "tag " found$'
 
 ############################################################
 #  8. type line type-name length check
 
 cat >tag.sig <<EOF
-object 779e9b33986b1c2670fff52c5067603117b3e895
+object $head
 type taggggggggggggggggggggggggggggggg
 tag mytag
 EOF
 
 check_verify_failure '"type" line type-name length check' \
-	'^error: char53: type too long$'
+	'^error: char.*: type too long$'
 
 ############################################################
 #  9. verify object (SHA1/type) check
 
 cat >tag.sig <<EOF
-object 779e9b33986b1c2670fff52c5067603117b3e895
+object $(test_oid deadbeef)
 type tagggg
 tag mytag
 tagger . <> 0 +0000
@@ -150,7 +151,7 @@
 EOF
 
 check_verify_failure 'verify tag-name check' \
-	'^error: char67: could not verify tag name$'
+	'^error: char.*: could not verify tag name$'
 
 ############################################################
 # 11. tagger line label check #1
@@ -164,7 +165,7 @@
 EOF
 
 check_verify_failure '"tagger" line label check #1' \
-	'^error: char70: could not find "tagger "$'
+	'^error: char.*: could not find "tagger "$'
 
 ############################################################
 # 12. tagger line label check #2
@@ -179,7 +180,7 @@
 EOF
 
 check_verify_failure '"tagger" line label check #2' \
-	'^error: char70: could not find "tagger "$'
+	'^error: char.*: could not find "tagger "$'
 
 ############################################################
 # 13. disallow missing tag author name
@@ -194,7 +195,7 @@
 EOF
 
 check_verify_failure 'disallow missing tag author name' \
-	'^error: char77: missing tagger name$'
+	'^error: char.*: missing tagger name$'
 
 ############################################################
 # 14. disallow missing tag author name
@@ -209,7 +210,7 @@
 EOF
 
 check_verify_failure 'disallow malformed tagger' \
-	'^error: char77: malformed tagger field$'
+	'^error: char.*: malformed tagger field$'
 
 ############################################################
 # 15. allow empty tag email
@@ -238,7 +239,7 @@
 EOF
 
 check_verify_failure 'disallow spaces in tag email' \
-	'^error: char77: malformed tagger field$'
+	'^error: char.*: malformed tagger field$'
 
 ############################################################
 # 17. disallow missing tag timestamp
@@ -252,7 +253,7 @@
 EOF
 
 check_verify_failure 'disallow missing tag timestamp' \
-	'^error: char107: missing tag timestamp$'
+	'^error: char.*: missing tag timestamp$'
 
 ############################################################
 # 18. detect invalid tag timestamp1
@@ -266,7 +267,7 @@
 EOF
 
 check_verify_failure 'detect invalid tag timestamp1' \
-	'^error: char107: missing tag timestamp$'
+	'^error: char.*: missing tag timestamp$'
 
 ############################################################
 # 19. detect invalid tag timestamp2
@@ -280,7 +281,7 @@
 EOF
 
 check_verify_failure 'detect invalid tag timestamp2' \
-	'^error: char111: malformed tag timestamp$'
+	'^error: char.*: malformed tag timestamp$'
 
 ############################################################
 # 20. detect invalid tag timezone1
@@ -294,7 +295,7 @@
 EOF
 
 check_verify_failure 'detect invalid tag timezone1' \
-	'^error: char118: malformed tag timezone$'
+	'^error: char.*: malformed tag timezone$'
 
 ############################################################
 # 21. detect invalid tag timezone2
@@ -308,7 +309,7 @@
 EOF
 
 check_verify_failure 'detect invalid tag timezone2' \
-	'^error: char118: malformed tag timezone$'
+	'^error: char.*: malformed tag timezone$'
 
 ############################################################
 # 22. detect invalid tag timezone3
@@ -322,7 +323,7 @@
 EOF
 
 check_verify_failure 'detect invalid tag timezone3' \
-	'^error: char118: malformed tag timezone$'
+	'^error: char.*: malformed tag timezone$'
 
 ############################################################
 # 23. detect invalid header entry
@@ -337,7 +338,7 @@
 EOF
 
 check_verify_failure 'detect invalid header entry' \
-	'^error: char124: trailing garbage in tag header$'
+	'^error: char.*: trailing garbage in tag header$'
 
 ############################################################
 # 24. create valid tag
diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh
index b8e3378..580bfbd 100755
--- a/t/t3903-stash.sh
+++ b/t/t3903-stash.sh
@@ -7,6 +7,18 @@
 
 . ./test-lib.sh
 
+diff_cmp () {
+	for i in "$1" "$2"
+	do
+		sed -e 's/^index 0000000\.\.[0-9a-f]*/index 0000000..1234567/' \
+		-e 's/^index [0-9a-f]*\.\.[0-9a-f]*/index 1234567..89abcde/' \
+		-e 's/^index [0-9a-f]*,[0-9a-f]*\.\.[0-9a-f]*/index 1234567,7654321..89abcde/' \
+		"$i" >"$i.compare" || return 1
+	done &&
+	test_cmp "$1.compare" "$2.compare" &&
+	rm -f "$1.compare" "$2.compare"
+}
+
 test_expect_success 'stash some dirty working directory' '
 	echo 1 >file &&
 	git add file &&
@@ -36,7 +48,7 @@
 test_expect_success 'parents of stash' '
 	test $(git rev-parse stash^) = $(git rev-parse HEAD) &&
 	git diff stash^2..stash >output &&
-	test_cmp expect output
+	diff_cmp expect output
 '
 
 test_expect_success 'applying bogus stash does nothing' '
@@ -210,13 +222,13 @@
 	test refs/heads/stashbranch = $(git symbolic-ref HEAD) &&
 	test $(git rev-parse HEAD) = $(git rev-parse master^) &&
 	git diff --cached >output &&
-	test_cmp expect output &&
+	diff_cmp expect output &&
 	git diff >output &&
-	test_cmp expect1 output &&
+	diff_cmp expect1 output &&
 	git add file &&
 	git commit -m alternate\ second &&
 	git diff master..stashbranch >output &&
-	test_cmp output expect2 &&
+	diff_cmp output expect2 &&
 	test 0 = $(git stash list | wc -l)
 '
 
@@ -577,7 +589,7 @@
 	+bar
 	EOF
 	git stash show -p ${STASH_ID} >actual &&
-	test_cmp expected actual
+	diff_cmp expected actual
 '
 
 test_expect_success 'stash show - no stashes on stack, stash-like argument' '
@@ -609,7 +621,7 @@
 	+foo
 	EOF
 	git stash show -p ${STASH_ID} >actual &&
-	test_cmp expected actual
+	diff_cmp expected actual
 '
 
 test_expect_success 'stash show --patience shows diff' '
@@ -627,7 +639,7 @@
 	+foo
 	EOF
 	git stash show --patience ${STASH_ID} >actual &&
-	test_cmp expected actual
+	diff_cmp expected actual
 '
 
 test_expect_success 'drop: fail early if specified stash is not a stash ref' '
@@ -791,7 +803,7 @@
 	git diff-index --cached --quiet HEAD &&
 	test "$(git rev-parse stash^)" = "$(git rev-parse HEAD)" &&
 	git diff stash^..stash >output &&
-	test_cmp expect output
+	diff_cmp expect output
 '
 
 test_expect_success 'store called with invalid commit' '
@@ -847,7 +859,7 @@
 	+working
 	EOF
 	git stash list --format=%gd -p >actual &&
-	test_cmp expect actual
+	diff_cmp expect actual
 '
 
 test_expect_success 'stash list --cc shows combined diff' '
@@ -864,7 +876,7 @@
 	++working
 	EOF
 	git stash list --format=%gd -p --cc >actual &&
-	test_cmp expect actual
+	diff_cmp expect actual
 '
 
 test_expect_success 'stash is not confused by partial renames' '
@@ -1241,4 +1253,20 @@
 	test_path_is_missing to-remove
 '
 
+test_expect_success 'stash apply should succeed with unmodified file' '
+	echo base >file &&
+	git add file &&
+	git commit -m base &&
+
+	# now stash a modification
+	echo modified >file &&
+	git stash &&
+
+	# make the file stat dirty
+	cp file other &&
+	mv other file &&
+
+	git stash apply
+'
+
 test_done
diff --git a/t/t3906-stash-submodule.sh b/t/t3906-stash-submodule.sh
index d7219d6..b93d1d7 100755
--- a/t/t3906-stash-submodule.sh
+++ b/t/t3906-stash-submodule.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-test_description='stash apply can handle submodules'
+test_description='stash can handle submodules'
 
 . ./test-lib.sh
 . "$TEST_DIRECTORY"/lib-submodule-update.sh
@@ -21,4 +21,44 @@
 KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1
 test_submodule_switch "git_stash"
 
+setup_basic () {
+	test_when_finished "rm -rf main sub" &&
+	git init sub &&
+	(
+		cd sub &&
+		test_commit sub_file
+	) &&
+	git init main &&
+	(
+		cd main &&
+		git submodule add ../sub &&
+		test_commit main_file
+	)
+}
+
+test_expect_success 'stash push with submodule.recurse=true preserves dirty submodule worktree' '
+	setup_basic &&
+	(
+		cd main &&
+		git config submodule.recurse true &&
+		echo "x" >main_file.t &&
+		echo "y" >sub/sub_file.t &&
+		git stash push &&
+		test_must_fail git -C sub diff --quiet
+	)
+'
+
+test_expect_success 'stash push and pop with submodule.recurse=true preserves dirty submodule worktree' '
+	setup_basic &&
+	(
+		cd main &&
+		git config submodule.recurse true &&
+		echo "x" >main_file.t &&
+		echo "y" >sub/sub_file.t &&
+		git stash push &&
+		git stash pop &&
+		test_must_fail git -C sub diff --quiet
+	)
+'
+
 test_done
diff --git a/t/t3908-stash-in-worktree.sh b/t/t3908-stash-in-worktree.sh
new file mode 100755
index 0000000..2b2b366
--- /dev/null
+++ b/t/t3908-stash-in-worktree.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+#
+# Copyright (c) 2019 Johannes E Schindelin
+#
+
+test_description='Test git stash in a worktree'
+
+. ./test-lib.sh
+
+test_expect_success 'setup' '
+	test_commit initial &&
+	git worktree add wt &&
+	test_commit -C wt in-worktree
+'
+
+test_expect_success 'apply in subdirectory' '
+	mkdir wt/subdir &&
+	(
+		cd wt/subdir &&
+		echo modified >../initial.t &&
+		git stash &&
+		git stash apply >out
+	) &&
+	grep "\.\.\/initial\.t" wt/subdir/out
+'
+
+test_done
diff --git a/t/t4000-diff-format.sh b/t/t4000-diff-format.sh
index 8de36b7..e5116a7 100755
--- a/t/t4000-diff-format.sh
+++ b/t/t4000-diff-format.sh
@@ -78,7 +78,7 @@
 
 test_expect_success 'git diff-files --no-patch --patch-with-raw shows the patch and raw data' '
 	git diff-files --no-patch --patch-with-raw >actual &&
-	grep -q "^:100644 100755 .* 0000000000000000000000000000000000000000 M	path0\$" actual &&
+	grep -q "^:100644 100755 .* $ZERO_OID M	path0\$" actual &&
 	tail -n +4 actual >actual-patch &&
 	compare_diff_patch expected actual-patch
 '
diff --git a/t/t4002-diff-basic.sh b/t/t4002-diff-basic.sh
index 3a6c21e..cbcdd10 100755
--- a/t/t4002-diff-basic.sh
+++ b/t/t4002-diff-basic.sh
@@ -7,123 +7,272 @@
 
 '
 . ./test-lib.sh
+
 . "$TEST_DIRECTORY"/lib-read-tree-m-3way.sh
 
-cat >.test-plain-OA <<\EOF
-:000000 100644 0000000000000000000000000000000000000000 ccba72ad3888a3520b39efcf780b9ee64167535d A	AA
-:000000 100644 0000000000000000000000000000000000000000 7e426fb079479fd67f6d81f984e4ec649a44bc25 A	AN
-:100644 000000 bcc68ef997017466d5c9094bcf7692295f588c9a 0000000000000000000000000000000000000000 D	DD
-:000000 040000 0000000000000000000000000000000000000000 6d50f65d3bdab91c63444294d38f08aeff328e42 A	DF
-:100644 000000 141c1f1642328e4bc46a7d801a71da392e66791e 0000000000000000000000000000000000000000 D	DM
-:100644 000000 35abde1506ddf806572ff4d407bd06885d0f8ee9 0000000000000000000000000000000000000000 D	DN
-:000000 100644 0000000000000000000000000000000000000000 1d41122ebdd7a640f29d3c9cc4f9d70094374762 A	LL
-:100644 100644 03f24c8c4700babccfd28b654e7e8eac402ad6cd 103d9f89b50b9aad03054b579be5e7aa665f2d57 M	MD
-:100644 100644 b258508afb7ceb449981bd9d63d2d3e971bf8d34 b431b272d829ff3aa4d1a5085f4394ab4d3305b6 M	MM
-:100644 100644 bd084b0c27c7b6cc34f11d6d0509a29be3caf970 a716d58de4a570e0038f5c307bd8db34daea021f M	MN
-:100644 100644 40c959f984c8b89a2b02520d17f00d717f024397 2ac547ae9614a00d1b28275de608131f7a0e259f M	SS
-:100644 100644 4ac13458899ab908ef3b1128fa378daefc88d356 4c86f9a85fbc5e6804ee2e17a797538fbe785bca M	TT
-:040000 040000 7d670fdcdb9929f6c7dac196ff78689cd1c566a1 5e5f22072bb39f6e12cf663a57cb634c76eefb49 M	Z
+test_oid_init
+
+test_oid_cache <<\EOF
+aa_1 sha1:ccba72ad3888a3520b39efcf780b9ee64167535d
+aa_1 sha256:9febfbf18197819b2735c45291f138525d2476d59470f98239647544586ba403
+
+aa_2 sha1:6aa2b5335b16431a0ef71e5c0a28be69183cf6a2
+aa_2 sha256:6eaa3437de83f145a4aaa6ba355303075ade547b128ec6a2cd00a81ff7ce7a56
+
+an_1 sha1:7e426fb079479fd67f6d81f984e4ec649a44bc25
+an_1 sha256:8f92a0bec99e399a38e3bd0e1bf19fbf121e0160efb29b857df79d439f1c4536
+
+dd_1 sha1:bcc68ef997017466d5c9094bcf7692295f588c9a
+dd_1 sha256:07e17428b00639b85485d2b01083d219e2f3e3ba8579e9ca44e9cc8dd554d952
+
+df_1 sha1:6d50f65d3bdab91c63444294d38f08aeff328e42
+df_1 sha256:e367cecc27e9bf5451b1c65828cb21938d36a5f8e39c1b03ad6509cc36bb8e9d
+
+df_2 sha1:71420ab81e254145d26d6fc0cddee64c1acd4787
+df_2 sha256:0f0a86d10347ff6921d03a3c954679f3f1d14fa3d5cd82f57b32c09755f3a47d
+
+dfd1 sha1:68a6d8b91da11045cf4aa3a5ab9f2a781c701249
+dfd1 sha256:f3bd3265b02b6978ce86490d8ad026c573639c974b3de1d9faf30d8d5a77d3d5
+
+dm_1 sha1:141c1f1642328e4bc46a7d801a71da392e66791e
+dm_1 sha256:c89f8656e7b94e21ee5fbaf0e2149bbf783c51edbe2ce110349cac13059ee7ed
+
+dm_2 sha1:3c4d8de5fbad08572bab8e10eef8dbb264cf0231
+dm_2 sha256:83a572e37e0c94086294dae2cecc43d9131afd6f6c906e495c78972230b54988
+
+dn_1 sha1:35abde1506ddf806572ff4d407bd06885d0f8ee9
+dn_1 sha256:775d5852582070e620be63327bfa515fab8f71c7ac3e4f0c3cd6267b4377ba28
+
+ll_2 sha1:1d41122ebdd7a640f29d3c9cc4f9d70094374762
+ll_2 sha256:7917b4948a883cfed0a77d3d5a625dc8577d6ddcc3c6c3bbc56c4d4226a2246d
+
+md_1 sha1:03f24c8c4700babccfd28b654e7e8eac402ad6cd
+md_1 sha256:fc9f30369b978595ad685ba11ca9a17de0af16d79cd4b629975f4f1590033902
+
+md_2 sha1:103d9f89b50b9aad03054b579be5e7aa665f2d57
+md_2 sha256:fc78ec75275628762fe520479a6b2398dec295ce7aabcb1d15e5963c7b4e9317
+
+mm_1 sha1:b258508afb7ceb449981bd9d63d2d3e971bf8d34
+mm_1 sha256:a4b7847d228e900e3000285e240c20fd96f9dd41ce1445305f6eada126d4a04a
+
+mm_2 sha1:b431b272d829ff3aa4d1a5085f4394ab4d3305b6
+mm_2 sha256:3f8b83ea36aacf689bcf1a1290a9a8ed341564d32682ea6f76fea9a979186782
+
+mm_3 sha1:19989d4559aae417fedee240ccf2ba315ea4dc2b
+mm_3 sha256:71b3bfc5747ac033fff9ea0ab39ee453a3af2969890e75d6ef547b87544e2681
+
+mn_1 sha1:bd084b0c27c7b6cc34f11d6d0509a29be3caf970
+mn_1 sha256:47a67450583d7a329eb01a7c4ba644945af72c0ed2c7c95eb5a00d6e46d4d483
+
+mn_2 sha1:a716d58de4a570e0038f5c307bd8db34daea021f
+mn_2 sha256:f95104c1ebe27acb84bac25a7be98c71f6b8d3054b21f357a5be0c524ad97e08
+
+nm_1 sha1:c8f25781e8f1792e3e40b74225e20553041b5226
+nm_1 sha256:09baddc7afaa62e62e152c23c9c3ab94bf15a3894031e227e9be7fe68e1f4e49
+
+nm_2 sha1:cdb9a8c3da571502ac30225e9c17beccb8387983
+nm_2 sha256:58b5227956ac2d2a08d0efa513c0ae37430948b16791ea3869a1308dbf05536d
+
+na_1 sha1:15885881ea69115351c09b38371f0348a3fb8c67
+na_1 sha256:18e4fdd1670cd7968ee23d35bfd29e5418d56fb190c840094c1c57ceee0aad8f
+
+nd_1 sha1:a4e179e4291e5536a5e1c82e091052772d2c5a93
+nd_1 sha256:07dac9b01d00956ea0c65bd993d7de4864aeef2ed3cbb1255d9f1d949fcd6df6
+
+ss_1 sha1:40c959f984c8b89a2b02520d17f00d717f024397
+ss_1 sha256:50fc1b5df74d9910db2f9270993484235f15b69b75b01bcfb53e059289d14af9
+
+ss_2 sha1:2ac547ae9614a00d1b28275de608131f7a0e259f
+ss_2 sha256:a90f02e6044f1497d13db587d22ab12f90150a7d1e084afcf96065fab35ae2bc
+
+tt_1 sha1:4ac13458899ab908ef3b1128fa378daefc88d356
+tt_1 sha256:c53113c7dd5060e86b5b251428bd058f6726f66273c6a24bff1c61a04f498dd3
+
+tt_2 sha1:4c86f9a85fbc5e6804ee2e17a797538fbe785bca
+tt_2 sha256:0775f2a296129a7cf2862b46bc0e88c14d593f2773a3e3fb1c5193db6f5a7e77
+
+tt_3 sha1:c4e4a12231b9fa79a0053cb6077fcb21bb5b135a
+tt_3 sha256:47860f93cdd211f96443e0560f21c57ab6c2f4b0ac27ff03651a352e53fe8484
+
+z__1 sha1:7d670fdcdb9929f6c7dac196ff78689cd1c566a1
+z__1 sha256:44d0f37aff5e51cfcfdd1134c93a6419bcca7b9964f792ffcd5f9b4fcba1ee63
+
+z__2 sha1:5e5f22072bb39f6e12cf663a57cb634c76eefb49
+z__2 sha256:d29de162113190fed104eb5f010820cef4e315f89b9326e8497f7219fb737894
+
+z__3 sha1:1ba523955d5160681af65cb776411f574c1e8155
+z__3 sha256:07422d772b07794ab4369a5648e617719f89c2d2212cbeab05d97214b6471636
+
+zaa1 sha1:8acb8e9750e3f644bf323fcf3d338849db106c77
+zaa1 sha256:e79b029282c8abec2d9f3f7faceaf2a1405e02d1f368e66450ae66cf5b68d1f4
+
+zaa2 sha1:6c0b99286d0bce551ac4a7b3dff8b706edff3715
+zaa2 sha256:c82bd78c3e69ea1796e6b1a7a3ba45bb106c50e819296475b862123d3f5cc5a0
+
+zan1 sha1:087494262084cefee7ed484d20c8dc0580791272
+zan1 sha256:4b159eb3804d05599023dd074f771d06d02870f4ab24a7165add8ac3d703b8d3
+
+zdd1 sha1:879007efae624d2b1307214b24a956f0a8d686a8
+zdd1 sha256:eecfdd4d8092dd0363fb6d4548b54c6afc8982c3ed9b34e393f1d6a921d8eaa3
+
+zdm1 sha1:9b541b2275c06e3a7b13f28badf5294e2ae63df4
+zdm1 sha256:ab136e88e19a843c4bf7713d2090d5a2186ba16a6a80dacc12eeddd256a8e556
+
+zdm2 sha1:d77371d15817fcaa57eeec27f770c505ba974ec1
+zdm2 sha256:1c1a5f57363f46a15d95ce8527b3c2c158d88d16853b4acbf81bd20fd2c89a46
+
+zdn1 sha1:beb5d38c55283d280685ea21a0e50cfcc0ca064a
+zdn1 sha256:0f0eca66183617b0aa5ad74b256540329f841470922ca6760263c996d825eb18
+
+zmd1 sha1:d41fda41b7ec4de46b43cb7ea42a45001ae393d5
+zmd1 sha256:1ed32d481852eddf31a0ce12652a0ad14bf5b7a842667b5dbb0b50f35bf1c80a
+
+zmd2 sha1:a79ac3be9377639e1c7d1edf1ae1b3a5f0ccd8a9
+zmd2 sha256:b238da211b404f8917df2d9c6f7030535e904b2186131007a3c292ec6902f933
+
+zmm1 sha1:4ca22bae2527d3d9e1676498a0fba3b355bd1278
+zmm1 sha256:072b1d85b5f34fabc99dfa46008c5418df68302d3e317430006f49b32d244226
+
+zmm2 sha1:61422ba9c2c873416061a88cd40a59a35b576474
+zmm2 sha256:81dd5d2b3c5cda16fef552256aed4e2ea0802a8450a08f308a92142112ff6dda
+
+zmm3 sha1:697aad7715a1e7306ca76290a3dd4208fbaeddfa
+zmm3 sha256:8b10fab49e9be3414aa5e9a93d0e46f9569053440138a7c19a5eb5536d8e95bf
+
+zmn1 sha1:b16d7b25b869f2beb124efa53467d8a1550ad694
+zmn1 sha256:609e4f75d1295e844c826feeba213acb0b6cfc609adfe8ff705b19e3829ae3e9
+
+zmn2 sha1:a5c544c21cfcb07eb80a4d89a5b7d1570002edfd
+zmn2 sha256:d6d03edf2dc1a3b267a8205de5f41a2ff4b03def8c7ae02052b543fb09d589fc
+
+zna1 sha1:d12979c22fff69c59ca9409e7a8fe3ee25eaee80
+zna1 sha256:b37b80e789e8ea32aa323f004628f02013f632124b0282c7fe00a127d3c64c3c
+
+znd1 sha1:a18393c636b98e9bd7296b8b437ea4992b72440c
+znd1 sha256:af92a22eee8c38410a0c9d2b5135a10aeb052cbc7cf675541ed9a67bfcaf7cf9
+
+znm1 sha1:3fdbe17fd013303a2e981e1ca1c6cd6e72789087
+znm1 sha256:f75aeaa0c11e76918e381c105f0752932c6150e941fec565d24fa31098a13dc1
+
+znm2 sha1:7e09d6a3a14bd630913e8c75693cea32157b606d
+znm2 sha256:938d73cfbaa1c902a84fb5b3afd9736aa0590367fb9bd59c6c4d072ce70fcd6d
 EOF
 
-cat >.test-recursive-OA <<\EOF
-:000000 100644 0000000000000000000000000000000000000000 ccba72ad3888a3520b39efcf780b9ee64167535d A	AA
-:000000 100644 0000000000000000000000000000000000000000 7e426fb079479fd67f6d81f984e4ec649a44bc25 A	AN
-:100644 000000 bcc68ef997017466d5c9094bcf7692295f588c9a 0000000000000000000000000000000000000000 D	DD
-:000000 100644 0000000000000000000000000000000000000000 68a6d8b91da11045cf4aa3a5ab9f2a781c701249 A	DF/DF
-:100644 000000 141c1f1642328e4bc46a7d801a71da392e66791e 0000000000000000000000000000000000000000 D	DM
-:100644 000000 35abde1506ddf806572ff4d407bd06885d0f8ee9 0000000000000000000000000000000000000000 D	DN
-:000000 100644 0000000000000000000000000000000000000000 1d41122ebdd7a640f29d3c9cc4f9d70094374762 A	LL
-:100644 100644 03f24c8c4700babccfd28b654e7e8eac402ad6cd 103d9f89b50b9aad03054b579be5e7aa665f2d57 M	MD
-:100644 100644 b258508afb7ceb449981bd9d63d2d3e971bf8d34 b431b272d829ff3aa4d1a5085f4394ab4d3305b6 M	MM
-:100644 100644 bd084b0c27c7b6cc34f11d6d0509a29be3caf970 a716d58de4a570e0038f5c307bd8db34daea021f M	MN
-:100644 100644 40c959f984c8b89a2b02520d17f00d717f024397 2ac547ae9614a00d1b28275de608131f7a0e259f M	SS
-:100644 100644 4ac13458899ab908ef3b1128fa378daefc88d356 4c86f9a85fbc5e6804ee2e17a797538fbe785bca M	TT
-:000000 100644 0000000000000000000000000000000000000000 8acb8e9750e3f644bf323fcf3d338849db106c77 A	Z/AA
-:000000 100644 0000000000000000000000000000000000000000 087494262084cefee7ed484d20c8dc0580791272 A	Z/AN
-:100644 000000 879007efae624d2b1307214b24a956f0a8d686a8 0000000000000000000000000000000000000000 D	Z/DD
-:100644 000000 9b541b2275c06e3a7b13f28badf5294e2ae63df4 0000000000000000000000000000000000000000 D	Z/DM
-:100644 000000 beb5d38c55283d280685ea21a0e50cfcc0ca064a 0000000000000000000000000000000000000000 D	Z/DN
-:100644 100644 d41fda41b7ec4de46b43cb7ea42a45001ae393d5 a79ac3be9377639e1c7d1edf1ae1b3a5f0ccd8a9 M	Z/MD
-:100644 100644 4ca22bae2527d3d9e1676498a0fba3b355bd1278 61422ba9c2c873416061a88cd40a59a35b576474 M	Z/MM
-:100644 100644 b16d7b25b869f2beb124efa53467d8a1550ad694 a5c544c21cfcb07eb80a4d89a5b7d1570002edfd M	Z/MN
+cat >.test-plain-OA <<EOF
+:000000 100644 $(test_oid zero) $(test_oid aa_1) A	AA
+:000000 100644 $(test_oid zero) $(test_oid an_1) A	AN
+:100644 000000 $(test_oid dd_1) $(test_oid zero) D	DD
+:000000 040000 $(test_oid zero) $(test_oid df_1) A	DF
+:100644 000000 $(test_oid dm_1) $(test_oid zero) D	DM
+:100644 000000 $(test_oid dn_1) $(test_oid zero) D	DN
+:000000 100644 $(test_oid zero) $(test_oid ll_2) A	LL
+:100644 100644 $(test_oid md_1) $(test_oid md_2) M	MD
+:100644 100644 $(test_oid mm_1) $(test_oid mm_2) M	MM
+:100644 100644 $(test_oid mn_1) $(test_oid mn_2) M	MN
+:100644 100644 $(test_oid ss_1) $(test_oid ss_2) M	SS
+:100644 100644 $(test_oid tt_1) $(test_oid tt_2) M	TT
+:040000 040000 $(test_oid z__1) $(test_oid z__2) M	Z
 EOF
-cat >.test-plain-OB <<\EOF
-:000000 100644 0000000000000000000000000000000000000000 6aa2b5335b16431a0ef71e5c0a28be69183cf6a2 A	AA
-:100644 000000 bcc68ef997017466d5c9094bcf7692295f588c9a 0000000000000000000000000000000000000000 D	DD
-:000000 100644 0000000000000000000000000000000000000000 71420ab81e254145d26d6fc0cddee64c1acd4787 A	DF
-:100644 100644 141c1f1642328e4bc46a7d801a71da392e66791e 3c4d8de5fbad08572bab8e10eef8dbb264cf0231 M	DM
-:000000 100644 0000000000000000000000000000000000000000 1d41122ebdd7a640f29d3c9cc4f9d70094374762 A	LL
-:100644 000000 03f24c8c4700babccfd28b654e7e8eac402ad6cd 0000000000000000000000000000000000000000 D	MD
-:100644 100644 b258508afb7ceb449981bd9d63d2d3e971bf8d34 19989d4559aae417fedee240ccf2ba315ea4dc2b M	MM
-:000000 100644 0000000000000000000000000000000000000000 15885881ea69115351c09b38371f0348a3fb8c67 A	NA
-:100644 000000 a4e179e4291e5536a5e1c82e091052772d2c5a93 0000000000000000000000000000000000000000 D	ND
-:100644 100644 c8f25781e8f1792e3e40b74225e20553041b5226 cdb9a8c3da571502ac30225e9c17beccb8387983 M	NM
-:100644 100644 40c959f984c8b89a2b02520d17f00d717f024397 2ac547ae9614a00d1b28275de608131f7a0e259f M	SS
-:100644 100644 4ac13458899ab908ef3b1128fa378daefc88d356 c4e4a12231b9fa79a0053cb6077fcb21bb5b135a M	TT
-:040000 040000 7d670fdcdb9929f6c7dac196ff78689cd1c566a1 1ba523955d5160681af65cb776411f574c1e8155 M	Z
+
+cat >.test-recursive-OA <<EOF
+:000000 100644 $(test_oid zero) $(test_oid aa_1) A	AA
+:000000 100644 $(test_oid zero) $(test_oid an_1) A	AN
+:100644 000000 $(test_oid dd_1) $(test_oid zero) D	DD
+:000000 100644 $(test_oid zero) $(test_oid dfd1) A	DF/DF
+:100644 000000 $(test_oid dm_1) $(test_oid zero) D	DM
+:100644 000000 $(test_oid dn_1) $(test_oid zero) D	DN
+:000000 100644 $(test_oid zero) $(test_oid ll_2) A	LL
+:100644 100644 $(test_oid md_1) $(test_oid md_2) M	MD
+:100644 100644 $(test_oid mm_1) $(test_oid mm_2) M	MM
+:100644 100644 $(test_oid mn_1) $(test_oid mn_2) M	MN
+:100644 100644 $(test_oid ss_1) $(test_oid ss_2) M	SS
+:100644 100644 $(test_oid tt_1) $(test_oid tt_2) M	TT
+:000000 100644 $(test_oid zero) $(test_oid zaa1) A	Z/AA
+:000000 100644 $(test_oid zero) $(test_oid zan1) A	Z/AN
+:100644 000000 $(test_oid zdd1) $(test_oid zero) D	Z/DD
+:100644 000000 $(test_oid zdm1) $(test_oid zero) D	Z/DM
+:100644 000000 $(test_oid zdn1) $(test_oid zero) D	Z/DN
+:100644 100644 $(test_oid zmd1) $(test_oid zmd2) M	Z/MD
+:100644 100644 $(test_oid zmm1) $(test_oid zmm2) M	Z/MM
+:100644 100644 $(test_oid zmn1) $(test_oid zmn2) M	Z/MN
 EOF
-cat >.test-recursive-OB <<\EOF
-:000000 100644 0000000000000000000000000000000000000000 6aa2b5335b16431a0ef71e5c0a28be69183cf6a2 A	AA
-:100644 000000 bcc68ef997017466d5c9094bcf7692295f588c9a 0000000000000000000000000000000000000000 D	DD
-:000000 100644 0000000000000000000000000000000000000000 71420ab81e254145d26d6fc0cddee64c1acd4787 A	DF
-:100644 100644 141c1f1642328e4bc46a7d801a71da392e66791e 3c4d8de5fbad08572bab8e10eef8dbb264cf0231 M	DM
-:000000 100644 0000000000000000000000000000000000000000 1d41122ebdd7a640f29d3c9cc4f9d70094374762 A	LL
-:100644 000000 03f24c8c4700babccfd28b654e7e8eac402ad6cd 0000000000000000000000000000000000000000 D	MD
-:100644 100644 b258508afb7ceb449981bd9d63d2d3e971bf8d34 19989d4559aae417fedee240ccf2ba315ea4dc2b M	MM
-:000000 100644 0000000000000000000000000000000000000000 15885881ea69115351c09b38371f0348a3fb8c67 A	NA
-:100644 000000 a4e179e4291e5536a5e1c82e091052772d2c5a93 0000000000000000000000000000000000000000 D	ND
-:100644 100644 c8f25781e8f1792e3e40b74225e20553041b5226 cdb9a8c3da571502ac30225e9c17beccb8387983 M	NM
-:100644 100644 40c959f984c8b89a2b02520d17f00d717f024397 2ac547ae9614a00d1b28275de608131f7a0e259f M	SS
-:100644 100644 4ac13458899ab908ef3b1128fa378daefc88d356 c4e4a12231b9fa79a0053cb6077fcb21bb5b135a M	TT
-:000000 100644 0000000000000000000000000000000000000000 6c0b99286d0bce551ac4a7b3dff8b706edff3715 A	Z/AA
-:100644 000000 879007efae624d2b1307214b24a956f0a8d686a8 0000000000000000000000000000000000000000 D	Z/DD
-:100644 100644 9b541b2275c06e3a7b13f28badf5294e2ae63df4 d77371d15817fcaa57eeec27f770c505ba974ec1 M	Z/DM
-:100644 000000 d41fda41b7ec4de46b43cb7ea42a45001ae393d5 0000000000000000000000000000000000000000 D	Z/MD
-:100644 100644 4ca22bae2527d3d9e1676498a0fba3b355bd1278 697aad7715a1e7306ca76290a3dd4208fbaeddfa M	Z/MM
-:000000 100644 0000000000000000000000000000000000000000 d12979c22fff69c59ca9409e7a8fe3ee25eaee80 A	Z/NA
-:100644 000000 a18393c636b98e9bd7296b8b437ea4992b72440c 0000000000000000000000000000000000000000 D	Z/ND
-:100644 100644 3fdbe17fd013303a2e981e1ca1c6cd6e72789087 7e09d6a3a14bd630913e8c75693cea32157b606d M	Z/NM
+cat >.test-plain-OB <<EOF
+:000000 100644 $(test_oid zero) $(test_oid aa_2) A	AA
+:100644 000000 $(test_oid dd_1) $(test_oid zero) D	DD
+:000000 100644 $(test_oid zero) $(test_oid df_2) A	DF
+:100644 100644 $(test_oid dm_1) $(test_oid dm_2) M	DM
+:000000 100644 $(test_oid zero) $(test_oid ll_2) A	LL
+:100644 000000 $(test_oid md_1) $(test_oid zero) D	MD
+:100644 100644 $(test_oid mm_1) $(test_oid mm_3) M	MM
+:000000 100644 $(test_oid zero) $(test_oid na_1) A	NA
+:100644 000000 $(test_oid nd_1) $(test_oid zero) D	ND
+:100644 100644 $(test_oid nm_1) $(test_oid nm_2) M	NM
+:100644 100644 $(test_oid ss_1) $(test_oid ss_2) M	SS
+:100644 100644 $(test_oid tt_1) $(test_oid tt_3) M	TT
+:040000 040000 $(test_oid z__1) $(test_oid z__3) M	Z
 EOF
-cat >.test-plain-AB <<\EOF
-:100644 100644 ccba72ad3888a3520b39efcf780b9ee64167535d 6aa2b5335b16431a0ef71e5c0a28be69183cf6a2 M	AA
-:100644 000000 7e426fb079479fd67f6d81f984e4ec649a44bc25 0000000000000000000000000000000000000000 D	AN
-:000000 100644 0000000000000000000000000000000000000000 71420ab81e254145d26d6fc0cddee64c1acd4787 A	DF
-:040000 000000 6d50f65d3bdab91c63444294d38f08aeff328e42 0000000000000000000000000000000000000000 D	DF
-:000000 100644 0000000000000000000000000000000000000000 3c4d8de5fbad08572bab8e10eef8dbb264cf0231 A	DM
-:000000 100644 0000000000000000000000000000000000000000 35abde1506ddf806572ff4d407bd06885d0f8ee9 A	DN
-:100644 000000 103d9f89b50b9aad03054b579be5e7aa665f2d57 0000000000000000000000000000000000000000 D	MD
-:100644 100644 b431b272d829ff3aa4d1a5085f4394ab4d3305b6 19989d4559aae417fedee240ccf2ba315ea4dc2b M	MM
-:100644 100644 a716d58de4a570e0038f5c307bd8db34daea021f bd084b0c27c7b6cc34f11d6d0509a29be3caf970 M	MN
-:000000 100644 0000000000000000000000000000000000000000 15885881ea69115351c09b38371f0348a3fb8c67 A	NA
-:100644 000000 a4e179e4291e5536a5e1c82e091052772d2c5a93 0000000000000000000000000000000000000000 D	ND
-:100644 100644 c8f25781e8f1792e3e40b74225e20553041b5226 cdb9a8c3da571502ac30225e9c17beccb8387983 M	NM
-:100644 100644 4c86f9a85fbc5e6804ee2e17a797538fbe785bca c4e4a12231b9fa79a0053cb6077fcb21bb5b135a M	TT
-:040000 040000 5e5f22072bb39f6e12cf663a57cb634c76eefb49 1ba523955d5160681af65cb776411f574c1e8155 M	Z
+cat >.test-recursive-OB <<EOF
+:000000 100644 $(test_oid zero) $(test_oid aa_2) A	AA
+:100644 000000 $(test_oid dd_1) $(test_oid zero) D	DD
+:000000 100644 $(test_oid zero) $(test_oid df_2) A	DF
+:100644 100644 $(test_oid dm_1) $(test_oid dm_2) M	DM
+:000000 100644 $(test_oid zero) $(test_oid ll_2) A	LL
+:100644 000000 $(test_oid md_1) $(test_oid zero) D	MD
+:100644 100644 $(test_oid mm_1) $(test_oid mm_3) M	MM
+:000000 100644 $(test_oid zero) $(test_oid na_1) A	NA
+:100644 000000 $(test_oid nd_1) $(test_oid zero) D	ND
+:100644 100644 $(test_oid nm_1) $(test_oid nm_2) M	NM
+:100644 100644 $(test_oid ss_1) $(test_oid ss_2) M	SS
+:100644 100644 $(test_oid tt_1) $(test_oid tt_3) M	TT
+:000000 100644 $(test_oid zero) $(test_oid zaa2) A	Z/AA
+:100644 000000 $(test_oid zdd1) $(test_oid zero) D	Z/DD
+:100644 100644 $(test_oid zdm1) $(test_oid zdm2) M	Z/DM
+:100644 000000 $(test_oid zmd1) $(test_oid zero) D	Z/MD
+:100644 100644 $(test_oid zmm1) $(test_oid zmm3) M	Z/MM
+:000000 100644 $(test_oid zero) $(test_oid zna1) A	Z/NA
+:100644 000000 $(test_oid znd1) $(test_oid zero) D	Z/ND
+:100644 100644 $(test_oid znm1) $(test_oid znm2) M	Z/NM
 EOF
-cat >.test-recursive-AB <<\EOF
-:100644 100644 ccba72ad3888a3520b39efcf780b9ee64167535d 6aa2b5335b16431a0ef71e5c0a28be69183cf6a2 M	AA
-:100644 000000 7e426fb079479fd67f6d81f984e4ec649a44bc25 0000000000000000000000000000000000000000 D	AN
-:000000 100644 0000000000000000000000000000000000000000 71420ab81e254145d26d6fc0cddee64c1acd4787 A	DF
-:100644 000000 68a6d8b91da11045cf4aa3a5ab9f2a781c701249 0000000000000000000000000000000000000000 D	DF/DF
-:000000 100644 0000000000000000000000000000000000000000 3c4d8de5fbad08572bab8e10eef8dbb264cf0231 A	DM
-:000000 100644 0000000000000000000000000000000000000000 35abde1506ddf806572ff4d407bd06885d0f8ee9 A	DN
-:100644 000000 103d9f89b50b9aad03054b579be5e7aa665f2d57 0000000000000000000000000000000000000000 D	MD
-:100644 100644 b431b272d829ff3aa4d1a5085f4394ab4d3305b6 19989d4559aae417fedee240ccf2ba315ea4dc2b M	MM
-:100644 100644 a716d58de4a570e0038f5c307bd8db34daea021f bd084b0c27c7b6cc34f11d6d0509a29be3caf970 M	MN
-:000000 100644 0000000000000000000000000000000000000000 15885881ea69115351c09b38371f0348a3fb8c67 A	NA
-:100644 000000 a4e179e4291e5536a5e1c82e091052772d2c5a93 0000000000000000000000000000000000000000 D	ND
-:100644 100644 c8f25781e8f1792e3e40b74225e20553041b5226 cdb9a8c3da571502ac30225e9c17beccb8387983 M	NM
-:100644 100644 4c86f9a85fbc5e6804ee2e17a797538fbe785bca c4e4a12231b9fa79a0053cb6077fcb21bb5b135a M	TT
-:100644 100644 8acb8e9750e3f644bf323fcf3d338849db106c77 6c0b99286d0bce551ac4a7b3dff8b706edff3715 M	Z/AA
-:100644 000000 087494262084cefee7ed484d20c8dc0580791272 0000000000000000000000000000000000000000 D	Z/AN
-:000000 100644 0000000000000000000000000000000000000000 d77371d15817fcaa57eeec27f770c505ba974ec1 A	Z/DM
-:000000 100644 0000000000000000000000000000000000000000 beb5d38c55283d280685ea21a0e50cfcc0ca064a A	Z/DN
-:100644 000000 a79ac3be9377639e1c7d1edf1ae1b3a5f0ccd8a9 0000000000000000000000000000000000000000 D	Z/MD
-:100644 100644 61422ba9c2c873416061a88cd40a59a35b576474 697aad7715a1e7306ca76290a3dd4208fbaeddfa M	Z/MM
-:100644 100644 a5c544c21cfcb07eb80a4d89a5b7d1570002edfd b16d7b25b869f2beb124efa53467d8a1550ad694 M	Z/MN
-:000000 100644 0000000000000000000000000000000000000000 d12979c22fff69c59ca9409e7a8fe3ee25eaee80 A	Z/NA
-:100644 000000 a18393c636b98e9bd7296b8b437ea4992b72440c 0000000000000000000000000000000000000000 D	Z/ND
-:100644 100644 3fdbe17fd013303a2e981e1ca1c6cd6e72789087 7e09d6a3a14bd630913e8c75693cea32157b606d M	Z/NM
+cat >.test-plain-AB <<EOF
+:100644 100644 $(test_oid aa_1) $(test_oid aa_2) M	AA
+:100644 000000 $(test_oid an_1) $(test_oid zero) D	AN
+:000000 100644 $(test_oid zero) $(test_oid df_2) A	DF
+:040000 000000 $(test_oid df_1) $(test_oid zero) D	DF
+:000000 100644 $(test_oid zero) $(test_oid dm_2) A	DM
+:000000 100644 $(test_oid zero) $(test_oid dn_1) A	DN
+:100644 000000 $(test_oid md_2) $(test_oid zero) D	MD
+:100644 100644 $(test_oid mm_2) $(test_oid mm_3) M	MM
+:100644 100644 $(test_oid mn_2) $(test_oid mn_1) M	MN
+:000000 100644 $(test_oid zero) $(test_oid na_1) A	NA
+:100644 000000 $(test_oid nd_1) $(test_oid zero) D	ND
+:100644 100644 $(test_oid nm_1) $(test_oid nm_2) M	NM
+:100644 100644 $(test_oid tt_2) $(test_oid tt_3) M	TT
+:040000 040000 $(test_oid z__2) $(test_oid z__3) M	Z
+EOF
+cat >.test-recursive-AB <<EOF
+:100644 100644 $(test_oid aa_1) $(test_oid aa_2) M	AA
+:100644 000000 $(test_oid an_1) $(test_oid zero) D	AN
+:000000 100644 $(test_oid zero) $(test_oid df_2) A	DF
+:100644 000000 $(test_oid dfd1) $(test_oid zero) D	DF/DF
+:000000 100644 $(test_oid zero) $(test_oid dm_2) A	DM
+:000000 100644 $(test_oid zero) $(test_oid dn_1) A	DN
+:100644 000000 $(test_oid md_2) $(test_oid zero) D	MD
+:100644 100644 $(test_oid mm_2) $(test_oid mm_3) M	MM
+:100644 100644 $(test_oid mn_2) $(test_oid mn_1) M	MN
+:000000 100644 $(test_oid zero) $(test_oid na_1) A	NA
+:100644 000000 $(test_oid nd_1) $(test_oid zero) D	ND
+:100644 100644 $(test_oid nm_1) $(test_oid nm_2) M	NM
+:100644 100644 $(test_oid tt_2) $(test_oid tt_3) M	TT
+:100644 100644 $(test_oid zaa1) $(test_oid zaa2) M	Z/AA
+:100644 000000 $(test_oid zan1) $(test_oid zero) D	Z/AN
+:000000 100644 $(test_oid zero) $(test_oid zdm2) A	Z/DM
+:000000 100644 $(test_oid zero) $(test_oid zdn1) A	Z/DN
+:100644 000000 $(test_oid zmd2) $(test_oid zero) D	Z/MD
+:100644 100644 $(test_oid zmm2) $(test_oid zmm3) M	Z/MM
+:100644 100644 $(test_oid zmn2) $(test_oid zmn1) M	Z/MN
+:000000 100644 $(test_oid zero) $(test_oid zna1) A	Z/NA
+:100644 000000 $(test_oid znd1) $(test_oid zero) D	Z/ND
+:100644 100644 $(test_oid znm1) $(test_oid znm2) M	Z/NM
 EOF
 
 cmp_diff_files_output () {
diff --git a/t/t4009-diff-rename-4.sh b/t/t4009-diff-rename-4.sh
index 3641fd8..b63bdf0 100755
--- a/t/t4009-diff-rename-4.sh
+++ b/t/t4009-diff-rename-4.sh
@@ -14,6 +14,7 @@
     'cat "$TEST_DIRECTORY"/diff-lib/COPYING >COPYING &&
      echo frotz >rezrov &&
     git update-index --add COPYING rezrov &&
+    orig=$(git hash-object COPYING) &&
     tree=$(git write-tree) &&
     echo $tree'
 
@@ -22,6 +23,8 @@
     'sed -e 's/HOWEVER/However/' <COPYING >COPYING.1 &&
     sed -e 's/GPL/G.P.L/g' <COPYING >COPYING.2 &&
     rm -f COPYING &&
+    c1=$(git hash-object COPYING.1) &&
+    c2=$(git hash-object COPYING.2) &&
     git update-index --add --remove COPYING COPYING.?'
 
 # tree has COPYING and rezrov.  work tree has COPYING.1 and COPYING.2,
@@ -31,11 +34,11 @@
 
 git diff-index -z -C $tree >current
 
-cat >expected <<\EOF
-:100644 100644 6ff87c4664981e4397625791c8ea3bbb5f2279a3 0603b3238a076dc6c8022aedc6648fa523a17178 C1234
+cat >expected <<EOF
+:100644 100644 $orig $c1 C1234
 COPYING
 COPYING.1
-:100644 100644 6ff87c4664981e4397625791c8ea3bbb5f2279a3 06c67961bbaed34a127f76d261f4c0bf73eda471 R1234
+:100644 100644 $orig $c2 R1234
 COPYING
 COPYING.2
 EOF
@@ -57,10 +60,10 @@
 # about rezrov.
 
 git diff-index -z -C $tree >current
-cat >expected <<\EOF
-:100644 100644 6ff87c4664981e4397625791c8ea3bbb5f2279a3 06c67961bbaed34a127f76d261f4c0bf73eda471 M
+cat >expected <<EOF
+:100644 100644 $orig $c2 M
 COPYING
-:100644 100644 6ff87c4664981e4397625791c8ea3bbb5f2279a3 0603b3238a076dc6c8022aedc6648fa523a17178 C1234
+:100644 100644 $orig $c1 C1234
 COPYING
 COPYING.1
 EOF
@@ -82,8 +85,8 @@
      git update-index --add --remove COPYING COPYING.1'
 
 git diff-index -z -C --find-copies-harder $tree >current
-cat >expected <<\EOF
-:100644 100644 6ff87c4664981e4397625791c8ea3bbb5f2279a3 0603b3238a076dc6c8022aedc6648fa523a17178 C1234
+cat >expected <<EOF
+:100644 100644 $orig $c1 C1234
 COPYING
 COPYING.1
 EOF
diff --git a/t/t4013-diff-various.sh b/t/t4013-diff-various.sh
index a9054d2..5ac94b3 100755
--- a/t/t4013-diff-various.sh
+++ b/t/t4013-diff-various.sh
@@ -7,9 +7,6 @@
 
 . ./test-lib.sh
 
-LF='
-'
-
 test_expect_success setup '
 
 	GIT_AUTHOR_DATE="2006-06-26 00:00:00 +0000" &&
diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh
index ca7debf..b896999 100755
--- a/t/t4014-format-patch.sh
+++ b/t/t4014-format-patch.sh
@@ -9,7 +9,6 @@
 . "$TEST_DIRECTORY"/lib-terminal.sh
 
 test_expect_success setup '
-
 	for i in 1 2 3 4 5 6 7 8 9 10; do echo "$i"; done >file &&
 	cat file >elif &&
 	git add file elif &&
@@ -34,7 +33,8 @@
 	git commit -m "Side changes #3 with \\n backslash-n in it." &&
 
 	git checkout master &&
-	git diff-tree -p C2 | git apply --index &&
+	git diff-tree -p C2 >patch &&
+	git apply --index <patch &&
 	test_tick &&
 	git commit -m "Master accepts moral equivalent of #2" &&
 
@@ -59,33 +59,28 @@
 	git checkout master
 '
 
-test_expect_success "format-patch --ignore-if-in-upstream" '
-
+test_expect_success 'format-patch --ignore-if-in-upstream' '
 	git format-patch --stdout master..side >patch0 &&
-	cnt=$(grep "^From " patch0 | wc -l) &&
-	test $cnt = 3
-
+	grep "^From " patch0 >from0 &&
+	test_line_count = 3 from0
 '
 
-test_expect_success "format-patch --ignore-if-in-upstream" '
-
+test_expect_success 'format-patch --ignore-if-in-upstream' '
 	git format-patch --stdout \
 		--ignore-if-in-upstream master..side >patch1 &&
-	cnt=$(grep "^From " patch1 | wc -l) &&
-	test $cnt = 2
-
+	grep "^From " patch1 >from1 &&
+	test_line_count = 2 from1
 '
 
-test_expect_success "format-patch --ignore-if-in-upstream handles tags" '
+test_expect_success 'format-patch --ignore-if-in-upstream handles tags' '
 	git tag -a v1 -m tag side &&
 	git tag -a v2 -m tag master &&
 	git format-patch --stdout --ignore-if-in-upstream v2..v1 >patch1 &&
-	cnt=$(grep "^From " patch1 | wc -l) &&
-	test $cnt = 2
+	grep "^From " patch1 >from1 &&
+	test_line_count = 2 from1
 '
 
 test_expect_success "format-patch doesn't consider merge commits" '
-
 	git checkout -b slave master &&
 	echo "Another line" >>file &&
 	test_tick &&
@@ -96,148 +91,138 @@
 	git checkout -b merger master &&
 	test_tick &&
 	git merge --no-ff slave &&
-	cnt=$(git format-patch -3 --stdout | grep "^From " | wc -l) &&
-	test $cnt = 3
+	git format-patch -3 --stdout >patch &&
+	grep "^From " patch >from &&
+	test_line_count = 3 from
 '
 
-test_expect_success "format-patch result applies" '
-
+test_expect_success 'format-patch result applies' '
 	git checkout -b rebuild-0 master &&
 	git am -3 patch0 &&
-	cnt=$(git rev-list master.. | wc -l) &&
-	test $cnt = 2
+	git rev-list master.. >list &&
+	test_line_count = 2 list
 '
 
-test_expect_success "format-patch --ignore-if-in-upstream result applies" '
-
+test_expect_success 'format-patch --ignore-if-in-upstream result applies' '
 	git checkout -b rebuild-1 master &&
 	git am -3 patch1 &&
-	cnt=$(git rev-list master.. | wc -l) &&
-	test $cnt = 2
+	git rev-list master.. >list &&
+	test_line_count = 2 list
 '
 
 test_expect_success 'commit did not screw up the log message' '
-
-	git cat-file commit side | grep "^Side .* with .* backslash-n"
-
+	git cat-file commit side >actual &&
+	grep "^Side .* with .* backslash-n" actual
 '
 
 test_expect_success 'format-patch did not screw up the log message' '
-
 	grep "^Subject: .*Side changes #3 with .* backslash-n" patch0 &&
 	grep "^Subject: .*Side changes #3 with .* backslash-n" patch1
-
 '
 
 test_expect_success 'replay did not screw up the log message' '
-
-	git cat-file commit rebuild-1 | grep "^Side .* with .* backslash-n"
-
+	git cat-file commit rebuild-1 >actual &&
+	grep "^Side .* with .* backslash-n" actual
 '
 
 test_expect_success 'extra headers' '
-
 	git config format.headers "To: R E Cipient <rcipient@example.com>
 " &&
 	git config --add format.headers "Cc: S E Cipient <scipient@example.com>
 " &&
-	git format-patch --stdout master..side > patch2 &&
-	sed -e "/^\$/q" patch2 > hdrs2 &&
+	git format-patch --stdout master..side >patch2 &&
+	sed -e "/^\$/q" patch2 >hdrs2 &&
 	grep "^To: R E Cipient <rcipient@example.com>\$" hdrs2 &&
 	grep "^Cc: S E Cipient <scipient@example.com>\$" hdrs2
-
 '
 
 test_expect_success 'extra headers without newlines' '
-
 	git config --replace-all format.headers "To: R E Cipient <rcipient@example.com>" &&
 	git config --add format.headers "Cc: S E Cipient <scipient@example.com>" &&
 	git format-patch --stdout master..side >patch3 &&
-	sed -e "/^\$/q" patch3 > hdrs3 &&
+	sed -e "/^\$/q" patch3 >hdrs3 &&
 	grep "^To: R E Cipient <rcipient@example.com>\$" hdrs3 &&
 	grep "^Cc: S E Cipient <scipient@example.com>\$" hdrs3
-
 '
 
 test_expect_success 'extra headers with multiple To:s' '
-
 	git config --replace-all format.headers "To: R E Cipient <rcipient@example.com>" &&
 	git config --add format.headers "To: S E Cipient <scipient@example.com>" &&
-	git format-patch --stdout master..side > patch4 &&
-	sed -e "/^\$/q" patch4 > hdrs4 &&
+	git format-patch --stdout master..side >patch4 &&
+	sed -e "/^\$/q" patch4 >hdrs4 &&
 	grep "^To: R E Cipient <rcipient@example.com>,\$" hdrs4 &&
 	grep "^ *S E Cipient <scipient@example.com>\$" hdrs4
 '
 
 test_expect_success 'additional command line cc (ascii)' '
-
 	git config --replace-all format.headers "Cc: R E Cipient <rcipient@example.com>" &&
-	git format-patch --cc="S E Cipient <scipient@example.com>" --stdout master..side | sed -e "/^\$/q" >patch5 &&
-	grep "^Cc: R E Cipient <rcipient@example.com>,\$" patch5 &&
-	grep "^ *S E Cipient <scipient@example.com>\$" patch5
+	git format-patch --cc="S E Cipient <scipient@example.com>" --stdout master..side >patch5 &&
+	sed -e "/^\$/q" patch5 >hdrs5 &&
+	grep "^Cc: R E Cipient <rcipient@example.com>,\$" hdrs5 &&
+	grep "^ *S E Cipient <scipient@example.com>\$" hdrs5
 '
 
 test_expect_failure 'additional command line cc (rfc822)' '
-
 	git config --replace-all format.headers "Cc: R E Cipient <rcipient@example.com>" &&
-	git format-patch --cc="S. E. Cipient <scipient@example.com>" --stdout master..side | sed -e "/^\$/q" >patch5 &&
-	grep "^Cc: R E Cipient <rcipient@example.com>,\$" patch5 &&
-	grep "^ *\"S. E. Cipient\" <scipient@example.com>\$" patch5
+	git format-patch --cc="S. E. Cipient <scipient@example.com>" --stdout master..side >patch5 &&
+	sed -e "/^\$/q" patch5 >hdrs5 &&
+	grep "^Cc: R E Cipient <rcipient@example.com>,\$" hdrs5 &&
+	grep "^ *\"S. E. Cipient\" <scipient@example.com>\$" hdrs5
 '
 
 test_expect_success 'command line headers' '
-
 	git config --unset-all format.headers &&
-	git format-patch --add-header="Cc: R E Cipient <rcipient@example.com>" --stdout master..side | sed -e "/^\$/q" >patch6 &&
-	grep "^Cc: R E Cipient <rcipient@example.com>\$" patch6
+	git format-patch --add-header="Cc: R E Cipient <rcipient@example.com>" --stdout master..side >patch6 &&
+	sed -e "/^\$/q" patch6 >hdrs6 &&
+	grep "^Cc: R E Cipient <rcipient@example.com>\$" hdrs6
 '
 
 test_expect_success 'configuration headers and command line headers' '
-
 	git config --replace-all format.headers "Cc: R E Cipient <rcipient@example.com>" &&
-	git format-patch --add-header="Cc: S E Cipient <scipient@example.com>" --stdout master..side | sed -e "/^\$/q" >patch7 &&
-	grep "^Cc: R E Cipient <rcipient@example.com>,\$" patch7 &&
-	grep "^ *S E Cipient <scipient@example.com>\$" patch7
+	git format-patch --add-header="Cc: S E Cipient <scipient@example.com>" --stdout master..side >patch7 &&
+	sed -e "/^\$/q" patch7 >hdrs7 &&
+	grep "^Cc: R E Cipient <rcipient@example.com>,\$" hdrs7 &&
+	grep "^ *S E Cipient <scipient@example.com>\$" hdrs7
 '
 
 test_expect_success 'command line To: header (ascii)' '
-
 	git config --unset-all format.headers &&
-	git format-patch --to="R E Cipient <rcipient@example.com>" --stdout master..side | sed -e "/^\$/q" >patch8 &&
-	grep "^To: R E Cipient <rcipient@example.com>\$" patch8
+	git format-patch --to="R E Cipient <rcipient@example.com>" --stdout master..side >patch8 &&
+	sed -e "/^\$/q" patch8 >hdrs8 &&
+	grep "^To: R E Cipient <rcipient@example.com>\$" hdrs8
 '
 
 test_expect_failure 'command line To: header (rfc822)' '
-
-	git format-patch --to="R. E. Cipient <rcipient@example.com>" --stdout master..side | sed -e "/^\$/q" >patch8 &&
-	grep "^To: \"R. E. Cipient\" <rcipient@example.com>\$" patch8
+	git format-patch --to="R. E. Cipient <rcipient@example.com>" --stdout master..side >patch8 &&
+	sed -e "/^\$/q" patch8 >hdrs8 &&
+	grep "^To: \"R. E. Cipient\" <rcipient@example.com>\$" hdrs8
 '
 
 test_expect_failure 'command line To: header (rfc2047)' '
-
-	git format-patch --to="R Ä Cipient <rcipient@example.com>" --stdout master..side | sed -e "/^\$/q" >patch8 &&
-	grep "^To: =?UTF-8?q?R=20=C3=84=20Cipient?= <rcipient@example.com>\$" patch8
+	git format-patch --to="R Ä Cipient <rcipient@example.com>" --stdout master..side >patch8 &&
+	sed -e "/^\$/q" patch8 >hdrs8 &&
+	grep "^To: =?UTF-8?q?R=20=C3=84=20Cipient?= <rcipient@example.com>\$" hdrs8
 '
 
 test_expect_success 'configuration To: header (ascii)' '
-
 	git config format.to "R E Cipient <rcipient@example.com>" &&
-	git format-patch --stdout master..side | sed -e "/^\$/q" >patch9 &&
-	grep "^To: R E Cipient <rcipient@example.com>\$" patch9
+	git format-patch --stdout master..side >patch9 &&
+	sed -e "/^\$/q" patch9 >hdrs9 &&
+	grep "^To: R E Cipient <rcipient@example.com>\$" hdrs9
 '
 
 test_expect_failure 'configuration To: header (rfc822)' '
-
 	git config format.to "R. E. Cipient <rcipient@example.com>" &&
-	git format-patch --stdout master..side | sed -e "/^\$/q" >patch9 &&
-	grep "^To: \"R. E. Cipient\" <rcipient@example.com>\$" patch9
+	git format-patch --stdout master..side >patch9 &&
+	sed -e "/^\$/q" patch9 >hdrs9 &&
+	grep "^To: \"R. E. Cipient\" <rcipient@example.com>\$" hdrs9
 '
 
 test_expect_failure 'configuration To: header (rfc2047)' '
-
 	git config format.to "R Ä Cipient <rcipient@example.com>" &&
-	git format-patch --stdout master..side | sed -e "/^\$/q" >patch9 &&
-	grep "^To: =?UTF-8?q?R=20=C3=84=20Cipient?= <rcipient@example.com>\$" patch9
+	git format-patch --stdout master..side >patch9 &&
+	sed -e "/^\$/q" patch9 >hdrs9 &&
+	grep "^To: =?UTF-8?q?R=20=C3=84=20Cipient?= <rcipient@example.com>\$" hdrs9
 '
 
 # check_patch <patch>: Verify that <patch> looks like a half-sane
@@ -249,89 +234,79 @@
 }
 
 test_expect_success 'format.from=false' '
-
-	git -c format.from=false format-patch --stdout master..side |
-	sed -e "/^\$/q" >patch &&
+	git -c format.from=false format-patch --stdout master..side >patch &&
+	sed -e "/^\$/q" patch >hdrs &&
 	check_patch patch &&
-	! grep "^From: C O Mitter <committer@example.com>\$" patch
+	! grep "^From: C O Mitter <committer@example.com>\$" hdrs
 '
 
 test_expect_success 'format.from=true' '
-
-	git -c format.from=true format-patch --stdout master..side |
-	sed -e "/^\$/q" >patch &&
-	check_patch patch &&
-	grep "^From: C O Mitter <committer@example.com>\$" patch
+	git -c format.from=true format-patch --stdout master..side >patch &&
+	sed -e "/^\$/q" patch >hdrs &&
+	check_patch hdrs &&
+	grep "^From: C O Mitter <committer@example.com>\$" hdrs
 '
 
 test_expect_success 'format.from with address' '
-
-	git -c format.from="F R Om <from@example.com>" format-patch --stdout master..side |
-	sed -e "/^\$/q" >patch &&
-	check_patch patch &&
-	grep "^From: F R Om <from@example.com>\$" patch
+	git -c format.from="F R Om <from@example.com>" format-patch --stdout master..side >patch &&
+	sed -e "/^\$/q" patch >hdrs &&
+	check_patch hdrs &&
+	grep "^From: F R Om <from@example.com>\$" hdrs
 '
 
 test_expect_success '--no-from overrides format.from' '
-
-	git -c format.from="F R Om <from@example.com>" format-patch --no-from --stdout master..side |
-	sed -e "/^\$/q" >patch &&
-	check_patch patch &&
-	! grep "^From: F R Om <from@example.com>\$" patch
+	git -c format.from="F R Om <from@example.com>" format-patch --no-from --stdout master..side >patch &&
+	sed -e "/^\$/q" patch >hdrs &&
+	check_patch hdrs &&
+	! grep "^From: F R Om <from@example.com>\$" hdrs
 '
 
 test_expect_success '--from overrides format.from' '
-
-	git -c format.from="F R Om <from@example.com>" format-patch --from --stdout master..side |
-	sed -e "/^\$/q" >patch &&
-	check_patch patch &&
-	! grep "^From: F R Om <from@example.com>\$" patch
+	git -c format.from="F R Om <from@example.com>" format-patch --from --stdout master..side >patch &&
+	sed -e "/^\$/q" patch >hdrs &&
+	check_patch hdrs &&
+	! grep "^From: F R Om <from@example.com>\$" hdrs
 '
 
 test_expect_success '--no-to overrides config.to' '
-
 	git config --replace-all format.to \
 		"R E Cipient <rcipient@example.com>" &&
-	git format-patch --no-to --stdout master..side |
-	sed -e "/^\$/q" >patch10 &&
-	check_patch patch10 &&
-	! grep "^To: R E Cipient <rcipient@example.com>\$" patch10
+	git format-patch --no-to --stdout master..side >patch10 &&
+	sed -e "/^\$/q" patch10 >hdrs10 &&
+	check_patch hdrs10 &&
+	! grep "^To: R E Cipient <rcipient@example.com>\$" hdrs10
 '
 
 test_expect_success '--no-to and --to replaces config.to' '
-
 	git config --replace-all format.to \
 		"Someone <someone@out.there>" &&
 	git format-patch --no-to --to="Someone Else <else@out.there>" \
-		--stdout master..side |
-	sed -e "/^\$/q" >patch11 &&
-	check_patch patch11 &&
-	! grep "^To: Someone <someone@out.there>\$" patch11 &&
-	grep "^To: Someone Else <else@out.there>\$" patch11
+		--stdout master..side >patch11 &&
+	sed -e "/^\$/q" patch11 >hdrs11 &&
+	check_patch hdrs11 &&
+	! grep "^To: Someone <someone@out.there>\$" hdrs11 &&
+	grep "^To: Someone Else <else@out.there>\$" hdrs11
 '
 
 test_expect_success '--no-cc overrides config.cc' '
-
 	git config --replace-all format.cc \
 		"C E Cipient <rcipient@example.com>" &&
-	git format-patch --no-cc --stdout master..side |
-	sed -e "/^\$/q" >patch12 &&
-	check_patch patch12 &&
-	! grep "^Cc: C E Cipient <rcipient@example.com>\$" patch12
+	git format-patch --no-cc --stdout master..side >patch12 &&
+	sed -e "/^\$/q" patch12 >hdrs12 &&
+	check_patch hdrs12 &&
+	! grep "^Cc: C E Cipient <rcipient@example.com>\$" hdrs12
 '
 
 test_expect_success '--no-add-header overrides config.headers' '
-
 	git config --replace-all format.headers \
 		"Header1: B E Cipient <rcipient@example.com>" &&
-	git format-patch --no-add-header --stdout master..side |
-	sed -e "/^\$/q" >patch13 &&
-	check_patch patch13 &&
-	! grep "^Header1: B E Cipient <rcipient@example.com>\$" patch13
+	git format-patch --no-add-header --stdout master..side >patch13 &&
+	sed -e "/^\$/q" patch13 >hdrs13 &&
+	check_patch hdrs13 &&
+	! grep "^Header1: B E Cipient <rcipient@example.com>\$" hdrs13
 '
 
 test_expect_success 'multiple files' '
-
 	rm -rf patches/ &&
 	git checkout side &&
 	git format-patch -o patches/ master &&
@@ -357,7 +332,7 @@
 check_threading () {
 	expect="$1" &&
 	shift &&
-	(git format-patch --stdout "$@"; echo $? > status.out) |
+	git format-patch --stdout "$@" >patch &&
 	# Prints everything between the Message-ID and In-Reply-To,
 	# and replaces all Message-ID-lookalikes by a sequence number
 	perl -ne '
@@ -372,12 +347,11 @@
 			print;
 		}
 		print "---\n" if /^From /i;
-	' > actual &&
-	test 0 = "$(cat status.out)" &&
+	' <patch >actual &&
 	test_cmp "$expect" actual
 }
 
-cat >> expect.no-threading <<EOF
+cat >>expect.no-threading <<EOF
 ---
 ---
 ---
@@ -388,7 +362,7 @@
 	check_threading expect.no-threading master
 '
 
-cat > expect.thread <<EOF
+cat >expect.thread <<EOF
 ---
 Message-Id: <0>
 ---
@@ -405,7 +379,7 @@
 	check_threading expect.thread --thread master
 '
 
-cat > expect.in-reply-to <<EOF
+cat >expect.in-reply-to <<EOF
 ---
 Message-Id: <0>
 In-Reply-To: <1>
@@ -425,7 +399,7 @@
 		--thread master
 '
 
-cat > expect.cover-letter <<EOF
+cat >expect.cover-letter <<EOF
 ---
 Message-Id: <0>
 ---
@@ -446,7 +420,7 @@
 	check_threading expect.cover-letter --cover-letter --thread master
 '
 
-cat > expect.cl-irt <<EOF
+cat >expect.cl-irt <<EOF
 ---
 Message-Id: <0>
 In-Reply-To: <1>
@@ -478,7 +452,7 @@
 		--in-reply-to="<test.message>" --thread=shallow master
 '
 
-cat > expect.deep <<EOF
+cat >expect.deep <<EOF
 ---
 Message-Id: <0>
 ---
@@ -496,7 +470,7 @@
 	check_threading expect.deep --thread=deep master
 '
 
-cat > expect.deep-irt <<EOF
+cat >expect.deep-irt <<EOF
 ---
 Message-Id: <0>
 In-Reply-To: <1>
@@ -519,7 +493,7 @@
 		--in-reply-to="<test.message>" master
 '
 
-cat > expect.deep-cl <<EOF
+cat >expect.deep-cl <<EOF
 ---
 Message-Id: <0>
 ---
@@ -543,7 +517,7 @@
 	check_threading expect.deep-cl --cover-letter --thread=deep master
 '
 
-cat > expect.deep-cl-irt <<EOF
+cat >expect.deep-cl-irt <<EOF
 ---
 Message-Id: <0>
 In-Reply-To: <1>
@@ -594,7 +568,6 @@
 '
 
 test_expect_success 'excessive subject' '
-
 	rm -rf patches/ &&
 	git checkout side &&
 	before=$(git hash-object file) &&
@@ -622,10 +595,9 @@
 	! grep "file => foo .* 0 *\$" 0000-cover-letter.patch &&
 	git format-patch --cover-letter -1 -M &&
 	grep "file => foo .* 0 *\$" 0000-cover-letter.patch
-
 '
 
-cat > expect << EOF
+cat >expect <<EOF
   This is an excessively long subject line for a message due to the
     habit some projects have of not having a short, one-line subject at
     the start of the commit message, but rather sticking a whole
@@ -636,14 +608,12 @@
 EOF
 
 test_expect_success 'shortlog of cover-letter wraps overly-long onelines' '
-
 	git format-patch --cover-letter -2 &&
-	sed -e "1,/A U Thor/d" -e "/^\$/q" < 0000-cover-letter.patch > output &&
+	sed -e "1,/A U Thor/d" -e "/^\$/q" 0000-cover-letter.patch >output &&
 	test_cmp expect output
-
 '
 
-cat > expect << EOF
+cat >expect <<EOF
 index $before..$after 100644
 --- a/file
 +++ b/file
@@ -656,16 +626,14 @@
 EOF
 
 test_expect_success 'format-patch respects -U' '
-
 	git format-patch -U4 -2 &&
 	sed -e "1,/^diff/d" -e "/^+5/q" \
 		<0001-This-is-an-excessively-long-subject-line-for-a-messa.patch \
 		>output &&
 	test_cmp expect output
-
 '
 
-cat > expect << EOF
+cat >expect <<EOF
 
 diff --git a/file b/file
 index $before..$after 100644
@@ -679,11 +647,9 @@
 EOF
 
 test_expect_success 'format-patch -p suppresses stat' '
-
 	git format-patch -p -2 &&
-	sed -e "1,/^\$/d" -e "/^+5/q" < 0001-This-is-an-excessively-long-subject-line-for-a-messa.patch > output &&
+	sed -e "1,/^\$/d" -e "/^+5/q" 0001-This-is-an-excessively-long-subject-line-for-a-messa.patch >output &&
 	test_cmp expect output
-
 '
 
 test_expect_success 'format-patch from a subdirectory (1)' '
@@ -736,7 +702,7 @@
 '
 
 test_expect_success 'format-patch --in-reply-to' '
-	git format-patch -1 --stdout --in-reply-to "baz@foo.bar" > patch8 &&
+	git format-patch -1 --stdout --in-reply-to "baz@foo.bar" >patch8 &&
 	grep "^In-Reply-To: <baz@foo.bar>" patch8 &&
 	grep "^References: <baz@foo.bar>" patch8
 '
@@ -827,21 +793,24 @@
 	! grep "this is note 2" out
 '
 
-echo "fatal: --name-only does not make sense" > expect.name-only
-echo "fatal: --name-status does not make sense" > expect.name-status
-echo "fatal: --check does not make sense" > expect.check
+echo "fatal: --name-only does not make sense" >expect.name-only
+echo "fatal: --name-status does not make sense" >expect.name-status
+echo "fatal: --check does not make sense" >expect.check
 
 test_expect_success 'options no longer allowed for format-patch' '
-	test_must_fail git format-patch --name-only 2> output &&
+	test_must_fail git format-patch --name-only 2>output &&
 	test_i18ncmp expect.name-only output &&
-	test_must_fail git format-patch --name-status 2> output &&
+	test_must_fail git format-patch --name-status 2>output &&
 	test_i18ncmp expect.name-status output &&
-	test_must_fail git format-patch --check 2> output &&
-	test_i18ncmp expect.check output'
+	test_must_fail git format-patch --check 2>output &&
+	test_i18ncmp expect.check output
+'
 
 test_expect_success 'format-patch --numstat should produce a patch' '
-	git format-patch --numstat --stdout master..side > output &&
-	test 5 = $(grep "^diff --git a/" output | wc -l)'
+	git format-patch --numstat --stdout master..side >output &&
+	grep "^diff --git a/" output >diff &&
+	test_line_count = 5 diff
+'
 
 test_expect_success 'format-patch -- <path>' '
 	git format-patch master..side -- file 2>error &&
@@ -852,20 +821,25 @@
 	git format-patch --ignore-if-in-upstream HEAD
 '
 
-git_version="$(git --version | sed "s/.* //")"
+test_expect_success 'get git version' '
+	git_version=$(git --version) &&
+	git_version=${git_version##* }
+'
 
 signature() {
 	printf "%s\n%s\n\n" "-- " "${1:-$git_version}"
 }
 
 test_expect_success 'format-patch default signature' '
-	git format-patch --stdout -1 | tail -n 3 >output &&
+	git format-patch --stdout -1 >patch &&
+	tail -n 3 patch >output &&
 	signature >expect &&
 	test_cmp expect output
 '
 
 test_expect_success 'format-patch --signature' '
-	git format-patch --stdout --signature="my sig" -1 | tail -n 3 >output &&
+	git format-patch --stdout --signature="my sig" -1 >patch &&
+	tail -n 3 patch >output &&
 	signature "my sig" >expect &&
 	test_cmp expect output
 '
@@ -897,8 +871,8 @@
 	git config --unset-all format.signature &&
 	git format-patch --stdout --signature="my sig" --cover-letter \
 		-1 >output &&
-	grep "my sig" output &&
-	test 2 = $(grep "my sig" output | wc -l)
+	grep "my sig" output >sig &&
+	test_line_count = 2 sig
 '
 
 test_expect_success 'format.signature="" suppresses signatures' '
@@ -935,7 +909,7 @@
 test_expect_success '--signature-file=file works' '
 	git format-patch --stdout --signature-file=mail-signature -1 >output &&
 	check_patch output &&
-	sed -e "1,/^-- \$/d" <output >actual &&
+	sed -e "1,/^-- \$/d" output >actual &&
 	{
 		cat mail-signature && echo
 	} >expect &&
@@ -946,7 +920,7 @@
 	test_config format.signaturefile mail-signature &&
 	git format-patch --stdout -1 >output &&
 	check_patch output &&
-	sed -e "1,/^-- \$/d" <output >actual &&
+	sed -e "1,/^-- \$/d" output >actual &&
 	{
 		cat mail-signature && echo
 	} >expect &&
@@ -968,7 +942,7 @@
 	git format-patch --stdout \
 			--signature-file=other-mail-signature -1 >output &&
 	check_patch output &&
-	sed -e "1,/^-- \$/d" <output >actual &&
+	sed -e "1,/^-- \$/d" output >actual &&
 	{
 		cat other-mail-signature && echo
 	} >expect &&
@@ -1037,7 +1011,7 @@
 	git add file &&
 	git commit -m "$M512" &&
 	git format-patch --stdout -1 >patch &&
-	sed -n "/^Subject/p; /^ /p; /^$/q" <patch >subject &&
+	sed -n "/^Subject/p; /^ /p; /^$/q" patch >subject &&
 	test_cmp expect subject
 '
 
@@ -1076,7 +1050,7 @@
 	git add file &&
 	git commit -m "$M512" &&
 	git format-patch --stdout -1 >patch &&
-	sed -n "/^Subject/p; /^ /p; /^$/q" <patch >subject &&
+	sed -n "/^Subject/p; /^ /p; /^$/q" patch >subject &&
 	test_cmp expect subject
 '
 
@@ -1085,7 +1059,7 @@
 	git add file &&
 	GIT_AUTHOR_NAME=$1 git commit -m author-check &&
 	git format-patch --stdout -1 >patch &&
-	sed -n "/^From: /p; /^ /p; /^$/q" <patch >actual &&
+	sed -n "/^From: /p; /^ /p; /^$/q" patch >actual &&
 	test_cmp expect actual
 }
 
@@ -1205,7 +1179,7 @@
 	From: A U Thor <author@example.com>
 
 	EOF
-	sed -ne "/^From:/p; /^$/p; /^---$/q" <patch >patch.head &&
+	sed -ne "/^From:/p; /^$/p; /^---$/q" patch >patch.head &&
 	test_cmp expect patch.head
 '
 
@@ -1217,7 +1191,7 @@
 	From: A U Thor <author@example.com>
 
 	EOF
-	sed -ne "/^From:/p; /^$/p; /^---$/q" <patch >patch.head &&
+	sed -ne "/^From:/p; /^$/p; /^---$/q" patch >patch.head &&
 	test_cmp expect patch.head
 '
 
@@ -1227,7 +1201,7 @@
 	From: A U Thor <author@example.com>
 
 	EOF
-	sed -ne "/^From:/p; /^$/p; /^---$/q" <patch >patch.head &&
+	sed -ne "/^From:/p; /^$/p; /^---$/q" patch >patch.head &&
 	test_cmp expect patch.head
 '
 
@@ -1242,7 +1216,7 @@
 	From: éxötìc <author@example.com>
 
 	EOF
-	sed -ne "/^From:/p; /^$/p; /^Content-Type/p; /^---$/q" <patch >patch.head &&
+	sed -ne "/^From:/p; /^$/p; /^Content-Type/p; /^---$/q" patch >patch.head &&
 	test_cmp expect patch.head
 '
 
@@ -1256,283 +1230,283 @@
 
 test_expect_success 'signoff: commit with no body' '
 	append_signoff </dev/null >actual &&
-	cat <<\EOF | sed "s/EOL$//" >expected &&
-4:Subject: [PATCH] EOL
-8:
-9:Signed-off-by: C O Mitter <committer@example.com>
-EOF
-	test_cmp expected actual
+	cat <<-\EOF | sed "s/EOL$//" >expect &&
+	4:Subject: [PATCH] EOL
+	8:
+	9:Signed-off-by: C O Mitter <committer@example.com>
+	EOF
+	test_cmp expect actual
 '
 
 test_expect_success 'signoff: commit with only subject' '
 	echo subject | append_signoff >actual &&
-	cat >expected <<\EOF &&
-4:Subject: [PATCH] subject
-8:
-9:Signed-off-by: C O Mitter <committer@example.com>
-EOF
-	test_cmp expected actual
+	cat >expect <<-\EOF &&
+	4:Subject: [PATCH] subject
+	8:
+	9:Signed-off-by: C O Mitter <committer@example.com>
+	EOF
+	test_cmp expect actual
 '
 
 test_expect_success 'signoff: commit with only subject that does not end with NL' '
 	printf subject | append_signoff >actual &&
-	cat >expected <<\EOF &&
-4:Subject: [PATCH] subject
-8:
-9:Signed-off-by: C O Mitter <committer@example.com>
-EOF
-	test_cmp expected actual
+	cat >expect <<-\EOF &&
+	4:Subject: [PATCH] subject
+	8:
+	9:Signed-off-by: C O Mitter <committer@example.com>
+	EOF
+	test_cmp expect actual
 '
 
 test_expect_success 'signoff: no existing signoffs' '
-	append_signoff <<\EOF >actual &&
-subject
+	append_signoff <<-\EOF >actual &&
+	subject
 
-body
-EOF
-	cat >expected <<\EOF &&
-4:Subject: [PATCH] subject
-8:
-10:
-11:Signed-off-by: C O Mitter <committer@example.com>
-EOF
-	test_cmp expected actual
+	body
+	EOF
+	cat >expect <<-\EOF &&
+	4:Subject: [PATCH] subject
+	8:
+	10:
+	11:Signed-off-by: C O Mitter <committer@example.com>
+	EOF
+	test_cmp expect actual
 '
 
 test_expect_success 'signoff: no existing signoffs and no trailing NL' '
 	printf "subject\n\nbody" | append_signoff >actual &&
-	cat >expected <<\EOF &&
-4:Subject: [PATCH] subject
-8:
-10:
-11:Signed-off-by: C O Mitter <committer@example.com>
-EOF
-	test_cmp expected actual
+	cat >expect <<-\EOF &&
+	4:Subject: [PATCH] subject
+	8:
+	10:
+	11:Signed-off-by: C O Mitter <committer@example.com>
+	EOF
+	test_cmp expect actual
 '
 
 test_expect_success 'signoff: some random signoff' '
-	append_signoff <<\EOF >actual &&
-subject
+	append_signoff <<-\EOF >actual &&
+	subject
 
-body
+	body
 
-Signed-off-by: my@house
-EOF
-	cat >expected <<\EOF &&
-4:Subject: [PATCH] subject
-8:
-10:
-11:Signed-off-by: my@house
-12:Signed-off-by: C O Mitter <committer@example.com>
-EOF
-	test_cmp expected actual
+	Signed-off-by: my@house
+	EOF
+	cat >expect <<-\EOF &&
+	4:Subject: [PATCH] subject
+	8:
+	10:
+	11:Signed-off-by: my@house
+	12:Signed-off-by: C O Mitter <committer@example.com>
+	EOF
+	test_cmp expect actual
 '
 
 test_expect_success 'signoff: misc conforming footer elements' '
-	append_signoff <<\EOF >actual &&
-subject
+	append_signoff <<-\EOF >actual &&
+	subject
 
-body
+	body
 
-Signed-off-by: my@house
-(cherry picked from commit da39a3ee5e6b4b0d3255bfef95601890afd80709)
-Tested-by: Some One <someone@example.com>
-Bug: 1234
-EOF
-	cat >expected <<\EOF &&
-4:Subject: [PATCH] subject
-8:
-10:
-11:Signed-off-by: my@house
-15:Signed-off-by: C O Mitter <committer@example.com>
-EOF
-	test_cmp expected actual
+	Signed-off-by: my@house
+	(cherry picked from commit da39a3ee5e6b4b0d3255bfef95601890afd80709)
+	Tested-by: Some One <someone@example.com>
+	Bug: 1234
+	EOF
+	cat >expect <<-\EOF &&
+	4:Subject: [PATCH] subject
+	8:
+	10:
+	11:Signed-off-by: my@house
+	15:Signed-off-by: C O Mitter <committer@example.com>
+	EOF
+	test_cmp expect actual
 '
 
 test_expect_success 'signoff: some random signoff-alike' '
-	append_signoff <<\EOF >actual &&
-subject
+	append_signoff <<-\EOF >actual &&
+	subject
 
-body
-Fooled-by-me: my@house
-EOF
-	cat >expected <<\EOF &&
-4:Subject: [PATCH] subject
-8:
-11:
-12:Signed-off-by: C O Mitter <committer@example.com>
-EOF
-	test_cmp expected actual
+	body
+	Fooled-by-me: my@house
+	EOF
+	cat >expect <<-\EOF &&
+	4:Subject: [PATCH] subject
+	8:
+	11:
+	12:Signed-off-by: C O Mitter <committer@example.com>
+	EOF
+	test_cmp expect actual
 '
 
 test_expect_success 'signoff: not really a signoff' '
-	append_signoff <<\EOF >actual &&
-subject
+	append_signoff <<-\EOF >actual &&
+	subject
 
-I want to mention about Signed-off-by: here.
-EOF
-	cat >expected <<\EOF &&
-4:Subject: [PATCH] subject
-8:
-9:I want to mention about Signed-off-by: here.
-10:
-11:Signed-off-by: C O Mitter <committer@example.com>
-EOF
-	test_cmp expected actual
+	I want to mention about Signed-off-by: here.
+	EOF
+	cat >expect <<-\EOF &&
+	4:Subject: [PATCH] subject
+	8:
+	9:I want to mention about Signed-off-by: here.
+	10:
+	11:Signed-off-by: C O Mitter <committer@example.com>
+	EOF
+	test_cmp expect actual
 '
 
 test_expect_success 'signoff: not really a signoff (2)' '
-	append_signoff <<\EOF >actual &&
-subject
+	append_signoff <<-\EOF >actual &&
+	subject
 
-My unfortunate
-Signed-off-by: example happens to be wrapped here.
-EOF
-	cat >expected <<\EOF &&
-4:Subject: [PATCH] subject
-8:
-10:Signed-off-by: example happens to be wrapped here.
-11:Signed-off-by: C O Mitter <committer@example.com>
-EOF
-	test_cmp expected actual
+	My unfortunate
+	Signed-off-by: example happens to be wrapped here.
+	EOF
+	cat >expect <<-\EOF &&
+	4:Subject: [PATCH] subject
+	8:
+	10:Signed-off-by: example happens to be wrapped here.
+	11:Signed-off-by: C O Mitter <committer@example.com>
+	EOF
+	test_cmp expect actual
 '
 
 test_expect_success 'signoff: valid S-o-b paragraph in the middle' '
-	append_signoff <<\EOF >actual &&
-subject
+	append_signoff <<-\EOF >actual &&
+	subject
 
-Signed-off-by: my@house
-Signed-off-by: your@house
+	Signed-off-by: my@house
+	Signed-off-by: your@house
 
-A lot of houses.
-EOF
-	cat >expected <<\EOF &&
-4:Subject: [PATCH] subject
-8:
-9:Signed-off-by: my@house
-10:Signed-off-by: your@house
-11:
-13:
-14:Signed-off-by: C O Mitter <committer@example.com>
-EOF
-	test_cmp expected actual
+	A lot of houses.
+	EOF
+	cat >expect <<-\EOF &&
+	4:Subject: [PATCH] subject
+	8:
+	9:Signed-off-by: my@house
+	10:Signed-off-by: your@house
+	11:
+	13:
+	14:Signed-off-by: C O Mitter <committer@example.com>
+	EOF
+	test_cmp expect actual
 '
 
 test_expect_success 'signoff: the same signoff at the end' '
-	append_signoff <<\EOF >actual &&
-subject
+	append_signoff <<-\EOF >actual &&
+	subject
 
-body
+	body
 
-Signed-off-by: C O Mitter <committer@example.com>
-EOF
-	cat >expected <<\EOF &&
-4:Subject: [PATCH] subject
-8:
-10:
-11:Signed-off-by: C O Mitter <committer@example.com>
-EOF
-	test_cmp expected actual
+	Signed-off-by: C O Mitter <committer@example.com>
+	EOF
+	cat >expect <<-\EOF &&
+	4:Subject: [PATCH] subject
+	8:
+	10:
+	11:Signed-off-by: C O Mitter <committer@example.com>
+	EOF
+	test_cmp expect actual
 '
 
 test_expect_success 'signoff: the same signoff at the end, no trailing NL' '
 	printf "subject\n\nSigned-off-by: C O Mitter <committer@example.com>" |
 		append_signoff >actual &&
-	cat >expected <<\EOF &&
-4:Subject: [PATCH] subject
-8:
-9:Signed-off-by: C O Mitter <committer@example.com>
-EOF
-	test_cmp expected actual
+	cat >expect <<-\EOF &&
+	4:Subject: [PATCH] subject
+	8:
+	9:Signed-off-by: C O Mitter <committer@example.com>
+	EOF
+	test_cmp expect actual
 '
 
 test_expect_success 'signoff: the same signoff NOT at the end' '
-	append_signoff <<\EOF >actual &&
-subject
+	append_signoff <<-\EOF >actual &&
+	subject
 
-body
+	body
 
-Signed-off-by: C O Mitter <committer@example.com>
-Signed-off-by: my@house
-EOF
-	cat >expected <<\EOF &&
-4:Subject: [PATCH] subject
-8:
-10:
-11:Signed-off-by: C O Mitter <committer@example.com>
-12:Signed-off-by: my@house
-EOF
-	test_cmp expected actual
+	Signed-off-by: C O Mitter <committer@example.com>
+	Signed-off-by: my@house
+	EOF
+	cat >expect <<-\EOF &&
+	4:Subject: [PATCH] subject
+	8:
+	10:
+	11:Signed-off-by: C O Mitter <committer@example.com>
+	12:Signed-off-by: my@house
+	EOF
+	test_cmp expect actual
 '
 
 test_expect_success 'signoff: tolerate garbage in conforming footer' '
-	append_signoff <<\EOF >actual &&
-subject
+	append_signoff <<-\EOF >actual &&
+	subject
 
-body
+	body
 
-Tested-by: my@house
-Some Trash
-Signed-off-by: C O Mitter <committer@example.com>
-EOF
-	cat >expected <<\EOF &&
-4:Subject: [PATCH] subject
-8:
-10:
-13:Signed-off-by: C O Mitter <committer@example.com>
-EOF
-	test_cmp expected actual
+	Tested-by: my@house
+	Some Trash
+	Signed-off-by: C O Mitter <committer@example.com>
+	EOF
+	cat >expect <<-\EOF &&
+	4:Subject: [PATCH] subject
+	8:
+	10:
+	13:Signed-off-by: C O Mitter <committer@example.com>
+	EOF
+	test_cmp expect actual
 '
 
 test_expect_success 'signoff: respect trailer config' '
-	append_signoff <<\EOF >actual &&
-subject
+	append_signoff <<-\EOF >actual &&
+	subject
 
-Myfooter: x
-Some Trash
-EOF
-	cat >expected <<\EOF &&
-4:Subject: [PATCH] subject
-8:
-11:
-12:Signed-off-by: C O Mitter <committer@example.com>
-EOF
-	test_cmp expected actual &&
+	Myfooter: x
+	Some Trash
+	EOF
+	cat >expect <<-\EOF &&
+	4:Subject: [PATCH] subject
+	8:
+	11:
+	12:Signed-off-by: C O Mitter <committer@example.com>
+	EOF
+	test_cmp expect actual &&
 
 	test_config trailer.Myfooter.ifexists add &&
-	append_signoff <<\EOF >actual &&
-subject
+	append_signoff <<-\EOF >actual &&
+	subject
 
-Myfooter: x
-Some Trash
-EOF
-	cat >expected <<\EOF &&
-4:Subject: [PATCH] subject
-8:
-11:Signed-off-by: C O Mitter <committer@example.com>
-EOF
-	test_cmp expected actual
+	Myfooter: x
+	Some Trash
+	EOF
+	cat >expect <<-\EOF &&
+	4:Subject: [PATCH] subject
+	8:
+	11:Signed-off-by: C O Mitter <committer@example.com>
+	EOF
+	test_cmp expect actual
 '
 
 test_expect_success 'signoff: footer begins with non-signoff without @ sign' '
-	append_signoff <<\EOF >actual &&
-subject
+	append_signoff <<-\EOF >actual &&
+	subject
 
-body
+	body
 
-Reviewed-id: Noone
-Tested-by: my@house
-Change-id: Ideadbeef
-Signed-off-by: C O Mitter <committer@example.com>
-Bug: 1234
-EOF
-	cat >expected <<\EOF &&
-4:Subject: [PATCH] subject
-8:
-10:
-14:Signed-off-by: C O Mitter <committer@example.com>
-EOF
-	test_cmp expected actual
+	Reviewed-id: Noone
+	Tested-by: my@house
+	Change-id: Ideadbeef
+	Signed-off-by: C O Mitter <committer@example.com>
+	Bug: 1234
+	EOF
+	cat >expect <<-\EOF &&
+	4:Subject: [PATCH] subject
+	8:
+	10:
+	14:Signed-off-by: C O Mitter <committer@example.com>
+	EOF
+	test_cmp expect actual
 '
 
 test_expect_success 'format patch ignores color.ui' '
@@ -1547,42 +1521,42 @@
 	git checkout rebuild-1 &&
 	test_config branch.rebuild-1.description hello &&
 	git format-patch --stdout --cover-letter master >actual &&
-	grep hello actual >/dev/null
+	grep hello actual
 '
 
 test_expect_success 'cover letter using branch description (2)' '
 	git checkout rebuild-1 &&
 	test_config branch.rebuild-1.description hello &&
 	git format-patch --stdout --cover-letter rebuild-1~2..rebuild-1 >actual &&
-	grep hello actual >/dev/null
+	grep hello actual
 '
 
 test_expect_success 'cover letter using branch description (3)' '
 	git checkout rebuild-1 &&
 	test_config branch.rebuild-1.description hello &&
 	git format-patch --stdout --cover-letter ^master rebuild-1 >actual &&
-	grep hello actual >/dev/null
+	grep hello actual
 '
 
 test_expect_success 'cover letter using branch description (4)' '
 	git checkout rebuild-1 &&
 	test_config branch.rebuild-1.description hello &&
 	git format-patch --stdout --cover-letter master.. >actual &&
-	grep hello actual >/dev/null
+	grep hello actual
 '
 
 test_expect_success 'cover letter using branch description (5)' '
 	git checkout rebuild-1 &&
 	test_config branch.rebuild-1.description hello &&
 	git format-patch --stdout --cover-letter -2 HEAD >actual &&
-	grep hello actual >/dev/null
+	grep hello actual
 '
 
 test_expect_success 'cover letter using branch description (6)' '
 	git checkout rebuild-1 &&
 	test_config branch.rebuild-1.description hello &&
 	git format-patch --stdout --cover-letter -2 >actual &&
-	grep hello actual >/dev/null
+	grep hello actual
 '
 
 test_expect_success 'cover letter with nothing' '
@@ -1632,11 +1606,39 @@
 	test_cmp from filtered
 '
 
+test_expect_success 'format-patch -o with no leading directories' '
+	rm -fr patches &&
+	git format-patch -o patches master..side &&
+	count=$(git rev-list --count master..side) &&
+	ls patches >list &&
+	test_line_count = $count list
+'
+
+test_expect_success 'format-patch -o with leading existing directories' '
+	rm -rf existing-dir &&
+	mkdir existing-dir &&
+	git format-patch -o existing-dir/patches master..side &&
+	count=$(git rev-list --count master..side) &&
+	ls existing-dir/patches >list &&
+	test_line_count = $count list
+'
+
+test_expect_success 'format-patch -o with leading non-existing directories' '
+	rm -rf non-existing-dir &&
+	git format-patch -o non-existing-dir/patches master..side &&
+	count=$(git rev-list --count master..side) &&
+	test_path_is_dir non-existing-dir &&
+	ls non-existing-dir/patches >list &&
+	test_line_count = $count list
+'
+
 test_expect_success 'format-patch format.outputDirectory option' '
 	test_config format.outputDirectory patches &&
 	rm -fr patches &&
 	git format-patch master..side &&
-	test $(git rev-list master..side | wc -l) -eq $(ls patches | wc -l)
+	count=$(git rev-list --count master..side) &&
+	ls patches >list &&
+	test_line_count = $count list
 '
 
 test_expect_success 'format-patch -o overrides format.outputDirectory' '
@@ -1649,20 +1651,41 @@
 
 test_expect_success 'format-patch --base' '
 	git checkout patchid &&
-	git format-patch --stdout --base=HEAD~3 -1 | tail -n 7 >actual1 &&
-	git format-patch --stdout --base=HEAD~3 HEAD~.. | tail -n 7 >actual2 &&
-	echo >expected &&
-	echo "base-commit: $(git rev-parse HEAD~3)" >>expected &&
-	echo "prerequisite-patch-id: $(git show --patch HEAD~2 | git patch-id --stable | awk "{print \$1}")" >>expected &&
-	echo "prerequisite-patch-id: $(git show --patch HEAD~1 | git patch-id --stable | awk "{print \$1}")" >>expected &&
-	signature >> expected &&
-	test_cmp expected actual1 &&
-	test_cmp expected actual2 &&
+
+	git format-patch --stdout --base=HEAD~3 -1 >patch &&
+	tail -n 7 patch >actual1 &&
+
+	git format-patch --stdout --base=HEAD~3 HEAD~.. >patch &&
+	tail -n 7 patch >actual2 &&
+
+	echo >expect &&
+	git rev-parse HEAD~3 >commit-id-base &&
+	echo "base-commit: $(cat commit-id-base)" >>expect &&
+
+	git show --patch HEAD~2 >patch &&
+	git patch-id --stable <patch >patch.id.raw &&
+	awk "{print \"prerequisite-patch-id:\", \$1}" <patch.id.raw >>expect &&
+
+	git show --patch HEAD~1 >patch &&
+	git patch-id --stable <patch >patch.id.raw &&
+	awk "{print \"prerequisite-patch-id:\", \$1}" <patch.id.raw >>expect &&
+
+	signature >>expect &&
+	test_cmp expect actual1 &&
+	test_cmp expect actual2 &&
+
 	echo >fail &&
-	echo "base-commit: $(git rev-parse HEAD~3)" >>fail &&
-	echo "prerequisite-patch-id: $(git show --patch HEAD~2 | git patch-id --unstable | awk "{print \$1}")" >>fail &&
-	echo "prerequisite-patch-id: $(git show --patch HEAD~1 | git patch-id --unstable | awk "{print \$1}")" >>fail &&
-	signature >> fail &&
+	echo "base-commit: $(cat commit-id-base)" >>fail &&
+
+	git show --patch HEAD~2 >patch &&
+	git patch-id --unstable <patch >patch.id.raw &&
+	awk "{print \"prerequisite-patch-id:\", \$1}" <patch.id.raw >>fail &&
+
+	git show --patch HEAD~1 >patch &&
+	git patch-id --unstable <patch >patch.id.raw &&
+	awk "{print \"prerequisite-patch-id:\", \$1}" <patch.id.raw >>fail &&
+
+	signature >>fail &&
 	! test_cmp fail actual1 &&
 	! test_cmp fail actual2
 '
@@ -1672,8 +1695,9 @@
 	test_must_fail git format-patch --base=HEAD~1 -2 &&
 	git format-patch --stdout --base=HEAD~2 -2 >patch &&
 	grep "^base-commit:" patch >actual &&
-	echo "base-commit: $(git rev-parse HEAD~2)" >expected &&
-	test_cmp expected actual
+	git rev-parse HEAD~2 >commit-id-base &&
+	echo "base-commit: $(cat commit-id-base)" >expect &&
+	test_cmp expect actual
 '
 
 test_expect_success 'format-patch --base errors out when base commit is not ancestor of revision list' '
@@ -1699,8 +1723,8 @@
 	test_must_fail git format-patch --base=$(cat commit-id-Z) -3 &&
 	git format-patch --stdout --base=$(cat commit-id-base) -3 >patch &&
 	grep "^base-commit:" patch >actual &&
-	echo "base-commit: $(cat commit-id-base)" >expected &&
-	test_cmp expected actual
+	echo "base-commit: $(cat commit-id-base)" >expect &&
+	test_cmp expect actual
 '
 
 test_expect_success 'format-patch --base=auto' '
@@ -1711,8 +1735,9 @@
 	test_commit N2 &&
 	git format-patch --stdout --base=auto -2 >patch &&
 	grep "^base-commit:" patch >actual &&
-	echo "base-commit: $(git rev-parse upstream)" >expected &&
-	test_cmp expected actual
+	git rev-parse upstream >commit-id-base &&
+	echo "base-commit: $(cat commit-id-base)" >expect &&
+	test_cmp expect actual
 '
 
 test_expect_success 'format-patch errors out when history involves criss-cross' '
@@ -1748,8 +1773,9 @@
 	git config format.useAutoBase true &&
 	git format-patch --stdout -1 >patch &&
 	grep "^base-commit:" patch >actual &&
-	echo "base-commit: $(git rev-parse upstream)" >expected &&
-	test_cmp expected actual
+	git rev-parse upstream >commit-id-base &&
+	echo "base-commit: $(cat commit-id-base)" >expect &&
+	test_cmp expect actual
 '
 
 test_expect_success 'format-patch --base overrides format.useAutoBase' '
@@ -1757,8 +1783,9 @@
 	git config format.useAutoBase true &&
 	git format-patch --stdout --base=HEAD~1 -1 >patch &&
 	grep "^base-commit:" patch >actual &&
-	echo "base-commit: $(git rev-parse HEAD~1)" >expected &&
-	test_cmp expected actual
+	git rev-parse HEAD~1 >commit-id-base &&
+	echo "base-commit: $(cat commit-id-base)" >expect &&
+	test_cmp expect actual
 '
 
 test_expect_success 'format-patch --base with --attach' '
@@ -1833,7 +1860,7 @@
 	git format-patch --cover-letter --interdiff=boop~2 -1 boop &&
 	test_i18ngrep "^Interdiff:$" 0000-cover-letter.patch &&
 	test_i18ngrep ! "^Interdiff:$" 0001-fleep.patch &&
-	sed "1,/^@@ /d; /^-- $/q" <0000-cover-letter.patch >actual &&
+	sed "1,/^@@ /d; /^-- $/q" 0000-cover-letter.patch >actual &&
 	test_cmp expect actual
 '
 
@@ -1849,7 +1876,7 @@
 	EOF
 	git format-patch --interdiff=boop~2 -1 boop &&
 	test_i18ngrep "^Interdiff:$" 0001-fleep.patch &&
-	sed "1,/^  @@ /d; /^$/q" <0001-fleep.patch >actual &&
+	sed "1,/^  @@ /d; /^$/q" 0001-fleep.patch >actual &&
 	test_cmp expect actual
 '
 
diff --git a/t/t4018-diff-funcname.sh b/t/t4018-diff-funcname.sh
index 9261d6d..6f5ef00 100755
--- a/t/t4018-diff-funcname.sh
+++ b/t/t4018-diff-funcname.sh
@@ -31,6 +31,7 @@
 	cpp
 	csharp
 	css
+	dts
 	fortran
 	fountain
 	golang
diff --git a/t/t4018/dts-labels b/t/t4018/dts-labels
new file mode 100644
index 0000000..b21ef87
--- /dev/null
+++ b/t/t4018/dts-labels
@@ -0,0 +1,9 @@
+/ {
+	label_1: node1@ff00 {
+		label2: RIGHT {
+			vendor,some-property;
+
+			ChangeMe = <0x45-30>;
+		};
+	};
+};
diff --git a/t/t4018/dts-node-unitless b/t/t4018/dts-node-unitless
new file mode 100644
index 0000000..c5287d9
--- /dev/null
+++ b/t/t4018/dts-node-unitless
@@ -0,0 +1,8 @@
+/ {
+	label_1: node1 {
+		RIGHT {
+			prop-array = <1>, <4>;
+			ChangeMe = <0xffeedd00>;
+		};
+	};
+};
diff --git a/t/t4018/dts-nodes b/t/t4018/dts-nodes
new file mode 100644
index 0000000..5a4334b
--- /dev/null
+++ b/t/t4018/dts-nodes
@@ -0,0 +1,8 @@
+/ {
+	label_1: node1@ff00 {
+		RIGHT@deadf00,4000 {
+			#size-cells = <1>;
+			ChangeMe = <0xffeedd00>;
+		};
+	};
+};
diff --git a/t/t4018/dts-nodes-boolean-prop b/t/t4018/dts-nodes-boolean-prop
new file mode 100644
index 0000000..afc6b5b
--- /dev/null
+++ b/t/t4018/dts-nodes-boolean-prop
@@ -0,0 +1,9 @@
+/ {
+	label_1: node1@ff00 {
+		RIGHT@deadf00,4000 {
+			boolean-prop1;
+
+			ChangeMe;
+		};
+	};
+};
diff --git a/t/t4018/dts-nodes-comment1 b/t/t4018/dts-nodes-comment1
new file mode 100644
index 0000000..559dfce
--- /dev/null
+++ b/t/t4018/dts-nodes-comment1
@@ -0,0 +1,8 @@
+/ {
+	label_1: node1@ff00 {
+		RIGHT@deadf00,4000 /* &a comment */ {
+			#size-cells = <1>;
+			ChangeMe = <0xffeedd00>;
+		};
+	};
+};
diff --git a/t/t4018/dts-nodes-comment2 b/t/t4018/dts-nodes-comment2
new file mode 100644
index 0000000..27e9718
--- /dev/null
+++ b/t/t4018/dts-nodes-comment2
@@ -0,0 +1,8 @@
+/ {
+	label_1: node1@ff00 {
+		RIGHT@deadf00,4000 { /* a trailing comment */ 
+			#size-cells = <1>;
+			ChangeMe = <0xffeedd00>;
+		};
+	};
+};
diff --git a/t/t4018/dts-nodes-multiline-prop b/t/t4018/dts-nodes-multiline-prop
new file mode 100644
index 0000000..072d58b
--- /dev/null
+++ b/t/t4018/dts-nodes-multiline-prop
@@ -0,0 +1,13 @@
+/ {
+	label_1: node1@ff00 {
+		RIGHT@deadf00,4000 {
+			multilineprop = <3>,
+					<4>,
+					<5>,
+					<6>,
+					<7>;
+
+			ChangeMe = <0xffeedd00>;
+		};
+	};
+};
diff --git a/t/t4018/dts-reference b/t/t4018/dts-reference
new file mode 100644
index 0000000..8f0c87d
--- /dev/null
+++ b/t/t4018/dts-reference
@@ -0,0 +1,9 @@
+&label_1 {
+	TEST = <455>;
+};
+
+&RIGHT {
+	vendor,some-property;
+
+	ChangeMe = <0x45-30>;
+};
diff --git a/t/t4018/dts-root b/t/t4018/dts-root
new file mode 100644
index 0000000..4353b82
--- /dev/null
+++ b/t/t4018/dts-root
@@ -0,0 +1,5 @@
+/ { RIGHT /* Technically just supposed to be a slash and brace */
+	#size-cells = <1>;
+
+	ChangeMe = <0xffeedd00>;
+};
diff --git a/t/t4018/dts-root-comment b/t/t4018/dts-root-comment
new file mode 100644
index 0000000..333a625
--- /dev/null
+++ b/t/t4018/dts-root-comment
@@ -0,0 +1,8 @@
+/ { RIGHT /* Technically just supposed to be a slash and brace */
+	#size-cells = <1>;
+
+	/* This comment should be ignored */
+
+	some-property = <40+2>;
+	ChangeMe = <0xffeedd00>;
+};
diff --git a/t/t4034-diff-words.sh b/t/t4034-diff-words.sh
index 912df91..9a93c2a 100755
--- a/t/t4034-diff-words.sh
+++ b/t/t4034-diff-words.sh
@@ -303,6 +303,7 @@
 test_language_driver cpp
 test_language_driver csharp
 test_language_driver css
+test_language_driver dts
 test_language_driver fortran
 test_language_driver html
 test_language_driver java
diff --git a/t/t4034/dts/expect b/t/t4034/dts/expect
new file mode 100644
index 0000000..560fc99
--- /dev/null
+++ b/t/t4034/dts/expect
@@ -0,0 +1,37 @@
+<BOLD>diff --git a/pre b/post<RESET>
+<BOLD>index b6a9051..7803aee 100644<RESET>
+<BOLD>--- a/pre<RESET>
+<BOLD>+++ b/post<RESET>
+<CYAN>@@ -1,32 +1,32 @@<RESET>
+/ {<RESET>
+	<RED>this_handle<RESET><GREEN>HANDLE_2<RESET>: <RED>node<RESET><GREEN>new-node<RESET>@<RED>f00<RESET><GREEN>eeda<RESET> {
+		compatible = "<RED>mydev<RESET><GREEN>vendor,compat<RESET>";
+		string-prop = <RED>start<RESET><GREEN>end<RESET>: "hello <RED>world!<RESET><GREEN>world?<RESET>" <RED>end<RESET><GREEN>start<RESET>: ;
+		<RED>#size-cells<RESET><GREEN>#address-cells<RESET> = <<RED>0+0<RESET><GREEN>0+40<RESET>>;
+		reg = <<RED>0xf00<RESET><GREEN>0xeeda<RESET>>;
+		prop = <<GREEN>(<RESET>1<GREEN>)<RESET>>;
+		prop = <<GREEN>(<RESET>-1e10<GREEN>)<RESET>>;
+		prop = <(!<RED>3<RESET><GREEN>1<RESET>)>;
+		prop = <(~<RED>3<RESET><GREEN>1<RESET>)>;
+		prop = <(<RED>3<RESET><GREEN>1<RESET>*<RED>4<RESET><GREEN>2<RESET>)>;
+		prop = <(<RED>3<RESET><GREEN>1<RESET>&<RED>4<RESET><GREEN>2<RESET>)>;
+		prop = <(<RED>3<RESET><GREEN>1<RESET>*<RED>4<RESET><GREEN>2<RESET>)>;
+		prop = <(<RED>3<RESET><GREEN>1<RESET>/<RED>4<RESET><GREEN>2<RESET>)>;
+		prop = <(<RED>3<RESET><GREEN>1<RESET>%<RED>4<RESET><GREEN>2<RESET>)>;
+		prop = <(<RED>3+4<RESET><GREEN>1+2<RESET>)>;
+		prop = <(<RED>3-4<RESET><GREEN>1-2<RESET>)>;
+		prop = /bits/ <RED>64<RESET><GREEN>32<RESET> <(<RED>3<RESET><GREEN>1<RESET><<<RED>4<RESET><GREEN>2<RESET>)>;
+		prop = <(<RED>3<RESET><GREEN>1<RESET>>><RED>4<RESET><GREEN>2<RESET>)>;
+		prop = <(<RED>3<RESET><GREEN>1<RESET>&<RED>4<RESET><GREEN>2<RESET>)>;
+		prop = <(<RED>3<RESET><GREEN>1<RESET>^<RED>4<RESET><GREEN>2<RESET>)>;
+		prop = <(<RED>3<RESET><GREEN>1<RESET>|<RED>4<RESET><GREEN>2<RESET>)>;
+		prop = <(<RED>3<RESET><GREEN>1<RESET>&&<RED>4<RESET><GREEN>2<RESET>)>;
+		prop = <(<RED>3<RESET><GREEN>1<RESET>||<RED>4<RESET><GREEN>2<RESET>)>;
+		prop = <(<RED>4?5<RESET><GREEN>1?2<RESET>:3)>;
+		list = <&<RED>this_handle<RESET><GREEN>HANDLE_2<RESET>>, <0 0 0 <RED>0<RESET><GREEN>1<RESET>>;
+	};<RESET>
+
+	&<RED>phandle<RESET><GREEN>phandle2<RESET> {
+		<RED>pre-phandle<RESET><GREEN>prop_handle<RESET> = <&<RED>this_handle<RESET><GREEN>HANDLE_2<RESET>>;
+	};<RESET>
+};<RESET>
diff --git a/t/t4034/dts/post b/t/t4034/dts/post
new file mode 100644
index 0000000..7803aee
--- /dev/null
+++ b/t/t4034/dts/post
@@ -0,0 +1,32 @@
+/ {
+	HANDLE_2: new-node@eeda {
+		compatible = "vendor,compat";
+		string-prop = end: "hello world?" start: ;
+		#address-cells = <0+40>;
+		reg = <0xeeda>;
+		prop = <(1)>;
+		prop = <(-1e10)>;
+		prop = <(!1)>;
+		prop = <(~1)>;
+		prop = <(1*2)>;
+		prop = <(1&2)>;
+		prop = <(1*2)>;
+		prop = <(1/2)>;
+		prop = <(1%2)>;
+		prop = <(1+2)>;
+		prop = <(1-2)>;
+		prop = /bits/ 32 <(1<<2)>;
+		prop = <(1>>2)>;
+		prop = <(1&2)>;
+		prop = <(1^2)>;
+		prop = <(1|2)>;
+		prop = <(1&&2)>;
+		prop = <(1||2)>;
+		prop = <(1?2:3)>;
+		list = <&HANDLE_2>, <0 0 0 1>;
+	};
+
+	&phandle2 {
+		prop_handle = <&HANDLE_2>;
+	};
+};
diff --git a/t/t4034/dts/pre b/t/t4034/dts/pre
new file mode 100644
index 0000000..b6a9051
--- /dev/null
+++ b/t/t4034/dts/pre
@@ -0,0 +1,32 @@
+/ {
+	this_handle: node@f00 {
+		compatible = "mydev";
+		string-prop = start: "hello world!" end: ;
+		#size-cells = <0+0>;
+		reg = <0xf00>;
+		prop = <1>;
+		prop = <-1e10>;
+		prop = <(!3)>;
+		prop = <(~3)>;
+		prop = <(3*4)>;
+		prop = <(3&4)>;
+		prop = <(3*4)>;
+		prop = <(3/4)>;
+		prop = <(3%4)>;
+		prop = <(3+4)>;
+		prop = <(3-4)>;
+		prop = /bits/ 64 <(3<<4)>;
+		prop = <(3>>4)>;
+		prop = <(3&4)>;
+		prop = <(3^4)>;
+		prop = <(3|4)>;
+		prop = <(3&&4)>;
+		prop = <(3||4)>;
+		prop = <(4?5:3)>;
+		list = <&this_handle>, <0 0 0 0>;
+	};
+
+	&phandle {
+		pre-phandle = <&this_handle>;
+	};
+};
diff --git a/t/t4038-diff-combined.sh b/t/t4038-diff-combined.sh
index d4afe12..b9d876e 100755
--- a/t/t4038-diff-combined.sh
+++ b/t/t4038-diff-combined.sh
@@ -509,7 +509,7 @@
 test_expect_success FUNNYNAMES '--combined-all-paths and --raw -and -z and funny names' '
 	printf "aaf8087c3cbd4db8e185a2d074cf27c53cfb75d7\0::100644 100644 100644 f00c965d8307308469e537302baa73048488f162 088bd5d92c2a8e0203ca8e7e4c2a5c692f6ae3f7 333b9c62519f285e1854830ade0fe1ef1d40ee1b RR\0file\twith\ttabs\0i\tam\ttabbed\0fickle\tnaming\0" >expect &&
 	git diff-tree -c -M --raw --combined-all-paths -z HEAD >actual &&
-	test_cmp -a expect actual
+	test_cmp expect actual
 '
 
 test_expect_success FUNNYNAMES '--combined-all-paths and --cc and funny names' '
diff --git a/t/t4067-diff-partial-clone.sh b/t/t4067-diff-partial-clone.sh
index 90c8fb2..4831ad3 100755
--- a/t/t4067-diff-partial-clone.sh
+++ b/t/t4067-diff-partial-clone.sh
@@ -75,6 +75,37 @@
 	! grep "want $(cat hash-b)" trace
 '
 
+test_expect_success 'when fetching missing objects, diff skips GITLINKs' '
+	test_when_finished "rm -rf sub server client trace" &&
+
+	test_create_repo sub &&
+	test_commit -C sub first &&
+
+	test_create_repo server &&
+	echo a >server/a &&
+	git -C server add a &&
+	git -C server submodule add "file://$(pwd)/sub" &&
+	git -C server commit -m x &&
+
+	test_commit -C server/sub second &&
+	echo another-a >server/a &&
+	git -C server add a sub &&
+	git -C server commit -m x &&
+
+	test_config -C server uploadpack.allowfilter 1 &&
+	test_config -C server uploadpack.allowanysha1inwant 1 &&
+	git clone --bare --filter=blob:limit=0 "file://$(pwd)/server" client &&
+
+	echo a | git hash-object --stdin >hash-old-a &&
+	echo another-a | git hash-object --stdin >hash-new-a &&
+
+	# Ensure that a and another-a are fetched, and check (by successful
+	# execution of the diff) that no invalid OIDs are sent.
+	GIT_TRACE_PACKET="$(pwd)/trace" git -C client diff HEAD^ HEAD &&
+	grep "want $(cat hash-old-a)" trace &&
+	grep "want $(cat hash-new-a)" trace
+'
+
 test_expect_success 'diff with rename detection batches blobs' '
 	test_when_finished "rm -rf server client trace" &&
 
diff --git a/t/t4150-am.sh b/t/t4150-am.sh
index 3f7f750..4f1e24e 100755
--- a/t/t4150-am.sh
+++ b/t/t4150-am.sh
@@ -1061,4 +1061,56 @@
 	test_cmp expected actual
 '
 
+test_expect_success 'am and .gitattibutes' '
+	test_create_repo attributes &&
+	(
+		cd attributes &&
+		test_commit init &&
+		git config filter.test.clean "sed -e '\''s/smudged/clean/g'\''" &&
+		git config filter.test.smudge "sed -e '\''s/clean/smudged/g'\''" &&
+
+		test_commit second &&
+		git checkout -b test HEAD^ &&
+
+		echo "*.txt filter=test conflict-marker-size=10" >.gitattributes &&
+		git add .gitattributes &&
+		test_commit third &&
+
+		echo "This text is smudged." >a.txt &&
+		git add a.txt &&
+		test_commit fourth &&
+
+		git checkout -b removal HEAD^ &&
+		git rm .gitattributes &&
+		git add -u &&
+		test_commit fifth &&
+		git cherry-pick test &&
+
+		git checkout -b conflict third &&
+		echo "This text is different." >a.txt &&
+		git add a.txt &&
+		test_commit sixth &&
+
+		git checkout test &&
+		git format-patch --stdout master..HEAD >patches &&
+		git reset --hard master &&
+		git am patches &&
+		grep "smudged" a.txt &&
+
+		git checkout removal &&
+		git reset --hard &&
+		git format-patch --stdout master..HEAD >patches &&
+		git reset --hard master &&
+		git am patches &&
+		grep "clean" a.txt &&
+
+		git checkout conflict &&
+		git reset --hard &&
+		git format-patch --stdout master..HEAD >patches &&
+		git reset --hard fourth &&
+		test_must_fail git am -3 patches &&
+		grep "<<<<<<<<<<" a.txt
+	)
+'
+
 test_done
diff --git a/t/t4202-log.sh b/t/t4202-log.sh
index c202093..e803ba4 100755
--- a/t/t4202-log.sh
+++ b/t/t4202-log.sh
@@ -837,6 +837,21 @@
 	test_cmp expect.decorate actual
 '
 
+test_expect_success 'decorate-refs-exclude and simplify-by-decoration' '
+	cat >expect.decorate <<-\EOF &&
+	Merge-tag-reach (HEAD -> master)
+	reach (tag: reach, reach)
+	seventh (tag: seventh)
+	Merge-branch-tangle
+	Merge-branch-side-early-part-into-tangle (tangle)
+	tangle-a (tag: tangle-a)
+	EOF
+	git log -n6 --decorate=short --pretty="tformat:%f%d" \
+		--decorate-refs-exclude="*octopus*" \
+		--simplify-by-decoration >actual &&
+	test_cmp expect.decorate actual
+'
+
 test_expect_success 'log.decorate config parsing' '
 	git log --oneline --decorate=full >expect.full &&
 	git log --oneline --decorate=short >expect.short &&
@@ -1707,4 +1722,11 @@
 	test_must_fail git log --exclude-promisor-objects source-a
 '
 
+test_expect_success 'log --end-of-options' '
+       git update-ref refs/heads/--source HEAD &&
+       git log --end-of-options --source >actual &&
+       git log >expect &&
+       test_cmp expect actual
+'
+
 test_done
diff --git a/t/t4210-log-i18n.sh b/t/t4210-log-i18n.sh
index 7c51943..6e61f57 100755
--- a/t/t4210-log-i18n.sh
+++ b/t/t4210-log-i18n.sh
@@ -1,12 +1,15 @@
 #!/bin/sh
 
 test_description='test log with i18n features'
-. ./test-lib.sh
+. ./lib-gettext.sh
 
 # two forms of é
 utf8_e=$(printf '\303\251')
 latin1_e=$(printf '\351')
 
+# invalid UTF-8
+invalid_e=$(printf '\303\50)') # ")" at end to close opening "("
+
 test_expect_success 'create commits in different encodings' '
 	test_tick &&
 	cat >msg <<-EOF &&
@@ -48,9 +51,43 @@
 	test_must_be_empty actual
 '
 
-test_expect_success 'log --grep does not find non-reencoded values (latin1)' '
+test_expect_success !MINGW 'log --grep does not find non-reencoded values (latin1)' '
 	git log --encoding=ISO-8859-1 --format=%s --grep=$utf8_e >actual &&
 	test_must_be_empty actual
 '
 
+for engine in fixed basic extended perl
+do
+	prereq=
+	if test $engine = "perl"
+	then
+		prereq="PCRE"
+	else
+		prereq=""
+	fi
+	force_regex=
+	if test $engine != "fixed"
+	then
+	    force_regex=.*
+	fi
+	test_expect_success !MINGW,GETTEXT_LOCALE,$prereq "-c grep.patternType=$engine log --grep does not find non-reencoded values (latin1 + locale)" "
+		cat >expect <<-\EOF &&
+		latin1
+		utf8
+		EOF
+		LC_ALL=\"$is_IS_locale\" git -c grep.patternType=$engine log --encoding=ISO-8859-1 --format=%s --grep=\"$force_regex$latin1_e\" >actual &&
+		test_cmp expect actual
+	"
+
+	test_expect_success !MINGW,GETTEXT_LOCALE,$prereq "-c grep.patternType=$engine log --grep does not find non-reencoded values (latin1 + locale)" "
+		LC_ALL=\"$is_IS_locale\" git -c grep.patternType=$engine log --encoding=ISO-8859-1 --format=%s --grep=\"$force_regex$utf8_e\" >actual &&
+		test_must_be_empty actual
+	"
+
+	test_expect_success !MINGW,GETTEXT_LOCALE,$prereq "-c grep.patternType=$engine log --grep does not die on invalid UTF-8 value (latin1 + locale + invalid needle)" "
+		LC_ALL=\"$is_IS_locale\" git -c grep.patternType=$engine log --encoding=ISO-8859-1 --format=%s --grep=\"$force_regex$invalid_e\" >actual &&
+		test_must_be_empty actual
+	"
+done
+
 test_done
diff --git a/t/t4211-line-log.sh b/t/t4211-line-log.sh
index 1db7bd0..8319163 100755
--- a/t/t4211-line-log.sh
+++ b/t/t4211-line-log.sh
@@ -132,4 +132,86 @@
 	test_must_fail git log -L1,24:b.c --raw
 '
 
+test_expect_success 'setup for checking fancy rename following' '
+	git checkout --orphan moves-start &&
+	git reset --hard &&
+
+	printf "%s\n"    12 13 14 15      b c d e   >file-1 &&
+	printf "%s\n"    22 23 24 25      B C D E   >file-2 &&
+	git add file-1 file-2 &&
+	test_tick &&
+	git commit -m "Add file-1 and file-2" &&
+	oid_add_f1_f2=$(git rev-parse --short HEAD) &&
+
+	git checkout -b moves-main &&
+	printf "%s\n" 11 12 13 14 15      b c d e   >file-1 &&
+	git commit -a -m "Modify file-1 on main" &&
+	oid_mod_f1_main=$(git rev-parse --short HEAD) &&
+
+	printf "%s\n" 21 22 23 24 25      B C D E   >file-2 &&
+	git commit -a -m "Modify file-2 on main #1" &&
+	oid_mod_f2_main_1=$(git rev-parse --short HEAD) &&
+
+	git mv file-1 renamed-1 &&
+	git commit -m "Rename file-1 to renamed-1 on main" &&
+
+	printf "%s\n" 11 12 13 14 15      b c d e f >renamed-1 &&
+	git commit -a -m "Modify renamed-1 on main" &&
+	oid_mod_r1_main=$(git rev-parse --short HEAD) &&
+
+	printf "%s\n" 21 22 23 24 25      B C D E F >file-2 &&
+	git commit -a -m "Modify file-2 on main #2" &&
+	oid_mod_f2_main_2=$(git rev-parse --short HEAD) &&
+
+	git checkout -b moves-side moves-start &&
+	printf "%s\n"    12 13 14 15 16   b c d e   >file-1 &&
+	git commit -a -m "Modify file-1 on side #1" &&
+	oid_mod_f1_side_1=$(git rev-parse --short HEAD) &&
+
+	printf "%s\n"    22 23 24 25 26   B C D E   >file-2 &&
+	git commit -a -m "Modify file-2 on side" &&
+	oid_mod_f2_side=$(git rev-parse --short HEAD) &&
+
+	git mv file-2 renamed-2 &&
+	git commit -m "Rename file-2 to renamed-2 on side" &&
+
+	printf "%s\n"    12 13 14 15 16 a b c d e   >file-1 &&
+	git commit -a -m "Modify file-1 on side #2" &&
+	oid_mod_f1_side_2=$(git rev-parse --short HEAD) &&
+
+	printf "%s\n"    22 23 24 25 26 A B C D E   >renamed-2 &&
+	git commit -a -m "Modify renamed-2 on side" &&
+	oid_mod_r2_side=$(git rev-parse --short HEAD) &&
+
+	git checkout moves-main &&
+	git merge moves-side &&
+	oid_merge=$(git rev-parse --short HEAD)
+'
+
+test_expect_success 'fancy rename following #1' '
+	cat >expect <<-EOF &&
+	$oid_merge Merge branch '\''moves-side'\'' into moves-main
+	$oid_mod_f1_side_2 Modify file-1 on side #2
+	$oid_mod_f1_side_1 Modify file-1 on side #1
+	$oid_mod_r1_main Modify renamed-1 on main
+	$oid_mod_f1_main Modify file-1 on main
+	$oid_add_f1_f2 Add file-1 and file-2
+	EOF
+	git log -L1:renamed-1 --oneline --no-patch >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'fancy rename following #2' '
+	cat >expect <<-EOF &&
+	$oid_merge Merge branch '\''moves-side'\'' into moves-main
+	$oid_mod_r2_side Modify renamed-2 on side
+	$oid_mod_f2_side Modify file-2 on side
+	$oid_mod_f2_main_2 Modify file-2 on main #2
+	$oid_mod_f2_main_1 Modify file-2 on main #1
+	$oid_add_f1_f2 Add file-1 and file-2
+	EOF
+	git log -L1:renamed-2 --oneline --no-patch >actual &&
+	test_cmp expect actual
+'
+
 test_done
diff --git a/t/t4214-log-graph-octopus.sh b/t/t4214-log-graph-octopus.sh
index dab96c8..3ae8e51 100755
--- a/t/t4214-log-graph-octopus.sh
+++ b/t/t4214-log-graph-octopus.sh
@@ -5,6 +5,25 @@
 . ./test-lib.sh
 
 test_expect_success 'set up merge history' '
+	test_commit initial &&
+	for i in 1 2 3 4 ; do
+		git checkout master -b $i || return $?
+		# Make tag name different from branch name, to avoid
+		# ambiguity error when calling checkout.
+		test_commit $i $i $i tag$i || return $?
+	done &&
+	git checkout 1 -b merge &&
+	test_merge octopus-merge 1 2 3 4 &&
+	test_commit after-merge &&
+	git checkout 1 -b L &&
+	test_commit left &&
+	git checkout 4 -b crossover &&
+	test_commit after-4 &&
+	git checkout initial -b more-L &&
+	test_commit after-initial
+'
+
+test_expect_success 'log --graph with tricky octopus merge, no color' '
 	cat >expect.uncolored <<-\EOF &&
 	* left
 	| *---.   octopus-merge
@@ -19,6 +38,13 @@
 	|/
 	* initial
 	EOF
+	git log --color=never --graph --date-order --pretty=tformat:%s left octopus-merge >actual.raw &&
+	sed "s/ *\$//" actual.raw >actual &&
+	test_cmp expect.uncolored actual
+'
+
+test_expect_success 'log --graph with tricky octopus merge with colors' '
+	test_config log.graphColors red,green,yellow,blue,magenta,cyan &&
 	cat >expect.colors <<-\EOF &&
 	* left
 	<RED>|<RESET> *<BLUE>-<RESET><BLUE>-<RESET><MAGENTA>-<RESET><MAGENTA>.<RESET>   octopus-merge
@@ -33,33 +59,11 @@
 	<MAGENTA>|<RESET><MAGENTA>/<RESET>
 	* initial
 	EOF
-	test_commit initial &&
-	for i in 1 2 3 4 ; do
-		git checkout master -b $i || return $?
-		# Make tag name different from branch name, to avoid
-		# ambiguity error when calling checkout.
-		test_commit $i $i $i tag$i || return $?
-	done &&
-	git checkout 1 -b merge &&
-	test_tick &&
-	git merge -m octopus-merge 1 2 3 4 &&
-	git checkout 1 -b L &&
-	test_commit left
-'
-
-test_expect_success 'log --graph with tricky octopus merge with colors' '
-	test_config log.graphColors red,green,yellow,blue,magenta,cyan &&
-	git log --color=always --graph --date-order --pretty=tformat:%s --all >actual.colors.raw &&
+	git log --color=always --graph --date-order --pretty=tformat:%s left octopus-merge >actual.colors.raw &&
 	test_decode_color <actual.colors.raw | sed "s/ *\$//" >actual.colors &&
 	test_cmp expect.colors actual.colors
 '
 
-test_expect_success 'log --graph with tricky octopus merge, no color' '
-	git log --color=never --graph --date-order --pretty=tformat:%s --all >actual.raw &&
-	sed "s/ *\$//" actual.raw >actual &&
-	test_cmp expect.uncolored actual
-'
-
 # Repeat the previous two tests with "normal" octopus merge (i.e.,
 # without the first parent skewing to the "left" branch column).
 
@@ -76,7 +80,7 @@
 	|/
 	* initial
 	EOF
-	git log --color=never --graph --date-order --pretty=tformat:%s merge >actual.raw &&
+	git log --color=never --graph --date-order --pretty=tformat:%s octopus-merge >actual.raw &&
 	sed "s/ *\$//" actual.raw >actual &&
 	test_cmp expect.uncolored actual
 '
@@ -95,8 +99,283 @@
 	* initial
 	EOF
 	test_config log.graphColors red,green,yellow,blue,magenta,cyan &&
-	git log --color=always --graph --date-order --pretty=tformat:%s merge >actual.colors.raw &&
+	git log --color=always --graph --date-order --pretty=tformat:%s octopus-merge >actual.colors.raw &&
 	test_decode_color <actual.colors.raw | sed "s/ *\$//" >actual.colors &&
 	test_cmp expect.colors actual.colors
 '
+
+test_expect_success 'log --graph with normal octopus merge and child, no color' '
+	cat >expect.uncolored <<-\EOF &&
+	* after-merge
+	*---.   octopus-merge
+	|\ \ \
+	| | | * 4
+	| | * | 3
+	| | |/
+	| * | 2
+	| |/
+	* | 1
+	|/
+	* initial
+	EOF
+	git log --color=never --graph --date-order --pretty=tformat:%s after-merge >actual.raw &&
+	sed "s/ *\$//" actual.raw >actual &&
+	test_cmp expect.uncolored actual
+'
+
+test_expect_failure 'log --graph with normal octopus and child merge with colors' '
+	cat >expect.colors <<-\EOF &&
+	* after-merge
+	*<BLUE>-<RESET><BLUE>-<RESET><MAGENTA>-<RESET><MAGENTA>.<RESET>   octopus-merge
+	<GREEN>|<RESET><YELLOW>\<RESET> <BLUE>\<RESET> <MAGENTA>\<RESET>
+	<GREEN>|<RESET> <YELLOW>|<RESET> <BLUE>|<RESET> * 4
+	<GREEN>|<RESET> <YELLOW>|<RESET> * <MAGENTA>|<RESET> 3
+	<GREEN>|<RESET> <YELLOW>|<RESET> <MAGENTA>|<RESET><MAGENTA>/<RESET>
+	<GREEN>|<RESET> * <MAGENTA>|<RESET> 2
+	<GREEN>|<RESET> <MAGENTA>|<RESET><MAGENTA>/<RESET>
+	* <MAGENTA>|<RESET> 1
+	<MAGENTA>|<RESET><MAGENTA>/<RESET>
+	* initial
+	EOF
+	test_config log.graphColors red,green,yellow,blue,magenta,cyan &&
+	git log --color=always --graph --date-order --pretty=tformat:%s after-merge >actual.colors.raw &&
+	test_decode_color <actual.colors.raw | sed "s/ *\$//" >actual.colors &&
+	test_cmp expect.colors actual.colors
+'
+
+test_expect_success 'log --graph with tricky octopus merge and its child, no color' '
+	cat >expect.uncolored <<-\EOF &&
+	* left
+	| * after-merge
+	| *---.   octopus-merge
+	| |\ \ \
+	|/ / / /
+	| | | * 4
+	| | * | 3
+	| | |/
+	| * | 2
+	| |/
+	* | 1
+	|/
+	* initial
+	EOF
+	git log --color=never --graph --date-order --pretty=tformat:%s left after-merge >actual.raw &&
+	sed "s/ *\$//" actual.raw >actual &&
+	test_cmp expect.uncolored actual
+'
+
+test_expect_failure 'log --graph with tricky octopus merge and its child with colors' '
+	test_config log.graphColors red,green,yellow,blue,magenta,cyan &&
+	cat >expect.colors <<-\EOF &&
+	* left
+	<RED>|<RESET> * after-merge
+	<RED>|<RESET> *<MAGENTA>-<RESET><MAGENTA>-<RESET><CYAN>-<RESET><CYAN>.<RESET>   octopus-merge
+	<RED>|<RESET> <RED>|<RESET><BLUE>\<RESET> <MAGENTA>\<RESET> <CYAN>\<RESET>
+	<RED>|<RESET><RED>/<RESET> <BLUE>/<RESET> <MAGENTA>/<RESET> <CYAN>/<RESET>
+	<RED>|<RESET> <BLUE>|<RESET> <MAGENTA>|<RESET> * 4
+	<RED>|<RESET> <BLUE>|<RESET> * <CYAN>|<RESET> 3
+	<RED>|<RESET> <BLUE>|<RESET> <CYAN>|<RESET><CYAN>/<RESET>
+	<RED>|<RESET> * <CYAN>|<RESET> 2
+	<RED>|<RESET> <CYAN>|<RESET><CYAN>/<RESET>
+	* <CYAN>|<RESET> 1
+	<CYAN>|<RESET><CYAN>/<RESET>
+	* initial
+	EOF
+	git log --color=always --graph --date-order --pretty=tformat:%s left after-merge >actual.colors.raw &&
+	test_decode_color <actual.colors.raw | sed "s/ *\$//" >actual.colors &&
+	test_cmp expect.colors actual.colors
+'
+
+test_expect_success 'log --graph with crossover in octopus merge, no color' '
+	cat >expect.uncolored <<-\EOF &&
+	* after-4
+	| *---.   octopus-merge
+	| |\ \ \
+	| |_|_|/
+	|/| | |
+	* | | | 4
+	| | | * 3
+	| |_|/
+	|/| |
+	| | * 2
+	| |/
+	|/|
+	| * 1
+	|/
+	* initial
+	EOF
+	git log --color=never --graph --date-order --pretty=tformat:%s after-4 octopus-merge >actual.raw &&
+	sed "s/ *\$//" actual.raw >actual &&
+	test_cmp expect.uncolored actual
+'
+
+test_expect_failure 'log --graph with crossover in octopus merge with colors' '
+	test_config log.graphColors red,green,yellow,blue,magenta,cyan &&
+	cat >expect.colors <<-\EOF &&
+	* after-4
+	<RED>|<RESET> *<BLUE>-<RESET><BLUE>-<RESET><RED>-<RESET><RED>.<RESET>   octopus-merge
+	<RED>|<RESET> <GREEN>|<RESET><YELLOW>\<RESET> <BLUE>\<RESET> <RED>\<RESET>
+	<RED>|<RESET> <GREEN>|<RESET><RED>_<RESET><YELLOW>|<RESET><RED>_<RESET><BLUE>|<RESET><RED>/<RESET>
+	<RED>|<RESET><RED>/<RESET><GREEN>|<RESET> <YELLOW>|<RESET> <BLUE>|<RESET>
+	* <GREEN>|<RESET> <YELLOW>|<RESET> <BLUE>|<RESET> 4
+	<MAGENTA>|<RESET> <GREEN>|<RESET> <YELLOW>|<RESET> * 3
+	<MAGENTA>|<RESET> <GREEN>|<RESET><MAGENTA>_<RESET><YELLOW>|<RESET><MAGENTA>/<RESET>
+	<MAGENTA>|<RESET><MAGENTA>/<RESET><GREEN>|<RESET> <YELLOW>|<RESET>
+	<MAGENTA>|<RESET> <GREEN>|<RESET> * 2
+	<MAGENTA>|<RESET> <GREEN>|<RESET><MAGENTA>/<RESET>
+	<MAGENTA>|<RESET><MAGENTA>/<RESET><GREEN>|<RESET>
+	<MAGENTA>|<RESET> * 1
+	<MAGENTA>|<RESET><MAGENTA>/<RESET>
+	* initial
+	EOF
+	git log --color=always --graph --date-order --pretty=tformat:%s after-4 octopus-merge >actual.colors.raw &&
+	test_decode_color <actual.colors.raw | sed "s/ *\$//" >actual.colors &&
+	test_cmp expect.colors actual.colors
+'
+
+test_expect_success 'log --graph with crossover in octopus merge and its child, no color' '
+	cat >expect.uncolored <<-\EOF &&
+	* after-4
+	| * after-merge
+	| *---.   octopus-merge
+	| |\ \ \
+	| |_|_|/
+	|/| | |
+	* | | | 4
+	| | | * 3
+	| |_|/
+	|/| |
+	| | * 2
+	| |/
+	|/|
+	| * 1
+	|/
+	* initial
+	EOF
+	git log --color=never --graph --date-order --pretty=tformat:%s after-4 after-merge >actual.raw &&
+	sed "s/ *\$//" actual.raw >actual &&
+	test_cmp expect.uncolored actual
+'
+
+test_expect_failure 'log --graph with crossover in octopus merge and its child with colors' '
+	test_config log.graphColors red,green,yellow,blue,magenta,cyan &&
+	cat >expect.colors <<-\EOF &&
+	* after-4
+	<RED>|<RESET> * after-merge
+	<RED>|<RESET> *<MAGENTA>-<RESET><MAGENTA>-<RESET><RED>-<RESET><RED>.<RESET>   octopus-merge
+	<RED>|<RESET> <YELLOW>|<RESET><BLUE>\<RESET> <MAGENTA>\<RESET> <RED>\<RESET>
+	<RED>|<RESET> <YELLOW>|<RESET><RED>_<RESET><BLUE>|<RESET><RED>_<RESET><MAGENTA>|<RESET><RED>/<RESET>
+	<RED>|<RESET><RED>/<RESET><YELLOW>|<RESET> <BLUE>|<RESET> <MAGENTA>|<RESET>
+	* <YELLOW>|<RESET> <BLUE>|<RESET> <MAGENTA>|<RESET> 4
+	<CYAN>|<RESET> <YELLOW>|<RESET> <BLUE>|<RESET> * 3
+	<CYAN>|<RESET> <YELLOW>|<RESET><CYAN>_<RESET><BLUE>|<RESET><CYAN>/<RESET>
+	<CYAN>|<RESET><CYAN>/<RESET><YELLOW>|<RESET> <BLUE>|<RESET>
+	<CYAN>|<RESET> <YELLOW>|<RESET> * 2
+	<CYAN>|<RESET> <YELLOW>|<RESET><CYAN>/<RESET>
+	<CYAN>|<RESET><CYAN>/<RESET><YELLOW>|<RESET>
+	<CYAN>|<RESET> * 1
+	<CYAN>|<RESET><CYAN>/<RESET>
+	* initial
+	EOF
+	git log --color=always --graph --date-order --pretty=tformat:%s after-4 after-merge >actual.colors.raw &&
+	test_decode_color <actual.colors.raw | sed "s/ *\$//" >actual.colors &&
+	test_cmp expect.colors actual.colors
+'
+
+test_expect_success 'log --graph with unrelated commit and octopus tip, no color' '
+	cat >expect.uncolored <<-\EOF &&
+	* after-initial
+	| *---.   octopus-merge
+	| |\ \ \
+	| | | | * 4
+	| |_|_|/
+	|/| | |
+	| | | * 3
+	| |_|/
+	|/| |
+	| | * 2
+	| |/
+	|/|
+	| * 1
+	|/
+	* initial
+	EOF
+	git log --color=never --graph --date-order --pretty=tformat:%s after-initial octopus-merge >actual.raw &&
+	sed "s/ *\$//" actual.raw >actual &&
+	test_cmp expect.uncolored actual
+'
+
+test_expect_success 'log --graph with unrelated commit and octopus tip with colors' '
+	test_config log.graphColors red,green,yellow,blue,magenta,cyan &&
+	cat >expect.colors <<-\EOF &&
+	* after-initial
+	<RED>|<RESET> *<BLUE>-<RESET><BLUE>-<RESET><MAGENTA>-<RESET><MAGENTA>.<RESET>   octopus-merge
+	<RED>|<RESET> <GREEN>|<RESET><YELLOW>\<RESET> <BLUE>\<RESET> <MAGENTA>\<RESET>
+	<RED>|<RESET> <GREEN>|<RESET> <YELLOW>|<RESET> <BLUE>|<RESET> * 4
+	<RED>|<RESET> <GREEN>|<RESET><RED>_<RESET><YELLOW>|<RESET><RED>_<RESET><BLUE>|<RESET><RED>/<RESET>
+	<RED>|<RESET><RED>/<RESET><GREEN>|<RESET> <YELLOW>|<RESET> <BLUE>|<RESET>
+	<RED>|<RESET> <GREEN>|<RESET> <YELLOW>|<RESET> * 3
+	<RED>|<RESET> <GREEN>|<RESET><RED>_<RESET><YELLOW>|<RESET><RED>/<RESET>
+	<RED>|<RESET><RED>/<RESET><GREEN>|<RESET> <YELLOW>|<RESET>
+	<RED>|<RESET> <GREEN>|<RESET> * 2
+	<RED>|<RESET> <GREEN>|<RESET><RED>/<RESET>
+	<RED>|<RESET><RED>/<RESET><GREEN>|<RESET>
+	<RED>|<RESET> * 1
+	<RED>|<RESET><RED>/<RESET>
+	* initial
+	EOF
+	git log --color=always --graph --date-order --pretty=tformat:%s after-initial octopus-merge >actual.colors.raw &&
+	test_decode_color <actual.colors.raw | sed "s/ *\$//" >actual.colors &&
+	test_cmp expect.colors actual.colors
+'
+
+test_expect_success 'log --graph with unrelated commit and octopus child, no color' '
+	cat >expect.uncolored <<-\EOF &&
+	* after-initial
+	| * after-merge
+	| *---.   octopus-merge
+	| |\ \ \
+	| | | | * 4
+	| |_|_|/
+	|/| | |
+	| | | * 3
+	| |_|/
+	|/| |
+	| | * 2
+	| |/
+	|/|
+	| * 1
+	|/
+	* initial
+	EOF
+	git log --color=never --graph --date-order --pretty=tformat:%s after-initial after-merge >actual.raw &&
+	sed "s/ *\$//" actual.raw >actual &&
+	test_cmp expect.uncolored actual
+'
+
+test_expect_failure 'log --graph with unrelated commit and octopus child with colors' '
+	test_config log.graphColors red,green,yellow,blue,magenta,cyan &&
+	cat >expect.colors <<-\EOF &&
+	* after-initial
+	<RED>|<RESET> * after-merge
+	<RED>|<RESET> *<MAGENTA>-<RESET><MAGENTA>-<RESET><CYAN>-<RESET><CYAN>.<RESET>   octopus-merge
+	<RED>|<RESET> <YELLOW>|<RESET><BLUE>\<RESET> <MAGENTA>\<RESET> <CYAN>\<RESET>
+	<RED>|<RESET> <YELLOW>|<RESET> <BLUE>|<RESET> <MAGENTA>|<RESET> * 4
+	<RED>|<RESET> <YELLOW>|<RESET><RED>_<RESET><BLUE>|<RESET><RED>_<RESET><MAGENTA>|<RESET><RED>/<RESET>
+	<RED>|<RESET><RED>/<RESET><YELLOW>|<RESET> <BLUE>|<RESET> <MAGENTA>|<RESET>
+	<RED>|<RESET> <YELLOW>|<RESET> <BLUE>|<RESET> * 3
+	<RED>|<RESET> <YELLOW>|<RESET><RED>_<RESET><BLUE>|<RESET><RED>/<RESET>
+	<RED>|<RESET><RED>/<RESET><YELLOW>|<RESET> <BLUE>|<RESET>
+	<RED>|<RESET> <YELLOW>|<RESET> * 2
+	<RED>|<RESET> <YELLOW>|<RESET><RED>/<RESET>
+	<RED>|<RESET><RED>/<RESET><YELLOW>|<RESET>
+	<RED>|<RESET> * 1
+	<RED>|<RESET><RED>/<RESET>
+	* initial
+	EOF
+	git log --color=always --graph --date-order --pretty=tformat:%s after-initial after-merge >actual.colors.raw &&
+	test_decode_color <actual.colors.raw | sed "s/ *\$//" >actual.colors &&
+	test_cmp expect.colors actual.colors
+'
+
 test_done
diff --git a/t/t5004-archive-corner-cases.sh b/t/t5004-archive-corner-cases.sh
index 271eb5a..3e7b23c 100755
--- a/t/t5004-archive-corner-cases.sh
+++ b/t/t5004-archive-corner-cases.sh
@@ -204,4 +204,23 @@
 	grep $size big.lst
 '
 
+build_tree() {
+	perl -e '
+		my $hash = $ARGV[0];
+		foreach my $order (2..6) {
+			$first = 10 ** $order;
+			foreach my $i (-13..-9) {
+				my $name = "a" x ($first + $i);
+				print "100644 blob $hash\t$name\n"
+			}
+		}
+	' "$1"
+}
+
+test_expect_success 'tar archive with long paths' '
+	blob=$(echo foo | git hash-object -w --stdin) &&
+	tree=$(build_tree $blob | git mktree) &&
+	git archive -o long_paths.tar $tree
+'
+
 test_done
diff --git a/t/t5307-pack-missing-commit.sh b/t/t5307-pack-missing-commit.sh
index dacb440..f4338ab 100755
--- a/t/t5307-pack-missing-commit.sh
+++ b/t/t5307-pack-missing-commit.sh
@@ -24,11 +24,11 @@
 '
 
 test_expect_success 'rev-list notices corruption (1)' '
-	test_must_fail env GIT_TEST_COMMIT_GRAPH=0 git rev-list HEAD
+	test_must_fail env GIT_TEST_COMMIT_GRAPH=0 git -c core.commitGraph=false rev-list HEAD
 '
 
 test_expect_success 'rev-list notices corruption (2)' '
-	test_must_fail env GIT_TEST_COMMIT_GRAPH=0 git rev-list --objects HEAD
+	test_must_fail env GIT_TEST_COMMIT_GRAPH=0 git -c core.commitGraph=false rev-list --objects HEAD
 '
 
 test_expect_success 'pack-objects notices corruption' '
diff --git a/t/t5318-commit-graph.sh b/t/t5318-commit-graph.sh
index 22cb9d6..d42b3ef 100755
--- a/t/t5318-commit-graph.sh
+++ b/t/t5318-commit-graph.sh
@@ -23,11 +23,10 @@
 	test_path_is_missing info/commit-graph
 '
 
-test_expect_success 'close with correct error on bad input' '
+test_expect_success 'exit with correct error on bad input to --stdin-packs' '
 	cd "$TRASH_DIRECTORY/full" &&
 	echo doesnotexist >in &&
-	{ git commit-graph write --stdin-packs <in 2>stderr; ret=$?; } &&
-	test "$ret" = 1 &&
+	test_expect_code 1 git commit-graph write --stdin-packs <in 2>stderr &&
 	test_i18ngrep "error adding pack" stderr
 '
 
@@ -41,6 +40,15 @@
 	git repack
 '
 
+test_expect_success 'exit with correct error on bad input to --stdin-commits' '
+	cd "$TRASH_DIRECTORY/full" &&
+	echo HEAD | test_expect_code 1 git commit-graph write --stdin-commits 2>stderr &&
+	test_i18ngrep "invalid commit object id" stderr &&
+	# valid tree OID, but not a commit OID
+	git rev-parse HEAD^{tree} | test_expect_code 1 git commit-graph write --stdin-commits 2>stderr &&
+	test_i18ngrep "invalid commit object id" stderr
+'
+
 graph_git_two_modes() {
 	git -c core.commitGraph=true $1 >output
 	git -c core.commitGraph=false $1 >expect
@@ -116,6 +124,42 @@
 	git repack
 '
 
+test_expect_success 'commit-graph write progress off for redirected stderr' '
+	cd "$TRASH_DIRECTORY/full" &&
+	git commit-graph write 2>err &&
+	test_line_count = 0 err
+'
+
+test_expect_success 'commit-graph write force progress on for stderr' '
+	cd "$TRASH_DIRECTORY/full" &&
+	git commit-graph write --progress 2>err &&
+	test_file_not_empty err
+'
+
+test_expect_success 'commit-graph write with the --no-progress option' '
+	cd "$TRASH_DIRECTORY/full" &&
+	git commit-graph write --no-progress 2>err &&
+	test_line_count = 0 err
+'
+
+test_expect_success 'commit-graph verify progress off for redirected stderr' '
+	cd "$TRASH_DIRECTORY/full" &&
+	git commit-graph verify 2>err &&
+	test_line_count = 0 err
+'
+
+test_expect_success 'commit-graph verify force progress on for stderr' '
+	cd "$TRASH_DIRECTORY/full" &&
+	git commit-graph verify --progress 2>err &&
+	test_file_not_empty err
+'
+
+test_expect_success 'commit-graph verify with the --no-progress option' '
+	cd "$TRASH_DIRECTORY/full" &&
+	git commit-graph verify --no-progress 2>err &&
+	test_line_count = 0 err
+'
+
 # Current graph structure:
 #
 #   __M3___
@@ -577,4 +621,47 @@
 	test_cmp expect actual
 '
 
+test_expect_success 'corrupt commit-graph write (broken parent)' '
+	rm -rf repo &&
+	git init repo &&
+	(
+		cd repo &&
+		empty="$(git mktree </dev/null)" &&
+		cat >broken <<-EOF &&
+		tree $empty
+		parent 0000000000000000000000000000000000000000
+		author whatever <whatever@example.com> 1234 -0000
+		committer whatever <whatever@example.com> 1234 -0000
+
+		broken commit
+		EOF
+		broken="$(git hash-object -w -t commit --literally broken)" &&
+		git commit-tree -p "$broken" -m "good commit" "$empty" >good &&
+		test_must_fail git commit-graph write --stdin-commits \
+			<good 2>test_err &&
+		test_i18ngrep "unable to parse commit" test_err
+	)
+'
+
+test_expect_success 'corrupt commit-graph write (missing tree)' '
+	rm -rf repo &&
+	git init repo &&
+	(
+		cd repo &&
+		tree="$(git mktree </dev/null)" &&
+		cat >broken <<-EOF &&
+		parent 0000000000000000000000000000000000000000
+		author whatever <whatever@example.com> 1234 -0000
+		committer whatever <whatever@example.com> 1234 -0000
+
+		broken commit
+		EOF
+		broken="$(git hash-object -w -t commit --literally broken)" &&
+		git commit-tree -p "$broken" -m "good" "$tree" >good &&
+		test_must_fail git commit-graph write --stdin-commits \
+			<good 2>test_err &&
+		test_i18ngrep "unable to get tree for" test_err
+	)
+'
+
 test_done
diff --git a/t/t5324-split-commit-graph.sh b/t/t5324-split-commit-graph.sh
index 99f4ef4..115aabd 100755
--- a/t/t5324-split-commit-graph.sh
+++ b/t/t5324-split-commit-graph.sh
@@ -8,6 +8,7 @@
 test_expect_success 'setup repo' '
 	git init &&
 	git config core.commitGraph true &&
+	git config gc.writeCommitGraph false &&
 	infodir=".git/objects/info" &&
 	graphdir="$infodir/commit-graphs" &&
 	test_oid_init
@@ -319,7 +320,7 @@
 	git merge commits/3 commits/4 &&
 	git branch merge/octopus &&
 	git commit-graph write --reachable --split &&
-	git commit-graph verify 2>err &&
+	git commit-graph verify --progress 2>err &&
 	test_line_count = 3 err &&
 	test_i18ngrep ! warning err &&
 	test_line_count = 3 $graphdir/commit-graph-chain
@@ -334,6 +335,7 @@
 	git clone --no-hardlinks . alt-split &&
 	(
 		cd alt-split &&
+		rm -f .git/objects/info/commit-graph &&
 		echo "$(pwd)"/../.git/objects >.git/objects/info/alternates &&
 		test_commit 18 &&
 		git commit-graph write --reachable --split &&
diff --git a/t/t5500-fetch-pack.sh b/t/t5500-fetch-pack.sh
index 1c71c0e..6b97923 100755
--- a/t/t5500-fetch-pack.sh
+++ b/t/t5500-fetch-pack.sh
@@ -708,13 +708,22 @@
 	# file with scheme
 	for p in file
 	do
-		test_expect_success "fetch-pack --diag-url $p://$h/$r" '
+		test_expect_success !MINGW "fetch-pack --diag-url $p://$h/$r" '
 			check_prot_path $p://$h/$r $p "/$r"
 		'
+		test_expect_success MINGW "fetch-pack --diag-url $p://$h/$r" '
+			check_prot_path $p://$h/$r $p "//$h/$r"
+		'
+		test_expect_success MINGW "fetch-pack --diag-url $p:///$r" '
+			check_prot_path $p:///$r $p "/$r"
+		'
 		# No "/~" -> "~" conversion for file
-		test_expect_success "fetch-pack --diag-url $p://$h/~$r" '
+		test_expect_success !MINGW "fetch-pack --diag-url $p://$h/~$r" '
 			check_prot_path $p://$h/~$r $p "/~$r"
 		'
+		test_expect_success MINGW "fetch-pack --diag-url $p://$h/~$r" '
+			check_prot_path $p://$h/~$r $p "//$h/~$r"
+		'
 	done
 	# file without scheme
 	for h in nohost nohost:12 [::1] [::1]:23 [ [:aa
@@ -783,6 +792,44 @@
 	)
 '
 
+# A few subtle things about the request in this test:
+#
+#  - the server must have commit-graphs present and enabled
+#
+#  - the history is such that our want/have share a common ancestor ("base"
+#    here)
+#
+#  - we send only a single have, which is fewer than a normal client would
+#    send. This ensures that we don't parse "base" up front with
+#    parse_object(), but rather traverse to it as a parent while deciding if we
+#    can stop the "have" negotiation, and call parse_commit(). The former
+#    sees the actual object data and so always loads the three oid, whereas the
+#    latter will try to load it lazily.
+#
+#  - we must use protocol v2, because it handles the "have" negotiation before
+#    processing the shallow directives
+#
+test_expect_success 'shallow since with commit graph and already-seen commit' '
+	test_create_repo shallow-since-graph &&
+	(
+	cd shallow-since-graph &&
+	test_commit base &&
+	test_commit master &&
+	git checkout -b other HEAD^ &&
+	test_commit other &&
+	git commit-graph write --reachable &&
+	git config core.commitGraph true &&
+
+	GIT_PROTOCOL=version=2 git upload-pack . <<-EOF >/dev/null
+	0012command=fetch
+	00010013deepen-since 1
+	0032want $(git rev-parse other)
+	0032have $(git rev-parse master)
+	0000
+	EOF
+	)
+'
+
 test_expect_success 'shallow clone exclude tag two' '
 	test_create_repo shallow-exclude &&
 	(
@@ -920,4 +967,7 @@
 	fetch_filter_blob_limit_zero "$HTTPD_DOCUMENT_ROOT_PATH/server" "$HTTPD_URL/smart/server"
 '
 
+# DO NOT add non-httpd-specific tests here, because the last part of this
+# test script is only executed when httpd is available and enabled.
+
 test_done
diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh
index 139f710..4b60282 100755
--- a/t/t5510-fetch.sh
+++ b/t/t5510-fetch.sh
@@ -570,6 +570,35 @@
 	)
 '
 
+test_expect_success 'fetch.writeCommitGraph' '
+	git clone three write &&
+	(
+		cd three &&
+		test_commit new
+	) &&
+	(
+		cd write &&
+		git -c fetch.writeCommitGraph fetch origin &&
+		test_path_is_file .git/objects/info/commit-graphs/commit-graph-chain
+	)
+'
+
+test_expect_success 'fetch.writeCommitGraph with submodules' '
+	git clone dups super &&
+	(
+		cd super &&
+		git submodule add "file://$TRASH_DIRECTORY/three" &&
+		git commit -m "add submodule"
+	) &&
+	git clone "super" super-clone &&
+	(
+		cd super-clone &&
+		rm -rf .git/objects/info &&
+		git -c fetch.writeCommitGraph=true fetch origin &&
+		test_path_is_file .git/objects/info/commit-graphs/commit-graph-chain
+	)
+'
+
 # configured prune tests
 
 set_config_tristate () {
@@ -902,6 +931,29 @@
 	test_cmp expect actual
 '
 
+test_expect_success '--no-show-forced-updates' '
+	mkdir forced-updates &&
+	(
+		cd forced-updates &&
+		git init &&
+		test_commit 1 &&
+		test_commit 2
+	) &&
+	git clone forced-updates forced-update-clone &&
+	git clone forced-updates no-forced-update-clone &&
+	git -C forced-updates reset --hard HEAD~1 &&
+	(
+		cd forced-update-clone &&
+		git fetch --show-forced-updates origin 2>output &&
+		test_i18ngrep "(forced update)" output
+	) &&
+	(
+		cd no-forced-update-clone &&
+		git fetch --no-show-forced-updates origin 2>output &&
+		test_i18ngrep ! "(forced update)" output
+	)
+'
+
 setup_negotiation_tip () {
 	SERVER="$1"
 	URL="$2"
@@ -978,27 +1030,7 @@
 	check_negotiation_tip
 '
 
-test_expect_success '--no-show-forced-updates' '
-	mkdir forced-updates &&
-	(
-		cd forced-updates &&
-		git init &&
-		test_commit 1 &&
-		test_commit 2
-	) &&
-	git clone forced-updates forced-update-clone &&
-	git clone forced-updates no-forced-update-clone &&
-	git -C forced-updates reset --hard HEAD~1 &&
-	(
-		cd forced-update-clone &&
-		git fetch --show-forced-updates origin 2>output &&
-		test_i18ngrep "(forced update)" output
-	) &&
-	(
-		cd no-forced-update-clone &&
-		git fetch --no-show-forced-updates origin 2>output &&
-		! test_i18ngrep "(forced update)" output
-	)
-'
+# DO NOT add non-httpd-specific tests here, because the last part of this
+# test script is only executed when httpd is available and enabled.
 
 test_done
diff --git a/t/t5514-fetch-multiple.sh b/t/t5514-fetch-multiple.sh
index 5426d4b..de8e2f1 100755
--- a/t/t5514-fetch-multiple.sh
+++ b/t/t5514-fetch-multiple.sh
@@ -183,4 +183,15 @@
 	test_cmp expect test8/output
 '
 
+test_expect_success 'parallel' '
+	git remote add one ./bogus1 &&
+	git remote add two ./bogus2 &&
+
+	test_must_fail env GIT_TRACE="$PWD/trace" \
+		git fetch --jobs=2 --multiple one two 2>err &&
+	grep "preparing to run up to 2 tasks" trace &&
+	test_i18ngrep "could not fetch .one.*128" err &&
+	test_i18ngrep "could not fetch .two.*128" err
+'
+
 test_done
diff --git a/t/t5515-fetch-merge-logic.sh b/t/t5515-fetch-merge-logic.sh
index e55d847..961eb35 100755
--- a/t/t5515-fetch-merge-logic.sh
+++ b/t/t5515-fetch-merge-logic.sh
@@ -12,9 +12,6 @@
 
 . ./test-lib.sh
 
-LF='
-'
-
 test_expect_success setup '
 	GIT_AUTHOR_DATE="2006-06-26 00:00:00 +0000" &&
 	GIT_COMMITTER_DATE="2006-06-26 00:00:00 +0000" &&
diff --git a/t/t5517-push-mirror.sh b/t/t5517-push-mirror.sh
index c05a661..e4edd56 100755
--- a/t/t5517-push-mirror.sh
+++ b/t/t5517-push-mirror.sh
@@ -265,4 +265,14 @@
 
 '
 
+test_expect_success 'push to mirrored repository with refspec fails' '
+	mk_repo_pair &&
+	(
+		cd master &&
+		echo one >foo && git add foo && git commit -m one &&
+		git config --add remote.up.mirror true &&
+		test_must_fail git push up master
+	)
+'
+
 test_done
diff --git a/t/t5537-fetch-shallow.sh b/t/t5537-fetch-shallow.sh
index 66f0b64..97a6772 100755
--- a/t/t5537-fetch-shallow.sh
+++ b/t/t5537-fetch-shallow.sh
@@ -255,4 +255,7 @@
 	git -C client fsck
 '
 
+# DO NOT add non-httpd-specific tests here, because the last part of this
+# test script is only executed when httpd is available and enabled.
+
 test_done
diff --git a/t/t5541-http-push-smart.sh b/t/t5541-http-push-smart.sh
index b86ddb6..4c97078 100755
--- a/t/t5541-http-push-smart.sh
+++ b/t/t5541-http-push-smart.sh
@@ -184,11 +184,12 @@
 	test_config -C "$d" http.receivepack true &&
 	up="$HTTPD_URL"/smart/atomic-branches.git &&
 
-	# Tell "$up" about two branches for now
+	# Tell "$up" about three branches for now
 	test_commit atomic1 &&
 	test_commit atomic2 &&
 	git branch collateral &&
-	git push "$up" master collateral &&
+	git branch other &&
+	git push "$up" master collateral other &&
 
 	# collateral is a valid push, but should be failed by atomic push
 	git checkout collateral &&
@@ -226,6 +227,41 @@
 	grep "^ ! .*rejected.* collateral -> collateral .*atomic push failed" output
 '
 
+test_expect_success 'push --atomic fails on server-side errors' '
+	# Use previously set up repository
+	d=$HTTPD_DOCUMENT_ROOT_PATH/atomic-branches.git &&
+	test_config -C "$d" http.receivepack true &&
+	up="$HTTPD_URL"/smart/atomic-branches.git &&
+
+	# break ref updates for other on the remote site
+	mkdir "$d/refs/heads/other.lock" &&
+
+	# add the new commit to other
+	git branch -f other collateral &&
+
+	# --atomic should cause entire push to be rejected
+	test_must_fail git push --atomic "$up" atomic other 2>output  &&
+
+	# the new branch should not have been created upstream
+	test_must_fail git -C "$d" show-ref --verify refs/heads/atomic &&
+
+	# upstream should still reflect atomic2, the last thing we pushed
+	# successfully
+	git rev-parse atomic2 >expected &&
+	# ...to other.
+	git -C "$d" rev-parse refs/heads/other >actual &&
+	test_cmp expected actual &&
+
+	# the new branch should not have been created upstream
+	test_must_fail git -C "$d" show-ref --verify refs/heads/atomic &&
+
+	# the failed refs should be indicated to the user
+	grep "^ ! .*rejected.* other -> other .*atomic transaction failed" output &&
+
+	# the collateral failure refs should be indicated to the user
+	grep "^ ! .*rejected.* atomic -> atomic .*atomic transaction failed" output
+'
+
 test_expect_success 'push --all can push to empty repo' '
 	d=$HTTPD_DOCUMENT_ROOT_PATH/empty-all.git &&
 	git init --bare "$d" &&
@@ -262,7 +298,7 @@
 	cd "$ROOT_PATH"/test_repo_clone &&
 	test_commit noisy &&
 	test_terminal git push >output 2>&1 &&
-	test_i18ngrep "Writing objects" output
+	test_i18ngrep "^Writing objects" output
 '
 
 test_expect_success TTY 'push --quiet silences status and progress' '
@@ -277,7 +313,7 @@
 	test_commit no-progress &&
 	test_terminal git push --no-progress >output 2>&1 &&
 	test_i18ngrep "^To http" output &&
-	test_i18ngrep ! "Writing objects" output
+	test_i18ngrep ! "^Writing objects" output
 '
 
 test_expect_success 'push --progress shows progress to non-tty' '
@@ -285,7 +321,7 @@
 	test_commit progress &&
 	git push --progress >output 2>&1 &&
 	test_i18ngrep "^To http" output &&
-	test_i18ngrep "Writing objects" output
+	test_i18ngrep "^Writing objects" output
 '
 
 test_expect_success 'http push gives sane defaults to reflog' '
diff --git a/t/t5545-push-options.sh b/t/t5545-push-options.sh
index 6d1d59c..04b34c4 100755
--- a/t/t5545-push-options.sh
+++ b/t/t5545-push-options.sh
@@ -278,4 +278,7 @@
 	test_cmp expect "$HTTPD_DOCUMENT_ROOT_PATH"/upstream.git/hooks/pre-receive.push_options
 '
 
+# DO NOT add non-httpd-specific tests here, because the last part of this
+# test script is only executed when httpd is available and enabled.
+
 test_done
diff --git a/t/t5552-skipping-fetch-negotiator.sh b/t/t5552-skipping-fetch-negotiator.sh
index 8a14be5..f70cbcc 100755
--- a/t/t5552-skipping-fetch-negotiator.sh
+++ b/t/t5552-skipping-fetch-negotiator.sh
@@ -60,29 +60,6 @@
 	have_not_sent c6 c4 c3
 '
 
-test_expect_success 'unknown fetch.negotiationAlgorithm values error out' '
-	rm -rf server client trace &&
-	git init server &&
-	test_commit -C server to_fetch &&
-
-	git init client &&
-	test_commit -C client on_client &&
-	git -C client checkout on_client &&
-
-	test_config -C client fetch.negotiationAlgorithm invalid &&
-	test_must_fail git -C client fetch "$(pwd)/server" 2>err &&
-	test_i18ngrep "unknown fetch negotiation algorithm" err &&
-
-	# Explicit "default" value
-	test_config -C client fetch.negotiationAlgorithm default &&
-	git -C client -c fetch.negotiationAlgorithm=default fetch "$(pwd)/server" &&
-
-	# Implementation detail: If there is nothing to fetch, we will not error out
-	test_config -C client fetch.negotiationAlgorithm invalid &&
-	git -C client fetch "$(pwd)/server" 2>err &&
-	test_i18ngrep ! "unknown fetch negotiation algorithm" err
-'
-
 test_expect_success 'when two skips collide, favor the larger one' '
 	rm -rf server client trace &&
 	git init server &&
diff --git a/t/t5553-set-upstream.sh b/t/t5553-set-upstream.sh
new file mode 100755
index 0000000..81975ad
--- /dev/null
+++ b/t/t5553-set-upstream.sh
@@ -0,0 +1,178 @@
+#!/bin/sh
+
+test_description='"git fetch/pull --set-upstream" basic tests.'
+. ./test-lib.sh
+
+check_config () {
+	printf "%s\n" "$2" "$3" >"expect.$1" &&
+	{
+		git config "branch.$1.remote" && git config "branch.$1.merge"
+	} >"actual.$1" &&
+	test_cmp "expect.$1" "actual.$1"
+}
+
+check_config_missing () {
+	test_expect_code 1 git config "branch.$1.remote" &&
+	test_expect_code 1 git config "branch.$1.merge"
+}
+
+clear_config () {
+	for branch in "$@"; do
+		test_might_fail git config --unset-all "branch.$branch.remote"
+		test_might_fail git config --unset-all "branch.$branch.merge"
+	done
+}
+
+ensure_fresh_upstream () {
+	rm -rf parent && git init --bare parent
+}
+
+test_expect_success 'setup bare parent fetch' '
+	ensure_fresh_upstream &&
+	git remote add upstream parent
+'
+
+test_expect_success 'setup commit on master and other fetch' '
+	test_commit one &&
+	git push upstream master &&
+	git checkout -b other &&
+	test_commit two &&
+	git push upstream other
+'
+
+# tests for fetch --set-upstream
+
+test_expect_success 'fetch --set-upstream does not set upstream w/o branch' '
+	clear_config master other &&
+	git checkout master &&
+	git fetch --set-upstream upstream &&
+	check_config_missing master &&
+	check_config_missing other
+'
+
+test_expect_success 'fetch --set-upstream upstream master sets branch master but not other' '
+	clear_config master other &&
+	git fetch --set-upstream upstream master &&
+	check_config master upstream refs/heads/master &&
+	check_config_missing other
+'
+
+test_expect_success 'fetch --set-upstream upstream other sets branch other' '
+	clear_config master other &&
+	git fetch --set-upstream upstream other &&
+	check_config master upstream refs/heads/other &&
+	check_config_missing other
+'
+
+test_expect_success 'fetch --set-upstream master:other does not set the branch other2' '
+	clear_config other2 &&
+	git fetch --set-upstream upstream master:other2 &&
+	check_config_missing other2
+'
+
+test_expect_success 'fetch --set-upstream http://nosuchdomain.example.com fails with invalid url' '
+	# master explicitly not cleared, we check that it is not touched from previous value
+	clear_config other other2 &&
+	test_must_fail git fetch --set-upstream http://nosuchdomain.example.com &&
+	check_config master upstream refs/heads/other &&
+	check_config_missing other &&
+	check_config_missing other2
+'
+
+test_expect_success 'fetch --set-upstream with valid URL sets upstream to URL' '
+	clear_config other other2 &&
+	url="file://'"$PWD"'" &&
+	git fetch --set-upstream "$url" &&
+	check_config master "$url" HEAD &&
+	check_config_missing other &&
+	check_config_missing other2
+'
+
+# tests for pull --set-upstream
+
+test_expect_success 'setup bare parent pull' '
+	git remote rm upstream &&
+	ensure_fresh_upstream &&
+	git remote add upstream parent
+'
+
+test_expect_success 'setup commit on master and other pull' '
+	test_commit three &&
+	git push --tags upstream master &&
+	test_commit four &&
+	git push upstream other
+'
+
+test_expect_success 'pull --set-upstream upstream master sets branch master but not other' '
+	clear_config master other &&
+	git pull --set-upstream upstream master &&
+	check_config master upstream refs/heads/master &&
+	check_config_missing other
+'
+
+test_expect_success 'pull --set-upstream master:other2 does not set the branch other2' '
+	clear_config other2 &&
+	git pull --set-upstream upstream master:other2 &&
+	check_config_missing other2
+'
+
+test_expect_success 'pull --set-upstream upstream other sets branch master' '
+	clear_config master other &&
+	git pull --set-upstream upstream other &&
+	check_config master upstream refs/heads/other &&
+	check_config_missing other
+'
+
+test_expect_success 'pull --set-upstream upstream tag does not set the tag' '
+	clear_config three &&
+	git pull --tags --set-upstream upstream three &&
+	check_config_missing three
+'
+
+test_expect_success 'pull --set-upstream http://nosuchdomain.example.com fails with invalid url' '
+	# master explicitly not cleared, we check that it is not touched from previous value
+	clear_config other other2 three &&
+	test_must_fail git pull --set-upstream http://nosuchdomain.example.com &&
+	check_config master upstream refs/heads/other &&
+	check_config_missing other &&
+	check_config_missing other2 &&
+	check_config_missing three
+'
+
+test_expect_success 'pull --set-upstream upstream HEAD sets branch HEAD' '
+	clear_config master other &&
+	git pull --set-upstream upstream HEAD &&
+	check_config master upstream HEAD &&
+	git checkout other &&
+	git pull --set-upstream upstream HEAD &&
+	check_config other upstream HEAD
+'
+
+test_expect_success 'pull --set-upstream upstream with more than one branch does nothing' '
+	clear_config master three &&
+	git pull --set-upstream upstream master three &&
+	check_config_missing master &&
+	check_config_missing three
+'
+
+test_expect_success 'pull --set-upstream with valid URL sets upstream to URL' '
+	clear_config master other other2 &&
+	git checkout master &&
+	url="file://'"$PWD"'" &&
+	git pull --set-upstream "$url" &&
+	check_config master "$url" HEAD &&
+	check_config_missing other &&
+	check_config_missing other2
+'
+
+test_expect_success 'pull --set-upstream with valid URL and branch sets branch' '
+	clear_config master other other2 &&
+	git checkout master &&
+	url="file://'"$PWD"'" &&
+	git pull --set-upstream "$url" master &&
+	check_config master "$url" refs/heads/master &&
+	check_config_missing other &&
+	check_config_missing other2
+'
+
+test_done
diff --git a/t/t5601-clone.sh b/t/t5601-clone.sh
index 37d7680..ad8c411 100755
--- a/t/t5601-clone.sh
+++ b/t/t5601-clone.sh
@@ -434,7 +434,6 @@
 	expect_ssh "-v -P 123" myhost src
 '
 
-SQ="'"
 test_expect_success 'single quoted plink.exe in GIT_SSH_COMMAND' '
 	copy_ssh_wrapper_as "$TRASH_DIRECTORY/plink.exe" &&
 	GIT_SSH_COMMAND="$SQ$TRASH_DIRECTORY/plink.exe$SQ -v" \
@@ -654,7 +653,8 @@
 	git -C client fsck &&
 
 	# Ensure that unneeded blobs are not inadvertently fetched.
-	test_config -C client extensions.partialclone "not a remote" &&
+	test_config -C client remote.origin.promisor "false" &&
+	git -C client config --unset remote.origin.partialclonefilter &&
 	test_must_fail git -C client cat-file -e "$HASH1" &&
 
 	# But this blob was fetched, because clone performs an initial checkout
@@ -739,4 +739,7 @@
 	partial_clone "$HTTPD_DOCUMENT_ROOT_PATH/server" "$HTTPD_URL/smart/server"
 '
 
+# DO NOT add non-httpd-specific tests here, because the last part of this
+# test script is only executed when httpd is available and enabled.
+
 test_done
diff --git a/t/t5607-clone-bundle.sh b/t/t5607-clone-bundle.sh
index 2a0fb15..b7a3fdf 100755
--- a/t/t5607-clone-bundle.sh
+++ b/t/t5607-clone-bundle.sh
@@ -83,4 +83,15 @@
 	test_path_is_missing fail.bundle.lock
 '
 
+test_expect_success 'fetch SHA-1 from bundle' '
+	test_create_repo foo &&
+	test_commit -C foo x &&
+	git -C foo bundle create tip.bundle -1 master &&
+	git -C foo rev-parse HEAD >hash &&
+
+	# Exercise to ensure that fetching a SHA-1 from a bundle works with no
+	# errors
+	git fetch --no-tags foo/tip.bundle "$(cat hash)"
+'
+
 test_done
diff --git a/t/t5616-partial-clone.sh b/t/t5616-partial-clone.sh
index b91ef54..79f7b65 100755
--- a/t/t5616-partial-clone.sh
+++ b/t/t5616-partial-clone.sh
@@ -42,8 +42,8 @@
 
 	test_cmp expect_1.oids observed.oids &&
 	test "$(git -C pc1 config --local core.repositoryformatversion)" = "1" &&
-	test "$(git -C pc1 config --local extensions.partialclone)" = "origin" &&
-	test "$(git -C pc1 config --local core.partialclonefilter)" = "blob:none"
+	test "$(git -C pc1 config --local remote.origin.promisor)" = "true" &&
+	test "$(git -C pc1 config --local remote.origin.partialclonefilter)" = "blob:none"
 '
 
 # checkout master to force dynamic object fetch of blobs at HEAD.
@@ -208,6 +208,25 @@
 	test_cmp unique_types.expected unique_types.observed
 '
 
+test_expect_success 'implicitly construct combine: filter with repeated flags' '
+	GIT_TRACE=$(pwd)/trace git clone --bare \
+		--filter=blob:none --filter=tree:1 \
+		"file://$(pwd)/srv.bare" pc2 &&
+	grep "trace:.* git pack-objects .*--filter=combine:blob:none+tree:1" \
+		trace &&
+	git -C pc2 rev-list --objects --missing=allow-any HEAD >objects &&
+
+	# We should have gotten some root trees.
+	grep " $" objects &&
+	# Should not have gotten any non-root trees or blobs.
+	! grep " ." objects &&
+
+	xargs -n 1 git -C pc2 cat-file -t <objects >types &&
+	sort -u types >unique_types.actual &&
+	test_write_lines commit tree >unique_types.expected &&
+	test_cmp unique_types.expected unique_types.actual
+'
+
 test_expect_success 'partial clone fetches blobs pointed to by refs even if normally filtered out' '
 	rm -rf src dst &&
 	git init src &&
@@ -241,6 +260,42 @@
 	! grep "?$(cat blob)" missing_after
 '
 
+test_expect_success 'setup src repo for sparse filter' '
+	git init sparse-src &&
+	git -C sparse-src config --local uploadpack.allowfilter 1 &&
+	git -C sparse-src config --local uploadpack.allowanysha1inwant 1 &&
+	test_commit -C sparse-src one &&
+	test_commit -C sparse-src two &&
+	echo /one.t >sparse-src/only-one &&
+	git -C sparse-src add . &&
+	git -C sparse-src commit -m "add sparse checkout files"
+'
+
+test_expect_success 'partial clone with sparse filter succeeds' '
+	rm -rf dst.git &&
+	git clone --no-local --bare \
+		  --filter=sparse:oid=master:only-one \
+		  sparse-src dst.git &&
+	(
+		cd dst.git &&
+		git rev-list --objects --missing=print HEAD >out &&
+		grep "^$(git rev-parse HEAD:one.t)" out &&
+		grep "^?$(git rev-parse HEAD:two.t)" out
+	)
+'
+
+test_expect_success 'partial clone with unresolvable sparse filter fails cleanly' '
+	rm -rf dst.git &&
+	test_must_fail git clone --no-local --bare \
+				 --filter=sparse:oid=master:no-such-name \
+				 sparse-src dst.git 2>err &&
+	test_i18ngrep "unable to access sparse blob in .master:no-such-name" err &&
+	test_must_fail git clone --no-local --bare \
+				 --filter=sparse:oid=master \
+				 sparse-src dst.git 2>err &&
+	test_i18ngrep "unable to parse sparse filter data in" err
+'
+
 . "$TEST_DIRECTORY"/lib-httpd.sh
 start_httpd
 
@@ -417,4 +472,7 @@
 	! test -e "$HTTPD_ROOT_PATH/one-time-sed"
 '
 
+# DO NOT add non-httpd-specific tests here, because the last part of this
+# test script is only executed when httpd is available and enabled.
+
 test_done
diff --git a/t/t5700-protocol-v1.sh b/t/t5700-protocol-v1.sh
index 7c9511c..2571eb9 100755
--- a/t/t5700-protocol-v1.sh
+++ b/t/t5700-protocol-v1.sh
@@ -292,4 +292,7 @@
 	grep "git< version 1" log
 '
 
+# DO NOT add non-httpd-specific tests here, because the last part of this
+# test script is only executed when httpd is available and enabled.
+
 test_done
diff --git a/t/t5702-protocol-v2.sh b/t/t5702-protocol-v2.sh
index 011b81d..ae9175c 100755
--- a/t/t5702-protocol-v2.sh
+++ b/t/t5702-protocol-v2.sh
@@ -631,6 +631,19 @@
 	grep "git< version 2" log
 '
 
+test_expect_success 'fetch with http:// by hash without tag following with protocol v2 does not list refs' '
+	test_when_finished "rm -f log" &&
+
+	test_commit -C "$HTTPD_DOCUMENT_ROOT_PATH/http_parent" two_a &&
+	git -C "$HTTPD_DOCUMENT_ROOT_PATH/http_parent" rev-parse two_a >two_a_hash &&
+
+	GIT_TRACE_PACKET="$(pwd)/log" git -C http_child -c protocol.version=2 \
+		fetch --no-tags origin $(cat two_a_hash) &&
+
+	grep "fetch< version 2" log &&
+	! grep "fetch> command=ls-refs" log
+'
+
 test_expect_success 'fetch from namespaced repo respects namespaces' '
 	test_when_finished "rm -f log" &&
 
@@ -723,4 +736,7 @@
 	test_i18ngrep "expected no other sections to be sent after no .ready." err
 '
 
+# DO NOT add non-httpd-specific tests here, because the last part of this
+# test script is only executed when httpd is available and enabled.
+
 test_done
diff --git a/t/t5703-upload-pack-ref-in-want.sh b/t/t5703-upload-pack-ref-in-want.sh
index de4b610..3a2c143 100755
--- a/t/t5703-upload-pack-ref-in-want.sh
+++ b/t/t5703-upload-pack-ref-in-want.sh
@@ -157,106 +157,6 @@
 	check_output
 '
 
-. "$TEST_DIRECTORY"/lib-httpd.sh
-start_httpd
-
-REPO="$HTTPD_DOCUMENT_ROOT_PATH/repo"
-LOCAL_PRISTINE="$(pwd)/local_pristine"
-
-test_expect_success 'setup repos for change-while-negotiating test' '
-	(
-		git init "$REPO" &&
-		cd "$REPO" &&
-		>.git/git-daemon-export-ok &&
-		test_commit m1 &&
-		git tag -d m1 &&
-
-		# Local repo with many commits (so that negotiation will take
-		# more than 1 request/response pair)
-		git clone "http://127.0.0.1:$LIB_HTTPD_PORT/smart/repo" "$LOCAL_PRISTINE" &&
-		cd "$LOCAL_PRISTINE" &&
-		git checkout -b side &&
-		test_commit_bulk --id=s 33 &&
-
-		# Add novel commits to upstream
-		git checkout master &&
-		cd "$REPO" &&
-		test_commit m2 &&
-		test_commit m3 &&
-		git tag -d m2 m3
-	) &&
-	git -C "$LOCAL_PRISTINE" remote set-url origin "http://127.0.0.1:$LIB_HTTPD_PORT/one_time_sed/repo" &&
-	git -C "$LOCAL_PRISTINE" config protocol.version 2
-'
-
-inconsistency () {
-	# Simulate that the server initially reports $2 as the ref
-	# corresponding to $1, and after that, $1 as the ref corresponding to
-	# $1. This corresponds to the real-life situation where the server's
-	# repository appears to change during negotiation, for example, when
-	# different servers in a load-balancing arrangement serve (stateless)
-	# RPCs during a single negotiation.
-	printf "s/%s/%s/" \
-	       $(git -C "$REPO" rev-parse $1 | tr -d "\n") \
-	       $(git -C "$REPO" rev-parse $2 | tr -d "\n") \
-	       >"$HTTPD_ROOT_PATH/one-time-sed"
-}
-
-test_expect_success 'server is initially ahead - no ref in want' '
-	git -C "$REPO" config uploadpack.allowRefInWant false &&
-	rm -rf local &&
-	cp -r "$LOCAL_PRISTINE" local &&
-	inconsistency master 1234567890123456789012345678901234567890 &&
-	test_must_fail git -C local fetch 2>err &&
-	test_i18ngrep "fatal: remote error: upload-pack: not our ref" err
-'
-
-test_expect_success 'server is initially ahead - ref in want' '
-	git -C "$REPO" config uploadpack.allowRefInWant true &&
-	rm -rf local &&
-	cp -r "$LOCAL_PRISTINE" local &&
-	inconsistency master 1234567890123456789012345678901234567890 &&
-	git -C local fetch &&
-
-	git -C "$REPO" rev-parse --verify master >expected &&
-	git -C local rev-parse --verify refs/remotes/origin/master >actual &&
-	test_cmp expected actual
-'
-
-test_expect_success 'server is initially behind - no ref in want' '
-	git -C "$REPO" config uploadpack.allowRefInWant false &&
-	rm -rf local &&
-	cp -r "$LOCAL_PRISTINE" local &&
-	inconsistency master "master^" &&
-	git -C local fetch &&
-
-	git -C "$REPO" rev-parse --verify "master^" >expected &&
-	git -C local rev-parse --verify refs/remotes/origin/master >actual &&
-	test_cmp expected actual
-'
-
-test_expect_success 'server is initially behind - ref in want' '
-	git -C "$REPO" config uploadpack.allowRefInWant true &&
-	rm -rf local &&
-	cp -r "$LOCAL_PRISTINE" local &&
-	inconsistency master "master^" &&
-	git -C local fetch &&
-
-	git -C "$REPO" rev-parse --verify "master" >expected &&
-	git -C local rev-parse --verify refs/remotes/origin/master >actual &&
-	test_cmp expected actual
-'
-
-test_expect_success 'server loses a ref - ref in want' '
-	git -C "$REPO" config uploadpack.allowRefInWant true &&
-	rm -rf local &&
-	cp -r "$LOCAL_PRISTINE" local &&
-	echo "s/master/raster/" >"$HTTPD_ROOT_PATH/one-time-sed" &&
-	test_must_fail git -C local fetch 2>err &&
-
-	test_i18ngrep "fatal: remote error: unknown ref refs/heads/raster" err
-'
-
 REPO="$(pwd)/repo"
 LOCAL_PRISTINE="$(pwd)/local_pristine"
 
@@ -372,4 +272,108 @@
 	grep "want-ref refs/heads/o/bar" log
 '
 
+. "$TEST_DIRECTORY"/lib-httpd.sh
+start_httpd
+
+REPO="$HTTPD_DOCUMENT_ROOT_PATH/repo"
+LOCAL_PRISTINE="$(pwd)/local_pristine"
+
+test_expect_success 'setup repos for change-while-negotiating test' '
+	(
+		git init "$REPO" &&
+		cd "$REPO" &&
+		>.git/git-daemon-export-ok &&
+		test_commit m1 &&
+		git tag -d m1 &&
+
+		# Local repo with many commits (so that negotiation will take
+		# more than 1 request/response pair)
+		rm -rf "$LOCAL_PRISTINE" &&
+		git clone "http://127.0.0.1:$LIB_HTTPD_PORT/smart/repo" "$LOCAL_PRISTINE" &&
+		cd "$LOCAL_PRISTINE" &&
+		git checkout -b side &&
+		test_commit_bulk --id=s 33 &&
+
+		# Add novel commits to upstream
+		git checkout master &&
+		cd "$REPO" &&
+		test_commit m2 &&
+		test_commit m3 &&
+		git tag -d m2 m3
+	) &&
+	git -C "$LOCAL_PRISTINE" remote set-url origin "http://127.0.0.1:$LIB_HTTPD_PORT/one_time_sed/repo" &&
+	git -C "$LOCAL_PRISTINE" config protocol.version 2
+'
+
+inconsistency () {
+	# Simulate that the server initially reports $2 as the ref
+	# corresponding to $1, and after that, $1 as the ref corresponding to
+	# $1. This corresponds to the real-life situation where the server's
+	# repository appears to change during negotiation, for example, when
+	# different servers in a load-balancing arrangement serve (stateless)
+	# RPCs during a single negotiation.
+	printf "s/%s/%s/" \
+	       $(git -C "$REPO" rev-parse $1 | tr -d "\n") \
+	       $(git -C "$REPO" rev-parse $2 | tr -d "\n") \
+	       >"$HTTPD_ROOT_PATH/one-time-sed"
+}
+
+test_expect_success 'server is initially ahead - no ref in want' '
+	git -C "$REPO" config uploadpack.allowRefInWant false &&
+	rm -rf local &&
+	cp -r "$LOCAL_PRISTINE" local &&
+	inconsistency master 1234567890123456789012345678901234567890 &&
+	test_must_fail git -C local fetch 2>err &&
+	test_i18ngrep "fatal: remote error: upload-pack: not our ref" err
+'
+
+test_expect_success 'server is initially ahead - ref in want' '
+	git -C "$REPO" config uploadpack.allowRefInWant true &&
+	rm -rf local &&
+	cp -r "$LOCAL_PRISTINE" local &&
+	inconsistency master 1234567890123456789012345678901234567890 &&
+	git -C local fetch &&
+
+	git -C "$REPO" rev-parse --verify master >expected &&
+	git -C local rev-parse --verify refs/remotes/origin/master >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'server is initially behind - no ref in want' '
+	git -C "$REPO" config uploadpack.allowRefInWant false &&
+	rm -rf local &&
+	cp -r "$LOCAL_PRISTINE" local &&
+	inconsistency master "master^" &&
+	git -C local fetch &&
+
+	git -C "$REPO" rev-parse --verify "master^" >expected &&
+	git -C local rev-parse --verify refs/remotes/origin/master >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'server is initially behind - ref in want' '
+	git -C "$REPO" config uploadpack.allowRefInWant true &&
+	rm -rf local &&
+	cp -r "$LOCAL_PRISTINE" local &&
+	inconsistency master "master^" &&
+	git -C local fetch &&
+
+	git -C "$REPO" rev-parse --verify "master" >expected &&
+	git -C local rev-parse --verify refs/remotes/origin/master >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'server loses a ref - ref in want' '
+	git -C "$REPO" config uploadpack.allowRefInWant true &&
+	rm -rf local &&
+	cp -r "$LOCAL_PRISTINE" local &&
+	echo "s/master/raster/" >"$HTTPD_ROOT_PATH/one-time-sed" &&
+	test_must_fail git -C local fetch 2>err &&
+
+	test_i18ngrep "fatal: remote error: unknown ref refs/heads/raster" err
+'
+
+# DO NOT add non-httpd-specific tests here, because the last part of this
+# test script is only executed when httpd is available and enabled.
+
 test_done
diff --git a/t/t5801-remote-helpers.sh b/t/t5801-remote-helpers.sh
index 2d6c4a2..121e5c6 100755
--- a/t/t5801-remote-helpers.sh
+++ b/t/t5801-remote-helpers.sh
@@ -247,7 +247,6 @@
 test_expect_success 'proper failure checks for fetching' '
 	(cd local &&
 	test_must_fail env GIT_REMOTE_TESTGIT_FAILURE=1 git fetch 2>error &&
-	cat error &&
 	test_i18ngrep -q "error while running fast-import" error
 	)
 '
diff --git a/t/t6000-rev-list-misc.sh b/t/t6000-rev-list-misc.sh
index 52a9e38..b8cf823 100755
--- a/t/t6000-rev-list-misc.sh
+++ b/t/t6000-rev-list-misc.sh
@@ -140,4 +140,12 @@
 	test_cmp expect actual
 '
 
+test_expect_success 'rev-list --end-of-options' '
+	git update-ref refs/heads/--output=yikes HEAD &&
+	git rev-list --end-of-options --output=yikes >actual &&
+	test_path_is_missing yikes &&
+	git rev-list HEAD >expect &&
+	test_cmp expect actual
+'
+
 test_done
diff --git a/t/t6006-rev-list-format.sh b/t/t6006-rev-list-format.sh
index da113d9..cfb74d0 100755
--- a/t/t6006-rev-list-format.sh
+++ b/t/t6006-rev-list-format.sh
@@ -501,9 +501,8 @@
 '
 
 test_expect_success 'oneline with empty message' '
-	git commit -m "dummy" --allow-empty &&
-	git commit -m "dummy" --allow-empty &&
-	git filter-branch --msg-filter "sed -e s/dummy//" HEAD^^.. &&
+	git commit --allow-empty --cleanup=verbatim -m "$LF" &&
+	git commit --allow-empty --allow-empty-message &&
 	git rev-list --oneline HEAD >test.txt &&
 	test_line_count = 5 test.txt &&
 	git rev-list --oneline --graph HEAD >testg.txt &&
diff --git a/t/t6011-rev-list-with-bad-commit.sh b/t/t6011-rev-list-with-bad-commit.sh
index 545b461..bad02cf 100755
--- a/t/t6011-rev-list-with-bad-commit.sh
+++ b/t/t6011-rev-list-with-bad-commit.sh
@@ -42,7 +42,7 @@
    '
 
 test_expect_success 'rev-list should fail' '
-	test_must_fail env GIT_TEST_COMMIT_GRAPH=0 git rev-list --all > /dev/null
+	test_must_fail env GIT_TEST_COMMIT_GRAPH=0 git -c core.commitGraph=false rev-list --all > /dev/null
 '
 
 test_expect_success 'git repack _MUST_ fail' \
diff --git a/t/t6036-recursive-corner-cases.sh b/t/t6036-recursive-corner-cases.sh
index d23b948..7fddcc8 100755
--- a/t/t6036-recursive-corner-cases.sh
+++ b/t/t6036-recursive-corner-cases.sh
@@ -1562,6 +1562,7 @@
 		cd nested_conflicts &&
 
 		git clean -f &&
+		MASTER=$(git rev-parse --short master) &&
 		git checkout L2^0 &&
 
 		# Merge must fail; there is a conflict
@@ -1582,7 +1583,7 @@
 		git cat-file -p R1:a >theirs &&
 		test_must_fail git merge-file --diff3 \
 			-L "Temporary merge branch 1" \
-			-L "merged common ancestors"  \
+			-L "$MASTER"  \
 			-L "Temporary merge branch 2" \
 			ours  \
 			base  \
@@ -1594,7 +1595,7 @@
 		git cat-file -p R1:b >theirs &&
 		test_must_fail git merge-file --diff3 \
 			-L "Temporary merge branch 1" \
-			-L "merged common ancestors"  \
+			-L "$MASTER"  \
 			-L "Temporary merge branch 2" \
 			ours  \
 			base  \
@@ -1732,6 +1733,7 @@
 	(
 		cd virtual_merge_base_has_nested_conflicts &&
 
+		MASTER=$(git rev-parse --short master) &&
 		git checkout L3^0 &&
 
 		# Merge must fail; there is a conflict
@@ -1760,7 +1762,7 @@
 		cp left merged-once &&
 		test_must_fail git merge-file --diff3 \
 			-L "Temporary merge branch 1" \
-			-L "merged common ancestors"  \
+			-L "$MASTER"  \
 			-L "Temporary merge branch 2" \
 			merged-once \
 			base        \
diff --git a/t/t6047-diff3-conflict-markers.sh b/t/t6047-diff3-conflict-markers.sh
new file mode 100755
index 0000000..860542a
--- /dev/null
+++ b/t/t6047-diff3-conflict-markers.sh
@@ -0,0 +1,202 @@
+#!/bin/sh
+
+test_description='recursive merge diff3 style conflict markers'
+
+. ./test-lib.sh
+
+# Setup:
+#          L1
+#            \
+#             ?
+#            /
+#          R1
+#
+# Where:
+#   L1 and R1 both have a file named 'content' but have no common history
+#
+
+test_expect_success 'setup no merge base' '
+	test_create_repo no_merge_base &&
+	(
+		cd no_merge_base &&
+
+		git checkout -b L &&
+		test_commit A content A &&
+
+		git checkout --orphan R &&
+		test_commit B content B
+	)
+'
+
+test_expect_success 'check no merge base' '
+	(
+		cd no_merge_base &&
+
+		git checkout L^0 &&
+
+		test_must_fail git -c merge.conflictstyle=diff3 merge --allow-unrelated-histories -s recursive R^0 &&
+
+		grep "|||||| empty tree" content
+	)
+'
+
+# Setup:
+#          L1
+#         /  \
+#   master    ?
+#         \  /
+#          R1
+#
+# Where:
+#   L1 and R1 have modified the same file ('content') in conflicting ways
+#
+
+test_expect_success 'setup unique merge base' '
+	test_create_repo unique_merge_base &&
+	(
+		cd unique_merge_base &&
+
+		test_commit base content "1
+2
+3
+4
+5
+" &&
+
+		git branch L &&
+		git branch R &&
+
+		git checkout L &&
+		test_commit L content "1
+2
+3
+4
+5
+7" &&
+
+		git checkout R &&
+		git rm content &&
+		test_commit R renamed "1
+2
+3
+4
+5
+six"
+	)
+'
+
+test_expect_success 'check unique merge base' '
+	(
+		cd unique_merge_base &&
+
+		git checkout L^0 &&
+		MASTER=$(git rev-parse --short master) &&
+
+		test_must_fail git -c merge.conflictstyle=diff3 merge -s recursive R^0 &&
+
+		grep "|||||| $MASTER:content" renamed
+	)
+'
+
+# Setup:
+#          L1---L2--L3
+#         /  \ /      \
+#   master    X1       ?
+#         \  / \      /
+#          R1---R2--R3
+#
+# Where:
+#   commits L1 and R1 have modified the same file in non-conflicting ways
+#   X1 is an auto-generated merge-base used when merging L1 and R1
+#   commits L2 and R2 are merges of R1 and L1 into L1 and R1, respectively
+#   commits L3 and R3 both modify 'content' in conflicting ways
+#
+
+test_expect_success 'setup multiple merge bases' '
+	test_create_repo multiple_merge_bases &&
+	(
+		cd multiple_merge_bases &&
+
+		test_commit initial content "1
+2
+3
+4
+5" &&
+
+		git branch L &&
+		git branch R &&
+
+		# Create L1
+		git checkout L &&
+		test_commit L1 content "0
+1
+2
+3
+4
+5" &&
+
+		# Create R1
+		git checkout R &&
+		test_commit R1 content "1
+2
+3
+4
+5
+6" &&
+
+		# Create L2
+		git checkout L &&
+		git merge R1 &&
+
+		# Create R2
+		git checkout R &&
+		git merge L1 &&
+
+		# Create L3
+		git checkout L &&
+		test_commit L3 content "0
+1
+2
+3
+4
+5
+A" &&
+
+		# Create R3
+		git checkout R &&
+		git rm content &&
+		test_commit R3 renamed "0
+2
+3
+4
+5
+six"
+	)
+'
+
+test_expect_success 'check multiple merge bases' '
+	(
+		cd multiple_merge_bases &&
+
+		git checkout L^0 &&
+
+		test_must_fail git -c merge.conflictstyle=diff3 merge -s recursive R^0 &&
+
+		grep "|||||| merged common ancestors:content" renamed
+	)
+'
+
+test_expect_success 'rebase describes fake ancestor base' '
+	test_create_repo rebase &&
+	(
+		cd rebase &&
+		test_commit base file &&
+		test_commit master file &&
+		git checkout -b side HEAD^ &&
+		test_commit side file &&
+		test_must_fail git -c merge.conflictstyle=diff3 rebase master &&
+		grep "||||||| constructed merge base" file
+	)
+'
+
+test_done
diff --git a/t/t6112-rev-list-filters-objects.sh b/t/t6112-rev-list-filters-objects.sh
index acd7f5a..de0e5a5 100755
--- a/t/t6112-rev-list-filters-objects.sh
+++ b/t/t6112-rev-list-filters-objects.sh
@@ -278,7 +278,19 @@
 	test_line_count = 2 actual &&
 
 	# Make sure no other trees were considered besides the root.
-	! grep "Skipping contents of tree [^.]" filter_trace
+	! grep "Skipping contents of tree [^.]" filter_trace &&
+
+	# Try this again with "combine:". If both sub-filters are skipping
+	# trees, the composite filter should also skip trees. This is not
+	# important unless the user does combine:tree:X+tree:Y or another filter
+	# besides "tree:" is implemented in the future which can skip trees.
+	GIT_TRACE=1 git -C r3 rev-list \
+		--objects --filter=combine:tree:1+tree:3 HEAD 2>filter_trace &&
+
+	# Only skip the dir1/ tree, which is shared between the two commits.
+	grep "Skipping contents of tree " filter_trace >actual &&
+	test_write_lines "Skipping contents of tree dir1/..." >expected &&
+	test_cmp expected actual
 '
 
 # Test tree:# filters.
@@ -330,6 +342,148 @@
 	test_line_count = 10 actual
 '
 
+test_expect_success 'combine:... for a simple combination' '
+	git -C r3 rev-list --objects --filter=combine:tree:2+blob:none HEAD \
+		>actual &&
+
+	expect_has HEAD "" &&
+	expect_has HEAD~1 "" &&
+	expect_has HEAD dir1 &&
+
+	# There are also 2 commit objects
+	test_line_count = 5 actual &&
+
+	cp actual expected &&
+
+	# Try again using repeated --filter - this is equivalent to a manual
+	# combine with "combine:...+..."
+	git -C r3 rev-list --objects --filter=combine:tree:2 \
+		--filter=blob:none HEAD >actual &&
+
+	test_cmp expected actual
+'
+
+test_expect_success 'combine:... with URL encoding' '
+	git -C r3 rev-list --objects \
+		--filter=combine:tree%3a2+blob:%6Eon%65 HEAD >actual &&
+
+	expect_has HEAD "" &&
+	expect_has HEAD~1 "" &&
+	expect_has HEAD dir1 &&
+
+	# There are also 2 commit objects
+	test_line_count = 5 actual
+'
+
+expect_invalid_filter_spec () {
+	spec="$1" &&
+	err="$2" &&
+
+	test_must_fail git -C r3 rev-list --objects --filter="$spec" HEAD \
+		>actual 2>actual_stderr &&
+	test_must_be_empty actual &&
+	test_i18ngrep "$err" actual_stderr
+}
+
+test_expect_success 'combine:... while URL-encoding things that should not be' '
+	expect_invalid_filter_spec combine%3Atree:2+blob:none \
+		"invalid filter-spec"
+'
+
+test_expect_success 'combine: with nothing after the :' '
+	expect_invalid_filter_spec combine: "expected something after combine:"
+'
+
+test_expect_success 'parse error in first sub-filter in combine:' '
+	expect_invalid_filter_spec combine:tree:asdf+blob:none \
+		"expected .tree:<depth>."
+'
+
+test_expect_success 'combine:... with non-encoded reserved chars' '
+	expect_invalid_filter_spec combine:tree:2+sparse:@xyz \
+		"must escape char in sub-filter-spec: .@." &&
+	expect_invalid_filter_spec combine:tree:2+sparse:\` \
+		"must escape char in sub-filter-spec: .\`." &&
+	expect_invalid_filter_spec combine:tree:2+sparse:~abc \
+		"must escape char in sub-filter-spec: .\~."
+'
+
+test_expect_success 'validate err msg for "combine:<valid-filter>+"' '
+	expect_invalid_filter_spec combine:tree:2+ "expected .tree:<depth>."
+'
+
+test_expect_success 'combine:... with edge-case hex digits: Ff Aa 0 9' '
+	git -C r3 rev-list --objects --filter="combine:tree:2+bl%6Fb:n%6fne" \
+		HEAD >actual &&
+	test_line_count = 5 actual &&
+	git -C r3 rev-list --objects --filter="combine:tree%3A2+blob%3anone" \
+		HEAD >actual &&
+	test_line_count = 5 actual &&
+	git -C r3 rev-list --objects --filter="combine:tree:%30" HEAD >actual &&
+	test_line_count = 2 actual &&
+	git -C r3 rev-list --objects --filter="combine:tree:%39+blob:none" \
+		HEAD >actual &&
+	test_line_count = 5 actual
+'
+
+test_expect_success 'add sparse pattern blobs whose paths have reserved chars' '
+	cp r3/pattern r3/pattern1+renamed% &&
+	cp r3/pattern "r3/p;at%ter+n" &&
+	cp r3/pattern r3/^~pattern &&
+	git -C r3 add pattern1+renamed% "p;at%ter+n" ^~pattern &&
+	git -C r3 commit -m "add sparse pattern files with reserved chars"
+'
+
+test_expect_success 'combine:... with more than two sub-filters' '
+	git -C r3 rev-list --objects \
+		--filter=combine:tree:3+blob:limit=40+sparse:oid=master:pattern \
+		HEAD >actual &&
+
+	expect_has HEAD "" &&
+	expect_has HEAD~1 "" &&
+	expect_has HEAD~2 "" &&
+	expect_has HEAD dir1 &&
+	expect_has HEAD dir1/sparse1 &&
+	expect_has HEAD dir1/sparse2 &&
+
+	# Should also have 3 commits
+	test_line_count = 9 actual &&
+
+	# Try again, this time making sure the last sub-filter is only
+	# URL-decoded once.
+	cp actual expect &&
+
+	git -C r3 rev-list --objects \
+		--filter=combine:tree:3+blob:limit=40+sparse:oid=master:pattern1%2brenamed%25 \
+		HEAD >actual &&
+	test_cmp expect actual &&
+
+	# Use the same composite filter again, but with a pattern file name that
+	# requires encoding multiple characters, and use implicit filter
+	# combining.
+	test_when_finished "rm -f trace1" &&
+	GIT_TRACE=$(pwd)/trace1 git -C r3 rev-list --objects \
+		--filter=tree:3 --filter=blob:limit=40 \
+		--filter=sparse:oid="master:p;at%ter+n" \
+		HEAD >actual &&
+
+	test_cmp expect actual &&
+	grep "Add to combine filter-spec: sparse:oid=master:p%3bat%25ter%2bn" \
+		trace1 &&
+
+	# Repeat the above test, but this time, the characters to encode are in
+	# the LHS of the combined filter.
+	test_when_finished "rm -f trace2" &&
+	GIT_TRACE=$(pwd)/trace2 git -C r3 rev-list --objects \
+		--filter=sparse:oid=master:^~pattern \
+		--filter=tree:3 --filter=blob:limit=40 \
+		HEAD >actual &&
+
+	test_cmp expect actual &&
+	grep "Add to combine filter-spec: sparse:oid=master:%5e%7epattern" \
+		trace2
+'
+
 # Test provisional omit collection logic with a repo that has objects appearing
 # at multiple depths - first deeper than the filter's threshold, then shallow.
 
@@ -373,6 +527,37 @@
 	test_cmp expect actual
 '
 
+test_expect_success 'setup r5' '
+	git init r5 &&
+	mkdir -p r5/subdir &&
+
+	echo 1     >r5/short-root          &&
+	echo 12345 >r5/long-root           &&
+	echo a     >r5/subdir/short-subdir &&
+	echo abcde >r5/subdir/long-subdir  &&
+
+	git -C r5 add short-root long-root subdir &&
+	git -C r5 commit -m "commit msg"
+'
+
+test_expect_success 'verify collecting omits in combined: filter' '
+	# Note that this test guards against the naive implementation of simply
+	# giving both filters the same "omits" set and expecting it to
+	# automatically merge them.
+	git -C r5 rev-list --objects --quiet --filter-print-omitted \
+		--filter=combine:tree:2+blob:limit=3 HEAD >actual &&
+
+	# Expect 0 trees/commits, 3 blobs omitted (all blobs except short-root)
+	omitted_1=$(echo 12345 | git hash-object --stdin) &&
+	omitted_2=$(echo a     | git hash-object --stdin) &&
+	omitted_3=$(echo abcde | git hash-object --stdin) &&
+
+	grep ~$omitted_1 actual &&
+	grep ~$omitted_2 actual &&
+	grep ~$omitted_3 actual &&
+	test_line_count = 3 actual
+'
+
 # Test tree:<depth> where a tree is iterated to twice - once where a subentry is
 # too deep to be included, and again where the blob inside it is shallow enough
 # to be included. This makes sure we don't use LOFR_MARK_SEEN incorrectly (we
@@ -441,11 +626,4 @@
 	grep "blob:limit=1024" trace
 '
 
-test_expect_success 'expand tree depth limit in protocol' '
-	GIT_TRACE_PACKET="$(pwd)/tree_trace" git -c protocol.version=2 clone \
-		--filter=tree:0k "file://$(pwd)/r2" tree &&
-	! grep "tree:0k" tree_trace &&
-	grep "tree:0" tree_trace
-'
-
 test_done
diff --git a/t/t6120-describe.sh b/t/t6120-describe.sh
index 2b883d8..45047d0 100755
--- a/t/t6120-describe.sh
+++ b/t/t6120-describe.sh
@@ -424,4 +424,19 @@
 	test_must_fail git describe $ZERO_OID
 '
 
+test_expect_success 'name-rev a rev shortly after epoch' '
+	test_when_finished "git checkout master" &&
+
+	git checkout --orphan no-timestamp-underflow &&
+	# Any date closer to epoch than the CUTOFF_DATE_SLOP constant
+	# in builtin/name-rev.c.
+	GIT_COMMITTER_DATE="@1234 +0000" \
+	git commit -m "committer date shortly after epoch" &&
+	old_commit_oid=$(git rev-parse HEAD) &&
+
+	echo "$old_commit_oid no-timestamp-underflow" >expect &&
+	git name-rev $old_commit_oid >actual &&
+	test_cmp expect actual
+'
+
 test_done
diff --git a/t/t6300-for-each-ref.sh b/t/t6300-for-each-ref.sh
index ab69aa1..9c910ce 100755
--- a/t/t6300-for-each-ref.sh
+++ b/t/t6300-for-each-ref.sh
@@ -526,6 +526,25 @@
 	test_cmp expected actual
 '
 
+test_expect_success 'create tag without tagger' '
+	git tag -a -m "Broken tag" taggerless &&
+	git tag -f taggerless $(git cat-file tag taggerless |
+		sed -e "/^tagger /d" |
+		git hash-object --stdin -w -t tag)
+'
+
+test_atom refs/tags/taggerless type 'commit'
+test_atom refs/tags/taggerless tag 'taggerless'
+test_atom refs/tags/taggerless tagger ''
+test_atom refs/tags/taggerless taggername ''
+test_atom refs/tags/taggerless taggeremail ''
+test_atom refs/tags/taggerless taggerdate ''
+test_atom refs/tags/taggerless committer ''
+test_atom refs/tags/taggerless committername ''
+test_atom refs/tags/taggerless committeremail ''
+test_atom refs/tags/taggerless committerdate ''
+test_atom refs/tags/taggerless subject 'Broken tag'
+
 test_expect_success 'an unusual tag with an incomplete line' '
 
 	git tag -m "bogo" bogo &&
diff --git a/t/t6501-freshen-objects.sh b/t/t6501-freshen-objects.sh
index 033871e..f30b484 100755
--- a/t/t6501-freshen-objects.sh
+++ b/t/t6501-freshen-objects.sh
@@ -137,7 +137,7 @@
 	some message
 	EOF
 	commit=$(git hash-object -t commit -w broken-commit) &&
-	git gc 2>stderr &&
+	git gc -q 2>stderr &&
 	verbose git cat-file -e $commit &&
 	test_must_be_empty stderr
 '
@@ -147,7 +147,7 @@
 	100644 blob 0000000000000000000000000000000000000003	foo
 	EOF
 	tree=$(git mktree --missing <broken-tree) &&
-	git gc 2>stderr &&
+	git gc -q 2>stderr &&
 	git cat-file -e $tree &&
 	test_must_be_empty stderr
 '
@@ -162,7 +162,7 @@
 	this is a broken tag
 	EOF
 	tag=$(git hash-object -t tag -w broken-tag) &&
-	git gc 2>stderr &&
+	git gc -q 2>stderr &&
 	git cat-file -e $tag &&
 	test_must_be_empty stderr
 '
diff --git a/t/t7009-filter-branch-null-sha1.sh b/t/t7008-filter-branch-null-sha1.sh
similarity index 100%
rename from t/t7009-filter-branch-null-sha1.sh
rename to t/t7008-filter-branch-null-sha1.sh
diff --git a/t/t7008-grep-binary.sh b/t/t7008-grep-binary.sh
deleted file mode 100755
index 2d87c49..0000000
--- a/t/t7008-grep-binary.sh
+++ /dev/null
@@ -1,249 +0,0 @@
-#!/bin/sh
-
-test_description='git grep in binary files'
-
-. ./test-lib.sh
-
-nul_match () {
-	matches=$1
-	flags=$2
-	pattern=$3
-	pattern_human=$(echo "$pattern" | sed 's/Q/<NUL>/g')
-
-	if test "$matches" = 1
-	then
-		test_expect_success "git grep -f f $flags '$pattern_human' a" "
-			printf '$pattern' | q_to_nul >f &&
-			git grep -f f $flags a
-		"
-	elif test "$matches" = 0
-	then
-		test_expect_success "git grep -f f $flags '$pattern_human' a" "
-			printf '$pattern' | q_to_nul >f &&
-			test_must_fail git grep -f f $flags a
-		"
-	elif test "$matches" = T1
-	then
-		test_expect_failure "git grep -f f $flags '$pattern_human' a" "
-			printf '$pattern' | q_to_nul >f &&
-			git grep -f f $flags a
-		"
-	elif test "$matches" = T0
-	then
-		test_expect_failure "git grep -f f $flags '$pattern_human' a" "
-			printf '$pattern' | q_to_nul >f &&
-			test_must_fail git grep -f f $flags a
-		"
-	else
-		test_expect_success "PANIC: Test framework error. Unknown matches value $matches" 'false'
-	fi
-}
-
-test_expect_success 'setup' "
-	echo 'binaryQfileQm[*]cQ*æQð' | q_to_nul >a &&
-	git add a &&
-	git commit -m.
-"
-
-test_expect_success 'git grep ina a' '
-	echo Binary file a matches >expect &&
-	git grep ina a >actual &&
-	test_cmp expect actual
-'
-
-test_expect_success 'git grep -ah ina a' '
-	git grep -ah ina a >actual &&
-	test_cmp a actual
-'
-
-test_expect_success 'git grep -I ina a' '
-	test_must_fail git grep -I ina a >actual &&
-	test_must_be_empty actual
-'
-
-test_expect_success 'git grep -c ina a' '
-	echo a:1 >expect &&
-	git grep -c ina a >actual &&
-	test_cmp expect actual
-'
-
-test_expect_success 'git grep -l ina a' '
-	echo a >expect &&
-	git grep -l ina a >actual &&
-	test_cmp expect actual
-'
-
-test_expect_success 'git grep -L bar a' '
-	echo a >expect &&
-	git grep -L bar a >actual &&
-	test_cmp expect actual
-'
-
-test_expect_success 'git grep -q ina a' '
-	git grep -q ina a >actual &&
-	test_must_be_empty actual
-'
-
-test_expect_success 'git grep -F ile a' '
-	git grep -F ile a
-'
-
-test_expect_success 'git grep -Fi iLE a' '
-	git grep -Fi iLE a
-'
-
-# This test actually passes on platforms where regexec() supports the
-# flag REG_STARTEND.
-test_expect_success 'git grep ile a' '
-	git grep ile a
-'
-
-test_expect_failure 'git grep .fi a' '
-	git grep .fi a
-'
-
-nul_match 1 '-F' 'yQf'
-nul_match 0 '-F' 'yQx'
-nul_match 1 '-Fi' 'YQf'
-nul_match 0 '-Fi' 'YQx'
-nul_match 1 '' 'yQf'
-nul_match 0 '' 'yQx'
-nul_match 1 '' 'æQð'
-nul_match 1 '-F' 'eQm[*]c'
-nul_match 1 '-Fi' 'EQM[*]C'
-
-# Regex patterns that would match but shouldn't with -F
-nul_match 0 '-F' 'yQ[f]'
-nul_match 0 '-F' '[y]Qf'
-nul_match 0 '-Fi' 'YQ[F]'
-nul_match 0 '-Fi' '[Y]QF'
-nul_match 0 '-F' 'æQ[ð]'
-nul_match 0 '-F' '[æ]Qð'
-nul_match 0 '-Fi' 'ÆQ[Ð]'
-nul_match 0 '-Fi' '[Æ]QÐ'
-
-# kwset is disabled on -i & non-ASCII. No way to match non-ASCII \0
-# patterns case-insensitively.
-nul_match T1 '-i' 'ÆQÐ'
-
-# \0 implicitly disables regexes. This is an undocumented internal
-# limitation.
-nul_match T1 '' 'yQ[f]'
-nul_match T1 '' '[y]Qf'
-nul_match T1 '-i' 'YQ[F]'
-nul_match T1 '-i' '[Y]Qf'
-nul_match T1 '' 'æQ[ð]'
-nul_match T1 '' '[æ]Qð'
-nul_match T1 '-i' 'ÆQ[Ð]'
-
-# ... because of \0 implicitly disabling regexes regexes that
-# should/shouldn't match don't do the right thing.
-nul_match T1 '' 'eQm.*cQ'
-nul_match T1 '-i' 'EQM.*cQ'
-nul_match T0 '' 'eQm[*]c'
-nul_match T0 '-i' 'EQM[*]C'
-
-# Due to the REG_STARTEND extension when kwset() is disabled on -i &
-# non-ASCII the string will be matched in its entirety, but the
-# pattern will be cut off at the first \0.
-nul_match 0 '-i' 'NOMATCHQð'
-nul_match T0 '-i' '[Æ]QNOMATCH'
-nul_match T0 '-i' '[æ]QNOMATCH'
-# Matches, but for the wrong reasons, just stops at [æ]
-nul_match 1 '-i' '[Æ]Qð'
-nul_match 1 '-i' '[æ]Qð'
-
-# Ensure that the matcher doesn't regress to something that stops at
-# \0
-nul_match 0 '-F' 'yQ[f]'
-nul_match 0 '-Fi' 'YQ[F]'
-nul_match 0 '' 'yQNOMATCH'
-nul_match 0 '' 'QNOMATCH'
-nul_match 0 '-i' 'YQNOMATCH'
-nul_match 0 '-i' 'QNOMATCH'
-nul_match 0 '-F' 'æQ[ð]'
-nul_match 0 '-Fi' 'ÆQ[Ð]'
-nul_match 0 '' 'yQNÓMATCH'
-nul_match 0 '' 'QNÓMATCH'
-nul_match 0 '-i' 'YQNÓMATCH'
-nul_match 0 '-i' 'QNÓMATCH'
-
-test_expect_success 'grep respects binary diff attribute' '
-	echo text >t &&
-	git add t &&
-	echo t:text >expect &&
-	git grep text t >actual &&
-	test_cmp expect actual &&
-	echo "t -diff" >.gitattributes &&
-	echo "Binary file t matches" >expect &&
-	git grep text t >actual &&
-	test_cmp expect actual
-'
-
-test_expect_success 'grep --cached respects binary diff attribute' '
-	git grep --cached text t >actual &&
-	test_cmp expect actual
-'
-
-test_expect_success 'grep --cached respects binary diff attribute (2)' '
-	git add .gitattributes &&
-	rm .gitattributes &&
-	git grep --cached text t >actual &&
-	test_when_finished "git rm --cached .gitattributes" &&
-	test_when_finished "git checkout .gitattributes" &&
-	test_cmp expect actual
-'
-
-test_expect_success 'grep revision respects binary diff attribute' '
-	git commit -m new &&
-	echo "Binary file HEAD:t matches" >expect &&
-	git grep text HEAD -- t >actual &&
-	test_when_finished "git reset HEAD^" &&
-	test_cmp expect actual
-'
-
-test_expect_success 'grep respects not-binary diff attribute' '
-	echo binQary | q_to_nul >b &&
-	git add b &&
-	echo "Binary file b matches" >expect &&
-	git grep bin b >actual &&
-	test_cmp expect actual &&
-	echo "b diff" >.gitattributes &&
-	echo "b:binQary" >expect &&
-	git grep bin b >actual.raw &&
-	nul_to_q <actual.raw >actual &&
-	test_cmp expect actual
-'
-
-cat >nul_to_q_textconv <<'EOF'
-#!/bin/sh
-"$PERL_PATH" -pe 'y/\000/Q/' < "$1"
-EOF
-chmod +x nul_to_q_textconv
-
-test_expect_success 'setup textconv filters' '
-	echo a diff=foo >.gitattributes &&
-	git config diff.foo.textconv "\"$(pwd)\""/nul_to_q_textconv
-'
-
-test_expect_success 'grep does not honor textconv' '
-	test_must_fail git grep Qfile
-'
-
-test_expect_success 'grep --textconv honors textconv' '
-	echo "a:binaryQfileQm[*]cQ*æQð" >expect &&
-	git grep --textconv Qfile >actual &&
-	test_cmp expect actual
-'
-
-test_expect_success 'grep --no-textconv does not honor textconv' '
-	test_must_fail git grep --no-textconv Qfile
-'
-
-test_expect_success 'grep --textconv blob honors textconv' '
-	echo "HEAD:a:binaryQfileQm[*]cQ*æQð" >expect &&
-	git grep --textconv Qfile HEAD:a >actual &&
-	test_cmp expect actual
-'
-
-test_done
diff --git a/t/t7300-clean.sh b/t/t7300-clean.sh
index a2c45d1..6e6d24c 100755
--- a/t/t7300-clean.sh
+++ b/t/t7300-clean.sh
@@ -117,6 +117,7 @@
 	would_clean=$(
 		cd docs &&
 		git clean -n ../src |
+		grep part3 |
 		sed -n -e "s|^Would remove ||p"
 	) &&
 	verbose test "$would_clean" = ../src/part3.c
@@ -129,6 +130,7 @@
 	would_clean=$(
 		cd docs &&
 		git clean -n "$(pwd)/../src" |
+		grep part3 |
 		sed -n -e "s|^Would remove ||p"
 	) &&
 	verbose test "$would_clean" = ../src/part3.c
@@ -547,7 +549,7 @@
 	test_path_is_missing strange_bare
 '
 
-test_expect_success 'giving path in nested git work tree will remove it' '
+test_expect_success 'giving path in nested git work tree will NOT remove it' '
 	rm -fr repo &&
 	mkdir repo &&
 	(
@@ -559,7 +561,7 @@
 	git clean -f -d repo/bar/baz &&
 	test_path_is_file repo/.git/HEAD &&
 	test_path_is_dir repo/bar/ &&
-	test_path_is_missing repo/bar/baz
+	test_path_is_file repo/bar/baz/hello.world
 '
 
 test_expect_success 'giving path to nested .git will not remove it' '
@@ -577,7 +579,7 @@
 	test_path_is_dir untracked/
 '
 
-test_expect_success 'giving path to nested .git/ will remove contents' '
+test_expect_success 'giving path to nested .git/ will NOT remove contents' '
 	rm -fr repo untracked &&
 	mkdir repo untracked &&
 	(
@@ -587,7 +589,7 @@
 	) &&
 	git clean -f -d repo/.git/ &&
 	test_path_is_dir repo/.git &&
-	test_dir_is_empty repo/.git &&
+	test_path_is_file repo/.git/HEAD &&
 	test_path_is_dir untracked/
 '
 
@@ -669,6 +671,60 @@
 	test_path_is_missing foo/b/bb
 '
 
+test_expect_success 'git clean -d skips nested repo containing ignored files' '
+	test_when_finished "rm -rf nested-repo-with-ignored-file" &&
+
+	git init nested-repo-with-ignored-file &&
+	(
+		cd nested-repo-with-ignored-file &&
+		>file &&
+		git add file &&
+		git commit -m Initial &&
+
+		# This file is ignored by a .gitignore rule in the outer repo
+		# added in the previous test.
+		>ignoreme
+	) &&
+
+	git clean -fd &&
+
+	test_path_is_file nested-repo-with-ignored-file/.git/index &&
+	test_path_is_file nested-repo-with-ignored-file/ignoreme &&
+	test_path_is_file nested-repo-with-ignored-file/file
+'
+
+test_expect_success 'git clean handles being told what to clean' '
+	mkdir -p d1 d2 &&
+	touch d1/ut d2/ut &&
+	git clean -f */ut &&
+	test_path_is_missing d1/ut &&
+	test_path_is_missing d2/ut
+'
+
+test_expect_success 'git clean handles being told what to clean, with -d' '
+	mkdir -p d1 d2 &&
+	touch d1/ut d2/ut &&
+	git clean -ffd */ut &&
+	test_path_is_missing d1/ut &&
+	test_path_is_missing d2/ut
+'
+
+test_expect_success 'git clean works if a glob is passed without -d' '
+	mkdir -p d1 d2 &&
+	touch d1/ut d2/ut &&
+	git clean -f "*ut" &&
+	test_path_is_missing d1/ut &&
+	test_path_is_missing d2/ut
+'
+
+test_expect_success 'git clean works if a glob is passed with -d' '
+	mkdir -p d1 d2 &&
+	touch d1/ut d2/ut &&
+	git clean -ffd "*ut" &&
+	test_path_is_missing d1/ut &&
+	test_path_is_missing d2/ut
+'
+
 test_expect_success MINGW 'handle clean & core.longpaths = false nicely' '
 	test_config core.longpaths false &&
 	a50=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
index a208cb2..691b5fc 100755
--- a/t/t7400-submodule-basic.sh
+++ b/t/t7400-submodule-basic.sh
@@ -527,7 +527,6 @@
 	test_must_fail git config submodule.example.url &&
 
 	git submodule update init 2> update.out &&
-	cat update.out &&
 	test_i18ngrep "not initialized" update.out &&
 	test_must_fail git rev-parse --resolve-git-dir init/.git &&
 
@@ -545,7 +544,6 @@
 	(
 		cd sub &&
 		git submodule update ../init 2>update.out &&
-		cat update.out &&
 		test_i18ngrep "not initialized" update.out &&
 		test_must_fail git rev-parse --resolve-git-dir ../init/.git &&
 
diff --git a/t/t7406-submodule-update.sh b/t/t7406-submodule-update.sh
index bce9138..7478f7a 100755
--- a/t/t7406-submodule-update.sh
+++ b/t/t7406-submodule-update.sh
@@ -158,7 +158,6 @@
 	test_i18ncmp expect2 actual2
 '
 
-apos="'";
 test_expect_success 'submodule update does not fetch already present commits' '
 	(cd submodule &&
 	  echo line3 >> file &&
@@ -168,7 +167,7 @@
 	) &&
 	(cd super/submodule &&
 	  head=$(git rev-parse --verify HEAD) &&
-	  echo "Submodule path ${apos}submodule$apos: checked out $apos$head$apos" > ../../expected &&
+	  echo "Submodule path ${SQ}submodule$SQ: checked out $SQ$head$SQ" > ../../expected &&
 	  git reset --hard HEAD~1
 	) &&
 	(cd super &&
diff --git a/t/t7419-submodule-set-branch.sh b/t/t7419-submodule-set-branch.sh
index c4b370e..fd25f78 100755
--- a/t/t7419-submodule-set-branch.sh
+++ b/t/t7419-submodule-set-branch.sh
@@ -34,7 +34,7 @@
 
 test_expect_success 'ensure submodule branch is unset' '
 	(cd super &&
-		test_must_fail grep branch .gitmodules
+		! grep branch .gitmodules
 	)
 '
 
@@ -54,7 +54,7 @@
 test_expect_success 'test submodule set-branch --default' '
 	(cd super &&
 		git submodule set-branch --default submodule &&
-		test_must_fail grep branch .gitmodules &&
+		! grep branch .gitmodules &&
 		git submodule update --remote &&
 		cat <<-\EOF >expect &&
 		a
@@ -80,7 +80,7 @@
 test_expect_success 'test submodule set-branch -d' '
 	(cd super &&
 		git submodule set-branch -d submodule &&
-		test_must_fail grep branch .gitmodules &&
+		! grep branch .gitmodules &&
 		git submodule update --remote &&
 		cat <<-\EOF >expect &&
 		a
diff --git a/t/t7503-pre-commit-and-pre-merge-commit-hooks.sh b/t/t7503-pre-commit-and-pre-merge-commit-hooks.sh
new file mode 100755
index 0000000..b348545
--- /dev/null
+++ b/t/t7503-pre-commit-and-pre-merge-commit-hooks.sh
@@ -0,0 +1,281 @@
+#!/bin/sh
+
+test_description='pre-commit and pre-merge-commit hooks'
+
+. ./test-lib.sh
+
+HOOKDIR="$(git rev-parse --git-dir)/hooks"
+PRECOMMIT="$HOOKDIR/pre-commit"
+PREMERGE="$HOOKDIR/pre-merge-commit"
+
+# Prepare sample scripts that write their $0 to actual_hooks
+test_expect_success 'sample script setup' '
+	mkdir -p "$HOOKDIR" &&
+	write_script "$HOOKDIR/success.sample" <<-\EOF &&
+	echo $0 >>actual_hooks
+	exit 0
+	EOF
+	write_script "$HOOKDIR/fail.sample" <<-\EOF &&
+	echo $0 >>actual_hooks
+	exit 1
+	EOF
+	write_script "$HOOKDIR/non-exec.sample" <<-\EOF &&
+	echo $0 >>actual_hooks
+	exit 1
+	EOF
+	chmod -x "$HOOKDIR/non-exec.sample" &&
+	write_script "$HOOKDIR/require-prefix.sample" <<-\EOF &&
+	echo $0 >>actual_hooks
+	test $GIT_PREFIX = "success/"
+	EOF
+	write_script "$HOOKDIR/check-author.sample" <<-\EOF
+	echo $0 >>actual_hooks
+	test "$GIT_AUTHOR_NAME" = "New Author" &&
+	test "$GIT_AUTHOR_EMAIL" = "newauthor@example.com"
+	EOF
+'
+
+test_expect_success 'root commit' '
+	echo "root" >file &&
+	git add file &&
+	git commit -m "zeroth" &&
+	git checkout -b side &&
+	echo "foo" >foo &&
+	git add foo &&
+	git commit -m "make it non-ff" &&
+	git branch side-orig side &&
+	git checkout master
+'
+
+test_expect_success 'setup conflicting branches' '
+	test_when_finished "git checkout master" &&
+	git checkout -b conflicting-a master &&
+	echo a >conflicting &&
+	git add conflicting &&
+	git commit -m conflicting-a &&
+	git checkout -b conflicting-b master &&
+	echo b >conflicting &&
+	git add conflicting &&
+	git commit -m conflicting-b
+'
+
+test_expect_success 'with no hook' '
+	test_when_finished "rm -f actual_hooks" &&
+	echo "foo" >file &&
+	git add file &&
+	git commit -m "first" &&
+	test_path_is_missing actual_hooks
+'
+
+test_expect_success 'with no hook (merge)' '
+	test_when_finished "rm -f actual_hooks" &&
+	git branch -f side side-orig &&
+	git checkout side &&
+	git merge -m "merge master" master &&
+	git checkout master &&
+	test_path_is_missing actual_hooks
+'
+
+test_expect_success '--no-verify with no hook' '
+	test_when_finished "rm -f actual_hooks" &&
+	echo "bar" >file &&
+	git add file &&
+	git commit --no-verify -m "bar" &&
+	test_path_is_missing actual_hooks
+'
+
+test_expect_success '--no-verify with no hook (merge)' '
+	test_when_finished "rm -f actual_hooks" &&
+	git branch -f side side-orig &&
+	git checkout side &&
+	git merge --no-verify -m "merge master" master &&
+	git checkout master &&
+	test_path_is_missing actual_hooks
+'
+
+test_expect_success 'with succeeding hook' '
+	test_when_finished "rm -f \"$PRECOMMIT\" expected_hooks actual_hooks" &&
+	cp "$HOOKDIR/success.sample" "$PRECOMMIT" &&
+	echo "$PRECOMMIT" >expected_hooks &&
+	echo "more" >>file &&
+	git add file &&
+	git commit -m "more" &&
+	test_cmp expected_hooks actual_hooks
+'
+
+test_expect_success 'with succeeding hook (merge)' '
+	test_when_finished "rm -f \"$PREMERGE\" expected_hooks actual_hooks" &&
+	cp "$HOOKDIR/success.sample" "$PREMERGE" &&
+	echo "$PREMERGE" >expected_hooks &&
+	git checkout side &&
+	git merge -m "merge master" master &&
+	git checkout master &&
+	test_cmp expected_hooks actual_hooks
+'
+
+test_expect_success 'automatic merge fails; both hooks are available' '
+	test_when_finished "rm -f \"$PREMERGE\" \"$PRECOMMIT\"" &&
+	test_when_finished "rm -f expected_hooks actual_hooks" &&
+	test_when_finished "git checkout master" &&
+	cp "$HOOKDIR/success.sample" "$PREMERGE" &&
+	cp "$HOOKDIR/success.sample" "$PRECOMMIT" &&
+
+	git checkout conflicting-a &&
+	test_must_fail git merge -m "merge conflicting-b" conflicting-b &&
+	test_path_is_missing actual_hooks &&
+
+	echo "$PRECOMMIT" >expected_hooks &&
+	echo a+b >conflicting &&
+	git add conflicting &&
+	git commit -m "resolve conflict" &&
+	test_cmp expected_hooks actual_hooks
+'
+
+test_expect_success '--no-verify with succeeding hook' '
+	test_when_finished "rm -f \"$PRECOMMIT\" actual_hooks" &&
+	cp "$HOOKDIR/success.sample" "$PRECOMMIT" &&
+	echo "even more" >>file &&
+	git add file &&
+	git commit --no-verify -m "even more" &&
+	test_path_is_missing actual_hooks
+'
+
+test_expect_success '--no-verify with succeeding hook (merge)' '
+	test_when_finished "rm -f \"$PREMERGE\" actual_hooks" &&
+	cp "$HOOKDIR/success.sample" "$PREMERGE" &&
+	git branch -f side side-orig &&
+	git checkout side &&
+	git merge --no-verify -m "merge master" master &&
+	git checkout master &&
+	test_path_is_missing actual_hooks
+'
+
+test_expect_success 'with failing hook' '
+	test_when_finished "rm -f \"$PRECOMMIT\" expected_hooks actual_hooks" &&
+	cp "$HOOKDIR/fail.sample" "$PRECOMMIT" &&
+	echo "$PRECOMMIT" >expected_hooks &&
+	echo "another" >>file &&
+	git add file &&
+	test_must_fail git commit -m "another" &&
+	test_cmp expected_hooks actual_hooks
+'
+
+test_expect_success '--no-verify with failing hook' '
+	test_when_finished "rm -f \"$PRECOMMIT\" actual_hooks" &&
+	cp "$HOOKDIR/fail.sample" "$PRECOMMIT" &&
+	echo "stuff" >>file &&
+	git add file &&
+	git commit --no-verify -m "stuff" &&
+	test_path_is_missing actual_hooks
+'
+
+test_expect_success 'with failing hook (merge)' '
+	test_when_finished "rm -f \"$PREMERGE\" expected_hooks actual_hooks" &&
+	cp "$HOOKDIR/fail.sample" "$PREMERGE" &&
+	echo "$PREMERGE" >expected_hooks &&
+	git checkout side &&
+	test_must_fail git merge -m "merge master" master &&
+	git checkout master &&
+	test_cmp expected_hooks actual_hooks
+'
+
+test_expect_success '--no-verify with failing hook (merge)' '
+	test_when_finished "rm -f \"$PREMERGE\" actual_hooks" &&
+	cp "$HOOKDIR/fail.sample" "$PREMERGE" &&
+	git branch -f side side-orig &&
+	git checkout side &&
+	git merge --no-verify -m "merge master" master &&
+	git checkout master &&
+	test_path_is_missing actual_hooks
+'
+
+test_expect_success POSIXPERM 'with non-executable hook' '
+	test_when_finished "rm -f \"$PRECOMMIT\" actual_hooks" &&
+	cp "$HOOKDIR/non-exec.sample" "$PRECOMMIT" &&
+	echo "content" >>file &&
+	git add file &&
+	git commit -m "content" &&
+	test_path_is_missing actual_hooks
+'
+
+test_expect_success POSIXPERM '--no-verify with non-executable hook' '
+	test_when_finished "rm -f \"$PRECOMMIT\" actual_hooks" &&
+	cp "$HOOKDIR/non-exec.sample" "$PRECOMMIT" &&
+	echo "more content" >>file &&
+	git add file &&
+	git commit --no-verify -m "more content" &&
+	test_path_is_missing actual_hooks
+'
+
+test_expect_success POSIXPERM 'with non-executable hook (merge)' '
+	test_when_finished "rm -f \"$PREMERGE\" actual_hooks" &&
+	cp "$HOOKDIR/non-exec.sample" "$PREMERGE" &&
+	git branch -f side side-orig &&
+	git checkout side &&
+	git merge -m "merge master" master &&
+	git checkout master &&
+	test_path_is_missing actual_hooks
+'
+
+test_expect_success POSIXPERM '--no-verify with non-executable hook (merge)' '
+	test_when_finished "rm -f \"$PREMERGE\" actual_hooks" &&
+	cp "$HOOKDIR/non-exec.sample" "$PREMERGE" &&
+	git branch -f side side-orig &&
+	git checkout side &&
+	git merge --no-verify -m "merge master" master &&
+	git checkout master &&
+	test_path_is_missing actual_hooks
+'
+
+test_expect_success 'with hook requiring GIT_PREFIX' '
+	test_when_finished "rm -rf \"$PRECOMMIT\" expected_hooks actual_hooks success" &&
+	cp "$HOOKDIR/require-prefix.sample" "$PRECOMMIT" &&
+	echo "$PRECOMMIT" >expected_hooks &&
+	echo "more content" >>file &&
+	git add file &&
+	mkdir success &&
+	(
+		cd success &&
+		git commit -m "hook requires GIT_PREFIX = success/"
+	) &&
+	test_cmp expected_hooks actual_hooks
+'
+
+test_expect_success 'with failing hook requiring GIT_PREFIX' '
+	test_when_finished "rm -rf \"$PRECOMMIT\" expected_hooks actual_hooks fail" &&
+	cp "$HOOKDIR/require-prefix.sample" "$PRECOMMIT" &&
+	echo "$PRECOMMIT" >expected_hooks &&
+	echo "more content" >>file &&
+	git add file &&
+	mkdir fail &&
+	(
+		cd fail &&
+		test_must_fail git commit -m "hook must fail"
+	) &&
+	git checkout -- file &&
+	test_cmp expected_hooks actual_hooks
+'
+
+test_expect_success 'check the author in hook' '
+	test_when_finished "rm -f \"$PRECOMMIT\" expected_hooks actual_hooks" &&
+	cp "$HOOKDIR/check-author.sample" "$PRECOMMIT" &&
+	cat >expected_hooks <<-EOF &&
+	$PRECOMMIT
+	$PRECOMMIT
+	$PRECOMMIT
+	EOF
+	test_must_fail git commit --allow-empty -m "by a.u.thor" &&
+	(
+		GIT_AUTHOR_NAME="New Author" &&
+		GIT_AUTHOR_EMAIL="newauthor@example.com" &&
+		export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL &&
+		git commit --allow-empty -m "by new.author via env" &&
+		git show -s
+	) &&
+	git commit --author="New Author <newauthor@example.com>" \
+		--allow-empty -m "by new.author via command line" &&
+	git show -s &&
+	test_cmp expected_hooks actual_hooks
+'
+
+test_done
diff --git a/t/t7503-pre-commit-hook.sh b/t/t7503-pre-commit-hook.sh
deleted file mode 100755
index 984889b..0000000
--- a/t/t7503-pre-commit-hook.sh
+++ /dev/null
@@ -1,139 +0,0 @@
-#!/bin/sh
-
-test_description='pre-commit hook'
-
-. ./test-lib.sh
-
-test_expect_success 'with no hook' '
-
-	echo "foo" > file &&
-	git add file &&
-	git commit -m "first"
-
-'
-
-test_expect_success '--no-verify with no hook' '
-
-	echo "bar" > file &&
-	git add file &&
-	git commit --no-verify -m "bar"
-
-'
-
-# now install hook that always succeeds
-HOOKDIR="$(git rev-parse --git-dir)/hooks"
-HOOK="$HOOKDIR/pre-commit"
-mkdir -p "$HOOKDIR"
-cat > "$HOOK" <<EOF
-#!/bin/sh
-exit 0
-EOF
-chmod +x "$HOOK"
-
-test_expect_success 'with succeeding hook' '
-
-	echo "more" >> file &&
-	git add file &&
-	git commit -m "more"
-
-'
-
-test_expect_success '--no-verify with succeeding hook' '
-
-	echo "even more" >> file &&
-	git add file &&
-	git commit --no-verify -m "even more"
-
-'
-
-# now a hook that fails
-cat > "$HOOK" <<EOF
-#!/bin/sh
-exit 1
-EOF
-
-test_expect_success 'with failing hook' '
-
-	echo "another" >> file &&
-	git add file &&
-	test_must_fail git commit -m "another"
-
-'
-
-test_expect_success '--no-verify with failing hook' '
-
-	echo "stuff" >> file &&
-	git add file &&
-	git commit --no-verify -m "stuff"
-
-'
-
-chmod -x "$HOOK"
-test_expect_success POSIXPERM 'with non-executable hook' '
-
-	echo "content" >> file &&
-	git add file &&
-	git commit -m "content"
-
-'
-
-test_expect_success POSIXPERM '--no-verify with non-executable hook' '
-
-	echo "more content" >> file &&
-	git add file &&
-	git commit --no-verify -m "more content"
-
-'
-chmod +x "$HOOK"
-
-# a hook that checks $GIT_PREFIX and succeeds inside the
-# success/ subdirectory only
-cat > "$HOOK" <<EOF
-#!/bin/sh
-test \$GIT_PREFIX = success/
-EOF
-
-test_expect_success 'with hook requiring GIT_PREFIX' '
-
-	echo "more content" >> file &&
-	git add file &&
-	mkdir success &&
-	(
-		cd success &&
-		git commit -m "hook requires GIT_PREFIX = success/"
-	) &&
-	rmdir success
-'
-
-test_expect_success 'with failing hook requiring GIT_PREFIX' '
-
-	echo "more content" >> file &&
-	git add file &&
-	mkdir fail &&
-	(
-		cd fail &&
-		test_must_fail git commit -m "hook must fail"
-	) &&
-	rmdir fail &&
-	git checkout -- file
-'
-
-test_expect_success 'check the author in hook' '
-	write_script "$HOOK" <<-\EOF &&
-	test "$GIT_AUTHOR_NAME" = "New Author" &&
-	test "$GIT_AUTHOR_EMAIL" = "newauthor@example.com"
-	EOF
-	test_must_fail git commit --allow-empty -m "by a.u.thor" &&
-	(
-		GIT_AUTHOR_NAME="New Author" &&
-		GIT_AUTHOR_EMAIL="newauthor@example.com" &&
-		export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL &&
-		git commit --allow-empty -m "by new.author via env" &&
-		git show -s
-	) &&
-	git commit --author="New Author <newauthor@example.com>" \
-		--allow-empty -m "by new.author via command line" &&
-	git show -s
-'
-
-test_done
diff --git a/t/t7505-prepare-commit-msg-hook.sh b/t/t7505-prepare-commit-msg-hook.sh
index ba8bd1b..94f85cd 100755
--- a/t/t7505-prepare-commit-msg-hook.sh
+++ b/t/t7505-prepare-commit-msg-hook.sh
@@ -241,13 +241,7 @@
 			git add b &&
 			git rebase --continue
 		) &&
-		if test "$mode" = -p # reword amended after pick
-		then
-			n=18
-		else
-			n=17
-		fi &&
-		git log --pretty=%s -g -n$n HEAD@{1} >actual &&
+		git log --pretty=%s -g -n18 HEAD@{1} >actual &&
 		test_cmp "$TEST_DIRECTORY/t7505/expected-rebase${mode:--i}" actual
 	'
 }
diff --git a/t/t7505/expected-rebase-i b/t/t7505/expected-rebase-i
index c514bdb..93bada5 100644
--- a/t/t7505/expected-rebase-i
+++ b/t/t7505/expected-rebase-i
@@ -7,7 +7,8 @@
 message [fixup rebase-9]
 message (no editor) [fixup rebase-8]
 message (no editor) [squash rebase-7]
-message [reword rebase-6]
+HEAD [reword rebase-6]
+message (no editor) [reword rebase-6]
 message [squash rebase-5]
 message (no editor) [fixup rebase-4]
 message (no editor) [pick rebase-3]
diff --git a/t/t7512-status-help.sh b/t/t7512-status-help.sh
index e01c285..66d7a62 100755
--- a/t/t7512-status-help.sh
+++ b/t/t7512-status-help.sh
@@ -733,6 +733,7 @@
 On branch cherry_branch
 You are currently cherry-picking commit $TO_CHERRY_PICK.
   (fix conflicts and run "git cherry-pick --continue")
+  (use "git cherry-pick --skip" to skip this patch)
   (use "git cherry-pick --abort" to cancel the cherry-pick operation)
 
 Unmerged paths:
@@ -757,6 +758,7 @@
 On branch cherry_branch
 You are currently cherry-picking commit $TO_CHERRY_PICK.
   (all conflicts fixed: run "git cherry-pick --continue")
+  (use "git cherry-pick --skip" to skip this patch)
   (use "git cherry-pick --abort" to cancel the cherry-pick operation)
 
 Changes to be committed:
@@ -778,6 +780,7 @@
 On branch cherry_branch
 Cherry-pick currently in progress.
   (run "git cherry-pick --continue" to continue)
+  (use "git cherry-pick --skip" to skip this patch)
   (use "git cherry-pick --abort" to cancel the cherry-pick operation)
 
 nothing to commit (use -u to show untracked files)
@@ -835,6 +838,7 @@
 On branch master
 You are currently reverting commit $TO_REVERT.
   (fix conflicts and run "git revert --continue")
+  (use "git revert --skip" to skip this patch)
   (use "git revert --abort" to cancel the revert operation)
 
 Unmerged paths:
@@ -855,6 +859,7 @@
 On branch master
 You are currently reverting commit $TO_REVERT.
   (all conflicts fixed: run "git revert --continue")
+  (use "git revert --skip" to skip this patch)
   (use "git revert --abort" to cancel the revert operation)
 
 Changes to be committed:
@@ -887,6 +892,7 @@
 On branch master
 Revert currently in progress.
   (run "git revert --continue" to continue)
+  (use "git revert --skip" to skip this patch)
   (use "git revert --abort" to cancel the revert operation)
 
 nothing to commit (use -u to show untracked files)
diff --git a/t/t7519-status-fsmonitor.sh b/t/t7519-status-fsmonitor.sh
index 81a375f..997d5fb 100755
--- a/t/t7519-status-fsmonitor.sh
+++ b/t/t7519-status-fsmonitor.sh
@@ -354,4 +354,23 @@
 	test_cmp expect actual
 '
 
+# Test unstaging entries that:
+#  - Are not flagged with CE_FSMONITOR_VALID
+#  - Have a position in the index >= the number of entries present in the index
+#    after unstaging.
+test_expect_success 'status succeeds after staging/unstaging' '
+	test_create_repo fsmonitor-stage-unstage &&
+	(
+		cd fsmonitor-stage-unstage &&
+		test_commit initial &&
+		git update-index --fsmonitor &&
+		removed=$(test_seq 1 100 | sed "s/^/z/") &&
+		touch $removed &&
+		git add $removed &&
+		git config core.fsmonitor "$TEST_DIRECTORY/t7519/fsmonitor-env" &&
+		FSMONITOR_LIST="$removed" git restore -S $removed &&
+		FSMONITOR_LIST="$removed" git status
+	)
+'
+
 test_done
diff --git a/t/t7519/fsmonitor-env b/t/t7519/fsmonitor-env
new file mode 100755
index 0000000..8f1f7ab
--- /dev/null
+++ b/t/t7519/fsmonitor-env
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An test hook script to integrate with git to test fsmonitor.
+#
+# The hook is passed a version (currently 1) and a time in nanoseconds
+# formatted as a string and outputs to stdout all files that have been
+# modified since the given time. Paths must be relative to the root of
+# the working tree and separated by a single NUL.
+#
+#echo "$0 $*" >&2
+
+if test "$#" -ne 2
+then
+	echo "$0: exactly 2 arguments expected" >&2
+	exit 2
+fi
+
+if test "$1" != 1
+then
+	echo "Unsupported core.fsmonitor hook version." >&2
+	exit 1
+fi
+
+printf '%s\n' $FSMONITOR_LIST
diff --git a/t/t7812-grep-icase-non-ascii.sh b/t/t7812-grep-icase-non-ascii.sh
index 0c685d3..531eb59 100755
--- a/t/t7812-grep-icase-non-ascii.sh
+++ b/t/t7812-grep-icase-non-ascii.sh
@@ -53,4 +53,32 @@
 	test_cmp expected actual
 '
 
+test_expect_success GETTEXT_LOCALE,LIBPCRE2 'PCRE v2: setup invalid UTF-8 data' '
+	printf "\\200\\n" >invalid-0x80 &&
+	echo "ævar" >expected &&
+	cat expected >>invalid-0x80 &&
+	git add invalid-0x80
+'
+
+test_expect_success GETTEXT_LOCALE,LIBPCRE2 'PCRE v2: grep ASCII from invalid UTF-8 data' '
+	git grep -h "var" invalid-0x80 >actual &&
+	test_cmp expected actual &&
+	git grep -h "(*NO_JIT)var" invalid-0x80 >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success GETTEXT_LOCALE,LIBPCRE2 'PCRE v2: grep non-ASCII from invalid UTF-8 data' '
+	git grep -h "æ" invalid-0x80 >actual &&
+	test_cmp expected actual &&
+	git grep -h "(*NO_JIT)æ" invalid-0x80 &&
+	test_cmp expected actual
+'
+
+test_expect_success GETTEXT_LOCALE,LIBPCRE2 'PCRE v2: grep non-ASCII from invalid UTF-8 data with -i' '
+	test_might_fail git grep -hi "Æ" invalid-0x80 >actual &&
+	test_cmp expected actual &&
+	test_must_fail git grep -hi "(*NO_JIT)Æ" invalid-0x80 &&
+	test_cmp expected actual
+'
+
 test_done
diff --git a/t/t7814-grep-recurse-submodules.sh b/t/t7814-grep-recurse-submodules.sh
index a11366b..946f91f 100755
--- a/t/t7814-grep-recurse-submodules.sh
+++ b/t/t7814-grep-recurse-submodules.sh
@@ -408,4 +408,25 @@
 	test_cmp expect actual
 '
 
+reset_and_clean () {
+	git reset --hard &&
+	git clean -fd &&
+	git submodule foreach --recursive 'git reset --hard' &&
+	git submodule foreach --recursive 'git clean -fd'
+}
+
+test_expect_success 'grep --recurse-submodules without --cached considers worktree modifications' '
+	reset_and_clean &&
+	echo "A modified line in submodule" >>submodule/a &&
+	echo "submodule/a:A modified line in submodule" >expect &&
+	git grep --recurse-submodules "A modified line in submodule" >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'grep --recurse-submodules with --cached ignores worktree modifications' '
+	reset_and_clean &&
+	echo "A modified line in submodule" >>submodule/a &&
+	test_must_fail git grep --recurse-submodules --cached "A modified line in submodule" >actual 2>&1 &&
+	test_must_be_empty actual
+'
 test_done
diff --git a/t/t7815-grep-binary.sh b/t/t7815-grep-binary.sh
new file mode 100755
index 0000000..90ebb64
--- /dev/null
+++ b/t/t7815-grep-binary.sh
@@ -0,0 +1,148 @@
+#!/bin/sh
+
+test_description='git grep in binary files'
+
+. ./test-lib.sh
+
+test_expect_success 'setup' "
+	echo 'binaryQfileQm[*]cQ*æQð' | q_to_nul >a &&
+	git add a &&
+	git commit -m.
+"
+
+test_expect_success 'git grep ina a' '
+	echo Binary file a matches >expect &&
+	git grep ina a >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'git grep -ah ina a' '
+	git grep -ah ina a >actual &&
+	test_cmp a actual
+'
+
+test_expect_success 'git grep -I ina a' '
+	test_must_fail git grep -I ina a >actual &&
+	test_must_be_empty actual
+'
+
+test_expect_success 'git grep -c ina a' '
+	echo a:1 >expect &&
+	git grep -c ina a >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'git grep -l ina a' '
+	echo a >expect &&
+	git grep -l ina a >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'git grep -L bar a' '
+	echo a >expect &&
+	git grep -L bar a >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'git grep -q ina a' '
+	git grep -q ina a >actual &&
+	test_must_be_empty actual
+'
+
+test_expect_success 'git grep -F ile a' '
+	git grep -F ile a
+'
+
+test_expect_success 'git grep -Fi iLE a' '
+	git grep -Fi iLE a
+'
+
+# This test actually passes on platforms where regexec() supports the
+# flag REG_STARTEND.
+test_expect_success 'git grep ile a' '
+	git grep ile a
+'
+
+test_expect_failure 'git grep .fi a' '
+	git grep .fi a
+'
+
+test_expect_success 'grep respects binary diff attribute' '
+	echo text >t &&
+	git add t &&
+	echo t:text >expect &&
+	git grep text t >actual &&
+	test_cmp expect actual &&
+	echo "t -diff" >.gitattributes &&
+	echo "Binary file t matches" >expect &&
+	git grep text t >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'grep --cached respects binary diff attribute' '
+	git grep --cached text t >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'grep --cached respects binary diff attribute (2)' '
+	git add .gitattributes &&
+	rm .gitattributes &&
+	git grep --cached text t >actual &&
+	test_when_finished "git rm --cached .gitattributes" &&
+	test_when_finished "git checkout .gitattributes" &&
+	test_cmp expect actual
+'
+
+test_expect_success 'grep revision respects binary diff attribute' '
+	git commit -m new &&
+	echo "Binary file HEAD:t matches" >expect &&
+	git grep text HEAD -- t >actual &&
+	test_when_finished "git reset HEAD^" &&
+	test_cmp expect actual
+'
+
+test_expect_success 'grep respects not-binary diff attribute' '
+	echo binQary | q_to_nul >b &&
+	git add b &&
+	echo "Binary file b matches" >expect &&
+	git grep bin b >actual &&
+	test_cmp expect actual &&
+	echo "b diff" >.gitattributes &&
+	echo "b:binQary" >expect &&
+	git grep bin b >actual.raw &&
+	nul_to_q <actual.raw >actual &&
+	test_cmp expect actual
+'
+
+cat >nul_to_q_textconv <<'EOF'
+#!/bin/sh
+"$PERL_PATH" -pe 'y/\000/Q/' < "$1"
+EOF
+chmod +x nul_to_q_textconv
+
+test_expect_success 'setup textconv filters' '
+	echo a diff=foo >.gitattributes &&
+	git config diff.foo.textconv "\"$(pwd)\""/nul_to_q_textconv
+'
+
+test_expect_success 'grep does not honor textconv' '
+	test_must_fail git grep Qfile
+'
+
+test_expect_success 'grep --textconv honors textconv' '
+	echo "a:binaryQfileQm[*]cQ*æQð" >expect &&
+	git grep --textconv Qfile >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'grep --no-textconv does not honor textconv' '
+	test_must_fail git grep --no-textconv Qfile
+'
+
+test_expect_success 'grep --textconv blob honors textconv' '
+	echo "HEAD:a:binaryQfileQm[*]cQ*æQð" >expect &&
+	git grep --textconv Qfile HEAD:a >actual &&
+	test_cmp expect actual
+'
+
+test_done
diff --git a/t/t7816-grep-binary-pattern.sh b/t/t7816-grep-binary-pattern.sh
new file mode 100755
index 0000000..60bab29
--- /dev/null
+++ b/t/t7816-grep-binary-pattern.sh
@@ -0,0 +1,127 @@
+#!/bin/sh
+
+test_description='git grep with a binary pattern files'
+
+. ./lib-gettext.sh
+
+nul_match_internal () {
+	matches=$1
+	prereqs=$2
+	lc_all=$3
+	extra_flags=$4
+	flags=$5
+	pattern=$6
+	pattern_human=$(echo "$pattern" | sed 's/Q/<NUL>/g')
+
+	if test "$matches" = 1
+	then
+		test_expect_success $prereqs "LC_ALL='$lc_all' git grep $extra_flags -f f $flags '$pattern_human' a" "
+			printf '$pattern' | q_to_nul >f &&
+			LC_ALL='$lc_all' git grep $extra_flags -f f $flags a
+		"
+	elif test "$matches" = 0
+	then
+		test_expect_success $prereqs "LC_ALL='$lc_all' git grep $extra_flags -f f $flags '$pattern_human' a" "
+			>stderr &&
+			printf '$pattern' | q_to_nul >f &&
+			test_must_fail env LC_ALL=\"$lc_all\" git grep $extra_flags -f f $flags a 2>stderr &&
+			test_i18ngrep ! 'This is only supported with -P under PCRE v2' stderr
+		"
+	elif test "$matches" = P
+	then
+		test_expect_success $prereqs "error, PCRE v2 only: LC_ALL='$lc_all' git grep -f f $flags '$pattern_human' a" "
+			>stderr &&
+			printf '$pattern' | q_to_nul >f &&
+			test_must_fail env LC_ALL=\"$lc_all\" git grep -f f $flags a 2>stderr &&
+			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
+		"
+	else
+		test_expect_success "PANIC: Test framework error. Unknown matches value $matches" 'false'
+	fi
+}
+
+nul_match () {
+	matches=$1
+	matches_pcre2=$2
+	matches_pcre2_locale=$3
+	flags=$4
+	pattern=$5
+	pattern_human=$(echo "$pattern" | sed 's/Q/<NUL>/g')
+
+	nul_match_internal "$matches" "" "C" "" "$flags" "$pattern"
+	nul_match_internal "$matches_pcre2" "LIBPCRE2" "C" "-P" "$flags" "$pattern"
+	nul_match_internal "$matches_pcre2_locale" "LIBPCRE2,GETTEXT_LOCALE" "$is_IS_locale" "-P" "$flags" "$pattern"
+}
+
+test_expect_success 'setup' "
+	echo 'binaryQfileQm[*]cQ*æQð' | q_to_nul >a &&
+	git add a &&
+	git commit -m.
+"
+
+# Simple fixed-string matching that can use kwset (no -i && non-ASCII)
+nul_match P P P '-F' 'yQf'
+nul_match P P P '-F' 'yQx'
+nul_match P P P '-Fi' 'YQf'
+nul_match P P P '-Fi' 'YQx'
+nul_match P P 1 '' 'yQf'
+nul_match P P 0 '' 'yQx'
+nul_match P P 1 '' 'æQð'
+nul_match P P P '-F' 'eQm[*]c'
+nul_match P P P '-Fi' 'EQM[*]C'
+
+# Regex patterns that would match but shouldn't with -F
+nul_match P P P '-F' 'yQ[f]'
+nul_match P P P '-F' '[y]Qf'
+nul_match P P P '-Fi' 'YQ[F]'
+nul_match P P P '-Fi' '[Y]QF'
+nul_match P P P '-F' 'æQ[ð]'
+nul_match P P P '-F' '[æ]Qð'
+
+# The -F kwset codepath can't handle -i && non-ASCII...
+nul_match P 1 1 '-i' '[æ]Qð'
+
+# ...PCRE v2 only matches non-ASCII with -i casefolding under UTF-8
+# semantics
+nul_match P P P '-Fi' 'ÆQ[Ð]'
+nul_match P 0 1 '-i'  'ÆQ[Ð]'
+nul_match P 0 1 '-i'  '[Æ]QÐ'
+nul_match P 0 1 '-i' '[Æ]Qð'
+nul_match P 0 1 '-i' 'ÆQÐ'
+
+# \0 in regexes can only work with -P & PCRE v2
+nul_match P P 1 '' 'yQ[f]'
+nul_match P P 1 '' '[y]Qf'
+nul_match P P 1 '-i' 'YQ[F]'
+nul_match P P 1 '-i' '[Y]Qf'
+nul_match P P 1 '' 'æQ[ð]'
+nul_match P P 1 '' '[æ]Qð'
+nul_match P P 1 '-i' 'ÆQ[Ð]'
+nul_match P P 1 '' 'eQm.*cQ'
+nul_match P P 1 '-i' 'EQM.*cQ'
+nul_match P P 0 '' 'eQm[*]c'
+nul_match P P 0 '-i' 'EQM[*]C'
+
+# Assert that we're using REG_STARTEND and the pattern doesn't match
+# just because it's cut off at the first \0.
+nul_match P P 0 '-i' 'NOMATCHQð'
+nul_match P P 0 '-i' '[Æ]QNOMATCH'
+nul_match P P 0 '-i' '[æ]QNOMATCH'
+
+# Ensure that the matcher doesn't regress to something that stops at
+# \0
+nul_match P P P '-F' 'yQ[f]'
+nul_match P P P '-Fi' 'YQ[F]'
+nul_match P P 0 '' 'yQNOMATCH'
+nul_match P P 0 '' 'QNOMATCH'
+nul_match P P 0 '-i' 'YQNOMATCH'
+nul_match P P 0 '-i' 'QNOMATCH'
+nul_match P P P '-F' 'æQ[ð]'
+nul_match P P P '-Fi' 'ÆQ[Ð]'
+nul_match P P 1 '-i' 'ÆQ[Ð]'
+nul_match P P 0 '' 'yQNÓMATCH'
+nul_match P P 0 '' 'QNÓMATCH'
+nul_match P P 0 '-i' 'YQNÓMATCH'
+nul_match P P 0 '-i' 'QNÓMATCH'
+
+test_done
diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh
index 2ea4795..17bb6dc 100755
--- a/t/t9300-fast-import.sh
+++ b/t/t9300-fast-import.sh
@@ -85,6 +85,36 @@
 	An annotated tag that annotates a blob.
 	EOF
 
+	tag to-be-deleted
+	from :3
+	data <<EOF
+	Another annotated tag that annotates a blob.
+	EOF
+
+	reset refs/tags/to-be-deleted
+	from 0000000000000000000000000000000000000000
+
+	tag nested
+	mark :6
+	from :4
+	data <<EOF
+	Tag of our lovely commit
+	EOF
+
+	reset refs/tags/nested
+	from 0000000000000000000000000000000000000000
+
+	tag nested
+	mark :7
+	from :6
+	data <<EOF
+	Tag of tag of our lovely commit
+	EOF
+
+	alias
+	mark :8
+	to :5
+
 	INPUT_END
 	git fast-import --export-marks=marks.out <input &&
 	git whatchanged master
@@ -157,12 +187,19 @@
 	test_cmp expect actual
 '
 
+test_expect_success 'A: verify tag deletion is successful' '
+	test_must_fail git rev-parse --verify refs/tags/to-be-deleted
+'
+
 test_expect_success 'A: verify marks output' '
 	cat >expect <<-EOF &&
 	:2 $(git rev-parse --verify master:file2)
 	:3 $(git rev-parse --verify master:file3)
 	:4 $(git rev-parse --verify master:file4)
 	:5 $(git rev-parse --verify master^0)
+	:6 $(git cat-file tag nested | grep object | cut -d" " -f 2)
+	:7 $(git rev-parse --verify nested)
+	:8 $(git rev-parse --verify master^0)
 	EOF
 	test_cmp expect marks.out
 '
@@ -2811,7 +2848,6 @@
 	COMMIT
 	M 100644 :403x hello.c
 	EOF
-	cat err &&
 	test_i18ngrep "space after mark" err
 '
 
@@ -2828,7 +2864,6 @@
 	inline
 	BLOB
 	EOF
-	cat err &&
 	test_i18ngrep "nvalid dataref" err
 '
 
@@ -2842,7 +2877,6 @@
 	COMMIT
 	M 100644 ${sha1}x hello.c
 	EOF
-	cat err &&
 	test_i18ngrep "space after SHA1" err
 '
 
@@ -2858,7 +2892,6 @@
 	COMMIT
 	N :202x :302
 	EOF
-	cat err &&
 	test_i18ngrep "space after mark" err
 '
 
@@ -2874,7 +2907,6 @@
 	note blob
 	BLOB
 	EOF
-	cat err &&
 	test_i18ngrep "nvalid dataref" err
 '
 
@@ -2888,7 +2920,6 @@
 	COMMIT
 	N ${sha1}x :302
 	EOF
-	cat err &&
 	test_i18ngrep "space after SHA1" err
 '
 
@@ -2904,7 +2935,6 @@
 	COMMIT
 	N :202 :302x
 	EOF
-	cat err &&
 	test_i18ngrep "after mark" err
 '
 
@@ -2938,7 +2968,6 @@
 	EOF
 
 	# now evaluate the error
-	cat err &&
 	test_i18ngrep "after mark" err
 '
 
@@ -2958,7 +2987,6 @@
 	merge :303x
 	M 100644 :403 hello.c
 	EOF
-	cat err &&
 	test_i18ngrep "after mark" err
 '
 
@@ -2974,7 +3002,6 @@
 	tag S
 	TAG
 	EOF
-	cat err &&
 	test_i18ngrep "after mark" err
 '
 
@@ -2985,7 +3012,6 @@
 	test_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&
 	cat-blob :403x
 	EOF
-	cat err &&
 	test_i18ngrep "after mark" err
 '
 
@@ -2996,7 +3022,6 @@
 	test_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&
 	ls :302x hello.c
 	EOF
-	cat err &&
 	test_i18ngrep "space after mark" err
 '
 
@@ -3005,7 +3030,6 @@
 	test_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&
 	ls ${sha1}x hello.c
 	EOF
-	cat err &&
 	test_i18ngrep "space after tree-ish" err
 '
 
diff --git a/t/t9350-fast-export.sh b/t/t9350-fast-export.sh
index 67ea569..5ac9def 100755
--- a/t/t9350-fast-export.sh
+++ b/t/t9350-fast-export.sh
@@ -53,6 +53,33 @@
 
 '
 
+test_expect_success 'fast-export ^muss^{commit} muss' '
+	git fast-export --tag-of-filtered-object=rewrite ^muss^{commit} muss >actual &&
+	cat >expected <<-EOF &&
+	tag muss
+	from $(git rev-parse --verify muss^{commit})
+	$(git cat-file tag muss | grep tagger)
+	data 9
+	valentin
+
+	EOF
+	test_cmp expected actual
+'
+
+test_expect_success 'fast-export --mark-tags ^muss^{commit} muss' '
+	git fast-export --mark-tags --tag-of-filtered-object=rewrite ^muss^{commit} muss >actual &&
+	cat >expected <<-EOF &&
+	tag muss
+	mark :1
+	from $(git rev-parse --verify muss^{commit})
+	$(git cat-file tag muss | grep tagger)
+	data 9
+	valentin
+
+	EOF
+	test_cmp expected actual
+'
+
 test_expect_success 'fast-export master~2..master' '
 
 	git fast-export master~2..master >actual &&
@@ -513,10 +540,41 @@
 '
 
 # NEEDSWORK: not just check return status, but validate the output
+# Note that these tests DO NOTHING other than print a warning that
+# they are ommitting the one tag we asked them to export (because the
+# tags resolve to a tree).  They exist just to make sure we do not
+# abort but instead just warn.
 test_expect_success 'tree_tag-obj'    'git fast-export tree_tag-obj'
 test_expect_success 'tag-obj_tag'     'git fast-export tag-obj_tag'
 test_expect_success 'tag-obj_tag-obj' 'git fast-export tag-obj_tag-obj'
 
+test_expect_success 'handling tags of blobs' '
+	git tag -a -m "Tag of a blob" blobtag $(git rev-parse master:file) &&
+	git fast-export blobtag >actual &&
+	cat >expect <<-EOF &&
+	blob
+	mark :1
+	data 9
+	die Luft
+
+	tag blobtag
+	from :1
+	tagger $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
+	data 14
+	Tag of a blob
+
+	EOF
+	test_cmp expect actual
+'
+
+test_expect_success 'handling nested tags' '
+	git tag -a -m "This is a nested tag" nested muss &&
+	git fast-export --mark-tags nested >output &&
+	grep "^from $ZERO_OID$" output &&
+	grep "^tag nested$" output >tag_lines &&
+	test_line_count = 2 tag_lines
+'
+
 test_expect_success 'directory becomes symlink'        '
 	git init dirtosymlink &&
 	git init result &&
@@ -568,17 +626,15 @@
 '
 
 test_expect_success 'test bidirectionality' '
-	>marks-cur &&
-	>marks-new &&
 	git init marks-test &&
-	git fast-export --export-marks=marks-cur --import-marks=marks-cur --branches | \
-	git --git-dir=marks-test/.git fast-import --export-marks=marks-new --import-marks=marks-new &&
+	git fast-export --export-marks=marks-cur --import-marks-if-exists=marks-cur --branches | \
+	git --git-dir=marks-test/.git fast-import --export-marks=marks-new --import-marks-if-exists=marks-new &&
 	(cd marks-test &&
 	git reset --hard &&
 	echo Wohlauf > file &&
 	git commit -a -m "back in time") &&
-	git --git-dir=marks-test/.git fast-export --export-marks=marks-new --import-marks=marks-new --branches | \
-	git fast-import --export-marks=marks-cur --import-marks=marks-cur
+	git --git-dir=marks-test/.git fast-export --export-marks=marks-new --import-marks-if-exists=marks-new --branches | \
+	git fast-import --export-marks=marks-cur --import-marks-if-exists=marks-cur
 '
 
 cat > expected << EOF
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index 75512c3..54f8ce1 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -28,10 +28,10 @@
 #
 # (2) A test makes sure that common subcommands are included in the
 #     completion for "git <TAB>", and a plumbing is excluded.  "add",
-#     "filter-branch" and "ls-files" are listed for this.
+#     "rebase" and "ls-files" are listed for this.
 
-GIT_TESTING_ALL_COMMAND_LIST='add checkout check-attr filter-branch ls-files'
-GIT_TESTING_PORCELAIN_COMMAND_LIST='add checkout filter-branch'
+GIT_TESTING_ALL_COMMAND_LIST='add checkout check-attr rebase ls-files'
+GIT_TESTING_PORCELAIN_COMMAND_LIST='add checkout rebase'
 
 . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash"
 
@@ -1392,12 +1392,12 @@
 	# built-in
 	grep -q "^add \$" out &&
 	# script
-	grep -q "^filter-branch \$" out &&
+	grep -q "^rebase \$" out &&
 	# plumbing
 	! grep -q "^ls-files \$" out &&
 
-	run_completion "git f" &&
-	! grep -q -v "^f" out
+	run_completion "git r" &&
+	! grep -q -v "^r" out
 '
 
 test_expect_success 'double dash "git" itself' '
@@ -1698,6 +1698,69 @@
 	'
 done
 
+test_expect_success 'git config - section' '
+	test_completion "git config br" <<-\EOF
+	branch.Z
+	browser.Z
+	EOF
+'
+
+test_expect_success 'git config - variable name' '
+	test_completion "git config log.d" <<-\EOF
+	log.date Z
+	log.decorate Z
+	EOF
+'
+
+test_expect_success 'git config - value' '
+	test_completion "git config color.pager " <<-\EOF
+	false Z
+	true Z
+	EOF
+'
+
+test_expect_success 'git -c - section' '
+	test_completion "git -c br" <<-\EOF
+	branch.Z
+	browser.Z
+	EOF
+'
+
+test_expect_success 'git -c - variable name' '
+	test_completion "git -c log.d" <<-\EOF
+	log.date=Z
+	log.decorate=Z
+	EOF
+'
+
+test_expect_success 'git -c - value' '
+	test_completion "git -c color.pager=" <<-\EOF
+	false Z
+	true Z
+	EOF
+'
+
+test_expect_success 'git clone --config= - section' '
+	test_completion "git clone --config=br" <<-\EOF
+	branch.Z
+	browser.Z
+	EOF
+'
+
+test_expect_success 'git clone --config= - variable name' '
+	test_completion "git clone --config=log.d" <<-\EOF
+	log.date=Z
+	log.decorate=Z
+	EOF
+'
+
+test_expect_success 'git clone --config= - value' '
+	test_completion "git clone --config=color.pager=" <<-\EOF
+	false Z
+	true Z
+	EOF
+'
+
 test_expect_success 'sourcing the completion script clears cached commands' '
 	__git_compute_all_commands &&
 	verbose test -n "$__git_all_commands" &&
diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
index e0b3f28..b299ecc 100644
--- a/t/test-lib-functions.sh
+++ b/t/test-lib-functions.sh
@@ -228,9 +228,11 @@
 # can be a tag pointing to the commit-to-merge.
 
 test_merge () {
+	label="$1" &&
+	shift &&
 	test_tick &&
-	git merge -m "$1" "$2" &&
-	git tag "$1"
+	git merge -m "$label" "$@" &&
+	git tag "$label"
 }
 
 # Efficiently create <nr> commits, each with a unique number (from 1 to <nr>
@@ -580,7 +582,7 @@
 	export test_prereq
 	if ! test_skip "$@"
 	then
-		say >&3 "checking known breakage: $2"
+		say >&3 "checking known breakage of $TEST_NUMBER.$test_count '$1': $2"
 		if test_run_ "$2" expecting_failure
 		then
 			test_known_broken_ok_ "$1"
@@ -600,7 +602,7 @@
 	export test_prereq
 	if ! test_skip "$@"
 	then
-		say >&3 "expecting success: $2"
+		say >&3 "expecting success of $TEST_NUMBER.$test_count '$1': $2"
 		if test_run_ "$2"
 		then
 			test_ok_ "$1"
diff --git a/t/test-lib.sh b/t/test-lib.sh
index 30b07e3..e06fa02 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -212,6 +212,8 @@
 
 TEST_STRESS_JOB_SFX="${GIT_TEST_STRESS_JOB_NR:+.stress-$GIT_TEST_STRESS_JOB_NR}"
 TEST_NAME="$(basename "$0" .sh)"
+TEST_NUMBER="${TEST_NAME%%-*}"
+TEST_NUMBER="${TEST_NUMBER#t}"
 TEST_RESULTS_DIR="$TEST_OUTPUT_DIRECTORY/test-results"
 TEST_RESULTS_BASE="$TEST_RESULTS_DIR/$TEST_NAME$TEST_STRESS_JOB_SFX"
 TRASH_DIRECTORY="trash directory.$TEST_NAME$TEST_STRESS_JOB_SFX"
@@ -507,6 +509,9 @@
 LF='
 '
 
+# Single quote
+SQ=\'
+
 # UTF-8 ZERO WIDTH NON-JOINER, which HFS+ ignores
 # when case-folding filenames
 u200c=$(printf '\342\200\214')
@@ -567,6 +572,7 @@
 
 error () {
 	say_color error "error: $*"
+	finalize_junit_xml
 	GIT_EXIT_OK=t
 	exit 1
 }
@@ -695,7 +701,7 @@
 	say_color error "not ok $test_count - $1"
 	shift
 	printf '%s\n' "$*" | sed -e 's/^/#	/'
-	test "$immediate" = "" || { GIT_EXIT_OK=t; exit 1; }
+	test "$immediate" = "" || { finalize_junit_xml; GIT_EXIT_OK=t; exit 1; }
 }
 
 test_known_broken_ok_ () {
@@ -1063,6 +1069,25 @@
 	junit_have_testcase=t
 }
 
+finalize_junit_xml () {
+	if test -n "$write_junit_xml" && test -n "$junit_xml_path"
+	then
+		test -n "$junit_have_testcase" || {
+			junit_start=$(test-tool date getnanos)
+			write_junit_xml_testcase "all tests skipped"
+		}
+
+		# adjust the overall time
+		junit_time=$(test-tool date getnanos $junit_suite_start)
+		sed "s/<testsuite [^>]*/& time=\"$junit_time\"/" \
+			<"$junit_xml_path" >"$junit_xml_path.new"
+		mv "$junit_xml_path.new" "$junit_xml_path"
+
+		write_junit_xml "  </testsuite>" "</testsuites>"
+		write_junit_xml=
+	fi
+}
+
 test_atexit_cleanup=:
 test_atexit_handler () {
 	# In a succeeding test script 'test_atexit_handler' is invoked
@@ -1085,21 +1110,7 @@
 	# removed, so the commands can access pidfiles and socket files.
 	test_atexit_handler
 
-	if test -n "$write_junit_xml" && test -n "$junit_xml_path"
-	then
-		test -n "$junit_have_testcase" || {
-			junit_start=$(test-tool date getnanos)
-			write_junit_xml_testcase "all tests skipped"
-		}
-
-		# adjust the overall time
-		junit_time=$(test-tool date getnanos $junit_suite_start)
-		sed "s/<testsuite [^>]*/& time=\"$junit_time\"/" \
-			<"$junit_xml_path" >"$junit_xml_path.new"
-		mv "$junit_xml_path.new" "$junit_xml_path"
-
-		write_junit_xml "  </testsuite>" "</testsuites>"
-	fi
+	finalize_junit_xml
 
 	if test -z "$HARNESS_ACTIVE"
 	then
diff --git a/tag.c b/tag.c
index 5db870e..bfa0e31 100644
--- a/tag.c
+++ b/tag.c
@@ -212,3 +212,10 @@
 	free(data);
 	return ret;
 }
+
+struct object_id *get_tagged_oid(struct tag *tag)
+{
+	if (!tag->tagged)
+		die("bad tag");
+	return &tag->tagged->oid;
+}
diff --git a/tag.h b/tag.h
index 03265fb..3ce8e72 100644
--- a/tag.h
+++ b/tag.h
@@ -19,5 +19,6 @@
 struct object *deref_tag_noverify(struct object *);
 int gpg_verify_tag(const struct object_id *oid,
 		   const char *name_to_report, unsigned flags);
+struct object_id *get_tagged_oid(struct tag *tag);
 
 #endif /* TAG_H */
diff --git a/templates/hooks--pre-merge-commit.sample b/templates/hooks--pre-merge-commit.sample
new file mode 100755
index 0000000..399eab1
--- /dev/null
+++ b/templates/hooks--pre-merge-commit.sample
@@ -0,0 +1,13 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git merge" with no arguments.  The hook should
+# exit with non-zero status after issuing an appropriate message to
+# stderr if it wants to stop the merge commit.
+#
+# To enable this hook, rename this file to "pre-merge-commit".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/pre-commit" &&
+        exec "$GIT_DIR/hooks/pre-commit"
+:
diff --git a/trace.c b/trace.c
index fa4a2e7..b3ef0e6 100644
--- a/trace.c
+++ b/trace.c
@@ -88,8 +88,6 @@
 	if (!trace_want(key))
 		return 0;
 
-	set_try_to_free_routine(NULL);	/* is never reset */
-
 	/* unit tests may want to disable additional trace output */
 	if (trace_want(&trace_bare))
 		return 1;
diff --git a/trace2/tr2_dst.c b/trace2/tr2_dst.c
index 5dda0ca..ae052a0 100644
--- a/trace2/tr2_dst.c
+++ b/trace2/tr2_dst.c
@@ -8,6 +8,19 @@
  */
 #define MAX_AUTO_ATTEMPTS 10
 
+/*
+ * Sentinel file used to detect when we should discard new traces to avoid
+ * writing too many trace files to a directory.
+ */
+#define DISCARD_SENTINEL_NAME "git-trace2-discard"
+
+/*
+ * When set to zero, disables directory file count checks. Otherwise, controls
+ * how many files we can write to a directory before entering discard mode.
+ * This can be overridden via the TR2_SYSENV_MAX_FILES setting.
+ */
+static int tr2env_max_files = 0;
+
 static int tr2_dst_want_warning(void)
 {
 	static int tr2env_dst_debug = -1;
@@ -32,9 +45,75 @@
 	dst->need_close = 0;
 }
 
+/*
+ * Check to make sure we're not overloading the target directory with too many
+ * files. First get the threshold (if present) from the config or envvar. If
+ * it's zero or unset, disable this check. Next check for the presence of a
+ * sentinel file, then check file count.
+ *
+ * Returns 0 if tracing should proceed as normal. Returns 1 if the sentinel file
+ * already exists, which means tracing should be disabled. Returns -1 if there
+ * are too many files but there was no sentinel file, which means we have
+ * created and should write traces to the sentinel file.
+ *
+ * We expect that some trace processing system is gradually collecting files
+ * from the target directory; after it removes the sentinel file we'll start
+ * writing traces again.
+ */
+static int tr2_dst_too_many_files(struct tr2_dst *dst, const char *tgt_prefix)
+{
+	int file_count = 0, max_files = 0, ret = 0;
+	const char *max_files_var;
+	DIR *dirp;
+	struct strbuf path = STRBUF_INIT, sentinel_path = STRBUF_INIT;
+	struct stat statbuf;
+
+	/* Get the config or envvar and decide if we should continue this check */
+	max_files_var = tr2_sysenv_get(TR2_SYSENV_MAX_FILES);
+	if (max_files_var && *max_files_var && ((max_files = atoi(max_files_var)) >= 0))
+		tr2env_max_files = max_files;
+
+	if (!tr2env_max_files) {
+		ret = 0;
+		goto cleanup;
+	}
+
+	strbuf_addstr(&path, tgt_prefix);
+	if (!is_dir_sep(path.buf[path.len - 1])) {
+		strbuf_addch(&path, '/');
+	}
+
+	/* check sentinel */
+	strbuf_addbuf(&sentinel_path, &path);
+	strbuf_addstr(&sentinel_path, DISCARD_SENTINEL_NAME);
+	if (!stat(sentinel_path.buf, &statbuf)) {
+		ret = 1;
+		goto cleanup;
+	}
+
+	/* check file count */
+	dirp = opendir(path.buf);
+	while (file_count < tr2env_max_files && dirp && readdir(dirp))
+		file_count++;
+	if (dirp)
+		closedir(dirp);
+
+	if (file_count >= tr2env_max_files) {
+		dst->too_many_files = 1;
+		dst->fd = open(sentinel_path.buf, O_WRONLY | O_CREAT | O_EXCL, 0666);
+		ret = -1;
+		goto cleanup;
+	}
+
+cleanup:
+	strbuf_release(&path);
+	strbuf_release(&sentinel_path);
+	return ret;
+}
+
 static int tr2_dst_try_auto_path(struct tr2_dst *dst, const char *tgt_prefix)
 {
-	int fd;
+	int too_many_files;
 	const char *last_slash, *sid = tr2_sid_get();
 	struct strbuf path = STRBUF_INIT;
 	size_t base_path_len;
@@ -50,18 +129,29 @@
 	strbuf_addstr(&path, sid);
 	base_path_len = path.len;
 
-	for (attempt_count = 0; attempt_count < MAX_AUTO_ATTEMPTS; attempt_count++) {
-		if (attempt_count > 0) {
-			strbuf_setlen(&path, base_path_len);
-			strbuf_addf(&path, ".%d", attempt_count);
-		}
+	too_many_files = tr2_dst_too_many_files(dst, tgt_prefix);
+	if (!too_many_files) {
+		for (attempt_count = 0; attempt_count < MAX_AUTO_ATTEMPTS; attempt_count++) {
+			if (attempt_count > 0) {
+				strbuf_setlen(&path, base_path_len);
+				strbuf_addf(&path, ".%d", attempt_count);
+			}
 
-		fd = open(path.buf, O_WRONLY | O_CREAT | O_EXCL, 0666);
-		if (fd != -1)
-			break;
+			dst->fd = open(path.buf, O_WRONLY | O_CREAT | O_EXCL, 0666);
+			if (dst->fd != -1)
+				break;
+		}
+	} else if (too_many_files == 1) {
+		strbuf_release(&path);
+		if (tr2_dst_want_warning())
+			warning("trace2: not opening %s trace file due to too "
+				"many files in target directory %s",
+				tr2_sysenv_display_name(dst->sysenv_var),
+				tgt_prefix);
+		return 0;
 	}
 
-	if (fd == -1) {
+	if (dst->fd == -1) {
 		if (tr2_dst_want_warning())
 			warning("trace2: could not open '%.*s' for '%s' tracing: %s",
 				(int) base_path_len, path.buf,
@@ -75,7 +165,6 @@
 
 	strbuf_release(&path);
 
-	dst->fd = fd;
 	dst->need_close = 1;
 	dst->initialized = 1;
 
@@ -215,13 +304,8 @@
 static void tr2_dst_malformed_warning(struct tr2_dst *dst,
 				      const char *tgt_value)
 {
-	struct strbuf buf = STRBUF_INIT;
-
-	strbuf_addf(&buf, "trace2: unknown value for '%s': '%s'",
-		    tr2_sysenv_display_name(dst->sysenv_var), tgt_value);
-	warning("%s", buf.buf);
-
-	strbuf_release(&buf);
+	warning("trace2: unknown value for '%s': '%s'",
+		tr2_sysenv_display_name(dst->sysenv_var), tgt_value);
 }
 
 int tr2_dst_get_trace_fd(struct tr2_dst *dst)
diff --git a/trace2/tr2_dst.h b/trace2/tr2_dst.h
index 3adf3ba..b1a8c14 100644
--- a/trace2/tr2_dst.h
+++ b/trace2/tr2_dst.h
@@ -9,6 +9,7 @@
 	int fd;
 	unsigned int initialized : 1;
 	unsigned int need_close : 1;
+	unsigned int too_many_files : 1;
 };
 
 /*
diff --git a/trace2/tr2_sysenv.c b/trace2/tr2_sysenv.c
index 5958cfc..3c3792e 100644
--- a/trace2/tr2_sysenv.c
+++ b/trace2/tr2_sysenv.c
@@ -49,6 +49,9 @@
 				       "trace2.perftarget" },
 	[TR2_SYSENV_PERF_BRIEF]    = { "GIT_TRACE2_PERF_BRIEF",
 				       "trace2.perfbrief" },
+
+	[TR2_SYSENV_MAX_FILES]     = { "GIT_TRACE2_MAX_FILES",
+				       "trace2.maxfiles" },
 };
 /* clang-format on */
 
diff --git a/trace2/tr2_sysenv.h b/trace2/tr2_sysenv.h
index 8dd82a7..d4364a7 100644
--- a/trace2/tr2_sysenv.h
+++ b/trace2/tr2_sysenv.h
@@ -24,6 +24,8 @@
 	TR2_SYSENV_PERF,
 	TR2_SYSENV_PERF_BRIEF,
 
+	TR2_SYSENV_MAX_FILES,
+
 	TR2_SYSENV_MUST_BE_LAST
 };
 
diff --git a/trace2/tr2_tgt_event.c b/trace2/tr2_tgt_event.c
index c2852d1..6353e8a 100644
--- a/trace2/tr2_tgt_event.c
+++ b/trace2/tr2_tgt_event.c
@@ -10,16 +10,17 @@
 #include "trace2/tr2_tgt.h"
 #include "trace2/tr2_tls.h"
 
-static struct tr2_dst tr2dst_event = { TR2_SYSENV_EVENT, 0, 0, 0 };
+static struct tr2_dst tr2dst_event = { TR2_SYSENV_EVENT, 0, 0, 0, 0 };
 
 /*
- * The version number of the JSON data generated by the EVENT target
- * in this source file.  Update this if you make a significant change
- * to the JSON fields or message structure.  You probably do not need
- * to update this if you just add another call to one of the existing
- * TRACE2 API methods.
+ * The version number of the JSON data generated by the EVENT target in this
+ * source file. The version should be incremented if new event types are added,
+ * if existing fields are removed, or if there are significant changes in
+ * interpretation of existing events or fields. Smaller changes, such as adding
+ * a new field to an existing event, do not require an increment to the EVENT
+ * format version.
  */
-#define TR2_EVENT_VERSION "1"
+#define TR2_EVENT_VERSION "2"
 
 /*
  * Region nesting limit for messages written to the event target.
@@ -107,6 +108,19 @@
 		jw_object_intmax(jw, "repo", repo->trace2_repo_id);
 }
 
+static void fn_too_many_files_fl(const char *file, int line)
+{
+	const char *event_name = "too_many_files";
+	struct json_writer jw = JSON_WRITER_INIT;
+
+	jw_object_begin(&jw, 0);
+	event_fmt_prepare(event_name, file, line, NULL, &jw);
+	jw_end(&jw);
+
+	tr2_dst_write_line(&tr2dst_event, &jw.json);
+	jw_release(&jw);
+}
+
 static void fn_version_fl(const char *file, int line)
 {
 	const char *event_name = "version";
@@ -120,6 +134,9 @@
 
 	tr2_dst_write_line(&tr2dst_event, &jw.json);
 	jw_release(&jw);
+
+	if (tr2dst_event.too_many_files)
+		fn_too_many_files_fl(file, line);
 }
 
 static void fn_start_fl(const char *file, int line,
@@ -205,11 +222,6 @@
 		strbuf_release(&buf);
 		return;
 	}
-
-	if (fmt && *fmt) {
-		jw_object_string(jw, field_name, fmt);
-		return;
-	}
 }
 
 static void fn_error_va_fl(const char *file, int line, const char *fmt,
diff --git a/trace2/tr2_tgt_normal.c b/trace2/tr2_tgt_normal.c
index 00b116d..31b602c 100644
--- a/trace2/tr2_tgt_normal.c
+++ b/trace2/tr2_tgt_normal.c
@@ -9,7 +9,7 @@
 #include "trace2/tr2_tgt.h"
 #include "trace2/tr2_tls.h"
 
-static struct tr2_dst tr2dst_normal = { TR2_SYSENV_NORMAL, 0, 0, 0 };
+static struct tr2_dst tr2dst_normal = { TR2_SYSENV_NORMAL, 0, 0, 0, 0 };
 
 /*
  * Use the TR2_SYSENV_NORMAL_BRIEF setting to omit the "<time> <file>:<line>"
@@ -87,7 +87,7 @@
 	struct strbuf buf_payload = STRBUF_INIT;
 
 	strbuf_addstr(&buf_payload, "start ");
-	sq_quote_argv_pretty(&buf_payload, argv);
+	sq_append_quote_argv_pretty(&buf_payload, argv);
 	normal_io_write_fl(file, line, &buf_payload);
 	strbuf_release(&buf_payload);
 }
@@ -135,11 +135,6 @@
 		va_end(copy_ap);
 		return;
 	}
-
-	if (fmt && *fmt) {
-		strbuf_addstr(buf, fmt);
-		return;
-	}
 }
 
 static void fn_error_va_fl(const char *file, int line, const char *fmt,
@@ -147,8 +142,11 @@
 {
 	struct strbuf buf_payload = STRBUF_INIT;
 
-	strbuf_addstr(&buf_payload, "error ");
-	maybe_append_string_va(&buf_payload, fmt, ap);
+	strbuf_addstr(&buf_payload, "error");
+	if (fmt && *fmt) {
+		strbuf_addch(&buf_payload, ' ');
+		maybe_append_string_va(&buf_payload, fmt, ap);
+	}
 	normal_io_write_fl(file, line, &buf_payload);
 	strbuf_release(&buf_payload);
 }
@@ -188,8 +186,8 @@
 {
 	struct strbuf buf_payload = STRBUF_INIT;
 
-	strbuf_addf(&buf_payload, "alias %s ->", alias);
-	sq_quote_argv_pretty(&buf_payload, argv);
+	strbuf_addf(&buf_payload, "alias %s -> ", alias);
+	sq_append_quote_argv_pretty(&buf_payload, argv);
 	normal_io_write_fl(file, line, &buf_payload);
 	strbuf_release(&buf_payload);
 }
@@ -200,12 +198,12 @@
 {
 	struct strbuf buf_payload = STRBUF_INIT;
 
-	strbuf_addf(&buf_payload, "child_start[%d] ", cmd->trace2_child_id);
+	strbuf_addf(&buf_payload, "child_start[%d]", cmd->trace2_child_id);
 
 	if (cmd->dir) {
-		strbuf_addstr(&buf_payload, " cd");
+		strbuf_addstr(&buf_payload, " cd ");
 		sq_quote_buf_pretty(&buf_payload, cmd->dir);
-		strbuf_addstr(&buf_payload, "; ");
+		strbuf_addstr(&buf_payload, ";");
 	}
 
 	/*
@@ -213,9 +211,10 @@
 	 * See trace_add_env() in run-command.c as used by original trace.c
 	 */
 
+	strbuf_addch(&buf_payload, ' ');
 	if (cmd->git_cmd)
-		strbuf_addstr(&buf_payload, "git");
-	sq_quote_argv_pretty(&buf_payload, cmd->argv);
+		strbuf_addstr(&buf_payload, "git ");
+	sq_append_quote_argv_pretty(&buf_payload, cmd->argv);
 
 	normal_io_write_fl(file, line, &buf_payload);
 	strbuf_release(&buf_payload);
@@ -240,9 +239,11 @@
 	struct strbuf buf_payload = STRBUF_INIT;
 
 	strbuf_addf(&buf_payload, "exec[%d] ", exec_id);
-	if (exe)
+	if (exe) {
 		strbuf_addstr(&buf_payload, exe);
-	sq_quote_argv_pretty(&buf_payload, argv);
+		strbuf_addch(&buf_payload, ' ');
+	}
+	sq_append_quote_argv_pretty(&buf_payload, argv);
 	normal_io_write_fl(file, line, &buf_payload);
 	strbuf_release(&buf_payload);
 }
diff --git a/trace2/tr2_tgt_perf.c b/trace2/tr2_tgt_perf.c
index ea0cbbe..ffac802 100644
--- a/trace2/tr2_tgt_perf.c
+++ b/trace2/tr2_tgt_perf.c
@@ -11,7 +11,7 @@
 #include "trace2/tr2_tgt.h"
 #include "trace2/tr2_tls.h"
 
-static struct tr2_dst tr2dst_perf = { TR2_SYSENV_PERF, 0, 0, 0 };
+static struct tr2_dst tr2dst_perf = { TR2_SYSENV_PERF, 0, 0, 0, 0 };
 
 /*
  * Use TR2_SYSENV_PERF_BRIEF to omit the "<time> <file>:<line>"
@@ -21,10 +21,10 @@
  */
 static int tr2env_perf_be_brief;
 
-#define TR2FMT_PERF_FL_WIDTH (50)
+#define TR2FMT_PERF_FL_WIDTH (28)
 #define TR2FMT_PERF_MAX_EVENT_NAME (12)
-#define TR2FMT_PERF_REPO_WIDTH (4)
-#define TR2FMT_PERF_CATEGORY_WIDTH (10)
+#define TR2FMT_PERF_REPO_WIDTH (3)
+#define TR2FMT_PERF_CATEGORY_WIDTH (12)
 
 #define TR2_DOTS_BUFFER_SIZE (100)
 #define TR2_INDENT (2)
@@ -79,17 +79,36 @@
 
 	if (!tr2env_perf_be_brief) {
 		struct tr2_tbuf tb_now;
+		size_t fl_end_col;
 
 		tr2_tbuf_local_time(&tb_now);
 		strbuf_addstr(buf, tb_now.buf);
 		strbuf_addch(buf, ' ');
 
-		if (file && *file)
-			strbuf_addf(buf, "%s:%d ", file, line);
-		while (buf->len < TR2FMT_PERF_FL_WIDTH)
+		fl_end_col = buf->len + TR2FMT_PERF_FL_WIDTH;
+
+		if (file && *file) {
+			struct strbuf buf_fl = STRBUF_INIT;
+
+			strbuf_addf(&buf_fl, "%s:%d", file, line);
+
+			if (buf_fl.len <= TR2FMT_PERF_FL_WIDTH)
+				strbuf_addbuf(buf, &buf_fl);
+			else {
+				size_t avail = TR2FMT_PERF_FL_WIDTH - 3;
+				strbuf_addstr(buf, "...");
+				strbuf_add(buf,
+					   &buf_fl.buf[buf_fl.len - avail],
+					   avail);
+			}
+
+			strbuf_release(&buf_fl);
+		}
+
+		while (buf->len < fl_end_col)
 			strbuf_addch(buf, ' ');
 
-		strbuf_addstr(buf, "| ");
+		strbuf_addstr(buf, " | ");
 	}
 
 	strbuf_addf(buf, "d%d | ", tr2_sid_depth());
@@ -102,7 +121,7 @@
 		strbuf_addf(buf, "r%d ", repo->trace2_repo_id);
 	while (buf->len < len)
 		strbuf_addch(buf, ' ');
-	strbuf_addstr(buf, "| ");
+	strbuf_addstr(buf, " | ");
 
 	if (p_us_elapsed_absolute)
 		strbuf_addf(buf, "%9.6f | ",
@@ -116,8 +135,8 @@
 	else
 		strbuf_addf(buf, "%9s | ", " ");
 
-	strbuf_addf(buf, "%-*s | ", TR2FMT_PERF_CATEGORY_WIDTH,
-		    (category ? category : ""));
+	strbuf_addf(buf, "%-*.*s | ", TR2FMT_PERF_CATEGORY_WIDTH,
+		    TR2FMT_PERF_CATEGORY_WIDTH, (category ? category : ""));
 
 	if (ctx->nr_open_regions > 0) {
 		int len_indent = TR2_INDENT_LENGTH(ctx);
@@ -165,7 +184,7 @@
 	const char *event_name = "start";
 	struct strbuf buf_payload = STRBUF_INIT;
 
-	sq_quote_argv_pretty(&buf_payload, argv);
+	sq_append_quote_argv_pretty(&buf_payload, argv);
 
 	perf_io_write_fl(file, line, event_name, NULL, &us_elapsed_absolute,
 			 NULL, NULL, &buf_payload);
@@ -220,11 +239,6 @@
 		va_end(copy_ap);
 		return;
 	}
-
-	if (fmt && *fmt) {
-		strbuf_addstr(buf, fmt);
-		return;
-	}
 }
 
 static void fn_error_va_fl(const char *file, int line, const char *fmt,
@@ -285,8 +299,9 @@
 	const char *event_name = "alias";
 	struct strbuf buf_payload = STRBUF_INIT;
 
-	strbuf_addf(&buf_payload, "alias:%s argv:", alias);
-	sq_quote_argv_pretty(&buf_payload, argv);
+	strbuf_addf(&buf_payload, "alias:%s argv:[", alias);
+	sq_append_quote_argv_pretty(&buf_payload, argv);
+	strbuf_addch(&buf_payload, ']');
 
 	perf_io_write_fl(file, line, event_name, NULL, NULL, NULL, NULL,
 			 &buf_payload);
@@ -315,10 +330,14 @@
 		sq_quote_buf_pretty(&buf_payload, cmd->dir);
 	}
 
-	strbuf_addstr(&buf_payload, " argv:");
-	if (cmd->git_cmd)
-		strbuf_addstr(&buf_payload, " git");
-	sq_quote_argv_pretty(&buf_payload, cmd->argv);
+	strbuf_addstr(&buf_payload, " argv:[");
+	if (cmd->git_cmd) {
+		strbuf_addstr(&buf_payload, "git");
+		if (cmd->argv[0])
+			strbuf_addch(&buf_payload, ' ');
+	}
+	sq_append_quote_argv_pretty(&buf_payload, cmd->argv);
+	strbuf_addch(&buf_payload, ']');
 
 	perf_io_write_fl(file, line, event_name, NULL, &us_elapsed_absolute,
 			 NULL, NULL, &buf_payload);
@@ -369,10 +388,14 @@
 	struct strbuf buf_payload = STRBUF_INIT;
 
 	strbuf_addf(&buf_payload, "id:%d ", exec_id);
-	strbuf_addstr(&buf_payload, "argv:");
-	if (exe)
-		strbuf_addf(&buf_payload, " %s", exe);
-	sq_quote_argv_pretty(&buf_payload, argv);
+	strbuf_addstr(&buf_payload, "argv:[");
+	if (exe) {
+		strbuf_addstr(&buf_payload, exe);
+		if (argv[0])
+			strbuf_addch(&buf_payload, ' ');
+	}
+	sq_append_quote_argv_pretty(&buf_payload, argv);
+	strbuf_addch(&buf_payload, ']');
 
 	perf_io_write_fl(file, line, event_name, NULL, &us_elapsed_absolute,
 			 NULL, NULL, &buf_payload);
@@ -433,8 +456,11 @@
 	struct strbuf buf_payload = STRBUF_INIT;
 
 	if (label)
-		strbuf_addf(&buf_payload, "label:%s ", label);
-	maybe_append_string_va(&buf_payload, fmt, ap);
+		strbuf_addf(&buf_payload, "label:%s", label);
+	if (fmt && *fmt) {
+		strbuf_addch(&buf_payload, ' ');
+		maybe_append_string_va(&buf_payload, fmt, ap);
+	}
 
 	perf_io_write_fl(file, line, event_name, repo, &us_elapsed_absolute,
 			 NULL, category, &buf_payload);
@@ -450,8 +476,11 @@
 	struct strbuf buf_payload = STRBUF_INIT;
 
 	if (label)
-		strbuf_addf(&buf_payload, "label:%s ", label);
-	maybe_append_string_va(&buf_payload, fmt, ap);
+		strbuf_addf(&buf_payload, "label:%s", label);
+	if (fmt && *fmt) {
+		strbuf_addch(&buf_payload, ' ' );
+		maybe_append_string_va(&buf_payload, fmt, ap);
+	}
 
 	perf_io_write_fl(file, line, event_name, repo, &us_elapsed_absolute,
 			 &us_elapsed_region, category, &buf_payload);
diff --git a/transport-helper.c b/transport-helper.c
index f828a6d..413d9d8 100644
--- a/transport-helper.c
+++ b/transport-helper.c
@@ -33,6 +33,16 @@
 		check_connectivity : 1,
 		no_disconnect_req : 1,
 		no_private_update : 1;
+
+	/*
+	 * As an optimization, the transport code may invoke fetch before
+	 * get_refs_list. If this happens, and if the transport helper doesn't
+	 * support connect or stateless_connect, we need to invoke
+	 * get_refs_list ourselves if we haven't already done so. Keep track of
+	 * whether we have invoked get_refs_list.
+	 */
+	unsigned get_refs_list_called : 1;
+
 	char *export_marks;
 	char *import_marks;
 	/* These go from remote name (as in "list") to private name */
@@ -653,17 +663,25 @@
 	return 0;
 }
 
+static struct ref *get_refs_list_using_list(struct transport *transport,
+					    int for_push);
+
 static int fetch(struct transport *transport,
 		 int nr_heads, struct ref **to_fetch)
 {
 	struct helper_data *data = transport->data;
 	int i, count;
 
+	get_helper(transport);
+
 	if (process_connect(transport, 0)) {
 		do_take_over(transport);
 		return transport->vtable->fetch(transport, nr_heads, to_fetch);
 	}
 
+	if (!data->get_refs_list_called)
+		get_refs_list_using_list(transport, 0);
+
 	count = 0;
 	for (i = 0; i < nr_heads; i++)
 		if (!(to_fetch[i]->status & REF_STATUS_UPTODATE))
@@ -683,13 +701,9 @@
 		set_helper_option(transport, "update-shallow", "true");
 
 	if (data->transport_options.filter_options.choice) {
-		struct strbuf expanded_filter_spec = STRBUF_INIT;
-		expand_list_objects_filter_spec(
-			&data->transport_options.filter_options,
-			&expanded_filter_spec);
-		set_helper_option(transport, "filter",
-				  expanded_filter_spec.buf);
-		strbuf_release(&expanded_filter_spec);
+		const char *spec = expand_list_objects_filter_spec(
+			&data->transport_options.filter_options);
+		set_helper_option(transport, "filter", spec);
 	}
 
 	if (data->transport_options.negotiation_tips)
@@ -841,6 +855,10 @@
 			die(_("helper %s does not support --signed=if-asked"), name);
 	}
 
+	if (flags & TRANSPORT_PUSH_ATOMIC)
+		if (set_helper_option(transport, TRANS_OPT_ATOMIC, "true") != 0)
+			die(_("helper %s does not support --atomic"), name);
+
 	if (flags & TRANSPORT_PUSH_OPTIONS) {
 		struct string_list_item *item;
 		for_each_string_list_item(item, transport->push_options)
@@ -1060,6 +1078,19 @@
 static struct ref *get_refs_list(struct transport *transport, int for_push,
 				 const struct argv_array *ref_prefixes)
 {
+	get_helper(transport);
+
+	if (process_connect(transport, for_push)) {
+		do_take_over(transport);
+		return transport->vtable->get_refs_list(transport, for_push, ref_prefixes);
+	}
+
+	return get_refs_list_using_list(transport, for_push);
+}
+
+static struct ref *get_refs_list_using_list(struct transport *transport,
+					    int for_push)
+{
 	struct helper_data *data = transport->data;
 	struct child_process *helper;
 	struct ref *ret = NULL;
@@ -1067,13 +1098,9 @@
 	struct ref *posn;
 	struct strbuf buf = STRBUF_INIT;
 
+	data->get_refs_list_called = 1;
 	helper = get_helper(transport);
 
-	if (process_connect(transport, for_push)) {
-		do_take_over(transport);
-		return transport->vtable->get_refs_list(transport, for_push, ref_prefixes);
-	}
-
 	if (data->push && for_push)
 		write_str_in_full(helper->in, "list for-push\n");
 	else
@@ -1120,7 +1147,6 @@
 }
 
 static struct transport_vtable vtable = {
-	0,
 	set_helper_option,
 	get_refs_list,
 	fetch,
diff --git a/transport-internal.h b/transport-internal.h
index 004bee5..1cde625 100644
--- a/transport-internal.h
+++ b/transport-internal.h
@@ -7,12 +7,6 @@
 
 struct transport_vtable {
 	/**
-	 * This transport supports the fetch() function being called
-	 * without get_refs_list() first being called.
-	 */
-	unsigned fetch_without_list : 1;
-
-	/**
 	 * Returns 0 if successful, positive if the option is not
 	 * recognized or is inapplicable, and negative if the option
 	 * is applicable but the value is invalid.
diff --git a/transport.c b/transport.c
index 778c60b..83379a0 100644
--- a/transport.c
+++ b/transport.c
@@ -122,6 +122,7 @@
 struct bundle_transport_data {
 	int fd;
 	struct bundle_header header;
+	unsigned get_refs_from_bundle_called : 1;
 };
 
 static struct ref *get_refs_from_bundle(struct transport *transport,
@@ -135,6 +136,8 @@
 	if (for_push)
 		return NULL;
 
+	data->get_refs_from_bundle_called = 1;
+
 	if (data->fd > 0)
 		close(data->fd);
 	data->fd = read_bundle_header(transport->url, &data->header);
@@ -154,6 +157,9 @@
 			       int nr_heads, struct ref **to_fetch)
 {
 	struct bundle_transport_data *data = transport->data;
+
+	if (!data->get_refs_from_bundle_called)
+		get_refs_from_bundle(transport, 0, NULL);
 	return unbundle(the_repository, &data->header, data->fd,
 			transport->progress ? BUNDLE_VERBOSE : 0);
 }
@@ -224,6 +230,7 @@
 		opts->no_dependents = !!value;
 		return 0;
 	} else if (!strcmp(name, TRANS_OPT_LIST_OBJECTS_FILTER)) {
+		list_objects_filter_die_if_populated(&opts->filter_options);
 		parse_list_objects_filter(&opts->filter_options, value);
 		return 0;
 	}
@@ -742,7 +749,6 @@
 }
 
 static struct transport_vtable taken_over_vtable = {
-	1,
 	NULL,
 	get_refs_via_connect,
 	fetch_refs_via_pack,
@@ -892,7 +898,6 @@
 }
 
 static struct transport_vtable bundle_vtable = {
-	0,
 	NULL,
 	get_refs_from_bundle,
 	fetch_refs_from_bundle,
@@ -902,7 +907,6 @@
 };
 
 static struct transport_vtable builtin_smart_vtable = {
-	1,
 	NULL,
 	get_refs_via_connect,
 	fetch_refs_via_pack,
@@ -1141,8 +1145,10 @@
 
 		refspec_ref_prefixes(rs, &ref_prefixes);
 
+		trace2_region_enter("transport_push", "get_refs_list", r);
 		remote_refs = transport->vtable->get_refs_list(transport, 1,
 							       &ref_prefixes);
+		trace2_region_leave("transport_push", "get_refs_list", r);
 
 		argv_array_clear(&ref_prefixes);
 
@@ -1178,6 +1184,7 @@
 			struct ref *ref = remote_refs;
 			struct oid_array commits = OID_ARRAY_INIT;
 
+			trace2_region_enter("transport_push", "push_submodules", r);
 			for (; ref; ref = ref->next)
 				if (!is_null_oid(&ref->new_oid))
 					oid_array_append(&commits,
@@ -1190,9 +1197,11 @@
 						      transport->push_options,
 						      pretend)) {
 				oid_array_clear(&commits);
+				trace2_region_leave("transport_push", "push_submodules", r);
 				die(_("failed to push all needed submodules"));
 			}
 			oid_array_clear(&commits);
+			trace2_region_leave("transport_push", "push_submodules", r);
 		}
 
 		if (((flags & TRANSPORT_RECURSE_SUBMODULES_CHECK) ||
@@ -1203,6 +1212,7 @@
 			struct string_list needs_pushing = STRING_LIST_INIT_DUP;
 			struct oid_array commits = OID_ARRAY_INIT;
 
+			trace2_region_enter("transport_push", "check_submodules", r);
 			for (; ref; ref = ref->next)
 				if (!is_null_oid(&ref->new_oid))
 					oid_array_append(&commits,
@@ -1213,15 +1223,19 @@
 						     transport->remote->name,
 						     &needs_pushing)) {
 				oid_array_clear(&commits);
+				trace2_region_leave("transport_push", "check_submodules", r);
 				die_with_unpushed_submodules(&needs_pushing);
 			}
 			string_list_clear(&needs_pushing, 0);
 			oid_array_clear(&commits);
+			trace2_region_leave("transport_push", "check_submodules", r);
 		}
 
-		if (!(flags & TRANSPORT_RECURSE_SUBMODULES_ONLY))
+		if (!(flags & TRANSPORT_RECURSE_SUBMODULES_ONLY)) {
+			trace2_region_enter("transport_push", "push_refs", r);
 			push_ret = transport->vtable->push_refs(transport, remote_refs, flags);
-		else
+			trace2_region_leave("transport_push", "push_refs", r);
+		} else
 			push_ret = 0;
 		err = push_had_errors(remote_refs);
 		ret = push_ret | err;
@@ -1285,15 +1299,6 @@
 	struct ref **heads = NULL;
 	struct ref *rm;
 
-	if (!transport->vtable->fetch_without_list)
-		/*
-		 * Some transports (e.g. the built-in bundle transport and the
-		 * transport helper interface) do not work when fetching is
-		 * done immediately after transport creation. List the remote
-		 * refs anyway (if not already listed) as a workaround.
-		 */
-		transport_get_remote_refs(transport, NULL);
-
 	for (rm = refs; rm; rm = rm->next) {
 		nr_refs++;
 		if (rm->peer_ref &&
diff --git a/transport.h b/transport.h
index 0b5f780..e0131da 100644
--- a/transport.h
+++ b/transport.h
@@ -208,6 +208,9 @@
 /* Filter objects for partial clone and fetch */
 #define TRANS_OPT_LIST_OBJECTS_FILTER "filter"
 
+/* Request atomic (all-or-nothing) updates when pushing */
+#define TRANS_OPT_ATOMIC "atomic"
+
 /**
  * Returns 0 if the option was used, non-zero otherwise. Prints a
  * message to stderr if the option is not used.
diff --git a/tree-walk.c b/tree-walk.c
index 4eaf29f..31cec2a 100644
--- a/tree-walk.c
+++ b/tree-walk.c
@@ -176,40 +176,61 @@
 
 void setup_traverse_info(struct traverse_info *info, const char *base)
 {
-	int pathlen = strlen(base);
+	size_t pathlen = strlen(base);
 	static struct traverse_info dummy;
 
 	memset(info, 0, sizeof(*info));
 	if (pathlen && base[pathlen-1] == '/')
 		pathlen--;
 	info->pathlen = pathlen ? pathlen + 1 : 0;
-	info->name.path = base;
-	info->name.pathlen = pathlen;
-	if (pathlen) {
-		hashcpy(info->name.oid.hash, (const unsigned char *)base + pathlen + 1);
+	info->name = base;
+	info->namelen = pathlen;
+	if (pathlen)
 		info->prev = &dummy;
-	}
 }
 
-char *make_traverse_path(char *path, const struct traverse_info *info, const struct name_entry *n)
+char *make_traverse_path(char *path, size_t pathlen,
+			 const struct traverse_info *info,
+			 const char *name, size_t namelen)
 {
-	int len = tree_entry_len(n);
-	int pathlen = info->pathlen;
+	/* Always points to the end of the name we're about to add */
+	size_t pos = st_add(info->pathlen, namelen);
 
-	path[pathlen + len] = 0;
+	if (pos >= pathlen)
+		BUG("too small buffer passed to make_traverse_path");
+
+	path[pos] = 0;
 	for (;;) {
-		memcpy(path + pathlen, n->path, len);
-		if (!pathlen)
+		if (pos < namelen)
+			BUG("traverse_info pathlen does not match strings");
+		pos -= namelen;
+		memcpy(path + pos, name, namelen);
+
+		if (!pos)
 			break;
-		path[--pathlen] = '/';
-		n = &info->name;
-		len = tree_entry_len(n);
+		path[--pos] = '/';
+
+		if (!info)
+			BUG("traverse_info ran out of list items");
+		name = info->name;
+		namelen = info->namelen;
 		info = info->prev;
-		pathlen -= len;
 	}
 	return path;
 }
 
+void strbuf_make_traverse_path(struct strbuf *out,
+			       const struct traverse_info *info,
+			       const char *name, size_t namelen)
+{
+	size_t len = traverse_path_len(info, namelen);
+
+	strbuf_grow(out, len);
+	make_traverse_path(out->buf + out->len, out->alloc - out->len,
+			   info, name, namelen);
+	strbuf_setlen(out, out->len + len);
+}
+
 struct tree_desc_skip {
 	struct tree_desc_skip *prev;
 	const void *ptr;
@@ -406,13 +427,12 @@
 		tx[i].d = t[i];
 
 	if (info->prev) {
-		strbuf_grow(&base, info->pathlen);
-		make_traverse_path(base.buf, info->prev, &info->name);
-		base.buf[info->pathlen-1] = '/';
-		strbuf_setlen(&base, info->pathlen);
-		traverse_path = xstrndup(base.buf, info->pathlen);
+		strbuf_make_traverse_path(&base, info->prev,
+					  info->name, info->namelen);
+		strbuf_addch(&base, '/');
+		traverse_path = xstrndup(base.buf, base.len);
 	} else {
-		traverse_path = xstrndup(info->name.path, info->pathlen);
+		traverse_path = xstrndup(info->name, info->pathlen);
 	}
 	info->traverse_path = traverse_path;
 	for (;;) {
diff --git a/tree-walk.h b/tree-walk.h
index 2a5db29..abe2caf 100644
--- a/tree-walk.h
+++ b/tree-walk.h
@@ -58,8 +58,11 @@
 struct traverse_info {
 	const char *traverse_path;
 	struct traverse_info *prev;
-	struct name_entry name;
-	int pathlen;
+	const char *name;
+	size_t namelen;
+	unsigned mode;
+
+	size_t pathlen;
 	struct pathspec *pathspec;
 
 	unsigned long df_conflicts;
@@ -69,12 +72,17 @@
 };
 
 int get_tree_entry(struct repository *, const struct object_id *, const char *, struct object_id *, unsigned short *);
-char *make_traverse_path(char *path, const struct traverse_info *info, const struct name_entry *n);
+char *make_traverse_path(char *path, size_t pathlen, const struct traverse_info *info,
+			 const char *name, size_t namelen);
+void strbuf_make_traverse_path(struct strbuf *out,
+			       const struct traverse_info *info,
+			       const char *name, size_t namelen);
 void setup_traverse_info(struct traverse_info *info, const char *base);
 
-static inline int traverse_path_len(const struct traverse_info *info, const struct name_entry *n)
+static inline size_t traverse_path_len(const struct traverse_info *info,
+				       size_t namelen)
 {
-	return info->pathlen + tree_entry_len(n);
+	return st_add(info->pathlen, namelen);
 }
 
 /* in general, positive means "kind of interesting" */
diff --git a/tree.c b/tree.c
index 4720945..1466bcc 100644
--- a/tree.c
+++ b/tree.c
@@ -244,19 +244,7 @@
 
 struct tree *parse_tree_indirect(const struct object_id *oid)
 {
-	struct object *obj = parse_object(the_repository, oid);
-	do {
-		if (!obj)
-			return NULL;
-		if (obj->type == OBJ_TREE)
-			return (struct tree *) obj;
-		else if (obj->type == OBJ_COMMIT)
-			obj = &(get_commit_tree(((struct commit *)obj))->object);
-		else if (obj->type == OBJ_TAG)
-			obj = ((struct tag *) obj)->tagged;
-		else
-			return NULL;
-		if (!obj->parsed)
-			parse_object(the_repository, &obj->oid);
-	} while (1);
+	struct repository *r = the_repository;
+	struct object *obj = parse_object(r, oid);
+	return (struct tree *)repo_peel_to_type(r, NULL, 0, obj, OBJ_TREE);
 }
diff --git a/unpack-trees.c b/unpack-trees.c
index 9346c66..2de6368 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c
@@ -11,12 +11,11 @@
 #include "refs.h"
 #include "attr.h"
 #include "split-index.h"
-#include "dir.h"
 #include "submodule.h"
 #include "submodule-config.h"
 #include "fsmonitor.h"
 #include "object-store.h"
-#include "fetch-object.h"
+#include "promisor-remote.h"
 
 /*
  * Error messages expected by scripts out of plumbing commands such as
@@ -400,7 +399,7 @@
 		load_gitmodules_file(index, &state);
 
 	enable_delayed_checkout(&state);
-	if (repository_format_partial_clone && o->update && !o->dry_run) {
+	if (has_promisor_remote() && o->update && !o->dry_run) {
 		/*
 		 * Prefetch the objects that are to be checked out in the loop
 		 * below.
@@ -419,8 +418,8 @@
 			oid_array_append(&to_fetch, &ce->oid);
 		}
 		if (to_fetch.nr)
-			fetch_objects(repository_format_partial_clone,
-				      to_fetch.oid, to_fetch.nr);
+			promisor_remote_get_direct(the_repository,
+						   to_fetch.oid, to_fetch.nr);
 		oid_array_clear(&to_fetch);
 	}
 	for (i = 0; i < index->cache_nr; i++) {
@@ -632,7 +631,7 @@
 	return ret;
 }
 
-static int find_cache_pos(struct traverse_info *, const struct name_entry *);
+static int find_cache_pos(struct traverse_info *, const char *p, size_t len);
 
 static void restore_cache_bottom(struct traverse_info *info, int bottom)
 {
@@ -651,7 +650,7 @@
 	if (o->diff_index_cached)
 		return 0;
 	ret = o->cache_bottom;
-	pos = find_cache_pos(info->prev, &info->name);
+	pos = find_cache_pos(info->prev, info->name, info->namelen);
 
 	if (pos < -1)
 		o->cache_bottom = -2 - pos;
@@ -686,21 +685,19 @@
 				      struct traverse_info *info)
 {
 	struct unpack_trees_options *o = info->data;
-	int len = traverse_path_len(info, names);
-	char *name = xmalloc(len + 1 /* slash */ + 1 /* NUL */);
+	struct strbuf name = STRBUF_INIT;
 	int pos;
 
-	make_traverse_path(name, info, names);
-	name[len++] = '/';
-	name[len] = '\0';
-	pos = index_name_pos(o->src_index, name, len);
+	strbuf_make_traverse_path(&name, info, names->path, names->pathlen);
+	strbuf_addch(&name, '/');
+	pos = index_name_pos(o->src_index, name.buf, name.len);
 	if (pos >= 0)
 		BUG("This is a directory and should not exist in index");
 	pos = -pos - 1;
-	if (!starts_with(o->src_index->cache[pos]->name, name) ||
-	    (pos > 0 && starts_with(o->src_index->cache[pos-1]->name, name)))
+	if (!starts_with(o->src_index->cache[pos]->name, name.buf) ||
+	    (pos > 0 && starts_with(o->src_index->cache[pos-1]->name, name.buf)))
 		BUG("pos must point at the first entry in this directory");
-	free(name);
+	strbuf_release(&name);
 	return pos;
 }
 
@@ -811,8 +808,10 @@
 	newinfo = *info;
 	newinfo.prev = info;
 	newinfo.pathspec = info->pathspec;
-	newinfo.name = *p;
-	newinfo.pathlen += tree_entry_len(p) + 1;
+	newinfo.name = p->path;
+	newinfo.namelen = p->pathlen;
+	newinfo.mode = p->mode;
+	newinfo.pathlen = st_add3(newinfo.pathlen, tree_entry_len(p), 1);
 	newinfo.df_conflicts |= df_conflicts;
 
 	/*
@@ -863,14 +862,18 @@
  * itself - the caller needs to do the final check for the cache
  * entry having more data at the end!
  */
-static int do_compare_entry_piecewise(const struct cache_entry *ce, const struct traverse_info *info, const struct name_entry *n)
+static int do_compare_entry_piecewise(const struct cache_entry *ce,
+				      const struct traverse_info *info,
+				      const char *name, size_t namelen,
+				      unsigned mode)
 {
-	int len, pathlen, ce_len;
+	int pathlen, ce_len;
 	const char *ce_name;
 
 	if (info->prev) {
 		int cmp = do_compare_entry_piecewise(ce, info->prev,
-						     &info->name);
+						     info->name, info->namelen,
+						     info->mode);
 		if (cmp)
 			return cmp;
 	}
@@ -884,15 +887,15 @@
 	ce_len -= pathlen;
 	ce_name = ce->name + pathlen;
 
-	len = tree_entry_len(n);
-	return df_name_compare(ce_name, ce_len, S_IFREG, n->path, len, n->mode);
+	return df_name_compare(ce_name, ce_len, S_IFREG, name, namelen, mode);
 }
 
 static int do_compare_entry(const struct cache_entry *ce,
 			    const struct traverse_info *info,
-			    const struct name_entry *n)
+			    const char *name, size_t namelen,
+			    unsigned mode)
 {
-	int len, pathlen, ce_len;
+	int pathlen, ce_len;
 	const char *ce_name;
 	int cmp;
 
@@ -902,7 +905,7 @@
 	 * it is quicker to use the precomputed version.
 	 */
 	if (!info->traverse_path)
-		return do_compare_entry_piecewise(ce, info, n);
+		return do_compare_entry_piecewise(ce, info, name, namelen, mode);
 
 	cmp = strncmp(ce->name, info->traverse_path, info->pathlen);
 	if (cmp)
@@ -917,13 +920,12 @@
 	ce_len -= pathlen;
 	ce_name = ce->name + pathlen;
 
-	len = tree_entry_len(n);
-	return df_name_compare(ce_name, ce_len, S_IFREG, n->path, len, n->mode);
+	return df_name_compare(ce_name, ce_len, S_IFREG, name, namelen, mode);
 }
 
 static int compare_entry(const struct cache_entry *ce, const struct traverse_info *info, const struct name_entry *n)
 {
-	int cmp = do_compare_entry(ce, info, n);
+	int cmp = do_compare_entry(ce, info, n->path, n->pathlen, n->mode);
 	if (cmp)
 		return cmp;
 
@@ -931,7 +933,7 @@
 	 * Even if the beginning compared identically, the ce should
 	 * compare as bigger than a directory leading up to it!
 	 */
-	return ce_namelen(ce) > traverse_path_len(info, n);
+	return ce_namelen(ce) > traverse_path_len(info, tree_entry_len(n));
 }
 
 static int ce_in_traverse_path(const struct cache_entry *ce,
@@ -939,7 +941,8 @@
 {
 	if (!info->prev)
 		return 1;
-	if (do_compare_entry(ce, info->prev, &info->name))
+	if (do_compare_entry(ce, info->prev,
+			     info->name, info->namelen, info->mode))
 		return 0;
 	/*
 	 * If ce (blob) is the same name as the path (which is a tree
@@ -954,7 +957,7 @@
 	struct index_state *istate,
 	int is_transient)
 {
-	int len = traverse_path_len(info, n);
+	size_t len = traverse_path_len(info, tree_entry_len(n));
 	struct cache_entry *ce =
 		is_transient ?
 		make_empty_transient_cache_entry(len) :
@@ -964,7 +967,8 @@
 	ce->ce_flags = create_ce_flags(stage);
 	ce->ce_namelen = len;
 	oidcpy(&ce->oid, &n->oid);
-	make_traverse_path(ce->name, info, n);
+	/* len+1 because the cache_entry allocates space for NUL */
+	make_traverse_path(ce->name, len + 1, info, n->path, n->pathlen);
 
 	return ce;
 }
@@ -1057,13 +1061,12 @@
  * the directory.
  */
 static int find_cache_pos(struct traverse_info *info,
-			  const struct name_entry *p)
+			  const char *p, size_t p_len)
 {
 	int pos;
 	struct unpack_trees_options *o = info->data;
 	struct index_state *index = o->src_index;
 	int pfxlen = info->pathlen;
-	int p_len = tree_entry_len(p);
 
 	for (pos = o->cache_bottom; pos < index->cache_nr; pos++) {
 		const struct cache_entry *ce = index->cache[pos];
@@ -1099,7 +1102,7 @@
 			ce_len = ce_slash - ce_name;
 		else
 			ce_len = ce_namelen(ce) - pfxlen;
-		cmp = name_compare(p->path, p_len, ce_name, ce_len);
+		cmp = name_compare(p, p_len, ce_name, ce_len);
 		/*
 		 * Exact match; if we have a directory we need to
 		 * delay returning it.
@@ -1114,7 +1117,7 @@
 		 * E.g.  ce_name == "t-i", and p->path == "t"; we may
 		 * have "t/a" in the index.
 		 */
-		if (p_len < ce_len && !memcmp(ce_name, p->path, p_len) &&
+		if (p_len < ce_len && !memcmp(ce_name, p, p_len) &&
 		    ce_name[p_len] < '/')
 			continue; /* keep looking */
 		break;
@@ -1125,7 +1128,7 @@
 static struct cache_entry *find_cache_entry(struct traverse_info *info,
 					    const struct name_entry *p)
 {
-	int pos = find_cache_pos(info, p);
+	int pos = find_cache_pos(info, p->path, p->pathlen);
 	struct unpack_trees_options *o = info->data;
 
 	if (0 <= pos)
@@ -1138,10 +1141,10 @@
 {
 	if (info->prev) {
 		debug_path(info->prev);
-		if (*info->prev->name.path)
+		if (*info->prev->name)
 			putchar('/');
 	}
-	printf("%s", info->name.path);
+	printf("%s", info->name);
 }
 
 static void debug_name_entry(int i, struct name_entry *n)
@@ -1265,7 +1268,8 @@
 			    struct cache_entry **cache, int nr,
 			    struct strbuf *prefix,
 			    int select_mask, int clear_mask,
-			    struct exclude_list *el, int defval);
+			    struct pattern_list *pl,
+			    enum pattern_match_result default_match);
 
 /* Whole directory matching */
 static int clear_ce_flags_dir(struct index_state *istate,
@@ -1273,19 +1277,21 @@
 			      struct strbuf *prefix,
 			      char *basename,
 			      int select_mask, int clear_mask,
-			      struct exclude_list *el, int defval)
+			      struct pattern_list *pl,
+			      enum pattern_match_result default_match)
 {
 	struct cache_entry **cache_end;
 	int dtype = DT_DIR;
-	int ret = is_excluded_from_list(prefix->buf, prefix->len,
-					basename, &dtype, el, istate);
 	int rc;
+	enum pattern_match_result ret;
+	ret = path_matches_pattern_list(prefix->buf, prefix->len,
+					basename, &dtype, pl, istate);
 
 	strbuf_addch(prefix, '/');
 
 	/* If undecided, use matching result of parent dir in defval */
-	if (ret < 0)
-		ret = defval;
+	if (ret == UNDECIDED)
+		ret = default_match;
 
 	for (cache_end = cache; cache_end != cache + nr; cache_end++) {
 		struct cache_entry *ce = *cache_end;
@@ -1294,23 +1300,23 @@
 	}
 
 	/*
-	 * TODO: check el, if there are no patterns that may conflict
+	 * TODO: check pl, if there are no patterns that may conflict
 	 * with ret (iow, we know in advance the incl/excl
 	 * decision for the entire directory), clear flag here without
 	 * calling clear_ce_flags_1(). That function will call
-	 * the expensive is_excluded_from_list() on every entry.
+	 * the expensive path_matches_pattern_list() on every entry.
 	 */
 	rc = clear_ce_flags_1(istate, cache, cache_end - cache,
 			      prefix,
 			      select_mask, clear_mask,
-			      el, ret);
+			      pl, ret);
 	strbuf_setlen(prefix, prefix->len - 1);
 	return rc;
 }
 
 /*
  * Traverse the index, find every entry that matches according to
- * o->el. Do "ce_flags &= ~clear_mask" on those entries. Return the
+ * o->pl. Do "ce_flags &= ~clear_mask" on those entries. Return the
  * number of traversed entries.
  *
  * If select_mask is non-zero, only entries whose ce_flags has on of
@@ -1327,7 +1333,8 @@
 			    struct cache_entry **cache, int nr,
 			    struct strbuf *prefix,
 			    int select_mask, int clear_mask,
-			    struct exclude_list *el, int defval)
+			    struct pattern_list *pl,
+			    enum pattern_match_result default_match)
 {
 	struct cache_entry **cache_end = cache + nr;
 
@@ -1338,7 +1345,8 @@
 	while(cache != cache_end) {
 		struct cache_entry *ce = *cache;
 		const char *name, *slash;
-		int len, dtype, ret;
+		int len, dtype;
+		enum pattern_match_result ret;
 
 		if (select_mask && !(ce->ce_flags & select_mask)) {
 			cache++;
@@ -1362,7 +1370,7 @@
 						       prefix,
 						       prefix->buf + prefix->len - len,
 						       select_mask, clear_mask,
-						       el, defval);
+						       pl, default_match);
 
 			/* clear_c_f_dir eats a whole dir already? */
 			if (processed) {
@@ -1374,18 +1382,20 @@
 			strbuf_addch(prefix, '/');
 			cache += clear_ce_flags_1(istate, cache, cache_end - cache,
 						  prefix,
-						  select_mask, clear_mask, el, defval);
+						  select_mask, clear_mask, pl,
+						  default_match);
 			strbuf_setlen(prefix, prefix->len - len - 1);
 			continue;
 		}
 
 		/* Non-directory */
 		dtype = ce_to_dtype(ce);
-		ret = is_excluded_from_list(ce->name, ce_namelen(ce),
-					    name, &dtype, el, istate);
-		if (ret < 0)
-			ret = defval;
-		if (ret > 0)
+		ret = path_matches_pattern_list(ce->name,
+						ce_namelen(ce),
+						name, &dtype, pl, istate);
+		if (ret == UNDECIDED)
+			ret = default_match;
+		if (ret == MATCHED)
 			ce->ce_flags &= ~clear_mask;
 		cache++;
 	}
@@ -1394,7 +1404,7 @@
 
 static int clear_ce_flags(struct index_state *istate,
 			  int select_mask, int clear_mask,
-			  struct exclude_list *el)
+			  struct pattern_list *pl)
 {
 	static struct strbuf prefix = STRBUF_INIT;
 
@@ -1405,13 +1415,13 @@
 				istate->cache_nr,
 				&prefix,
 				select_mask, clear_mask,
-				el, 0);
+				pl, 0);
 }
 
 /*
  * Set/Clear CE_NEW_SKIP_WORKTREE according to $GIT_DIR/info/sparse-checkout
  */
-static void mark_new_skip_worktree(struct exclude_list *el,
+static void mark_new_skip_worktree(struct pattern_list *pl,
 				   struct index_state *istate,
 				   int select_flag, int skip_wt_flag)
 {
@@ -1437,7 +1447,7 @@
 	 * 2. Widen worktree according to sparse-checkout file.
 	 * Matched entries will have skip_wt_flag cleared (i.e. "in")
 	 */
-	clear_ce_flags(istate, select_flag, skip_wt_flag, el);
+	clear_ce_flags(istate, select_flag, skip_wt_flag, pl);
 }
 
 static int verify_absent(const struct cache_entry *,
@@ -1453,21 +1463,21 @@
 {
 	int i, ret;
 	static struct cache_entry *dfc;
-	struct exclude_list el;
+	struct pattern_list pl;
 
 	if (len > MAX_UNPACK_TREES)
 		die("unpack_trees takes at most %d trees", MAX_UNPACK_TREES);
 
 	trace_performance_enter();
-	memset(&el, 0, sizeof(el));
+	memset(&pl, 0, sizeof(pl));
 	if (!core_apply_sparse_checkout || !o->update)
 		o->skip_sparse_checkout = 1;
 	if (!o->skip_sparse_checkout) {
 		char *sparse = git_pathdup("info/sparse-checkout");
-		if (add_excludes_from_file_to_list(sparse, "", 0, &el, NULL) < 0)
+		if (add_patterns_from_file_to_list(sparse, "", 0, &pl, NULL) < 0)
 			o->skip_sparse_checkout = 1;
 		else
-			o->el = &el;
+			o->pl = &pl;
 		free(sparse);
 	}
 
@@ -1498,7 +1508,7 @@
 	 * Sparse checkout loop #1: set NEW_SKIP_WORKTREE on existing entries
 	 */
 	if (!o->skip_sparse_checkout)
-		mark_new_skip_worktree(o->el, o->src_index, 0, CE_NEW_SKIP_WORKTREE);
+		mark_new_skip_worktree(o->pl, o->src_index, 0, CE_NEW_SKIP_WORKTREE);
 
 	if (!dfc)
 		dfc = xcalloc(1, cache_entry_size(0));
@@ -1563,7 +1573,7 @@
 		 * If the will have NEW_SKIP_WORKTREE, also set CE_SKIP_WORKTREE
 		 * so apply_sparse_checkout() won't attempt to remove it from worktree
 		 */
-		mark_new_skip_worktree(o->el, &o->result, CE_ADDED, CE_SKIP_WORKTREE | CE_NEW_SKIP_WORKTREE);
+		mark_new_skip_worktree(o->pl, &o->result, CE_ADDED, CE_SKIP_WORKTREE | CE_NEW_SKIP_WORKTREE);
 
 		ret = 0;
 		for (i = 0; i < o->result.cache_nr; i++) {
@@ -1631,7 +1641,7 @@
 
 done:
 	trace_performance_leave("unpack_trees");
-	clear_exclude_list(&el);
+	clear_pattern_list(&pl);
 	return ret;
 
 return_failed:
diff --git a/unpack-trees.h b/unpack-trees.h
index d344d7d..f2eee0c 100644
--- a/unpack-trees.h
+++ b/unpack-trees.h
@@ -10,7 +10,7 @@
 
 struct cache_entry;
 struct unpack_trees_options;
-struct exclude_list;
+struct pattern_list;
 
 typedef int (*merge_fn_t)(const struct cache_entry * const *src,
 		struct unpack_trees_options *options);
@@ -83,7 +83,7 @@
 	struct index_state *src_index;
 	struct index_state result;
 
-	struct exclude_list *el; /* for internal use */
+	struct pattern_list *pl; /* for internal use */
 };
 
 int unpack_trees(unsigned n, struct tree_desc *t,
diff --git a/upload-pack.c b/upload-pack.c
index 222cd3a..a00d7ec 100644
--- a/upload-pack.c
+++ b/upload-pack.c
@@ -140,18 +140,17 @@
 		argv_array_push(&pack_objects.args, "--delta-base-offset");
 	if (use_include_tag)
 		argv_array_push(&pack_objects.args, "--include-tag");
-	if (filter_options.filter_spec) {
-		struct strbuf expanded_filter_spec = STRBUF_INIT;
-		expand_list_objects_filter_spec(&filter_options,
-						&expanded_filter_spec);
+	if (filter_options.choice) {
+		const char *spec =
+			expand_list_objects_filter_spec(&filter_options);
 		if (pack_objects.use_shell) {
 			struct strbuf buf = STRBUF_INIT;
-			sq_quote_buf(&buf, expanded_filter_spec.buf);
+			sq_quote_buf(&buf, spec);
 			argv_array_pushf(&pack_objects.args, "--filter=%s", buf.buf);
 			strbuf_release(&buf);
 		} else {
 			argv_array_pushf(&pack_objects.args, "--filter=%s",
-					 expanded_filter_spec.buf);
+					 spec);
 		}
 	}
 
@@ -722,7 +721,7 @@
 {
 	struct commit_list *result;
 
-	close_commit_graph(the_repository->objects);
+	disable_commit_graph(the_repository);
 	result = get_shallow_commits_by_rev_list(ac, av, SHALLOW, NOT_SHALLOW);
 	send_shallow(writer, result);
 	free_commit_list(result);
@@ -884,6 +883,7 @@
 		if (skip_prefix(reader->line, "filter ", &arg)) {
 			if (!filter_capability_requested)
 				die("git upload-pack: filtering capability not negotiated");
+			list_objects_filter_die_if_populated(&filter_options);
 			parse_list_objects_filter(&filter_options, arg);
 			continue;
 		}
@@ -1305,6 +1305,7 @@
 		}
 
 		if (allow_filter && skip_prefix(arg, "filter ", &p)) {
+			list_objects_filter_die_if_populated(&filter_options);
 			parse_list_objects_filter(&filter_options, p);
 			continue;
 		}
diff --git a/url.c b/url.c
index 1b8ef78..e34e5e7 100644
--- a/url.c
+++ b/url.c
@@ -86,6 +86,12 @@
 	return url_decode_internal(&url, len, NULL, &out, 0);
 }
 
+char *url_percent_decode(const char *encoded)
+{
+	struct strbuf out = STRBUF_INIT;
+	return url_decode_internal(&encoded, strlen(encoded), NULL, &out, 0);
+}
+
 char *url_decode_parameter_name(const char **query)
 {
 	struct strbuf out = STRBUF_INIT;
diff --git a/url.h b/url.h
index 00b7d58..2a27c34 100644
--- a/url.h
+++ b/url.h
@@ -7,6 +7,14 @@
 int is_urlschemechar(int first_flag, int ch);
 char *url_decode(const char *url);
 char *url_decode_mem(const char *url, int len);
+
+/*
+ * Similar to the url_decode_{,mem} methods above, but doesn't assume there
+ * is a scheme followed by a : at the start of the string. Instead, %-sequences
+ * before any : are also parsed.
+ */
+char *url_percent_decode(const char *encoded);
+
 char *url_decode_parameter_name(const char **query);
 char *url_decode_parameter_value(const char **query);
 
diff --git a/userdiff.c b/userdiff.c
index e74a6d4..e187d35 100644
--- a/userdiff.c
+++ b/userdiff.c
@@ -23,6 +23,15 @@
 	 "[a-zA-Z][a-zA-Z0-9_]*"
 	 "|[-+]?[0-9][0-9#_.aAbBcCdDeEfF]*([eE][+-]?[0-9_]+)?"
 	 "|=>|\\.\\.|\\*\\*|:=|/=|>=|<=|<<|>>|<>"),
+PATTERNS("dts",
+	 "!;\n"
+	 "!=\n"
+	 /* lines beginning with a word optionally preceded by '&' or the root */
+	 "^[ \t]*((/[ \t]*\\{|&?[a-zA-Z_]).*)",
+	 /* -- */
+	 /* Property names and math operators */
+	 "[a-zA-Z0-9,._+?#-]+"
+	 "|[-+*/%&^|!~]|>>|<<|&&|\\|\\|"),
 IPATTERN("fortran",
 	 "!^([C*]|[ \t]*!)\n"
 	 "!^[ \t]*MODULE[ \t]+PROCEDURE[ \t]\n"
diff --git a/utf8.c b/utf8.c
index 3b42fad..5c8f151 100644
--- a/utf8.c
+++ b/utf8.c
@@ -95,13 +95,11 @@
 		return -1;
 
 	/* binary search in table of non-spacing characters */
-	if (bisearch(ch, zero_width, sizeof(zero_width)
-				/ sizeof(struct interval) - 1))
+	if (bisearch(ch, zero_width, ARRAY_SIZE(zero_width) - 1))
 		return 0;
 
 	/* binary search in table of double width characters */
-	if (bisearch(ch, double_width, sizeof(double_width)
-				/ sizeof(struct interval) - 1))
+	if (bisearch(ch, double_width, ARRAY_SIZE(double_width) - 1))
 		return 2;
 
 	return 1;
diff --git a/wrapper.c b/wrapper.c
index 1e45ab7..e1eaef2 100644
--- a/wrapper.c
+++ b/wrapper.c
@@ -4,12 +4,6 @@
 #include "cache.h"
 #include "config.h"
 
-static void do_nothing(size_t size)
-{
-}
-
-static void (*try_to_free_routine)(size_t size) = do_nothing;
-
 static int memory_limit_check(size_t size, int gentle)
 {
 	static size_t limit = 0;
@@ -30,24 +24,11 @@
 	return 0;
 }
 
-try_to_free_t set_try_to_free_routine(try_to_free_t routine)
-{
-	try_to_free_t old = try_to_free_routine;
-	if (!routine)
-		routine = do_nothing;
-	try_to_free_routine = routine;
-	return old;
-}
-
 char *xstrdup(const char *str)
 {
 	char *ret = strdup(str);
-	if (!ret) {
-		try_to_free_routine(strlen(str) + 1);
-		ret = strdup(str);
-		if (!ret)
-			die("Out of memory, strdup failed");
-	}
+	if (!ret)
+		die("Out of memory, strdup failed");
 	return ret;
 }
 
@@ -61,19 +42,13 @@
 	if (!ret && !size)
 		ret = malloc(1);
 	if (!ret) {
-		try_to_free_routine(size);
-		ret = malloc(size);
-		if (!ret && !size)
-			ret = malloc(1);
-		if (!ret) {
-			if (!gentle)
-				die("Out of memory, malloc failed (tried to allocate %lu bytes)",
-				    (unsigned long)size);
-			else {
-				error("Out of memory, malloc failed (tried to allocate %lu bytes)",
-				      (unsigned long)size);
-				return NULL;
-			}
+		if (!gentle)
+			die("Out of memory, malloc failed (tried to allocate %lu bytes)",
+			    (unsigned long)size);
+		else {
+			error("Out of memory, malloc failed (tried to allocate %lu bytes)",
+			      (unsigned long)size);
+			return NULL;
 		}
 	}
 #ifdef XMALLOC_POISON
@@ -138,14 +113,8 @@
 	ret = realloc(ptr, size);
 	if (!ret && !size)
 		ret = realloc(ptr, 1);
-	if (!ret) {
-		try_to_free_routine(size);
-		ret = realloc(ptr, size);
-		if (!ret && !size)
-			ret = realloc(ptr, 1);
-		if (!ret)
-			die("Out of memory, realloc failed");
-	}
+	if (!ret)
+		die("Out of memory, realloc failed");
 	return ret;
 }
 
@@ -160,14 +129,8 @@
 	ret = calloc(nmemb, size);
 	if (!ret && (!nmemb || !size))
 		ret = calloc(1, 1);
-	if (!ret) {
-		try_to_free_routine(nmemb * size);
-		ret = calloc(nmemb, size);
-		if (!ret && (!nmemb || !size))
-			ret = calloc(1, 1);
-		if (!ret)
-			die("Out of memory, calloc failed");
-	}
+	if (!ret)
+		die("Out of memory, calloc failed");
 	return ret;
 }
 
@@ -478,7 +441,9 @@
 		"abcdefghijklmnopqrstuvwxyz"
 		"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 		"0123456789";
-	static const int num_letters = 62;
+	static const int num_letters = ARRAY_SIZE(letters) - 1;
+	static const char x_pattern[] = "XXXXXX";
+	static const int num_x = ARRAY_SIZE(x_pattern) - 1;
 	uint64_t value;
 	struct timeval tv;
 	char *filename_template;
@@ -487,12 +452,12 @@
 
 	len = strlen(pattern);
 
-	if (len < 6 + suffix_len) {
+	if (len < num_x + suffix_len) {
 		errno = EINVAL;
 		return -1;
 	}
 
-	if (strncmp(&pattern[len - 6 - suffix_len], "XXXXXX", 6)) {
+	if (strncmp(&pattern[len - num_x - suffix_len], x_pattern, num_x)) {
 		errno = EINVAL;
 		return -1;
 	}
@@ -503,16 +468,15 @@
 	 */
 	gettimeofday(&tv, NULL);
 	value = ((uint64_t)tv.tv_usec << 16) ^ tv.tv_sec ^ getpid();
-	filename_template = &pattern[len - 6 - suffix_len];
+	filename_template = &pattern[len - num_x - suffix_len];
 	for (count = 0; count < TMP_MAX; ++count) {
 		uint64_t v = value;
+		int i;
 		/* Fill in the random bits. */
-		filename_template[0] = letters[v % num_letters]; v /= num_letters;
-		filename_template[1] = letters[v % num_letters]; v /= num_letters;
-		filename_template[2] = letters[v % num_letters]; v /= num_letters;
-		filename_template[3] = letters[v % num_letters]; v /= num_letters;
-		filename_template[4] = letters[v % num_letters]; v /= num_letters;
-		filename_template[5] = letters[v % num_letters]; v /= num_letters;
+		for (i = 0; i < num_x; i++) {
+			filename_template[i] = letters[v % num_letters];
+			v /= num_letters;
+		}
 
 		fd = open(pattern, O_CREAT | O_EXCL | O_RDWR, mode);
 		if (fd >= 0)
diff --git a/wt-status.c b/wt-status.c
index 9f6c65a..cc6f945 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -1434,6 +1434,8 @@
 			status_printf_ln(s, color,
 				_("  (all conflicts fixed: run \"git cherry-pick --continue\")"));
 		status_printf_ln(s, color,
+			_("  (use \"git cherry-pick --skip\" to skip this patch)"));
+		status_printf_ln(s, color,
 			_("  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"));
 	}
 	wt_longstatus_print_trailer(s);
@@ -1461,6 +1463,8 @@
 			status_printf_ln(s, color,
 				_("  (all conflicts fixed: run \"git revert --continue\")"));
 		status_printf_ln(s, color,
+			_("  (use \"git revert --skip\" to skip this patch)"));
+		status_printf_ln(s, color,
 			_("  (use \"git revert --abort\" to cancel the revert operation)"));
 	}
 	wt_longstatus_print_trailer(s);
@@ -2025,7 +2029,7 @@
 	char eol = s->null_termination ? '\0' : '\n';
 
 	fprintf(s->fp, "# branch.oid %s%c",
-			(s->is_initial ? "(initial)" : sha1_to_hex(s->sha1_commit)),
+			(s->is_initial ? "(initial)" : oid_to_hex(&s->oid_commit)),
 			eol);
 
 	if (!s->branch)
diff --git a/wt-status.h b/wt-status.h
index 77dad5b..71c3f25 100644
--- a/wt-status.h
+++ b/wt-status.h
@@ -116,7 +116,7 @@
 	int rename_limit;
 	enum wt_status_format status_format;
 	struct wt_status_state state;
-	unsigned char sha1_commit[GIT_MAX_RAWSZ]; /* when not Initial */
+	struct object_id oid_commit; /* when not Initial */
 
 	/* These are computed during processing of the individual sections */
 	int committable;
diff --git a/xdiff/xdiffi.c b/xdiff/xdiffi.c
index 1f1f4a3..bd03513 100644
--- a/xdiff/xdiffi.c
+++ b/xdiff/xdiffi.c
@@ -38,9 +38,9 @@
  * Basically considers a "box" (off1, off2, lim1, lim2) and scan from both
  * the forward diagonal starting from (off1, off2) and the backward diagonal
  * starting from (lim1, lim2). If the K values on the same diagonal crosses
- * returns the furthest point of reach. We might end up having to expensive
- * cases using this algorithm is full, so a little bit of heuristic is needed
- * to cut the search and to return a suboptimal point.
+ * returns the furthest point of reach. We might encounter expensive edge cases
+ * using this algorithm, so a little bit of heuristic is needed to cut the
+ * search and to return a suboptimal point.
  */
 static long xdl_split(unsigned long const *ha1, long off1, long lim1,
 		      unsigned long const *ha2, long off2, long lim2,
@@ -63,11 +63,13 @@
 		int got_snake = 0;
 
 		/*
-		 * We need to extent the diagonal "domain" by one. If the next
+		 * We need to extend the diagonal "domain" by one. If the next
 		 * values exits the box boundaries we need to change it in the
-		 * opposite direction because (max - min) must be a power of two.
+		 * opposite direction because (max - min) must be a power of
+		 * two.
+		 *
 		 * Also we initialize the external K value to -1 so that we can
-		 * avoid extra conditions check inside the core loop.
+		 * avoid extra conditions in the check inside the core loop.
 		 */
 		if (fmin > dmin)
 			kvdf[--fmin - 1] = -1;
@@ -98,11 +100,13 @@
 		}
 
 		/*
-		 * We need to extent the diagonal "domain" by one. If the next
+		 * We need to extend the diagonal "domain" by one. If the next
 		 * values exits the box boundaries we need to change it in the
-		 * opposite direction because (max - min) must be a power of two.
+		 * opposite direction because (max - min) must be a power of
+		 * two.
+		 *
 		 * Also we initialize the external K value to -1 so that we can
-		 * avoid extra conditions check inside the core loop.
+		 * avoid extra conditions in the check inside the core loop.
 		 */
 		if (bmin > dmin)
 			kvdb[--bmin - 1] = XDL_LINE_MAX;
@@ -138,7 +142,7 @@
 		/*
 		 * If the edit cost is above the heuristic trigger and if
 		 * we got a good snake, we sample current diagonals to see
-		 * if some of the, have reached an "interesting" path. Our
+		 * if some of them have reached an "interesting" path. Our
 		 * measure is a function of the distance from the diagonal
 		 * corner (i1 + i2) penalized with the distance from the
 		 * mid diagonal itself. If this value is above the current
@@ -196,8 +200,9 @@
 		}
 
 		/*
-		 * Enough is enough. We spent too much time here and now we collect
-		 * the furthest reaching path using the (i1 + i2) measure.
+		 * Enough is enough. We spent too much time here and now we
+		 * collect the furthest reaching path using the (i1 + i2)
+		 * measure.
 		 */
 		if (ec >= xenv->mxcost) {
 			long fbest, fbest1, bbest, bbest1;
@@ -244,9 +249,9 @@
 
 
 /*
- * Rule: "Divide et Impera". Recursively split the box in sub-boxes by calling
- * the box splitting function. Note that the real job (marking changed lines)
- * is done in the two boundary reaching checks.
+ * Rule: "Divide et Impera" (divide & conquer). Recursively split the box in
+ * sub-boxes by calling the box splitting function. Note that the real job
+ * (marking changed lines) is done in the two boundary reaching checks.
  */
 int xdl_recs_cmp(diffdata_t *dd1, long off1, long lim1,
 		 diffdata_t *dd2, long off2, long lim2,
@@ -323,7 +328,9 @@
 	}
 
 	/*
-	 * Allocate and setup K vectors to be used by the differential algorithm.
+	 * Allocate and setup K vectors to be used by the differential
+	 * algorithm.
+	 *
 	 * One is to store the forward path and one to store the backward path.
 	 */
 	ndiags = xe->xdf1.nreff + xe->xdf2.nreff + 3;
@@ -394,8 +401,8 @@
 /*
  * If a line is indented more than this, get_indent() just returns this value.
  * This avoids having to do absurd amounts of work for data that are not
- * human-readable text, and also ensures that the output of get_indent fits within
- * an int.
+ * human-readable text, and also ensures that the output of get_indent fits
+ * within an int.
  */
 #define MAX_INDENT 200
 
@@ -429,9 +436,9 @@
 }
 
 /*
- * If more than this number of consecutive blank rows are found, just return this
- * value. This avoids requiring O(N^2) work for pathological cases, and also
- * ensures that the output of score_split fits in an int.
+ * If more than this number of consecutive blank rows are found, just return
+ * this value. This avoids requiring O(N^2) work for pathological cases, and
+ * also ensures that the output of score_split fits in an int.
  */
 #define MAX_BLANKS 20
 
@@ -443,8 +450,8 @@
 	int end_of_file;
 
 	/*
-	 * How much is the line immediately following the split indented (or -1 if
-	 * the line is blank):
+	 * How much is the line immediately following the split indented (or -1
+	 * if the line is blank):
 	 */
 	int indent;
 
@@ -454,8 +461,8 @@
 	int pre_blank;
 
 	/*
-	 * How much is the nearest non-blank line above the split indented (or -1
-	 * if there is no such line)?
+	 * How much is the nearest non-blank line above the split indented (or
+	 * -1 if there is no such line)?
 	 */
 	int pre_indent;
 
@@ -581,13 +588,13 @@
 
 /*
  * Compute a badness score for the hypothetical split whose measurements are
- * stored in m. The weight factors were determined empirically using the tools and
- * corpus described in
+ * stored in m. The weight factors were determined empirically using the tools
+ * and corpus described in
  *
  *     https://github.com/mhagger/diff-slider-tools
  *
- * Also see that project if you want to improve the weights based on, for example,
- * a larger or more diverse corpus.
+ * Also see that project if you want to improve the weights based on, for
+ * example, a larger or more diverse corpus.
  */
 static void score_add_split(const struct split_measurement *m, struct split_score *s)
 {
@@ -809,13 +816,16 @@
 	group_init(xdfo, &go);
 
 	while (1) {
-		/* If the group is empty in the to-be-compacted file, skip it: */
+		/*
+		 * If the group is empty in the to-be-compacted file, skip it:
+		 */
 		if (g.end == g.start)
 			goto next;
 
 		/*
 		 * Now shift the change up and then down as far as possible in
-		 * each direction. If it bumps into any other changes, merge them.
+		 * each direction. If it bumps into any other changes, merge
+		 * them.
 		 */
 		do {
 			groupsize = g.end - g.start;
@@ -858,17 +868,17 @@
 		 * If the group can be shifted, then we can possibly use this
 		 * freedom to produce a more intuitive diff.
 		 *
-		 * The group is currently shifted as far down as possible, so the
-		 * heuristics below only have to handle upwards shifts.
+		 * The group is currently shifted as far down as possible, so
+		 * the heuristics below only have to handle upwards shifts.
 		 */
 
 		if (g.end == earliest_end) {
 			/* no shifting was possible */
 		} else if (end_matching_other != -1) {
 			/*
-			 * Move the possibly merged group of changes back to line
-			 * up with the last group of changes from the other file
-			 * that it can align with.
+			 * Move the possibly merged group of changes back to
+			 * line up with the last group of changes from the
+			 * other file that it can align with.
 			 */
 			while (go.end == go.start) {
 				if (group_slide_up(xdf, &g, flags))
@@ -879,14 +889,15 @@
 		} else if (flags & XDF_INDENT_HEURISTIC) {
 			/*
 			 * Indent heuristic: a group of pure add/delete lines
-			 * implies two splits, one between the end of the "before"
-			 * context and the start of the group, and another between
-			 * the end of the group and the beginning of the "after"
-			 * context. Some splits are aesthetically better and some
-			 * are worse. We compute a badness "score" for each split,
-			 * and add the scores for the two splits to define a
-			 * "score" for each position that the group can be shifted
-			 * to. Then we pick the shift with the lowest score.
+			 * implies two splits, one between the end of the
+			 * "before" context and the start of the group, and
+			 * another between the end of the group and the
+			 * beginning of the "after" context. Some splits are
+			 * aesthetically better and some are worse. We compute
+			 * a badness "score" for each split, and add the scores
+			 * for the two splits to define a "score" for each
+			 * position that the group can be shifted to. Then we
+			 * pick the shift with the lowest score.
 			 */
 			long shift, best_shift = -1;
 			struct split_score best_score;